From 3925dd8431db0bed8473ebb0247f2c842b1ac8e8 Mon Sep 17 00:00:00 2001 From: jesonhu Date: Thu, 26 Mar 2020 17:06:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=97=AE=E9=A2=98.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/cMdEditor.css | 1 + dist/cMdEditor.js | 20 ++++++++++++++++++++ dist/index.html | 47 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 6 +++--- src/index.html | 6 +++--- src/index.js | 8 +++++--- src/util/Util.js | 6 ++++-- 7 files changed, 83 insertions(+), 11 deletions(-) create mode 100644 dist/cMdEditor.css create mode 100644 dist/cMdEditor.js create mode 100644 dist/index.html diff --git a/dist/cMdEditor.css b/dist/cMdEditor.css new file mode 100644 index 0000000..6caca88 --- /dev/null +++ b/dist/cMdEditor.css @@ -0,0 +1 @@ +:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6,p{margin-top:0}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote{margin:0}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.clearfix:after{display:block;content:"";clear:both}.one-line-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a,a:active,a:hover,a:link,a:visited{text-decoration:none}@media (-webkit-max-device-pixel-ratio:1){.CodeMirror-vscrollbar::-webkit-scrollbar,.cool-md-editor-wrap .editor-md::-webkit-scrollbar,.cool-md-editor-wrap .editor-preview::-webkit-scrollbar{width:6px;height:6px}.CodeMirror-vscrollbar::-webkit-scrollbar-thumb,.cool-md-editor-wrap .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap .editor-preview::-webkit-scrollbar-thumb{background-clip:padding-box;min-height:28px}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-track-piece,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-track-piece,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-track-piece{background-color:#fff}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-thumb,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background-color:#c2c2c2}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-thumb:hover,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-thumb:hover,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a0}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-track-piece,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-track-piece,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-track-piece{background-color:#fff}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-thumb,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background-color:#c2c2c2}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-thumb:hover,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-thumb:hover,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a0}}.cool-md-editor-wrap .editor-tools{position:absolute;left:0;top:0;width:100%;height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 10px}.cool-md-editor-wrap .editor-tools .editor-tools-handle,.cool-md-editor-wrap .editor-tools .editor-tools-main{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.cool-md-editor-wrap .editor-tools .editor-tools-handle>*,.cool-md-editor-wrap .editor-tools .editor-tools-main>*{width:30px;height:30px;text-align:center;line-height:30px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid transparent;border-radius:3px;margin-left:3px}.cool-md-editor-wrap .editor-tools .editor-tools-handle>:hover,.cool-md-editor-wrap .editor-tools .editor-tools-main>:hover{cursor:pointer}.cool-md-editor-wrap .editor-tools .editor-tools-main{-webkit-box-flex:70%;-ms-flex:70%;flex:70%}.cool-md-editor-wrap .editor-tools .editor-tools-main .editor-tools-division{width:13px;height:30px;line-height:25px;text-align:center;border:none;margin:0;cursor:auto}.cool-md-editor-wrap .editor-tools .editor-tools-handle{-webkit-box-flex:30%;-ms-flex:30%;flex:30%;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.editor-theme-light .editor-tools{background-color:#d2d2d2}.editor-theme-light .editor-tools .editor-tools-handle>*,.editor-theme-light .editor-tools .editor-tools-main>*{color:#202020}.editor-theme-light .editor-tools .editor-tools-handle>.active,.editor-theme-light .editor-tools .editor-tools-main>.active{border-color:#202020}.editor-theme-light .editor-tools .editor-tools-main span[data-name=redo],.editor-theme-light .editor-tools .editor-tools-main span[data-name=undo]{color:#ebebeb}.editor-theme-light .editor-tools .editor-tools-main span[data-name=redo].canActive,.editor-theme-light .editor-tools .editor-tools-main span[data-name=undo].canActive{color:#202020}.editor-theme-light .editor-tools .editor-tools-main .editor-tools-division{color:#858585}.editor-theme-dark .editor-tools{background-color:#333}.editor-theme-dark .editor-tools .editor-tools-handle>*,.editor-theme-dark .editor-tools .editor-tools-main>*{color:#e5e5e5}.editor-theme-dark .editor-tools .editor-tools-handle>.active,.editor-theme-dark .editor-tools .editor-tools-main>.active{border-color:#e5e5e5}.editor-theme-dark .editor-tools .editor-tools-main span[data-name=redo],.editor-theme-dark .editor-tools .editor-tools-main span[data-name=undo]{color:#4d4d4d}.editor-theme-dark .editor-tools .editor-tools-main span[data-name=redo].canActive,.editor-theme-dark .editor-tools .editor-tools-main span[data-name=undo].canActive{color:#e5e5e5}.editor-theme-dark .editor-tools .editor-tools-main .editor-tools-division{color:grey}.editor-theme-dark .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.editor-theme-dark .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.editor-theme-dark .cm-s-base16-dark .CodeMirror-line::selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span::selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.editor-theme-dark .cm-s-base16-dark .CodeMirror-line::-moz-selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.editor-theme-dark .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0}.editor-theme-dark .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.editor-theme-dark .cm-s-base16-dark .CodeMirror-guttermarker-subtle,.editor-theme-dark .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.editor-theme-dark .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.editor-theme-dark .cm-s-base16-dark span.cm-comment{color:#8f5536}.editor-theme-dark .cm-s-base16-dark span.cm-atom,.editor-theme-dark .cm-s-base16-dark span.cm-number{color:#aa759f}.editor-theme-dark .cm-s-base16-dark span.cm-attribute,.editor-theme-dark .cm-s-base16-dark span.cm-property{color:#90a959}.editor-theme-dark .cm-s-base16-dark span.cm-keyword{color:#ac4142}.editor-theme-dark .cm-s-base16-dark span.cm-string{color:#f4bf75}.editor-theme-dark .cm-s-base16-dark span.cm-variable{color:#90a959}.editor-theme-dark .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.editor-theme-dark .cm-s-base16-dark span.cm-def{color:#d28445}.editor-theme-dark .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.editor-theme-dark .cm-s-base16-dark span.cm-tag{color:#ac4142}.editor-theme-dark .cm-s-base16-dark span.cm-link{color:#aa759f}.editor-theme-dark .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.editor-theme-dark .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.editor-theme-dark .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.editor-theme-dark .hljs-name{color:navy;font-weight:400}.editor-theme-dark .hljs-attr,.editor-theme-dark .hljs-built_in,.editor-theme-dark .hljs-literal,.editor-theme-dark .hljs-number,.editor-theme-dark .hljs-template-variable,.editor-theme-dark .hljs-variable{color:teal}.editor-theme-dark .hljs-tag{color:#222}.editor-theme-dark .hljs-doctag,.editor-theme-dark .hljs-string{color:#d14}.editor-theme-dark .hljs-attribute,.editor-theme-dark .hljs-symbol{color:#da8910}.editor-theme-light .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.editor-theme-light .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-line::selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span::selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-line::-moz-selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0}.editor-theme-light .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.editor-theme-light .cm-s-base16-light .CodeMirror-guttermarker-subtle,.editor-theme-light .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.editor-theme-light .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.editor-theme-light .cm-s-base16-light span.cm-comment{color:#8f5536}.editor-theme-light .cm-s-base16-light span.cm-atom,.editor-theme-light .cm-s-base16-light span.cm-number{color:#aa759f}.editor-theme-light .cm-s-base16-light span.cm-attribute,.editor-theme-light .cm-s-base16-light span.cm-property{color:#90a959}.editor-theme-light .cm-s-base16-light span.cm-keyword{color:#ac4142}.editor-theme-light .cm-s-base16-light span.cm-string{color:#f4bf75}.editor-theme-light .cm-s-base16-light span.cm-variable{color:#90a959}.editor-theme-light .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.editor-theme-light .cm-s-base16-light span.cm-def{color:#d28445}.editor-theme-light .cm-s-base16-light span.cm-bracket{color:#202020}.editor-theme-light .cm-s-base16-light span.cm-tag{color:#ac4142}.editor-theme-light .cm-s-base16-light span.cm-link{color:#aa759f}.editor-theme-light .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.editor-theme-light .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.editor-theme-light .cm-s-base16-light .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.editor-theme-light .hljs-name{color:navy;font-weight:400}.editor-theme-light .hljs-attr,.editor-theme-light .hljs-built_in,.editor-theme-light .hljs-literal,.editor-theme-light .hljs-number,.editor-theme-light .hljs-template-variable,.editor-theme-light .hljs-variable{color:teal}.editor-theme-light .hljs-tag{color:#222}.editor-theme-light .hljs-doctag,.editor-theme-light .hljs-string{color:#d14}.editor-theme-light .hljs-attribute,.editor-theme-light .hljs-symbol{color:#da8910}.cool-md-editor-wrap .editor-md{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.cool-md-editor-wrap .editor-md .CodeMirror,.cool-md-editor-wrap .editor-md form{height:100%}.cool-md-editor-wrap .editor-md.hide{display:none}.editor-theme-dark .editor-md,.editor-theme-light .editor-md{background-color:#d2d2d2}.cool-md-editor-wrap .editor-preview{padding-left:5px;height:100%;overflow:hidden;overflow-y:scroll}.cool-md-editor-wrap .editor-preview.hide{display:none}.cool-md-editor-wrap .editor-preview .markdown-body{min-height:100%;border:none}.cool-md-editor-wrap .editor-preview .markdown-body h1>code,.cool-md-editor-wrap .editor-preview .markdown-body h2>code,.cool-md-editor-wrap .editor-preview .markdown-body h3>code,.cool-md-editor-wrap .editor-preview .markdown-body h4>code,.cool-md-editor-wrap .editor-preview .markdown-body h5>code,.cool-md-editor-wrap .editor-preview .markdown-body h6>code,.cool-md-editor-wrap .editor-preview .markdown-body li>code,.cool-md-editor-wrap .editor-preview .markdown-body p>code,.cool-md-editor-wrap .editor-preview .markdown-body ul>code{background-color:#f9f2f4;color:#d02572}.cool-md-editor-wrap .editor-preview .markdown-body a{color:#0269c8;border-bottom:1px solid #d1e9ff}.cool-md-editor-wrap .editor-preview .markdown-body pre{border:1px solid #dce6f0;border-radius:.3rem;background-color:#eee}.cool-md-editor-wrap .editor-preview .markdown-body img{max-width:100%;-webkit-box-shadow:none;box-shadow:none}.editor-theme-dark .editor-preview,.editor-theme-light .editor-preview .preview-bd{background-color:#fff}.cool-md-editor-wrap .editor-status{position:absolute;left:0;bottom:0;width:100%;height:30px;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:30px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 10px}.cool-md-editor-wrap .editor-status .editor-status-positon{width:80%;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-right:10px}.cool-md-editor-wrap .editor-status .editor-status-positon .icon-theme{width:45px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;border-left:1px solid transparent;border-right:1px solid transparent;cursor:pointer}.cool-md-editor-wrap .editor-status .editor-status-length{width:20%}.editor-theme-light .editor-status{background-color:#d2d2d2}.editor-theme-light .editor-status .editor-status-positon .icon-theme{border-left-color:#c7bebe;border-right-color:#c7bebe}.editor-theme-dark .editor-status{background-color:#333;color:#fff}.editor-theme-dark .editor-status .editor-status-positon .icon-theme{border-left-color:#fff;border-right-color:#fff}.cool-md-editor-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;width:100%;height:100%;padding-top:50px;padding-bottom:30px;border-radius:3px;font-size:16px;border-left:1px solid transparent;border-right:1px solid transparent}.cool-md-editor-wrap .editor-md,.cool-md-editor-wrap .editor-preview{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%}.cool-md-editor-wrap.fullscreen{position:fixed;width:100%;height:100%;top:0;left:0;margin:0;z-index:9999}.cool-md-editor-wrap.only-markdown .editor-code,.cool-md-editor-wrap.show-all .editor-code,.cool-md-editor-wrap.show-all .editor-preview{display:block}.cool-md-editor-wrap.only-markdown .editor-preview,.cool-md-editor-wrap.only-preview .editor-code,.cool-md-editor-wrap.only-preview .editor-preview{display:none}.cool-md-editor-wrap.editor-theme-light{border-left-color:#d2d2d2;border-right-color:#d2d2d2}.cool-md-editor-wrap.editor-theme-dark{border-left-color:#333;border-right-color:#333}.margin-tb-zero,.markdown-body ol ol,.markdown-body ol ul,.markdown-body ol ul ol,.markdown-body ol ul ul,.markdown-body ul ol,.markdown-body ul ul,.markdown-body ul ul ol,.markdown-body ul ul ul{margin-top:0;margin-bottom:0}.markdown-body{font-family:Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;color:#333;line-height:1.6;word-wrap:break-word;padding:45px;background:#fff;border:1px solid #ddd;border-radius:0 0 3px 3px}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body *{-webkit-box-sizing:border-box;box-sizing:border-box}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body h1{margin:.67em 0;font-size:2.25em;line-height:1.2}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h4{font-size:1.25em}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ul,.markdown-body ul ul{list-style-type:circle}.markdown-body ol ul ul,.markdown-body ul ul ul{list-style-type:square}.markdown-body ol{list-style-type:decimal}.markdown-body ul{list-style-type:disc}.markdown-body blockquote{margin-left:0;margin-right:0;padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all;border-collapse:collapse;border-spacing:0}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body pre{word-wrap:normal;padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code{display:inline;max-width:none;padding:0;margin:0;overflow:initial;font-size:100%;line-height:inherit;word-wrap:normal;white-space:pre;border:0;border-radius:3px;background-color:transparent}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body code{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\A0"}.markdown-body a{color:#4078c0;text-decoration:none;background:transparent}.markdown-body img{max-width:100%;max-height:100%;border-radius:4px;-webkit-box-shadow:0 0 10px #555;box-shadow:0 0 10px #555}.markdown-body strong{font-weight:700}.markdown-body em{font-style:italic}.markdown-body del{text-decoration:line-through}.task-list-item{list-style-type:none}.task-list-item input{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;margin:0 .35em .25em -1.6em;vertical-align:middle}.task-list-item input[disabled]{cursor:default}.task-list-item input[type=checkbox],.task-list-item input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.markdown-body{padding:10px}[class*=" icon-"],[class^=icon-]{font-family:iconfont!important;font-size:100%;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e} \ No newline at end of file diff --git a/dist/cMdEditor.js b/dist/cMdEditor.js new file mode 100644 index 0000000..c91c32d --- /dev/null +++ b/dist/cMdEditor.js @@ -0,0 +1,20 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CMdEditor=t():e.CMdEditor=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=19)}([function(e,t,n){"use strict";var r=n(5),i="object"==typeof self&&self&&self.Object===Object&&self,a=r.a||i||Function("return this")();t.a=a},function(e,t,n){e.exports=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),a=/Edge\/(\d+)/.exec(e),o=r||i||a,s=o&&(r?document.documentMode||6:+(a||i)[1]),l=!a&&/WebKit\//.test(e),c=l&&/Qt\/\d+\.\d+/.test(e),d=!a&&/Chrome\//.test(e),u=/Opera\//.test(e),_=/Apple Computer/.test(navigator.vendor),p=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),m=/PhantomJS/.test(e),g=!a&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),f=/Android/.test(e),E=g||f||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),S=g||/Mac/.test(t),h=/\bCrOS\b/.test(e),b=/win/i.test(t),v=u&&e.match(/Version\/(\d*\.\d*)/);v&&(v=Number(v[1])),v&&v>=15&&(u=!1,l=!0);var T=S&&(c||u&&(null==v||v<12.11)),C=n||o&&s>=9;function y(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var O,N=function(e,t){var n=e.className,r=y(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function R(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function A(e,t){return R(e).appendChild(t)}function I(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var a=0;a=t)return o+(t-a);o+=s-a,o+=n-o%n,a=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:o&&(P=function(e){try{e.select()}catch(e){}});var B=function(){this.id=null,this.f=null,this.time=0,this.handler=k(this.onTimeout,this)};function G(e,t){for(var n=0;n=t)return r+Math.min(o,t-i);if(i+=a-r,r=a+1,(i+=n-i%n)>=t)return r}}var W=[""];function j(e){for(;W.length<=e;)W.push($(W)+" ");return W[e]}function $(e){return e[e.length-1]}function Q(e,t){for(var n=[],r=0;r"€"&&(e.toUpperCase()!=e.toLowerCase()||Z.test(e))}function ee(e,t){return t?!!(t.source.indexOf("\\w")>-1&&J(e))||t.test(e):J(e)}function te(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function re(e){return e.charCodeAt(0)>=768&&ne.test(e)}function ie(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,a=r<0?Math.ceil(i):Math.floor(i);if(a==t)return e(a)?t:n;e(a)?n=a:t=a+r}}var oe=null;function se(e,t,n){var r;oe=null;for(var i=0;it)return i;a.to==t&&(a.from!=a.to&&"before"==n?r=i:oe=i),a.from==t&&(a.from!=a.to&&"before"!=n?r=i:oe=i)}return null!=r?r:oe}var le=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,n=/[LRr]/,r=/[Lb1n]/,i=/[1n]/;function a(e,t,n){this.level=e,this.from=t,this.to=n}return function(o,s){var l="ltr"==s?"L":"R";if(0==o.length||"ltr"==s&&!e.test(o))return!1;for(var c,d=o.length,u=[],_=0;_-1&&(r[t]=i.slice(0,a).concat(i.slice(a+1)))}}}function me(e,t){var n=_e(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function Se(e){e.prototype.on=function(e,t){ue(this,e,t)},e.prototype.off=function(e,t){pe(this,e,t)}}function he(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function be(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ve(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Te(e){he(e),be(e)}function Ce(e){return e.target||e.srcElement}function ye(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),S&&e.ctrlKey&&1==t&&(t=3),t}var Oe,Ne,Re=function(){if(o&&s<9)return!1;var e=I("div");return"draggable"in e||"dragDrop"in e}();function Ae(e){if(null==Oe){var t=I("span","​");A(e,I("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Oe=t.offsetWidth<=1&&t.offsetHeight>2&&!(o&&s<8))}var n=Oe?I("span","​"):I("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ie(e){if(null!=Ne)return Ne;var t=A(e,document.createTextNode("AخA")),n=O(t,0,1).getBoundingClientRect(),r=O(t,1,2).getBoundingClientRect();return R(e),!(!n||n.left==n.right)&&(Ne=r.right-n.right<3)}var xe,De=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var a=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),o=a.indexOf("\r");-1!=o?(n.push(a.slice(0,o)),t+=o+1):(n.push(a),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},we=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Me="oncopy"in(xe=I("div"))||(xe.setAttribute("oncopy","return;"),"function"==typeof xe.oncopy),Le=null,Pe={},ke={};function Fe(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Pe[e]=t}function Ue(e){if("string"==typeof e&&ke.hasOwnProperty(e))e=ke[e];else if(e&&"string"==typeof e.name&&ke.hasOwnProperty(e.name)){var t=ke[e.name];"string"==typeof t&&(t={name:t}),(e=X(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ue("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ue("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Be(e,t){t=Ue(t);var n=Pe[t.name];if(!n)return Be(e,"text/plain");var r=n(e,t);if(Ge.hasOwnProperty(t.name)){var i=Ge[t.name];for(var a in i)i.hasOwnProperty(a)&&(r.hasOwnProperty(a)&&(r["_"+a]=r[a]),r[a]=i[a])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var o in t.modeProps)r[o]=t.modeProps[o];return r}var Ge={};function Ye(e,t){F(t,Ge.hasOwnProperty(e)?Ge[e]:Ge[e]={})}function He(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function qe(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function ze(e,t,n){return!e.startState||e.startState(t,n)}var Ve=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function We(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],a=i.chunkSize();if(t=e.first&&tn?et(n,We(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?et(e.line,t):n<0?et(e.line,0):e}(t,We(e,t.line).text.length)}function lt(e,t){for(var n=[],r=0;r=this.string.length},Ve.prototype.sol=function(){return this.pos==this.lineStart},Ve.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ve.prototype.next=function(){if(this.post},Ve.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ve.prototype.skipToEnd=function(){this.pos=this.string.length},Ve.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ve.prototype.backUp=function(e){this.pos-=e},Ve.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ve.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ve.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ve.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ve.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ct=function(e,t){this.state=e,this.lookAhead=t},dt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function ut(e,t,n,r){var i=[e.state.modeGen],a={};bt(e,t.text,e.doc.mode,n,(function(e,t){return i.push(e,t)}),a,r);for(var o=n.state,s=function(r){n.baseTokens=i;var s=e.state.overlays[r],l=1,c=0;n.state=!0,bt(e,t.text,s.mode,n,(function(e,t){for(var n=l;ce&&i.splice(l,1,e,i[l+1],r),l+=2,c=Math.min(e,r)}if(t)if(s.opaque)i.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;ne.options.maxHighlightLength&&He(e.doc.mode,r.state),a=ut(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=a.styles,a.classes?t.styleClasses=a.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function pt(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new dt(r,!0,t);var a=function(e,t,n){for(var r,i,a=e.doc,o=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>o;--s){if(s<=a.first)return a.first;var l=We(a,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof ct?c.lookAhead:0)<=a.modeFrontier))return s;var d=U(l.text,null,e.options.tabSize);(null==i||r>d)&&(i=s-1,r=d)}return i}(e,t,n),o=a>r.first&&We(r,a-1).stateAfter,s=o?dt.fromSaved(r,o,a):new dt(r,ze(r.mode),a);return r.iter(a,t,(function(n){mt(e,n.text,s);var r=s.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&rt.start)return a}throw new Error("Mode "+e.name+" failed to advance stream.")}dt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},dt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},dt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},dt.fromSaved=function(e,t,n){return t instanceof ct?new dt(e,He(e.mode,t.state),n,t.lookAhead):new dt(e,He(e.mode,t),n)},dt.prototype.save=function(e){var t=!1!==e?He(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ct(t,this.maxLookAhead):t};var Et=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function St(e,t,n,r){var i,a,o=e.doc,s=o.mode,l=We(o,(t=st(o,t)).line),c=pt(e,t.line,n),d=new Ve(l.text,e.options.tabSize,c);for(r&&(a=[]);(r||d.pose.options.maxHighlightLength?(s=!1,o&&mt(e,t,r,u.pos),u.pos=t.length,l=null):l=ht(ft(n,u,r.state,_),a),_){var p=_[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||d!=l){for(;c=t:a.to>t);(r||(r=[])).push(new Ct(o,a.from,s?null:a.to))}}return r}(n,i,o),l=function(e,t,n){var r;if(e)for(var i=0;i=t:a.to>t)||a.from==t&&"bookmark"==o.type&&(!n||a.marker.insertLeft)){var s=null==a.from||(o.inclusiveLeft?a.from<=t:a.from0&&s)for(var h=0;ht)&&(!n||wt(n,a.marker)<0)&&(n=a.marker)}return n}function Ft(e,t,n,r,i){var a=We(e,t),o=Tt&&a.markedSpans;if(o)for(var s=0;s=0&&u<=0||d<=0&&u>=0)&&(d<=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?tt(c.to,n)>=0:tt(c.to,n)>0)||d>=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?tt(c.from,r)<=0:tt(c.from,r)<0)))return!0}}}function Ut(e){for(var t;t=Lt(e);)e=t.find(-1,!0).line;return e}function Bt(e,t){var n=We(e,t),r=Ut(n);return n==r?t:Ke(r)}function Gt(e,t){if(t>e.lastLine())return t;var n,r=We(e,t);if(!Yt(e,r))return t;for(;n=Pt(r);)r=n.find(1,!0).line;return Ke(r)+1}function Yt(e,t){var n=Tt&&t.markedSpans;if(n)for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var Wt=function(e,t,n){this.text=e,It(this,t),this.height=n?n(this):1};function jt(e){e.parent=null,At(e)}Wt.prototype.lineNo=function(){return Ke(this)},Se(Wt);var $t={},Qt={};function Kt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Qt:$t;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Xt(e,t){var n=x("span",null,null,l?"padding-right: .1px":null),r={pre:x("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var a=i?t.rest[i-1]:t.line,o=void 0;r.pos=0,r.addToken=Jt,Ie(e.display.measure)&&(o=ce(a,e.doc.direction))&&(r.addToken=en(r.addToken,o)),r.map=[],nn(a,r,_t(e,a,t!=e.display.externalMeasured&&Ke(a))),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=L(a.styleClasses.bgClass,r.bgClass||"")),a.styleClasses.textClass&&(r.textClass=L(a.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Ae(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(l){var s=r.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return me(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=L(r.pre.className,r.textClass||"")),r}function Zt(e){var t=I("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,n,r,i,a,l){if(t){var c,d=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,r="",i=0;ic&&u.from<=c);_++);if(u.to>=d)return e(n,r,i,a,o,s,l);e(n,r.slice(0,u.to-c),i,a,null,s,l),a=null,r=r.slice(u.to-c),c=u.to}}}function tn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function nn(e,t,n){var r=e.markedSpans,i=e.text,a=0;if(r)for(var o,s,l,c,d,u,_,p=i.length,m=0,g=1,f="",E=0;;){if(E==m){l=c=d=s="",_=null,u=null,E=1/0;for(var S=[],h=void 0,b=0;bm||T.collapsed&&v.to==m&&v.from==m)){if(null!=v.to&&v.to!=m&&E>v.to&&(E=v.to,c=""),T.className&&(l+=" "+T.className),T.css&&(s=(s?s+";":"")+T.css),T.startStyle&&v.from==m&&(d+=" "+T.startStyle),T.endStyle&&v.to==E&&(h||(h=[])).push(T.endStyle,v.to),T.title&&((_||(_={})).title=T.title),T.attributes)for(var C in T.attributes)(_||(_={}))[C]=T.attributes[C];T.collapsed&&(!u||wt(u.marker,T)<0)&&(u=v)}else v.from>m&&E>v.from&&(E=v.from)}if(h)for(var y=0;y=p)break;for(var N=Math.min(p,E);;){if(f){var R=m+f.length;if(!u){var A=R>N?f.slice(0,N-m):f;t.addToken(t,A,o?o+l:l,d,m+A.length==E?c:"",s,_)}if(R>=N){f=f.slice(N-m),m=N;break}m=R,d=""}f=i.slice(a,a=n[g++]),o=Kt(n[g++],t.cm.options)}}else for(var I=1;In)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function xn(e,t,n,r){return Mn(e,wn(e,t),n,r)}function Dn(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&a.push((l.bottom+c.top)/2-n.top)}}a.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(a=function(e,t,n,r){var i,a=kn(t.map,n,r),l=a.node,c=a.start,d=a.end,u=a.collapse;if(3==l.nodeType){for(var _=0;_<4;_++){for(;c&&re(t.line.text.charAt(a.coverStart+c));)--c;for(;a.coverStart+d1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}(e.display.measure,i))}else{var p;c>0&&(u=r="right"),i=e.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==r?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!i||!i.left&&!i.right)){var m=l.parentNode.getClientRects()[0];i=m?{left:m.left,right:m.left+ir(e.display),top:m.top,bottom:m.bottom}:Pn}for(var g=i.top-t.rect.top,f=i.bottom-t.rect.top,E=(g+f)/2,S=t.view.measure.heights,h=0;ht)&&(i=(a=l-s)-1,t>=l&&(o="right")),null!=i){if(r=e[c+2],s==l&&n==(r.insertLeft?"left":"right")&&(o=n),"left"==n&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],o="left";if("right"==n&&i==l-s)for(;c=0&&(n=e[i]).left==n.right;i--);return n}function Un(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=r.text.length?(l=r.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function d(e,t,n){return o(n?e-1:e,1==s[t].level!=n)}var u=se(s,l,c),_=oe,p=d(l,u,"before"==c);return null!=_&&(p.other=d(l,_,"before"!=c)),p}function $n(e,t){var n=0;t=st(e.doc,t),e.options.lineWrapping||(n=ir(e.display)*t.ch);var r=We(e.doc,t.line),i=qt(r)+Cn(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Qn(e,t,n,r,i){var a=et(e,t,n);return a.xRel=i,r&&(a.outside=r),a}function Kn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Qn(r.first,0,null,-1,-1);var i=Xe(r,n),a=r.first+r.size-1;if(i>a)return Qn(r.first+r.size-1,We(r,a).text.length,null,1,1);t<0&&(t=0);for(var o=We(r,i);;){var s=er(e,o,i,t,n),l=kt(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==i)return c;o=We(r,i=c.line)}}function Xn(e,t,n,r){r-=qn(t);var i=t.text.length,a=ae((function(t){return Mn(e,n,t-1).bottom<=r}),i,0);return{begin:a,end:i=ae((function(t){return Mn(e,n,t).top>r}),a,i)}}function Zn(e,t,n,r){return n||(n=wn(e,t)),Xn(e,t,n,zn(e,t,Mn(e,n,r),"line").top)}function Jn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function er(e,t,n,r,i){i-=qt(t);var a=wn(e,t),o=qn(t),s=0,l=t.text.length,c=!0,d=ce(t,e.doc.direction);if(d){var u=(e.options.lineWrapping?nr:tr)(e,t,n,a,d,r,i);s=(c=1!=u.level)?u.from:u.to-1,l=c?u.to:u.from-1}var _,p,m=null,g=null,f=ae((function(t){var n=Mn(e,a,t);return n.top+=o,n.bottom+=o,!!Jn(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(m=t,g=n),!0)}),s,l),E=!1;if(g){var S=r-g.left=b.bottom?1:0}return Qn(n,f=ie(t.text,f,1),p,E,r-_)}function tr(e,t,n,r,i,a,o){var s=ae((function(s){var l=i[s],c=1!=l.level;return Jn(jn(e,et(n,c?l.to:l.from,c?"before":"after"),"line",t,r),a,o,!0)}),0,i.length-1),l=i[s];if(s>0){var c=1!=l.level,d=jn(e,et(n,c?l.from:l.to,c?"after":"before"),"line",t,r);Jn(d,a,o,!0)&&d.top>o&&(l=i[s-1])}return l}function nr(e,t,n,r,i,a,o){var s=Xn(e,t,r,o),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var d=null,u=null,_=0;_=c||p.to<=l)){var m=Mn(e,r,1!=p.level?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=mg)&&(d=p,u=g)}}return d||(d=i[i.length-1]),d.fromc&&(d={from:d.from,to:c,level:d.level}),d}function rr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ln){Ln=I("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Ln.appendChild(document.createTextNode("x")),Ln.appendChild(I("br"));Ln.appendChild(document.createTextNode("x"))}A(e.measure,Ln);var n=Ln.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),R(e.measure),n||1}function ir(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=I("span","xxxxxxxxxx"),n=I("pre",[t],"CodeMirror-line-like");A(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function ar(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,a=t.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=e.display.gutterSpecs[o].className;n[s]=a.offsetLeft+a.clientLeft+i,r[s]=a.clientWidth}return{fixedPos:or(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function or(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function sr(e){var t=rr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/ir(e.display)-3);return function(i){if(Yt(e.doc,i))return 0;var a=0;if(i.widgets)for(var o=0;o0&&(l=We(e.doc,c.line).text).length==c.ch){var d=U(l,l.length,e.options.tabSize)-l.length;c=et(c.line,Math.max(0,Math.round((a-On(e.display).left)/ir(e.display))-d))}return c}function dr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Tt&&Bt(e.doc,t)i.viewFrom?pr(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)pr(e);else if(t<=i.viewFrom){var a=mr(e,n,n+r,1);a?(i.view=i.view.slice(a.index),i.viewFrom=a.lineN,i.viewTo+=r):pr(e)}else if(n>=i.viewTo){var o=mr(e,t,t,-1);o?(i.view=i.view.slice(0,o.index),i.viewTo=o.lineN):pr(e)}else{var s=mr(e,t,t,-1),l=mr(e,n,n+r,1);s&&l?(i.view=i.view.slice(0,s.index).concat(an(e,s.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=r):pr(e)}var c=i.externalMeasured;c&&(n=i.lineN&&t=r.viewTo)){var a=r.view[dr(e,t)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==G(o,n)&&o.push(n)}}}function pr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function mr(e,t,n,r){var i,a=dr(e,t),o=e.display.view;if(!Tt||n==e.doc.first+e.doc.size)return{index:a,lineN:n};for(var s=e.display.viewFrom,l=0;l0){if(a==o.length-1)return null;i=s+o[a].size-t,a++}else i=s-t;t+=i,n+=i}for(;Bt(e.doc,n)!=n;){if(a==(r<0?0:o.length-1))return null;n+=r*o[a-(r<0?1:0)].size,a+=r}return{index:a,lineN:n}}function gr(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo||s.to().linet||t==n&&o.to==t)&&(r(Math.max(o.from,t),Math.min(o.to,n),1==o.level?"rtl":"ltr",a),i=!0)}i||r(t,n,"ltr")}(g,n||0,null==r?_:r,(function(e,t,i,u){var f="ltr"==i,E=p(e,f?"left":"right"),S=p(t-1,f?"right":"left"),h=null==n&&0==e,b=null==r&&t==_,v=0==u,T=!g||u==g.length-1;if(S.top-E.top<=3){var C=(c?b:h)&&T,y=(c?h:b)&&v?s:(f?E:S).left,O=C?l:(f?S:E).right;d(y,E.top,O-y,E.bottom)}else{var N,R,A,I;f?(N=c&&h&&v?s:E.left,R=c?l:m(e,i,"before"),A=c?s:m(t,i,"after"),I=c&&b&&T?l:S.right):(N=c?m(e,i,"before"):s,R=!c&&h&&v?l:E.right,A=!c&&b&&T?s:S.left,I=c?m(t,i,"after"):l),d(N,E.top,R-N,E.bottom),E.bottom0?t.blinker=setInterval((function(){return t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Tr(e){e.state.focused||(e.display.input.focus(),yr(e))}function Cr(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Or(e))}),100)}function yr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(me(e,"focus",e,t),e.state.focused=!0,M(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),vr(e))}function Or(e,t){e.state.delayingBlurEvent||(e.state.focused&&(me(e,"blur",e,t),e.state.focused=!1,N(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Nr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r.005||_<-.005)&&(Qe(i.line,l),Rr(i.line),i.rest))for(var p=0;pe.display.sizerWidth){var m=Math.ceil(c/ir(e.display));m>e.display.maxLineLength&&(e.display.maxLineLength=m,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function Rr(e){if(e.widgets)for(var t=0;t=o&&(a=Xe(t,qt(We(t,l))-e.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function Ir(e,t){var n=e.display,r=rr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,a=An(e),o={};t.bottom-t.top>a&&(t.bottom=t.top+a);var s=e.doc.height+yn(n),l=t.tops-r;if(t.topi+a){var d=Math.min(t.top,(c?s:t.bottom)-a);d!=i&&(o.scrollTop=d)}var u=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,_=Rn(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),p=t.right-t.left>_;return p&&(t.right=t.left+_),t.left<10?o.scrollLeft=0:t.left_+u-3&&(o.scrollLeft=t.right+(p?0:10)-_),o}function xr(e,t){null!=t&&(Mr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Dr(e){Mr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function wr(e,t,n){null==t&&null==n||Mr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Mr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Lr(e,$n(e,t.from),$n(e,t.to),t.margin))}function Lr(e,t,n,r){var i=Ir(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});wr(e,i.scrollLeft,i.scrollTop)}function Pr(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||li(e,{top:t}),kr(e,t,!0),n&&li(e),ri(e,100))}function kr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Fr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,ui(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Ur(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+yn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Nn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Br=function(e,t,n){this.cm=n;var r=this.vert=I("div",[I("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=I("div",[I("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),ue(r,"scroll",(function(){r.clientHeight&&t(r.scrollTop,"vertical")})),ue(i,"scroll",(function(){i.clientWidth&&t(i.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Br.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var a=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},Br.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Br.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Br.prototype.zeroWidthHack=function(){var e=S&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new B,this.disableVert=new B},Br.prototype.enableZeroWidthBar=function(e,t,n){e.style.pointerEvents="auto",t.set(1e3,(function r(){var i=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,r)}))},Br.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Gr=function(){};function Yr(e,t){t||(t=Ur(e));var n=e.display.barWidth,r=e.display.barHeight;Hr(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Nr(e),Hr(e,Ur(e)),n=e.display.barWidth,r=e.display.barHeight}function Hr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Gr.prototype.update=function(){return{bottom:0,right:0}},Gr.prototype.setScrollLeft=function(){},Gr.prototype.setScrollTop=function(){},Gr.prototype.clear=function(){};var qr={native:Br,null:Gr};function zr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&N(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new qr[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ue(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?Fr(e,t):Pr(e,t)}),e),e.display.scrollbars.addClass&&M(e.display.wrapper,e.display.scrollbars.addClass)}var Vr=0;function Wr(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vr},t=e.curOp,on?on.ops.push(t):t.ownsGroup=on={ops:[t],delayedCallbacks:[]}}function jr(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ai(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Qr(e){e.updatedDisplay=e.mustUpdate&&oi(e.cm,e.update)}function Kr(e){var t=e.cm,n=t.display;e.updatedDisplay&&Nr(t),e.barMeasure=Ur(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=xn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Nn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Rn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Xr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!m){var a=I("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Cn(e.display))+"px;\n height: "+(t.bottom-t.top+Nn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(i),e.display.lineSpace.removeChild(a)}}}(t,function(e,t,n,r){var i;null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t);for(var a=0;a<5;a++){var o=!1,s=jn(e,t),l=n&&n!=t?jn(e,n):s,c=Ir(e,i={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-r,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+r}),d=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=c.scrollTop&&(Pr(e,c.scrollTop),Math.abs(e.doc.scrollTop-d)>1&&(o=!0)),null!=c.scrollLeft&&(Fr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-u)>1&&(o=!0)),!o)break}return i}(t,st(r,e.scrollToPos.from),st(r,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(i)for(var o=0;o=e.display.viewTo)){var n=+new Date+e.options.workTime,r=pt(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(a){if(r.line>=e.display.viewFrom){var o=a.styles,s=a.text.length>e.options.maxHighlightLength?He(t.mode,r.state):null,l=ut(e,a,r,!0);s&&(r.state=s),a.styles=l.styles;var c=a.styleClasses,d=l.classes;d?a.styleClasses=d:c&&(a.styleClasses=null);for(var u=!o||o.length!=a.styles.length||c!=d&&(!c||!d||c.bgClass!=d.bgClass||c.textClass!=d.textClass),_=0;!u&&_n)return ri(e,e.options.workDelay),!0})),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Jr(e,(function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==gr(e))return!1;_i(e)&&(pr(e),t.dims=ar(e));var i=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),o=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFromo&&n.viewTo-o<20&&(o=Math.min(i,n.viewTo)),Tt&&(a=Bt(e.doc,a),o=Gt(e.doc,o));var s=a!=n.viewFrom||o!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=an(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=an(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,dr(e,n)))),r.viewTo=n}(e,a,o),n.viewOffset=qt(We(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var c=gr(e);if(!s&&0==c&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var d=function(e){if(e.hasFocus())return null;var t=w();if(!t||!D(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&D(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return c>4&&(n.lineDiv.style.display="none"),function(e,t,n){var r=e.display,i=e.options.lineNumbers,a=r.lineDiv,o=a.firstChild;function s(t){var n=t.nextSibling;return l&&S&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=r.view,d=r.viewFrom,u=0;u-1&&(p=!1),dn(e,_,d,n)),p&&(R(_.lineNumber),_.lineNumber.appendChild(document.createTextNode(Je(e.options,d)))),o=_.node.nextSibling}else{var m=En(e,_,d,n);a.insertBefore(m,o)}d+=_.size}for(;o;)o=s(o)}(e,n.updateLineNumbers,t.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=w()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(d),R(n.cursorDiv),R(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ri(e,400)),n.updateLineNumbers=null,!0}function si(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Rn(e))r&&(t.visible=Ar(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+yn(e.display)-An(e),n.top)}),t.visible=Ar(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!oi(e,t))break;Nr(e);var i=Ur(e);fr(e),Yr(e,i),di(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function li(e,t){var n=new ai(e,t);if(oi(e,n)){Nr(e),si(e,n);var r=Ur(e);fr(e),Yr(e,r),di(e,r),n.finish()}}function ci(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function di(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Nn(e)+"px"}function ui(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=or(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,a=r+"px",o=0;os.clientWidth,d=s.scrollHeight>s.clientHeight;if(i&&c||a&&d){if(a&&S&&l)e:for(var _=t.target,p=o.view;_!=s;_=_.parentNode)for(var m=0;m=0&&tt(e,r.to())<=0)return n}return-1};var Ci=function(e,t){this.anchor=e,this.head=t};function yi(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort((function(e,t){return tt(e.from(),t.from())})),n=G(t,i);for(var a=1;a0:l>=0){var c=at(s.from(),o.from()),d=it(s.to(),o.to()),u=s.empty()?o.from()==o.head:s.from()==s.head;a<=n&&--n,t.splice(--a,2,new Ci(u?d:c,u?c:d))}}return new Ti(t,n)}function Oi(e,t){return new Ti([new Ci(e,t||e)],0)}function Ni(e){return e.text?et(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Ri(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Ni(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Ni(t).ch-t.to.ch),et(n,r)}function Ai(e,t){for(var n=[],r=0;r1&&e.remove(s.line+1,m-1),e.insert(s.line+1,E)}ln(e,"change",e,t)}function Li(e,t,n){!function e(r,i,a){if(r.linked)for(var o=0;os-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(a=function(e,t){return t?(Bi(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(i,i.lastOp==r)))o=$(a.changes),0==tt(t.from,t.to)&&0==tt(t.from,o.to)?o.to=Ni(t):a.changes.push(Ui(e,t));else{var l=$(i.done);for(l&&l.ranges||Hi(e.sel,i.done),a={changes:[Ui(e,t)],generation:i.generation},i.done.push(a);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,o||me(e,"historyAdded")}function Yi(e,t,n,r){var i=e.history,a=r&&r.origin;n==i.lastSelOp||a&&i.lastSelOrigin==a&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==a||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,a,$(i.done),t))?i.done[i.done.length-1]=t:Hi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=a,i.lastSelOp=n,r&&!1!==r.clearRedo&&Bi(i.undone)}function Hi(e,t){var n=$(t);n&&n.ranges&&n.equals(e)||t.push(e)}function qi(e,t,n,r){var i=t["spans_"+e.id],a=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),(function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[a]=n.markedSpans),++a}))}function zi(e){if(!e)return null;for(var t,n=0;n-1&&($(s)[u]=c[u],delete c[u])}}}return r}function ji(e,t,n,r){if(r){var i=e.anchor;if(n){var a=tt(t,i)<0;a!=tt(n,i)<0?(i=t,t=n):a!=tt(t,n)<0&&(t=n)}return new Ci(i,t)}return new Ci(n||t,t)}function $i(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Ji(e,new Ti([ji(e.sel.primary(),t,n,i)],0),r)}function Qi(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),a=0;a=t.ch:s.to>t.ch))){if(i&&(me(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(n){var u=l.find(r<0?1:-1),_=void 0;if((r<0?d:c)&&(u=oa(e,u,-r,u&&u.line==t.line?a:null)),u&&u.line==t.line&&(_=tt(u,n))&&(r<0?_<0:_>0))return ia(e,u,t,r,i)}var p=l.find(r<0?-1:1);return(r<0?c:d)&&(p=oa(e,p,r,p.line==t.line?a:null)),p?ia(e,p,t,r,i):null}}return t}function aa(e,t,n,r,i){var a=r||1,o=ia(e,t,n,a,i)||!i&&ia(e,t,n,a,!0)||ia(e,t,n,-a,i)||!i&&ia(e,t,n,-a,!0);return o||(e.cantEdit=!0,et(e.first,0))}function oa(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1)):null:n>0&&t.ch==(r||We(e,t.line)).text.length?t.line0)){var d=[l,1],u=tt(c.from,s.from),_=tt(c.to,s.to);(u<0||!o.inclusiveLeft&&!u)&&d.push({from:c.from,to:s.from}),(_>0||!o.inclusiveRight&&!_)&&d.push({from:s.to,to:c.to}),i.splice.apply(i,d),l+=d.length-3}}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)da(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else da(e,t)}}function da(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var n=Ai(e,t);Gi(e,t,n,e.cm?e.cm.curOp.id:NaN),pa(e,t,n,Nt(e,t));var r=[];Li(e,(function(e,n){n||-1!=G(r,e.history)||(Ea(e.history,t),r.push(e.history)),pa(e,t,null,Nt(e,t))}))}}function ua(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var i,a=e.history,o=e.sel,s="undo"==t?a.done:a.undone,l="undo"==t?a.undone:a.done,c=0;c=0;--p){var m=_(p);if(m)return m.v}}}}function _a(e,t){if(0!=t&&(e.first+=t,e.sel=new Ti(Q(e.sel.ranges,(function(e){return new Ci(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){ur(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.linea&&(t={from:t.from,to:et(a,We(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=je(e,t.from,t.to),n||(n=Ai(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,a=t.from,o=t.to,s=!1,l=a.line;e.options.lineWrapping||(l=Ke(Ut(We(r,a.line))),r.iter(l,o.line+1,(function(e){if(e==i.maxLine)return s=!0,!0}))),r.sel.contains(t.from,t.to)>-1&&fe(e),Mi(r,t,n,sr(e)),e.options.lineWrapping||(r.iter(l,a.line+t.text.length,(function(e){var t=zt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=We(e,r).stateAfter;if(i&&(!(i instanceof ct)||r+i.lookAhead1||!(this.children[0]instanceof ha))){var s=[];this.collapse(s),this.children=[new ha(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var o=i.lines.length%25+25,s=o;s10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=x("span",[a.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(Ft(e,t.line,t,n,a)||t.line!=n.line&&Ft(e,n.line,t,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Tt=!0}a.addToHistory&&Gi(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,(function(e){c&&a.collapsed&&!c.options.lineWrapping&&Ut(e)==c.display.maxLine&&(s=!0),a.collapsed&&l!=t.line&&Qe(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new Ct(a,l==t.line?t.ch:null,l==n.line?n.ch:null)),++l})),a.collapsed&&e.iter(t.line,n.line+1,(function(t){Yt(e,t)&&Qe(t,0)})),a.clearOnEnter&&ue(a,"beforeCursorEnter",(function(){return a.clear()})),a.readOnly&&(vt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++Ca,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)ur(c,t.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var d=t.line;d<=n.line;d++)_r(c,d,"text");a.atomic&&na(c.doc),ln(c,"markerAdded",c,a)}return a}ya.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Wr(e),Ee(this,"clear")){var n=this.find();n&&ln(this,"clear",n.from,n.to)}for(var r=null,i=null,a=0;ae.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=d,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&ur(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&na(e.doc)),e&&ln(e,"markerCleared",e,this,r,i),t&&jr(e),this.parent&&this.parent.clear()}},ya.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;l--)ca(this,r[l]);s?Zi(this,s):this.cm&&Dr(this.cm)})),undo:ni((function(){ua(this,"undo")})),redo:ni((function(){ua(this,"redo")})),undoSelection:ni((function(){ua(this,"undo",!0)})),redoSelection:ni((function(){ua(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=st(this,e),t=st(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,(function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&i!=e.line||null!=l.from&&i==t.line&&l.from>=t.ch||n&&!n(l.marker)||r.push(l.marker.parent||l.marker)}++i})),r},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=a,++n})),st(this,et(n,t))},indexFromPos:function(e){var t=(e=st(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var u=e.dataTransfer.getData("Text");if(u){var _;if(t.state.draggingText&&!t.state.draggingText.copy&&(_=t.listSelections()),ea(t.doc,Oi(n,n)),_)for(var p=0;p<_.length;++p)ma(t.doc,"",_[p].anchor,_[p].head,"drag");t.replaceSelection(u,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Ma(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function La(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName("CodeMirror"),n=[],r=0;r=0;t--)ma(e.doc,"",r[t].from,r[t].to,"+delete");Dr(e)}))}function Xa(e,t,n){var r=ie(e.text,t+n,n);return r<0||r>e.text.length?null:r}function Za(e,t,n){var r=Xa(e,t.ch,n);return null==r?null:new et(t.line,r,n<0?"after":"before")}function Ja(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var a=ce(n,t.doc.direction);if(a){var o,s=i<0?$(a):a[0],l=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=wn(t,n);o=i<0?n.text.length-1:0;var d=Mn(t,c,o).top;o=ae((function(e){return Mn(t,c,e).top==d}),i<0==(1==s.level)?s.from:s.to-1,o),"before"==l&&(o=Xa(n,o,1))}else o=i<0?s.to:s.from;return new et(r,o,l)}}return new et(r,i<0?n.text.length:0,i<0?"before":"after")}Ha.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Ha.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Ha.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ha.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Ha.default=S?Ha.macDefault:Ha.pcDefault;var eo={selectAll:sa,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),H)},killLine:function(e){return Ka(e,(function(t){if(t.empty()){var n=We(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(a.charAt(i.ch-1)+a.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var o=We(e.doc,i.line-1).text;o&&(i=new et(i.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+o.charAt(o.length-1),et(i.line-1,o.length-1),i,"+transpose"))}n.push(new Ci(i,i))}e.setSelections(n)}))},newlineAndIndent:function(e){return Jr(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r-1&&(tt((i=c.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,a=!1,c=ei(e,(function(t){l&&(i.scroller.draggable=!1),e.state.draggingText=!1,pe(i.wrapper.ownerDocument,"mouseup",c),pe(i.wrapper.ownerDocument,"mousemove",d),pe(i.scroller,"dragstart",u),pe(i.scroller,"drop",c),a||(he(t),r.addNew||$i(e.doc,n,null,null,r.extend),l||o&&9==s?setTimeout((function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()}),20):i.input.focus())})),d=function(e){a=a||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},u=function(){return a=!0};l&&(i.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),ue(i.wrapper.ownerDocument,"mouseup",c),ue(i.wrapper.ownerDocument,"mousemove",d),ue(i.scroller,"dragstart",u),ue(i.scroller,"drop",c),Cr(e),setTimeout((function(){return i.input.focus()}),20)}(e,r,t,a):function(e,t,n,r){var i=e.display,a=e.doc;he(t);var o,s,l=a.sel,c=l.ranges;if(r.addNew&&!r.extend?(s=a.sel.contains(n),o=s>-1?c[s]:new Ci(n,n)):(o=a.sel.primary(),s=a.sel.primIndex),"rectangle"==r.unit)r.addNew||(o=new Ci(n,n)),n=cr(e,t,!0,!0),s=-1;else{var d=Eo(e,n,r.unit);o=r.extend?ji(o,d.anchor,d.head,r.extend):d}r.addNew?-1==s?(s=c.length,Ji(a,yi(e,c.concat([o]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==r.unit&&!r.extend?(Ji(a,yi(e,c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),l=a.sel):Ki(a,s,o,q):(s=0,Ji(a,new Ti([o],0),q),l=a.sel);var u=n;function _(t){if(0!=tt(u,t))if(u=t,"rectangle"==r.unit){for(var i=[],c=e.options.tabSize,d=U(We(a,n.line).text,n.ch,c),_=U(We(a,t.line).text,t.ch,c),p=Math.min(d,_),m=Math.max(d,_),g=Math.min(n.line,t.line),f=Math.min(e.lastLine(),Math.max(n.line,t.line));g<=f;g++){var E=We(a,g).text,S=V(E,p,c);p==m?i.push(new Ci(et(g,S),et(g,S))):E.length>S&&i.push(new Ci(et(g,S),et(g,V(E,m,c))))}i.length||i.push(new Ci(n,n)),Ji(a,yi(e,l.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var h,b=o,v=Eo(e,t,r.unit),T=b.anchor;tt(v.anchor,T)>0?(h=v.head,T=at(b.from(),v.anchor)):(h=v.anchor,T=it(b.to(),v.head));var C=l.ranges.slice(0);C[s]=function(e,t){var n=t.anchor,r=t.head,i=We(e.doc,n.line);if(0==tt(n,r)&&n.sticky==r.sticky)return t;var a=ce(i);if(!a)return t;var o=se(a,n.ch,n.sticky),s=a[o];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=o+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return t;if(r.line!=n.line)l=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var d=se(a,r.ch,r.sticky),u=d-o||(r.ch-n.ch)*(1==s.level?-1:1);l=d==c-1||d==c?u<0:u>0}var _=a[c+(l?-1:0)],p=l==(1==_.level),m=p?_.from:_.to,g=p?"after":"before";return n.ch==m&&n.sticky==g?t:new Ci(new et(n.line,m,g),r)}(e,new Ci(st(a,T),h)),Ji(a,yi(e,C,s),q)}}var p=i.wrapper.getBoundingClientRect(),m=0;function g(t){e.state.selectingText=!1,m=1/0,t&&(he(t),i.input.focus()),pe(i.wrapper.ownerDocument,"mousemove",f),pe(i.wrapper.ownerDocument,"mouseup",E),a.history.lastSelOrigin=null}var f=ei(e,(function(t){0!==t.buttons&&ye(t)?function t(n){var o=++m,s=cr(e,n,!0,"rectangle"==r.unit);if(s)if(0!=tt(s,u)){e.curOp.focus=w(),_(s);var l=Ar(i,a);(s.line>=l.to||s.linep.bottom?20:0;c&&setTimeout(ei(e,(function(){m==o&&(i.scroller.scrollTop+=c,t(n))})),50)}}(t):g(t)})),E=ei(e,g);e.state.selectingText=E,ue(i.wrapper.ownerDocument,"mousemove",f),ue(i.wrapper.ownerDocument,"mouseup",E)}(e,r,t,a)}(t,r,a,e):Ce(e)==n.scroller&&he(e):2==i?(r&&$i(t.doc,r),setTimeout((function(){return n.input.focus()}),20)):3==i&&(C?t.display.input.onContextMenu(e):Cr(t)))}}function Eo(e,t,n){if("char"==n)return new Ci(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Ci(et(t.line,0),st(e.doc,et(t.line+1,0)));var r=n(e,t);return new Ci(r.from,r.to)}function So(e,t,n,r){var i,a;if(t.touches)i=t.touches[0].clientX,a=t.touches[0].clientY;else try{i=t.clientX,a=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&he(t);var o=e.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!Ee(e,n))return ve(t);a-=s.top-o.viewOffset;for(var l=0;l=i)return me(e,n,e,Xe(e.doc,a),e.display.gutterSpecs[l].className,t),ve(t)}}function ho(e,t){return So(e,t,"gutterClick",!0)}function bo(e,t){Tn(e.display,t)||function(e,t){return!!Ee(e,"gutterContextMenu")&&So(e,t,"gutterContextMenu",!1)}(e,t)||ge(e,t,"contextmenu")||C||e.display.input.onContextMenu(t)}function vo(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Gn(e)}go.prototype.compare=function(e,t,n){return this.time+400>e&&0==tt(t,this.pos)&&n==this.button};var To={toString:function(){return"CodeMirror.Init"}},Co={},yo={};function Oo(e,t,n){if(!t!=!(n&&n!=To)){var r=e.display.dragFunctions,i=t?ue:pe;i(e.display.scroller,"dragstart",r.start),i(e.display.scroller,"dragenter",r.enter),i(e.display.scroller,"dragover",r.over),i(e.display.scroller,"dragleave",r.leave),i(e.display.scroller,"drop",r.drop)}}function No(e){e.options.lineWrapping?(M(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(N(e.display.wrapper,"CodeMirror-wrap"),Vt(e)),lr(e),ur(e),Gn(e),setTimeout((function(){return Yr(e)}),100)}function Ro(e,t){var n=this;if(!(this instanceof Ro))return new Ro(e,t);this.options=t=t?F(t):{},F(Co,t,!1);var r=t.value;"string"==typeof r?r=new xa(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new Ro.inputStyles[t.inputStyle](this),a=this.display=new fi(e,r,i,t);for(var c in a.wrapper.CodeMirror=this,vo(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),zr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new B,keySeq:null,specialChars:null},t.autofocus&&!E&&a.input.focus(),o&&s<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),function(e){var t=e.display;ue(t.scroller,"mousedown",ei(e,fo)),ue(t.scroller,"dblclick",o&&s<11?ei(e,(function(t){if(!ge(e,t)){var n=cr(e,t);if(n&&!ho(e,t)&&!Tn(e.display,t)){he(t);var r=e.findWordAt(n);$i(e.doc,r.anchor,r.head)}}})):function(t){return ge(e,t)||he(t)}),ue(t.scroller,"contextmenu",(function(t){return bo(e,t)})),ue(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||bo(e,n)}));var n,r={end:0};function i(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(r=t.activeTouch).end=+new Date)}function a(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}ue(t.scroller,"touchstart",(function(i){if(!ge(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!ho(e,i)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-r.end<=300?r:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}})),ue(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),ue(t.scroller,"touchend",(function(n){var r=t.activeTouch;if(r&&!Tn(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var o,s=e.coordsChar(t.activeTouch,"page");o=!r.prev||a(r,r.prev)?new Ci(s,s):!r.prev.prev||a(r,r.prev.prev)?e.findWordAt(s):new Ci(et(s.line,0),st(e.doc,et(s.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),he(n)}i()})),ue(t.scroller,"touchcancel",i),ue(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Pr(e,t.scroller.scrollTop),Fr(e,t.scroller.scrollLeft,!0),me(e,"scroll",e))})),ue(t.scroller,"mousewheel",(function(t){return vi(e,t)})),ue(t.scroller,"DOMMouseScroll",(function(t){return vi(e,t)})),ue(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){ge(e,t)||Te(t)},over:function(t){ge(e,t)||(function(e,t){var n=cr(e,t);if(n){var r=document.createDocumentFragment();Sr(e,n,r),e.display.dragCursor||(e.display.dragCursor=I("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),A(e.display.dragCursor,r)}}(e,t),Te(t))},start:function(t){return function(e,t){if(o&&(!e.state.draggingText||+new Date-Da<100))Te(t);else if(!ge(e,t)&&!Tn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!_)){var n=I("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",u&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),u&&n.parentNode.removeChild(n)}}(e,t)},drop:ei(e,wa),leave:function(t){ge(e,t)||Ma(e)}};var l=t.input.getField();ue(l,"keyup",(function(t){return uo.call(e,t)})),ue(l,"keydown",ei(e,co)),ue(l,"keypress",ei(e,_o)),ue(l,"focus",(function(t){return yr(e,t)})),ue(l,"blur",(function(t){return Or(e,t)}))}(this),ka(),Wr(this),this.curOp.forceUpdate=!0,Pi(this,r),t.autofocus&&!E||this.hasFocus()?setTimeout(k(yr,this),20):Or(this),yo)yo.hasOwnProperty(c)&&yo[c](this,t[c],To);_i(this),t.finishInit&&t.finishInit(this);for(var d=0;d150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>a.first?U(We(a,t-1).text,null,o):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var u="",_=0;if(e.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)_+=o,u+="\t";if(_o,l=De(t),c=null;if(s&&r.ranges.length>1)if(xo&&xo.text.join("\n")==t){if(r.ranges.length%xo.text.length==0){c=[];for(var d=0;d=0;_--){var p=r.ranges[_],m=p.from(),g=p.to();p.empty()&&(n&&n>0?m=et(m.line,m.ch-n):e.state.overwrite&&!s?g=et(g.line,Math.min(We(a,g.line).text.length,g.ch+$(l).length)):s&&xo&&xo.lineWise&&xo.text.join("\n")==t&&(m=g=et(m.line,0)));var f={from:m,to:g,text:c?c[_%c.length]:l,origin:i||(s?"paste":e.state.cutIncoming>o?"cut":"+input")};ca(e.doc,f),ln(e,"inputRead",e,f)}t&&!s&&Lo(e,t),Dr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=u),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Mo(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Jr(t,(function(){return wo(t,n,0,null,"paste")})),!0}function Lo(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var a=e.getModeAt(i.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Io(e,i.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(We(e.doc,i.head.line).text.slice(0,i.head.ch))&&(o=Io(e,i.head.line,"smart"));o&&ln(e,"electricInput",e,i.head.line)}}}function Po(e){for(var t=[],n=[],r=0;r=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var a=se(i,n.ch,n.sticky),o=i[a];if("ltr"==e.doc.direction&&o.level%2==0&&(r>0?o.to>n.ch:o.from=o.from&&_>=d.begin)){var p=u?"before":"after";return new et(n.line,_,p)}}var m=function(e,t,r){for(var a=function(e,t){return t?new et(n.line,l(e,1),"before"):new et(n.line,e,"after")};e>=0&&e0==(1!=o.level),c=s?r.begin:l(r.end,-1);if(o.from<=c&&c0?d.end:l(d.begin,-1);return null==f||r>0&&f==t.text.length||!(g=m(r>0?0:i.length-1,r,c(f)))?null:g}(e.cm,s,t,n):Za(s,t,n))){if(r||(o=t.line+l)=e.first+e.size||(t=new et(o,t.ch,t.sticky),!(s=We(e,o))))return!1;t=Ja(i,e.cm,s,t.line,l)}else t=a;return!0}if("char"==r)c();else if("column"==r)c(!0);else if("word"==r||"group"==r)for(var d=null,u="group"==r,_=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(n<0)||c(!p);p=!1){var m=s.text.charAt(t.ch)||"\n",g=ee(m,_)?"w":u&&"\n"==m?"n":!u||/\s/.test(m)?null:"p";if(!u||p||g||(g="s"),d&&d!=g){n<0&&(n=1,c(),t.sticky="after");break}if(g&&(d=g),n>0&&!c(!p))break}var f=aa(e,t,a,o,!0);return nt(a,f)&&(f.hitSide=!0),f}function Bo(e,t,n,r){var i,a,o=e.doc,s=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*rr(e.display),3);i=(n>0?t.bottom:t.top)+n*c}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;(a=Kn(e,s,i)).outside;){if(n<0?i<=0:i>=o.height){a.hitSide=!0;break}i+=5*n}return a}var Go=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new B,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Yo(e,t){var n=Dn(e,t.line);if(!n||n.hidden)return null;var r=We(e.doc,t.line),i=In(n,r,t.line),a=ce(r,e.doc.direction),o="left";a&&(o=se(a,t.ch)%2?"right":"left");var s=kn(i.map,t.ch,o);return s.offset="right"==s.collapse?s.end:s.start,s}function Ho(e,t){return t&&(e.bad=!0),e}function qo(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Ho(e.clipPos(et(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||a.line=t.display.viewFrom&&Yo(t,i)||{node:l[0].measure.map[2],offset:0},d=a.liner.firstLine()&&(o=et(o.line-1,We(r.doc,o.line-1).length)),s.ch==We(r.doc,s.line).text.length&&s.linei.viewTo-1)return!1;o.line==i.viewFrom||0==(e=dr(r,o.line))?(t=Ke(i.view[0].line),n=i.view[0].node):(t=Ke(i.view[e].line),n=i.view[e-1].node.nextSibling);var l,c,d=dr(r,s.line);if(d==i.view.length-1?(l=i.viewTo-1,c=i.lineDiv.lastChild):(l=Ke(i.view[d+1].line)-1,c=i.view[d+1].node.previousSibling),!n)return!1;for(var u=r.doc.splitLines(function(e,t,n,r,i){var a="",o=!1,s=e.doc.lineSeparator(),l=!1;function c(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(e){e&&(c(),a+=e)}function u(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var a,_=t.getAttribute("cm-marker");if(_){var p=e.findMarks(et(r,0),et(i+1,0),(f=+_,function(e){return e.id==f}));return void(p.length&&(a=p[0].find(0))&&d(je(e.doc,a.from,a.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&c();for(var g=0;g1&&_.length>1;)if($(u)==$(_))u.pop(),_.pop(),l--;else{if(u[0]!=_[0])break;u.shift(),_.shift(),t++}for(var p=0,m=0,g=u[0],f=_[0],E=Math.min(g.length,f.length);po.ch&&S.charCodeAt(S.length-m-1)==h.charCodeAt(h.length-m-1);)p--,m++;u[u.length-1]=S.slice(0,S.length-m).replace(/^\u200b+/,""),u[0]=u[0].slice(p).replace(/\u200b+$/,"");var v=et(t,p),T=et(l,_.length?$(_).length-m:0);return u.length>1||u[0]||tt(v,T)?(ma(r.doc,u,v,T,"+input"),!0):void 0},Go.prototype.ensurePolled=function(){this.forceCompositionEnd()},Go.prototype.reset=function(){this.forceCompositionEnd()},Go.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Go.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Go.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Jr(this.cm,(function(){return ur(e.cm)}))},Go.prototype.setUneditable=function(e){e.contentEditable="false"},Go.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ei(this.cm,wo)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Go.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Go.prototype.onContextMenu=function(){},Go.prototype.resetPosition=function(){},Go.prototype.needsContentAttribute=!0;var Vo=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new B,this.hasSelection=!1,this.composing=null};Vo.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var i=this.textarea;function a(e){if(!ge(r,e)){if(r.somethingSelected())Do({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=Po(r);Do({lineWise:!0,text:t.text}),"cut"==e.type?r.setSelections(t.ranges,null,H):(n.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(r.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),ue(i,"input",(function(){o&&s>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),ue(i,"paste",(function(e){ge(r,e)||Mo(e,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())})),ue(i,"cut",a),ue(i,"copy",a),ue(e.scroller,"paste",(function(t){if(!Tn(e,t)&&!ge(r,t)){if(!i.dispatchEvent)return r.state.pasteIncoming=+new Date,void n.focus();var a=new Event("paste");a.clipboardData=t.clipboardData,i.dispatchEvent(a)}})),ue(e.lineSpace,"selectstart",(function(t){Tn(e,t)||he(t)})),ue(i,"compositionstart",(function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}})),ue(i,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},Vo.prototype.createField=function(e){this.wrapper=Fo(),this.textarea=this.wrapper.firstChild},Vo.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Er(e);if(e.options.moveInputWithCursor){var i=jn(e,n.sel.primary().head,"div"),a=t.wrapper.getBoundingClientRect(),o=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+o.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+o.left-a.left))}return r},Vo.prototype.showSelection=function(e){var t=this.cm.display;A(t.cursorDiv,e.cursors),A(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Vo.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&P(this.textarea),o&&s>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null))}},Vo.prototype.getField=function(){return this.textarea},Vo.prototype.supportsTouch=function(){return!1},Vo.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!E||w()!=this.textarea))try{this.textarea.focus()}catch(e){}},Vo.prototype.blur=function(){this.textarea.blur()},Vo.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Vo.prototype.receivedFocus=function(){this.slowPoll()},Vo.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Vo.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}))},Vo.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||we(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===i||S&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=i.charCodeAt(0);if(8203!=a||r||(r="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(r.length,i.length);l1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Vo.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Vo.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},Vo.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var a=cr(n,e),c=r.scroller.scrollTop;if(a&&!u){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(a)&&ei(n,Ji)(n.doc,Oi(a),H);var d,_=i.style.cssText,p=t.wrapper.style.cssText,m=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-m.top-5)+"px; left: "+(e.clientX-m.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=window.scrollY),r.input.focus(),l&&window.scrollTo(null,d),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=E,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),o&&s>=9&&f(),C){Te(e);var g=function(){pe(window,"mouseup",g),setTimeout(E,20)};ue(window,"mouseup",g)}else setTimeout(E,50)}function f(){if(null!=i.selectionStart){var e=n.somethingSelected(),a="​"+(e?i.value:"");i.value="⇚",i.value=a,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=a.length,r.selForContextMenu=n.doc.sel}}function E(){if(t.contextMenuPending==E&&(t.contextMenuPending=!1,t.wrapper.style.cssText=p,i.style.cssText=_,o&&s<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=i.selectionStart)){(!o||o&&s<9)&&f();var e=0,a=function(){r.selForContextMenu==n.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?ei(n,sa)(n):e++<10?r.detectingSelectAll=setTimeout(a,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(a,200)}}},Vo.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Vo.prototype.setUneditable=function(){},Vo.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,r,i,a){e.defaults[n]=r,i&&(t[n]=a?function(e,t,n){n!=To&&i(e,t,n)}:i)}e.defineOption=n,e.Init=To,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,xi(e)}),!0),n("indentUnit",2,xi,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){Di(e),Gn(e),ur(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter((function(e){for(var i=0;;){var a=e.text.indexOf(t,i);if(-1==a)break;i=a+t.length,n.push(et(r,a))}r++}));for(var i=n.length-1;i>=0;i--)ma(e.doc,t,n[i],et(n[i].line,n[i].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=To&&e.refresh()})),n("specialCharPlaceholder",Zt,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",E?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!b),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){vo(e),gi(e)}),!0),n("keyMap","default",(function(e,t,n){var r=Qa(t),i=n!=To&&Qa(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,No,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=pi(t,e.options.lineNumbers),gi(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?or(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return Yr(e)}),!0),n("scrollbarStyle","native",(function(e){zr(e),Yr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=pi(e.options.gutters,t),gi(e)}),!0),n("firstLineNumber",1,gi,!0),n("lineNumberFormatter",(function(e){return e}),gi,!0),n("showCursorWhenSelecting",!1,fr,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Or(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,Oo),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,fr,!0),n("singleCursorHeightPerLine",!0,fr,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Di,!0),n("addModeClass",!1,Di,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,Di,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}(Ro),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&ei(this,t[e])(this,n,i),me(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Qa(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Io(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Dr(this));else{var a=i.from(),o=i.to(),s=Math.max(n,a.line);n=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Ki(this.doc,r,new Ci(a,c[r].to()),H)}}})),getTokenAt:function(e,t){return St(this,e,t)},getLineTokens:function(e,t){return St(this,et(e),t,!0)},getTokenTypeAt:function(e){e=st(this.doc,e);var t,n=_t(this,We(this.doc,e.line)),r=0,i=(n.length-1)/2,a=e.ch;if(0==a)t=n[2];else for(;;){var o=r+i>>1;if((o?n[2*o-1]:0)>=a)i=o;else{if(!(n[2*o+1]a&&(e=a,i=!0),r=We(this.doc,e)}else r=e;return zn(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-qt(r):0)},defaultTextHeight:function(){return rr(this.display)},defaultCharWidth:function(){return ir(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var a,o,s,l=this.display,c=(e=jn(this,st(this.doc,e))).bottom,d=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),l.sizer.appendChild(t),"over"==r)c=e.top;else if("above"==r||"near"==r){var u=Math.max(l.wrapper.clientHeight,this.doc.height),_=Math.max(l.sizer.clientWidth,l.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>u)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=u&&(c=e.bottom),d+t.offsetWidth>_&&(d=_-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(d=l.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?d=0:"middle"==i&&(d=(l.sizer.clientWidth-t.offsetWidth)/2),t.style.left=d+"px"),n&&(a=this,o={left:d,top:c,right:d+t.offsetWidth,bottom:c+t.offsetHeight},null!=(s=Ir(a,o)).scrollTop&&Pr(a,s.scrollTop),null!=s.scrollLeft&&Fr(a,s.scrollLeft))},triggerOnKeyDown:ti(co),triggerOnKeyPress:ti(_o),triggerOnKeyUp:uo,triggerOnMouseDown:ti(fo),execCommand:function(e){if(eo.hasOwnProperty(e))return eo[e].call(null,this)},triggerElectric:ti((function(e){Lo(this,e)})),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var a=st(this.doc,e),o=0;o0&&o(t.charAt(n-1));)--n;for(;r.5)&&lr(this),me(this,"refresh",this)})),swapDoc:ti((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Pi(this,e),Gn(this),this.display.input.reset(),wr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,ln(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Se(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,a){e.registerHelper(t,r,a),n[t]._global.push({pred:i,val:a})}}(Ro);var Wo="iter insert remove copy getEditor constructor".split(" ");for(var jo in xa.prototype)xa.prototype.hasOwnProperty(jo)&&G(Wo,jo)<0&&(Ro.prototype[jo]=function(e){return function(){return e.apply(this.doc,arguments)}}(xa.prototype[jo]));return Se(xa),Ro.inputStyles={textarea:Vo,contenteditable:Go},Ro.defineMode=function(e){Ro.defaults.mode||"null"==e||(Ro.defaults.mode=e),Fe.apply(this,arguments)},Ro.defineMIME=function(e,t){ke[e]=t},Ro.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Ro.defineMIME("text/plain","null"),Ro.defineExtension=function(e,t){Ro.prototype[e]=t},Ro.defineDocExtension=function(e,t){xa.prototype[e]=t},Ro.fromTextArea=function(e,t){if((t=t?F(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=w();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function r(){e.value=s.getValue()}var i;if(e.form&&(ue(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var o=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=o}}catch(e){}}t.finishInit=function(n){n.save=r,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,r(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(pe(e.form,"submit",r),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Ro((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s},function(e){e.off=pe,e.on=ue,e.wheelEventPixels=bi,e.Doc=xa,e.splitLines=De,e.countColumn=U,e.findColumn=V,e.isWordChar=J,e.Pass=Y,e.signal=me,e.Line=Wt,e.changeEnd=Ni,e.scrollbarModel=qr,e.Pos=et,e.cmpPos=tt,e.modes=Pe,e.mimeModes=ke,e.resolveMode=Ue,e.getMode=Be,e.modeExtensions=Ge,e.extendMode=Ye,e.copyState=He,e.startState=ze,e.innerMode=qe,e.commands=eo,e.keyMap=Ha,e.keyName=$a,e.isModifierKey=Wa,e.lookupKey=Va,e.normalizeKeyMap=za,e.StringStream=Ve,e.SharedTextMarker=Na,e.TextMarker=ya,e.LineWidget=va,e.e_preventDefault=he,e.e_stopPropagation=be,e.e_stop=Te,e.addClass=M,e.contains=D,e.rmClass=N,e.keyNames=Ua}(Ro),Ro.version="5.52.2",Ro}()},function(e,t,n){"use strict";(function(e){var r=n(5),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=a&&a.exports===i&&r.a.process,s=function(){try{var e=a&&a.require&&a.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();t.a=s}).call(this,n(7)(e))},function(e,t,n){"use strict";(function(e){var r=n(0),i=n(4),a="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=a&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===a?r.a.Buffer:void 0,l=(s?s.isBuffer:void 0)||i.a;t.a=l}).call(this,n(7)(e))},function(e,t,n){"use strict";t.a=function(){return!1}},function(e,t,n){"use strict";(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(13))},function(e,t,n){"use strict";(function(e){var r=n(0),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=a&&a.exports===i?r.a.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(7)(e))},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(n(9)),i=o(n(10)),a=o(n(12));function o(e){return e&&e.__esModule?e:{default:e}}var s=r.default.isMac,l=r.default.toggleClass,c=r.default.addClass,d=r.default.removeClass,u=i.default.gitGubUrl,_=a.default.getState,p=null,m=function(e){for(var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=(n._options.$tools.blockStyles[i],_(r)),o=r.getCursor("start"),s=r.getCursor("end"),l={quote:/^(\s*)\>\s+/,"unordered-list":/^(\s*)(\*|\-|\+)\s+/,"ordered-list":/^(\s*)\d+\.\s+/},c={quote:"> ","unordered-list":"* ","ordered-list":"1. "},d=o.line;d<=s.line;d++){var u=r.getLine(d);u=a[i]?u.replace(l[i],"$1"):c[i]+u,r.replaceRange(u,{line:d,ch:0},{line:d,ch:99999999999999})}r.focus()};function g(e,t,n,r){var i,a=n[0],o=n[1],s=e.getCursor("start"),l=e.getCursor("end");o=o.replace("#url#",r),t?(a=(i=e.getLine(s.line)).slice(0,s.ch),o=i.slice(s.ch),e.replaceRange(a+o,{line:s.line,ch:0})):(i=e.getSelection(),e.replaceSelection(a+i+o),s.ch+=a.length,s!==l&&(l.ch+=a.length)),e.setSelection(s,l),e.focus()}var f={bold:{name:"bold",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"bold",a=n._options.$tools.blockStyles[i],o=_(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i&&(s=s.split("~~").join("")),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,u),r.focus()},className:"icon-bold",title:"Bold",default:!0,index:0,isEditTools:!0},italic:{name:"italic",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"italic",a=n._options.$tools.blockStyles[i],o=_(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i&&(s=s.split("~~").join("")),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,u),r.focus()},className:"icon-italic",title:"Italic",default:!0,index:1,isEditTools:!0},heading:{name:"heading",action:function(e){for(var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"Heading",a=(n._options.$tools.blockStyles[i],_(r),r.getCursor("start")),o=r.getCursor("end"),s=a.line;s<=o.line;s++){var l=r.getLine(s),c=l.search(/[^#]/);l="# "+l.substr(c+1),r.replaceRange(l,{line:s,ch:0},{line:s,ch:99999999999999})}r.focus()},className:"icon-heading",title:"Heading",default:!0,index:2,isEditTools:!0},quote:{name:"quote",action:m,className:"icon-quotation-marks",title:"Quote",default:!0,index:3,isEditTools:!0},code:{name:"code",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"code",a=n._options.$tools.blockStyles[i],o=_(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i?s=s.split("~~").join(""):"code"==i&&(s="\n\n"),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,d),r.focus()},className:"icon-code",title:"Code",default:!0,index:4,isEditTools:!0},"unordered-list":{name:"unordered-list",className:"icon-Listofissues",action:function(e){m(e)},title:"Generic List",default:!0,index:5,isEditTools:!0},"ordered-list":{name:"ordered-list",className:"icon-list",action:function(e){m(e)},title:"Number List",default:!0,index:6,isEditTools:!0},link:{name:"link",className:"icon-link",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=n._options.$tools.insertTexts[i];g(r,_(r).link,a,"")},title:"Insert Link",default:!0,index:7,isEditTools:!0},image:{name:"image",className:"icon-img",action:function(e){var t,n=(e=e||windowl.event).currentTarget,r=n.$editor,i=r.$codemirror,a=n.getAttribute("data-name")||"quote",o=r._options.$tools.insertTexts[a],s=_(i);if(!(t=prompt("请输入图片地址","")))return!1;g(i,s.image,o,t)},title:"Insert Image",default:!0,index:8,isEditTools:!0},undo:{name:"undo",className:"icon-goLeft",action:function(e){var t=(e=e||window.event).currentTarget.$editor;p||(p=t);var n=t.$codemirror;if(n){var r=n.getHistory();console.log("回退",r),n.undoSelection()}},title:"Undo",default:!0,index:9,isEditTools:!0},redo:{name:"redo",className:"icon-goRight",action:function(e){var t=(e=e||window.event).currentTarget.$editor;p||(p=t);var n=t.$codemirror;if(n){var r=n.getHistory();console.log("取消撤销",r),n.redoSelection()}},title:"Redo",default:!0,index:10,isEditTools:!0},about:{name:"about",className:"icon-question",action:function(){window.open(u)},title:"About Editor",default:!0,index:0,isEditTools:!1},edit:{name:"edit",className:"icon-pen",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(p||(p=n),!p.$status.isOnlyEdit){p.$status.isOnlyEdit=!0,p.$status.isOnlyPreview=!p.$status.isOnlyEdit,p.$status.isShowAll=!p.$status.isOnlyEdit,l(t,"active");var r=p._options.el,i=r.querySelector(".editor-preview"),a=r.querySelector(".editor-md");a&&d(a,"hide"),i&&c(i,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-eye"),s=r.querySelector(".editor-tools").querySelector(".icon-columns");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Edit",default:!0,index:1,isEditTools:!1},compare:{name:"compare",className:"icon-columns active",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(p||(p=n),!p.$status.isShowAll){p.$status.isShowAll=!0,p.$status.isOnlyPreview=!p.$status.isShowAll,p.$status.isOnlyEdit=!p.$status.isShowAll,l(t,"active");var r=p._options.el,i=r.querySelector(".editor-preview"),a=r.querySelector(".editor-md");a&&d(a,"hide"),i&&d(i,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-pen"),s=r.querySelector(".editor-tools").querySelector(".icon-eye");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Compare",default:!0,index:2,isEditTools:!1},preview:{name:"preview",className:"icon-eye",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(p||(p=n),!p.$status.isOnlyPreview){p.$status.isOnlyPreview=!0,p.$status.isOnlyEdit=!p.$status.isOnlyPreview,p.$status.isShowAll=!p.$status.isOnlyPreview,l(t,"active");var r=p._options.el,i=r.querySelector(".editor-md"),a=r.querySelector(".editor-preview");i&&c(i,"hide"),a&&d(a,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-pen"),s=r.querySelector(".editor-tools").querySelector(".icon-columns");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Preview",default:!0,index:3,isEditTools:!1},fullscreen:{name:"fullscreen",className:"icon-full-screen",action:function(e){!function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;l(t,"active"),p||(p=n)}(e);var t=p._options.el;l(t,"fullscreen")},title:"Toggle Fullscreen",default:!0,index:4,isEditTools:!1}};t.default={toolbarBuiltInButtons:f,insertTexts:{link:["[","](#url#)"],image:["![](","#url#)"],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},promptTexts:{link:"URL for the link:",image:"URL of the image:"},blockStyles:{bold:"**",code:"```",italic:"*"},shortcuts:{bold:"Cmd-B",italic:"Cmd-I",link:"Cmd-K",heading:"Cmd-H",quote:"Cmd-'",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",image:"Cmd-Alt-I",back:"Cmd-Z",front:"Cmd-Y",toggleBlockquote:"Cmd-'","ordered-list":"Cmd-Alt-L","unordered-list":"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},fixShortcut:function(e){return e=s?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i={_mergeProperties:function(e,t){for(var n in t)if(t.hasOwnProperty(n))if(t[n]instanceof Array){var i=e[n]instanceof Array?e[n]:[];e[n]=t[n].concat(i)}else null!=t[n]&&"object"===r(t[n])&&t[n].constructor===Object?e[n]=this._mergeProperties(e[n]||{},t[n]):e[n]=t[n];return e},extend:function(e){for(var t=0;t0){var i=void 0;n.forEach((function(n){i=e[n],t.push(i)}))}return t}},isFunction:function(e){var t=!1;return"function"==typeof e&&(t=!0),t}};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(11);var a={baseUrl:"https://www.github.com",iconLink:"//at.alicdn.com/t/font_823030_gxvkgahpx49.css",gitGubUrl:"https://github.com/Jesonhu/cool-md-editor",editor:{className:{themeDark:"editor-theme-dark",themeLight:"editor-theme-light",fullscreen:"editor-status_fullscreen",compare:"editor-status_show-all",edit:"editor-status_only-edit",preview:"editor-status_only-preview"},theme:{dark:{className:"editor-theme-dark",mode:"base16-dark"},light:{className:"editor-theme-light",mode:"base16-light"}},language:((r=i)&&r.__esModule?r:{default:r}).default},shortcuts:{isOpen:!1},qiniu:{tokenApiUrl:"http://127.0.0.1:3001/api/qiniu/blog/get_token",region:"z1",config:{},putExtra:{}}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={toolbarItem:{bold:"Bold",italic:"Italic",heading:"Heading",quote:"Quote",code:"Code","unordered-list":"Generic List","ordered-list":"Number List",link:"Insert Link",image:"Insert Image",undo:"Undo",redo:"Redo",about:"About Editor",edit:"Toggle Edit",compare:"Toggle Compare",preview:"Toggle Preview",fullscreen:"Toggle Fullscreen"},statusBar:{line:"line",columns:"columns",length:"length"}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={getState:function(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,a=n.type.split(" "),o={},s=0;s` "'(~:]+/,p=/^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/,m=/^\s*\[[^\]]+?\]:.*$/,g=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/;function f(e,t,n){return t.f=t.inline=n,n(e,t)}function E(e,t,n){return t.f=t.block=n,n(e,t)}function S(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==b){var n=i;if(!n){var a=e.innerMode(r,t.htmlState);n="xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText}n&&(t.f=y,t.block=h,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function h(r,i){var o,_=r.column()===i.indentation,g=!(o=i.prevLine.stream)||!/\S/.test(o.string),E=i.indentedCode,S=i.prevLine.hr,h=!1!==i.list,b=(i.listStack[i.listStack.length-1]||0)+3;i.indentedCode=!1;var C=i.indentation;if(null===i.indentationDiff&&(i.indentationDiff=i.indentation,h)){for(i.list=null;C=4&&(E||i.prevLine.fencedCodeEnd||i.prevLine.header||g))return r.skipToEnd(),i.indentedCode=!0,a.code;if(r.eatSpace())return null;if(_&&i.indentation<=b&&(N=r.match(d))&&N[1].length<=6)return i.quote=0,i.header=N[1].length,i.thisLine.header=!0,n.highlightFormatting&&(i.formatting="header"),i.f=i.inline,T(i);if(i.indentation<=b&&r.eat(">"))return i.quote=_?1:i.quote+1,n.highlightFormatting&&(i.formatting="quote"),r.eatSpace(),T(i);if(!O&&!i.setext&&_&&i.indentation<=b&&(N=r.match(l))){var R=N[1]?"ol":"ul";return i.indentation=C+r.current().length,i.list=!0,i.quote=0,i.listStack.push(i.indentation),i.em=!1,i.strong=!1,i.code=!1,i.strikethrough=!1,n.taskLists&&r.match(c,!1)&&(i.taskList=!0),i.f=i.inline,n.highlightFormatting&&(i.formatting=["list","list-"+R]),T(i)}return _&&i.indentation<=b&&(N=r.match(p,!0))?(i.quote=0,i.fencedEndRE=new RegExp(N[1]+"+ *$"),i.localMode=n.fencedCodeBlockHighlighting&&function(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var i=e.getMode(t,n);return"null"==i.name?null:i}(N[2]),i.localMode&&(i.localState=e.startState(i.localMode)),i.f=i.block=v,n.highlightFormatting&&(i.formatting="code-block"),i.code=-1,T(i)):i.setext||!(y&&h||i.quote||!1!==i.list||i.code||O||m.test(r.string))&&(N=r.lookAhead(1))&&(N=N.match(u))?(i.setext?(i.header=i.setext,i.setext=0,r.skipToEnd(),n.highlightFormatting&&(i.formatting="header")):(i.header="="==N[0].charAt(0)?1:2,i.setext=i.header),i.thisLine.header=!0,i.f=i.inline,T(i)):O?(r.skipToEnd(),i.hr=!0,i.thisLine.hr=!0,a.hr):"["===r.peek()?f(r,i,A):f(r,i,i.inline)}function b(t,n){var a=r.token(t,n.htmlState);if(!i){var o=e.innerMode(r,n.htmlState);("xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=y,n.block=h,n.htmlState=null)}return a}function v(e,t){var r,i=t.listStack[t.listStack.length-1]||0,o=t.indentation=e.quote?t.push(a.formatting+"-"+e.formatting[r]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(a.linkHref,"url"):(e.strong&&t.push(a.strong),e.em&&t.push(a.em),e.strikethrough&&t.push(a.strikethrough),e.emoji&&t.push(a.emoji),e.linkText&&t.push(a.linkText),e.code&&t.push(a.code),e.image&&t.push(a.image),e.imageAltText&&t.push(a.imageAltText,"link"),e.imageMarker&&t.push(a.imageMarker)),e.header&&t.push(a.header,a.header+"-"+e.header),e.quote&&(t.push(a.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(a.quote+"-"+e.quote):t.push(a.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var i=(e.listStack.length-1)%3;i?1===i?t.push(a.list2):t.push(a.list3):t.push(a.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function C(e,t){if(e.match(_,!0))return T(t)}function y(t,i){var o=i.text(t,i);if(void 0!==o)return o;if(i.list)return i.list=null,T(i);if(i.taskList)return" "===t.match(c,!0)[1]?i.taskOpen=!0:i.taskClosed=!0,n.highlightFormatting&&(i.formatting="task"),i.taskList=!1,T(i);if(i.taskOpen=!1,i.taskClosed=!1,i.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(i.formatting="header"),T(i);var s=t.next();if(i.linkTitle){i.linkTitle=!1;var l=s;"("===s&&(l=")");var d="^\\s*(?:[^"+(l=(l+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+l;if(t.match(new RegExp(d),!0))return a.linkHref}if("`"===s){var u=i.formatting;n.highlightFormatting&&(i.formatting="code"),t.eatWhile("`");var _=t.current().length;if(0!=i.code||i.quote&&1!=_){if(_==i.code){var p=T(i);return i.code=0,p}return i.formatting=u,T(i)}return i.code=_,T(i)}if(i.code)return T(i);if("\\"===s&&(t.next(),n.highlightFormatting)){var m=T(i),f=a.formatting+"-escape";return m?m+" "+f:f}if("!"===s&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return i.imageMarker=!0,i.image=!0,n.highlightFormatting&&(i.formatting="image"),T(i);if("["===s&&i.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return i.imageMarker=!1,i.imageAltText=!0,n.highlightFormatting&&(i.formatting="image"),T(i);if("]"===s&&i.imageAltText){n.highlightFormatting&&(i.formatting="image");var m=T(i);return i.imageAltText=!1,i.image=!1,i.inline=i.f=N,m}if("["===s&&!i.image)return i.linkText&&t.match(/^.*?\]/)||(i.linkText=!0,n.highlightFormatting&&(i.formatting="link")),T(i);if("]"===s&&i.linkText){n.highlightFormatting&&(i.formatting="link");var m=T(i);return i.linkText=!1,i.inline=i.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?N:y,m}if("<"===s&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return i.f=i.inline=O,n.highlightFormatting&&(i.formatting="link"),(m=T(i))?m+=" ":m="",m+a.linkInline;if("<"===s&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return i.f=i.inline=O,n.highlightFormatting&&(i.formatting="link"),(m=T(i))?m+=" ":m="",m+a.linkEmail;if(n.xml&&"<"===s&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var S=t.string.indexOf(">",t.pos);if(-1!=S){var h=t.string.substring(t.start,S);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(h)&&(i.md_inside=!0)}return t.backUp(1),i.htmlState=e.startState(r),E(t,i,b)}if(n.xml&&"<"===s&&t.match(/^\/\w*?>/))return i.md_inside=!1,"tag";if("*"===s||"_"===s){for(var v=1,C=1==t.pos?" ":t.string.charAt(t.pos-2);v<3&&t.eat(s);)v++;var R=t.peek()||" ",A=!/\s/.test(R)&&(!g.test(R)||/\s/.test(C)||g.test(C)),I=!/\s/.test(C)&&(!g.test(C)||/\s/.test(R)||g.test(R)),x=null,D=null;if(v%2&&(i.em||!A||"*"!==s&&I&&!g.test(C)?i.em!=s||!I||"*"!==s&&A&&!g.test(R)||(x=!1):x=!0),v>1&&(i.strong||!A||"*"!==s&&I&&!g.test(C)?i.strong!=s||!I||"*"!==s&&A&&!g.test(R)||(D=!1):D=!0),null!=D||null!=x)return n.highlightFormatting&&(i.formatting=null==x?"strong":null==D?"em":"strong em"),!0===x&&(i.em=s),!0===D&&(i.strong=s),p=T(i),!1===x&&(i.em=!1),!1===D&&(i.strong=!1),p}else if(" "===s&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return T(i);t.backUp(1)}if(n.strikethrough)if("~"===s&&t.eatWhile(s)){if(i.strikethrough)return n.highlightFormatting&&(i.formatting="strikethrough"),p=T(i),i.strikethrough=!1,p;if(t.match(/^[^\s]/,!1))return i.strikethrough=!0,n.highlightFormatting&&(i.formatting="strikethrough"),T(i)}else if(" "===s&&t.match(/^~~/,!0)){if(" "===t.peek())return T(i);t.backUp(2)}if(n.emoji&&":"===s&&t.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){i.emoji=!0,n.highlightFormatting&&(i.formatting="emoji");var w=T(i);return i.emoji=!1,w}return" "===s&&(t.match(/^ +$/,!1)?i.trailingSpace++:i.trailingSpace&&(i.trailingSpaceNewLine=!0)),T(i)}function O(e,t){if(">"===e.next()){t.f=t.inline=y,n.highlightFormatting&&(t.formatting="link");var r=T(t);return r?r+=" ":r="",r+a.linkInline}return e.match(/^[^>]+/,!0),a.linkInline}function N(e,t){if(e.eatSpace())return null;var r,i=e.next();return"("===i||"["===i?(t.f=t.inline=(r="("===i?")":"]",function(e,t){if(e.next()===r){t.f=t.inline=y,n.highlightFormatting&&(t.formatting="link-string");var i=T(t);return t.linkHref=!1,i}return e.match(R[r]),t.linkHref=!0,T(t)}),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,T(t)):"error"}var R={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function A(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=I,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,T(t)):f(e,t,y)}function I(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=x,n.highlightFormatting&&(t.formatting="link");var r=T(t);return t.linkText=!1,r}return e.match(/^([^\]\\]|\\.)+/,!0),a.linkText}function x(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=y,a.linkHref+" url")}var D={startState:function(){return{f:h,prevLine:{stream:null},thisLine:{stream:null},block:h,htmlState:null,indentation:0,inline:y,text:C,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(r,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return S(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=b)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==b?{state:e.htmlState,mode:r}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:D}},indent:function(t,n,i){return t.block==b&&r.indent?r.indent(t.htmlState,n,i):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,i):e.Pass},blankLine:S,getType:T,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return D}),"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")}(n(1),n(32),n(33))},function(e,t,n){!function(e){"use strict";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,i){return(e!=i.streamSeen||Math.min(i.basePos,i.overlayPos)=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function l(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function c(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(s(e))continue;return}if(o(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t+1}}function d(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(l(e))continue;return}if(o(e,t+1)){i.lastIndex=t,e.ch=t;var n=i.exec(e.text);if(n&&n.index==t)return n}else e.ch=t}}function u(e){for(;;){i.lastIndex=e.ch;var t=i.exec(e.text);if(!t){if(s(e))continue;return}if(o(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}function _(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(l(e))continue;return}if(o(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t}}function p(e,n){for(var r=[];;){var i,a=u(e),o=e.line,s=e.ch-(a?a[0].length:0);if(!a||!(i=c(e)))return;if("selfClose"!=i)if(a[1]){for(var l=r.length-1;l>=0;--l)if(r[l]==a[2]){r.length=l;break}if(l<0&&(!n||n==a[2]))return{tag:a[2],from:t(o,s),to:t(e.line,e.ch)}}else r.push(a[2])}}function m(e,n){for(var r=[];;){var i=_(e);if(!i)return;if("selfClose"!=i){var a=e.line,o=e.ch,s=d(e);if(!s)return;if(s[1])r.push(s[2]);else{for(var l=r.length-1;l>=0;--l)if(r[l]==s[2]){r.length=l;break}if(l<0&&(!n||n==s[2]))return{tag:s[2],from:t(e.line,e.ch),to:t(a,o)}}}else d(e)}}e.registerHelper("fold","xml",(function(e,r){for(var i=new a(e,r.line,0);;){var o=u(i);if(!o||i.line!=r.line)return;var s=c(i);if(!s)return;if(!o[1]&&"selfClose"!=s){var l=t(i.line,i.ch),d=p(i,o[2]);return d&&n(d.from,l)>0?{from:l,to:d.from}:null}}})),e.findMatchingTag=function(e,r,i){var o=new a(e,r.line,r.ch,i);if(-1!=o.text.indexOf(">")||-1!=o.text.indexOf("<")){var s=c(o),l=s&&t(o.line,o.ch),u=s&&d(o);if(s&&u&&!(n(o,r)>0)){var _={from:t(o.line,o.ch),to:l,tag:u[2]};return"selfClose"==s?{open:_,close:null,at:"open"}:u[1]?{open:m(o,u[2]),close:_,at:"close"}:{open:_,close:p(o=new a(e,l.line,l.ch,i),u[2]),at:"open"}}}},e.findEnclosingTag=function(e,t,n,r){for(var i=new a(e,t.line,t.ch,n);;){var o=m(i,r);if(!o)break;var s=p(new a(e,t.line,t.ch,n),o.tag);if(s)return{open:o,close:s}}},e.scanForClosingTag=function(e,t,n,r){return p(new a(e,t.line,t.ch,r?{from:0,to:r}:null),n)}}(n(1))},function(e,t,n){!function(e){"use strict";function t(t,n,i,a){if(i&&i.call){var o=i;i=null}else o=r(t,i,"rangeFinder");"number"==typeof n&&(n=e.Pos(n,0));var s=r(t,i,"minFoldSize");function l(e){var r=o(t,n);if(!r||r.to.line-r.from.linet.firstLine();)n=e.Pos(n.line-1,0),c=l(!1);if(c&&!c.cleared&&"unfold"!==a){var d=function(e,t,n){var i=r(e,t,"widget");if("function"==typeof i&&(i=i(n.from,n.to)),"string"==typeof i){var a=document.createTextNode(i);(i=document.createElement("span")).appendChild(a),i.className="CodeMirror-foldmarker"}else i&&(i=i.cloneNode(!0));return i}(t,i,c);e.on(d,"mousedown",(function(t){u.clear(),e.e_preventDefault(t)}));var u=t.markText(c.from,c.to,{replacedWith:d,clearOnEnter:r(t,i,"clearOnEnter"),__isFold:!0});u.on("clear",(function(n,r){e.signal(t,"unfold",t,n,r)})),e.signal(t,"fold",t,c.from,c.to)}}e.newFoldFunction=function(e,n){return function(r,i){t(r,i,{rangeFinder:e,widget:n})}},e.defineExtension("foldCode",(function(e,n,r){t(this,e,n,r)})),e.defineExtension("isFolded",(function(e){for(var t=this.findMarksAt(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};h(this,e),t.editor=this,this.init(t)}return a(e,[{key:"init",value:function(e){var t=this;this.initData(e).then((function(){t.initView(t._options)}))}},{key:"initData",value:function(e){var t=this;return new Promise((function(n,r){t.initOption(e),t.initEditorStatus(),t.initQiniu(t._options.qiniu),n()}))}},{key:"initView",value:function(e){var t=this;this.createIconLink(),this.createElement(e).then((function(){t.initEvent(),t.initCodeMirrorData(),t.initMarkdownData(),t.initDefaultContent(),t.lifecycleMounted()}))}},{key:"initEvent",value:function(){this.initStatusEvent(),this.initToolsEvent()}},{key:"initOption",value:function(e){this._options=u.default.extend({},{shortcuts:{isOpen:!0},lang:"zh",qiniu:{tokenApiUrl:"http://127.0.0.1:3001/api/qiniu/test/get_token",region:"z1",config:{},putExtra:{}}},e),this._options.$tools=d.default;var t=this._options;if(console.log(this._options),"string"==typeof t.lang){var n=t.lang;this._options.lang=v[n]||s.default.editor.language}else this._options.lang=Object.assign({},s.default.editor.language,e.lang)}},{key:"lifecycleMounted",value:function(){this.addEditContainerPaseImg()}},{key:"createIconLink",value:function(){if(!this.isCreatedIconLink()){var e=document.createElement("link");e.setAttribute("data-editor",!0),e.rel="stylesheet",e.href=s.default.iconLink,document.getElementsByTagName("head")[0].appendChild(e)}}},{key:"isCreatedIconLink",value:function(){return!!document.querySelector("link[data-editor]")}},{key:"createElement",value:function(e){return new Promise((function(t,n){o.default.init(e).then((function(){t()}))}))}},{key:"initToolsEvent",value:function(){var e=this,t=this._options.$tools,n=this._options.el,r=t.toolbarBuiltInButtons,i=u.default.obj2Arr(r);i.length>0&&i.forEach((function(t){t.className.indexOf(" ")>0&&(t.className=t.className.split(" ")[0]);var r="."+t.className,i=t.action,a=u.default.isFunction(i);if(""!==r&&a){var o=n.querySelector(".editor-tools").querySelector(r);o&&(e.$status,o.$editor=e,o.addEventListener("click",i,!1))}}))}},{key:"createCodeMirrorElement",value:function(e,t){return m.default.fromTextArea(e,t)}},{key:"initCodeMirrorData",value:function(){this._options;var e=this._options.el.querySelector("#area");this.$codemirror=this.createCodeMirrorElement(e,{mode:{name:"gfm",tokenTypeOverrides:{emoji:"emoji"}},lineNumbers:!0,matchBrackets:!0,indentUnit:4,lineWrapping:!0,styleActiveLine:!0,theme:"base16-dark",autoCloseBrackets:!0,autoCloseTags:!0,foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"]}),this.$codemirror.$editor=this,this.initCodeMirrorEvent()}},{key:"initCodeMirrorEvent",value:function(){this.add_CM_change_eventHandle(),this.add_CM_cursorActivity_eventHandle(),this.addScrollSync()}},{key:"add_CM_change_eventHandle",value:function(){this.$codemirror.on("changes",(0,c.debounce)(this.onCodeMirrorChange,300))}},{key:"onCodeMirrorChange",value:function(e){e.$editor.commonCodeMirrorEventHandle(e)}},{key:"add_CM_cursorActivity_eventHandle",value:function(){this.$codemirror.on("cursorActivity",this.onCodeMirrorCursorActivity)}},{key:"onCodeMirrorCursorActivity",value:function(e){e.$editor.commonCodeMirrorEventHandle(e)}},{key:"commonCodeMirrorEventHandle",value:function(e){var t=e.getValue(),n=e.$editor;n.setHtmlValue(t),n.updateStatusBar(n)}},{key:"initMarkdownData",value:function(e){if(g.default){var t={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,smartLists:!0,smartypants:!1,highlight:function(e){return f.default.highlightAuto(e).value}};this.$marked=g.default,this.$marked.setOptions(t)}}},{key:"initMarkdownEvent",value:function(){}},{key:"initDefaultContent",value:function(){var e=this._options.defaultCon;if(e){var t=this.$codemirror;t.setValue(e),this.commonCodeMirrorEventHandle(t)}}},{key:"getMDValue",value:function(){return this.$codemirror.getValue()}},{key:"setHtmlValue",value:function(e){var t=this.$marked(e);this._options.el.querySelector(".editor-preview").querySelector(".preview-bd").innerHTML=t}},{key:"addScrollSync",value:function(){var e=this.$codemirror,t=this._options.el.querySelector(".editor-preview"),n=!1,r=!1;e.on("scroll",(function(e){if(n)n=!1;else{r=!0;var i=e.getScrollInfo().height-e.getScrollInfo().clientHeight,a=parseFloat(e.getScrollInfo().top)/i,o=(t.scrollHeight-t.clientHeight)*a;t.scrollTop=o}})),t.addEventListener("scroll",(function(){if(r)r=!1;else{n=!0;var i=t.scrollHeight-t.clientHeight,a=parseFloat(t.scrollTop)/i,o=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*a;e.scrollTo(0,o)}}))}},{key:"updateStatusBar",value:function(){var e=this.$codemirror.getValue().length;this.renderEditorContentPosition(),this.renderEditContentLength(e)}},{key:"renderEditContentLength",value:function(e){var t=this._options.el.querySelector(".editor-status").querySelector(".editor-status-length"),n=this._options.lang.statusBar.length;t.innerHTML=n+" "+e}},{key:"renderEditorContentPosition",value:function(){var e=this.$codemirror,t=e.lineCount(),n=e.getCursor(),r=n.ch+1,i=n.line+1,a=this._options.lang.statusBar,o=a.line,s=a.columns;this._options.el.querySelector(".editor-status").querySelector(".editor-status-positon").querySelector("span").innerHTML=o+" "+i+","+s+" "+r+" 一 "+t+" "+o}},{key:"initEditorStatus",value:function(e){this.$status={},this.$status.isThemeLight=!0,this.$status.isFullscreen=!1,this.$status.isShowAll=!0,this.$status.isOnlyPreview=!1,this.$status.isOnlyEdit=!1}},{key:"initStatusEvent",value:function(){this.initEventToggleTheme()}},{key:"initEventToggleTheme",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".icon-theme",n=this,r=this._options.el.querySelector(".editor-status").querySelector(t),i=this._options.el,a=u.default.addClass,o=u.default.removeClass;if(r){r.addEventListener("click",(function(){n.$status.isThemeLight?(a(i,"editor-theme-dark"),o(i,"editor-theme-light")):(a(i,"editor-theme-light"),o(i,"editor-theme-dark")),n.$status.isThemeLight=!n.$status.isThemeLight}))}}},{key:"initEventToggleFullscreen",value:function(e){}},{key:"initQiniu",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};T=new E.default(e)}},{key:"addEditContainerPaseImg",value:function(){var e=this._options.el.querySelector(".editor-md"),t=this.$codemirror;e.addEventListener("paste",(function(e){if(e.clipboardData||e.originalEvent){var t=e.clipboardData||e.originalEvent.clipboardData;if(t.items){for(var r,i=0;i\n ",e()}))},createToolsMain:function(e){var t=this,n=this.getToolsEdit(e),r='
';if(n.length>0){var i=n.length;n.forEach((function(e,n){n>0&&(n+1)%3==0&&n!==i-1?r=r+t.createToolsItem(e)+'|':r+=t.createToolsItem(e)}))}return r+="
"},getToolsEdit:function(e){if("object"===(void 0===e?"undefined":i(e))){var t={},n=JSON.parse(JSON.stringify(e));for(var r in n)n[r].isEditTools&&(t[r]=n[r]);return this.sortToolsIcon(t,"index")}},createToolsHandle:function(e){var t=this.getToolsHandle(e),n='
',r=this;return t.forEach((function(e,t){n+=r.createToolsItem(e)})),n+="
"},getToolsHandle:function(e){if("object"===(void 0===e?"undefined":i(e))){var t={},n=JSON.parse(JSON.stringify(e));for(var r in n)n[r].isEditTools||(t[r]=n[r]);return this.sortToolsIcon(t,"index")}},sortToolsIcon:function(e,t){if("object"===(void 0===e?"undefined":i(e))){var n=[];for(var r in e)n.push(e[r]);return n.sort((function(e,t){return e.index-t.index}))}},createToolsItem:function(e){var t=s[e.name],n=void 0;n=t?l(t):"";var r=this.getToolItemTitleText(e.name);return this.$editor.options.fixShortcut&&this.$editor.options.fixShortcut.isOpen?'':''},getToolItemTitleText:function(e){return this.$editor.options.lang.toolbarItem[e.toLowerCase()]},renderCode:function(e){var t=e.el;return new Promise((function(e,n){t.innerHTML+='\n
\n
\n \n
\n
\n ',e()}))},renderPriview:function(e){var t=e.el;return new Promise((function(e,n){t.innerHTML+='\n
\n
\n
\n
\n ',e()}))},renderStatus:function(e){var t=e.el,n=this.createStatusPosition(e),r=this.createStatusLens();return new Promise((function(e,i){t.innerHTML+='\n
'+n+r+"
",e()}))},createStatusPosition:function(e){var t=this.createStatusToggleTheme(),n=this.$editor.options.lang.statusBar,r=n.line;return'
'+r+" ,"+n.columns+" 一 "+r+""+t+"
"},createStatusToggleTheme:function(){return''},createStatusLens:function(){return'
'+this.$editor.options.lang.statusBar.length+"
"}};t.default=c},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={toolbarItem:{bold:"加粗",italic:"斜体",heading:"标题",quote:"引用",code:"代码块","unordered-list":"无序列表","ordered-list":"有序列表",link:"插入链接",image:"插入图片",undo:"撤消",redo:"重做",about:"关于编辑器",edit:"编辑模式",compare:"常规模式",preview:"预览模式",fullscreen:"切换全屏"},statusBar:{line:"行",columns:"列",length:"总长度"}}},function(e,t,n){!function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode("xml",(function(r,i){var a,o,s=r.indentUnit,l={},c=i.htmlMode?t:n;for(var d in c)l[d]=c[d];for(var d in i)l[d]=i[d];function u(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();return"<"==r?e.eat("!")?e.eat("[")?e.match("CDATA[")?n(p("atom","]]>")):null:e.match("--")?n(p("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(function e(t){return function(n,r){for(var i;null!=(i=n.next());){if("<"==i)return r.tokenize=e(t+1),r.tokenize(n,r);if(">"==i){if(1==t){r.tokenize=u;break}return r.tokenize=e(t-1),r.tokenize(n,r)}}return"meta"}}(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=p("meta","?>"),"meta"):(a=e.eat("/")?"closeTag":"openTag",t.tokenize=_,"tag bracket"):"&"==r?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function _(e,t){var n,r,i=e.next();if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=u,a=">"==i?"endTag":"selfcloseTag","tag bracket";if("="==i)return a="equals",null;if("<"==i){t.tokenize=u,t.state=E,t.tagName=t.tagStart=null;var o=t.tokenize(e,t);return o?o+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(n=i,(r=function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=_;break}return"string"}).isInAttribute=!0,r),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function p(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=u;break}n.next()}return e}}function m(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function g(e){e.context&&(e.context=e.context.prev)}function f(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!l.contextGrabbers.hasOwnProperty(n)||!l.contextGrabbers[n].hasOwnProperty(t))return;g(e)}}function E(e,t,n){return"openTag"==e?(n.tagStart=t.column(),S):"closeTag"==e?h:E}function S(e,t,n){return"word"==e?(n.tagName=t.current(),o="tag",T):l.allowMissingTagName&&"endTag"==e?(o="tag bracket",T(e,0,n)):(o="error",S)}function h(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&l.implicitlyClosed.hasOwnProperty(n.context.tagName)&&g(n),n.context&&n.context.tagName==r||!1===l.matchClosing?(o="tag",b):(o="tag error",v)}return l.allowMissingTagName&&"endTag"==e?(o="tag bracket",b(e,0,n)):(o="error",v)}function b(e,t,n){return"endTag"!=e?(o="error",b):(g(n),E)}function v(e,t,n){return o="error",b(e,0,n)}function T(e,t,n){if("word"==e)return o="attribute",C;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||l.autoSelfClosers.hasOwnProperty(r)?f(n,r):(f(n,r),n.context=new m(n,r,i==n.indented)),E}return o="error",T}function C(e,t,n){return"equals"==e?y:(l.allowMissing||(o="error"),T(e,0,n))}function y(e,t,n){return"string"==e?O:"word"==e&&l.allowUnquoted?(o="string",T):(o="error",T(e,0,n))}function O(e,t,n){return"string"==e?O:T(e,0,n)}return u.isInText=!0,{startState:function(e){var t={tokenize:u,state:E,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var n=t.tokenize(e,t);return(n||a)&&"comment"!=n&&(o=null,t.state=t.state(a||n,e,t),o&&(n="error"==o?n+" error":o)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+s;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=_&&t.tokenize!=u)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==l.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+s*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(e){e.state==y&&(e.state=T)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)n.tagName&&t.push(n.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(1))},function(e,t,n){!function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var t=0;t-1&&t.substring(i+1,t.length);if(a)return e.findModeByExtension(a)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",(function(n,r){var i=0,a={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var a=e.pos;e.eatWhile("`");var o=1+e.pos-a;return n.code?o===i&&(n.code=!1):(i=o,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==r.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},o={taskLists:!0,strikethrough:!0,emoji:!0};for(var s in r)o[s]=r[s];return o.name="markdown",e.overlayMode(e.getMode(n,o),a)}),"markdown"),e.defineMIME("text/x-gfm","gfm")}(n(1),n(14),n(15))},function(e,t,n){!function(e){"use strict";e.defineMode("javascript",(function(t,n){var r,i,a=t.indentUnit,o=n.statementIndent,s=n.jsonld,l=n.json||s,c=n.typescript,d=n.wordCharacters||/[\w$\xa1-\uffff]/,u=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),n=e("keyword b"),r=e("keyword c"),i=e("keyword d"),a=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:n,do:n,try:n,finally:n,return:i,break:i,continue:i,new:e("new"),delete:r,void:r,throw:r,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:a,typeof:a,instanceof:a,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:r,export:e("export"),import:e("import"),extends:r,await:r}}(),_=/[+\-*&%=<>!?|~^@]/,p=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function m(e,t,n){return r=e,i=n,t}function g(e,t){var n,r=e.next();if('"'==r||"'"==r)return t.tokenize=(n=r,function(e,t){var r,i=!1;if(s&&"@"==e.peek()&&e.match(p))return t.tokenize=g,m("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=n||i);)i=!i&&"\\"==r;return i||(t.tokenize=g),m("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return m("number","number");if("."==r&&e.match(".."))return m("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return m(r);if("="==r&&e.eat(">"))return m("=>","operator");if("0"==r&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return m("number","number");if(/\d/.test(r))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),m("number","number");if("/"==r)return e.eat("*")?(t.tokenize=f,f(e,t)):e.eat("/")?(e.skipToEnd(),m("comment","comment")):je(e,t,1)?(function(e){for(var t,n=!1,r=!1;null!=(t=e.next());){if(!n){if("/"==t&&!r)return;"["==t?r=!0:r&&"]"==t&&(r=!1)}n=!n&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),m("regexp","string-2")):(e.eat("="),m("operator","operator",e.current()));if("`"==r)return t.tokenize=E,E(e,t);if("#"==r)return e.skipToEnd(),m("error","error");if("<"==r&&e.match("!--")||"-"==r&&e.match("->"))return e.skipToEnd(),m("comment","comment");if(_.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),m("operator","operator",e.current());if(d.test(r)){e.eatWhile(d);var i=e.current();if("."!=t.lastType){if(u.propertyIsEnumerable(i)){var a=u[i];return m(a.type,a.style,i)}if("async"==i&&e.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return m("async","keyword",i)}return m("variable","variable",i)}}function f(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=g;break}r="*"==n}return m("comment","comment")}function E(e,t){for(var n,r=!1;null!=(n=e.next());){if(!r&&("`"==n||"$"==n&&e.eat("{"))){t.tokenize=g;break}r=!r&&"\\"==n}return m("quasi","string-2",e.current())}function S(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf("=>",e.start);if(!(n<0)){if(c){var r=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,n));r&&(n=r.index)}for(var i=0,a=!1,o=n-1;o>=0;--o){var s=e.string.charAt(o),l="([{}])".indexOf(s);if(l>=0&&l<3){if(!i){++o;break}if(0==--i){"("==s&&(a=!0);break}}else if(l>=3&&l<6)++i;else if(d.test(s))a=!0;else if(/["'\/`]/.test(s))for(;;--o){if(0==o)return;if(e.string.charAt(o-1)==s&&"\\"!=e.string.charAt(o-2)){o--;break}}else if(a&&!i){++o;break}}a&&!i&&(t.fatArrowAt=o)}}var h={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function b(e,t,n,r,i,a){this.indented=e,this.column=t,this.type=n,this.prev=i,this.info=a,null!=r&&(this.align=r)}function v(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;for(var r=e.context;r;r=r.prev)for(n=r.vars;n;n=n.next)if(n.name==t)return!0}var T={state:null,column:null,marked:null,cc:null};function C(){for(var e=arguments.length-1;e>=0;e--)T.cc.push(arguments[e])}function y(){return C.apply(null,arguments),!0}function O(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}function N(e){var t=T.state;if(T.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,n){if(n){if(n.block){var r=e(t,n.prev);return r?r==n.prev?n:new A(r,n.vars,!0):null}return O(t,n.vars)?n:new A(n.prev,new I(t,n.vars),!1)}return null}(e,t.context);if(null!=r)return void(t.context=r)}else if(!O(e,t.localVars))return void(t.localVars=new I(e,t.localVars));n.globalVars&&!O(e,t.globalVars)&&(t.globalVars=new I(e,t.globalVars))}function R(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function A(e,t,n){this.prev=e,this.vars=t,this.block=n}function I(e,t){this.name=e,this.next=t}var x=new I("this",new I("arguments",null));function D(){T.state.context=new A(T.state.context,T.state.localVars,!1),T.state.localVars=x}function w(){T.state.context=new A(T.state.context,T.state.localVars,!0),T.state.localVars=null}function M(){T.state.localVars=T.state.context.vars,T.state.context=T.state.context.prev}function L(e,t){var n=function(){var n=T.state,r=n.indented;if("stat"==n.lexical.type)r=n.lexical.indented;else for(var i=n.lexical;i&&")"==i.type&&i.align;i=i.prev)r=i.indented;n.lexical=new b(r,T.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function P(){var e=T.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function k(e){return function t(n){return n==e?y():";"==e||"}"==n||")"==n||"]"==n?C():y(t)}}function F(e,t){return"var"==e?y(L("vardef",t),Se,k(";"),P):"keyword a"==e?y(L("form"),Y,F,P):"keyword b"==e?y(L("form"),F,P):"keyword d"==e?T.stream.match(/^\s*$/,!1)?y():y(L("stat"),q,k(";"),P):"debugger"==e?y(k(";")):"{"==e?y(L("}"),w,ae,P,M):";"==e?y():"if"==e?("else"==T.state.lexical.info&&T.state.cc[T.state.cc.length-1]==P&&T.state.cc.pop()(),y(L("form"),Y,F,P,ye)):"function"==e?y(Ae):"for"==e?y(L("form"),Oe,F,P):"class"==e||c&&"interface"==t?(T.marked="keyword",y(L("form","class"==e?e:t),Me,P)):"variable"==e?c&&"declare"==t?(T.marked="keyword",y(F)):c&&("module"==t||"enum"==t||"type"==t)&&T.stream.match(/^\s*\w/,!1)?(T.marked="keyword","enum"==t?y(Ve):"type"==t?y(xe,k("operator"),de,k(";")):y(L("form"),he,k("{"),L("}"),ae,P,P)):c&&"namespace"==t?(T.marked="keyword",y(L("form"),B,F,P)):c&&"abstract"==t?(T.marked="keyword",y(F)):y(L("stat"),Z):"switch"==e?y(L("form"),Y,k("{"),L("}","switch"),w,ae,P,P,M):"case"==e?y(B,k(":")):"default"==e?y(k(":")):"catch"==e?y(L("form"),D,U,F,P,M):"export"==e?y(L("stat"),Fe,P):"import"==e?y(L("stat"),Be,P):"async"==e?y(F):"@"==t?y(B,F):C(L("stat"),B,k(";"),P)}function U(e){if("("==e)return y(De,k(")"))}function B(e,t){return H(e,t,!1)}function G(e,t){return H(e,t,!0)}function Y(e){return"("!=e?C():y(L(")"),q,k(")"),P)}function H(e,t,n){if(T.state.fatArrowAt==T.stream.start){var r=n?Q:$;if("("==e)return y(D,L(")"),re(De,")"),P,k("=>"),r,M);if("variable"==e)return C(D,he,k("=>"),r,M)}var i=n?V:z;return h.hasOwnProperty(e)?y(i):"function"==e?y(Ae,i):"class"==e||c&&"interface"==t?(T.marked="keyword",y(L("form"),we,P)):"keyword c"==e||"async"==e?y(n?G:B):"("==e?y(L(")"),q,k(")"),P,i):"operator"==e||"spread"==e?y(n?G:B):"["==e?y(L("]"),ze,P,i):"{"==e?ie(ee,"}",null,i):"quasi"==e?C(W,i):"new"==e?y(function(e){return function(t){return"."==t?y(e?X:K):"variable"==t&&c?y(ge,e?V:z):C(e?G:B)}}(n)):"import"==e?y(B):y()}function q(e){return e.match(/[;\}\)\],]/)?C():C(B)}function z(e,t){return","==e?y(q):V(e,t,!1)}function V(e,t,n){var r=0==n?z:V,i=0==n?B:G;return"=>"==e?y(D,n?Q:$,M):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?y(r):c&&"<"==t&&T.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?y(L(">"),re(de,">"),P,r):"?"==t?y(B,k(":"),i):y(i):"quasi"==e?C(W,r):";"!=e?"("==e?ie(G,")","call",r):"."==e?y(J,r):"["==e?y(L("]"),q,k("]"),P,r):c&&"as"==t?(T.marked="keyword",y(de,r)):"regexp"==e?(T.state.lastType=T.marked="operator",T.stream.backUp(T.stream.pos-T.stream.start-1),y(i)):void 0:void 0}function W(e,t){return"quasi"!=e?C():"${"!=t.slice(t.length-2)?y(W):y(B,j)}function j(e){if("}"==e)return T.marked="string-2",T.state.tokenize=E,y(W)}function $(e){return S(T.stream,T.state),C("{"==e?F:B)}function Q(e){return S(T.stream,T.state),C("{"==e?F:G)}function K(e,t){if("target"==t)return T.marked="keyword",y(z)}function X(e,t){if("target"==t)return T.marked="keyword",y(V)}function Z(e){return":"==e?y(P,F):C(z,k(";"),P)}function J(e){if("variable"==e)return T.marked="property",y()}function ee(e,t){return"async"==e?(T.marked="property",y(ee)):"variable"==e||"keyword"==T.style?(T.marked="property","get"==t||"set"==t?y(te):(c&&T.state.fatArrowAt==T.stream.start&&(n=T.stream.match(/^\s*:\s*/,!1))&&(T.state.fatArrowAt=T.stream.pos+n[0].length),y(ne))):"number"==e||"string"==e?(T.marked=s?"property":T.style+" property",y(ne)):"jsonld-keyword"==e?y(ne):c&&R(t)?(T.marked="keyword",y(ee)):"["==e?y(B,oe,k("]"),ne):"spread"==e?y(G,ne):"*"==t?(T.marked="keyword",y(ee)):":"==e?C(ne):void 0;var n}function te(e){return"variable"!=e?C(ne):(T.marked="property",y(Ae))}function ne(e){return":"==e?y(G):"("==e?C(Ae):void 0}function re(e,t,n){function r(i,a){if(n?n.indexOf(i)>-1:","==i){var o=T.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),y((function(n,r){return n==t||r==t?C():C(e)}),r)}return i==t||a==t?y():n&&n.indexOf(";")>-1?C(e):y(k(t))}return function(n,i){return n==t||i==t?y():C(e,r)}}function ie(e,t,n){for(var r=3;r"),de):void 0}function ue(e){if("=>"==e)return y(de)}function _e(e,t){return"variable"==e||"keyword"==T.style?(T.marked="property",y(_e)):"?"==t||"number"==e||"string"==e?y(_e):":"==e?y(de):"["==e?y(k("variable"),se,k("]"),_e):"("==e?C(Ie,_e):void 0}function pe(e,t){return"variable"==e&&T.stream.match(/^\s*[?:]/,!1)||"?"==t?y(pe):":"==e?y(de):"spread"==e?y(pe):C(de)}function me(e,t){return"<"==t?y(L(">"),re(de,">"),P,me):"|"==t||"."==e||"&"==t?y(de):"["==e?y(de,k("]"),me):"extends"==t||"implements"==t?(T.marked="keyword",y(de)):"?"==t?y(de,k(":"),de):void 0}function ge(e,t){if("<"==t)return y(L(">"),re(de,">"),P,me)}function fe(){return C(de,Ee)}function Ee(e,t){if("="==t)return y(de)}function Se(e,t){return"enum"==t?(T.marked="keyword",y(Ve)):C(he,oe,Te,Ce)}function he(e,t){return c&&R(t)?(T.marked="keyword",y(he)):"variable"==e?(N(t),y()):"spread"==e?y(he):"["==e?ie(ve,"]"):"{"==e?ie(be,"}"):void 0}function be(e,t){return"variable"!=e||T.stream.match(/^\s*:/,!1)?("variable"==e&&(T.marked="property"),"spread"==e?y(he):"}"==e?C():"["==e?y(B,k("]"),k(":"),be):y(k(":"),he,Te)):(N(t),y(Te))}function ve(){return C(he,Te)}function Te(e,t){if("="==t)return y(G)}function Ce(e){if(","==e)return y(Se)}function ye(e,t){if("keyword b"==e&&"else"==t)return y(L("form","else"),F,P)}function Oe(e,t){return"await"==t?y(Oe):"("==e?y(L(")"),Ne,P):void 0}function Ne(e){return"var"==e?y(Se,Re):"variable"==e?y(Re):C(Re)}function Re(e,t){return")"==e?y():";"==e?y(Re):"in"==t||"of"==t?(T.marked="keyword",y(B,Re)):C(B,Re)}function Ae(e,t){return"*"==t?(T.marked="keyword",y(Ae)):"variable"==e?(N(t),y(Ae)):"("==e?y(D,L(")"),re(De,")"),P,le,F,M):c&&"<"==t?y(L(">"),re(fe,">"),P,Ae):void 0}function Ie(e,t){return"*"==t?(T.marked="keyword",y(Ie)):"variable"==e?(N(t),y(Ie)):"("==e?y(D,L(")"),re(De,")"),P,le,M):c&&"<"==t?y(L(">"),re(fe,">"),P,Ie):void 0}function xe(e,t){return"keyword"==e||"variable"==e?(T.marked="type",y(xe)):"<"==t?y(L(">"),re(fe,">"),P):void 0}function De(e,t){return"@"==t&&y(B,De),"spread"==e?y(De):c&&R(t)?(T.marked="keyword",y(De)):c&&"this"==e?y(oe,Te):C(he,oe,Te)}function we(e,t){return"variable"==e?Me(e,t):Le(e,t)}function Me(e,t){if("variable"==e)return N(t),y(Le)}function Le(e,t){return"<"==t?y(L(">"),re(fe,">"),P,Le):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(T.marked="keyword"),y(c?de:B,Le)):"{"==e?y(L("}"),Pe,P):void 0}function Pe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&R(t))&&T.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(T.marked="keyword",y(Pe)):"variable"==e||"keyword"==T.style?(T.marked="property",y(c?ke:Ae,Pe)):"number"==e||"string"==e?y(c?ke:Ae,Pe):"["==e?y(B,oe,k("]"),c?ke:Ae,Pe):"*"==t?(T.marked="keyword",y(Pe)):c&&"("==e?C(Ie,Pe):";"==e||","==e?y(Pe):"}"==e?y():"@"==t?y(B,Pe):void 0}function ke(e,t){if("?"==t)return y(ke);if(":"==e)return y(de,Te);if("="==t)return y(G);var n=T.state.lexical.prev;return C(n&&"interface"==n.info?Ie:Ae)}function Fe(e,t){return"*"==t?(T.marked="keyword",y(qe,k(";"))):"default"==t?(T.marked="keyword",y(B,k(";"))):"{"==e?y(re(Ue,"}"),qe,k(";")):C(F)}function Ue(e,t){return"as"==t?(T.marked="keyword",y(k("variable"))):"variable"==e?C(G,Ue):void 0}function Be(e){return"string"==e?y():"("==e?C(B):C(Ge,Ye,qe)}function Ge(e,t){return"{"==e?ie(Ge,"}"):("variable"==e&&N(t),"*"==t&&(T.marked="keyword"),y(He))}function Ye(e){if(","==e)return y(Ge,Ye)}function He(e,t){if("as"==t)return T.marked="keyword",y(Ge)}function qe(e,t){if("from"==t)return T.marked="keyword",y(B)}function ze(e){return"]"==e?y():C(re(G,"]"))}function Ve(){return C(L("form"),he,k("{"),L("}"),re(We,"}"),P,P)}function We(){return C(he,Te)}function je(e,t,n){return t.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(n||0)))}return M.lex=!0,P.lex=!0,{startState:function(e){var t={tokenize:g,lastType:"sof",cc:[],lexical:new b((e||0)-a,0,"block",!1),localVars:n.localVars,context:n.localVars&&new A(null,null,!1),indented:e||0};return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),S(e,t)),t.tokenize!=f&&e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"==r?n:(t.lastType="operator"!=r||"++"!=i&&"--"!=i?r:"incdec",function(e,t,n,r,i){var a=e.cc;for(T.state=e,T.stream=i,T.marked=null,T.cc=a,T.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((a.length?a.pop():l?B:F)(n,r)){for(;a.length&&a[a.length-1].lex;)a.pop()();return T.marked?T.marked:"variable"==n&&v(e,r)?"variable-2":t}}(t,n,r,i,e))},indent:function(t,r){if(t.tokenize==f)return e.Pass;if(t.tokenize!=g)return 0;var i,s=r&&r.charAt(0),l=t.lexical;if(!/^\s*else\b/.test(r))for(var c=t.cc.length-1;c>=0;--c){var d=t.cc[c];if(d==P)l=l.prev;else if(d!=ye)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(i=t.cc[t.cc.length-1])&&(i==z||i==V)&&!/^[,\.=+\-*:?[\(]/.test(r));)l=l.prev;o&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var u=l.type,p=s==u;return"vardef"==u?l.indented+("operator"==t.lastType||","==t.lastType?l.info.length+1:0):"form"==u&&"{"==s?l.indented:"form"==u?l.indented+a:"stat"==u?l.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||_.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?o||a:0):"switch"!=l.info||p||0==n.doubleIndentSwitch?l.align?l.column+(p?0:1):l.indented+(p?0:a):l.indented+(/^(?:case|default)\b/.test(r)?a:2*a)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:s,jsonMode:l,expressionAllowed:je,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=B&&t!=G||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(n(1))},function(e,t,n){!function(e){e.defineOption("autoCloseTags",!1,(function(o,s,l){if(l!=e.Init&&l&&o.removeKeyMap("autoCloseTags"),s){var c={name:"autoCloseTags"};("object"!=typeof s||s.whenClosing)&&(c["'/'"]=function(t){return function(t){return t.getOption("disableInput")?e.Pass:r(t,!0)}(t)}),("object"!=typeof s||s.whenOpening)&&(c["'>'"]=function(r){return function(r){if(r.getOption("disableInput"))return e.Pass;for(var o=r.listSelections(),s=[],l=r.getOption("autoCloseTags"),c=0;cd.ch&&(g=g.slice(0,g.length-u.end+d.ch));var h=g.toLowerCase();if(!g||"string"==u.type&&(u.end!=d.ch||!/[\"\']/.test(u.string.charAt(u.string.length-1))||1==u.string.length)||"tag"==u.type&&m.close||u.string.indexOf("/")==d.ch-u.start-1||E&&i(E,h)>-1||a(r,_.mode.xmlCurrentContext&&_.mode.xmlCurrentContext(p)||[],g,d,!0))return e.Pass;var b="object"==typeof l&&l.emptyTags;if(b&&i(b,g)>-1)s[c]={text:"/>",newPos:e.Pos(d.line,d.ch+2)};else{var v=S&&i(S,h)>-1;s[c]={indent:v,text:">"+(v?"\n\n":"")+"",newPos:v?e.Pos(d.line+1,0):e.Pos(d.line,d.ch+1)}}}var T="object"==typeof l&&l.dontIndentOnAutoClose;for(c=o.length-1;c>=0;c--){var C=s[c];r.replaceRange(C.text,o[c].head,o[c].anchor,"+insert");var y=r.listSelections().slice(0);y[c]={head:C.newPos,anchor:C.newPos},r.setSelections(y),!T&&C.indent&&(r.indentLine(C.newPos.line,null,!0),r.indentLine(C.newPos.line+1,null,!0))}}(r)}),o.addKeyMap(c)}}));var t=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],n=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];function r(t,n){for(var r=t.listSelections(),i=[],o=n?"/":""!=t.getLine(d.line).charAt(u.end)&&(m+=">"),i[c]=m}if(t.replaceSelections(i),r=t.listSelections(),!l)for(c=0;c=0&&n[c]==r;c--)++l;for(i=s.to,c=1;c[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,r=/[*+-]\s/;function i(e,n){var r=n.line,i=0,a=0,o=t.exec(e.getLine(r)),s=o[1];do{var l=r+(i+=1),c=e.getLine(l),d=t.exec(c);if(d){var u=d[1],_=parseInt(o[3],10)+i-a,p=parseInt(d[3],10),m=p;if(s!==u||isNaN(p)){if(s.length>u.length)return;if(s.lengthp&&(m=_+1),e.replaceRange(c.replace(t,u+m+d[4]+d[5]),{line:l,ch:0},{line:l,ch:c.length})}}while(d)}e.commands.newlineAndIndentContinueMarkdownList=function(a){if(a.getOption("disableInput"))return e.Pass;for(var o=a.listSelections(),s=[],l=0;l\s*$/.test(m),S=!/>\s*$/.test(m);(E||S)&&a.replaceRange("",{line:c.line,ch:0},{line:c.line,ch:c.ch+1}),s[l]="\n"}else{var h=g[1],b=g[5],v=!(r.test(g[2])||g[2].indexOf(">")>=0),T=v?parseInt(g[3],10)+1+g[4]:g[2].replace("x"," ");s[l]="\n"+h+T+b,v&&i(a,c)}}a.replaceSelections(s)}}(n(1))},function(e,t,n){!function(e){var t={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},n=e.Pos;function r(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==typeof e&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,(function(t,n,o){o&&o!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(a(r(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))}));var i={Backspace:function(t){var i=s(t);if(!i||t.getOption("disableInput"))return e.Pass;for(var a=r(i,"pairs"),o=t.listSelections(),c=0;c=0;c--){var u=o[c].head;t.replaceRange("",n(u.line,u.ch-1),n(u.line,u.ch+1),"+delete")}},Enter:function(t){var n=s(t),i=n&&r(n,"explode");if(!i||t.getOption("disableInput"))return e.Pass;for(var a=t.listSelections(),o=0;o1&&_.indexOf(i)>=0&&t.getRange(n(h.line,h.ch-2),h)==i+i){if(h.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(h.line,h.ch-2))))return e.Pass;E="addFour"}else if(p){var v=0==h.ch?" ":t.getRange(n(h.line,h.ch-1),h);if(e.isWordChar(b)||v==i||e.isWordChar(v))return e.Pass;E="both"}else{if(!g||!(0===b.length||/\s/.test(b)||u.indexOf(b)>-1))return e.Pass;E="both"}else E=p&&c(t,h)?"both":_.indexOf(i)>=0&&t.getRange(h,n(h.line,h.ch+3))==i+i+i?"skipThree":"skip";if(d){if(d!=E)return e.Pass}else d=E}var T=l%2?o.charAt(l-1):i,C=l%2?i:o.charAt(l+1);t.operation((function(){if("skip"==d)t.execCommand("goCharRight");else if("skipThree"==d)for(var r=0;r<3;r++)t.execCommand("goCharRight");else if("surround"==d){var i=t.getSelections();for(r=0;r0,{anchor:new n(a.anchor.line,a.anchor.ch+(o?-1:1)),head:new n(a.head.line,a.head.ch+(o?1:-1))});t.setSelections(i)}else"both"==d?(t.replaceSelection(T+C,null),t.triggerElectric(T+C),t.execCommand("goCharLeft")):"addFour"==d&&(t.replaceSelection(T+T+T+T,"before"),t.execCommand("goCharRight"));var a,o}))}(i,t)}}function s(e){var t=e.state.closeBrackets;return!t||t.override?t:e.getModeAt(e.getCursor()).closeBrackets||t}function l(e,t){var r=e.getRange(n(t.line,t.ch-1),n(t.line,t.ch+1));return 2==r.length?r:null}function c(e,t){var r=e.getTokenAt(n(t.line,t.ch+1));return/\bstring/.test(r.type)&&r.start==t.ch&&(0==t.ch||!/\bstring/.test(e.getTokenTypeAt(t)))}a(t.pairs+"`")}(n(1))},function(e,t,n){!function(e){"use strict";function t(e,t){function n(e){clearTimeout(r.doRedraw),r.doRedraw=setTimeout((function(){r.redraw()}),e)}this.cm=e,this.options=t,this.buttonHeight=t.scrollButtonHeight||e.getOption("scrollButtonHeight"),this.annotations=[],this.doRedraw=this.doUpdate=null,this.div=e.getWrapperElement().appendChild(document.createElement("div")),this.div.style.cssText="position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none",this.computeScale();var r=this;e.on("refresh",this.resizeHandler=function(){clearTimeout(r.doUpdate),r.doUpdate=setTimeout((function(){r.computeScale()&&n(20)}),100)}),e.on("markerAdded",this.resizeHandler),e.on("markerCleared",this.resizeHandler),!1!==t.listenForChanges&&e.on("changes",this.changeHandler=function(){n(250)})}e.defineExtension("annotateScrollbar",(function(e){return"string"==typeof e&&(e={className:e}),new t(this,e)})),e.defineOption("scrollButtonHeight",0),t.prototype.computeScale=function(){var e=this.cm,t=(e.getWrapperElement().clientHeight-e.display.barHeight-2*this.buttonHeight)/e.getScrollerElement().scrollHeight;if(t!=this.hScale)return this.hScale=t,!0},t.prototype.update=function(e){this.annotations=e,this.redraw()},t.prototype.redraw=function(e){!1!==e&&this.computeScale();var t=this.cm,n=this.hScale,r=document.createDocumentFragment(),i=this.annotations,a=t.getOption("lineWrapping"),o=a&&1.5*t.defaultTextHeight(),s=null,l=null;function c(e,n){return s!=e.line&&(s=e.line,l=t.getLineHandle(s)),l.widgets&&l.widgets.length||a&&l.height>o?t.charCoords(e,"local")[n?"top":"bottom"]:t.heightAtLine(l,"local")+(n?0:l.height)}var d=t.lastLine();if(t.display.barWidth)for(var u,_=0;_d)){for(var m=u||c(p.from,!0)*n,g=c(p.to,!1)*n;_d)&&!((u=c(i[_+1].from,!0)*n)>g+.9);)g=c((p=i[++_]).to,!1)*n;if(g!=m){var f=Math.max(g-m,3),E=r.appendChild(document.createElement("div"));E.style.cssText="position: absolute; right: 0px; width: "+Math.max(t.display.barWidth-1,2)+"px; top: "+(m+this.buttonHeight)+"px; height: "+f+"px",E.className=this.options.className,p.id&&E.setAttribute("annotation-id",p.id)}}}this.div.textContent="",this.div.appendChild(r)},t.prototype.clear=function(){this.cm.off("refresh",this.resizeHandler),this.cm.off("markerAdded",this.resizeHandler),this.cm.off("markerCleared",this.resizeHandler),this.changeHandler&&this.cm.off("changes",this.changeHandler),this.div.parentNode.removeChild(this.div)}}(n(1))},function(e,t,n){!function(e){"use strict";var t="CodeMirror-activeline-background";function n(e){for(var n=0;n1)return s(e);var t=e.getCursor("start"),n=e.getCursor("end"),r=e.state.markedSelection;if(!r.length)return a(e,t,n);var l=r[0].find(),c=r[r.length-1].find();if(!l||!c||n.line-t.line<=8||i(t,c.to)>=0||i(n,l.from)<=0)return s(e);for(;i(t,l.from)>0;)r.shift().clear(),l=r[0].find();for(i(t,l.from)<0&&(l.to.line-t.line<8?(r.shift().clear(),a(e,t,l.to,0)):a(e,t,l.from,0));i(n,c.to)<0;)r.pop().clear(),c=r[r.length-1].find();i(n,c.to)>0&&(n.line-c.from.line<8?(r.pop().clear(),a(e,c.from,n)):a(e,c.to,n))}(e)}))}function n(e){e.state.markedSelection&&e.state.markedSelection.length&&e.operation((function(){o(e)}))}e.defineOption("styleSelectedText",!1,(function(r,i,a){var l=a&&a!=e.Init;i&&!l?(r.state.markedSelection=[],r.state.markedSelectionStyle="string"==typeof i?i:"CodeMirror-selectedtext",s(r),r.on("cursorActivity",t),r.on("change",n)):!i&&l&&(r.off("cursorActivity",t),r.off("change",n),o(r),r.state.markedSelection=r.state.markedSelectionStyle=null)}));var r=e.Pos,i=e.cmpPos;function a(e,t,n,a){if(0!=i(t,n))for(var o=e.state.markedSelection,s=e.state.markedSelectionStyle,l=t.line;;){var c=l==t.line?t:r(l,0),d=l+8,u=d>=n.line,_=u?n:r(d,0),p=e.markText(c,_,{className:s});if(null==a?o.push(p):o.splice(a++,0,p),u)break;l=d}}function o(e){for(var t=e.state.markedSelection,n=0;n=c){if(_&&o&&_.test(o.className))return;a=i(s.indicatorOpen)}}(a||o)&&e.setGutterMarker(n,s.gutter,a)}))}function o(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function s(e){var t=e.getViewport(),n=e.state.foldGutter;n&&(e.operation((function(){a(e,t.from,t.to)})),n.from=t.from,n.to=t.to)}function l(e,n,i){var a=e.state.foldGutter;if(a){var o=a.options;if(i==o.gutter){var s=r(e,n);s?s.clear():e.foldCode(t(n,0),o)}}}function c(e){var t=e.state.foldGutter;if(t){var n=t.options;t.from=t.to=0,clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){s(e)}),n.foldOnChangeTimeSpan||600)}}function d(e){var t=e.state.foldGutter;if(t){var n=t.options;clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){var n=e.getViewport();t.from==t.to||n.from-t.to>20||t.from-n.to>20?s(e):e.operation((function(){n.fromt.to&&(a(e,t.to,n.to),t.to=n.to)}))}),n.updateViewportTimeSpan||400)}}function u(e,t){var n=e.state.foldGutter;if(n){var r=t.line;r>=n.from&&ri))break;a=o}}return a?{from:e.Pos(r.line,n.getLine(r.line).length),to:e.Pos(a,n.getLine(a).length)}:void 0}}))}(n(1))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","brace",(function(t,n){var r,i=n.line,a=t.getLine(i);function o(o){for(var s=n.ch,l=0;;){var c=s<=0?-1:a.lastIndexOf(o,s-1);if(-1!=c){if(1==l&&ct.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));if(/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"keyword"!=r.type||"import"!=r.string)return null;for(var i=n,a=Math.min(t.lastLine(),n+10);i<=a;++i){var o=t.getLine(i).indexOf(";");if(-1!=o)return{startCh:r.end,end:e.Pos(i,o)}}}var i,a=n.line,o=r(a);if(!o||r(a-1)||(i=r(a-2))&&i.end.line==a-1)return null;for(var s=o.end;;){var l=r(s.line+1);if(null==l)break;s=l.end}return{from:t.clipPos(e.Pos(a,o.startCh+1)),to:s}})),e.registerHelper("fold","include",(function(t,n){function r(n){if(nt.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));return/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"meta"==r.type&&"#include"==r.string.slice(0,8)?r.start+8:void 0}var i=n.line,a=r(i);if(null==a||null!=r(i-1))return null;for(var o=i;null!=r(o+1);)++o;return{from:e.Pos(i,a+1),to:t.clipPos(e.Pos(o))}}))}(n(1))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","markdown",(function(t,n){function r(n){var r=t.getTokenTypeAt(e.Pos(n,0));return r&&/\bheader\b/.test(r)}function i(e,t,n){var i=t&&t.match(/^#+/);return i&&r(e)?i[0].length:(i=n&&n.match(/^[=\-]+\s*$/))&&r(e+1)?"="==n[0]?1:2:100}var a=t.getLine(n.line),o=t.getLine(n.line+1),s=i(n.line,a,o);if(100!==s){for(var l=t.lastLine(),c=n.line,d=t.getLine(c+2);c ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:g,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function r(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||h.defaults,this.rules=n.normal,this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.tables?this.rules=n.tables:this.rules=n.gfm)}n._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,n._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,n.def=u(n.def).replace("label",n._label).replace("title",n._title).getRegex(),n.bullet=/(?:[*+-]|\d+\.)/,n.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,n.item=u(n.item,"gm").replace(/bull/g,n.bullet).getRegex(),n.list=u(n.list).replace(/bull/g,n.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+n.def.source+")").getRegex(),n._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",n._comment=//,n.html=u(n.html,"i").replace("comment",n._comment).replace("tag",n._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),n.paragraph=u(n.paragraph).replace("hr",n.hr).replace("heading",n.heading).replace("lheading",n.lheading).replace("tag",n._tag).getRegex(),n.blockquote=u(n.blockquote).replace("paragraph",n.paragraph).getRegex(),n.normal=f({},n),n.gfm=f({},n.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),n.gfm.paragraph=u(n.paragraph).replace("(?!","(?!"+n.gfm.fences.source.replace("\\1","\\2")+"|"+n.list.source.replace("\\1","\\3")+"|").getRegex(),n.tables=f({},n.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),n.pedantic=f({},n.normal,{html:u("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",n._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),r.rules=n,r.lex=function(e,t){return new r(t).lex(e)},r.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},r.prototype.token=function(e,t){var r,i,a,o,s,l,c,d,u,_,p,m,g,f,h,b;for(e=e.replace(/^ +$/gm,"");e;)if((a=this.rules.newline.exec(e))&&(e=e.substring(a[0].length),a[0].length>1&&this.tokens.push({type:"space"})),a=this.rules.code.exec(e))e=e.substring(a[0].length),a=a[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?a:S(a,"\n")});else if(a=this.rules.fences.exec(e))e=e.substring(a[0].length),this.tokens.push({type:"code",lang:a[2],text:a[3]||""});else if(a=this.rules.heading.exec(e))e=e.substring(a[0].length),this.tokens.push({type:"heading",depth:a[1].length,text:a[2]});else if(t&&(a=this.rules.nptable.exec(e))&&(l={type:"table",header:E(a[1].replace(/^ *| *\| *$/g,"")),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3]?a[3].replace(/\n$/,"").split("\n"):[]}).header.length===l.align.length){for(e=e.substring(a[0].length),p=0;p ?/gm,""),this.token(a,t),this.tokens.push({type:"blockquote_end"});else if(a=this.rules.list.exec(e)){for(e=e.substring(a[0].length),c={type:"list_start",ordered:f=(o=a[2]).length>1,start:f?+o:"",loose:!1},this.tokens.push(c),d=[],r=!1,g=(a=a[0].match(this.rules.item)).length,p=0;p1&&s.length>1||(e=a.slice(p+1).join("\n")+e,p=g-1)),i=r||/\n\n(?!\s*$)/.test(l),p!==g-1&&(r="\n"===l.charAt(l.length-1),i||(i=r)),i&&(c.loose=!0),b=void 0,(h=/^\[[ xX]\] /.test(l))&&(b=" "!==l[1],l=l.replace(/^\[[ xX]\] +/,"")),u={type:"list_item_start",task:h,checked:b,loose:i},d.push(u),this.tokens.push(u),this.token(l,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(g=d.length,p=0;p?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:g,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\s.])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\s.])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:g,text:/^(`+|[^`])[\s\S]*?(?=[\\?@\[\]\\^_`{|}~])/g,i._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,i._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,i.autolink=u(i.autolink).replace("scheme",i._scheme).replace("email",i._email).getRegex(),i._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,i.tag=u(i.tag).replace("comment",n._comment).replace("attribute",i._attribute).getRegex(),i._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,i._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,i._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,i.link=u(i.link).replace("label",i._label).replace("href",i._href).replace("title",i._title).getRegex(),i.reflink=u(i.reflink).replace("label",i._label).getRegex(),i.normal=f({},i),i.pedantic=f({},i.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:u(/^!?\[(label)\]\((.*?)\)/).replace("label",i._label).getRegex(),reflink:u(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",i._label).getRegex()}),i.gfm=f({},i.normal,{escape:u(i.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:u(i.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),i.gfm.url=u(i.gfm.url).replace("email",i.gfm._extended_email).getRegex(),i.breaks=f({},i.gfm,{br:u(i.br).replace("{2,}","*").getRegex(),text:u(i.gfm.text).replace("{2,}","*").getRegex()}),a.rules=i,a.output=function(e,t,n){return new a(t,n).output(e)},a.prototype.output=function(e){for(var t,n,r,i,o,s,l="";e;)if(o=this.rules.escape.exec(e))e=e.substring(o[0].length),l+=o[1];else if(o=this.rules.autolink.exec(e))e=e.substring(o[0].length),r="@"===o[2]?"mailto:"+(n=c(this.mangle(o[1]))):n=c(o[1]),l+=this.renderer.link(r,null,n);else if(this.inLink||!(o=this.rules.url.exec(e))){if(o=this.rules.tag.exec(e))!this.inLink&&/^/i.test(o[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(this.inRawBlock=!1),e=e.substring(o[0].length),l+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):c(o[0]):o[0];else if(o=this.rules.link.exec(e))e=e.substring(o[0].length),this.inLink=!0,r=o[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],i=t[3]):i="":i=o[3]?o[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),l+=this.outputLink(o,{href:a.escapes(r),title:a.escapes(i)}),this.inLink=!1;else if((o=this.rules.reflink.exec(e))||(o=this.rules.nolink.exec(e))){if(e=e.substring(o[0].length),t=(o[2]||o[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){l+=o[0].charAt(0),e=o[0].substring(1)+e;continue}this.inLink=!0,l+=this.outputLink(o,t),this.inLink=!1}else if(o=this.rules.strong.exec(e))e=e.substring(o[0].length),l+=this.renderer.strong(this.output(o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.em.exec(e))e=e.substring(o[0].length),l+=this.renderer.em(this.output(o[6]||o[5]||o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.code.exec(e))e=e.substring(o[0].length),l+=this.renderer.codespan(c(o[2].trim(),!0));else if(o=this.rules.br.exec(e))e=e.substring(o[0].length),l+=this.renderer.br();else if(o=this.rules.del.exec(e))e=e.substring(o[0].length),l+=this.renderer.del(this.output(o[1]));else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.inRawBlock?l+=this.renderer.text(o[0]):l+=this.renderer.text(c(this.smartypants(o[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===o[2])r="mailto:"+(n=c(o[0]));else{do{s=o[0],o[0]=this.rules._backpedal.exec(o[0])[0]}while(s!==o[0]);n=c(o[0]),r="www."===o[1]?"http://"+n:n}e=e.substring(o[0].length),l+=this.renderer.link(r,null,n)}return l},a.escapes=function(e){return e?e.replace(a.rules._escapes,"$1"):e},a.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},a.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},a.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},o.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'
'+(n?e:c(e,!0))+"
\n":"
"+(n?e:c(e,!0))+"
"},o.prototype.blockquote=function(e){return"
\n"+e+"
\n"},o.prototype.html=function(e){return e},o.prototype.heading=function(e,t,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},o.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},o.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},o.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},o.prototype.checkbox=function(e){return" "},o.prototype.paragraph=function(e){return"

    "+e+"

    \n"},o.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},o.prototype.tablerow=function(e){return"\n"+e+"\n"},o.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},o.prototype.strong=function(e){return""+e+""},o.prototype.em=function(e){return""+e+""},o.prototype.codespan=function(e){return""+e+""},o.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},o.prototype.del=function(e){return""+e+""},o.prototype.link=function(e,t,n){if(null===(e=_(this.options.sanitize,this.options.baseUrl,e)))return n;var r='
    "},o.prototype.image=function(e,t,n){if(null===(e=_(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"},o.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},l.parse=function(e,t){return new l(t).parse(e)},l.prototype.parse=function(e){this.inline=new a(e.links,this.options),this.inlineText=new a(e.links,f({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},l.prototype.next=function(){return this.token=this.tokens.pop()},l.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},l.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},l.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,d(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",a="";for(n="",e=0;e"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var p={},m=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function g(){}function f(e){for(var t,n,r=1;r=0&&"\\"===n[i];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.lengthAn error occurred:

    "+c(e.message+"",!0)+"
    ";throw e}}g.exec=g,h.options=h.setOptions=function(e){return f(h.defaults,e),h},h.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new o,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},h.defaults=h.getDefaults(),h.Parser=l,h.parser=l.parse,h.Renderer=o,h.TextRenderer=s,h.Lexer=r,h.lexer=r.lex,h.InlineLexer=a,h.inlineLexer=a.output,h.parse=h,e.exports=h}(this||"undefined"!=typeof window&&window)}).call(this,n(13))},function(e,t,n){var r=n(51);r.registerLanguage("1c",n(52)),r.registerLanguage("abnf",n(53)),r.registerLanguage("accesslog",n(54)),r.registerLanguage("actionscript",n(55)),r.registerLanguage("ada",n(56)),r.registerLanguage("angelscript",n(57)),r.registerLanguage("apache",n(58)),r.registerLanguage("applescript",n(59)),r.registerLanguage("arcade",n(60)),r.registerLanguage("cpp",n(61)),r.registerLanguage("arduino",n(62)),r.registerLanguage("armasm",n(63)),r.registerLanguage("xml",n(64)),r.registerLanguage("asciidoc",n(65)),r.registerLanguage("aspectj",n(66)),r.registerLanguage("autohotkey",n(67)),r.registerLanguage("autoit",n(68)),r.registerLanguage("avrasm",n(69)),r.registerLanguage("awk",n(70)),r.registerLanguage("axapta",n(71)),r.registerLanguage("bash",n(72)),r.registerLanguage("basic",n(73)),r.registerLanguage("bnf",n(74)),r.registerLanguage("brainfuck",n(75)),r.registerLanguage("cal",n(76)),r.registerLanguage("capnproto",n(77)),r.registerLanguage("ceylon",n(78)),r.registerLanguage("clean",n(79)),r.registerLanguage("clojure",n(80)),r.registerLanguage("clojure-repl",n(81)),r.registerLanguage("cmake",n(82)),r.registerLanguage("coffeescript",n(83)),r.registerLanguage("coq",n(84)),r.registerLanguage("cos",n(85)),r.registerLanguage("crmsh",n(86)),r.registerLanguage("crystal",n(87)),r.registerLanguage("cs",n(88)),r.registerLanguage("csp",n(89)),r.registerLanguage("css",n(90)),r.registerLanguage("d",n(91)),r.registerLanguage("markdown",n(92)),r.registerLanguage("dart",n(93)),r.registerLanguage("delphi",n(94)),r.registerLanguage("diff",n(95)),r.registerLanguage("django",n(96)),r.registerLanguage("dns",n(97)),r.registerLanguage("dockerfile",n(98)),r.registerLanguage("dos",n(99)),r.registerLanguage("dsconfig",n(100)),r.registerLanguage("dts",n(101)),r.registerLanguage("dust",n(102)),r.registerLanguage("ebnf",n(103)),r.registerLanguage("elixir",n(104)),r.registerLanguage("elm",n(105)),r.registerLanguage("ruby",n(106)),r.registerLanguage("erb",n(107)),r.registerLanguage("erlang-repl",n(108)),r.registerLanguage("erlang",n(109)),r.registerLanguage("excel",n(110)),r.registerLanguage("fix",n(111)),r.registerLanguage("flix",n(112)),r.registerLanguage("fortran",n(113)),r.registerLanguage("fsharp",n(114)),r.registerLanguage("gams",n(115)),r.registerLanguage("gauss",n(116)),r.registerLanguage("gcode",n(117)),r.registerLanguage("gherkin",n(118)),r.registerLanguage("glsl",n(119)),r.registerLanguage("gml",n(120)),r.registerLanguage("go",n(121)),r.registerLanguage("golo",n(122)),r.registerLanguage("gradle",n(123)),r.registerLanguage("groovy",n(124)),r.registerLanguage("haml",n(125)),r.registerLanguage("handlebars",n(126)),r.registerLanguage("haskell",n(127)),r.registerLanguage("haxe",n(128)),r.registerLanguage("hsp",n(129)),r.registerLanguage("htmlbars",n(130)),r.registerLanguage("http",n(131)),r.registerLanguage("hy",n(132)),r.registerLanguage("inform7",n(133)),r.registerLanguage("ini",n(134)),r.registerLanguage("irpf90",n(135)),r.registerLanguage("isbl",n(136)),r.registerLanguage("java",n(137)),r.registerLanguage("javascript",n(138)),r.registerLanguage("jboss-cli",n(139)),r.registerLanguage("json",n(140)),r.registerLanguage("julia",n(141)),r.registerLanguage("julia-repl",n(142)),r.registerLanguage("kotlin",n(143)),r.registerLanguage("lasso",n(144)),r.registerLanguage("ldif",n(145)),r.registerLanguage("leaf",n(146)),r.registerLanguage("less",n(147)),r.registerLanguage("lisp",n(148)),r.registerLanguage("livecodeserver",n(149)),r.registerLanguage("livescript",n(150)),r.registerLanguage("llvm",n(151)),r.registerLanguage("lsl",n(152)),r.registerLanguage("lua",n(153)),r.registerLanguage("makefile",n(154)),r.registerLanguage("mathematica",n(155)),r.registerLanguage("matlab",n(156)),r.registerLanguage("maxima",n(157)),r.registerLanguage("mel",n(158)),r.registerLanguage("mercury",n(159)),r.registerLanguage("mipsasm",n(160)),r.registerLanguage("mizar",n(161)),r.registerLanguage("perl",n(162)),r.registerLanguage("mojolicious",n(163)),r.registerLanguage("monkey",n(164)),r.registerLanguage("moonscript",n(165)),r.registerLanguage("n1ql",n(166)),r.registerLanguage("nginx",n(167)),r.registerLanguage("nimrod",n(168)),r.registerLanguage("nix",n(169)),r.registerLanguage("nsis",n(170)),r.registerLanguage("objectivec",n(171)),r.registerLanguage("ocaml",n(172)),r.registerLanguage("openscad",n(173)),r.registerLanguage("oxygene",n(174)),r.registerLanguage("parser3",n(175)),r.registerLanguage("pf",n(176)),r.registerLanguage("pgsql",n(177)),r.registerLanguage("php",n(178)),r.registerLanguage("plaintext",n(179)),r.registerLanguage("pony",n(180)),r.registerLanguage("powershell",n(181)),r.registerLanguage("processing",n(182)),r.registerLanguage("profile",n(183)),r.registerLanguage("prolog",n(184)),r.registerLanguage("properties",n(185)),r.registerLanguage("protobuf",n(186)),r.registerLanguage("puppet",n(187)),r.registerLanguage("purebasic",n(188)),r.registerLanguage("python",n(189)),r.registerLanguage("q",n(190)),r.registerLanguage("qml",n(191)),r.registerLanguage("r",n(192)),r.registerLanguage("reasonml",n(193)),r.registerLanguage("rib",n(194)),r.registerLanguage("roboconf",n(195)),r.registerLanguage("routeros",n(196)),r.registerLanguage("rsl",n(197)),r.registerLanguage("ruleslanguage",n(198)),r.registerLanguage("rust",n(199)),r.registerLanguage("sas",n(200)),r.registerLanguage("scala",n(201)),r.registerLanguage("scheme",n(202)),r.registerLanguage("scilab",n(203)),r.registerLanguage("scss",n(204)),r.registerLanguage("shell",n(205)),r.registerLanguage("smali",n(206)),r.registerLanguage("smalltalk",n(207)),r.registerLanguage("sml",n(208)),r.registerLanguage("sqf",n(209)),r.registerLanguage("sql",n(210)),r.registerLanguage("stan",n(211)),r.registerLanguage("stata",n(212)),r.registerLanguage("step21",n(213)),r.registerLanguage("stylus",n(214)),r.registerLanguage("subunit",n(215)),r.registerLanguage("swift",n(216)),r.registerLanguage("taggerscript",n(217)),r.registerLanguage("yaml",n(218)),r.registerLanguage("tap",n(219)),r.registerLanguage("tcl",n(220)),r.registerLanguage("tex",n(221)),r.registerLanguage("thrift",n(222)),r.registerLanguage("tp",n(223)),r.registerLanguage("twig",n(224)),r.registerLanguage("typescript",n(225)),r.registerLanguage("vala",n(226)),r.registerLanguage("vbnet",n(227)),r.registerLanguage("vbscript",n(228)),r.registerLanguage("vbscript-html",n(229)),r.registerLanguage("verilog",n(230)),r.registerLanguage("vhdl",n(231)),r.registerLanguage("vim",n(232)),r.registerLanguage("x86asm",n(233)),r.registerLanguage("xl",n(234)),r.registerLanguage("xquery",n(235)),r.registerLanguage("zephir",n(236)),e.exports=r},function(e,t,n){var r,i,a;i=function(e){var t=[],n=Object.keys,r={},i={},a=!0,o=/^(no-?highlight|plain|text)$/i,s=/\blang(?:uage)?-([\w-]+)\b/i,l=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,c="Could not find the language '{}', did you forget to load/include a language module?",d={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},u="of and for in not or if then".split(" ");function _(e){return e.replace(/&/g,"&").replace(//g,">")}function p(e){return e.nodeName.toLowerCase()}function m(e){return o.test(e)}function g(e){var t,n={},r=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return r.forEach((function(e){for(t in e)n[t]=e[t]})),n}function f(e){var t=[];return function e(n,r){for(var i=n.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:r,node:i}),r=e(i,r),p(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:i}));return r}(e,0),t}function E(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(t){return g(e,{variants:null},t)}))),e.cached_variants?e.cached_variants:function e(t){return!!t&&(t.endsWithParent||e(t.starts))}(e)?[g(e,{starts:e.starts?g(e.starts):null})]:Object.isFrozen(e)?[g(e)]:[e]}function S(e,t){return t?Number(t):(n=e,-1!=u.indexOf(n.toLowerCase())?0:1);var n}function h(e){function t(e){return e&&e.source||e}function r(n,r){return new RegExp(t(n),"m"+(e.case_insensitive?"i":"")+(r?"g":""))}function i(e){var n,i,a={},o=[],s={},l=1;function c(e,t){a[l]=e,o.push([e,t]),l+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(t)+1}for(var d=0;d0&&(a+=n),a+="(";l.length>0;){var c=r.exec(l);if(null==c){a+=l;break}a+=l.substring(0,c.index),l=l.substring(c.index+c[0].length),"\\"==c[0][0]&&c[1]?a+="\\"+String(Number(c[1])+s):(a+=c[0],"("==c[0]&&i++)}a+=")"}return a}(u,"|"),!0),s.lastIndex=0,s.exec=function(t){var r;if(0===o.length)return null;n.lastIndex=s.lastIndex;var i=n.exec(t);if(!i)return null;for(var l=0;l')+t+(n?"":"")}function u(){O+=null!=C.subLanguage?function(){var e="string"==typeof C.subLanguage;if(e&&!r[C.subLanguage])return _(R);var t=e?b(C.subLanguage,R,!0,y[C.subLanguage]):v(R,C.subLanguage.length?C.subLanguage:void 0);return C.relevance>0&&(A+=t.relevance),e&&(y[C.subLanguage]=t.top),l(t.language,t.value,!1,!0)}():function(){var e,t,n,r;if(!C.keywords)return _(R);for(r="",t=0,C.lexemesRe.lastIndex=0,n=C.lexemesRe.exec(R);n;)r+=_(R.substring(t,n.index)),(e=s(C,n))?(A+=e[1],r+=l(e[0],_(n[0]))):r+=_(n[0]),t=C.lexemesRe.lastIndex,n=C.lexemesRe.exec(R);return r+_(R.substr(t))}(),R=""}function p(e){O+=e.className?l(e.className,"",!0):"",C=Object.create(e,{parent:{value:C}})}function m(e){var t=e[0],n=e.rule;return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?R+=t:(n.excludeBegin&&(R+=t),u(),n.returnBegin||n.excludeBegin||(R=t)),p(n),n.returnBegin?0:t.length}function g(e){var t=e[0],n=o.substr(e.index),r=function e(t,n){if(function(e,t){var n=e&&e.exec(t);return n&&0===n.index}(t.endRe,n)){for(;t.endsParent&&t.parent;)t=t.parent;return t}if(t.endsWithParent)return e(t.parent,n)}(C,n);if(r){var i=C;i.skip?R+=t:(i.returnEnd||i.excludeEnd||(R+=t),u(),i.excludeEnd&&(R=t));do{C.className&&(O+=""),C.skip||C.subLanguage||(A+=C.relevance),C=C.parent}while(C!==r.parent);return r.starts&&(r.endSameAsBegin&&(r.starts.endRe=r.endRe),p(r.starts)),i.returnEnd?0:t.length}}var f={};function E(e,t){var r=t&&t[0];if(R+=e,null==r)return u(),0;if("begin"==f.type&&"end"==t.type&&f.index==t.index&&""===r)return R+=o.slice(t.index,t.index+1),1;if(f=t,"begin"===t.type)return m(t);if("illegal"===t.type&&!n)throw new Error('Illegal lexeme "'+r+'" for mode "'+(C.className||"")+'"');if("end"===t.type){var i=g(t);if(null!=i)return i}return R+=r,r.length}var S=N(e);if(!S)throw console.error(c.replace("{}",e)),new Error('Unknown language: "'+e+'"');h(S);var T,C=i||S,y={},O="";for(T=C;T!==S;T=T.parent)T.className&&(O=l(T.className,"",!0)+O);var R="",A=0;try{for(var I,x,D=0;C.terminators.lastIndex=D,I=C.terminators.exec(o);)x=E(o.substring(D,I.index),I),D=I.index+x;for(E(o.substr(D)),T=C;T.parent;T=T.parent)T.className&&(O+="");return{relevance:A,value:O,illegal:!1,language:e,top:C}}catch(t){if(t.message&&-1!==t.message.indexOf("Illegal"))return{illegal:!0,relevance:0,value:_(o)};if(a)return{relevance:0,value:_(o),language:e,top:C,errorRaised:t};throw t}}function v(e,t){t=t||d.languages||n(r);var i={relevance:0,value:_(e)},a=i;return t.filter(N).filter(R).forEach((function(t){var n=b(t,e,!1);n.language=t,n.relevance>a.relevance&&(a=n),n.relevance>i.relevance&&(a=i,i=n)})),a.language&&(i.second_best=a),i}function T(e){return d.tabReplace||d.useBR?e.replace(l,(function(e,t){return d.useBR&&"\n"===e?"
    ":d.tabReplace?t.replace(/\t/g,d.tabReplace):""})):e}function C(e){var n,r,a,o,l,u=function(e){var t,n,r,i,a=e.className+" ";if(a+=e.parentNode?e.parentNode.className:"",n=s.exec(a)){var o=N(n[1]);return o||(console.warn(c.replace("{}",n[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?n[1]:"no-highlight"}for(t=0,r=(a=a.split(/\s+/)).length;t/g,"\n"):n=e,l=n.textContent,a=u?b(u,l,!0):v(l),(r=f(n)).length&&((o=document.createElement("div")).innerHTML=a.value,a.value=function(e,n,r){var i=0,a="",o=[];function s(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function c(e){a+=""}function d(e){("start"===e.event?l:c)(e.node)}for(;e.length||n.length;){var u=s();if(a+=_(r.substring(i,u[0].offset)),i=u[0].offset,u===e){o.reverse().forEach(c);do{d(u.splice(0,1)[0]),u=s()}while(u===e&&u.length&&u[0].offset===i);o.reverse().forEach(l)}else"start"===u[0].event?o.push(u[0].node):o.pop(),d(u.splice(0,1)[0])}return a+_(r.substr(i))}(r,f(o),l)),a.value=T(a.value),e.innerHTML=a.value,e.className=function(e,t,n){var r=t?i[t]:n,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}(e.className,u,a.language),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function y(){if(!y.called){y.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,C)}}var O={disableAutodetect:!0};function N(e){return e=(e||"").toLowerCase(),r[e]||r[i[e]]}function R(e){var t=N(e);return t&&!t.disableAutodetect}return e.highlight=b,e.highlightAuto=v,e.fixMarkup=T,e.highlightBlock=C,e.configure=function(e){d=g(d,e)},e.initHighlighting=y,e.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",y,!1),window.addEventListener("load",y,!1)},e.registerLanguage=function(t,n){var o;try{o=n(e)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",t)),!a)throw e;console.error(e),o=O}r[t]=o,o.rawDefinition=n.bind(null,e),o.aliases&&o.aliases.forEach((function(e){i[e]=t}))},e.listLanguages=function(){return n(r)},e.getLanguage=N,e.requireLanguage=function(e){var t=N(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},e.autoDetection=R,e.inherit=g,e.debugMode=function(){a=!1},e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(t,n,r){var i=e.inherit({className:"comment",begin:t,end:n,contains:[]},r||{});return i.contains.push(e.PHRASAL_WORDS_MODE),i.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),i},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0},[e.BACKSLASH_ESCAPE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.PHRASAL_WORDS_MODE,e.COMMENT,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,e.CSS_NUMBER_MODE,e.REGEXP_MODE,e.TITLE_MODE,e.UNDERSCORE_TITLE_MODE,e.METHOD_GUARD].forEach((function(e){!function e(t){Object.freeze(t);var n="function"==typeof t;return Object.getOwnPropertyNames(t).forEach((function(r){!t.hasOwnProperty(r)||null===t[r]||"object"!=typeof t[r]&&"function"!=typeof t[r]||n&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(t[r])||e(t[r])})),t}(e)})),e},a="object"==typeof window&&window||"object"==typeof self&&self,t.nodeType?a&&(a.hljs=i({}),void 0===(r=function(){return a.hljs}.apply(t,[]))||(e.exports=r)):i(t)},function(e,t){e.exports=function(e){var t="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",n="далее возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",r="null истина ложь неопределено",i=e.inherit(e.NUMBER_MODE),a={className:"string",begin:'"|\\|',end:'"|$',contains:[{begin:'""'}]},o={begin:"'",end:"'",excludeBegin:!0,excludeEnd:!0,contains:[{className:"number",begin:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},s=e.inherit(e.C_LINE_COMMENT_MODE);return{case_insensitive:!0,lexemes:t,keywords:{keyword:n,built_in:"разделительстраниц разделительстрок символтабуляции ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",class:"webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц отображениевремениэлементовпланировщика типфайлаформатированногодокумента обходрезультатазапроса типзаписизапроса видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов доступкфайлу режимдиалогавыборафайла режимоткрытияфайла типизмеренияпостроителязапроса видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты",type:"comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура фиксированноесоответствие фиксированныймассив ",literal:r},contains:[{className:"meta",lexemes:t,begin:"#|&",end:"$",keywords:{"meta-keyword":n+"загрузитьизфайла вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент "},contains:[s]},{className:"function",lexemes:t,variants:[{begin:"процедура|функция",end:"\\)",keywords:"процедура функция"},{begin:"конецпроцедуры|конецфункции",keywords:"конецпроцедуры конецфункции"}],contains:[{begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"params",lexemes:t,begin:t,end:",",excludeEnd:!0,endsWithParent:!0,keywords:{keyword:"знач",literal:r},contains:[i,a,o]},s]},e.inherit(e.TITLE_MODE,{begin:t})]},s,{className:"symbol",begin:"~",end:";|:",excludeEnd:!0},i,a,o]}}},function(e,t){e.exports=function(e){var t="^[a-zA-Z][a-zA-Z0-9-]*",n="[!@#$^&',?+~`|:]",r=e.COMMENT(";","$"),i={className:"attribute",begin:t+"(?=\\s*=)"};return{illegal:n,keywords:["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"].join(" "),contains:[i,r,{className:"symbol",begin:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},{className:"symbol",begin:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},{className:"symbol",begin:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},{className:"symbol",begin:/%[si]/},e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=["GET","POST","HEAD","PUT","DELETE","CONNECT","OPTIONS","PATCH","TRACE"];return{contains:[{className:"number",begin:"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b",relevance:5},{className:"number",begin:"\\b\\d+\\b",relevance:0},{className:"string",begin:'"('+t.join("|")+")",end:'"',keywords:t.join(" "),illegal:"\\n",relevance:5,contains:[{begin:"HTTP/[12]\\.\\d",relevance:5}]},{className:"string",begin:/\[\d[^\]\n]{8,}\]/,illegal:"\\n",relevance:1},{className:"string",begin:/\[/,end:/\]/,illegal:"\\n",relevance:0},{className:"string",begin:'"Mozilla/\\d\\.\\d \\(',end:'"',illegal:"\\n",relevance:3},{className:"string",begin:'"',end:'"',illegal:"\\n",relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"rest_arg",begin:"[.]{3}",end:"[a-zA-Z_$][a-zA-Z0-9_$]*",relevance:10};return{aliases:["as"],keywords:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"class",beginKeywords:"package",end:"{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.TITLE_MODE]},{className:"meta",beginKeywords:"import include",end:";",keywords:{"meta-keyword":"import include"}},{className:"function",beginKeywords:"function",end:"[{;]",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t]},{begin:":\\s*([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)"}]},e.METHOD_GUARD],illegal:/#/}}},function(e,t){e.exports=function(e){var t="[A-Za-z](_?[A-Za-z0-9.])*",n=e.COMMENT("--","$"),r={begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:"[]{}%#'\"",contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:t,endsParent:!0,relevance:0}]};return{case_insensitive:!0,keywords:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},contains:[n,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"symbol",begin:"'"+t},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[n,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},r,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:"[]{}%#'\""}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:"[]{}%#'\""},r]}}},function(e,t){e.exports=function(e){var t={className:"built_in",begin:"\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)"},n={className:"symbol",begin:"[a-zA-Z0-9_]+@"},r={className:"keyword",begin:"<",end:">",contains:[t,n]};return t.contains=[r],n.contains=[r],{aliases:["asc"],keywords:"for in|0 break continue while do|0 return if else case switch namespace is cast or and xor not get|0 in inout|10 out override set|0 private public const default|0 final shared external mixin|10 enum typedef funcdef this super import from interface abstract|0 try catch protected explicit property",illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunctions*[^\\(])",contains:[{className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',end:'"""'},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{beginKeywords:"interface namespace",end:"{",illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{beginKeywords:"class",end:"{",illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]}]}]},t,n,{className:"literal",begin:"\\b(null|true|false)"},{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"}]}}},function(e,t){e.exports=function(e){var t={className:"number",begin:"[\\$%]\\d+"};return{aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:""},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",t]},t,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}},function(e,t){e.exports=function(e){var t=e.inherit(e.QUOTE_STRING_MODE,{illegal:""}),n={className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_NUMBER_MODE,t]},r=e.COMMENT("--","$"),i=[r,e.COMMENT("\\(\\*","\\*\\)",{contains:["self",r]}),e.HASH_COMMENT_MODE];return{aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},contains:[t,e.C_NUMBER_MODE,{className:"built_in",begin:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{className:"literal",begin:"\\b(text item delimiters|current application|missing value)\\b"},{className:"keyword",begin:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{beginKeywords:"on",illegal:"[${=;\\n]",contains:[e.UNDERSCORE_TITLE_MODE,n]}].concat(i),illegal:"//|->|=>|\\[\\["}}},function(e,t){e.exports=function(e){var t="[A-Za-z_][0-9A-Za-z_]*",n={keyword:"if for while var new function do return void else break",literal:"BackSlash DoubleQuote false ForwardSlash Infinity NaN NewLine null PI SingleQuote Tab TextFormatting true undefined",built_in:"Abs Acos Angle Attachments Area AreaGeodetic Asin Atan Atan2 Average Bearing Boolean Buffer BufferGeodetic Ceil Centroid Clip Console Constrain Contains Cos Count Crosses Cut Date DateAdd DateDiff Day Decode DefaultValue Dictionary Difference Disjoint Distance DistanceGeodetic Distinct DomainCode DomainName Equals Exp Extent Feature FeatureSet FeatureSetByAssociation FeatureSetById FeatureSetByPortalItem FeatureSetByRelationshipName FeatureSetByTitle FeatureSetByUrl Filter First Floor Geometry GroupBy Guid HasKey Hour IIf IndexOf Intersection Intersects IsEmpty IsNan IsSelfIntersecting Length LengthGeodetic Log Max Mean Millisecond Min Minute Month MultiPartToSinglePart Multipoint NextSequenceValue Now Number OrderBy Overlaps Point Polygon Polyline Portal Pow Random Relate Reverse RingIsClockWise Round Second SetGeometry Sin Sort Sqrt Stdev Sum SymmetricDifference Tan Text Timestamp Today ToLocal Top Touches ToUTC TrackCurrentTime TrackGeometryWindow TrackIndex TrackStartTime TrackWindow TypeOf Union UrlEncode Variance Weekday When Within Year "},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},a={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]};i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,r,e.REGEXP_MODE];var o=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["arcade"],keywords:n,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"symbol",begin:"\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+"},r,{begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:o}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:t}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},{begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},s={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},l=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",c={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i],u={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:c,contains:d.concat([{begin:/\(/,end:/\)/,keywords:c,contains:d.concat(["self"]),relevance:0}]),relevance:0},_={className:"function",begin:"("+n+"[\\*&\\s]+)+"+l,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:c,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:c,relevance:0},{begin:l,returnBegin:!0,contains:[s],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a,r,{begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:c,illegal:"",keywords:c,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:c},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:o,strings:i,keywords:c}}}},function(e,t){e.exports=function(e){var t="boolean byte word String",n="setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",r="DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW",i=e.requireLanguage("cpp").rawDefinition(),a=i.keywords;return a.keyword+=" "+t,a.literal+=" "+r,a.built_in+=" "+n,i}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["arm"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?",end:"\\s"},e.COMMENT("[;@]","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"[=#]\\w+"}],relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},n={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},r=e.inherit(n,{begin:"\\(",end:"\\)"}),i=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),a=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),o={endsWithParent:!0,illegal:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[n,a,i,r,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[n,r,a,i]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[o],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[o],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},o]}]}}},function(e,t){e.exports=function(e){return{aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}},function(e,t){e.exports=function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance";return{keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,illegal:/[:;"\[\]]/,contains:[{beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},e.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:t+" get set args call",excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"pointcut after before around throwing returning",end:/[)]/,excludeEnd:!1,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,relevance:0,excludeEnd:!1,keywords:t,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",keywords:t+" get set args call",relevance:0},e.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{className:"function",begin:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,end:/[{;=]/,keywords:t,excludeEnd:!0,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,relevance:0,keywords:t,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t={begin:"`[\\s\\S]"};return{case_insensitive:!0,aliases:["ahk"],keywords:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},contains:[t,e.inherit(e.QUOTE_STRING_MODE,{contains:[t]}),e.COMMENT(";","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,{className:"number",begin:e.NUMBER_RE,relevance:0},{className:"variable",begin:"%[a-zA-Z0-9#_$@]+%"},{className:"built_in",begin:"^\\s*\\w+\\s*(,|%)"},{className:"title",variants:[{begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{className:"meta",begin:"^\\s*#\\w+",end:"$",relevance:0},{className:"built_in",begin:"A_[a-zA-Z0-9]+"},{begin:",\\s*,"}]}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#cs","#ce"),e.COMMENT("#comments-start","#comments-end")]},n={begin:"\\$[A-z0-9_]+"},r={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:"ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",built_in:"Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait",literal:"True False And Null Not Or"},contains:[t,n,r,i,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",keywords:{"meta-keyword":"include"},end:"$",contains:[r,{className:"meta-string",variants:[{begin:"<",end:">"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},r,t]},{className:"symbol",begin:"@[A-z0-9_]+"},{className:"function",beginKeywords:"Func",end:"$",illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[n,r,i]}]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:"\\.?"+e.IDENT_RE,keywords:{keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,{className:"number",begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"symbol",begin:"^[A-Za-z0-9_.$]+:"},{className:"meta",begin:"#",end:"$"},{className:"subst",begin:"@[0-9]+"}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},contains:[{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.REGEXP_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{keywords:"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,illegal:"^.",lexemes:"[a-zA-Z][a-zA-Z0-9_$%!#]*",keywords:{keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("REM","$",{relevance:10}),e.COMMENT("'","$",{relevance:0}),{className:"symbol",begin:"^[0-9]+ ",relevance:10},{className:"number",begin:"\\b([0-9]+[0-9edED.]*[#!]?)",relevance:0},{className:"number",begin:"(&[hH][0-9a-fA-F]{1,4})"},{className:"number",begin:"(&[oO][0-7]{1,6})"}]}}},function(e,t){e.exports=function(e){return{contains:[{className:"attribute",begin://},{begin:/::=/,starts:{end:/$/,contains:[{begin://},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}}]}}},function(e,t){e.exports=function(e){var t={className:"literal",begin:"[\\+\\-]",relevance:0};return{aliases:["bf"],contains:[e.COMMENT("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/(?:\+\+|\-\-)/,contains:[t]},t]}}},function(e,t){e.exports=function(e){var t="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},i={className:"string",begin:/(#\d+)+/},a={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[r,i]}].concat(n)},o={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[e.TITLE_MODE,a]};return{case_insensitive:!0,keywords:{keyword:t,literal:"false true"},illegal:/\/\*/,contains:[r,i,{className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},{className:"string",begin:'"',end:'"'},e.NUMBER_MODE,o,a]}}},function(e,t){e.exports=function(e){return{aliases:["capnp"],keywords:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.HASH_COMMENT_MODE,{className:"meta",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"symbol",begin:/@\d+\b/},{className:"class",beginKeywords:"struct enum",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"class",beginKeywords:"interface",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]}]}}},function(e,t){e.exports=function(e){var t="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",n={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:t,relevance:10},r=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[n]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return n.contains=r,{keywords:{keyword:t+" shared abstract formal default actual variable late native deprecatedfinal sealed annotation suppressWarnings small",meta:"doc by license see throws tagged"},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"meta",begin:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(r)}}},function(e,t){e.exports=function(e){return{aliases:["clean","icl","dcl"],keywords:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",built_in:"Int Real Char Bool",literal:"True False"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{begin:"->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>"}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},r={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b(true|false|nil)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+t},u={begin:"\\(",end:"\\)"},_={endsWithParent:!0,relevance:0},p={keywords:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},lexemes:t,className:"name",begin:t,starts:_},m=[u,i,l,c,a,d,s,r,o,n];return u.contains=[e.COMMENT("comment",""),p,_],_.contains=m,s.contains=m,c.contains=[s],{aliases:["clj"],illegal:/\S/,contains:[u,i,l,c,a,d,s,r,o]}}},function(e,t){e.exports=function(e){return{contains:[{className:"meta",begin:/^([\w.-]+|\s*#_)?=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}},function(e,t){e.exports=function(e){return{aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:"\\${",end:"}"},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i=[e.BINARY_NUMBER_MODE,e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,r]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[r,e.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+n},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];r.contains=i;var a=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:i.concat([e.COMMENT("###","###"),e.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[a,o]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"_|0 as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies DependentDerive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("\\(\\*","\\*\\)"),e.C_NUMBER_MODE,{className:"type",excludeBegin:!0,begin:"\\|\\s*",end:"\\w+"},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["cos","cls"],keywords:"property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii",contains:[{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",relevance:0},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"comment",begin:/;/,end:"$",relevance:0},{className:"built_in",begin:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{className:"built_in",begin:/\$\$\$[a-zA-Z]+/},{className:"built_in",begin:/%[a-z]+(?:\.[a-z]+)*/},{className:"symbol",begin:/\^%?[a-zA-Z][\w]*/},{className:"keyword",begin:/##class|##super|#define|#dim/},{begin:/&sql\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"sql"},{begin:/&(js|jscript|javascript)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"},{begin:/&html<\s*\s*>/,subLanguage:"xml"}]}}},function(e,t){e.exports=function(e){var t="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml";return{aliases:["crm","pcmk"],case_insensitive:!0,keywords:{keyword:"params meta operations op rule attributes utilization read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\ number string",literal:"Master Started Slave Stopped start promote demote stop monitor true false"},contains:[e.HASH_COMMENT_MODE,{beginKeywords:"node",starts:{end:"\\s*([\\w_-]+:)?",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*"}}},{beginKeywords:"primitive rsc_template",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*",starts:{end:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{begin:"\\b("+t.split(" ").join("|")+")\\s+",keywords:t,starts:{className:"title",end:"[\\$\\w_][\\w_-]*"}},{beginKeywords:"property rsc_defaults op_defaults",starts:{className:"title",end:"\\s*([\\w_-]+:)?"}},e.QUOTE_STRING_MODE,{className:"meta",begin:"(ocf|systemd|service|lsb):[\\w_:-]+",relevance:0},{className:"number",begin:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",relevance:0},{className:"literal",begin:"[-]?(infinity|inf)",relevance:0},{className:"attr",begin:/([A-Za-z\$_\#][\w_-]+)=/,relevance:0},{className:"tag",begin:"",relevance:0}]}}},function(e,t){e.exports=function(e){var t="(_*[ui](8|16|32|64|128))?",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",r={keyword:"abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},i={className:"subst",begin:"#{",end:"}",keywords:r},a={className:"template-variable",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:r};function o(e,t){var n=[{begin:e,end:t}];return n[0].contains=n,n}var s={className:"string",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[Qwi]?\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%[Qwi]?\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%[Qwi]?{",end:"}",contains:o("{","}")},{begin:"%[Qwi]?<",end:">",contains:o("<",">")},{begin:"%[Qwi]?\\|",end:"\\|"},{begin:/<<-\w+$/,end:/^\s*\w+$/}],relevance:0},l={className:"string",variants:[{begin:"%q\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%q\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%q{",end:"}",contains:o("{","}")},{begin:"%q<",end:">",contains:o("<",">")},{begin:"%q\\|",end:"\\|"},{begin:/<<-'\w+'$/,end:/^\s*\w+$/}],relevance:0},c={begin:"(?!%})("+e.RE_STARTERS_RE+"|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",keywords:"case if select unless until when while",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"//[a-z]*",relevance:0},{begin:"/(?!\\/)",end:"/[a-z]*"}]}],relevance:0},d=[a,s,l,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"%r\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%r{",end:"}",contains:o("{","}")},{begin:"%r<",end:">",contains:o("<",">")},{begin:"%r\\|",end:"\\|"}],relevance:0},c,{className:"meta",begin:"@\\[",end:"\\]",contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"})]},e.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<"}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{beginKeywords:"annotation",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})],relevance:5},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[s,{begin:n}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]+)"+t},{begin:"\\b0o([0-7_]+)"+t},{begin:"\\b0x([A-Fa-f0-9_]+)"+t},{begin:"\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_*[-+]?[0-9_]*)?(_*f(32|64))?(?!_)"},{begin:"\\b([1-9][0-9_]*|0)"+t}],relevance:0}];return i.contains=d,a.contains=d.slice(1),{aliases:["cr"],lexemes:"[a-zA-Z_]\\w*[!?=]?",keywords:r,contains:d}}},function(e,t){e.exports=function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},n={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},r={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},i=e.inherit(r,{illegal:/\n/}),a={className:"subst",begin:"{",end:"}",keywords:t},o=e.inherit(a,{illegal:/\n/}),s={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,o]},l={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},a]},c=e.inherit(l,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},o]});a.contains=[l,s,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE],o.contains=[c,s,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[l,s,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,n,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[e.TITLE_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+u+"\\s+)+"+e.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[d,n,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!1,lexemes:"[a-zA-Z][a-zA-Z0-9_-]*",keywords:{keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",begin:"^Content",end:":",excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,t]}]}}},function(e,t){e.exports=function(e){var t="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",r={className:"number",begin:"\\b"+t+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},i={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+t+"(i|[fF]i|Li))",relevance:0},a={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},o={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},o,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},i,r,a,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}},function(e,t){e.exports=function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^\\s*([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```\\w*\\s*$",end:"^```[ ]*$"},{begin:"`.+?`"},{begin:"^( {4}|\\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},function(e,t){e.exports=function(e){var t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},n={className:"subst",variants:[{begin:"\\${",end:"}"}],keywords:"true false null this is new super"},r={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"""',end:'"""',contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]}]};n.contains=[e.C_NUMBER_MODE,r];return{keywords:{keyword:"abstract as assert async await break case catch class const continue covariant default deferred do dynamic else enum export extends extension external factory false final finally for Function get hide if implements import in inferface is library mixin new null on operator part rethrow return set show static super switch sync this throw true try typedef var void while with yield",built_in:"Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print Element ElementList document querySelector querySelectorAll window"},contains:[r,e.COMMENT("/\\*\\*","\\*/",{subLanguage:"markdown"}),e.COMMENT("///+\\s*","$",{contains:[{subLanguage:"markdown",begin:".",end:"$"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}},function(e,t){e.exports=function(e){var t="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"meta",variants:[{begin:/\{\$/,end:/\}/},{begin:/\(\*\$/,end:/\*\)/}]},i={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},a={className:"string",begin:/(#\d+)+/},o={begin:e.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE]},s={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[i,a,r].concat(n)},r].concat(n)};return{aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],case_insensitive:!0,keywords:t,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[i,a,e.NUMBER_MODE,o,s,r].concat(n)}}},function(e,t){e.exports=function(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}},function(e,t){e.exports=function(e){var t={begin:/\|[A-Za-z]+:?/,keywords:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE]};return{aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{endsWithParent:!0,keywords:"in by as",contains:[t],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:[t]}]}}},function(e,t){e.exports=function(e){return{aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},e.inherit(e.NUMBER_MODE,{begin:/\b\d+[dhwm]?/})]}}},function(e,t){e.exports=function(e){return{aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"",illegal:"\\n"}]},t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},i={className:"variable",begin:"\\&[a-z\\d_]*\\b"},a={className:"meta-keyword",begin:"/[a-z][a-z\\d-]*/"},o={className:"symbol",begin:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},s={className:"params",begin:"<",end:">",contains:[n,i]},l={className:"class",begin:/[a-zA-Z_][a-zA-Z\d_@]*\s{/,end:/[{;=]/,returnBegin:!0,excludeEnd:!0};return{keywords:"",contains:[{className:"class",begin:"/\\s*{",end:"};",relevance:10,contains:[i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t]},i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t,r,{begin:e.IDENT_RE+"::",keywords:""}]}}},function(e,t){e.exports=function(e){return{aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"template-tag",begin:/\{[#\/]/,end:/\}/,illegal:/;/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{/,end:/\}/,illegal:/;/,keywords:"if eq ne lt lte gt gte select default math sep"}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT(/\(\*/,/\*\)/);return{illegal:/\S/,contains:[t,{className:"attribute",begin:/^[ ]*[a-zA-Z][a-zA-Z-_]*([\s-_]+[a-zA-Z][a-zA-Z]*)*/},{begin:/=/,end:/[.;]/,contains:[t,{className:"meta",begin:/\?.*\?/},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"`",end:"`"}]}]}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",n="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0",r={className:"subst",begin:"#\\{",end:"}",lexemes:t,keywords:n},i={className:"string",begin:"~[a-z](?=[/|([{<\"'])",contains:[{endsParent:!0,contains:[{contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]}]}]},a={className:"string",begin:"~[A-Z](?=[/|([{<\"'])",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin:/\/}]},o={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},s={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:t,endsParent:!0})]},l=e.inherit(s,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),c=[o,a,i,e.HASH_COMMENT_MODE,l,s,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[o,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:t+":(?!:)",relevance:0},{className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return r.contains=c,{lexemes:t,keywords:n,contains:c}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},r={begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},t]};return{keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",contains:[{beginKeywords:"port effect module",end:"exposing",keywords:"port effect module where command subscription exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"import",end:"$",keywords:"import as exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"type",end:"$",keywords:"type alias",contains:[n,r,{begin:"{",end:"}",contains:r.contains},t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"port",end:"$",keywords:"port",contains:[t]},{className:"string",begin:"'\\\\?.",end:"'",illegal:"."},e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,n,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}],illegal:/;/}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},a=[e.COMMENT("#","$",{contains:[r]}),e.COMMENT("^\\=begin","^\\=end",{contains:[r],relevance:10}),e.COMMENT("^__END__","\\n$")],o={className:"subst",begin:"#\\{",end:"}",keywords:n},s={className:"string",contains:[e.BACKSLASH_ESCAPE,o],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},{begin:/\w+/,endSameAsBegin:!0,contains:[e.BACKSLASH_ESCAPE,o]}]}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:n},c=[s,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(a)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:t}),l].concat(a)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[s,{begin:t}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:n},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,o],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(a),relevance:0}].concat(a);o.contains=c,l.contains=c;var d=[{begin:/^\s*=>/,starts:{end:"$",contains:c}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:c}}];return{aliases:["rb","gemspec","podspec","thor","irb"],keywords:n,illegal:/\/\*/,contains:a.concat(d).concat(c)}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[e.COMMENT("<%#","%>"),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){return{keywords:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"meta",begin:"^[0-9]+> ",relevance:10},e.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\?(::)?([A-Z]\\w*(::)?)+"},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}},function(e,t){e.exports=function(e){var t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",r={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.COMMENT("%","$"),a={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},s={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={begin:"{",end:"}",relevance:0},c={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},d={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},u={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},_={beginKeywords:"fun receive if try case",end:"end",keywords:r};_.contains=[i,o,e.inherit(e.APOS_STRING_MODE,{className:""}),_,s,e.QUOTE_STRING_MODE,a,l,c,d,u];var p=[i,o,_,s,e.QUOTE_STRING_MODE,a,l,c,d,u];s.contains[1].contains=p,l.contains=p,u.contains[1].contains=p;var m={className:"params",begin:"\\(",end:"\\)",contains:p};return{aliases:["erl"],keywords:r,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[m,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:r,contains:p}},i,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+e.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",contains:[m]},a,e.QUOTE_STRING_MODE,u,c,d,l,{begin:/\.$/}]}}},function(e,t){e.exports=function(e){return{aliases:["xlsx","xls"],case_insensitive:!0,lexemes:/[a-zA-Z][\w\.]*/,keywords:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},contains:[{begin:/^=/,end:/[^=]/,returnEnd:!0,illegal:/=/,relevance:10},{className:"symbol",begin:/\b[A-Z]{1,2}\d+\b/,end:/[^\d]/,excludeEnd:!0,relevance:0},{className:"symbol",begin:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,relevance:0},e.BACKSLASH_ESCAPE,e.QUOTE_STRING_MODE,{className:"number",begin:e.NUMBER_RE+"(%)?",relevance:0},e.COMMENT(/\bN\(/,/\)/,{excludeBegin:!0,excludeEnd:!0,illegal:/\n/})]}}},function(e,t){e.exports=function(e){return{contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attr"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}},function(e,t){e.exports=function(e){var t={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[{className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/}]};return{keywords:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},{className:"string",variants:[{begin:'"',end:'"'}]},t,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["f90","f95"],keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}},function(e,t){e.exports=function(e){var t={begin:"<",end:">",contains:[e.inherit(e.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},e.COMMENT("\\(\\*","\\*\\)"),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE,t]},{className:"meta",begin:"\\[<",end:">\\]",relevance:10},{className:"symbol",begin:"\\B('[A-Za-z])\\b",contains:[e.BACKSLASH_ESCAPE]},e.C_LINE_COMMENT_MODE,e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",literal:"eps inf na","built-in":"abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"},n={className:"symbol",variants:[{begin:/\=[lgenxc]=/},{begin:/\$/}]},r={className:"comment",variants:[{begin:"'",end:"'"},{begin:'"',end:'"'}],illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},i={begin:"/",end:"/",keywords:t,contains:[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},a={begin:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[r,i,{className:"comment",begin:/([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,relevance:0}]};return{aliases:["gms"],case_insensitive:!0,keywords:t,contains:[e.COMMENT(/^\$ontext/,/^\$offtext/),{className:"meta",begin:"^\\$[a-z0-9]+",end:"$",returnBegin:!0,contains:[{className:"meta-keyword",begin:"^\\$[a-z0-9]+"}]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{beginKeywords:"set sets parameter parameters variable variables scalar scalars equation equations",end:";",contains:[e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,a]},{beginKeywords:"table",end:";",returnBegin:!0,contains:[{beginKeywords:"table",end:"$",contains:[a]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},{className:"function",begin:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,returnBegin:!0,contains:[{className:"title",begin:/^[a-z0-9_]+/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0},n]},e.C_NUMBER_MODE,n]}}},function(e,t){e.exports=function(e){var t={keyword:"bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint ne ge le gt lt and xor or not eq eqv",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester strtrim",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR"},n=e.COMMENT("@","@"),r={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[{className:"meta-string",begin:'"',end:'"',illegal:"\\n"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n]},i={begin:/\bstruct\s+/,end:/\s/,keywords:"struct",contains:[{className:"type",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},a=[{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,endsWithParent:!0,relevance:0,contains:[{className:"literal",begin:/\.\.\./},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,i]}],o={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},s=function(t,r,i){var s=e.inherit({className:"function",beginKeywords:t,end:r,excludeEnd:!0,contains:[].concat(a)},i||{});return s.contains.push(o),s.contains.push(e.C_NUMBER_MODE),s.contains.push(e.C_BLOCK_COMMENT_MODE),s.contains.push(n),s},l={className:"built_in",begin:"\\b("+t.built_in.split(" ").join("|")+")\\b"},c={className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},d={begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,keywords:t,relevance:0,contains:[{beginKeywords:t.keyword},l,{className:"built_in",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},u={begin:/\(/,end:/\)/,relevance:0,keywords:{built_in:t.built_in,literal:t.literal},contains:[e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,l,d,c,"self"]};return d.contains.push(u),{aliases:["gss"],case_insensitive:!0,keywords:t,illegal:/(\{[%#]|[%#]\}| <- )/,contains:[e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,c,r,{className:"keyword",begin:/\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/},s("proc keyword",";"),s("fn","="),{beginKeywords:"for threadfor",end:/;/,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE,n,u]},{variants:[{begin:e.UNDERSCORE_IDENT_RE+"\\."+e.UNDERSCORE_IDENT_RE},{begin:e.UNDERSCORE_IDENT_RE+"\\s*="}],relevance:0},d,i]}}},function(e,t){e.exports=function(e){var t=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\(/,/\)/),e.inherit(e.C_NUMBER_MODE,{begin:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+e.C_NUMBER_RE}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"name",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"name",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"attr",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"attr",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",end:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{className:"symbol",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{aliases:["nc"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR",contains:[{className:"meta",begin:"\\%"},{className:"meta",begin:"([O])([0-9]+)"}].concat(t)}}},function(e,t){e.exports=function(e){return{aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"symbol",begin:"\\*",relevance:0},{className:"meta",begin:"@[^@\\s]+"},{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},e.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},e.QUOTE_STRING_MODE]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBufferiimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},illegal:'"',contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"}]}}},function(e,t){e.exports=function(e){return{aliases:["gml","GML"],case_insensitive:!1,keywords:{keyword:"begin end if then else while do for break continue with until repeat exit and or xor not return mod div switch case default var globalvar enum #macro #region #endregion",built_in:"is_real is_string is_array is_undefined is_int32 is_int64 is_ptr is_vec3 is_vec4 is_matrix is_bool typeof variable_global_exists variable_global_get variable_global_set variable_instance_exists variable_instance_get variable_instance_set variable_instance_get_names array_length_1d array_length_2d array_height_2d array_equals array_create array_copy random random_range irandom irandom_range random_set_seed random_get_seed randomize randomise choose abs round floor ceil sign frac sqrt sqr exp ln log2 log10 sin cos tan arcsin arccos arctan arctan2 dsin dcos dtan darcsin darccos darctan darctan2 degtorad radtodeg power logn min max mean median clamp lerp dot_product dot_product_3d dot_product_normalised dot_product_3d_normalised dot_product_normalized dot_product_3d_normalized math_set_epsilon math_get_epsilon angle_difference point_distance_3d point_distance point_direction lengthdir_x lengthdir_y real string int64 ptr string_format chr ansi_char ord string_length string_byte_length string_pos string_copy string_char_at string_ord_at string_byte_at string_set_byte_at string_delete string_insert string_lower string_upper string_repeat string_letters string_digits string_lettersdigits string_replace string_replace_all string_count string_hash_to_newline clipboard_has_text clipboard_set_text clipboard_get_text date_current_datetime date_create_datetime date_valid_datetime date_inc_year date_inc_month date_inc_week date_inc_day date_inc_hour date_inc_minute date_inc_second date_get_year date_get_month date_get_week date_get_day date_get_hour date_get_minute date_get_second date_get_weekday date_get_day_of_year date_get_hour_of_year date_get_minute_of_year date_get_second_of_year date_year_span date_month_span date_week_span date_day_span date_hour_span date_minute_span date_second_span date_compare_datetime date_compare_date date_compare_time date_date_of date_time_of date_datetime_string date_date_string date_time_string date_days_in_month date_days_in_year date_leap_year date_is_today date_set_timezone date_get_timezone game_set_speed game_get_speed motion_set motion_add place_free place_empty place_meeting place_snapped move_random move_snap move_towards_point move_contact_solid move_contact_all move_outside_solid move_outside_all move_bounce_solid move_bounce_all move_wrap distance_to_point distance_to_object position_empty position_meeting path_start path_end mp_linear_step mp_potential_step mp_linear_step_object mp_potential_step_object mp_potential_settings mp_linear_path mp_potential_path mp_linear_path_object mp_potential_path_object mp_grid_create mp_grid_destroy mp_grid_clear_all mp_grid_clear_cell mp_grid_clear_rectangle mp_grid_add_cell mp_grid_get_cell mp_grid_add_rectangle mp_grid_add_instances mp_grid_path mp_grid_draw mp_grid_to_ds_grid collision_point collision_rectangle collision_circle collision_ellipse collision_line collision_point_list collision_rectangle_list collision_circle_list collision_ellipse_list collision_line_list instance_position_list instance_place_list point_in_rectangle point_in_triangle point_in_circle rectangle_in_rectangle rectangle_in_triangle rectangle_in_circle instance_find instance_exists instance_number instance_position instance_nearest instance_furthest instance_place instance_create_depth instance_create_layer instance_copy instance_change instance_destroy position_destroy position_change instance_id_get instance_deactivate_all instance_deactivate_object instance_deactivate_region instance_activate_all instance_activate_object instance_activate_region room_goto room_goto_previous room_goto_next room_previous room_next room_restart game_end game_restart game_load game_save game_save_buffer game_load_buffer event_perform event_user event_perform_object event_inherited show_debug_message show_debug_overlay debug_event debug_get_callstack alarm_get alarm_set font_texture_page_size keyboard_set_map keyboard_get_map keyboard_unset_map keyboard_check keyboard_check_pressed keyboard_check_released keyboard_check_direct keyboard_get_numlock keyboard_set_numlock keyboard_key_press keyboard_key_release keyboard_clear io_clear mouse_check_button mouse_check_button_pressed mouse_check_button_released mouse_wheel_up mouse_wheel_down mouse_clear draw_self draw_sprite draw_sprite_pos draw_sprite_ext draw_sprite_stretched draw_sprite_stretched_ext draw_sprite_tiled draw_sprite_tiled_ext draw_sprite_part draw_sprite_part_ext draw_sprite_general draw_clear draw_clear_alpha draw_point draw_line draw_line_width draw_rectangle draw_roundrect draw_roundrect_ext draw_triangle draw_circle draw_ellipse draw_set_circle_precision draw_arrow draw_button draw_path draw_healthbar draw_getpixel draw_getpixel_ext draw_set_colour draw_set_color draw_set_alpha draw_get_colour draw_get_color draw_get_alpha merge_colour make_colour_rgb make_colour_hsv colour_get_red colour_get_green colour_get_blue colour_get_hue colour_get_saturation colour_get_value merge_color make_color_rgb make_color_hsv color_get_red color_get_green color_get_blue color_get_hue color_get_saturation color_get_value merge_color screen_save screen_save_part draw_set_font draw_set_halign draw_set_valign draw_text draw_text_ext string_width string_height string_width_ext string_height_ext draw_text_transformed draw_text_ext_transformed draw_text_colour draw_text_ext_colour draw_text_transformed_colour draw_text_ext_transformed_colour draw_text_color draw_text_ext_color draw_text_transformed_color draw_text_ext_transformed_color draw_point_colour draw_line_colour draw_line_width_colour draw_rectangle_colour draw_roundrect_colour draw_roundrect_colour_ext draw_triangle_colour draw_circle_colour draw_ellipse_colour draw_point_color draw_line_color draw_line_width_color draw_rectangle_color draw_roundrect_color draw_roundrect_color_ext draw_triangle_color draw_circle_color draw_ellipse_color draw_primitive_begin draw_vertex draw_vertex_colour draw_vertex_color draw_primitive_end sprite_get_uvs font_get_uvs sprite_get_texture font_get_texture texture_get_width texture_get_height texture_get_uvs draw_primitive_begin_texture draw_vertex_texture draw_vertex_texture_colour draw_vertex_texture_color texture_global_scale surface_create surface_create_ext surface_resize surface_free surface_exists surface_get_width surface_get_height surface_get_texture surface_set_target surface_set_target_ext surface_reset_target surface_depth_disable surface_get_depth_disable draw_surface draw_surface_stretched draw_surface_tiled draw_surface_part draw_surface_ext draw_surface_stretched_ext draw_surface_tiled_ext draw_surface_part_ext draw_surface_general surface_getpixel surface_getpixel_ext surface_save surface_save_part surface_copy surface_copy_part application_surface_draw_enable application_get_position application_surface_enable application_surface_is_enabled display_get_width display_get_height display_get_orientation display_get_gui_width display_get_gui_height display_reset display_mouse_get_x display_mouse_get_y display_mouse_set display_set_ui_visibility window_set_fullscreen window_get_fullscreen window_set_caption window_set_min_width window_set_max_width window_set_min_height window_set_max_height window_get_visible_rects window_get_caption window_set_cursor window_get_cursor window_set_colour window_get_colour window_set_color window_get_color window_set_position window_set_size window_set_rectangle window_center window_get_x window_get_y window_get_width window_get_height window_mouse_get_x window_mouse_get_y window_mouse_set window_view_mouse_get_x window_view_mouse_get_y window_views_mouse_get_x window_views_mouse_get_y audio_listener_position audio_listener_velocity audio_listener_orientation audio_emitter_position audio_emitter_create audio_emitter_free audio_emitter_exists audio_emitter_pitch audio_emitter_velocity audio_emitter_falloff audio_emitter_gain audio_play_sound audio_play_sound_on audio_play_sound_at audio_stop_sound audio_resume_music audio_music_is_playing audio_resume_sound audio_pause_sound audio_pause_music audio_channel_num audio_sound_length audio_get_type audio_falloff_set_model audio_play_music audio_stop_music audio_master_gain audio_music_gain audio_sound_gain audio_sound_pitch audio_stop_all audio_resume_all audio_pause_all audio_is_playing audio_is_paused audio_exists audio_sound_set_track_position audio_sound_get_track_position audio_emitter_get_gain audio_emitter_get_pitch audio_emitter_get_x audio_emitter_get_y audio_emitter_get_z audio_emitter_get_vx audio_emitter_get_vy audio_emitter_get_vz audio_listener_set_position audio_listener_set_velocity audio_listener_set_orientation audio_listener_get_data audio_set_master_gain audio_get_master_gain audio_sound_get_gain audio_sound_get_pitch audio_get_name audio_sound_set_track_position audio_sound_get_track_position audio_create_stream audio_destroy_stream audio_create_sync_group audio_destroy_sync_group audio_play_in_sync_group audio_start_sync_group audio_stop_sync_group audio_pause_sync_group audio_resume_sync_group audio_sync_group_get_track_pos audio_sync_group_debug audio_sync_group_is_playing audio_debug audio_group_load audio_group_unload audio_group_is_loaded audio_group_load_progress audio_group_name audio_group_stop_all audio_group_set_gain audio_create_buffer_sound audio_free_buffer_sound audio_create_play_queue audio_free_play_queue audio_queue_sound audio_get_recorder_count audio_get_recorder_info audio_start_recording audio_stop_recording audio_sound_get_listener_mask audio_emitter_get_listener_mask audio_get_listener_mask audio_sound_set_listener_mask audio_emitter_set_listener_mask audio_set_listener_mask audio_get_listener_count audio_get_listener_info audio_system show_message show_message_async clickable_add clickable_add_ext clickable_change clickable_change_ext clickable_delete clickable_exists clickable_set_style show_question show_question_async get_integer get_string get_integer_async get_string_async get_login_async get_open_filename get_save_filename get_open_filename_ext get_save_filename_ext show_error highscore_clear highscore_add highscore_value highscore_name draw_highscore sprite_exists sprite_get_name sprite_get_number sprite_get_width sprite_get_height sprite_get_xoffset sprite_get_yoffset sprite_get_bbox_left sprite_get_bbox_right sprite_get_bbox_top sprite_get_bbox_bottom sprite_save sprite_save_strip sprite_set_cache_size sprite_set_cache_size_ext sprite_get_tpe sprite_prefetch sprite_prefetch_multi sprite_flush sprite_flush_multi sprite_set_speed sprite_get_speed_type sprite_get_speed font_exists font_get_name font_get_fontname font_get_bold font_get_italic font_get_first font_get_last font_get_size font_set_cache_size path_exists path_get_name path_get_length path_get_time path_get_kind path_get_closed path_get_precision path_get_number path_get_point_x path_get_point_y path_get_point_speed path_get_x path_get_y path_get_speed script_exists script_get_name timeline_add timeline_delete timeline_clear timeline_exists timeline_get_name timeline_moment_clear timeline_moment_add_script timeline_size timeline_max_moment object_exists object_get_name object_get_sprite object_get_solid object_get_visible object_get_persistent object_get_mask object_get_parent object_get_physics object_is_ancestor room_exists room_get_name sprite_set_offset sprite_duplicate sprite_assign sprite_merge sprite_add sprite_replace sprite_create_from_surface sprite_add_from_surface sprite_delete sprite_set_alpha_from_sprite sprite_collision_mask font_add_enable_aa font_add_get_enable_aa font_add font_add_sprite font_add_sprite_ext font_replace font_replace_sprite font_replace_sprite_ext font_delete path_set_kind path_set_closed path_set_precision path_add path_assign path_duplicate path_append path_delete path_add_point path_insert_point path_change_point path_delete_point path_clear_points path_reverse path_mirror path_flip path_rotate path_rescale path_shift script_execute object_set_sprite object_set_solid object_set_visible object_set_persistent object_set_mask room_set_width room_set_height room_set_persistent room_set_background_colour room_set_background_color room_set_view room_set_viewport room_get_viewport room_set_view_enabled room_add room_duplicate room_assign room_instance_add room_instance_clear room_get_camera room_set_camera asset_get_index asset_get_type file_text_open_from_string file_text_open_read file_text_open_write file_text_open_append file_text_close file_text_write_string file_text_write_real file_text_writeln file_text_read_string file_text_read_real file_text_readln file_text_eof file_text_eoln file_exists file_delete file_rename file_copy directory_exists directory_create directory_destroy file_find_first file_find_next file_find_close file_attributes filename_name filename_path filename_dir filename_drive filename_ext filename_change_ext file_bin_open file_bin_rewrite file_bin_close file_bin_position file_bin_size file_bin_seek file_bin_write_byte file_bin_read_byte parameter_count parameter_string environment_get_variable ini_open_from_string ini_open ini_close ini_read_string ini_read_real ini_write_string ini_write_real ini_key_exists ini_section_exists ini_key_delete ini_section_delete ds_set_precision ds_exists ds_stack_create ds_stack_destroy ds_stack_clear ds_stack_copy ds_stack_size ds_stack_empty ds_stack_push ds_stack_pop ds_stack_top ds_stack_write ds_stack_read ds_queue_create ds_queue_destroy ds_queue_clear ds_queue_copy ds_queue_size ds_queue_empty ds_queue_enqueue ds_queue_dequeue ds_queue_head ds_queue_tail ds_queue_write ds_queue_read ds_list_create ds_list_destroy ds_list_clear ds_list_copy ds_list_size ds_list_empty ds_list_add ds_list_insert ds_list_replace ds_list_delete ds_list_find_index ds_list_find_value ds_list_mark_as_list ds_list_mark_as_map ds_list_sort ds_list_shuffle ds_list_write ds_list_read ds_list_set ds_map_create ds_map_destroy ds_map_clear ds_map_copy ds_map_size ds_map_empty ds_map_add ds_map_add_list ds_map_add_map ds_map_replace ds_map_replace_map ds_map_replace_list ds_map_delete ds_map_exists ds_map_find_value ds_map_find_previous ds_map_find_next ds_map_find_first ds_map_find_last ds_map_write ds_map_read ds_map_secure_save ds_map_secure_load ds_map_secure_load_buffer ds_map_secure_save_buffer ds_map_set ds_priority_create ds_priority_destroy ds_priority_clear ds_priority_copy ds_priority_size ds_priority_empty ds_priority_add ds_priority_change_priority ds_priority_find_priority ds_priority_delete_value ds_priority_delete_min ds_priority_find_min ds_priority_delete_max ds_priority_find_max ds_priority_write ds_priority_read ds_grid_create ds_grid_destroy ds_grid_copy ds_grid_resize ds_grid_width ds_grid_height ds_grid_clear ds_grid_set ds_grid_add ds_grid_multiply ds_grid_set_region ds_grid_add_region ds_grid_multiply_region ds_grid_set_disk ds_grid_add_disk ds_grid_multiply_disk ds_grid_set_grid_region ds_grid_add_grid_region ds_grid_multiply_grid_region ds_grid_get ds_grid_get_sum ds_grid_get_max ds_grid_get_min ds_grid_get_mean ds_grid_get_disk_sum ds_grid_get_disk_min ds_grid_get_disk_max ds_grid_get_disk_mean ds_grid_value_exists ds_grid_value_x ds_grid_value_y ds_grid_value_disk_exists ds_grid_value_disk_x ds_grid_value_disk_y ds_grid_shuffle ds_grid_write ds_grid_read ds_grid_sort ds_grid_set ds_grid_get effect_create_below effect_create_above effect_clear part_type_create part_type_destroy part_type_exists part_type_clear part_type_shape part_type_sprite part_type_size part_type_scale part_type_orientation part_type_life part_type_step part_type_death part_type_speed part_type_direction part_type_gravity part_type_colour1 part_type_colour2 part_type_colour3 part_type_colour_mix part_type_colour_rgb part_type_colour_hsv part_type_color1 part_type_color2 part_type_color3 part_type_color_mix part_type_color_rgb part_type_color_hsv part_type_alpha1 part_type_alpha2 part_type_alpha3 part_type_blend part_system_create part_system_create_layer part_system_destroy part_system_exists part_system_clear part_system_draw_order part_system_depth part_system_position part_system_automatic_update part_system_automatic_draw part_system_update part_system_drawit part_system_get_layer part_system_layer part_particles_create part_particles_create_colour part_particles_create_color part_particles_clear part_particles_count part_emitter_create part_emitter_destroy part_emitter_destroy_all part_emitter_exists part_emitter_clear part_emitter_region part_emitter_burst part_emitter_stream external_call external_define external_free window_handle window_device matrix_get matrix_set matrix_build_identity matrix_build matrix_build_lookat matrix_build_projection_ortho matrix_build_projection_perspective matrix_build_projection_perspective_fov matrix_multiply matrix_transform_vertex matrix_stack_push matrix_stack_pop matrix_stack_multiply matrix_stack_set matrix_stack_clear matrix_stack_top matrix_stack_is_empty browser_input_capture os_get_config os_get_info os_get_language os_get_region os_lock_orientation display_get_dpi_x display_get_dpi_y display_set_gui_size display_set_gui_maximise display_set_gui_maximize device_mouse_dbclick_enable display_set_timing_method display_get_timing_method display_set_sleep_margin display_get_sleep_margin virtual_key_add virtual_key_hide virtual_key_delete virtual_key_show draw_enable_drawevent draw_enable_swf_aa draw_set_swf_aa_level draw_get_swf_aa_level draw_texture_flush draw_flush gpu_set_blendenable gpu_set_ztestenable gpu_set_zfunc gpu_set_zwriteenable gpu_set_lightingenable gpu_set_fog gpu_set_cullmode gpu_set_blendmode gpu_set_blendmode_ext gpu_set_blendmode_ext_sepalpha gpu_set_colorwriteenable gpu_set_colourwriteenable gpu_set_alphatestenable gpu_set_alphatestref gpu_set_alphatestfunc gpu_set_texfilter gpu_set_texfilter_ext gpu_set_texrepeat gpu_set_texrepeat_ext gpu_set_tex_filter gpu_set_tex_filter_ext gpu_set_tex_repeat gpu_set_tex_repeat_ext gpu_set_tex_mip_filter gpu_set_tex_mip_filter_ext gpu_set_tex_mip_bias gpu_set_tex_mip_bias_ext gpu_set_tex_min_mip gpu_set_tex_min_mip_ext gpu_set_tex_max_mip gpu_set_tex_max_mip_ext gpu_set_tex_max_aniso gpu_set_tex_max_aniso_ext gpu_set_tex_mip_enable gpu_set_tex_mip_enable_ext gpu_get_blendenable gpu_get_ztestenable gpu_get_zfunc gpu_get_zwriteenable gpu_get_lightingenable gpu_get_fog gpu_get_cullmode gpu_get_blendmode gpu_get_blendmode_ext gpu_get_blendmode_ext_sepalpha gpu_get_blendmode_src gpu_get_blendmode_dest gpu_get_blendmode_srcalpha gpu_get_blendmode_destalpha gpu_get_colorwriteenable gpu_get_colourwriteenable gpu_get_alphatestenable gpu_get_alphatestref gpu_get_alphatestfunc gpu_get_texfilter gpu_get_texfilter_ext gpu_get_texrepeat gpu_get_texrepeat_ext gpu_get_tex_filter gpu_get_tex_filter_ext gpu_get_tex_repeat gpu_get_tex_repeat_ext gpu_get_tex_mip_filter gpu_get_tex_mip_filter_ext gpu_get_tex_mip_bias gpu_get_tex_mip_bias_ext gpu_get_tex_min_mip gpu_get_tex_min_mip_ext gpu_get_tex_max_mip gpu_get_tex_max_mip_ext gpu_get_tex_max_aniso gpu_get_tex_max_aniso_ext gpu_get_tex_mip_enable gpu_get_tex_mip_enable_ext gpu_push_state gpu_pop_state gpu_get_state gpu_set_state draw_light_define_ambient draw_light_define_direction draw_light_define_point draw_light_enable draw_set_lighting draw_light_get_ambient draw_light_get draw_get_lighting shop_leave_rating url_get_domain url_open url_open_ext url_open_full get_timer achievement_login achievement_logout achievement_post achievement_increment achievement_post_score achievement_available achievement_show_achievements achievement_show_leaderboards achievement_load_friends achievement_load_leaderboard achievement_send_challenge achievement_load_progress achievement_reset achievement_login_status achievement_get_pic achievement_show_challenge_notifications achievement_get_challenges achievement_event achievement_show achievement_get_info cloud_file_save cloud_string_save cloud_synchronise ads_enable ads_disable ads_setup ads_engagement_launch ads_engagement_available ads_engagement_active ads_event ads_event_preload ads_set_reward_callback ads_get_display_height ads_get_display_width ads_move ads_interstitial_available ads_interstitial_display device_get_tilt_x device_get_tilt_y device_get_tilt_z device_is_keypad_open device_mouse_check_button device_mouse_check_button_pressed device_mouse_check_button_released device_mouse_x device_mouse_y device_mouse_raw_x device_mouse_raw_y device_mouse_x_to_gui device_mouse_y_to_gui iap_activate iap_status iap_enumerate_products iap_restore_all iap_acquire iap_consume iap_product_details iap_purchase_details facebook_init facebook_login facebook_status facebook_graph_request facebook_dialog facebook_logout facebook_launch_offerwall facebook_post_message facebook_send_invite facebook_user_id facebook_accesstoken facebook_check_permission facebook_request_read_permissions facebook_request_publish_permissions gamepad_is_supported gamepad_get_device_count gamepad_is_connected gamepad_get_description gamepad_get_button_threshold gamepad_set_button_threshold gamepad_get_axis_deadzone gamepad_set_axis_deadzone gamepad_button_count gamepad_button_check gamepad_button_check_pressed gamepad_button_check_released gamepad_button_value gamepad_axis_count gamepad_axis_value gamepad_set_vibration gamepad_set_colour gamepad_set_color os_is_paused window_has_focus code_is_compiled http_get http_get_file http_post_string http_request json_encode json_decode zip_unzip load_csv base64_encode base64_decode md5_string_unicode md5_string_utf8 md5_file os_is_network_connected sha1_string_unicode sha1_string_utf8 sha1_file os_powersave_enable analytics_event analytics_event_ext win8_livetile_tile_notification win8_livetile_tile_clear win8_livetile_badge_notification win8_livetile_badge_clear win8_livetile_queue_enable win8_secondarytile_pin win8_secondarytile_badge_notification win8_secondarytile_delete win8_livetile_notification_begin win8_livetile_notification_secondary_begin win8_livetile_notification_expiry win8_livetile_notification_tag win8_livetile_notification_text_add win8_livetile_notification_image_add win8_livetile_notification_end win8_appbar_enable win8_appbar_add_element win8_appbar_remove_element win8_settingscharm_add_entry win8_settingscharm_add_html_entry win8_settingscharm_add_xaml_entry win8_settingscharm_set_xaml_property win8_settingscharm_get_xaml_property win8_settingscharm_remove_entry win8_share_image win8_share_screenshot win8_share_file win8_share_url win8_share_text win8_search_enable win8_search_disable win8_search_add_suggestions win8_device_touchscreen_available win8_license_initialize_sandbox win8_license_trial_version winphone_license_trial_version winphone_tile_title winphone_tile_count winphone_tile_back_title winphone_tile_back_content winphone_tile_back_content_wide winphone_tile_front_image winphone_tile_front_image_small winphone_tile_front_image_wide winphone_tile_back_image winphone_tile_back_image_wide winphone_tile_background_colour winphone_tile_background_color winphone_tile_icon_image winphone_tile_small_icon_image winphone_tile_wide_content winphone_tile_cycle_images winphone_tile_small_background_image physics_world_create physics_world_gravity physics_world_update_speed physics_world_update_iterations physics_world_draw_debug physics_pause_enable physics_fixture_create physics_fixture_set_kinematic physics_fixture_set_density physics_fixture_set_awake physics_fixture_set_restitution physics_fixture_set_friction physics_fixture_set_collision_group physics_fixture_set_sensor physics_fixture_set_linear_damping physics_fixture_set_angular_damping physics_fixture_set_circle_shape physics_fixture_set_box_shape physics_fixture_set_edge_shape physics_fixture_set_polygon_shape physics_fixture_set_chain_shape physics_fixture_add_point physics_fixture_bind physics_fixture_bind_ext physics_fixture_delete physics_apply_force physics_apply_impulse physics_apply_angular_impulse physics_apply_local_force physics_apply_local_impulse physics_apply_torque physics_mass_properties physics_draw_debug physics_test_overlap physics_remove_fixture physics_set_friction physics_set_density physics_set_restitution physics_get_friction physics_get_density physics_get_restitution physics_joint_distance_create physics_joint_rope_create physics_joint_revolute_create physics_joint_prismatic_create physics_joint_pulley_create physics_joint_wheel_create physics_joint_weld_create physics_joint_friction_create physics_joint_gear_create physics_joint_enable_motor physics_joint_get_value physics_joint_set_value physics_joint_delete physics_particle_create physics_particle_delete physics_particle_delete_region_circle physics_particle_delete_region_box physics_particle_delete_region_poly physics_particle_set_flags physics_particle_set_category_flags physics_particle_draw physics_particle_draw_ext physics_particle_count physics_particle_get_data physics_particle_get_data_particle physics_particle_group_begin physics_particle_group_circle physics_particle_group_box physics_particle_group_polygon physics_particle_group_add_point physics_particle_group_end physics_particle_group_join physics_particle_group_delete physics_particle_group_count physics_particle_group_get_data physics_particle_group_get_mass physics_particle_group_get_inertia physics_particle_group_get_centre_x physics_particle_group_get_centre_y physics_particle_group_get_vel_x physics_particle_group_get_vel_y physics_particle_group_get_ang_vel physics_particle_group_get_x physics_particle_group_get_y physics_particle_group_get_angle physics_particle_set_group_flags physics_particle_get_group_flags physics_particle_get_max_count physics_particle_get_radius physics_particle_get_density physics_particle_get_damping physics_particle_get_gravity_scale physics_particle_set_max_count physics_particle_set_radius physics_particle_set_density physics_particle_set_damping physics_particle_set_gravity_scale network_create_socket network_create_socket_ext network_create_server network_create_server_raw network_connect network_connect_raw network_send_packet network_send_raw network_send_broadcast network_send_udp network_send_udp_raw network_set_timeout network_set_config network_resolve network_destroy buffer_create buffer_write buffer_read buffer_seek buffer_get_surface buffer_set_surface buffer_delete buffer_exists buffer_get_type buffer_get_alignment buffer_poke buffer_peek buffer_save buffer_save_ext buffer_load buffer_load_ext buffer_load_partial buffer_copy buffer_fill buffer_get_size buffer_tell buffer_resize buffer_md5 buffer_sha1 buffer_base64_encode buffer_base64_decode buffer_base64_decode_ext buffer_sizeof buffer_get_address buffer_create_from_vertex_buffer buffer_create_from_vertex_buffer_ext buffer_copy_from_vertex_buffer buffer_async_group_begin buffer_async_group_option buffer_async_group_end buffer_load_async buffer_save_async gml_release_mode gml_pragma steam_activate_overlay steam_is_overlay_enabled steam_is_overlay_activated steam_get_persona_name steam_initialised steam_is_cloud_enabled_for_app steam_is_cloud_enabled_for_account steam_file_persisted steam_get_quota_total steam_get_quota_free steam_file_write steam_file_write_file steam_file_read steam_file_delete steam_file_exists steam_file_size steam_file_share steam_is_screenshot_requested steam_send_screenshot steam_is_user_logged_on steam_get_user_steam_id steam_user_owns_dlc steam_user_installed_dlc steam_set_achievement steam_get_achievement steam_clear_achievement steam_set_stat_int steam_set_stat_float steam_set_stat_avg_rate steam_get_stat_int steam_get_stat_float steam_get_stat_avg_rate steam_reset_all_stats steam_reset_all_stats_achievements steam_stats_ready steam_create_leaderboard steam_upload_score steam_upload_score_ext steam_download_scores_around_user steam_download_scores steam_download_friends_scores steam_upload_score_buffer steam_upload_score_buffer_ext steam_current_game_language steam_available_languages steam_activate_overlay_browser steam_activate_overlay_user steam_activate_overlay_store steam_get_user_persona_name steam_get_app_id steam_get_user_account_id steam_ugc_download steam_ugc_create_item steam_ugc_start_item_update steam_ugc_set_item_title steam_ugc_set_item_description steam_ugc_set_item_visibility steam_ugc_set_item_tags steam_ugc_set_item_content steam_ugc_set_item_preview steam_ugc_submit_item_update steam_ugc_get_item_update_progress steam_ugc_subscribe_item steam_ugc_unsubscribe_item steam_ugc_num_subscribed_items steam_ugc_get_subscribed_items steam_ugc_get_item_install_info steam_ugc_get_item_update_info steam_ugc_request_item_details steam_ugc_create_query_user steam_ugc_create_query_user_ex steam_ugc_create_query_all steam_ugc_create_query_all_ex steam_ugc_query_set_cloud_filename_filter steam_ugc_query_set_match_any_tag steam_ugc_query_set_search_text steam_ugc_query_set_ranked_by_trend_days steam_ugc_query_add_required_tag steam_ugc_query_add_excluded_tag steam_ugc_query_set_return_long_description steam_ugc_query_set_return_total_only steam_ugc_query_set_allow_cached_response steam_ugc_send_query shader_set shader_get_name shader_reset shader_current shader_is_compiled shader_get_sampler_index shader_get_uniform shader_set_uniform_i shader_set_uniform_i_array shader_set_uniform_f shader_set_uniform_f_array shader_set_uniform_matrix shader_set_uniform_matrix_array shader_enable_corner_id texture_set_stage texture_get_texel_width texture_get_texel_height shaders_are_supported vertex_format_begin vertex_format_end vertex_format_delete vertex_format_add_position vertex_format_add_position_3d vertex_format_add_colour vertex_format_add_color vertex_format_add_normal vertex_format_add_texcoord vertex_format_add_textcoord vertex_format_add_custom vertex_create_buffer vertex_create_buffer_ext vertex_delete_buffer vertex_begin vertex_end vertex_position vertex_position_3d vertex_colour vertex_color vertex_argb vertex_texcoord vertex_normal vertex_float1 vertex_float2 vertex_float3 vertex_float4 vertex_ubyte4 vertex_submit vertex_freeze vertex_get_number vertex_get_buffer_size vertex_create_buffer_from_buffer vertex_create_buffer_from_buffer_ext push_local_notification push_get_first_local_notification push_get_next_local_notification push_cancel_local_notification skeleton_animation_set skeleton_animation_get skeleton_animation_mix skeleton_animation_set_ext skeleton_animation_get_ext skeleton_animation_get_duration skeleton_animation_get_frames skeleton_animation_clear skeleton_skin_set skeleton_skin_get skeleton_attachment_set skeleton_attachment_get skeleton_attachment_create skeleton_collision_draw_set skeleton_bone_data_get skeleton_bone_data_set skeleton_bone_state_get skeleton_bone_state_set skeleton_get_minmax skeleton_get_num_bounds skeleton_get_bounds skeleton_animation_get_frame skeleton_animation_set_frame draw_skeleton draw_skeleton_time draw_skeleton_instance draw_skeleton_collision skeleton_animation_list skeleton_skin_list skeleton_slot_data layer_get_id layer_get_id_at_depth layer_get_depth layer_create layer_destroy layer_destroy_instances layer_add_instance layer_has_instance layer_set_visible layer_get_visible layer_exists layer_x layer_y layer_get_x layer_get_y layer_hspeed layer_vspeed layer_get_hspeed layer_get_vspeed layer_script_begin layer_script_end layer_shader layer_get_script_begin layer_get_script_end layer_get_shader layer_set_target_room layer_get_target_room layer_reset_target_room layer_get_all layer_get_all_elements layer_get_name layer_depth layer_get_element_layer layer_get_element_type layer_element_move layer_force_draw_depth layer_is_draw_depth_forced layer_get_forced_depth layer_background_get_id layer_background_exists layer_background_create layer_background_destroy layer_background_visible layer_background_change layer_background_sprite layer_background_htiled layer_background_vtiled layer_background_stretch layer_background_yscale layer_background_xscale layer_background_blend layer_background_alpha layer_background_index layer_background_speed layer_background_get_visible layer_background_get_sprite layer_background_get_htiled layer_background_get_vtiled layer_background_get_stretch layer_background_get_yscale layer_background_get_xscale layer_background_get_blend layer_background_get_alpha layer_background_get_index layer_background_get_speed layer_sprite_get_id layer_sprite_exists layer_sprite_create layer_sprite_destroy layer_sprite_change layer_sprite_index layer_sprite_speed layer_sprite_xscale layer_sprite_yscale layer_sprite_angle layer_sprite_blend layer_sprite_alpha layer_sprite_x layer_sprite_y layer_sprite_get_sprite layer_sprite_get_index layer_sprite_get_speed layer_sprite_get_xscale layer_sprite_get_yscale layer_sprite_get_angle layer_sprite_get_blend layer_sprite_get_alpha layer_sprite_get_x layer_sprite_get_y layer_tilemap_get_id layer_tilemap_exists layer_tilemap_create layer_tilemap_destroy tilemap_tileset tilemap_x tilemap_y tilemap_set tilemap_set_at_pixel tilemap_get_tileset tilemap_get_tile_width tilemap_get_tile_height tilemap_get_width tilemap_get_height tilemap_get_x tilemap_get_y tilemap_get tilemap_get_at_pixel tilemap_get_cell_x_at_pixel tilemap_get_cell_y_at_pixel tilemap_clear draw_tilemap draw_tile tilemap_set_global_mask tilemap_get_global_mask tilemap_set_mask tilemap_get_mask tilemap_get_frame tile_set_empty tile_set_index tile_set_flip tile_set_mirror tile_set_rotate tile_get_empty tile_get_index tile_get_flip tile_get_mirror tile_get_rotate layer_tile_exists layer_tile_create layer_tile_destroy layer_tile_change layer_tile_xscale layer_tile_yscale layer_tile_blend layer_tile_alpha layer_tile_x layer_tile_y layer_tile_region layer_tile_visible layer_tile_get_sprite layer_tile_get_xscale layer_tile_get_yscale layer_tile_get_blend layer_tile_get_alpha layer_tile_get_x layer_tile_get_y layer_tile_get_region layer_tile_get_visible layer_instance_get_instance instance_activate_layer instance_deactivate_layer camera_create camera_create_view camera_destroy camera_apply camera_get_active camera_get_default camera_set_default camera_set_view_mat camera_set_proj_mat camera_set_update_script camera_set_begin_script camera_set_end_script camera_set_view_pos camera_set_view_size camera_set_view_speed camera_set_view_border camera_set_view_angle camera_set_view_target camera_get_view_mat camera_get_proj_mat camera_get_update_script camera_get_begin_script camera_get_end_script camera_get_view_x camera_get_view_y camera_get_view_width camera_get_view_height camera_get_view_speed_x camera_get_view_speed_y camera_get_view_border_x camera_get_view_border_y camera_get_view_angle camera_get_view_target view_get_camera view_get_visible view_get_xport view_get_yport view_get_wport view_get_hport view_get_surface_id view_set_camera view_set_visible view_set_xport view_set_yport view_set_wport view_set_hport view_set_surface_id gesture_drag_time gesture_drag_distance gesture_flick_speed gesture_double_tap_time gesture_double_tap_distance gesture_pinch_distance gesture_pinch_angle_towards gesture_pinch_angle_away gesture_rotate_time gesture_rotate_angle gesture_tap_count gesture_get_drag_time gesture_get_drag_distance gesture_get_flick_speed gesture_get_double_tap_time gesture_get_double_tap_distance gesture_get_pinch_distance gesture_get_pinch_angle_towards gesture_get_pinch_angle_away gesture_get_rotate_time gesture_get_rotate_angle gesture_get_tap_count keyboard_virtual_show keyboard_virtual_hide keyboard_virtual_status keyboard_virtual_height",literal:"self other all noone global local undefined pointer_invalid pointer_null path_action_stop path_action_restart path_action_continue path_action_reverse true false pi GM_build_date GM_version GM_runtime_version timezone_local timezone_utc gamespeed_fps gamespeed_microseconds ev_create ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw ev_draw_begin ev_draw_end ev_draw_pre ev_draw_post ev_keypress ev_keyrelease ev_trigger ev_left_button ev_right_button ev_middle_button ev_no_button ev_left_press ev_right_press ev_middle_press ev_left_release ev_right_release ev_middle_release ev_mouse_enter ev_mouse_leave ev_mouse_wheel_up ev_mouse_wheel_down ev_global_left_button ev_global_right_button ev_global_middle_button ev_global_left_press ev_global_right_press ev_global_middle_press ev_global_left_release ev_global_right_release ev_global_middle_release ev_joystick1_left ev_joystick1_right ev_joystick1_up ev_joystick1_down ev_joystick1_button1 ev_joystick1_button2 ev_joystick1_button3 ev_joystick1_button4 ev_joystick1_button5 ev_joystick1_button6 ev_joystick1_button7 ev_joystick1_button8 ev_joystick2_left ev_joystick2_right ev_joystick2_up ev_joystick2_down ev_joystick2_button1 ev_joystick2_button2 ev_joystick2_button3 ev_joystick2_button4 ev_joystick2_button5 ev_joystick2_button6 ev_joystick2_button7 ev_joystick2_button8 ev_outside ev_boundary ev_game_start ev_game_end ev_room_start ev_room_end ev_no_more_lives ev_animation_end ev_end_of_path ev_no_more_health ev_close_button ev_user0 ev_user1 ev_user2 ev_user3 ev_user4 ev_user5 ev_user6 ev_user7 ev_user8 ev_user9 ev_user10 ev_user11 ev_user12 ev_user13 ev_user14 ev_user15 ev_step_normal ev_step_begin ev_step_end ev_gui ev_gui_begin ev_gui_end ev_cleanup ev_gesture ev_gesture_tap ev_gesture_double_tap ev_gesture_drag_start ev_gesture_dragging ev_gesture_drag_end ev_gesture_flick ev_gesture_pinch_start ev_gesture_pinch_in ev_gesture_pinch_out ev_gesture_pinch_end ev_gesture_rotate_start ev_gesture_rotating ev_gesture_rotate_end ev_global_gesture_tap ev_global_gesture_double_tap ev_global_gesture_drag_start ev_global_gesture_dragging ev_global_gesture_drag_end ev_global_gesture_flick ev_global_gesture_pinch_start ev_global_gesture_pinch_in ev_global_gesture_pinch_out ev_global_gesture_pinch_end ev_global_gesture_rotate_start ev_global_gesture_rotating ev_global_gesture_rotate_end vk_nokey vk_anykey vk_enter vk_return vk_shift vk_control vk_alt vk_escape vk_space vk_backspace vk_tab vk_pause vk_printscreen vk_left vk_right vk_up vk_down vk_home vk_end vk_delete vk_insert vk_pageup vk_pagedown vk_f1 vk_f2 vk_f3 vk_f4 vk_f5 vk_f6 vk_f7 vk_f8 vk_f9 vk_f10 vk_f11 vk_f12 vk_numpad0 vk_numpad1 vk_numpad2 vk_numpad3 vk_numpad4 vk_numpad5 vk_numpad6 vk_numpad7 vk_numpad8 vk_numpad9 vk_divide vk_multiply vk_subtract vk_add vk_decimal vk_lshift vk_lcontrol vk_lalt vk_rshift vk_rcontrol vk_ralt mb_any mb_none mb_left mb_right mb_middle c_aqua c_black c_blue c_dkgray c_fuchsia c_gray c_green c_lime c_ltgray c_maroon c_navy c_olive c_purple c_red c_silver c_teal c_white c_yellow c_orange fa_left fa_center fa_right fa_top fa_middle fa_bottom pr_pointlist pr_linelist pr_linestrip pr_trianglelist pr_trianglestrip pr_trianglefan bm_complex bm_normal bm_add bm_max bm_subtract bm_zero bm_one bm_src_colour bm_inv_src_colour bm_src_color bm_inv_src_color bm_src_alpha bm_inv_src_alpha bm_dest_alpha bm_inv_dest_alpha bm_dest_colour bm_inv_dest_colour bm_dest_color bm_inv_dest_color bm_src_alpha_sat tf_point tf_linear tf_anisotropic mip_off mip_on mip_markedonly audio_falloff_none audio_falloff_inverse_distance audio_falloff_inverse_distance_clamped audio_falloff_linear_distance audio_falloff_linear_distance_clamped audio_falloff_exponent_distance audio_falloff_exponent_distance_clamped audio_old_system audio_new_system audio_mono audio_stereo audio_3d cr_default cr_none cr_arrow cr_cross cr_beam cr_size_nesw cr_size_ns cr_size_nwse cr_size_we cr_uparrow cr_hourglass cr_drag cr_appstart cr_handpoint cr_size_all spritespeed_framespersecond spritespeed_framespergameframe asset_object asset_unknown asset_sprite asset_sound asset_room asset_path asset_script asset_font asset_timeline asset_tiles asset_shader fa_readonly fa_hidden fa_sysfile fa_volumeid fa_directory fa_archive ds_type_map ds_type_list ds_type_stack ds_type_queue ds_type_grid ds_type_priority ef_explosion ef_ring ef_ellipse ef_firework ef_smoke ef_smokeup ef_star ef_spark ef_flare ef_cloud ef_rain ef_snow pt_shape_pixel pt_shape_disk pt_shape_square pt_shape_line pt_shape_star pt_shape_circle pt_shape_ring pt_shape_sphere pt_shape_flare pt_shape_spark pt_shape_explosion pt_shape_cloud pt_shape_smoke pt_shape_snow ps_distr_linear ps_distr_gaussian ps_distr_invgaussian ps_shape_rectangle ps_shape_ellipse ps_shape_diamond ps_shape_line ty_real ty_string dll_cdecl dll_stdcall matrix_view matrix_projection matrix_world os_win32 os_windows os_macosx os_ios os_android os_symbian os_linux os_unknown os_winphone os_tizen os_win8native os_wiiu os_3ds os_psvita os_bb10 os_ps4 os_xboxone os_ps3 os_xbox360 os_uwp os_tvos os_switch browser_not_a_browser browser_unknown browser_ie browser_firefox browser_chrome browser_safari browser_safari_mobile browser_opera browser_tizen browser_edge browser_windows_store browser_ie_mobile device_ios_unknown device_ios_iphone device_ios_iphone_retina device_ios_ipad device_ios_ipad_retina device_ios_iphone5 device_ios_iphone6 device_ios_iphone6plus device_emulator device_tablet display_landscape display_landscape_flipped display_portrait display_portrait_flipped tm_sleep tm_countvsyncs of_challenge_win of_challen ge_lose of_challenge_tie leaderboard_type_number leaderboard_type_time_mins_secs cmpfunc_never cmpfunc_less cmpfunc_equal cmpfunc_lessequal cmpfunc_greater cmpfunc_notequal cmpfunc_greaterequal cmpfunc_always cull_noculling cull_clockwise cull_counterclockwise lighttype_dir lighttype_point iap_ev_storeload iap_ev_product iap_ev_purchase iap_ev_consume iap_ev_restore iap_storeload_ok iap_storeload_failed iap_status_uninitialised iap_status_unavailable iap_status_loading iap_status_available iap_status_processing iap_status_restoring iap_failed iap_unavailable iap_available iap_purchased iap_canceled iap_refunded fb_login_default fb_login_fallback_to_webview fb_login_no_fallback_to_webview fb_login_forcing_webview fb_login_use_system_account fb_login_forcing_safari phy_joint_anchor_1_x phy_joint_anchor_1_y phy_joint_anchor_2_x phy_joint_anchor_2_y phy_joint_reaction_force_x phy_joint_reaction_force_y phy_joint_reaction_torque phy_joint_motor_speed phy_joint_angle phy_joint_motor_torque phy_joint_max_motor_torque phy_joint_translation phy_joint_speed phy_joint_motor_force phy_joint_max_motor_force phy_joint_length_1 phy_joint_length_2 phy_joint_damping_ratio phy_joint_frequency phy_joint_lower_angle_limit phy_joint_upper_angle_limit phy_joint_angle_limits phy_joint_max_length phy_joint_max_torque phy_joint_max_force phy_debug_render_aabb phy_debug_render_collision_pairs phy_debug_render_coms phy_debug_render_core_shapes phy_debug_render_joints phy_debug_render_obb phy_debug_render_shapes phy_particle_flag_water phy_particle_flag_zombie phy_particle_flag_wall phy_particle_flag_spring phy_particle_flag_elastic phy_particle_flag_viscous phy_particle_flag_powder phy_particle_flag_tensile phy_particle_flag_colourmixing phy_particle_flag_colormixing phy_particle_group_flag_solid phy_particle_group_flag_rigid phy_particle_data_flag_typeflags phy_particle_data_flag_position phy_particle_data_flag_velocity phy_particle_data_flag_colour phy_particle_data_flag_color phy_particle_data_flag_category achievement_our_info achievement_friends_info achievement_leaderboard_info achievement_achievement_info achievement_filter_all_players achievement_filter_friends_only achievement_filter_favorites_only achievement_type_achievement_challenge achievement_type_score_challenge achievement_pic_loaded achievement_show_ui achievement_show_profile achievement_show_leaderboard achievement_show_achievement achievement_show_bank achievement_show_friend_picker achievement_show_purchase_prompt network_socket_tcp network_socket_udp network_socket_bluetooth network_type_connect network_type_disconnect network_type_data network_type_non_blocking_connect network_config_connect_timeout network_config_use_non_blocking_socket network_config_enable_reliable_udp network_config_disable_reliable_udp buffer_fixed buffer_grow buffer_wrap buffer_fast buffer_vbuffer buffer_network buffer_u8 buffer_s8 buffer_u16 buffer_s16 buffer_u32 buffer_s32 buffer_u64 buffer_f16 buffer_f32 buffer_f64 buffer_bool buffer_text buffer_string buffer_surface_copy buffer_seek_start buffer_seek_relative buffer_seek_end buffer_generalerror buffer_outofspace buffer_outofbounds buffer_invalidtype text_type button_type input_type ANSI_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET RUSSIAN_CHARSET SYMBOL_CHARSET SHIFTJIS_CHARSET HANGEUL_CHARSET GB2312_CHARSET CHINESEBIG5_CHARSET JOHAB_CHARSET HEBREW_CHARSET ARABIC_CHARSET GREEK_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET THAI_CHARSET MAC_CHARSET BALTIC_CHARSET OEM_CHARSET gp_face1 gp_face2 gp_face3 gp_face4 gp_shoulderl gp_shoulderr gp_shoulderlb gp_shoulderrb gp_select gp_start gp_stickl gp_stickr gp_padu gp_padd gp_padl gp_padr gp_axislh gp_axislv gp_axisrh gp_axisrv ov_friends ov_community ov_players ov_settings ov_gamegroup ov_achievements lb_sort_none lb_sort_ascending lb_sort_descending lb_disp_none lb_disp_numeric lb_disp_time_sec lb_disp_time_ms ugc_result_success ugc_filetype_community ugc_filetype_microtrans ugc_visibility_public ugc_visibility_friends_only ugc_visibility_private ugc_query_RankedByVote ugc_query_RankedByPublicationDate ugc_query_AcceptedForGameRankedByAcceptanceDate ugc_query_RankedByTrend ugc_query_FavoritedByFriendsRankedByPublicationDate ugc_query_CreatedByFriendsRankedByPublicationDate ugc_query_RankedByNumTimesReported ugc_query_CreatedByFollowedUsersRankedByPublicationDate ugc_query_NotYetRated ugc_query_RankedByTotalVotesAsc ugc_query_RankedByVotesUp ugc_query_RankedByTextSearch ugc_sortorder_CreationOrderDesc ugc_sortorder_CreationOrderAsc ugc_sortorder_TitleAsc ugc_sortorder_LastUpdatedDesc ugc_sortorder_SubscriptionDateDesc ugc_sortorder_VoteScoreDesc ugc_sortorder_ForModeration ugc_list_Published ugc_list_VotedOn ugc_list_VotedUp ugc_list_VotedDown ugc_list_WillVoteLater ugc_list_Favorited ugc_list_Subscribed ugc_list_UsedOrPlayed ugc_list_Followed ugc_match_Items ugc_match_Items_Mtx ugc_match_Items_ReadyToUse ugc_match_Collections ugc_match_Artwork ugc_match_Videos ugc_match_Screenshots ugc_match_AllGuides ugc_match_WebGuides ugc_match_IntegratedGuides ugc_match_UsableInGame ugc_match_ControllerBindings vertex_usage_position vertex_usage_colour vertex_usage_color vertex_usage_normal vertex_usage_texcoord vertex_usage_textcoord vertex_usage_blendweight vertex_usage_blendindices vertex_usage_psize vertex_usage_tangent vertex_usage_binormal vertex_usage_fog vertex_usage_depth vertex_usage_sample vertex_type_float1 vertex_type_float2 vertex_type_float3 vertex_type_float4 vertex_type_colour vertex_type_color vertex_type_ubyte4 layerelementtype_undefined layerelementtype_background layerelementtype_instance layerelementtype_oldtilemap layerelementtype_sprite layerelementtype_tilemap layerelementtype_particlesystem layerelementtype_tile tile_rotate tile_flip tile_mirror tile_index_mask kbv_type_default kbv_type_ascii kbv_type_url kbv_type_email kbv_type_numbers kbv_type_phone kbv_type_phone_name kbv_returnkey_default kbv_returnkey_go kbv_returnkey_google kbv_returnkey_join kbv_returnkey_next kbv_returnkey_route kbv_returnkey_search kbv_returnkey_send kbv_returnkey_yahoo kbv_returnkey_done kbv_returnkey_continue kbv_returnkey_emergency kbv_autocapitalize_none kbv_autocapitalize_words kbv_autocapitalize_sentences kbv_autocapitalize_characters",symbol:"argument_relative argument argument0 argument1 argument2 argument3 argument4 argument5 argument6 argument7 argument8 argument9 argument10 argument11 argument12 argument13 argument14 argument15 argument_count x y xprevious yprevious xstart ystart hspeed vspeed direction speed friction gravity gravity_direction path_index path_position path_positionprevious path_speed path_scale path_orientation path_endaction object_index id solid persistent mask_index instance_count instance_id room_speed fps fps_real current_time current_year current_month current_day current_weekday current_hour current_minute current_second alarm timeline_index timeline_position timeline_speed timeline_running timeline_loop room room_first room_last room_width room_height room_caption room_persistent score lives health show_score show_lives show_health caption_score caption_lives caption_health event_type event_number event_object event_action application_surface gamemaker_pro gamemaker_registered gamemaker_version error_occurred error_last debug_mode keyboard_key keyboard_lastkey keyboard_lastchar keyboard_string mouse_x mouse_y mouse_button mouse_lastbutton cursor_sprite visible sprite_index sprite_width sprite_height sprite_xoffset sprite_yoffset image_number image_index image_speed depth image_xscale image_yscale image_angle image_alpha image_blend bbox_left bbox_right bbox_top bbox_bottom layer background_colour background_showcolour background_color background_showcolor view_enabled view_current view_visible view_xview view_yview view_wview view_hview view_xport view_yport view_wport view_hport view_angle view_hborder view_vborder view_hspeed view_vspeed view_object view_surface_id view_camera game_id game_display_name game_project_name game_save_id working_directory temp_directory program_directory browser_width browser_height os_type os_device os_browser os_version display_aa async_load delta_time webgl_enabled event_data iap_data phy_rotation phy_position_x phy_position_y phy_angular_velocity phy_linear_velocity_x phy_linear_velocity_y phy_speed_x phy_speed_y phy_speed phy_angular_damping phy_linear_damping phy_bullet phy_fixed_rotation phy_active phy_mass phy_inertia phy_com_x phy_com_y phy_dynamic phy_kinematic phy_sleeping phy_collision_points phy_collision_x phy_collision_y phy_col_normal_x phy_col_normal_y phy_position_xprevious phy_position_yprevious"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:t,illegal:"",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:":\\w+"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:"\\w+",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{begin:"^\\s*[=~]\\s*"},{begin:"#{",starts:{end:"}",subLanguage:"ruby"}}]}}},function(e,t){e.exports=function(e){var t={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield lookup"},n={begin:/".*?"|'.*?'|\[.*?\]|\w+/},r=e.inherit(n,{keywords:t,starts:{endsWithParent:!0,relevance:0,contains:[e.inherit(n,{relevance:0})]}}),i=e.inherit(r,{className:"name"}),a=e.inherit(r,{relevance:0});return{aliases:["hbs","html.hbs","html.handlebars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},e.COMMENT(/\{\{!--/,/--\}\}/),e.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[i],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[i]},{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[i]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,keywords:t,contains:[a]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,keywords:t,contains:[a]}]}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"meta",begin:"{-#",end:"#-}"},r={className:"meta",begin:"^#",end:"$"},i={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},a={begin:"\\(",end:"\\)",illegal:'"',contains:[n,r,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),t]};return{aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[a,t],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[a,t],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[i,a,t]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[n,i,a,{begin:"{",end:"}",contains:a.contains},t]},{beginKeywords:"default",end:"$",contains:[i,a,t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[i,e.QUOTE_STRING_MODE,t]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},n,r,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,i,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}]}}},function(e,t){e.exports=function(e){return{aliases:["hx"],keywords:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while Int Float String Bool Dynamic Void Array ",built_in:"trace this",literal:"true false null _"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"},{className:"subst",begin:"\\$",end:"\\W}"}]},e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"@:",end:"$"},{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end error"}},{className:"type",begin:":[ \t]*",end:"[^A-Za-z0-9_ \t\\->]",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:":[ \t]*",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"new *",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"class",beginKeywords:"enum",end:"\\{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"abstract",end:"[\\{$]",contains:[{className:"type",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"from +",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"to +",end:"\\W",excludeBegin:!0,excludeEnd:!0},e.TITLE_MODE],keywords:{keyword:"abstract from to"}},{className:"class",begin:"\\b(class|interface) +",end:"[\\{$]",excludeEnd:!0,keywords:"class interface",contains:[{className:"keyword",begin:"\\b(extends|implements) +",keywords:"extends implements",contains:[{className:"type",begin:e.IDENT_RE,relevance:0}]},e.TITLE_MODE]},{className:"function",beginKeywords:"function",end:"\\(",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE]}],illegal:/<\//}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:/[\w\._]+/,keywords:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",begin:'{"',end:'"}',contains:[e.BACKSLASH_ESCAPE]},e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),e.NUMBER_MODE,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"symbol",begin:"^\\*(\\w+|@)"},e.NUMBER_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view",n=(e.QUOTE_STRING_MODE,{endsWithParent:!0,relevance:0,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE,{illegal:/\}\}/,begin:/[a-zA-Z0-9_]+=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[a-zA-Z0-9_]+/}]},e.NUMBER_MODE]});return{case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT("{{!(--)?","(--)?}}"),{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[{className:"name",begin:/[a-zA-Z\.\-]+/,keywords:{"builtin-name":t},starts:n}]},{className:"template-variable",begin:/\{\{[a-zA-Z][a-zA-Z\-]+/,end:/\}\}/,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE]}]}}},function(e,t){e.exports=function(e){return{aliases:["https"],illegal:"\\S",contains:[{begin:"^HTTP/[0-9\\.]+",end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:"HTTP/[0-9\\.]+"},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},r={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b([Tt]rue|[Ff]alse|nil|None)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+t},u={begin:"\\(",end:"\\)"},_={endsWithParent:!0,relevance:0},p={keywords:{"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},lexemes:t,className:"name",begin:t,starts:_},m=[u,i,l,c,a,d,s,r,o,n];return u.contains=[e.COMMENT("comment",""),p,_],_.contains=m,s.contains=m,{aliases:["hylang"],illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},u,i,l,c,a,d,s,r,o]}}},function(e,t){e.exports=function(e){return{aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:"\\[",end:"\\]"}]},{className:"section",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\(This",end:"\\)"}]},{className:"comment",begin:"\\[",end:"\\]",contains:["self"]}]}}},function(e,t){e.exports=function(e){var t={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},n=e.COMMENT();n.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var r={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},i={className:"literal",begin:/\bon|off|true|false|yes|no\b/},a={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]};return{aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[n,{className:"section",begin:/\[+/,end:/\]+/},{begin:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,className:"attr",starts:{end:/$/,contains:[n,{begin:/\[/,end:/\]/,contains:[n,i,r,a,t,"self"],relevance:0},i,r,a,t]}}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),e.COMMENT("begin_doc","end_doc",{relevance:10}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}},function(e,t){e.exports=function(e){var t="[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*",n={className:"number",begin:e.NUMBER_RE,relevance:0},r={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]},i={className:"doctag",begin:"\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\b",relevance:0},a={variants:[{className:"comment",begin:"//",end:"$",relevance:0,contains:[e.PHRASAL_WORDS_MODE,i]},{className:"comment",begin:"/\\*",end:"\\*/",relevance:0,contains:[e.PHRASAL_WORDS_MODE,i]}]},o={keyword:"and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока except exitfor finally foreach все if если in в not не or или try while пока ",built_in:"SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT SYSRES_CONST_ACCES_RIGHT_TYPE_FULL SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE SYSRES_CONST_ACCESS_NO_ACCESS_VIEW SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_TYPE_CHANGE SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE SYSRES_CONST_ACCESS_TYPE_EXISTS SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE SYSRES_CONST_ACCESS_TYPE_FULL SYSRES_CONST_ACCESS_TYPE_FULL_CODE SYSRES_CONST_ACCESS_TYPE_VIEW SYSRES_CONST_ACCESS_TYPE_VIEW_CODE SYSRES_CONST_ACTION_TYPE_ABORT SYSRES_CONST_ACTION_TYPE_ACCEPT SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT SYSRES_CONST_ACTION_TYPE_CHANGE_CARD SYSRES_CONST_ACTION_TYPE_CHANGE_KIND SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE SYSRES_CONST_ACTION_TYPE_CONTINUE SYSRES_CONST_ACTION_TYPE_COPY SYSRES_CONST_ACTION_TYPE_CREATE SYSRES_CONST_ACTION_TYPE_CREATE_VERSION SYSRES_CONST_ACTION_TYPE_DELETE SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT SYSRES_CONST_ACTION_TYPE_DELETE_VERSION SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE SYSRES_CONST_ACTION_TYPE_LOCK SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY SYSRES_CONST_ACTION_TYPE_MARK_AS_READED SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED SYSRES_CONST_ACTION_TYPE_MODIFY SYSRES_CONST_ACTION_TYPE_MODIFY_CARD SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE SYSRES_CONST_ACTION_TYPE_PERFORM SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY SYSRES_CONST_ACTION_TYPE_RESTART SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE SYSRES_CONST_ACTION_TYPE_REVISION SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL SYSRES_CONST_ACTION_TYPE_SIGN SYSRES_CONST_ACTION_TYPE_START SYSRES_CONST_ACTION_TYPE_UNLOCK SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER SYSRES_CONST_ACTION_TYPE_VERSION_STATE SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY SYSRES_CONST_ACTION_TYPE_VIEW SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE SYSRES_CONST_ADD_REFERENCE_MODE_NAME SYSRES_CONST_ADDITION_REQUISITE_CODE SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS SYSRES_CONST_ALL_USERS_GROUP SYSRES_CONST_ALL_USERS_GROUP_NAME SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE SYSRES_CONST_APPROVING_SIGNATURE_NAME SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN SYSRES_CONST_ATTACH_TYPE_DOC SYSRES_CONST_ATTACH_TYPE_EDOC SYSRES_CONST_ATTACH_TYPE_FOLDER SYSRES_CONST_ATTACH_TYPE_JOB SYSRES_CONST_ATTACH_TYPE_REFERENCE SYSRES_CONST_ATTACH_TYPE_TASK SYSRES_CONST_AUTH_ENCODED_PASSWORD SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE SYSRES_CONST_AUTH_NOVELL SYSRES_CONST_AUTH_PASSWORD SYSRES_CONST_AUTH_PASSWORD_CODE SYSRES_CONST_AUTH_WINDOWS SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_AUTO_ENUM_METHOD_FLAG SYSRES_CONST_AUTO_NUMERATION_CODE SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_USAGE_ALL SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE SYSRES_CONST_AUTOTEXT_USAGE_SIGN SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE SYSRES_CONST_AUTOTEXT_USAGE_WORK SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BTN_PART SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT SYSRES_CONST_CARD_PART SYSRES_CONST_CARD_REFERENCE_MODE_NAME SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT SYSRES_CONST_CODE_COMPONENT_TYPE_URL SYSRES_CONST_CODE_REQUISITE_ACCESS SYSRES_CONST_CODE_REQUISITE_CODE SYSRES_CONST_CODE_REQUISITE_COMPONENT SYSRES_CONST_CODE_REQUISITE_DESCRIPTION SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT SYSRES_CONST_CODE_REQUISITE_RECORD SYSRES_CONST_COMMENT_REQ_CODE SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE SYSRES_CONST_COMP_CODE_GRD SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DOCS SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_COMPONENT_TYPE_EDOCS SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_COMPONENT_TYPE_OTHER SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES SYSRES_CONST_COMPONENT_TYPE_REFERENCES SYSRES_CONST_COMPONENT_TYPE_REPORTS SYSRES_CONST_COMPONENT_TYPE_SCRIPTS SYSRES_CONST_COMPONENT_TYPE_URL SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION SYSRES_CONST_CONST_FIRM_STATUS_COMMON SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL SYSRES_CONST_CONST_NEGATIVE_VALUE SYSRES_CONST_CONST_POSITIVE_VALUE SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE SYSRES_CONST_CONTENTS_REQUISITE_CODE SYSRES_CONST_DATA_TYPE_BOOLEAN SYSRES_CONST_DATA_TYPE_DATE SYSRES_CONST_DATA_TYPE_FLOAT SYSRES_CONST_DATA_TYPE_INTEGER SYSRES_CONST_DATA_TYPE_PICK SYSRES_CONST_DATA_TYPE_REFERENCE SYSRES_CONST_DATA_TYPE_STRING SYSRES_CONST_DATA_TYPE_TEXT SYSRES_CONST_DATA_TYPE_VARIANT SYSRES_CONST_DATE_CLOSE_REQ_CODE SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR SYSRES_CONST_DATE_OPEN_REQ_CODE SYSRES_CONST_DATE_REQUISITE SYSRES_CONST_DATE_REQUISITE_CODE SYSRES_CONST_DATE_REQUISITE_NAME SYSRES_CONST_DATE_REQUISITE_TYPE SYSRES_CONST_DATE_TYPE_CHAR SYSRES_CONST_DATETIME_FORMAT_VALUE SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_DET1_PART SYSRES_CONST_DET2_PART SYSRES_CONST_DET3_PART SYSRES_CONST_DET4_PART SYSRES_CONST_DET5_PART SYSRES_CONST_DET6_PART SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE SYSRES_CONST_DETAIL_REQ_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME SYSRES_CONST_DOCUMENT_STORAGES_CODE SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME SYSRES_CONST_DOUBLE_REQUISITE_CODE SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE SYSRES_CONST_EDITORS_REFERENCE_CODE SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE SYSRES_CONST_EDOC_DATE_REQUISITE_CODE SYSRES_CONST_EDOC_KIND_REFERENCE_CODE SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE SYSRES_CONST_EDOC_NONE_ENCODE_CODE SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_READONLY_ACCESS_CODE SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE SYSRES_CONST_EDOC_WRITE_ACCES_CODE SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_END_DATE_REQUISITE_CODE SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE SYSRES_CONST_EXIST_CONST SYSRES_CONST_EXIST_VALUE SYSRES_CONST_EXPORT_LOCK_TYPE_ASK SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK SYSRES_CONST_EXPORT_VERSION_TYPE_ASK SYSRES_CONST_EXPORT_VERSION_TYPE_LAST SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE SYSRES_CONST_EXTENSION_REQUISITE_CODE SYSRES_CONST_FILTER_NAME_REQUISITE_CODE SYSRES_CONST_FILTER_REQUISITE_CODE SYSRES_CONST_FILTER_TYPE_COMMON_CODE SYSRES_CONST_FILTER_TYPE_COMMON_NAME SYSRES_CONST_FILTER_TYPE_USER_CODE SYSRES_CONST_FILTER_TYPE_USER_NAME SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR SYSRES_CONST_FLOAT_REQUISITE_TYPE SYSRES_CONST_FOLDER_AUTHOR_VALUE SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS SYSRES_CONST_FOLDER_KIND_COMPONENTS SYSRES_CONST_FOLDER_KIND_EDOCS SYSRES_CONST_FOLDER_KIND_JOBS SYSRES_CONST_FOLDER_KIND_TASKS SYSRES_CONST_FOLDER_TYPE_COMMON SYSRES_CONST_FOLDER_TYPE_COMPONENT SYSRES_CONST_FOLDER_TYPE_FAVORITES SYSRES_CONST_FOLDER_TYPE_INBOX SYSRES_CONST_FOLDER_TYPE_OUTBOX SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH SYSRES_CONST_FOLDER_TYPE_SEARCH SYSRES_CONST_FOLDER_TYPE_SHORTCUTS SYSRES_CONST_FOLDER_TYPE_USER SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG SYSRES_CONST_FULL_SUBSTITUTE_TYPE SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE SYSRES_CONST_FUNCTION_CANCEL_RESULT SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM SYSRES_CONST_FUNCTION_CATEGORY_USER SYSRES_CONST_FUNCTION_FAILURE_RESULT SYSRES_CONST_FUNCTION_SAVE_RESULT SYSRES_CONST_GENERATED_REQUISITE SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_USER_REQUISITE_CODE SYSRES_CONST_GROUPS_REFERENCE_CODE SYSRES_CONST_GROUPS_REQUISITE_CODE SYSRES_CONST_HIDDEN_MODE_NAME SYSRES_CONST_HIGH_LVL_REQUISITE_CODE SYSRES_CONST_HISTORY_ACTION_CREATE_CODE SYSRES_CONST_HISTORY_ACTION_DELETE_CODE SYSRES_CONST_HISTORY_ACTION_EDIT_CODE SYSRES_CONST_HOUR_CHAR SYSRES_CONST_ID_REQUISITE_CODE SYSRES_CONST_IDSPS_REQUISITE_CODE SYSRES_CONST_IMAGE_MODE_COLOR SYSRES_CONST_IMAGE_MODE_GREYSCALE SYSRES_CONST_IMAGE_MODE_MONOCHROME SYSRES_CONST_IMPORTANCE_HIGH SYSRES_CONST_IMPORTANCE_LOW SYSRES_CONST_IMPORTANCE_NORMAL SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE SYSRES_CONST_INT_REQUISITE SYSRES_CONST_INT_REQUISITE_TYPE SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR SYSRES_CONST_INTEGER_TYPE_CHAR SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_JOB_BLOCK_DESCRIPTION SYSRES_CONST_JOB_KIND_CONTROL_JOB SYSRES_CONST_JOB_KIND_JOB SYSRES_CONST_JOB_KIND_NOTICE SYSRES_CONST_JOB_STATE_ABORTED SYSRES_CONST_JOB_STATE_COMPLETE SYSRES_CONST_JOB_STATE_WORKING SYSRES_CONST_KIND_REQUISITE_CODE SYSRES_CONST_KIND_REQUISITE_NAME SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE SYSRES_CONST_KOD_INPUT_TYPE SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT SYSRES_CONST_LINK_OBJECT_KIND_EDOC SYSRES_CONST_LINK_OBJECT_KIND_FOLDER SYSRES_CONST_LINK_OBJECT_KIND_JOB SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE SYSRES_CONST_LINK_OBJECT_KIND_TASK SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE SYSRES_CONST_LIST_REFERENCE_MODE_NAME SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE SYSRES_CONST_MAIN_VIEW_CODE SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE SYSRES_CONST_MAXIMIZED_MODE_NAME SYSRES_CONST_ME_VALUE SYSRES_CONST_MESSAGE_ATTENTION_CAPTION SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION SYSRES_CONST_MESSAGE_ERROR_CAPTION SYSRES_CONST_MESSAGE_INFORMATION_CAPTION SYSRES_CONST_MINIMIZED_MODE_NAME SYSRES_CONST_MINUTE_CHAR SYSRES_CONST_MODULE_REQUISITE_CODE SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION SYSRES_CONST_MONTH_FORMAT_VALUE SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_NAME_REQUISITE_CODE SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE SYSRES_CONST_NAMEAN_INPUT_TYPE SYSRES_CONST_NEGATIVE_PICK_VALUE SYSRES_CONST_NEGATIVE_VALUE SYSRES_CONST_NO SYSRES_CONST_NO_PICK_VALUE SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE SYSRES_CONST_NO_VALUE SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_NORMAL_MODE_NAME SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_NOTE_REQUISITE_CODE SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION SYSRES_CONST_NUM_REQUISITE SYSRES_CONST_NUM_STR_REQUISITE_CODE SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG SYSRES_CONST_NUMERATION_AUTO_STRONG SYSRES_CONST_NUMERATION_FROM_DICTONARY SYSRES_CONST_NUMERATION_MANUAL SYSRES_CONST_NUMERIC_TYPE_CHAR SYSRES_CONST_NUMREQ_REQUISITE_CODE SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_ORIGINALREF_REQUISITE_CODE SYSRES_CONST_OURFIRM_REF_CODE SYSRES_CONST_OURFIRM_REQUISITE_CODE SYSRES_CONST_OURFIRM_VAR SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE SYSRES_CONST_PICK_NEGATIVE_RESULT SYSRES_CONST_PICK_POSITIVE_RESULT SYSRES_CONST_PICK_REQUISITE SYSRES_CONST_PICK_REQUISITE_TYPE SYSRES_CONST_PICK_TYPE_CHAR SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE SYSRES_CONST_PLATFORM_VERSION_COMMENT SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_POSITIVE_PICK_VALUE SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE SYSRES_CONST_PRIORITY_REQUISITE_CODE SYSRES_CONST_QUALIFIED_TASK_TYPE SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE SYSRES_CONST_RECSTAT_REQUISITE_CODE SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_REF_REQUISITE SYSRES_CONST_REF_REQUISITE_TYPE SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE SYSRES_CONST_REFERENCE_TYPE_CHAR SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_MODE_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_EDIT_CODE SYSRES_CONST_REQ_MODE_HIDDEN_CODE SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_VIEW_CODE SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE SYSRES_CONST_REQ_SECTION_VALUE SYSRES_CONST_REQ_TYPE_VALUE SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME SYSRES_CONST_REQUISITE_FORMAT_LEFT SYSRES_CONST_REQUISITE_FORMAT_RIGHT SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_REQUISITE_SECTION_ACTIONS SYSRES_CONST_REQUISITE_SECTION_BUTTON SYSRES_CONST_REQUISITE_SECTION_BUTTONS SYSRES_CONST_REQUISITE_SECTION_CARD SYSRES_CONST_REQUISITE_SECTION_TABLE SYSRES_CONST_REQUISITE_SECTION_TABLE10 SYSRES_CONST_REQUISITE_SECTION_TABLE11 SYSRES_CONST_REQUISITE_SECTION_TABLE12 SYSRES_CONST_REQUISITE_SECTION_TABLE13 SYSRES_CONST_REQUISITE_SECTION_TABLE14 SYSRES_CONST_REQUISITE_SECTION_TABLE15 SYSRES_CONST_REQUISITE_SECTION_TABLE16 SYSRES_CONST_REQUISITE_SECTION_TABLE17 SYSRES_CONST_REQUISITE_SECTION_TABLE18 SYSRES_CONST_REQUISITE_SECTION_TABLE19 SYSRES_CONST_REQUISITE_SECTION_TABLE2 SYSRES_CONST_REQUISITE_SECTION_TABLE20 SYSRES_CONST_REQUISITE_SECTION_TABLE21 SYSRES_CONST_REQUISITE_SECTION_TABLE22 SYSRES_CONST_REQUISITE_SECTION_TABLE23 SYSRES_CONST_REQUISITE_SECTION_TABLE24 SYSRES_CONST_REQUISITE_SECTION_TABLE3 SYSRES_CONST_REQUISITE_SECTION_TABLE4 SYSRES_CONST_REQUISITE_SECTION_TABLE5 SYSRES_CONST_REQUISITE_SECTION_TABLE6 SYSRES_CONST_REQUISITE_SECTION_TABLE7 SYSRES_CONST_REQUISITE_SECTION_TABLE8 SYSRES_CONST_REQUISITE_SECTION_TABLE9 SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_RIGHT_ALIGNMENT_CODE SYSRES_CONST_ROLES_REFERENCE_CODE SYSRES_CONST_ROUTE_STEP_AFTER_RUS SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS SYSRES_CONST_ROUTE_TYPE_COMPLEX SYSRES_CONST_ROUTE_TYPE_PARALLEL SYSRES_CONST_ROUTE_TYPE_SERIAL SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE SYSRES_CONST_SEARCHES_COMPONENT_CONTENT SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME SYSRES_CONST_SEARCHES_EDOC_CONTENT SYSRES_CONST_SEARCHES_FOLDER_CONTENT SYSRES_CONST_SEARCHES_JOB_CONTENT SYSRES_CONST_SEARCHES_REFERENCE_CODE SYSRES_CONST_SEARCHES_TASK_CONTENT SYSRES_CONST_SECOND_CHAR SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE SYSRES_CONST_SECTION_REQUISITE_CODE SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE SYSRES_CONST_SELECT_REFERENCE_MODE_NAME SYSRES_CONST_SELECT_TYPE_SELECTABLE SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD SYSRES_CONST_SELECT_TYPE_UNSLECTABLE SYSRES_CONST_SERVER_TYPE_MAIN SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE SYSRES_CONST_STATE_REQ_NAME SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE SYSRES_CONST_STATE_REQUISITE_CODE SYSRES_CONST_STATIC_ROLE_TYPE_CODE SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE SYSRES_CONST_STATUS_VALUE_AUTOCLEANING SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE SYSRES_CONST_STATUS_VALUE_COMPLETE SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE SYSRES_CONST_STATUS_VALUE_RED_SQUARE SYSRES_CONST_STATUS_VALUE_SUSPEND SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE SYSRES_CONST_STORAGE_TYPE_FILE SYSRES_CONST_STORAGE_TYPE_SQL_SERVER SYSRES_CONST_STR_REQUISITE SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR SYSRES_CONST_STRING_REQUISITE_CODE SYSRES_CONST_STRING_REQUISITE_TYPE SYSRES_CONST_STRING_TYPE_CHAR SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE SYSRES_CONST_SYSTEM_VERSION_COMMENT SYSRES_CONST_TASK_ACCESS_TYPE_ALL SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD SYSRES_CONST_TASK_ENCODE_TYPE_NONE SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD SYSRES_CONST_TASK_ROUTE_ALL_CONDITION SYSRES_CONST_TASK_ROUTE_AND_CONDITION SYSRES_CONST_TASK_ROUTE_OR_CONDITION SYSRES_CONST_TASK_STATE_ABORTED SYSRES_CONST_TASK_STATE_COMPLETE SYSRES_CONST_TASK_STATE_CONTINUED SYSRES_CONST_TASK_STATE_CONTROL SYSRES_CONST_TASK_STATE_INIT SYSRES_CONST_TASK_STATE_WORKING SYSRES_CONST_TASK_TITLE SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE SYSRES_CONST_TASK_TYPES_REFERENCE_CODE SYSRES_CONST_TEMPLATES_REFERENCE_CODE SYSRES_CONST_TEST_DATE_REQUISITE_NAME SYSRES_CONST_TEST_DEV_DATABASE_NAME SYSRES_CONST_TEST_DEV_SYSTEM_CODE SYSRES_CONST_TEST_EDMS_DATABASE_NAME SYSRES_CONST_TEST_EDMS_MAIN_CODE SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME SYSRES_CONST_TEST_EDMS_SECOND_CODE SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME SYSRES_CONST_TEST_EDMS_SYSTEM_CODE SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME SYSRES_CONST_TEXT_REQUISITE SYSRES_CONST_TEXT_REQUISITE_CODE SYSRES_CONST_TEXT_REQUISITE_TYPE SYSRES_CONST_TEXT_TYPE_CHAR SYSRES_CONST_TYPE_CODE_REQUISITE_CODE SYSRES_CONST_TYPE_REQUISITE_CODE SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME SYSRES_CONST_USE_ACCESS_TYPE_CODE SYSRES_CONST_USE_ACCESS_TYPE_NAME SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE SYSRES_CONST_USER_CATEGORY_NORMAL SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE SYSRES_CONST_USER_COMMON_CATEGORY SYSRES_CONST_USER_COMMON_CATEGORY_CODE SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_USER_LOGIN_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_USER_SERVICE_CATEGORY SYSRES_CONST_USER_SERVICE_CATEGORY_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME SYSRES_CONST_USER_STATUS_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_DEVELOPER_NAME SYSRES_CONST_USER_STATUS_DISABLED_CODE SYSRES_CONST_USER_STATUS_DISABLED_NAME SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_USER_CODE SYSRES_CONST_USER_STATUS_USER_NAME SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER SYSRES_CONST_USER_TYPE_REQUISITE_CODE SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE SYSRES_CONST_USERS_REFERENCE_CODE SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME SYSRES_CONST_USERS_REQUISITE_CODE SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME SYSRES_CONST_VIEW_DEFAULT_CODE SYSRES_CONST_VIEW_DEFAULT_NAME SYSRES_CONST_VIEWER_REQUISITE_CODE SYSRES_CONST_WAITING_BLOCK_DESCRIPTION SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT SYSRES_CONST_XML_ENCODING SYSRES_CONST_XREC_STAT_REQUISITE_CODE SYSRES_CONST_XRECID_FIELD_NAME SYSRES_CONST_YES SYSRES_CONST_YES_NO_2_REQUISITE_CODE SYSRES_CONST_YES_NO_REQUISITE_CODE SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_YES_PICK_VALUE SYSRES_CONST_YES_VALUE CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION JOB_BLOCK_ABORT_DEADLINE_PROPERTY JOB_BLOCK_AFTER_FINISH_EVENT JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT JOB_BLOCK_ATTACHMENT_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT JOB_BLOCK_BEFORE_START_EVENT JOB_BLOCK_CREATED_JOBS_PROPERTY JOB_BLOCK_DEADLINE_PROPERTY JOB_BLOCK_EXECUTION_RESULTS_PROPERTY JOB_BLOCK_IS_PARALLEL_PROPERTY JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY JOB_BLOCK_JOB_TEXT_PROPERTY JOB_BLOCK_NAME_PROPERTY JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY JOB_BLOCK_PERFORMER_PROPERTY JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY JOB_BLOCK_SUBJECT_PROPERTY ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE smHidden smMaximized smMinimized smNormal wmNo wmYes COMPONENT_TOKEN_LINK_KIND DOCUMENT_LINK_KIND EDOCUMENT_LINK_KIND FOLDER_LINK_KIND JOB_LINK_KIND REFERENCE_LINK_KIND TASK_LINK_KIND COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE MONITOR_BLOCK_AFTER_FINISH_EVENT MONITOR_BLOCK_BEFORE_START_EVENT MONITOR_BLOCK_DEADLINE_PROPERTY MONITOR_BLOCK_INTERVAL_PROPERTY MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY MONITOR_BLOCK_NAME_PROPERTY MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY NOTICE_BLOCK_AFTER_FINISH_EVENT NOTICE_BLOCK_ATTACHMENT_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY NOTICE_BLOCK_BEFORE_START_EVENT NOTICE_BLOCK_CREATED_NOTICES_PROPERTY NOTICE_BLOCK_DEADLINE_PROPERTY NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY NOTICE_BLOCK_NAME_PROPERTY NOTICE_BLOCK_NOTICE_TEXT_PROPERTY NOTICE_BLOCK_PERFORMER_PROPERTY NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY NOTICE_BLOCK_SUBJECT_PROPERTY dseAfterCancel dseAfterClose dseAfterDelete dseAfterDeleteOutOfTransaction dseAfterInsert dseAfterOpen dseAfterScroll dseAfterUpdate dseAfterUpdateOutOfTransaction dseBeforeCancel dseBeforeClose dseBeforeDelete dseBeforeDetailUpdate dseBeforeInsert dseBeforeOpen dseBeforeUpdate dseOnAnyRequisiteChange dseOnCloseRecord dseOnDeleteError dseOnOpenRecord dseOnPrepareUpdate dseOnUpdateError dseOnUpdateRatifiedRecord dseOnValidDelete dseOnValidUpdate reOnChange reOnChangeValues SELECTION_BEGIN_ROUTE_EVENT SELECTION_END_ROUTE_EVENT CURRENT_PERIOD_IS_REQUIRED PREVIOUS_CARD_TYPE_NAME SHOW_RECORD_PROPERTIES_FORM ACCESS_RIGHTS_SETTING_DIALOG_CODE ADMINISTRATOR_USER_CODE ANALYTIC_REPORT_TYPE asrtHideLocal asrtHideRemote CALCULATED_ROLE_TYPE_CODE COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE DCTS_TEST_PROTOCOLS_FOLDER_PATH E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER E_EDOC_VERSION_ALREDY_SIGNED E_EDOC_VERSION_ALREDY_SIGNED_BY_USER EDOC_TYPES_CODE_REQUISITE_FIELD_NAME EDOCUMENTS_ALIAS_NAME FILES_FOLDER_PATH FILTER_OPERANDS_DELIMITER FILTER_OPERATIONS_DELIMITER FORMCARD_NAME FORMLIST_NAME GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE INTEGRATED_REPORT_TYPE IS_BUILDER_APPLICATION_ROLE IS_BUILDER_APPLICATION_ROLE2 IS_BUILDER_USERS ISBSYSDEV LOG_FOLDER_PATH mbCancel mbNo mbNoToAll mbOK mbYes mbYesToAll MEMORY_DATASET_DESRIPTIONS_FILENAME mrNo mrNoToAll mrYes mrYesToAll MULTIPLE_SELECT_DIALOG_CODE NONOPERATING_RECORD_FLAG_FEMININE NONOPERATING_RECORD_FLAG_MASCULINE OPERATING_RECORD_FLAG_FEMININE OPERATING_RECORD_FLAG_MASCULINE PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE PROGRAM_INITIATED_LOOKUP_ACTION ratDelete ratEdit ratInsert REPORT_TYPE REQUIRED_PICK_VALUES_VARIABLE rmCard rmList SBRTE_PROGID_DEV SBRTE_PROGID_RELEASE STATIC_ROLE_TYPE_CODE SUPPRESS_EMPTY_TEMPLATE_CREATION SYSTEM_USER_CODE UPDATE_DIALOG_DATASET USED_IN_OBJECT_HINT_PARAM USER_INITIATED_LOOKUP_ACTION USER_NAME_FORMAT USER_SELECTION_RESTRICTIONS WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH ELS_SUBTYPE_CONTROL_NAME ELS_FOLDER_KIND_CONTROL_NAME REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME PRIVILEGE_COMPONENT_FULL_ACCESS PRIVILEGE_DEVELOPMENT_EXPORT PRIVILEGE_DEVELOPMENT_IMPORT PRIVILEGE_DOCUMENT_DELETE PRIVILEGE_ESD PRIVILEGE_FOLDER_DELETE PRIVILEGE_MANAGE_ACCESS_RIGHTS PRIVILEGE_MANAGE_REPLICATION PRIVILEGE_MANAGE_SESSION_SERVER PRIVILEGE_OBJECT_FULL_ACCESS PRIVILEGE_OBJECT_VIEW PRIVILEGE_RESERVE_LICENSE PRIVILEGE_SYSTEM_CUSTOMIZE PRIVILEGE_SYSTEM_DEVELOP PRIVILEGE_SYSTEM_INSTALL PRIVILEGE_TASK_DELETE PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE PRIVILEGES_PSEUDOREFERENCE_CODE ACCESS_TYPES_PSEUDOREFERENCE_CODE ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE COMPONENTS_PSEUDOREFERENCE_CODE FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE GROUPS_PSEUDOREFERENCE_CODE RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE REFTYPES_PSEUDOREFERENCE_CODE REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE SEND_PROTOCOL_PSEUDOREFERENCE_CODE SUBSTITUTES_PSEUDOREFERENCE_CODE SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE UNITS_PSEUDOREFERENCE_CODE USERS_PSEUDOREFERENCE_CODE VIEWERS_PSEUDOREFERENCE_CODE CERTIFICATE_TYPE_ENCRYPT CERTIFICATE_TYPE_SIGN CERTIFICATE_TYPE_SIGN_AND_ENCRYPT STORAGE_TYPE_FILE STORAGE_TYPE_NAS_CIFS STORAGE_TYPE_SAPERION STORAGE_TYPE_SQL_SERVER COMPTYPE2_REQUISITE_DOCUMENTS_VALUE COMPTYPE2_REQUISITE_TASKS_VALUE COMPTYPE2_REQUISITE_FOLDERS_VALUE COMPTYPE2_REQUISITE_REFERENCES_VALUE SYSREQ_CODE SYSREQ_COMPTYPE2 SYSREQ_CONST_AVAILABLE_FOR_WEB SYSREQ_CONST_COMMON_CODE SYSREQ_CONST_COMMON_VALUE SYSREQ_CONST_FIRM_CODE SYSREQ_CONST_FIRM_STATUS SYSREQ_CONST_FIRM_VALUE SYSREQ_CONST_SERVER_STATUS SYSREQ_CONTENTS SYSREQ_DATE_OPEN SYSREQ_DATE_CLOSE SYSREQ_DESCRIPTION SYSREQ_DESCRIPTION_LOCALIZE_ID SYSREQ_DOUBLE SYSREQ_EDOC_ACCESS_TYPE SYSREQ_EDOC_AUTHOR SYSREQ_EDOC_CREATED SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE SYSREQ_EDOC_EDITOR SYSREQ_EDOC_ENCODE_TYPE SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_EXPORT_DATE SYSREQ_EDOC_EXPORTER SYSREQ_EDOC_KIND SYSREQ_EDOC_LIFE_STAGE_NAME SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE SYSREQ_EDOC_MODIFIED SYSREQ_EDOC_NAME SYSREQ_EDOC_NOTE SYSREQ_EDOC_QUALIFIED_ID SYSREQ_EDOC_SESSION_KEY SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_SIGNATURE_TYPE SYSREQ_EDOC_SIGNED SYSREQ_EDOC_STORAGE SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE SYSREQ_EDOC_STORAGES_CHECK_RIGHTS SYSREQ_EDOC_STORAGES_COMPUTER_NAME SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE SYSREQ_EDOC_STORAGES_FUNCTION SYSREQ_EDOC_STORAGES_INITIALIZED SYSREQ_EDOC_STORAGES_LOCAL_PATH SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT SYSREQ_EDOC_STORAGES_SERVER_NAME SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME SYSREQ_EDOC_STORAGES_TYPE SYSREQ_EDOC_TEXT_MODIFIED SYSREQ_EDOC_TYPE_ACT_CODE SYSREQ_EDOC_TYPE_ACT_DESCRIPTION SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_EDOC_TYPE_ACT_SECTION SYSREQ_EDOC_TYPE_ADD_PARAMS SYSREQ_EDOC_TYPE_COMMENT SYSREQ_EDOC_TYPE_EVENT_TEXT SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID SYSREQ_EDOC_TYPE_NUMERATION_METHOD SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE SYSREQ_EDOC_TYPE_REQ_CODE SYSREQ_EDOC_TYPE_REQ_DESCRIPTION SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_REQ_IS_LEADING SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED SYSREQ_EDOC_TYPE_REQ_NUMBER SYSREQ_EDOC_TYPE_REQ_ON_CHANGE SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_EDOC_TYPE_REQ_ON_SELECT SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND SYSREQ_EDOC_TYPE_REQ_SECTION SYSREQ_EDOC_TYPE_VIEW_CARD SYSREQ_EDOC_TYPE_VIEW_CODE SYSREQ_EDOC_TYPE_VIEW_COMMENT SYSREQ_EDOC_TYPE_VIEW_IS_MAIN SYSREQ_EDOC_TYPE_VIEW_NAME SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_EDOC_VERSION_AUTHOR SYSREQ_EDOC_VERSION_CRC SYSREQ_EDOC_VERSION_DATA SYSREQ_EDOC_VERSION_EDITOR SYSREQ_EDOC_VERSION_EXPORT_DATE SYSREQ_EDOC_VERSION_EXPORTER SYSREQ_EDOC_VERSION_HIDDEN SYSREQ_EDOC_VERSION_LIFE_STAGE SYSREQ_EDOC_VERSION_MODIFIED SYSREQ_EDOC_VERSION_NOTE SYSREQ_EDOC_VERSION_SIGNATURE_TYPE SYSREQ_EDOC_VERSION_SIGNED SYSREQ_EDOC_VERSION_SIZE SYSREQ_EDOC_VERSION_SOURCE SYSREQ_EDOC_VERSION_TEXT_MODIFIED SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE SYSREQ_FOLDER_KIND SYSREQ_FUNC_CATEGORY SYSREQ_FUNC_COMMENT SYSREQ_FUNC_GROUP SYSREQ_FUNC_GROUP_COMMENT SYSREQ_FUNC_GROUP_NUMBER SYSREQ_FUNC_HELP SYSREQ_FUNC_PARAM_DEF_VALUE SYSREQ_FUNC_PARAM_IDENT SYSREQ_FUNC_PARAM_NUMBER SYSREQ_FUNC_PARAM_TYPE SYSREQ_FUNC_TEXT SYSREQ_GROUP_CATEGORY SYSREQ_ID SYSREQ_LAST_UPDATE SYSREQ_LEADER_REFERENCE SYSREQ_LINE_NUMBER SYSREQ_MAIN_RECORD_ID SYSREQ_NAME SYSREQ_NAME_LOCALIZE_ID SYSREQ_NOTE SYSREQ_ORIGINAL_RECORD SYSREQ_OUR_FIRM SYSREQ_PROFILING_SETTINGS_BATCH_LOGING SYSREQ_PROFILING_SETTINGS_BATCH_SIZE SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_START_LOGGED SYSREQ_RECORD_STATUS SYSREQ_REF_REQ_FIELD_NAME SYSREQ_REF_REQ_FORMAT SYSREQ_REF_REQ_GENERATED SYSREQ_REF_REQ_LENGTH SYSREQ_REF_REQ_PRECISION SYSREQ_REF_REQ_REFERENCE SYSREQ_REF_REQ_SECTION SYSREQ_REF_REQ_STORED SYSREQ_REF_REQ_TOKENS SYSREQ_REF_REQ_TYPE SYSREQ_REF_REQ_VIEW SYSREQ_REF_TYPE_ACT_CODE SYSREQ_REF_TYPE_ACT_DESCRIPTION SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_ACT_ON_EXECUTE SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_REF_TYPE_ACT_SECTION SYSREQ_REF_TYPE_ADD_PARAMS SYSREQ_REF_TYPE_COMMENT SYSREQ_REF_TYPE_COMMON_SETTINGS SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME SYSREQ_REF_TYPE_EVENT_TEXT SYSREQ_REF_TYPE_MAIN_LEADING_REF SYSREQ_REF_TYPE_NAME_IN_SINGULAR SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_REF_TYPE_NAME_LOCALIZE_ID SYSREQ_REF_TYPE_NUMERATION_METHOD SYSREQ_REF_TYPE_REQ_CODE SYSREQ_REF_TYPE_REQ_DESCRIPTION SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_REQ_IS_CONTROL SYSREQ_REF_TYPE_REQ_IS_FILTER SYSREQ_REF_TYPE_REQ_IS_LEADING SYSREQ_REF_TYPE_REQ_IS_REQUIRED SYSREQ_REF_TYPE_REQ_NUMBER SYSREQ_REF_TYPE_REQ_ON_CHANGE SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_REF_TYPE_REQ_ON_SELECT SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND SYSREQ_REF_TYPE_REQ_SECTION SYSREQ_REF_TYPE_VIEW_CARD SYSREQ_REF_TYPE_VIEW_CODE SYSREQ_REF_TYPE_VIEW_COMMENT SYSREQ_REF_TYPE_VIEW_IS_MAIN SYSREQ_REF_TYPE_VIEW_NAME SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_REFERENCE_TYPE_ID SYSREQ_STATE SYSREQ_STATЕ SYSREQ_SYSTEM_SETTINGS_VALUE SYSREQ_TYPE SYSREQ_UNIT SYSREQ_UNIT_ID SYSREQ_USER_GROUPS_GROUP_FULL_NAME SYSREQ_USER_GROUPS_GROUP_NAME SYSREQ_USER_GROUPS_GROUP_SERVER_NAME SYSREQ_USERS_ACCESS_RIGHTS SYSREQ_USERS_AUTHENTICATION SYSREQ_USERS_CATEGORY SYSREQ_USERS_COMPONENT SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC SYSREQ_USERS_DOMAIN SYSREQ_USERS_FULL_USER_NAME SYSREQ_USERS_GROUP SYSREQ_USERS_IS_MAIN_SERVER SYSREQ_USERS_LOGIN SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC SYSREQ_USERS_STATUS SYSREQ_USERS_USER_CERTIFICATE SYSREQ_USERS_USER_CERTIFICATE_INFO SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION SYSREQ_USERS_USER_CERTIFICATE_STATE SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT SYSREQ_USERS_USER_DEFAULT_CERTIFICATE SYSREQ_USERS_USER_DESCRIPTION SYSREQ_USERS_USER_GLOBAL_NAME SYSREQ_USERS_USER_LOGIN SYSREQ_USERS_USER_MAIN_SERVER SYSREQ_USERS_USER_TYPE SYSREQ_WORK_RULES_FOLDER_ID RESULT_VAR_NAME RESULT_VAR_NAME_ENG AUTO_NUMERATION_RULE_ID CANT_CHANGE_ID_REQUISITE_RULE_ID CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID CHECK_CODE_REQUISITE_RULE_ID CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID CHECK_FILTRATER_CHANGES_RULE_ID CHECK_RECORD_INTERVAL_RULE_ID CHECK_REFERENCE_INTERVAL_RULE_ID CHECK_REQUIRED_DATA_FULLNESS_RULE_ID CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID MAKE_RECORD_UNRATIFIED_RULE_ID RESTORE_AUTO_NUMERATION_RULE_ID SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID SET_IDSPS_VALUE_RULE_ID SET_NEXT_CODE_VALUE_RULE_ID SET_OURFIRM_BOUNDS_RULE_ID SET_OURFIRM_REQUISITE_RULE_ID SCRIPT_BLOCK_AFTER_FINISH_EVENT SCRIPT_BLOCK_BEFORE_START_EVENT SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY SCRIPT_BLOCK_NAME_PROPERTY SCRIPT_BLOCK_SCRIPT_PROPERTY SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_AFTER_FINISH_EVENT SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT SUBTASK_BLOCK_ATTACHMENTS_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY SUBTASK_BLOCK_BEFORE_START_EVENT SUBTASK_BLOCK_CREATED_TASK_PROPERTY SUBTASK_BLOCK_CREATION_EVENT SUBTASK_BLOCK_DEADLINE_PROPERTY SUBTASK_BLOCK_IMPORTANCE_PROPERTY SUBTASK_BLOCK_INITIATOR_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY SUBTASK_BLOCK_JOBS_TYPE_PROPERTY SUBTASK_BLOCK_NAME_PROPERTY SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY SUBTASK_BLOCK_PERFORMERS_PROPERTY SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_START_EVENT SUBTASK_BLOCK_STEP_CONTROL_PROPERTY SUBTASK_BLOCK_SUBJECT_PROPERTY SUBTASK_BLOCK_TASK_CONTROL_PROPERTY SUBTASK_BLOCK_TEXT_PROPERTY SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY SYSCOMP_CONTROL_JOBS SYSCOMP_FOLDERS SYSCOMP_JOBS SYSCOMP_NOTICES SYSCOMP_TASKS SYSDLG_CREATE_EDOCUMENT SYSDLG_CREATE_EDOCUMENT_VERSION SYSDLG_CURRENT_PERIOD SYSDLG_EDIT_FUNCTION_HELP SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS SYSDLG_EXPORT_SINGLE_EDOCUMENT SYSDLG_IMPORT_EDOCUMENT SYSDLG_MULTIPLE_SELECT SYSDLG_SETUP_ACCESS_RIGHTS SYSDLG_SETUP_DEFAULT_RIGHTS SYSDLG_SETUP_FILTER_CONDITION SYSDLG_SETUP_SIGN_RIGHTS SYSDLG_SETUP_TASK_OBSERVERS SYSDLG_SETUP_TASK_ROUTE SYSDLG_SETUP_USERS_LIST SYSDLG_SIGN_EDOCUMENT SYSDLG_SIGN_MULTIPLE_EDOCUMENTS SYSREF_ACCESS_RIGHTS_TYPES SYSREF_ADMINISTRATION_HISTORY SYSREF_ALL_AVAILABLE_COMPONENTS SYSREF_ALL_AVAILABLE_PRIVILEGES SYSREF_ALL_REPLICATING_COMPONENTS SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS SYSREF_CALENDAR_EVENTS SYSREF_COMPONENT_TOKEN_HISTORY SYSREF_COMPONENT_TOKENS SYSREF_COMPONENTS SYSREF_CONSTANTS SYSREF_DATA_RECEIVE_PROTOCOL SYSREF_DATA_SEND_PROTOCOL SYSREF_DIALOGS SYSREF_DIALOGS_REQUISITES SYSREF_EDITORS SYSREF_EDOC_CARDS SYSREF_EDOC_TYPES SYSREF_EDOCUMENT_CARD_REQUISITES SYSREF_EDOCUMENT_CARD_TYPES SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE SYSREF_EDOCUMENT_CARDS SYSREF_EDOCUMENT_HISTORY SYSREF_EDOCUMENT_KINDS SYSREF_EDOCUMENT_REQUISITES SYSREF_EDOCUMENT_SIGNATURES SYSREF_EDOCUMENT_TEMPLATES SYSREF_EDOCUMENT_TEXT_STORAGES SYSREF_EDOCUMENT_VIEWS SYSREF_FILTERER_SETUP_CONFLICTS SYSREF_FILTRATER_SETTING_CONFLICTS SYSREF_FOLDER_HISTORY SYSREF_FOLDERS SYSREF_FUNCTION_GROUPS SYSREF_FUNCTION_PARAMS SYSREF_FUNCTIONS SYSREF_JOB_HISTORY SYSREF_LINKS SYSREF_LOCALIZATION_DICTIONARY SYSREF_LOCALIZATION_LANGUAGES SYSREF_MODULES SYSREF_PRIVILEGES SYSREF_RECORD_HISTORY SYSREF_REFERENCE_REQUISITES SYSREF_REFERENCE_TYPE_VIEWS SYSREF_REFERENCE_TYPES SYSREF_REFERENCES SYSREF_REFERENCES_REQUISITES SYSREF_REMOTE_SERVERS SYSREF_REPLICATION_SESSIONS_LOG SYSREF_REPLICATION_SESSIONS_PROTOCOL SYSREF_REPORTS SYSREF_ROLES SYSREF_ROUTE_BLOCK_GROUPS SYSREF_ROUTE_BLOCKS SYSREF_SCRIPTS SYSREF_SEARCHES SYSREF_SERVER_EVENTS SYSREF_SERVER_EVENTS_HISTORY SYSREF_STANDARD_ROUTE_GROUPS SYSREF_STANDARD_ROUTES SYSREF_STATUSES SYSREF_SYSTEM_SETTINGS SYSREF_TASK_HISTORY SYSREF_TASK_KIND_GROUPS SYSREF_TASK_KINDS SYSREF_TASK_RIGHTS SYSREF_TASK_SIGNATURES SYSREF_TASKS SYSREF_UNITS SYSREF_USER_GROUPS SYSREF_USER_GROUPS_REFERENCE SYSREF_USER_SUBSTITUTION SYSREF_USERS SYSREF_USERS_REFERENCE SYSREF_VIEWERS SYSREF_WORKING_TIME_CALENDARS ACCESS_RIGHTS_TABLE_NAME EDMS_ACCESS_TABLE_NAME EDOC_TYPES_TABLE_NAME TEST_DEV_DB_NAME TEST_DEV_SYSTEM_CODE TEST_EDMS_DB_NAME TEST_EDMS_MAIN_CODE TEST_EDMS_MAIN_DB_NAME TEST_EDMS_SECOND_CODE TEST_EDMS_SECOND_DB_NAME TEST_EDMS_SYSTEM_CODE TEST_ISB5_MAIN_CODE TEST_ISB5_SECOND_CODE TEST_SQL_SERVER_2005_NAME TEST_SQL_SERVER_NAME ATTENTION_CAPTION cbsCommandLinks cbsDefault CONFIRMATION_CAPTION ERROR_CAPTION INFORMATION_CAPTION mrCancel mrOk EDOC_VERSION_ACTIVE_STAGE_CODE EDOC_VERSION_DESIGN_STAGE_CODE EDOC_VERSION_OBSOLETE_STAGE_CODE cpDataEnciphermentEnabled cpDigitalSignatureEnabled cpID cpIssuer cpPluginVersion cpSerial cpSubjectName cpSubjSimpleName cpValidFromDate cpValidToDate ISBL_SYNTAX NO_SYNTAX XML_SYNTAX WAIT_BLOCK_AFTER_FINISH_EVENT WAIT_BLOCK_BEFORE_START_EVENT WAIT_BLOCK_DEADLINE_PROPERTY WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY WAIT_BLOCK_NAME_PROPERTY WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SYSRES_COMMON SYSRES_CONST SYSRES_MBFUNC SYSRES_SBDATA SYSRES_SBGUI SYSRES_SBINTF SYSRES_SBREFDSC SYSRES_SQLERRORS SYSRES_SYSCOMP atUser atGroup atRole aemEnabledAlways aemDisabledAlways aemEnabledOnBrowse aemEnabledOnEdit aemDisabledOnBrowseEmpty apBegin apEnd alLeft alRight asmNever asmNoButCustomize asmAsLastTime asmYesButCustomize asmAlways cirCommon cirRevoked ctSignature ctEncode ctSignatureEncode clbUnchecked clbChecked clbGrayed ceISB ceAlways ceNever ctDocument ctReference ctScript ctUnknown ctReport ctDialog ctFunction ctFolder ctEDocument ctTask ctJob ctNotice ctControlJob cfInternal cfDisplay ciUnspecified ciWrite ciRead ckFolder ckEDocument ckTask ckJob ckComponentToken ckAny ckReference ckScript ckReport ckDialog ctISBLEditor ctBevel ctButton ctCheckListBox ctComboBox ctComboEdit ctGrid ctDBCheckBox ctDBComboBox ctDBEdit ctDBEllipsis ctDBMemo ctDBNavigator ctDBRadioGroup ctDBStatusLabel ctEdit ctGroupBox ctInplaceHint ctMemo ctPanel ctListBox ctRadioButton ctRichEdit ctTabSheet ctWebBrowser ctImage ctHyperLink ctLabel ctDBMultiEllipsis ctRibbon ctRichView ctInnerPanel ctPanelGroup ctBitButton cctDate cctInteger cctNumeric cctPick cctReference cctString cctText cltInternal cltPrimary cltGUI dseBeforeOpen dseAfterOpen dseBeforeClose dseAfterClose dseOnValidDelete dseBeforeDelete dseAfterDelete dseAfterDeleteOutOfTransaction dseOnDeleteError dseBeforeInsert dseAfterInsert dseOnValidUpdate dseBeforeUpdate dseOnUpdateRatifiedRecord dseAfterUpdate dseAfterUpdateOutOfTransaction dseOnUpdateError dseAfterScroll dseOnOpenRecord dseOnCloseRecord dseBeforeCancel dseAfterCancel dseOnUpdateDeadlockError dseBeforeDetailUpdate dseOnPrepareUpdate dseOnAnyRequisiteChange dssEdit dssInsert dssBrowse dssInActive dftDate dftShortDate dftDateTime dftTimeStamp dotDays dotHours dotMinutes dotSeconds dtkndLocal dtkndUTC arNone arView arEdit arFull ddaView ddaEdit emLock emEdit emSign emExportWithLock emImportWithUnlock emChangeVersionNote emOpenForModify emChangeLifeStage emDelete emCreateVersion emImport emUnlockExportedWithLock emStart emAbort emReInit emMarkAsReaded emMarkAsUnreaded emPerform emAccept emResume emChangeRights emEditRoute emEditObserver emRecoveryFromLocalCopy emChangeWorkAccessType emChangeEncodeTypeToCertificate emChangeEncodeTypeToPassword emChangeEncodeTypeToNone emChangeEncodeTypeToCertificatePassword emChangeStandardRoute emGetText emOpenForView emMoveToStorage emCreateObject emChangeVersionHidden emDeleteVersion emChangeLifeCycleStage emApprovingSign emExport emContinue emLockFromEdit emUnLockForEdit emLockForServer emUnlockFromServer emDelegateAccessRights emReEncode ecotFile ecotProcess eaGet eaCopy eaCreate eaCreateStandardRoute edltAll edltNothing edltQuery essmText essmCard esvtLast esvtLastActive esvtSpecified edsfExecutive edsfArchive edstSQLServer edstFile edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile vsDefault vsDesign vsActive vsObsolete etNone etCertificate etPassword etCertificatePassword ecException ecWarning ecInformation estAll estApprovingOnly evtLast evtLastActive evtQuery fdtString fdtNumeric fdtInteger fdtDate fdtText fdtUnknown fdtWideString fdtLargeInteger ftInbox ftOutbox ftFavorites ftCommonFolder ftUserFolder ftComponents ftQuickLaunch ftShortcuts ftSearch grhAuto grhX1 grhX2 grhX3 hltText hltRTF hltHTML iffBMP iffJPEG iffMultiPageTIFF iffSinglePageTIFF iffTIFF iffPNG im8bGrayscale im24bRGB im1bMonochrome itBMP itJPEG itWMF itPNG ikhInformation ikhWarning ikhError ikhNoIcon icUnknown icScript icFunction icIntegratedReport icAnalyticReport icDataSetEventHandler icActionHandler icFormEventHandler icLookUpEventHandler icRequisiteChangeEventHandler icBeforeSearchEventHandler icRoleCalculation icSelectRouteEventHandler icBlockPropertyCalculation icBlockQueryParamsEventHandler icChangeSearchResultEventHandler icBlockEventHandler icSubTaskInitEventHandler icEDocDataSetEventHandler icEDocLookUpEventHandler icEDocActionHandler icEDocFormEventHandler icEDocRequisiteChangeEventHandler icStructuredConversionRule icStructuredConversionEventBefore icStructuredConversionEventAfter icWizardEventHandler icWizardFinishEventHandler icWizardStepEventHandler icWizardStepFinishEventHandler icWizardActionEnableEventHandler icWizardActionExecuteEventHandler icCreateJobsHandler icCreateNoticesHandler icBeforeLookUpEventHandler icAfterLookUpEventHandler icTaskAbortEventHandler icWorkflowBlockActionHandler icDialogDataSetEventHandler icDialogActionHandler icDialogLookUpEventHandler icDialogRequisiteChangeEventHandler icDialogFormEventHandler icDialogValidCloseEventHandler icBlockFormEventHandler icTaskFormEventHandler icReferenceMethod icEDocMethod icDialogMethod icProcessMessageHandler isShow isHide isByUserSettings jkJob jkNotice jkControlJob jtInner jtLeft jtRight jtFull jtCross lbpAbove lbpBelow lbpLeft lbpRight eltPerConnection eltPerUser sfcUndefined sfcBlack sfcGreen sfcRed sfcBlue sfcOrange sfcLilac sfsItalic sfsStrikeout sfsNormal ldctStandardRoute ldctWizard ldctScript ldctFunction ldctRouteBlock ldctIntegratedReport ldctAnalyticReport ldctReferenceType ldctEDocumentType ldctDialog ldctServerEvents mrcrtNone mrcrtUser mrcrtMaximal mrcrtCustom vtEqual vtGreaterOrEqual vtLessOrEqual vtRange rdYesterday rdToday rdTomorrow rdThisWeek rdThisMonth rdThisYear rdNextMonth rdNextWeek rdLastWeek rdLastMonth rdWindow rdFile rdPrinter rdtString rdtNumeric rdtInteger rdtDate rdtReference rdtAccount rdtText rdtPick rdtUnknown rdtLargeInteger rdtDocument reOnChange reOnChangeValues ttGlobal ttLocal ttUser ttSystem ssmBrowse ssmSelect ssmMultiSelect ssmBrowseModal smSelect smLike smCard stNone stAuthenticating stApproving sctString sctStream sstAnsiSort sstNaturalSort svtEqual svtContain soatString soatNumeric soatInteger soatDatetime soatReferenceRecord soatText soatPick soatBoolean soatEDocument soatAccount soatIntegerCollection soatNumericCollection soatStringCollection soatPickCollection soatDatetimeCollection soatBooleanCollection soatReferenceRecordCollection soatEDocumentCollection soatAccountCollection soatContents soatUnknown tarAbortByUser tarAbortByWorkflowException tvtAllWords tvtExactPhrase tvtAnyWord usNone usCompleted usRedSquare usBlueSquare usYellowSquare usGreenSquare usOrangeSquare usPurpleSquare usFollowUp utUnknown utUser utDeveloper utAdministrator utSystemDeveloper utDisconnected btAnd btDetailAnd btOr btNotOr btOnly vmView vmSelect vmNavigation vsmSingle vsmMultiple vsmMultipleCheck vsmNoSelection wfatPrevious wfatNext wfatCancel wfatFinish wfepUndefined wfepText3 wfepText6 wfepText9 wfepSpinEdit wfepDropDown wfepRadioGroup wfepFlag wfepText12 wfepText15 wfepText18 wfepText21 wfepText24 wfepText27 wfepText30 wfepRadioGroupColumn1 wfepRadioGroupColumn2 wfepRadioGroupColumn3 wfetQueryParameter wfetText wfetDelimiter wfetLabel wptString wptInteger wptNumeric wptBoolean wptDateTime wptPick wptText wptUser wptUserList wptEDocumentInfo wptEDocumentInfoList wptReferenceRecordInfo wptReferenceRecordInfoList wptFolderInfo wptTaskInfo wptContents wptFileName wptDate wsrComplete wsrGoNext wsrGoPrevious wsrCustom wsrCancel wsrGoFinal wstForm wstEDocument wstTaskCard wstReferenceRecordCard wstFinal waAll waPerformers waManual wsbStart wsbFinish wsbNotice wsbStep wsbDecision wsbWait wsbMonitor wsbScript wsbConnector wsbSubTask wsbLifeCycleStage wsbPause wdtInteger wdtFloat wdtString wdtPick wdtDateTime wdtBoolean wdtTask wdtJob wdtFolder wdtEDocument wdtReferenceRecord wdtUser wdtGroup wdtRole wdtIntegerCollection wdtFloatCollection wdtStringCollection wdtPickCollection wdtDateTimeCollection wdtBooleanCollection wdtTaskCollection wdtJobCollection wdtFolderCollection wdtEDocumentCollection wdtReferenceRecordCollection wdtUserCollection wdtGroupCollection wdtRoleCollection wdtContents wdtUserList wdtSearchDescription wdtDeadLine wdtPickSet wdtAccountCollection wiLow wiNormal wiHigh wrtSoft wrtHard wsInit wsRunning wsDone wsControlled wsAborted wsContinued wtmFull wtmFromCurrent wtmOnlyCurrent ",class:"AltState Application CallType ComponentTokens CreatedJobs CreatedNotices ControlState DialogResult Dialogs EDocuments EDocumentVersionSource Folders GlobalIDs Job Jobs InputValue LookUpReference LookUpRequisiteNames LookUpSearch Object ParentComponent Processes References Requisite ReportName Reports Result Scripts Searches SelectedAttachments SelectedItems SelectMode Sender ServerEvents ServiceFactory ShiftState SubTask SystemDialogs Tasks Wizard Wizards Work ВызовСпособ ИмяОтчета РеквЗнач ",literal:"null true false nil "},s={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,keywords:o,relevance:0},l={className:"type",begin:":[ \\t]*("+"IApplication IAccessRights IAccountRepository IAccountSelectionRestrictions IAction IActionList IAdministrationHistoryDescription IAnchors IApplication IArchiveInfo IAttachment IAttachmentList ICheckListBox ICheckPointedList IColumn IComponent IComponentDescription IComponentToken IComponentTokenFactory IComponentTokenInfo ICompRecordInfo IConnection IContents IControl IControlJob IControlJobInfo IControlList ICrypto ICrypto2 ICustomJob ICustomJobInfo ICustomListBox ICustomObjectWizardStep ICustomWork ICustomWorkInfo IDataSet IDataSetAccessInfo IDataSigner IDateCriterion IDateRequisite IDateRequisiteDescription IDateValue IDeaAccessRights IDeaObjectInfo IDevelopmentComponentLock IDialog IDialogFactory IDialogPickRequisiteItems IDialogsFactory IDICSFactory IDocRequisite IDocumentInfo IDualListDialog IECertificate IECertificateInfo IECertificates IEditControl IEditorForm IEdmsExplorer IEdmsObject IEdmsObjectDescription IEdmsObjectFactory IEdmsObjectInfo IEDocument IEDocumentAccessRights IEDocumentDescription IEDocumentEditor IEDocumentFactory IEDocumentInfo IEDocumentStorage IEDocumentVersion IEDocumentVersionListDialog IEDocumentVersionSource IEDocumentWizardStep IEDocVerSignature IEDocVersionState IEnabledMode IEncodeProvider IEncrypter IEvent IEventList IException IExternalEvents IExternalHandler IFactory IField IFileDialog IFolder IFolderDescription IFolderDialog IFolderFactory IFolderInfo IForEach IForm IFormTitle IFormWizardStep IGlobalIDFactory IGlobalIDInfo IGrid IHasher IHistoryDescription IHyperLinkControl IImageButton IImageControl IInnerPanel IInplaceHint IIntegerCriterion IIntegerList IIntegerRequisite IIntegerValue IISBLEditorForm IJob IJobDescription IJobFactory IJobForm IJobInfo ILabelControl ILargeIntegerCriterion ILargeIntegerRequisite ILargeIntegerValue ILicenseInfo ILifeCycleStage IList IListBox ILocalIDInfo ILocalization ILock IMemoryDataSet IMessagingFactory IMetadataRepository INotice INoticeInfo INumericCriterion INumericRequisite INumericValue IObject IObjectDescription IObjectImporter IObjectInfo IObserver IPanelGroup IPickCriterion IPickProperty IPickRequisite IPickRequisiteDescription IPickRequisiteItem IPickRequisiteItems IPickValue IPrivilege IPrivilegeList IProcess IProcessFactory IProcessMessage IProgress IProperty IPropertyChangeEvent IQuery IReference IReferenceCriterion IReferenceEnabledMode IReferenceFactory IReferenceHistoryDescription IReferenceInfo IReferenceRecordCardWizardStep IReferenceRequisiteDescription IReferencesFactory IReferenceValue IRefRequisite IReport IReportFactory IRequisite IRequisiteDescription IRequisiteDescriptionList IRequisiteFactory IRichEdit IRouteStep IRule IRuleList ISchemeBlock IScript IScriptFactory ISearchCriteria ISearchCriterion ISearchDescription ISearchFactory ISearchFolderInfo ISearchForObjectDescription ISearchResultRestrictions ISecuredContext ISelectDialog IServerEvent IServerEventFactory IServiceDialog IServiceFactory ISignature ISignProvider ISignProvider2 ISignProvider3 ISimpleCriterion IStringCriterion IStringList IStringRequisite IStringRequisiteDescription IStringValue ISystemDialogsFactory ISystemInfo ITabSheet ITask ITaskAbortReasonInfo ITaskCardWizardStep ITaskDescription ITaskFactory ITaskInfo ITaskRoute ITextCriterion ITextRequisite ITextValue ITreeListSelectDialog IUser IUserList IValue IView IWebBrowserControl IWizard IWizardAction IWizardFactory IWizardFormElement IWizardParam IWizardPickParam IWizardReferenceParam IWizardStep IWorkAccessRights IWorkDescription IWorkflowAskableParam IWorkflowAskableParams IWorkflowBlock IWorkflowBlockResult IWorkflowEnabledMode IWorkflowParam IWorkflowPickParam IWorkflowReferenceParam IWorkState IWorkTreeCustomNode IWorkTreeJobNode IWorkTreeTaskNode IXMLEditorForm SBCrypto ".trim().replace(/\s/g,"|")+")",end:"[ \\t]*=",excludeEnd:!0},c={className:"variable",lexemes:t,keywords:o,begin:t,relevance:0,contains:[l,s]};return{aliases:["isbl"],case_insensitive:!0,lexemes:t,keywords:o,illegal:"\\$|\\?|%|,|;$|~|#|@|)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t="<>",n="",r={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},i="[A-Za-z$_][0-9A-Za-z$_]*",a={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},o={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},s={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},l={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"xml"}},c={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"css"}},d={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,s]};s.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,d,o,e.REGEXP_MODE];var u=s.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx","mjs","cjs"],keywords:a,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,d,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,o,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:i+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:i,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+i+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:i},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:u}]}]},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:t,end:n},{begin:r.begin,end:r.end}],subLanguage:"xml",contains:[{begin:r.begin,end:r.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:i}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:u}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor get set",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){var t={className:"params",begin:/\(/,end:/\)/,contains:[{begin:/[\w-]+ *=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[\w-]+/}]}],relevance:0};return{aliases:["wildfly-cli"],lexemes:"[a-z-]+",keywords:{keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"params",begin:/--[\w\-=\/]+/},{className:"function",begin:/:[\w\-.]+/,relevance:0},{className:"string",begin:/\B(([\/.])[\w\-.\/=]+)+/},t]}}},function(e,t){e.exports=function(e){var t={literal:"true false null"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],i={end:",",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},a={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(i,{begin:/:/})].concat(n),illegal:"\\S"},o={begin:"\\[",end:"\\]",contains:[e.inherit(i)],illegal:"\\S"};return r.push(a,o),n.forEach((function(e){r.push(e)})),{contains:r,keywords:t,illegal:"\\S"}}},function(e,t){e.exports=function(e){var t={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},n="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",r={lexemes:n,keywords:t,illegal:/<\//},i={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},a={className:"variable",begin:"\\$"+n},o={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],begin:"`",end:"`"},l={className:"meta",begin:"@"+n};return r.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},o,s,l,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],i.contains=r.contains,r}},function(e,t){e.exports=function(e){return{contains:[{className:"meta",begin:/^julia>/,relevance:10,starts:{end:/^(?![ ]{6})/,subLanguage:"julia"},aliases:["jldoctest"]}]}}},function(e,t){e.exports=function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},n={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},r={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},i={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},a={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,r]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,i,r]}]};r.contains.push(a);var o={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},s={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(a,{className:"meta-string"})]}]},l={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},u=d;return u.variants[1].contains=[d],d.variants[1].contains=[u],{aliases:["kt"],keywords:t,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},n,o,s,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:t,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,o,s,a,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},o,s]},a,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},l]}}},function(e,t){e.exports=function(e){var t="\\]|\\?>",n={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},r=e.COMMENT("\x3c!--","--\x3e",{relevance:0}),i={className:"meta",begin:"\\[noprocess\\]",starts:{end:"\\[/noprocess\\]",returnEnd:!0,contains:[r]}},a={className:"meta",begin:"\\[/noprocess|<\\?(lasso(script)?|=)"},o={className:"symbol",begin:"'[a-zA-Z_][\\w.]*'"},s=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.C_NUMBER_MODE,{begin:e.C_NUMBER_RE+"|(-?infinity|NaN)\\b"}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{variants:[{begin:"[#$][a-zA-Z_][\\w.]*"},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"type",begin:"::\\s*",end:"[a-zA-Z_][\\w.]*",illegal:"\\W"},{className:"params",variants:[{begin:"-(?!infinity)[a-zA-Z_][\\w.]*",relevance:0},{begin:"(\\.\\.\\.)"}]},{begin:/(->|\.)\s*/,relevance:0,contains:[o]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z_][\\w.]*(=(?!>))?|[-+*/%](?!>)"})]}];return{aliases:["ls","lassoscript"],case_insensitive:!0,lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[|<\\?(lasso(script)?|=)",returnEnd:!0,relevance:0,contains:[r]}},i,a,{className:"meta",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[noprocess\\]|<\\?(lasso(script)?|=)",returnEnd:!0,contains:[r]}},i,a].concat(s)}},{className:"meta",begin:"\\[",relevance:0},{className:"meta",begin:"^#!",end:"lasso9$",relevance:10}].concat(s)}}},function(e,t){e.exports=function(e){return{contains:[{className:"attribute",begin:"^dn",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0},relevance:10},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0}},{className:"literal",begin:"^-",end:"$"},e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{contains:[{className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:" {",returnBegin:!0,excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}},function(e,t){e.exports=function(e){var t=[],n=[],r=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},i=function(e,t,n){return{className:e,begin:t,relevance:n}},a={begin:"\\(",end:"\\)",contains:n,relevance:0};n.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r("'"),r('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},i("number","#[0-9A-Fa-f]+\\b"),a,i("variable","@@?[\\w-]+",10),i("variable","@{[\\w-]+}"),i("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var o=n.concat({begin:"{",end:"}",contains:t}),s={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(n)},l={begin:"([\\w-]+|@{[\\w-]+})\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:"([\\w-]+|@{[\\w-]+})",end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:n}}]},c={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:n,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:o}},u={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:"([\\w-]+|@{[\\w-]+})",end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,i("keyword","all\\b"),i("variable","@{[\\w-]+}"),i("selector-tag","([\\w-]+|@{[\\w-]+})%?",0),i("selector-id","#([\\w-]+|@{[\\w-]+})"),i("selector-class","\\.([\\w-]+|@{[\\w-]+})",0),i("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:o},{begin:"!important"}]};return t.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,c,d,l,u),{case_insensitive:!0,illegal:"[=>'/<($\"]",contains:t}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",n="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",r={className:"literal",begin:"\\b(t{1}|nil)\\b"},i={className:"number",variants:[{begin:n,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+n+" +"+n,end:"\\)"}]},a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),o=e.COMMENT(";","$",{relevance:0}),s={begin:"\\*",end:"\\*"},l={className:"symbol",begin:"[:&]"+t},c={begin:t,relevance:0},d={begin:"\\|[^]*?\\|"},u={contains:[i,a,s,l,{begin:"\\(",end:"\\)",contains:["self",r,a,i,c]},c],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{name:"quote"}},{begin:"'\\|[^]*?\\|"}]},_={variants:[{begin:"'"+t},{begin:"#'"+t+"(::"+t+")*"}]},p={begin:"\\(\\s*",end:"\\)"},m={endsWithParent:!0,relevance:0};return p.contains=[{className:"name",variants:[{begin:t},{begin:"\\|[^]*?\\|"}]},m],m.contains=[u,_,p,r,i,a,o,s,l,d,c],{illegal:/\S/,contains:[i,{className:"meta",begin:"^#!",end:"$"},r,a,o,u,_,p,c]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\[.+\\])?(?:\\s*?)"},{begin:"\\$_[A-Z]+"}],relevance:0},n=[e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("--","$"),e.COMMENT("[^:]//","$")],r=e.inherit(e.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),i=e.inherit(e.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress difference directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract symmetric union unload vectorDotProduct wait write"},contains:[t,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[i,r],relevance:0},{beginKeywords:"command on",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"meta",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r].concat(n),illegal:";$|^\\[|^=|&|{"}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger case default function var with then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super case default function var void const let enum export import native list map __hasProp __extends __slice __bind __indexOf",literal:"true false null undefined yes no on off it that void",built_in:"npm require console print module global window document"},n="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",r=e.inherit(e.TITLE_MODE,{begin:n}),i={className:"subst",begin:/#\{/,end:/}/,keywords:t},a={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:t},o=[e.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,a]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,a]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"regexp",variants:[{begin:"//",end:"//[gim]*",contains:[i,e.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W)/}]},{begin:"@"+n},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];i.contains=o;var s={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{aliases:["ls"],keywords:t,illegal:/\/\*/,contains:o.concat([e.COMMENT("\\/\\*","\\*\\/"),e.HASH_COMMENT_MODE,{begin:"(#=>|=>|\\|>>|-?->|\\!->)"},{className:"function",contains:[r,s],returnBegin:!0,variants:[{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?",end:"\\->\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[r]},r]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){var t="([-a-zA-Z$._][\\w\\-$.]*)";return{keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[{className:"keyword",begin:"i\\d+"},e.COMMENT(";","\\n",{relevance:0}),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:'"',end:'[^\\\\]"'}],relevance:0},{className:"title",variants:[{begin:"@"+t},{begin:"@\\d+"},{begin:"!"+t},{begin:"!\\d+"+t}]},{className:"symbol",variants:[{begin:"%"+t},{begin:"%\\d+"},{begin:"#\\d+"}]},{className:"number",variants:[{begin:"0[xX][a-fA-F0-9]+"},{begin:"-?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?"}],relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:'"',end:'"',contains:[{className:"subst",begin:/\\[tn"\\]/}]},n={className:"number",begin:e.C_NUMBER_RE};return{illegal:":",contains:[t,{className:"comment",variants:[e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/")],relevance:0},n,{className:"section",variants:[{begin:"\\b(?:state|default)\\b"},{begin:"\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b"}]},{className:"built_in",begin:"\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|SitOnLink|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"},{className:"literal",variants:[{begin:"\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{begin:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(?:ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(?:_TAG)?|CREATOR|ATTACHED_(?:POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALLOW_UNSIT|ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(?:INVALID_(?:AGENT|LINK_OBJECT)|NO(?:T_EXPERIENCE|_(?:ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{begin:"\\b(?:FALSE|TRUE)\\b"},{begin:"\\b(?:ZERO_ROTATION)\\b"},{begin:"\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b"},{begin:"\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b"}]},{className:"type",begin:"\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}}},function(e,t){e.exports=function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},n=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:n.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:n}].concat(n)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%"},{begin:"<=",relevance:0},{begin:"=>",relevance:0},{begin:"/\\\\"},{begin:"\\\\/"}]},{className:"built_in",variants:[{begin:":-\\|--\x3e"},{begin:"=",relevance:0}]},t,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"0'.\\|0[box][0-9a-fA-F]*"},e.NUMBER_MODE,n,r,{begin:/:-/},{begin:/\.$/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["mips"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},contains:[{className:"keyword",begin:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(.hb)?|jr(.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs.[sd]|add.[sd]|alnv.ps|bc1[ft]l?|c.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et]).[sd]|(ceil|floor|round|trunc).[lw].[sd]|cfc1|cvt.d.[lsw]|cvt.l.[dsw]|cvt.ps.s|cvt.s.[dlw]|cvt.s.p[lu]|cvt.w.[dls]|div.[ds]|ldx?c1|luxc1|lwx?c1|madd.[sd]|mfc1|mov[fntz]?.[ds]|msub.[sd]|mth?c1|mul.[ds]|neg.[ds]|nmadd.[ds]|nmsub.[ds]|p[lu][lu].ps|recip.fmt|r?sqrt.[ds]|sdx?c1|sub.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",end:"\\s"},e.COMMENT("[;#](?!s*$)","$"),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"0x[0-9a-f]+"},{begin:"\\b-?\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^\\s*[0-9]+:"},{begin:"[0-9]+[bf]"}],relevance:0}],illegal:"/"}}},function(e,t){e.exports=function(e){return{keywords:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",contains:[e.COMMENT("::","$")]}}},function(e,t){e.exports=function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",n={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:t},r={begin:"->{",end:"}"},i={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},a=[e.BACKSLASH_ESCAPE,n,i],o=[i,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),r,{className:"string",contains:a,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return n.contains=o,r.contains=o,{aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:t,contains:o}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[{className:"meta",begin:"^__(END|DATA)__$"},{begin:"^\\s*%{1,2}={0,2}",end:"$",subLanguage:"perl"},{begin:"<%{1,2}={0,2}",end:"={0,1}%>",subLanguage:"perl",excludeBegin:!0,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t={className:"number",relevance:0,variants:[{begin:"[$][a-fA-F0-9]+"},e.NUMBER_MODE]};return{case_insensitive:!0,keywords:{keyword:"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw import",built_in:"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI",literal:"true false null and or shl shr mod"},illegal:/\/\*/,contains:[e.COMMENT("#rem","#end"),e.COMMENT("'","$",{relevance:0}),{className:"function",beginKeywords:"function method",end:"[(=:]|$",illegal:/\n/,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"$",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{className:"built_in",begin:"\\b(self|super)\\b"},{className:"meta",begin:"\\s*#",end:"$",keywords:{"meta-keyword":"if else elseif endif end then"}},{className:"meta",begin:"^\\s*strict\\b"},{beginKeywords:"alias",end:"=",contains:[e.UNDERSCORE_TITLE_MODE]},e.QUOTE_STRING_MODE,t]}}},function(e,t){e.exports=function(e){var t={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i=[e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r]}]},{className:"built_in",begin:"@__"+e.IDENT_RE},{begin:"@"+e.IDENT_RE},{begin:e.IDENT_RE+"\\\\"+e.IDENT_RE}];r.contains=i;var a=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(i)}]};return{aliases:["moon"],keywords:t,illegal:/\/\*/,contains:i.concat([e.COMMENT("--","$"),{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[a,o]},{begin:/[\(,:=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{className:"name",begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[{beginKeywords:"build create index delete drop explain infer|10 insert merge prepare select update upsert|10",end:/;/,endsWithParent:!0,keywords:{keyword:"all alter analyze and any array as asc begin between binary boolean break bucket build by call case cast cluster collate collection commit connect continue correlate cover create database dataset datastore declare decrement delete derived desc describe distinct do drop each element else end every except exclude execute exists explain fetch first flatten for force from function grant group gsi having if ignore ilike in include increment index infer inline inner insert intersect into is join key keys keyspace known last left let letting like limit lsm map mapping matched materialized merge minus namespace nest not number object offset on option or order outer over parse partition password path pool prepare primary private privilege procedure public raw realm reduce rename return returning revoke right role rollback satisfies schema select self semi set show some start statistics string system then to transaction trigger truncate under union unique unknown unnest unset update upsert use user using validate value valued values via view when where while with within work xor",literal:"true false null missing|5",built_in:"array_agg array_append array_concat array_contains array_count array_distinct array_ifnull array_length array_max array_min array_position array_prepend array_put array_range array_remove array_repeat array_replace array_reverse array_sort array_sum avg count max min sum greatest least ifmissing ifmissingornull ifnull missingif nullif ifinf ifnan ifnanorinf naninf neginfif posinfif clock_millis clock_str date_add_millis date_add_str date_diff_millis date_diff_str date_part_millis date_part_str date_trunc_millis date_trunc_str duration_to_str millis str_to_millis millis_to_str millis_to_utc millis_to_zone_name now_millis now_str str_to_duration str_to_utc str_to_zone_name decode_json encode_json encoded_size poly_length base64 base64_encode base64_decode meta uuid abs acos asin atan atan2 ceil cos degrees e exp ln log floor pi power radians random round sign sin sqrt tan trunc object_length object_names object_pairs object_inner_pairs object_values object_inner_values object_add object_put object_remove object_unwrap regexp_contains regexp_like regexp_position regexp_replace contains initcap length lower ltrim position repeat replace rtrim split substr title trim upper isarray isatom isboolean isnumber isobject isstring type toarray toatom toboolean tonumber toobject tostring"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"symbol",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE],relevance:2},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},n={endsWithParent:!0,lexemes:"[a-z/_]+",keywords:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[t]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},t]};return{aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:n}],relevance:0}],illegal:"[^\\s\\}]"}}},function(e,t){e.exports=function(e){return{aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},n={className:"subst",begin:/\$\{/,end:/}/,keywords:t},r={className:"string",contains:[n],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},i=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return n.contains=i,{aliases:["nixos"],keywords:t,contains:i}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:/\$+{[\w\.:-]+}/},n={className:"variable",begin:/\$+\w+/,illegal:/\(\){}/},r={className:"variable",begin:/\$+\([\w\^\.:-]+\)/},i={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"},{begin:"`",end:"`"}],illegal:/\n/,contains:[{className:"meta",begin:/\$(\\[nrt]|\$)/},{className:"variable",begin:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},t,n,r]};return{case_insensitive:!1,keywords:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecShellWait ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText Int64Cmp Int64CmpU Int64Fmt IntCmp IntCmpU IntFmt IntOp IntPtrCmp IntPtrCmpU IntPtrOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegMultiStr WriteRegNone WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},contains:[e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),{className:"function",beginKeywords:"Function PageEx Section SectionGroup",end:"$"},i,{className:"keyword",begin:/\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|searchparse|searchreplace|system|tempfile|undef|verbose|warning)/},t,n,r,{className:"params",begin:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},{className:"class",begin:/\w+\:\:\w+/},e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:t,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+n.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:n,lexemes:t,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["ml"],keywords:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*",relevance:0},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){var t={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},n={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},r=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i={className:"function",beginKeywords:"module function",end:"\\=|\\{",contains:[{className:"params",begin:"\\(",end:"\\)",contains:["self",n,r,t,{className:"literal",begin:"false|true|PI|undef"}]},e.UNDERSCORE_TITLE_MODE]};return{aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"meta",keywords:{"meta-keyword":"include use"},begin:"include|use <",end:">"},r,t,{begin:"[*!#%]",relevance:0},i]}}},function(e,t){e.exports=function(e){var t="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",n=e.COMMENT("{","}",{relevance:0}),r=e.COMMENT("\\(\\*","\\*\\)",{relevance:10}),i={className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},a={className:"string",begin:"(#\\d+)+"},o={className:"function",beginKeywords:"function constructor destructor procedure method",end:"[:;]",keywords:"function constructor|10 destructor|10 procedure|10 method|10",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",keywords:t,contains:[i,a]},n,r]};return{case_insensitive:!0,lexemes:/\.?\w+/,keywords:t,illegal:'("|\\$[G-Zg-z]|\\/\\*||->)',contains:[n,r,e.C_LINE_COMMENT_MODE,i,a,e.NUMBER_MODE,o,{className:"class",begin:"=\\bclass\\b",end:"end;",keywords:t,contains:[i,a,n,r,e.C_LINE_COMMENT_MODE,o]}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("{","}",{contains:["self"]});return{subLanguage:"xml",relevance:0,contains:[e.COMMENT("^#","$"),e.COMMENT("\\^rem{","}",{relevance:10,contains:[t]}),{className:"meta",begin:"^@(?:BASE|USE|CLASS|OPTIONS)$",relevance:10},{className:"title",begin:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{className:"variable",begin:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{className:"keyword",begin:"\\^[\\w\\-\\.\\:]+"},{className:"number",begin:"\\^#[0-9a-fA-F]+"},e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["pf.conf"],lexemes:/[a-z0-9_<>-]+/,keywords:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},contains:[e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE,{className:"variable",begin:/\$[\w\d#@][\w\d_]*/},{className:"variable",begin:/<(?!\/)/,end:/>/}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("--","$"),n="BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR NAME OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ",r=n.trim().split(" ").map((function(e){return e.split("|")[0]})).join("|"),i="ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP PERCENTILE_CONT PERCENTILE_DISC ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE NUM_NONNULLS NUM_NULLS ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT TRUNC WIDTH_BUCKET RANDOM SETSEED ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAPLEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR TO_ASCII TO_HEX TRANSLATE OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 TIMEOFDAY TRANSACTION_TIMESTAMP|10 ENUM_FIRST ENUM_LAST ENUM_RANGE AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILYINET_MERGE MACADDR8_SET7BIT ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA CURSOR_TO_XML CURSOR_TO_XMLSCHEMA SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA XMLATTRIBUTES TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY CURRVAL LASTVAL NEXTVAL SETVAL COALESCE NULLIF GREATEST LEAST ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY STRING_TO_ARRAY UNNEST ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE GENERATE_SERIES GENERATE_SUBSCRIPTS CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE GIN_CLEAN_PENDING_LIST SUPPRESS_REDUNDANT_UPDATES_TRIGGER LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE GROUPING CAST ".trim().split(" ").map((function(e){return e.split("|")[0]})).join("|");return{aliases:["postgres","postgresql"],case_insensitive:!0,keywords:{keyword:"ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION INDEX PROCEDURE ASSERTION ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS DEFERRABLE RANGE DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED OF NOTHING NONE EXCLUDE ATTRIBUTE USAGE ROUTINES TRUE FALSE NAN INFINITY ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT OPEN SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ",built_in:"CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 SQLSTATE SQLERRM|10 SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED INDEX_CORRUPTED "},illegal:/:==|\W\s*\(\*|(^|\s)\$[a-z]|{{|[a-z]:\s*$|\.\.\.|TO:|DO:/,contains:[{className:"keyword",variants:[{begin:/\bTEXT\s*SEARCH\b/},{begin:/\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/},{begin:/\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/},{begin:/\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/},{begin:/\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/},{begin:/\bNULLS\s+(FIRST|LAST)\b/},{begin:/\bEVENT\s+TRIGGER\b/},{begin:/\b(MAPPING|OR)\s+REPLACE\b/},{begin:/\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/},{begin:/\b(SHARE|EXCLUSIVE)\s+MODE\b/},{begin:/\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/},{begin:/\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/},{begin:/\bPRESERVE\s+ROWS\b/},{begin:/\bDISCARD\s+PLANS\b/},{begin:/\bREFERENCING\s+(OLD|NEW)\b/},{begin:/\bSKIP\s+LOCKED\b/},{begin:/\bGROUPING\s+SETS\b/},{begin:/\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/},{begin:/\b(WITH|WITHOUT)\s+HOLD\b/},{begin:/\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/},{begin:/\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/},{begin:/\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/},{begin:/\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/},{begin:/\bIS\s+(NOT\s+)?UNKNOWN\b/},{begin:/\bSECURITY\s+LABEL\b/},{begin:/\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/},{begin:/\bWITH\s+(NO\s+)?DATA\b/},{begin:/\b(FOREIGN|SET)\s+DATA\b/},{begin:/\bSET\s+(CATALOG|CONSTRAINTS)\b/},{begin:/\b(WITH|FOR)\s+ORDINALITY\b/},{begin:/\bIS\s+(NOT\s+)?DOCUMENT\b/},{begin:/\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/},{begin:/\b(STRIP|PRESERVE)\s+WHITESPACE\b/},{begin:/\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/},{begin:/\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/},{begin:/\bAT\s+TIME\s+ZONE\b/},{begin:/\bGRANTED\s+BY\b/},{begin:/\bRETURN\s+(QUERY|NEXT)\b/},{begin:/\b(ATTACH|DETACH)\s+PARTITION\b/},{begin:/\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/},{begin:/\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/},{begin:/\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/}]},{begin:/\b(FORMAT|FAMILY|VERSION)\s*\(/},{begin:/\bINCLUDE\s*\(/,keywords:"INCLUDE"},{begin:/\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/},{begin:/\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/},{begin:/\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/,relevance:10},{begin:/\bEXTRACT\s*\(/,end:/\bFROM\b/,returnEnd:!0,keywords:{type:"CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR TIMEZONE_MINUTE WEEK YEAR"}},{begin:/\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/,keywords:{keyword:"NAME"}},{begin:/\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/,keywords:{keyword:"DOCUMENT CONTENT"}},{beginKeywords:"CACHE INCREMENT MAXVALUE MINVALUE",end:e.C_NUMBER_RE,returnEnd:!0,keywords:"BY CACHE INCREMENT MAXVALUE MINVALUE"},{className:"type",begin:/\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/},{className:"type",begin:/\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/},{begin:/\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,keywords:{keyword:"RETURNS",type:"LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER"}},{begin:"\\b("+i+")\\s*\\("},{begin:"\\.("+r+")\\b"},{begin:"\\b("+r+")\\s+PATH\\b",keywords:{keyword:"PATH",type:n.replace("PATH ","")}},{className:"type",begin:"\\b("+r+")\\b"},{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:"(e|E|u&|U&)'",end:"'",contains:[{begin:"\\\\."}],relevance:10},{begin:"\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",endSameAsBegin:!0,contains:[{subLanguage:["pgsql","perl","python","tcl","r","lua","java","php","ruby","bash","scheme","xml","json"],endsWithParent:!0}]},{begin:'"',end:'"',contains:[{begin:'""'}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"meta",variants:[{begin:"%(ROW)?TYPE",relevance:10},{begin:"\\$\\d+"},{begin:"^#\\w",end:"$"}]},{className:"symbol",begin:"<<\\s*[a-zA-Z_][a-zA-Z_0-9$]*\\s*>>",relevance:10}]}}},function(e,t){e.exports=function(e){var t={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},n={className:"meta",begin:/<\?(php)?|\?>/},r={className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[n]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},n,{className:"keyword",begin:/\$this\b/},t,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",t,e.C_BLOCK_COMMENT_MODE,r,i]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},r,i]}}},function(e,t){e.exports=function(e){return{disableAutodetect:!0}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"actor addressof and as be break class compile_error compile_intrinsic consume continue delegate digestof do else elseif embed end error for fun if ifdef in interface is isnt lambda let match new not object or primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},contains:[{className:"type",begin:"\\b_?[A-Z][\\w]*",relevance:0},{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{begin:e.IDENT_RE+"'",relevance:0},{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter"},n={begin:"`[\\s\\S]",relevance:0},r={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},i={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[n,r,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},a={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},o=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),s={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},c={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[r]}]},d={begin:/using\s/,end:/$/,returnBegin:!0,contains:[i,a,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},u={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},_={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},p=[_,o,n,e.NUMBER_MODE,i,a,s,r,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/\@\B/,relevance:0}],m={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",p,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return _.contains.unshift(m),{aliases:["ps","ps1"],lexemes:/-?[A-z\.\-]+/,case_insensitive:!0,keywords:t,contains:p.concat(l,c,d,u,m)}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{contains:[e.C_NUMBER_MODE,{begin:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",end:":",excludeEnd:!0},{begin:"(ncalls|tottime|cumtime)",end:"$",keywords:"ncalls tottime|10 cumtime|10 filename",relevance:10},{begin:"function calls",end:"$",contains:[e.C_NUMBER_MODE],relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\(",end:"\\)$",excludeBegin:!0,excludeEnd:!0,relevance:0}]}}},function(e,t){e.exports=function(e){var t={begin:/\(/,end:/\)/,relevance:0},n={begin:/\[/,end:/\]/},r={className:"comment",begin:/%/,end:/$/,contains:[e.PHRASAL_WORDS_MODE]},i={className:"string",begin:/`/,end:/`/,contains:[e.BACKSLASH_ESCAPE]},a=[{begin:/[a-z][A-Za-z0-9_]*/,relevance:0},{className:"symbol",variants:[{begin:/[A-Z][a-zA-Z0-9_]*/},{begin:/_[A-Za-z0-9_]*/}],relevance:0},t,{begin:/:-/},n,r,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,{className:"string",begin:/0\'(\\\'|.)/},{className:"string",begin:/0\'\\s/},e.C_NUMBER_MODE];return t.contains=a,n.contains=a,{contains:a.concat([{begin:/\.$/}])}}},function(e,t){e.exports=function(e){var t="[ \\t\\f]*",n="("+t+"[:=]"+t+"|[ \\t\\f]+)",r="([^\\\\:= \\t\\f\\n]|\\\\.)+",i={end:n,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+n,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:i},{begin:r+n,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:r,endsParent:!0,relevance:0}],starts:i},{className:"attr",relevance:0,begin:r+t+"$"}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"package import option optional required repeated group oneof",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,{className:"class",beginKeywords:"message enum service",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"function",beginKeywords:"rpc",end:/;/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+/,end:/\s*=/,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("#","$"),n=e.inherit(e.TITLE_MODE,{begin:"([A-Za-z_]|::)(\\w|::)*"}),r={className:"variable",begin:"\\$([A-Za-z_]|::)(\\w|::)*"},i={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[t,r,i,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[n,t]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[i,t,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},r]}],relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["pb","pbi"],keywords:"Align And Array As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount Map Module NewList NewMap Next Not Or Procedure ProcedureC ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim Read Repeat Restore Return Runtime Select Shared Static Step Structure StructureUnion Swap Threaded To UndefineMacro Until Until UnuseModule UseModule Wend While With XIncludeFile XOr",contains:[e.COMMENT(";","$",{relevance:0}),{className:"function",begin:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",end:"\\(",excludeEnd:!0,returnBegin:!0,contains:[{className:"keyword",begin:"(Procedure|Declare)(C|CDLL|DLL)?",excludeEnd:!0},{className:"type",begin:"\\.\\w*"},e.UNDERSCORE_TITLE_MODE]},{className:"string",begin:'(~)?"',end:'"',illegal:"\\n"},{className:"symbol",begin:"#[a-zA-Z_]\\w*\\$?"}]}}},function(e,t){e.exports=function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},n={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,end:/\}/,keywords:t,illegal:/#/},i={begin:/\{\{/,relevance:0},a={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,n],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,n],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,n,i,r]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,n,i,r]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,i,r]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},o={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},s={className:"params",begin:/\(/,end:/\)/,contains:["self",n,o,a,e.HASH_COMMENT_MODE]};return r.contains=[a,o,n],{aliases:["py","gyp","ipython"],keywords:t,illegal:/(<\/|->|\?)|=>/,contains:[n,o,{beginKeywords:"if",relevance:0},a,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,s,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}},function(e,t){e.exports=function(e){return{aliases:["k","kdb"],keywords:{keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"},lexemes:/(`?)[A-Za-z0-9_]+\b/,contains:[e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9\\._]*",n={className:"attribute",begin:"\\bid\\s*:",starts:{className:"string",end:t,returnEnd:!1}},r={begin:t+"\\s*:",returnBegin:!0,contains:[{className:"attribute",begin:t,end:"\\s*:",excludeEnd:!0,relevance:0}],relevance:0},i={begin:t+"\\s*{",end:"{",returnBegin:!0,relevance:0,contains:[e.inherit(e.TITLE_MODE,{begin:t})]};return{aliases:["qt"],case_insensitive:!1,keywords:{keyword:"in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url variant vector2d vector3d vector4dPromise"},contains:[{className:"meta",begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{begin:/\s*[);\]]/,relevance:0,subLanguage:"xml"}],relevance:0},{className:"keyword",begin:"\\bsignal\\b",starts:{className:"string",end:"(\\(|:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"keyword",begin:"\\bproperty\\b",starts:{className:"string",end:"(:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}],illegal:/\[|%/},{begin:"\\."+e.IDENT_RE,relevance:0},n,r,i],illegal:/#/}}},function(e,t){e.exports=function(e){var t="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{contains:[e.HASH_COMMENT_MODE,{begin:t,lexemes:t,keywords:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}},function(e,t){e.exports=function(e){var t="~?[a-z$_][0-9a-zA-Z$_]*",n="`?[A-Z$_][0-9a-zA-Z$_]*",r="("+["||","&&","++","**","+.","*","/","*.","/.","...","|>"].map((function(e){return e.split("").map((function(e){return"\\"+e})).join("")})).join("|")+"|==|===)",i="\\s+"+r+"\\s+",a={keyword:"and as asr assert begin class constraint do done downto else end exception externalfor fun function functor if in include inherit initializerland lazy let lor lsl lsr lxor match method mod module mutable new nonrecobject of open or private rec sig struct then to try type val virtual when while with",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ",literal:"true false"},o="\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",s={className:"number",relevance:0,variants:[{begin:o},{begin:"\\(\\-"+o+"\\)"}]},l={className:"operator",relevance:0,begin:r},c=[{className:"identifier",relevance:0,begin:t},l,s],d=[e.QUOTE_STRING_MODE,l,{className:"module",begin:"\\b"+n,returnBegin:!0,end:".",contains:[{className:"identifier",begin:n,relevance:0}]}],u=[{className:"module",begin:"\\b"+n,returnBegin:!0,end:".",relevance:0,contains:[{className:"identifier",begin:n,relevance:0}]}],_={className:"function",relevance:0,keywords:a,variants:[{begin:"\\s(\\(\\.?.*?\\)|"+t+")\\s*=>",end:"\\s*=>",returnBegin:!0,relevance:0,contains:[{className:"params",variants:[{begin:t},{begin:"~?[a-z$_][0-9a-zA-Z$_]*(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?"},{begin:/\(\s*\)/}]}]},{begin:"\\s\\(\\.?[^;\\|]*\\)\\s*=>",end:"\\s=>",returnBegin:!0,relevance:0,contains:[{className:"params",relevance:0,variants:[{begin:t,end:"(,|\\n|\\))",relevance:0,contains:[l,{className:"typing",begin:":",end:"(,|\\n)",returnBegin:!0,relevance:0,contains:u}]}]}]},{begin:"\\(\\.\\s"+t+"\\)\\s*=>"}]};d.push(_);var p={className:"constructor",begin:n+"\\(",end:"\\)",illegal:"\\n",keywords:a,contains:[e.QUOTE_STRING_MODE,l,{className:"params",begin:"\\b"+t}]},m={className:"pattern-match",begin:"\\|",returnBegin:!0,keywords:a,end:"=>",relevance:0,contains:[p,l,{relevance:0,className:"constructor",begin:n}]},g={className:"module-access",keywords:a,returnBegin:!0,variants:[{begin:"\\b("+n+"\\.)+"+t},{begin:"\\b("+n+"\\.)+\\(",end:"\\)",returnBegin:!0,contains:[_,{begin:"\\(",end:"\\)",skip:!0}].concat(d)},{begin:"\\b("+n+"\\.)+{",end:"}"}],contains:d};return u.push(g),{aliases:["re"],keywords:a,illegal:"(:\\-|:=|\\${|\\+=)",contains:[e.COMMENT("/\\*","\\*/",{illegal:"^(\\#,\\/\\/)"}),{className:"character",begin:"'(\\\\[^']+|[^'])'",illegal:"\\n",relevance:0},e.QUOTE_STRING_MODE,{className:"literal",begin:"\\(\\)",relevance:0},{className:"literal",begin:"\\[\\|",end:"\\|\\]",relevance:0,contains:c},{className:"literal",begin:"\\[",end:"\\]",relevance:0,contains:c},p,{className:"operator",begin:i,illegal:"\\-\\->",relevance:0},s,e.C_LINE_COMMENT_MODE,m,_,{className:"module-def",begin:"\\bmodule\\s+"+t+"\\s+"+n+"\\s+=\\s+{",end:"}",returnBegin:!0,keywords:a,relevance:0,contains:[{className:"module",relevance:0,begin:n},{begin:"{",end:"}",skip:!0}].concat(d)},g]}}},function(e,t){e.exports=function(e){return{keywords:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",illegal:"\]$/},{begin:/<\//,end:/>/},{begin:/^facet /,end:/\}/},{begin:"^1\\.\\.(\\d+)$",end:/$/}],illegal:/./},e.COMMENT("^#","$"),i,a,r,{begin:/[\w-]+\=([^\s\{\}\[\]\(\)]+)/,relevance:0,returnBegin:!0,contains:[{className:"attribute",begin:/[^=]+/},{begin:/=/,endsWithParent:!0,relevance:0,contains:[i,a,r,{className:"literal",begin:"\\b("+n.split(" ").join("|")+")\\b"},{begin:/("[^"]*"|[^\s\{\}\[\]]+)/}]}]},{className:"number",begin:/\*[0-9a-fA-F]+/},{begin:"\\b("+"add remove enable disable set get print export edit find run debug error info warning".split(" ").join("|")+")([\\s[(]|])",returnBegin:!0,contains:[{className:"builtin-name",begin:/\w+/}]},{className:"built_in",variants:[{begin:"(\\.\\./|/|\\s)(("+"traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firewall firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw".split(" ").join("|")+");?\\s)+",relevance:10},{begin:/\.\./}]}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},illegal:""}]}}},function(e,t){e.exports=function(e){return{aliases:["sas","SAS"],case_insensitive:!0,keywords:{literal:"null missing _all_ _automatic_ _character_ _infile_ _n_ _name_ _null_ _numeric_ _user_ _webout_",meta:"do if then else end until while abort array attrib by call cards cards4 catname continue datalines datalines4 delete delim delimiter display dm drop endsas error file filename footnote format goto in infile informat input keep label leave length libname link list lostcard merge missing modify options output out page put redirect remove rename replace retain return select set skip startsas stop title update waitsas where window x systask add and alter as cascade check create delete describe distinct drop foreign from group having index insert into in key like message modify msgtype not null on or order primary references reset restrict select set table unique update validate view where"},contains:[{className:"keyword",begin:/^\s*(proc [\w\d_]+|data|run|quit)[\s\;]/},{className:"variable",begin:/\&[a-zA-Z_\&][a-zA-Z0-9_]*\.?/},{className:"emphasis",begin:/^\s*datalines|cards.*;/,end:/^\s*;\s*$/},{className:"built_in",begin:"%(bquote|nrbquote|cmpres|qcmpres|compstor|datatyp|display|do|else|end|eval|global|goto|if|index|input|keydef|label|left|length|let|local|lowcase|macro|mend|nrbquote|nrquote|nrstr|put|qcmpres|qleft|qlowcase|qscan|qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|substr|superq|syscall|sysevalf|sysexec|sysfunc|sysget|syslput|sysprod|sysrc|sysrput|then|to|trim|unquote|until|upcase|verify|while|window)"},{className:"name",begin:/%[a-zA-Z_][a-zA-Z_0-9]*/},{className:"meta",begin:"[^%](abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|cexist|cinv|close|cnonct|collate|compbl|compound|compress|cos|cosh|css|curobs|cv|daccdb|daccdbsl|daccsl|daccsyd|dacctab|dairy|date|datejul|datepart|datetime|day|dclose|depdb|depdbsl|depdbsl|depsl|depsl|depsyd|depsyd|deptab|deptab|dequote|dhms|dif|digamma|dim|dinfo|dnum|dopen|doptname|doptnum|dread|dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|filename|fileref|finfo|finv|fipname|fipnamel|fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|hms|hosthelp|hour|ibessel|index|indexc|indexw|input|inputc|inputn|int|intck|intnx|intrr|irr|jbessel|juldate|kurtosis|lag|lbound|left|length|lgamma|libname|libref|log|log10|log2|logpdf|logpmf|logsdf|lowcase|max|mdy|mean|min|minute|mod|month|mopen|mort|n|netpv|nmiss|normal|note|npv|open|ordinal|pathname|pdf|peek|peekc|pmf|point|poisson|poke|probbeta|probbnml|probchi|probf|probgam|probhypr|probit|probnegb|probnorm|probt|put|putc|putn|qtr|quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|rewind|right|round|saving|scan|sdf|second|sign|sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|stfips|stname|stnamel|substr|sum|symget|sysget|sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|tinv|tnonct|today|translate|tranwrd|trigamma|trim|trimn|trunc|uniform|upcase|uss|var|varfmt|varinfmt|varlabel|varlen|varname|varnum|varray|varrayx|vartype|verify|vformat|vformatd|vformatdx|vformatn|vformatnx|vformatw|vformatwx|vformatx|vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|vinformatn|vinformatnx|vinformatw|vinformatwx|vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|zipnamel|zipstate)[(]"},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.COMMENT("\\*",";"),e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},n={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[t],relevance:10}]},r={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},i={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},a={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[r]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[r]},i]},o={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[i]};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},r,o,a,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",n={className:"literal",begin:"(#t|#f|#\\\\"+t+"|#\\\\.)"},r={className:"number",variants:[{begin:"(\\-|\\+)?\\d+([./]\\d+)?",relevance:0},{begin:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},i=e.QUOTE_STRING_MODE,a=[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#\\|","\\|#")],o={begin:t,relevance:0},s={className:"symbol",begin:"'"+t},l={endsWithParent:!0,relevance:0},c={variants:[{begin:/'/},{begin:"`"}],contains:[{begin:"\\(",end:"\\)",contains:["self",n,i,r,o,s]}]},d={className:"name",begin:t,lexemes:t,keywords:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},u={variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}],contains:[{begin:/lambda/,endsWithParent:!0,returnBegin:!0,contains:[d,{begin:/\(/,end:/\)/,endsParent:!0,contains:[o]}]},d,l]};return l.contains=[n,r,i,o,s,c,u].concat(a),{illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},r,i,s,c,u].concat(a)}}},function(e,t){e.exports=function(e){var t=[e.C_NUMBER_MODE,{className:"string",begin:"'|\"",end:"'|\"",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]}];return{aliases:["sci"],lexemes:/%?\w+/,keywords:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},illegal:'("|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{begin:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",end:"",relevance:0},{begin:"\\[",end:"\\]'*[\\.']*",relevance:0,contains:t},e.COMMENT("//","$")].concat(t)}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},n={className:"number",begin:"#[0-9A-Fa-f]+"};e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE;return{case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,n,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n,e.CSS_NUMBER_MODE]}]}}},function(e,t){e.exports=function(e){return{aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}},function(e,t){e.exports=function(e){var t=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"];return{aliases:["smali"],contains:[{className:"string",begin:'"',end:'"',relevance:0},e.COMMENT("#","$",{relevance:0}),{className:"keyword",variants:[{begin:"\\s*\\.end\\s[a-zA-Z0-9]*"},{begin:"^[ ]*\\.[a-zA-Z]*",relevance:0},{begin:"\\s:[a-zA-Z_0-9]*",relevance:0},{begin:"\\s("+["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"].join("|")+")"}]},{className:"built_in",variants:[{begin:"\\s("+t.join("|")+")\\s"},{begin:"\\s("+t.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",relevance:10},{begin:"\\s("+["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"].join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",relevance:10}]},{className:"class",begin:"L[^(;:\n]*;",relevance:0},{begin:"[vp][0-9]+"}]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:"\\$.{1}"},n={className:"symbol",begin:"#"+e.UNDERSCORE_IDENT_RE};return{aliases:["st"],keywords:"self super nil true false thisContext",contains:[e.COMMENT('"','"'),e.APOS_STRING_MODE,{className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{begin:"[a-z][a-zA-Z0-9_]*:",relevance:0},e.C_NUMBER_MODE,n,t,{begin:"\\|[ ]*[a-z][a-zA-Z0-9_]*([ ]+[a-z][a-zA-Z0-9_]*)*[ ]*\\|",returnBegin:!0,end:/\|/,illegal:/\S/,contains:[{begin:"(\\|[ ]*)?[a-z][a-zA-Z0-9_]*"}]},{begin:"\\#\\(",end:"\\)",contains:[e.APOS_STRING_MODE,t,e.C_NUMBER_MODE,n]}]}}},function(e,t){e.exports=function(e){return{aliases:["ml"],keywords:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:/\[(\|\|)?\]|\(\)/,relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){var t={className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]},{begin:"'",end:"'",contains:[{begin:"''",relevance:0}]}]},n={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"define undef ifdef ifndef else endif include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(t,{className:"meta-string"}),{className:"meta-string",begin:/<[^\n>]*>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]};return{aliases:["sqf"],case_insensitive:!0,keywords:{keyword:"case catch default do else exit exitWith for forEach from if private switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addForce addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addTorque addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret admin agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airplaneThrottle airportSide AISFinishHeal alive all3DENEntities allAirports allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSimpleObjects allSites allTurrets allUnits allUnitsUAV allVariables ammo ammoOnPylon and animate animateBay animateDoor animatePylon animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canTriggerDynamicSimulation canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory collectiveRTD combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configProperties configSourceAddonList configSourceMod configSourceModList confirmSensorTarget connectTerminalToUAV controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctAddHeader ctAddRow ctClear ctCurSel ctData ctFindHeaderRows ctFindRowHeader ctHeaderControls ctHeaderCount ctRemoveHeaders ctRemoveRows ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPixelPrecision ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlTextWidth ctrlType ctrlVisible ctRowControls ctRowCount ctSetCurSel ctSetData ctSetHeaderTemplate ctSetRowTemplate ctSetValue ctValue curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteGroupWhenEmpty deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureFrameToFile diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_lightNewLoad diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_setLightNew diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableMapIndicators disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle drawTriangle driver drop dynamicSimulationDistance dynamicSimulationDistanceCoef dynamicSimulationEnabled dynamicSimulationSystemEnabled echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableAutoStartUpRTD enableAutoTrimRTD enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableDynamicSimulation enableDynamicSimulationSystem enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableInfoPanelComponent enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableTraffic enableUAVConnectability enableUAVWaypoints enableVehicleCargo enableVehicleSensor enableWeaponDisassembly endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities environmentEnabled estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findIf findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagAnimationPhase flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceFlagTexture forceFollowRoad forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam forgetTarget format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllEnvSoundControllers getAllHitPointsDamage getAllOwnedMines getAllSoundControllers getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getCompatiblePylonMagazines getConnectedUAV getContainerMaxLoad getCursorObjectParams getCustomAimCoef getDammage getDescription getDir getDirVisual getDLCAssetsUsage getDLCAssetsUsageByName getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getEnvSoundController getFatigue getForcedFlagTexture getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getMusicPlayedTime getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlateNumber getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getPylonMagazines getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSoundController getSoundControllerResult getSpeed getStamina getStatValue getSuppression getTerrainGrid getTerrainHeightASL getText getTotalDLCUsageTime getUnitLoadout getUnitTrait getUserMFDText getUserMFDvalue getVariable getVehicleCargo getWeaponCargo getWeaponSway getWingsOrientationRTD getWingsPositionRTD getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState inflame inflamed infoPanel infoPanelComponentEnabled infoPanelComponents infoPanels inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDamageAllowed isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isGroupDeletedWhenEmpty isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLaserOn isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSimpleObject isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUIContext isUniformAllowed isVehicleCargo isVehicleRadarOn isVehicleSensorEnabled isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbColorRight lbCurSel lbData lbDelete lbIsSelected lbPicture lbPictureRight lbSelection lbSetColor lbSetColorRight lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetPictureRight lbSetPictureRightColor lbSetPictureRightColorDisabled lbSetPictureRightColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetText lbSetTextRight lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbTextRight lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaderboardRequestRowsFriends leaderboardsRequestUploadScore leaderboardsRequestUploadScoreKeepBest leaderboardState leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects listRemoteTargets listVehicleSensors ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbSort lnbSortByValue lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modelToWorldVisualWorld modelToWorldWorld modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberOfEnginesRTD numberToDate objectCurators objectFromNetId objectParent objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openSteamApp openYoutubeVideo or orderGetIn overcast overcastForecast owner param params parseNumber parseSimpleArray parseText parsingNamespace particlesQuality pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remoteExecutedOwner remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponAttachmentCargo removeWeaponCargo removeWeaponGlobal removeWeaponTurret reportRemoteTarget requiredVersion resetCamShake resetSubgroupDirection resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectRandomWeighted selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENLogicType set3DENMissionAttribute set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setActualCollectiveRTD setAirplaneThrottle setAirportSide setAmmo setAmmoCargo setAmmoOnPylon setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setBrakesRTD setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTI setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setConvoySeparation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setCustomWeightRTD setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDriveOnPath setDropInterval setDynamicSimulationDistance setDynamicSimulationDistanceCoef setEditorMode setEditorObjectScope setEffectCondition setEngineRPMRTD setFace setFaceAnimation setFatigue setFeatureType setFlagAnimationPhase setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setInfoPanel setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlateNumber setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setPylonLoadOut setPylonsPriority setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setRotorBrakeRTD setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskMarkerOffset setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTrafficDensity setTrafficDistance setTrafficGap setTrafficSpeed setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setUserMFDText setUserMFDvalue setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleRadar setVehicleReceiveRemoteTargets setVehicleReportOwnPosition setVehicleReportRemoteTargets setVehicleTIPars setVehicleVarName setVelocity setVelocityModelSpace setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWantedRPMRTD setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWingForceScaleRTD setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideChat sideEnemy sideFriendly sideRadio simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targets targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskParent taskResult taskState taskType teamMember teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL terrainIntersectAtASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerDynamicSimulation triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCollapseAll tvCount tvCurSel tvData tvDelete tvExpand tvExpandAll tvPicture tvSetColor tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves userInputDisabled vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorModelToWorld vectorModelToWorldVisual vectorMultiply vectorNormalized vectorUp vectorUpVisual vectorWorldToModel vectorWorldToModelVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicleReceiveRemoteTargets vehicleReportOwnPosition vehicleReportRemoteTargets vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD WFSideText wind ",literal:"blufor civilian configNull controlNull displayNull east endl false grpNull independent lineBreak locationNull nil objNull opfor pi resistance scriptNull sideAmbientLife sideEmpty sideLogic sideUnknown taskNull teamMemberNull true west"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.NUMBER_MODE,{className:"variable",begin:/\b_+[a-zA-Z_]\w*/},{className:"title",begin:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},t,n],illegal:/#|^\$ /}}},function(e,t){e.exports=function(e){var t=e.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["stanfuncs"],keywords:{title:["functions","model","data","parameters","quantities","transformed","generated"].join(" "),keyword:["for","in","if","else","while","break","continue","return"].concat(["int","real","vector","ordered","positive_ordered","simplex","unit_vector","row_vector","matrix","cholesky_factor_corr|10","cholesky_factor_cov|10","corr_matrix|10","cov_matrix|10","void"]).concat(["print","reject","increment_log_prob|10","integrate_ode|10","integrate_ode_rk45|10","integrate_ode_bdf|10","algebra_solver"]).join(" "),built_in:["Phi","Phi_approx","abs","acos","acosh","algebra_solver","append_array","append_col","append_row","asin","asinh","atan","atan2","atanh","bernoulli_cdf","bernoulli_lccdf","bernoulli_lcdf","bernoulli_logit_lpmf","bernoulli_logit_rng","bernoulli_lpmf","bernoulli_rng","bessel_first_kind","bessel_second_kind","beta_binomial_cdf","beta_binomial_lccdf","beta_binomial_lcdf","beta_binomial_lpmf","beta_binomial_rng","beta_cdf","beta_lccdf","beta_lcdf","beta_lpdf","beta_rng","binary_log_loss","binomial_cdf","binomial_coefficient_log","binomial_lccdf","binomial_lcdf","binomial_logit_lpmf","binomial_lpmf","binomial_rng","block","categorical_logit_lpmf","categorical_logit_rng","categorical_lpmf","categorical_rng","cauchy_cdf","cauchy_lccdf","cauchy_lcdf","cauchy_lpdf","cauchy_rng","cbrt","ceil","chi_square_cdf","chi_square_lccdf","chi_square_lcdf","chi_square_lpdf","chi_square_rng","cholesky_decompose","choose","col","cols","columns_dot_product","columns_dot_self","cos","cosh","cov_exp_quad","crossprod","csr_extract_u","csr_extract_v","csr_extract_w","csr_matrix_times_vector","csr_to_dense_matrix","cumulative_sum","determinant","diag_matrix","diag_post_multiply","diag_pre_multiply","diagonal","digamma","dims","dirichlet_lpdf","dirichlet_rng","distance","dot_product","dot_self","double_exponential_cdf","double_exponential_lccdf","double_exponential_lcdf","double_exponential_lpdf","double_exponential_rng","e","eigenvalues_sym","eigenvectors_sym","erf","erfc","exp","exp2","exp_mod_normal_cdf","exp_mod_normal_lccdf","exp_mod_normal_lcdf","exp_mod_normal_lpdf","exp_mod_normal_rng","expm1","exponential_cdf","exponential_lccdf","exponential_lcdf","exponential_lpdf","exponential_rng","fabs","falling_factorial","fdim","floor","fma","fmax","fmin","fmod","frechet_cdf","frechet_lccdf","frechet_lcdf","frechet_lpdf","frechet_rng","gamma_cdf","gamma_lccdf","gamma_lcdf","gamma_lpdf","gamma_p","gamma_q","gamma_rng","gaussian_dlm_obs_lpdf","get_lp","gumbel_cdf","gumbel_lccdf","gumbel_lcdf","gumbel_lpdf","gumbel_rng","head","hypergeometric_lpmf","hypergeometric_rng","hypot","inc_beta","int_step","integrate_ode","integrate_ode_bdf","integrate_ode_rk45","inv","inv_Phi","inv_chi_square_cdf","inv_chi_square_lccdf","inv_chi_square_lcdf","inv_chi_square_lpdf","inv_chi_square_rng","inv_cloglog","inv_gamma_cdf","inv_gamma_lccdf","inv_gamma_lcdf","inv_gamma_lpdf","inv_gamma_rng","inv_logit","inv_sqrt","inv_square","inv_wishart_lpdf","inv_wishart_rng","inverse","inverse_spd","is_inf","is_nan","lbeta","lchoose","lgamma","lkj_corr_cholesky_lpdf","lkj_corr_cholesky_rng","lkj_corr_lpdf","lkj_corr_rng","lmgamma","lmultiply","log","log10","log1m","log1m_exp","log1m_inv_logit","log1p","log1p_exp","log2","log_determinant","log_diff_exp","log_falling_factorial","log_inv_logit","log_mix","log_rising_factorial","log_softmax","log_sum_exp","logistic_cdf","logistic_lccdf","logistic_lcdf","logistic_lpdf","logistic_rng","logit","lognormal_cdf","lognormal_lccdf","lognormal_lcdf","lognormal_lpdf","lognormal_rng","machine_precision","matrix_exp","max","mdivide_left_spd","mdivide_left_tri_low","mdivide_right_spd","mdivide_right_tri_low","mean","min","modified_bessel_first_kind","modified_bessel_second_kind","multi_gp_cholesky_lpdf","multi_gp_lpdf","multi_normal_cholesky_lpdf","multi_normal_cholesky_rng","multi_normal_lpdf","multi_normal_prec_lpdf","multi_normal_rng","multi_student_t_lpdf","multi_student_t_rng","multinomial_lpmf","multinomial_rng","multiply_log","multiply_lower_tri_self_transpose","neg_binomial_2_cdf","neg_binomial_2_lccdf","neg_binomial_2_lcdf","neg_binomial_2_log_lpmf","neg_binomial_2_log_rng","neg_binomial_2_lpmf","neg_binomial_2_rng","neg_binomial_cdf","neg_binomial_lccdf","neg_binomial_lcdf","neg_binomial_lpmf","neg_binomial_rng","negative_infinity","normal_cdf","normal_lccdf","normal_lcdf","normal_lpdf","normal_rng","not_a_number","num_elements","ordered_logistic_lpmf","ordered_logistic_rng","owens_t","pareto_cdf","pareto_lccdf","pareto_lcdf","pareto_lpdf","pareto_rng","pareto_type_2_cdf","pareto_type_2_lccdf","pareto_type_2_lcdf","pareto_type_2_lpdf","pareto_type_2_rng","pi","poisson_cdf","poisson_lccdf","poisson_lcdf","poisson_log_lpmf","poisson_log_rng","poisson_lpmf","poisson_rng","positive_infinity","pow","print","prod","qr_Q","qr_R","quad_form","quad_form_diag","quad_form_sym","rank","rayleigh_cdf","rayleigh_lccdf","rayleigh_lcdf","rayleigh_lpdf","rayleigh_rng","reject","rep_array","rep_matrix","rep_row_vector","rep_vector","rising_factorial","round","row","rows","rows_dot_product","rows_dot_self","scaled_inv_chi_square_cdf","scaled_inv_chi_square_lccdf","scaled_inv_chi_square_lcdf","scaled_inv_chi_square_lpdf","scaled_inv_chi_square_rng","sd","segment","sin","singular_values","sinh","size","skew_normal_cdf","skew_normal_lccdf","skew_normal_lcdf","skew_normal_lpdf","skew_normal_rng","softmax","sort_asc","sort_desc","sort_indices_asc","sort_indices_desc","sqrt","sqrt2","square","squared_distance","step","student_t_cdf","student_t_lccdf","student_t_lcdf","student_t_lpdf","student_t_rng","sub_col","sub_row","sum","tail","tan","tanh","target","tcrossprod","tgamma","to_array_1d","to_array_2d","to_matrix","to_row_vector","to_vector","trace","trace_gen_quad_form","trace_quad_form","trigamma","trunc","uniform_cdf","uniform_lccdf","uniform_lcdf","uniform_lpdf","uniform_rng","variance","von_mises_lpdf","von_mises_rng","weibull_cdf","weibull_lccdf","weibull_lcdf","weibull_lpdf","weibull_rng","wiener_lpdf","wishart_lpdf","wishart_rng"].join(" ")},lexemes:e.IDENT_RE,contains:[e.C_LINE_COMMENT_MODE,e.COMMENT(/#/,/$/,{relevance:0,keywords:{"meta-keyword":"include"}}),e.COMMENT(/\/\*/,/\*\//,{relevance:0,contains:[{className:"doctag",begin:/@(return|param)/}]}),{begin:/<\s*lower\s*=/,keywords:"lower"},{begin:/[<,]*upper\s*=/,keywords:"upper"},{className:"keyword",begin:/\btarget\s*\+=/,relevance:10},{begin:"~\\s*("+e.IDENT_RE+")\\s*\\(",keywords:["bernoulli","bernoulli_logit","beta","beta_binomial","binomial","binomial_logit","categorical","categorical_logit","cauchy","chi_square","dirichlet","double_exponential","exp_mod_normal","exponential","frechet","gamma","gaussian_dlm_obs","gumbel","hypergeometric","inv_chi_square","inv_gamma","inv_wishart","lkj_corr","lkj_corr_cholesky","logistic","lognormal","multi_gp","multi_gp_cholesky","multi_normal","multi_normal_cholesky","multi_normal_prec","multi_student_t","multinomial","neg_binomial","neg_binomial_2","neg_binomial_2_log","normal","ordered_logistic","pareto","pareto_type_2","poisson","poisson_log","rayleigh","scaled_inv_chi_square","skew_normal","student_t","uniform","von_mises","weibull","wiener","wishart"].join(" ")},{className:"number",variants:[{begin:/\b\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/},{begin:/\.\d+(?:[eE][+-]?\d+)?\b/}],relevance:0},{className:"string",begin:'"',end:'"',relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["do","ado"],case_insensitive:!0,keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",contains:[{className:"symbol",begin:/`[a-zA-Z0-9_]+'/},{className:"variable",begin:/\$\{?[a-zA-Z0-9_]+\}?/},{className:"string",variants:[{begin:'`"[^\r\n]*?"\''},{begin:'"[^\r\n"]*"'}]},{className:"built_in",variants:[{begin:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\()"}]},e.COMMENT("^[ \t]*\\*.*$",!1),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["p21","step","stp"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:{keyword:"HEADER ENDSEC DATA"},contains:[{className:"meta",begin:"ISO-10303-21;",relevance:10},{className:"meta",begin:"END-ISO-10303-21;",relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*!","\\*/"),e.C_NUMBER_MODE,e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"symbol",variants:[{begin:"#",end:"\\d+",illegal:"\\W"}]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:"\\$"+e.IDENT_RE},n={className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"};return{aliases:["styl"],case_insensitive:!1,keywords:"if else for in",illegal:"("+["\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)","(\\bdef\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"].join("|")+")",contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*(?=[\\.\\s\\n\\[\\:,])",className:"selector-class"},{begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*(?=[\\.\\s\\n\\[\\:,])",className:"selector-id"},{begin:"\\b("+["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"].join("|")+")(?=[\\.\\s\\n\\[\\:,])",className:"selector-tag"},{begin:"&?:?:\\b("+["after","before","first-letter","first-line","active","first-child","focus","hover","lang","link","visited"].join("|")+")(?=[\\.\\s\\n\\[\\:,])"},{begin:"@("+["charset","css","debug","extend","font-face","for","import","include","media","mixin","page","warn","while"].join("|")+")\\b"},t,e.CSS_NUMBER_MODE,e.NUMBER_MODE,{className:"function",begin:"^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",illegal:"[\\n]",returnBegin:!0,contains:[{className:"title",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{className:"params",begin:/\(/,end:/\)/,contains:[n,t,e.APOS_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE]}]},{className:"attribute",begin:"\\b("+["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-ligatures","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse().join("|")+")\\b",starts:{end:/;|$/,contains:[n,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/\./,relevance:0}}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[{className:"string",begin:"\\[\n(multipart)?",end:"\\]\n"},{className:"string",begin:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},{className:"string",begin:"(\\+|-)\\d+"},{className:"keyword",relevance:10,variants:[{begin:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{begin:"^progress(:?)(\\s+)?(pop|push)?"},{begin:"^tags:"},{begin:"^time:"}]}]}}},function(e,t){e.exports=function(e){var t={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),r={className:"subst",begin:/\\\(/,end:"\\)",keywords:t,contains:[]},i={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},a={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return r.contains=[a],{keywords:t,contains:[i,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},a,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,contains:["self",a,i,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:t,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}},function(e,t){e.exports=function(e){return{contains:[{className:"comment",begin:/\$noop\(/,end:/\)/,contains:[{begin:/\(/,end:/\)/,contains:["self",{begin:/\\./}]}],relevance:10},{className:"keyword",begin:/\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,end:/\(/,excludeEnd:!0},{className:"variable",begin:/%[_a-zA-Z0-9:]*/,end:"%"},{className:"symbol",begin:/\\./}]}}},function(e,t){e.exports=function(e){var t={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:"true false yes no null",keywords:{literal:"true false yes no null"}},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"meta",variants:[{begin:"^TAP version (\\d+)$"},{begin:"^1\\.\\.(\\d+)$"}]},{begin:"(s+)?---$",end:"\\.\\.\\.$",subLanguage:"yaml",relevance:0},{className:"number",begin:" (\\d+) "},{className:"symbol",variants:[{begin:"^ok"},{begin:"^not ok"}]}]}}},function(e,t){e.exports=function(e){return{aliases:["tk"],keywords:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",contains:[e.COMMENT(";[ \\t]*#","$"),e.COMMENT("^[ \\t]*#","$"),{beginKeywords:"proc",end:"[\\{]",excludeEnd:!0,contains:[{className:"title",begin:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"[ \\t\\n\\r]",endsWithParent:!0,excludeEnd:!0}]},{excludeEnd:!0,variants:[{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",end:"[^a-zA-Z0-9_\\}\\$]"},{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},{className:"number",variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]}]}}},function(e,t){e.exports=function(e){var t={className:"tag",begin:/\\/,relevance:0,contains:[{className:"name",variants:[{begin:/[a-zA-Z\u0430-\u044f\u0410-\u042f]+[*]?/},{begin:/[^a-zA-Z\u0430-\u044f\u0410-\u042f0-9]/}],starts:{endsWithParent:!0,relevance:0,contains:[{className:"string",variants:[{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/}]},{begin:/\s*=\s*/,endsWithParent:!0,relevance:0,contains:[{className:"number",begin:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{contains:[t,{className:"formula",contains:[t],relevance:0,variants:[{begin:/\$\$/,end:/\$\$/},{begin:/\$/,end:/\$/}]},e.COMMENT("%","$",{relevance:0})]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:"bool byte i16 i32 i64 double string binary",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"struct enum service exception",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:"\\b(set|list|map)\\s*<",end:">",keywords:"bool byte i16 i32 i64 double string binary",contains:["self"]}]}}},function(e,t){e.exports=function(e){var t={className:"number",begin:"[1-9][0-9]*",relevance:0},n={className:"symbol",begin:":[^\\]]+"};return{keywords:{keyword:"ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN SUBSTR FINDSTR VOFFSET PROG ATTR MN POS",literal:"ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET"},contains:[{className:"built_in",begin:"(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",end:"\\]",contains:["self",t,n]},{className:"built_in",begin:"(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",end:"\\]",contains:["self",t,e.QUOTE_STRING_MODE,n]},{className:"keyword",begin:"/(PROG|ATTR|MN|POS|END)\\b"},{className:"keyword",begin:"(CALL|RUN|POINT_LOGIC|LBL)\\b"},{className:"keyword",begin:"\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"},{className:"number",begin:"\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",relevance:0},e.COMMENT("//","[;$]"),e.COMMENT("!","[;$]"),e.COMMENT("--eg:","$"),e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"'"},e.C_NUMBER_MODE,{className:"variable",begin:"\\$[A-Za-z0-9_]+"}]}}},function(e,t){e.exports=function(e){var t="attribute block constant cycle date dump include max min parent random range source template_from_string",n={beginKeywords:t,keywords:{name:t},relevance:0,contains:[{className:"params",begin:"\\(",end:"\\)"}]},r={begin:/\|[A-Za-z_]+:?/,keywords:"abs batch capitalize column convert_encoding date date_modify default escape filter first format inky_to_html inline_css join json_encode keys last length lower map markdown merge nl2br number_format raw reduce replace reverse round slice sort spaceless split striptags title trim upper url_encode",contains:[n]},i="apply autoescape block deprecated do embed extends filter flush for from if import include macro sandbox set use verbatim with";return i=i+" "+i.split(" ").map((function(e){return"end"+e})).join(" "),{aliases:["craftcms"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:i,starts:{endsWithParent:!0,contains:[r,n],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:["self",r,n]}]}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},r={begin:"\\(",end:/\)/,keywords:t,contains:["self",e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.NUMBER_MODE]},i={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,r]},a={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},s={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},c={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]};return o.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,l,c,a,e.REGEXP_MODE],{aliases:["ts"],keywords:t,contains:[{className:"meta",begin:/^\s*['"]use strict['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,l,c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+e.IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.IDENT_RE},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",e.inherit(e.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),i],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",i]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+e.IDENT_RE,relevance:0},n,r]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},contains:[{className:"class",beginKeywords:"class interface namespace",end:"{",excludeEnd:!0,illegal:"[^,:\\n\\s\\.]",contains:[e.UNDERSCORE_TITLE_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""',relevance:5},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"^#",end:"$",relevance:2}]}}},function(e,t){e.exports=function(e){return{aliases:["vb"],case_insensitive:!0,keywords:{keyword:"addhandler addressof alias and andalso aggregate ansi as async assembly auto await binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue iterator join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass nameof namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor yield",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},illegal:"//|{|}|endif|gosub|variant|wend|^\\$ ",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT("'","$",{returnBegin:!0,contains:[{className:"doctag",begin:"'''|\x3c!--|--\x3e",contains:[e.PHRASAL_WORDS_MODE]},{className:"doctag",begin:"",contains:[e.PHRASAL_WORDS_MODE]}]}),e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end region externalsource"}}]}}},function(e,t){e.exports=function(e){return{aliases:["vbs"],case_insensitive:!0,keywords:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},illegal:"//",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT(/'/,/$/,{relevance:0}),e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[{begin:"<%",end:"%>",subLanguage:"vbscript"}]}}},function(e,t){e.exports=function(e){return{aliases:["v","sv","svh"],case_insensitive:!1,keywords:{keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"},lexemes:/[\w\$]+/,contains:[e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"number",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\b([0-9_])+",relevance:0}]},{className:"variable",variants:[{begin:"#\\((?!parameter).+\\)"},{begin:"\\.\\w+",relevance:0}]},{className:"meta",begin:"`",end:"$",keywords:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},relevance:0}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,keywords:{keyword:"abs access after alias all and architecture array assert assume assume_guarantee attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package parameter port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable view vmode vprop vunit wait when while with xnor xor",built_in:"boolean bit character integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_logic std_logic_vector unsigned signed boolean_vector integer_vector std_ulogic std_ulogic_vector unresolved_unsigned u_unsigned unresolved_signed u_signed real_vector time_vector",literal:"false true note warning error failure line text side width"},illegal:"{",contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT("--","$"),e.QUOTE_STRING_MODE,{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"string",begin:"'(U|X|0|1|Z|W|L|H|-)'",contains:[e.BACKSLASH_ESCAPE]},{className:"symbol",begin:"'[A-Za-z](_?[A-Za-z0-9])*",contains:[e.BACKSLASH_ESCAPE]}]}}},function(e,t){e.exports=function(e){return{lexemes:/[!#@\w]+/,keywords:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},illegal:/;/,contains:[e.NUMBER_MODE,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:/"(\\"|\n\\|[^"\n])*"/},e.COMMENT('"',"$"),{className:"variable",begin:/[bwtglsav]:[\w\d_]*/},{className:"function",beginKeywords:"function function!",end:"$",relevance:0,contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{className:"symbol",begin:/<[\w-]+>/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:"[.%]?"+e.IDENT_RE,keywords:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}},function(e,t){e.exports=function(e){var t={keyword:"if then else do while until for loop import with is as where when by data constant integer real text name boolean symbol infix prefix postfix block tree",literal:"true false nil",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts"},n={className:"string",begin:'"',end:'"',illegal:"\\n"},r={beginKeywords:"import",end:"$",keywords:t,contains:[n]},i={className:"function",begin:/[a-z][^\n]*->/,returnBegin:!0,end:/->/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,keywords:t}})]};return{aliases:["tao"],lexemes:/[a-zA-Z][a-zA-Z0-9_?]*/,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:"<<",end:">>"},i,r,{className:"number",begin:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"},e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=[{className:"variable",begin:/[\$][\w-:]+/},{className:"built_in",variants:[{begin:/\barray\:/,end:/(?:append|filter|flatten|fold\-(?:left|right)|for-each(?:\-pair)?|get|head|insert\-before|join|put|remove|reverse|size|sort|subarray|tail)\b/},{begin:/\bmap\:/,end:/(?:contains|entry|find|for\-each|get|keys|merge|put|remove|size)\b/},{begin:/\bmath\:/,end:/(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\b/},{begin:/\bop\:/,end:/\(/,excludeEnd:!0},{begin:/\bfn\:/,end:/\(/,excludeEnd:!0},{begin:/[^<\/\$\:'"-]\b(?:abs|accumulator\-(?:after|before)|adjust\-(?:date(?:Time)?|time)\-to\-timezone|analyze\-string|apply|available\-(?:environment\-variables|system\-properties)|avg|base\-uri|boolean|ceiling|codepoints?\-(?:equal|to\-string)|collation\-key|collection|compare|concat|contains(?:\-token)?|copy\-of|count|current(?:\-)?(?:date(?:Time)?|time|group(?:ing\-key)?|output\-uri|merge\-(?:group|key))?data|dateTime|days?\-from\-(?:date(?:Time)?|duration)|deep\-equal|default\-(?:collation|language)|distinct\-values|document(?:\-uri)?|doc(?:\-available)?|element\-(?:available|with\-id)|empty|encode\-for\-uri|ends\-with|environment\-variable|error|escape\-html\-uri|exactly\-one|exists|false|filter|floor|fold\-(?:left|right)|for\-each(?:\-pair)?|format\-(?:date(?:Time)?|time|integer|number)|function\-(?:arity|available|lookup|name)|generate\-id|has\-children|head|hours\-from\-(?:dateTime|duration|time)|id(?:ref)?|implicit\-timezone|in\-scope\-prefixes|index\-of|innermost|insert\-before|iri\-to\-uri|json\-(?:doc|to\-xml)|key|lang|last|load\-xquery\-module|local\-name(?:\-from\-QName)?|(?:lower|upper)\-case|matches|max|minutes\-from\-(?:dateTime|duration|time)|min|months?\-from\-(?:date(?:Time)?|duration)|name(?:space\-uri\-?(?:for\-prefix|from\-QName)?)?|nilled|node\-name|normalize\-(?:space|unicode)|not|number|one\-or\-more|outermost|parse\-(?:ietf\-date|json)|path|position|(?:prefix\-from\-)?QName|random\-number\-generator|regex\-group|remove|replace|resolve\-(?:QName|uri)|reverse|root|round(?:\-half\-to\-even)?|seconds\-from\-(?:dateTime|duration|time)|snapshot|sort|starts\-with|static\-base\-uri|stream\-available|string\-?(?:join|length|to\-codepoints)?|subsequence|substring\-?(?:after|before)?|sum|system\-property|tail|timezone\-from\-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type\-available|unordered|unparsed\-(?:entity|text)?\-?(?:public\-id|uri|available|lines)?|uri\-collection|xml\-to\-json|years?\-from\-(?:date(?:Time)?|duration)|zero\-or\-one)\b/},{begin:/\blocal\:/,end:/\(/,excludeEnd:!0},{begin:/\bzip\:/,end:/(?:zip\-file|(?:xml|html|text|binary)\-entry| (?:update\-)?entries)\b/},{begin:/\b(?:util|db|functx|app|xdmp|xmldb)\:/,end:/\(/,excludeEnd:!0}]},{className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"comment",begin:"\\(:",end:":\\)",relevance:10,contains:[{className:"doctag",begin:"@\\w+"}]},{className:"meta",begin:/%[\w-:]+/},{className:"title",begin:/\bxquery version "[13]\.[01]"\s?(?:encoding ".+")?/,end:/;/},{beginKeywords:"element attribute comment document processing-instruction",end:"{",excludeEnd:!0},{begin:/<([\w\._:\-]+)((\s*.*)=('|").*('|"))?>/,end:/(\/[\w\._:\-]+>)/,subLanguage:"xml",contains:[{begin:"{",end:"}",subLanguage:"xquery"},"self"]}];return{aliases:["xpath","xq"],case_insensitive:!1,lexemes:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{keyword:"module schema namespace boundary-space preserve no-preserve strip default collation base-uri ordering context decimal-format decimal-separator copy-namespaces empty-sequence except exponent-separator external grouping-separator inherit no-inherit lax minus-sign per-mille percent schema-attribute schema-element strict unordered zero-digit declare import option function validate variable for at in let where order group by return if then else tumbling sliding window start when only end previous next stable ascending descending allowing empty greatest least some every satisfies switch case typeswitch try catch and or to union intersect instance of treat as castable cast map array delete insert into replace value rename copy modify update",type:"item document-node node attribute document element comment namespace namespace-node processing-instruction text construction xs:anyAtomicType xs:untypedAtomic xs:duration xs:time xs:decimal xs:float xs:double xs:gYearMonth xs:gYear xs:gMonthDay xs:gMonth xs:gDay xs:boolean xs:base64Binary xs:hexBinary xs:anyURI xs:QName xs:NOTATION xs:dateTime xs:dateTimeStamp xs:date xs:string xs:normalizedString xs:token xs:language xs:NMTOKEN xs:Name xs:NCName xs:ID xs:IDREF xs:ENTITY xs:integer xs:nonPositiveInteger xs:negativeInteger xs:long xs:int xs:short xs:byte xs:nonNegativeInteger xs:unisignedLong xs:unsignedInt xs:unsignedShort xs:unsignedByte xs:positiveInteger xs:yearMonthDuration xs:dayTimeDuration",literal:"eq ne lt le gt ge is self:: child:: descendant:: descendant-or-self:: attribute:: following:: following-sibling:: parent:: ancestor:: ancestor-or-self:: preceding:: preceding-sibling:: NaN"},contains:t}}},function(e,t){e.exports=function(e){var t={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["zep"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var let while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally int uint long ulong char uchar double float bool boolean stringlikely unlikely",contains:[e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:"<<<['\"]?\\w+['\"]?$",end:"^\\w+;",contains:[e.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_BLOCK_COMMENT_MODE,t,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},t,n]}}},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};s(this,e),this.initData(t)}return i(e,[{key:"initData",value:function(e){this.qiniuOptions=Object.assign({token:"",baseUrl:"",config:{useCdnDomain:!0,disableStatisticsReport:!1,retryCount:6,region:qiniu.region.z1},putExtra:{fname:"",params:{},mimeType:null}},e);var t=this;this.fetchGetToken().then((function(e){var n=e,r=n.status,i=n.data;r&&(t.qiniuOptions.token=i.token,t.qiniuOptions.baseUrl=i.domain)})).catch((function(e){console.log(e)}))}},{key:"fetchGetToken",value:function(){var e=this.qiniuOptions.tokenApiUrl||l.getToken;return new Promise((function(t,n){o.default.ajax({url:e,success:function(e){t(e)},error:function(e){n(e)}})}))}},{key:"getRegionUrl",value:function(e){return{z0:"//upload.qiniup.com",z1:"//upload-z1.qiniup.com",z2:"//upload-z2.qiniup.com",na0:"//upload-na0.qiniup.com",as0:"//upload-as0.qiniup.com"}[e]||""}},{key:"uploadWithSDK",value:function(e,t){var n=this.qiniuOptions.token,r=this.qiniuOptions.putExtra,i=this.qiniuOptions.config;r.params["x:name"]=t;var a={next:function(e){},error:function(e){},complete:function(e){e.key&&e.key.match(/\.(jpg|jpeg|png|gif)$/)&&consoel.log("===== complete ===== res: %o",e)}};qiniu.upload(e,t,n,r,i).subscribe(a)}},{key:"putb64",value:function(e){var t=this.base64encode(e),n=this.qiniuOptions.token,r=this.getBase64Size(e),i=this.getRegionUrl(this.qiniuOptions.region)+"/putb64/"+r,a=this;return new Promise((function(e,r){o.default.ajax({url:i,type:"POST",data:t,headers:{"Content-Type":"application/octet-stream",Authorization:"UpToken "+n},success:function(t){console.log("domain",a.qiniuOptions),e({domain:a.qiniuOptions.baseUrl,hash:t.hash})},error:function(e){r(e)}})}))}},{key:"getBase64Size",value:function(e){var t=e.replace("data:image/png;base64,",""),n=t.indexOf("=");t.indexOf("=")>0&&(t=t.substring(0,n));var r=t.length;return parseInt(r-r/8*2)}},{key:"base64encode",value:function(e){return e.replace("data:image/png;base64,","")}}]),e}();t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={ajax:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({url:"",type:"GET",dataType:"json",async:!0,data:null,headers:{},timeout:1e3,beforeSend:function(e){},success:function(e,t,n){},error:function(e,t,n){},complete:function(e,t){}},e);if(t.url&&t.type&&t.dataType&&t.async){var n=new XMLHttpRequest;n.addEventListener("loadstart",(function(e){t.beforeSend(n)})),n.addEventListener("load",(function(e){var r=n.status;if(r>=200&&r<300||304===r){var i=void 0;i="text"===n.responseType?n.responseText:"document"===n.responseType?n.responseXML:n.response,t.success(i,r,n)}else t.error(n,r,e)})),n.addEventListener("loadend",(function(e){t.complete(n,n.status)})),n.addEventListener("error",(function(e){t.error(n,n.status,e)})),n.addEventListener("timeout",(function(e){t.error(n,408,e)}));var i=!1,a=t.type.toUpperCase();"GET"!==a&&"DELETE"!==a||(i=!0,t.url+=r.getUrlParam(t.url,t.data)),n.open(t.type,t.url,t.async),n.responseType=t.dataType;var o=!0,s=!1,l=void 0;try{for(var c,d=Object.keys(t.headers)[Symbol.iterator]();!(o=(c=d.next()).done);o=!0){var u=c.value;n.setRequestHeader(u,t.headers[u])}}catch(e){s=!0,l=e}finally{try{!o&&d.return&&d.return()}finally{if(s)throw l}}t.async&&t.timeout&&(n.timeout=t.timeout),n.send(i?null:r.getQueryData(t.data))}else alert("参数有误")},getUrlParam:function(e,t){if(!t)return"";var n=t instanceof Object?r.getQueryString(t):t;return-1!==e.indexOf("?")?n:"?"+n},getQueryData:function(e){return e?"string"==typeof e||e instanceof FormData?e:r.getQueryString(e):null},getQueryString:function(e){var t=[];return e instanceof Object&&Object.keys(e).forEach((function(n){var r=e[n];Date,t.push(encodeURIComponent(n)+"="+encodeURIComponent(r))})),t.join("&")}};t.default=r},function(e,t,n){"use strict";n.r(t),n.d(t,"add",(function(){return C})),n.d(t,"after",(function(){return M})),n.d(t,"ary",(function(){return ot})),n.d(t,"assign",(function(){return Ht})),n.d(t,"assignIn",(function(){return jt})),n.d(t,"assignInWith",(function(){return $t})),n.d(t,"assignWith",(function(){return Qt})),n.d(t,"at",(function(){return Wn})),n.d(t,"attempt",(function(){return tr})),n.d(t,"before",(function(){return nr})),n.d(t,"bind",(function(){return ir})),n.d(t,"bindAll",(function(){return ar})),n.d(t,"bindKey",(function(){return sr})),n.d(t,"camelCase",(function(){return ri})),n.d(t,"capitalize",(function(){return Rr})),n.d(t,"castArray",(function(){return ii})),n.d(t,"ceil",(function(){return li})),n.d(t,"chain",(function(){return ci})),n.d(t,"chunk",(function(){return _i})),n.d(t,"clamp",(function(){return mi})),n.d(t,"clone",(function(){return pa})),n.d(t,"cloneDeep",(function(){return ma})),n.d(t,"cloneDeepWith",(function(){return ga})),n.d(t,"cloneWith",(function(){return fa})),n.d(t,"commit",(function(){return Ea})),n.d(t,"compact",(function(){return Sa})),n.d(t,"concat",(function(){return ha})),n.d(t,"cond",(function(){return Ka})),n.d(t,"conforms",(function(){return Ja})),n.d(t,"conformsTo",(function(){return eo})),n.d(t,"constant",(function(){return Le})),n.d(t,"countBy",(function(){return uo})),n.d(t,"create",(function(){return _o})),n.d(t,"curry",(function(){return mo})),n.d(t,"curryRight",(function(){return fo})),n.d(t,"debounce",(function(){return bo})),n.d(t,"deburr",(function(){return Mr})),n.d(t,"defaultTo",(function(){return vo})),n.d(t,"defaults",(function(){return yo})),n.d(t,"defaultsDeep",(function(){return Mo})),n.d(t,"defer",(function(){return Po})),n.d(t,"delay",(function(){return ko})),n.d(t,"difference",(function(){return Bo})),n.d(t,"differenceBy",(function(){return Yo})),n.d(t,"differenceWith",(function(){return Ho})),n.d(t,"divide",(function(){return qo})),n.d(t,"drop",(function(){return zo})),n.d(t,"dropRight",(function(){return Vo})),n.d(t,"dropRightWhile",(function(){return jo})),n.d(t,"dropWhile",(function(){return $o})),n.d(t,"each",(function(){return Ko})),n.d(t,"eachRight",(function(){return ts})),n.d(t,"endsWith",(function(){return ns})),n.d(t,"entries",(function(){return os})),n.d(t,"entriesIn",(function(){return ss})),n.d(t,"eq",(function(){return lt})),n.d(t,"escape",(function(){return us})),n.d(t,"escapeRegExp",(function(){return ms})),n.d(t,"every",(function(){return Es})),n.d(t,"extend",(function(){return jt})),n.d(t,"extendWith",(function(){return $t})),n.d(t,"fill",(function(){return bs})),n.d(t,"filter",(function(){return Ts})),n.d(t,"find",(function(){return Ns})),n.d(t,"findIndex",(function(){return Os})),n.d(t,"findKey",(function(){return As})),n.d(t,"findLast",(function(){return ws})),n.d(t,"findLastIndex",(function(){return Ds})),n.d(t,"findLastKey",(function(){return Ms})),n.d(t,"first",(function(){return Ls})),n.d(t,"flatMap",(function(){return Fs})),n.d(t,"flatMapDeep",(function(){return Us})),n.d(t,"flatMapDepth",(function(){return Bs})),n.d(t,"flatten",(function(){return zn})),n.d(t,"flattenDeep",(function(){return Gs})),n.d(t,"flattenDepth",(function(){return Ys})),n.d(t,"flip",(function(){return Hs})),n.d(t,"floor",(function(){return qs})),n.d(t,"flow",(function(){return Vs})),n.d(t,"flowRight",(function(){return Ws})),n.d(t,"forEach",(function(){return Ko})),n.d(t,"forEachRight",(function(){return ts})),n.d(t,"forIn",(function(){return js})),n.d(t,"forInRight",(function(){return $s})),n.d(t,"forOwn",(function(){return Qs})),n.d(t,"forOwnRight",(function(){return Ks})),n.d(t,"fromPairs",(function(){return Xs})),n.d(t,"functions",(function(){return Js})),n.d(t,"functionsIn",(function(){return el})),n.d(t,"get",(function(){return Un})),n.d(t,"groupBy",(function(){return nl})),n.d(t,"gt",(function(){return al})),n.d(t,"gte",(function(){return ol})),n.d(t,"has",(function(){return cl})),n.d(t,"hasIn",(function(){return za})),n.d(t,"head",(function(){return Ls})),n.d(t,"identity",(function(){return L})),n.d(t,"inRange",(function(){return pl})),n.d(t,"includes",(function(){return Sl})),n.d(t,"indexOf",(function(){return bl})),n.d(t,"initial",(function(){return vl})),n.d(t,"intersection",(function(){return Ol})),n.d(t,"intersectionBy",(function(){return Nl})),n.d(t,"intersectionWith",(function(){return Rl})),n.d(t,"invert",(function(){return Dl})),n.d(t,"invertBy",(function(){return Pl})),n.d(t,"invoke",(function(){return Ul})),n.d(t,"invokeMap",(function(){return Bl})),n.d(t,"isArguments",(function(){return Nt})),n.d(t,"isArray",(function(){return S})),n.d(t,"isArrayBuffer",(function(){return Hl})),n.d(t,"isArrayLike",(function(){return ft})),n.d(t,"isArrayLikeObject",(function(){return No})),n.d(t,"isBoolean",(function(){return ql})),n.d(t,"isBuffer",(function(){return Rt.a})),n.d(t,"isDate",(function(){return Wl})),n.d(t,"isElement",(function(){return jl})),n.d(t,"isEmpty",(function(){return Ql})),n.d(t,"isEqual",(function(){return Kl})),n.d(t,"isEqualWith",(function(){return Xl})),n.d(t,"isError",(function(){return er})),n.d(t,"isFinite",(function(){return Jl})),n.d(t,"isFunction",(function(){return k})),n.d(t,"isInteger",(function(){return ec})),n.d(t,"isLength",(function(){return gt})),n.d(t,"isMap",(function(){return sa})),n.d(t,"isMatch",(function(){return tc})),n.d(t,"isMatchWith",(function(){return nc})),n.d(t,"isNaN",(function(){return ic})),n.d(t,"isNative",(function(){return sc})),n.d(t,"isNil",(function(){return lc})),n.d(t,"isNull",(function(){return cc})),n.d(t,"isNumber",(function(){return rc})),n.d(t,"isObject",(function(){return y})),n.d(t,"isObjectLike",(function(){return m})),n.d(t,"isPlainObject",(function(){return Jn})),n.d(t,"isRegExp",(function(){return _c})),n.d(t,"isSafeInteger",(function(){return pc})),n.d(t,"isSet",(function(){return da})),n.d(t,"isString",(function(){return ml})),n.d(t,"isSymbol",(function(){return g})),n.d(t,"isTypedArray",(function(){return Mt})),n.d(t,"isUndefined",(function(){return mc})),n.d(t,"isWeakMap",(function(){return gc})),n.d(t,"isWeakSet",(function(){return fc})),n.d(t,"iteratee",(function(){return Ec})),n.d(t,"join",(function(){return hc})),n.d(t,"kebabCase",(function(){return bc})),n.d(t,"keyBy",(function(){return vc})),n.d(t,"keys",(function(){return Gt})),n.d(t,"keysIn",(function(){return Wt})),n.d(t,"last",(function(){return Go})),n.d(t,"lastIndexOf",(function(){return Oc})),n.d(t,"lodash",(function(){return ye})),n.d(t,"lowerCase",(function(){return Nc})),n.d(t,"lowerFirst",(function(){return Rc})),n.d(t,"lt",(function(){return Ic})),n.d(t,"lte",(function(){return xc})),n.d(t,"map",(function(){return ks})),n.d(t,"mapKeys",(function(){return Dc})),n.d(t,"mapValues",(function(){return wc})),n.d(t,"matches",(function(){return Mc})),n.d(t,"matchesProperty",(function(){return Lc})),n.d(t,"max",(function(){return kc})),n.d(t,"maxBy",(function(){return Fc})),n.d(t,"mean",(function(){return Gc})),n.d(t,"meanBy",(function(){return Yc})),n.d(t,"memoize",(function(){return xn})),n.d(t,"merge",(function(){return Hc})),n.d(t,"mergeWith",(function(){return wo})),n.d(t,"method",(function(){return qc})),n.d(t,"methodOf",(function(){return zc})),n.d(t,"min",(function(){return Vc})),n.d(t,"minBy",(function(){return Wc})),n.d(t,"mixin",(function(){return jc})),n.d(t,"multiply",(function(){return $c})),n.d(t,"negate",(function(){return Qc})),n.d(t,"next",(function(){return Jc})),n.d(t,"noop",(function(){return pe})),n.d(t,"now",(function(){return Eo})),n.d(t,"nth",(function(){return td})),n.d(t,"nthArg",(function(){return nd})),n.d(t,"omit",(function(){return ad})),n.d(t,"omitBy",(function(){return cd})),n.d(t,"once",(function(){return dd})),n.d(t,"orderBy",(function(){return gd})),n.d(t,"over",(function(){return Ed})),n.d(t,"overArgs",(function(){return bd})),n.d(t,"overEvery",(function(){return vd})),n.d(t,"overSome",(function(){return Td})),n.d(t,"pad",(function(){return Yd})),n.d(t,"padEnd",(function(){return Hd})),n.d(t,"padStart",(function(){return qd})),n.d(t,"parseInt",(function(){return Wd})),n.d(t,"partial",(function(){return $d})),n.d(t,"partialRight",(function(){return Kd})),n.d(t,"partition",(function(){return Xd})),n.d(t,"pick",(function(){return Jd})),n.d(t,"pickBy",(function(){return ld})),n.d(t,"plant",(function(){return eu})),n.d(t,"property",(function(){return $a})),n.d(t,"propertyOf",(function(){return tu})),n.d(t,"pull",(function(){return ou})),n.d(t,"pullAll",(function(){return au})),n.d(t,"pullAllBy",(function(){return su})),n.d(t,"pullAllWith",(function(){return lu})),n.d(t,"pullAt",(function(){return uu})),n.d(t,"random",(function(){return Su})),n.d(t,"range",(function(){return Cu})),n.d(t,"rangeRight",(function(){return yu})),n.d(t,"rearg",(function(){return Ou})),n.d(t,"reduce",(function(){return Ru})),n.d(t,"reduceRight",(function(){return Iu})),n.d(t,"reject",(function(){return xu})),n.d(t,"remove",(function(){return Du})),n.d(t,"repeat",(function(){return wu})),n.d(t,"replace",(function(){return Mu})),n.d(t,"rest",(function(){return Lu})),n.d(t,"result",(function(){return Pu})),n.d(t,"reverse",(function(){return Fu})),n.d(t,"round",(function(){return Uu})),n.d(t,"sample",(function(){return Yu})),n.d(t,"sampleSize",(function(){return Vu})),n.d(t,"set",(function(){return Wu})),n.d(t,"setWith",(function(){return ju})),n.d(t,"shuffle",(function(){return Ku})),n.d(t,"size",(function(){return Xu})),n.d(t,"slice",(function(){return Zu})),n.d(t,"snakeCase",(function(){return Ju})),n.d(t,"some",(function(){return t_})),n.d(t,"sortBy",(function(){return n_})),n.d(t,"sortedIndex",(function(){return s_})),n.d(t,"sortedIndexBy",(function(){return l_})),n.d(t,"sortedIndexOf",(function(){return c_})),n.d(t,"sortedLastIndex",(function(){return d_})),n.d(t,"sortedLastIndexBy",(function(){return u_})),n.d(t,"sortedLastIndexOf",(function(){return __})),n.d(t,"sortedUniq",(function(){return m_})),n.d(t,"sortedUniqBy",(function(){return g_})),n.d(t,"split",(function(){return f_})),n.d(t,"spread",(function(){return S_})),n.d(t,"startCase",(function(){return h_})),n.d(t,"startsWith",(function(){return b_})),n.d(t,"stubArray",(function(){return Ni})),n.d(t,"stubFalse",(function(){return ac.a})),n.d(t,"stubObject",(function(){return v_})),n.d(t,"stubString",(function(){return T_})),n.d(t,"stubTrue",(function(){return C_})),n.d(t,"subtract",(function(){return y_})),n.d(t,"sum",(function(){return O_})),n.d(t,"sumBy",(function(){return N_})),n.d(t,"tail",(function(){return R_})),n.d(t,"take",(function(){return A_})),n.d(t,"takeRight",(function(){return I_})),n.d(t,"takeRightWhile",(function(){return x_})),n.d(t,"takeWhile",(function(){return D_})),n.d(t,"tap",(function(){return w_})),n.d(t,"template",(function(){return j_})),n.d(t,"templateSettings",(function(){return B_})),n.d(t,"throttle",(function(){return $_})),n.d(t,"thru",(function(){return Q_})),n.d(t,"times",(function(){return X_})),n.d(t,"toArray",(function(){return Zc})),n.d(t,"toFinite",(function(){return D})),n.d(t,"toInteger",(function(){return w})),n.d(t,"toIterator",(function(){return Z_})),n.d(t,"toJSON",(function(){return ep})),n.d(t,"toLength",(function(){return Ss})),n.d(t,"toLower",(function(){return tp})),n.d(t,"toNumber",(function(){return x})),n.d(t,"toPairs",(function(){return os})),n.d(t,"toPairsIn",(function(){return ss})),n.d(t,"toPath",(function(){return np})),n.d(t,"toPlainObject",(function(){return Ao})),n.d(t,"toSafeInteger",(function(){return rp})),n.d(t,"toString",(function(){return Ln})),n.d(t,"toUpper",(function(){return ip})),n.d(t,"transform",(function(){return ap})),n.d(t,"trim",(function(){return cp})),n.d(t,"trimEnd",(function(){return up})),n.d(t,"trimStart",(function(){return pp})),n.d(t,"truncate",(function(){return gp})),n.d(t,"unary",(function(){return fp})),n.d(t,"unescape",(function(){return bp})),n.d(t,"union",(function(){return Cp})),n.d(t,"unionBy",(function(){return yp})),n.d(t,"unionWith",(function(){return Op})),n.d(t,"uniq",(function(){return Np})),n.d(t,"uniqBy",(function(){return Rp})),n.d(t,"uniqWith",(function(){return Ap})),n.d(t,"uniqueId",(function(){return xp})),n.d(t,"unset",(function(){return Dp})),n.d(t,"unzip",(function(){return Mp})),n.d(t,"unzipWith",(function(){return Lp})),n.d(t,"update",(function(){return kp})),n.d(t,"updateWith",(function(){return Fp})),n.d(t,"upperCase",(function(){return Up})),n.d(t,"upperFirst",(function(){return Nr})),n.d(t,"value",(function(){return ep})),n.d(t,"valueOf",(function(){return ep})),n.d(t,"values",(function(){return fl})),n.d(t,"valuesIn",(function(){return Bp})),n.d(t,"without",(function(){return Gp})),n.d(t,"words",(function(){return ei})),n.d(t,"wrap",(function(){return Yp})),n.d(t,"wrapperAt",(function(){return Hp})),n.d(t,"wrapperChain",(function(){return qp})),n.d(t,"wrapperCommit",(function(){return Ea})),n.d(t,"wrapperLodash",(function(){return ye})),n.d(t,"wrapperNext",(function(){return Jc})),n.d(t,"wrapperPlant",(function(){return eu})),n.d(t,"wrapperReverse",(function(){return zp})),n.d(t,"wrapperToIterator",(function(){return Z_})),n.d(t,"wrapperValue",(function(){return ep})),n.d(t,"xor",(function(){return Wp})),n.d(t,"xorBy",(function(){return jp})),n.d(t,"xorWith",(function(){return $p})),n.d(t,"zip",(function(){return Qp})),n.d(t,"zipObject",(function(){return Xp})),n.d(t,"zipObjectDeep",(function(){return Zp})),n.d(t,"zipWith",(function(){return Jp})),n.d(t,"default",(function(){return Nm}));var r=n(0),i=r.a.Symbol,a=Object.prototype,o=a.hasOwnProperty,s=a.toString,l=i?i.toStringTag:void 0;var c=function(e){var t=o.call(e,l),n=e[l];try{e[l]=void 0;var r=!0}catch(e){}var i=s.call(e);return r&&(t?e[l]=n:delete e[l]),i},d=Object.prototype.toString;var u=function(e){return d.call(e)},_=i?i.toStringTag:void 0;var p=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":_&&_ in Object(e)?c(e):u(e)};var m=function(e){return null!=e&&"object"==typeof e};var g=function(e){return"symbol"==typeof e||m(e)&&"[object Symbol]"==p(e)};var f=function(e){return"number"==typeof e?e:g(e)?NaN:+e};var E=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}},Ae=Re(J),Ie=/\{\n\/\* \[wrapped with (.+)\] \*/,xe=/,? & /;var De=function(e){var t=e.match(Ie);return t?t[1].split(xe):[]},we=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;var Me=function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(we,"{\n/* [wrapped with "+t+"] */\n")};var Le=function(e){return function(){return e}},Pe=function(){try{var e=K(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ke=Re(Pe?function(e,t){return Pe(e,"toString",{configurable:!0,enumerable:!1,value:Le(t),writable:!0})}:L);var Fe=function(e,t){for(var n=-1,r=null==e?0:e.length;++n-1},qe=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];var ze=function(e,t){return Fe(qe,(function(n){var r="_."+n[0];t&n[1]&&!He(e,r)&&e.push(r)})),e.sort()};var Ve=function(e,t,n){var r=t+"";return ke(e,Me(r,ze(De(r),n)))};var We=function(e,t,n,r,i,a,o,s,l,c){var d=8&t;t|=d?32:64,4&(t&=~(d?64:32))||(t&=-4);var u=[e,t,i,d?a:void 0,d?o:void 0,d?void 0:a,d?void 0:o,s,l,c],_=n.apply(void 0,u);return Oe(e)&&Ae(_,u),_.placeholder=r,Ve(_,e,t)};var je=function(e){return e.placeholder},$e=/^(?:0|[1-9]\d*)$/;var Qe=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&$e.test(e))&&e>-1&&e%1==0&&e1&&b.reverse(),_&&d-1&&e%1==0&&e<=9007199254740991};var ft=function(e){return null!=e&>(e.length)&&!k(e)};var Et=function(e,t,n){if(!y(n))return!1;var r=typeof t;return!!("number"==r?ft(n)&&Qe(t,n.length):"string"==r&&t in n)&<(n[t],e)};var St=function(e){return mt((function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,o&&Et(n[0],n[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++r-1};var fn=function(e,t){var n=this.__data__,r=un(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function En(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t0&&r(l)?n>1?e(l,n-1,r,i,a):Gn(a,l):i||(a[a.length]=l)}return a};var zn=function(e){return(null==e?0:e.length)?qn(e,1):[]};var Vn=function(e){return ke(pt(e,void 0,zn),e+"")},Wn=Vn(Bn),jn=kt(Object.getPrototypeOf,Object),$n=Function.prototype,Qn=Object.prototype,Kn=$n.toString,Xn=Qn.hasOwnProperty,Zn=Kn.call(Object);var Jn=function(e){if(!m(e)||"[object Object]"!=p(e))return!1;var t=jn(e);if(null===t)return!0;var n=Xn.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Kn.call(n)==Zn};var er=function(e){if(!m(e))return!1;var t=p(e);return"[object Error]"==t||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Jn(e)},tr=mt((function(e,t){try{return ie(e,void 0,t)}catch(e){return er(e)?e:new Error(e)}}));var nr=function(e,t){var n;if("function"!=typeof t)throw new TypeError("Expected a function");return e=w(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}},rr=mt((function(e,t,n){var r=1;if(n.length){var i=Ze(n,je(rr));r|=32}return at(e,r,t,n,i)}));rr.placeholder={};var ir=rr,ar=Vn((function(e,t){return Fe(t,(function(t){t=kn(t),st(e,t,ir(e[t],e))})),e})),or=mt((function(e,t,n){var r=3;if(n.length){var i=Ze(n,je(or));r|=32}return at(t,r,e,n,i)}));or.placeholder={};var sr=or;var lr=function(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(i);++r=r?e:lr(e,t,n)},dr=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var ur=function(e){return dr.test(e)};var _r=function(e){return e.split("")},pr="[\\ud800-\\udfff]",mr="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",gr="\\ud83c[\\udffb-\\udfff]",fr="[^\\ud800-\\udfff]",Er="(?:\\ud83c[\\udde6-\\uddff]){2}",Sr="[\\ud800-\\udbff][\\udc00-\\udfff]",hr="(?:"+mr+"|"+gr+")"+"?",br="[\\ufe0e\\ufe0f]?"+hr+("(?:\\u200d(?:"+[fr,Er,Sr].join("|")+")[\\ufe0e\\ufe0f]?"+hr+")*"),vr="(?:"+[fr+mr+"?",mr,Er,Sr,pr].join("|")+")",Tr=RegExp(gr+"(?="+gr+")|"+vr+br,"g");var Cr=function(e){return e.match(Tr)||[]};var yr=function(e){return ur(e)?Cr(e):_r(e)};var Or=function(e){return function(t){t=Ln(t);var n=ur(t)?yr(t):void 0,r=n?n[0]:t.charAt(0),i=n?cr(n,1).join(""):t.slice(1);return r[e]()+i}},Nr=Or("toUpperCase");var Rr=function(e){return Nr(Ln(e).toLowerCase())};var Ar=function(e,t,n,r){var i=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++i]);++i=t?e:t)),e};var mi=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=x(n))==n?n:0),void 0!==t&&(t=(t=x(t))==t?t:0),pi(x(e),t,n)};var gi=function(){this.__data__=new Sn,this.size=0};var fi=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n};var Ei=function(e){return this.__data__.get(e)};var Si=function(e){return this.__data__.has(e)};var hi=function(e,t){var n=this.__data__;if(n instanceof Sn){var r=n.__data__;if(!hn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new An(r)}return n.set(e,t),this.size=n.size,this};function bi(e){var t=this.__data__=new Sn(e);this.size=t.size}bi.prototype.clear=gi,bi.prototype.delete=fi,bi.prototype.get=Ei,bi.prototype.has=Si,bi.prototype.set=hi;var vi=bi;var Ti=function(e,t){return e&&ut(t,Gt(t),e)};var Ci=function(e,t){return e&&ut(t,Wt(t),e)},yi=n(6);var Oi=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,a=[];++ns))return!1;var c=a.get(e);if(c&&a.get(t))return c==t;var d=-1,u=!0,_=2&n?new Ca:void 0;for(a.set(e,t),a.set(t,e);++d=t||n<0||u&&e-c>=a}function f(){var e=Eo();if(g(e))return E(e);s=setTimeout(f,function(e){var n=t-(e-l);return u?ho(n,a-(e-c)):n}(e))}function E(e){return s=void 0,_&&r?p(e):(r=i=void 0,o)}function S(){var e=Eo(),n=g(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return m(l);if(u)return clearTimeout(s),s=setTimeout(f,t),p(l)}return void 0===s&&(s=setTimeout(f,t)),o}return t=x(t)||0,y(n)&&(d=!!n.leading,a=(u="maxWait"in n)?So(x(n.maxWait)||0,t):a,_="trailing"in n?!!n.trailing:_),S.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=i=s=void 0},S.flush=function(){return void 0===s?o:E(Eo())},S};var vo=function(e,t){return null==e||e!=e?t:e},To=Object.prototype,Co=To.hasOwnProperty,yo=mt((function(e,t){e=Object(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&Et(t[0],t[1],i)&&(r=1);++n=200&&(a=Oa,o=!1,t=new Ca(t));e:for(;++i=0&&e.slice(n,i)==t};var rs=function(e,t){return E(t,(function(t){return[t,e[t]]}))};var is=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n};var as=function(e){return function(t){var n=Vi(t);return"[object Map]"==n?Ra(t):"[object Set]"==n?is(t):rs(t,e(t))}},os=as(Gt),ss=as(Wt),ls=Ir({"&":"&","<":"<",">":">",'"':""","'":"'"}),cs=/[&<>"']/g,ds=RegExp(cs.source);var us=function(e){return(e=Ln(e))&&ds.test(e)?e.replace(cs,ls):e},_s=/[\\^$.*+?()[\]{}|]/g,ps=RegExp(_s.source);var ms=function(e){return(e=Ln(e))&&ps.test(e)?e.replace(_s,"\\$&"):e};var gs=function(e,t){for(var n=-1,r=null==e?0:e.length;++ni?0:i+n),(r=void 0===r||r>i?i:w(r))<0&&(r+=i),r=n>r?0:Ss(r);n-1?i[a?t[o]:o]:void 0}},ys=Math.max;var Os=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:w(n);return i<0&&(i=ys(r+i,0)),Ue(e,Qa(t,3),i)},Ns=Cs(Os);var Rs=function(e,t,n){var r;return n(e,(function(e,n,i){if(t(e,n,i))return r=n,!1})),r};var As=function(e,t){return Rs(e,Qa(t,3),io)},Is=Math.max,xs=Math.min;var Ds=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=w(n),i=n<0?Is(r+i,0):xs(i,r-1)),Ue(e,Qa(t,3),i,!0)},ws=Cs(Ds);var Ms=function(e,t){return Rs(e,Qa(t,3),Jo)};var Ls=function(e){return e&&e.length?e[0]:void 0};var Ps=function(e,t){var n=-1,r=ft(e)?Array(e.length):[];return oo(e,(function(e,i,a){r[++n]=t(e,i,a)})),r};var ks=function(e,t){return(S(e)?E:Ps)(e,Qa(t,3))};var Fs=function(e,t){return qn(ks(e,t),1)};var Us=function(e,t){return qn(ks(e,t),1/0)};var Bs=function(e,t,n){return n=void 0===n?1:w(n),qn(ks(e,t),n)};var Gs=function(e){return(null==e?0:e.length)?qn(e,1/0):[]};var Ys=function(e,t){return(null==e?0:e.length)?(t=void 0===t?1:w(t),qn(e,t)):[]};var Hs=function(e){return at(e,512)},qs=si("floor");var zs=function(e){return Vn((function(t){var n=t.length,r=n,i=he.prototype.thru;for(e&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new TypeError("Expected a function");if(i&&!o&&"wrapper"==Ee(a))var o=new he([],!0)}for(r=o?r:n;++rt};var il=function(e){return function(t,n){return"string"==typeof t&&"string"==typeof n||(t=x(t),n=x(n)),e(t,n)}},al=il(rl),ol=il((function(e,t){return e>=t})),sl=Object.prototype.hasOwnProperty;var ll=function(e,t){return null!=e&&sl.call(e,t)};var cl=function(e,t){return null!=e&&qa(e,t,ll)},dl=Math.max,ul=Math.min;var _l=function(e,t,n){return e>=ul(t,n)&&e-1:!!i&&Ye(e,t,n)>-1},hl=Math.max;var bl=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:w(n);return i<0&&(i=hl(r+i,0)),Ye(e,t,i)};var vl=function(e){return(null==e?0:e.length)?lr(e,0,-1):[]},Tl=Math.min;var Cl=function(e,t,n){for(var r=n?Fo:He,i=e[0].length,a=e.length,o=a,s=Array(a),l=1/0,c=[];o--;){var d=e[o];o&&t&&(d=E(d,xt(t))),l=Tl(d.length,l),s[o]=!n&&(t||i>=120&&d.length>=120)?new Ca(o&&d):void 0}d=e[0];var u=-1,_=s[0];e:for(;++u=-9007199254740991&&e<=9007199254740991};var mc=function(e){return void 0===e};var gc=function(e){return m(e)&&"[object WeakMap]"==Vi(e)};var fc=function(e){return m(e)&&"[object WeakSet]"==p(e)};var Ec=function(e){return Qa("function"==typeof e?e:_a(e,1))},Sc=Array.prototype.join;var hc=function(e,t){return null==e?"":Sc.call(e,t)},bc=ni((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),vc=lo((function(e,t,n){st(e,n,t)}));var Tc=function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r},Cc=Math.max,yc=Math.min;var Oc=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=w(n))<0?Cc(r+i,0):yc(i,r-1)),t==t?Tc(e,t,i):Ue(e,Be,i,!0)},Nc=ni((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Rc=Or("toLowerCase");var Ac=function(e,t){return e=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}};var ed=function(e,t){var n=e.length;if(n)return Qe(t+=t<0?n:0,n)?e[t]:void 0};var td=function(e,t){return e&&e.length?ed(e,w(t)):void 0};var nd=function(e){return e=w(e),mt((function(t){return ed(t,e)}))};var rd=function(e,t){return t=Pn(t,e),null==(e=kl(e,t))||delete e[kn(Go(t))]};var id=function(e){return Jn(e)?void 0:e},ad=Vn((function(e,t){var n={};if(null==e)return n;var r=!1;t=E(t,(function(t){return t=Pn(t,e),r||(r=t.length>1),t})),ut(e,Pi(e),n),r&&(n=_a(n,7,id));for(var i=t.length;i--;)rd(n,t[i]);return n}));var od=function(e,t,n,r){if(!y(e))return e;for(var i=-1,a=(t=Pn(t,e)).length,o=a-1,s=e;null!=s&&++it||a&&o&&l&&!s&&!c||r&&o&&l||!n&&l||!i)return 1;if(!r&&!a&&!c&&e=s?l:l*("desc"==n[r]?-1:1)}return e.index-t.index};var md=function(e,t,n){var r=-1;t=E(t.length?t:[L],xt(Qa));var i=Ps(e,(function(e,n,i){return{criteria:E(t,(function(t){return t(e)})),index:++r,value:e}}));return ud(i,(function(e,t){return pd(e,t,n)}))};var gd=function(e,t,n,r){return null==e?[]:(S(t)||(t=null==t?[]:[t]),S(n=r?void 0:n)||(n=null==n?[]:[n]),md(e,t,n))};var fd=function(e){return Vn((function(t){return t=E(t,xt(Qa)),mt((function(n){var r=this;return e(t,(function(e){return ie(e,r,n)}))}))}))},Ed=fd(E),Sd=mt,hd=Math.min,bd=Sd((function(e,t){var n=(t=1==t.length&&S(t[0])?E(t[0],xt(Qa)):E(qn(t,1),xt(Qa))).length;return mt((function(r){for(var i=-1,a=hd(r.length,n);++i9007199254740991)return n;do{t%2&&(n+=e),(t=Cd(t/2))&&(e+=e)}while(t);return n},Od=Wa("length"),Nd="[\\ud800-\\udfff]",Rd="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Ad="[^\\ud800-\\udfff]",Id="(?:\\ud83c[\\udde6-\\uddff]){2}",xd="[\\ud800-\\udbff][\\udc00-\\udfff]",Dd="(?:"+Rd+"|\\ud83c[\\udffb-\\udfff])"+"?",wd="[\\ufe0e\\ufe0f]?"+Dd+("(?:\\u200d(?:"+[Ad,Id,xd].join("|")+")[\\ufe0e\\ufe0f]?"+Dd+")*"),Md="(?:"+[Ad+Rd+"?",Rd,Id,xd,Nd].join("|")+")",Ld=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+Md+wd,"g");var Pd=function(e){for(var t=Ld.lastIndex=0;Ld.test(e);)++t;return t};var kd=function(e){return ur(e)?Pd(e):Od(e)},Fd=Math.ceil;var Ud=function(e,t){var n=(t=void 0===t?" ":v(t)).length;if(n<2)return n?yd(t,e):t;var r=yd(t,Fd(e/kd(t)));return ur(t)?cr(yr(r),0,e).join(""):r.slice(0,e)},Bd=Math.ceil,Gd=Math.floor;var Yd=function(e,t,n){e=Ln(e);var r=(t=w(t))?kd(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Ud(Gd(i),n)+e+Ud(Bd(i),n)};var Hd=function(e,t,n){e=Ln(e);var r=(t=w(t))?kd(e):0;return t&&r-1;)s!==e&&ru.call(s,l,1),ru.call(e,l,1);return e};var au=function(e,t){return e&&e.length&&t&&t.length?iu(e,t):e},ou=mt(au);var su=function(e,t,n){return e&&e.length&&t&&t.length?iu(e,t,Qa(n,2)):e};var lu=function(e,t,n){return e&&e.length&&t&&t.length?iu(e,t,void 0,n):e},cu=Array.prototype.splice;var du=function(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==a){var a=i;Qe(i)?cu.call(e,i,1):rd(e,i)}}return e},uu=Vn((function(e,t){var n=null==e?0:e.length,r=Bn(e,t);return du(e,E(t,(function(e){return Qe(e,n)?+e:e})).sort(_d)),r})),_u=Math.floor,pu=Math.random;var mu=function(e,t){return e+_u(pu()*(t-e+1))},gu=parseFloat,fu=Math.min,Eu=Math.random;var Su=function(e,t,n){if(n&&"boolean"!=typeof n&&Et(e,t,n)&&(t=n=void 0),void 0===n&&("boolean"==typeof t?(n=t,t=void 0):"boolean"==typeof e&&(n=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=D(e),void 0===t?(t=e,e=0):t=D(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Eu();return fu(e+i*(t-e+gu("1e-"+((i+"").length-1))),t)}return mu(e,t)},hu=Math.ceil,bu=Math.max;var vu=function(e,t,n,r){for(var i=-1,a=bu(hu((t-e)/(n||1)),0),o=Array(a);a--;)o[r?a:++i]=e,e+=n;return o};var Tu=function(e){return function(t,n,r){return r&&"number"!=typeof r&&Et(t,n,r)&&(n=r=void 0),t=D(t),void 0===n?(n=t,t=0):n=D(n),r=void 0===r?t1&&Et(e,t[0],t[1])?t=[]:n>2&&Et(t[0],t[1],t[2])&&(t=[t[0]]),md(e,qn(t,1),[])})),r_=Math.floor,i_=Math.min;var a_=function(e,t,n,r){t=n(t);for(var i=0,a=null==e?0:e.length,o=t!=t,s=null===t,l=g(t),c=void 0===t;i>>1,o=e[a];null!==o&&!g(o)&&(n?o<=t:o>>0)?(e=Ln(e))&&("string"==typeof t||null!=t&&!_c(t))&&!(t=v(t))&&ur(e)?cr(yr(e),0,n):e.split(t,n):[]},E_=Math.max;var S_=function(e,t){if("function"!=typeof e)throw new TypeError("Expected a function");return t=null==t?0:E_(w(t),0),mt((function(n){var r=n[t],i=cr(n,0,t);return r&&Gn(i,r),ie(e,this,i)}))},h_=ni((function(e,t,n){return e+(n?" ":"")+Nr(t)}));var b_=function(e,t,n){return e=Ln(e),n=null==n?0:pi(w(n),0,e.length),t=v(t),e.slice(n,n+t.length)==t};var v_=function(){return{}};var T_=function(){return""};var C_=function(){return!0},y_=T((function(e,t){return e-t}),0);var O_=function(e){return e&&e.length?Uc(e,L):0};var N_=function(e,t){return e&&e.length?Uc(e,Qa(t,2)):0};var R_=function(e){var t=null==e?0:e.length;return t?lr(e,1,t):[]};var A_=function(e,t,n){return e&&e.length?(t=n||void 0===t?1:w(t),lr(e,0,t<0?0:t)):[]};var I_=function(e,t,n){var r=null==e?0:e.length;return r?(t=n||void 0===t?1:w(t),lr(e,(t=r-t)<0?0:t,r)):[]};var x_=function(e,t){return e&&e.length?Wo(e,Qa(t,3),!1,!0):[]};var D_=function(e,t){return e&&e.length?Wo(e,Qa(t,3)):[]};var w_=function(e,t){return t(e),e},M_=Object.prototype,L_=M_.hasOwnProperty;var P_=function(e,t,n,r){return void 0===e||lt(e,M_[n])&&!L_.call(r,n)?t:e},k_={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"};var F_=function(e){return"\\"+k_[e]},U_=/<%=([\s\S]+?)%>/g,B_={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:U_,variable:"",imports:{_:{escape:us}}},G_=/\b__p \+= '';/g,Y_=/\b(__p \+=) '' \+/g,H_=/(__e\(.*?\)|\b__t\)) \+\n'';/g,q_=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,z_=/($^)/,V_=/['\n\r\u2028\u2029\\]/g,W_=Object.prototype.hasOwnProperty;var j_=function(e,t,n){var r=B_.imports._.templateSettings||B_;n&&Et(e,t,n)&&(t=void 0),e=Ln(e),t=$t({},t,r,P_);var i,a,o=$t({},t.imports,r.imports,P_),s=Gt(o),l=gl(o,s),c=0,d=t.interpolate||z_,u="__p += '",_=RegExp((t.escape||z_).source+"|"+d.source+"|"+(d===U_?q_:z_).source+"|"+(t.evaluate||z_).source+"|$","g"),p=W_.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";e.replace(_,(function(t,n,r,o,s,l){return r||(r=o),u+=e.slice(c,l).replace(V_,F_),n&&(i=!0,u+="' +\n__e("+n+") +\n'"),s&&(a=!0,u+="';\n"+s+";\n__p += '"),r&&(u+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=l+t.length,t})),u+="';\n";var m=W_.call(t,"variable")&&t.variable;m||(u="with (obj) {\n"+u+"\n}\n"),u=(a?u.replace(G_,""):u).replace(Y_,"$1").replace(H_,"$1;"),u="function("+(m||"obj")+") {\n"+(m?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+u+"return __p\n}";var g=tr((function(){return Function(s,p+"return "+u).apply(void 0,l)}));if(g.source=u,er(g))throw g;return g};var $_=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return y(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),bo(e,t,{leading:r,maxWait:t,trailing:i})};var Q_=function(e,t){return t(e)},K_=Math.min;var X_=function(e,t){if((e=w(e))<1||e>9007199254740991)return[];var n=4294967295,r=K_(e,4294967295);t=Qo(t),e-=4294967295;for(var i=vt(r,t);++n-1;);return n};var sp=function(e,t){for(var n=-1,r=e.length;++n-1;);return n},lp=/^\s+|\s+$/g;var cp=function(e,t,n){if((e=Ln(e))&&(n||void 0===t))return e.replace(lp,"");if(!e||!(t=v(t)))return e;var r=yr(e),i=yr(t),a=sp(r,i),o=op(r,i)+1;return cr(r,a,o).join("")},dp=/\s+$/;var up=function(e,t,n){if((e=Ln(e))&&(n||void 0===t))return e.replace(dp,"");if(!e||!(t=v(t)))return e;var r=yr(e),i=op(r,yr(t))+1;return cr(r,0,i).join("")},_p=/^\s+/;var pp=function(e,t,n){if((e=Ln(e))&&(n||void 0===t))return e.replace(_p,"");if(!e||!(t=v(t)))return e;var r=yr(e),i=sp(r,yr(t));return cr(r,i).join("")},mp=/\w*$/;var gp=function(e,t){var n=30,r="...";if(y(t)){var i="separator"in t?t.separator:i;n="length"in t?w(t.length):n,r="omission"in t?v(t.omission):r}var a=(e=Ln(e)).length;if(ur(e)){var o=yr(e);a=o.length}if(n>=a)return e;var s=n-kd(r);if(s<1)return r;var l=o?cr(o,0,s).join(""):e.slice(0,s);if(void 0===i)return l+r;if(o&&(s+=l.length-s),_c(i)){if(e.slice(s).search(i)){var c,d=l;for(i.global||(i=RegExp(i.source,Ln(mp.exec(i))+"g")),i.lastIndex=0;c=i.exec(d);)var u=c.index;l=l.slice(0,void 0===u?s:u)}}else if(e.indexOf(v(i),s)!=s){var _=l.lastIndexOf(i);_>-1&&(l=l.slice(0,_))}return l+r};var fp=function(e){return ot(e,1)},Ep=Ir({"&":"&","<":"<",">":">",""":'"',"'":"'"}),Sp=/&(?:amp|lt|gt|quot|#39);/g,hp=RegExp(Sp.source);var bp=function(e){return(e=Ln(e))&&hp.test(e)?e.replace(Sp,Ep):e},vp=Ui&&1/Aa(new Ui([,-0]))[1]==1/0?function(e){return new Ui(e)}:pe;var Tp=function(e,t,n){var r=-1,i=He,a=e.length,o=!0,s=[],l=s;if(n)o=!1,i=Fo;else if(a>=200){var c=t?null:vp(e);if(c)return Aa(c);o=!1,i=Oa,l=new Ca}else l=t?[]:s;e:for(;++r1||this.__actions__.length)&&r instanceof _e&&Qe(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:Q_,args:[i],thisArg:void 0}),new he(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var qp=function(){return ci(this)};var zp=function(){var e=this.__wrapped__;if(e instanceof _e){var t=e;return this.__actions__.length&&(t=new _e(this)),(t=t.reverse()).__actions__.push({func:Q_,args:[Fu],thisArg:void 0}),new he(t,this.__chain__)}return this.thru(Fu)};var Vp=function(e,t,n){var r=e.length;if(r<2)return r?Tp(e[0]):[];for(var i=-1,a=Array(r);++i1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Lp(e,n)})),em={chunk:_i,compact:Sa,concat:ha,difference:Bo,differenceBy:Yo,differenceWith:Ho,drop:zo,dropRight:Vo,dropRightWhile:jo,dropWhile:$o,fill:bs,findIndex:Os,findLastIndex:Ds,first:Ls,flatten:zn,flattenDeep:Gs,flattenDepth:Ys,fromPairs:Xs,head:Ls,indexOf:bl,initial:vl,intersection:Ol,intersectionBy:Nl,intersectionWith:Rl,join:hc,last:Go,lastIndexOf:Oc,nth:td,pull:ou,pullAll:au,pullAllBy:su,pullAllWith:lu,pullAt:uu,remove:Du,reverse:Fu,slice:Zu,sortedIndex:s_,sortedIndexBy:l_,sortedIndexOf:c_,sortedLastIndex:d_,sortedLastIndexBy:u_,sortedLastIndexOf:__,sortedUniq:m_,sortedUniqBy:g_,tail:R_,take:A_,takeRight:I_,takeRightWhile:x_,takeWhile:D_,union:Cp,unionBy:yp,unionWith:Op,uniq:Np,uniqBy:Rp,uniqWith:Ap,unzip:Mp,unzipWith:Lp,without:Gp,xor:Wp,xorBy:jp,xorWith:$p,zip:Qp,zipObject:Xp,zipObjectDeep:Zp,zipWith:Jp},tm={countBy:uo,each:Ko,eachRight:ts,every:Es,filter:Ts,find:Ns,findLast:ws,flatMap:Fs,flatMapDeep:Us,flatMapDepth:Bs,forEach:Ko,forEachRight:ts,groupBy:nl,includes:Sl,invokeMap:Bl,keyBy:vc,map:ks,orderBy:gd,partition:Xd,reduce:Ru,reduceRight:Iu,reject:xu,sample:Yu,sampleSize:Vu,shuffle:Ku,size:Xu,some:t_,sortBy:n_},nm={now:Eo},rm={after:M,ary:ot,before:nr,bind:ir,bindKey:sr,curry:mo,curryRight:fo,debounce:bo,defer:Po,delay:ko,flip:Hs,memoize:xn,negate:Qc,once:dd,overArgs:bd,partial:$d,partialRight:Kd,rearg:Ou,rest:Lu,spread:S_,throttle:$_,unary:fp,wrap:Yp},im={castArray:ii,clone:pa,cloneDeep:ma,cloneDeepWith:ga,cloneWith:fa,conformsTo:eo,eq:lt,gt:al,gte:ol,isArguments:Nt,isArray:S,isArrayBuffer:Hl,isArrayLike:ft,isArrayLikeObject:No,isBoolean:ql,isBuffer:Rt.a,isDate:Wl,isElement:jl,isEmpty:Ql,isEqual:Kl,isEqualWith:Xl,isError:er,isFinite:Jl,isFunction:k,isInteger:ec,isLength:gt,isMap:sa,isMatch:tc,isMatchWith:nc,isNaN:ic,isNative:sc,isNil:lc,isNull:cc,isNumber:rc,isObject:y,isObjectLike:m,isPlainObject:Jn,isRegExp:_c,isSafeInteger:pc,isSet:da,isString:ml,isSymbol:g,isTypedArray:Mt,isUndefined:mc,isWeakMap:gc,isWeakSet:fc,lt:Ic,lte:xc,toArray:Zc,toFinite:D,toInteger:w,toLength:Ss,toNumber:x,toPlainObject:Ao,toSafeInteger:rp,toString:Ln},am={add:C,ceil:li,divide:qo,floor:qs,max:kc,maxBy:Fc,mean:Gc,meanBy:Yc,min:Vc,minBy:Wc,multiply:$c,round:Uu,subtract:y_,sum:O_,sumBy:N_},om={clamp:mi,inRange:pl,random:Su},sm={assign:Ht,assignIn:jt,assignInWith:$t,assignWith:Qt,at:Wn,create:_o,defaults:yo,defaultsDeep:Mo,entries:os,entriesIn:ss,extend:jt,extendWith:$t,findKey:As,findLastKey:Ms,forIn:js,forInRight:$s,forOwn:Qs,forOwnRight:Ks,functions:Js,functionsIn:el,get:Un,has:cl,hasIn:za,invert:Dl,invertBy:Pl,invoke:Ul,keys:Gt,keysIn:Wt,mapKeys:Dc,mapValues:wc,merge:Hc,mergeWith:wo,omit:ad,omitBy:cd,pick:Jd,pickBy:ld,result:Pu,set:Wu,setWith:ju,toPairs:os,toPairsIn:ss,transform:ap,unset:Dp,update:kp,updateWith:Fp,values:fl,valuesIn:Bp},lm={at:Hp,chain:ci,commit:Ea,lodash:ye,next:Jc,plant:eu,reverse:zp,tap:w_,thru:Q_,toIterator:Z_,toJSON:ep,value:ep,valueOf:ep,wrapperChain:qp},cm={camelCase:ri,capitalize:Rr,deburr:Mr,endsWith:ns,escape:us,escapeRegExp:ms,kebabCase:bc,lowerCase:Nc,lowerFirst:Rc,pad:Yd,padEnd:Hd,padStart:qd,parseInt:Wd,repeat:wu,replace:Mu,snakeCase:Ju,split:f_,startCase:h_,startsWith:b_,template:j_,templateSettings:B_,toLower:tp,toUpper:ip,trim:cp,trimEnd:up,trimStart:pp,truncate:gp,unescape:bp,upperCase:Up,upperFirst:Nr,words:ei},dm={attempt:tr,bindAll:ar,cond:Ka,conforms:Ja,constant:Le,defaultTo:vo,flow:Vs,flowRight:Ws,identity:L,iteratee:Ec,matches:Mc,matchesProperty:Lc,method:qc,methodOf:zc,mixin:jc,noop:pe,nthArg:nd,over:Ed,overEvery:vd,overSome:Td,property:$a,propertyOf:tu,range:Cu,rangeRight:yu,stubArray:Ni,stubFalse:ac.a,stubObject:v_,stubString:T_,stubTrue:C_,times:X_,toPath:np,uniqueId:xp};var um=function(){var e=new _e(this.__wrapped__);return e.__actions__=be(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=be(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=be(this.__views__),e};var _m=function(){if(this.__filtered__){var e=new _e(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},pm=Math.max,mm=Math.min;var gm=function(e,t,n){for(var r=-1,i=n.length;++r + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ye.after=rm.after,ye.ary=rm.ary,ye.assign=sm.assign,ye.assignIn=sm.assignIn,ye.assignInWith=sm.assignInWith,ye.assignWith=sm.assignWith,ye.at=sm.at,ye.before=rm.before,ye.bind=rm.bind,ye.bindAll=dm.bindAll,ye.bindKey=rm.bindKey,ye.castArray=im.castArray,ye.chain=lm.chain,ye.chunk=em.chunk,ye.compact=em.compact,ye.concat=em.concat,ye.cond=dm.cond,ye.conforms=dm.conforms,ye.constant=dm.constant,ye.countBy=tm.countBy,ye.create=sm.create,ye.curry=rm.curry,ye.curryRight=rm.curryRight,ye.debounce=rm.debounce,ye.defaults=sm.defaults,ye.defaultsDeep=sm.defaultsDeep,ye.defer=rm.defer,ye.delay=rm.delay,ye.difference=em.difference,ye.differenceBy=em.differenceBy,ye.differenceWith=em.differenceWith,ye.drop=em.drop,ye.dropRight=em.dropRight,ye.dropRightWhile=em.dropRightWhile,ye.dropWhile=em.dropWhile,ye.fill=em.fill,ye.filter=tm.filter,ye.flatMap=tm.flatMap,ye.flatMapDeep=tm.flatMapDeep,ye.flatMapDepth=tm.flatMapDepth,ye.flatten=em.flatten,ye.flattenDeep=em.flattenDeep,ye.flattenDepth=em.flattenDepth,ye.flip=rm.flip,ye.flow=dm.flow,ye.flowRight=dm.flowRight,ye.fromPairs=em.fromPairs,ye.functions=sm.functions,ye.functionsIn=sm.functionsIn,ye.groupBy=tm.groupBy,ye.initial=em.initial,ye.intersection=em.intersection,ye.intersectionBy=em.intersectionBy,ye.intersectionWith=em.intersectionWith,ye.invert=sm.invert,ye.invertBy=sm.invertBy,ye.invokeMap=tm.invokeMap,ye.iteratee=dm.iteratee,ye.keyBy=tm.keyBy,ye.keys=Gt,ye.keysIn=sm.keysIn,ye.map=tm.map,ye.mapKeys=sm.mapKeys,ye.mapValues=sm.mapValues,ye.matches=dm.matches,ye.matchesProperty=dm.matchesProperty,ye.memoize=rm.memoize,ye.merge=sm.merge,ye.mergeWith=sm.mergeWith,ye.method=dm.method,ye.methodOf=dm.methodOf,ye.mixin=Om,ye.negate=Qc,ye.nthArg=dm.nthArg,ye.omit=sm.omit,ye.omitBy=sm.omitBy,ye.once=rm.once,ye.orderBy=tm.orderBy,ye.over=dm.over,ye.overArgs=rm.overArgs,ye.overEvery=dm.overEvery,ye.overSome=dm.overSome,ye.partial=rm.partial,ye.partialRight=rm.partialRight,ye.partition=tm.partition,ye.pick=sm.pick,ye.pickBy=sm.pickBy,ye.property=dm.property,ye.propertyOf=dm.propertyOf,ye.pull=em.pull,ye.pullAll=em.pullAll,ye.pullAllBy=em.pullAllBy,ye.pullAllWith=em.pullAllWith,ye.pullAt=em.pullAt,ye.range=dm.range,ye.rangeRight=dm.rangeRight,ye.rearg=rm.rearg,ye.reject=tm.reject,ye.remove=em.remove,ye.rest=rm.rest,ye.reverse=em.reverse,ye.sampleSize=tm.sampleSize,ye.set=sm.set,ye.setWith=sm.setWith,ye.shuffle=tm.shuffle,ye.slice=em.slice,ye.sortBy=tm.sortBy,ye.sortedUniq=em.sortedUniq,ye.sortedUniqBy=em.sortedUniqBy,ye.split=cm.split,ye.spread=rm.spread,ye.tail=em.tail,ye.take=em.take,ye.takeRight=em.takeRight,ye.takeRightWhile=em.takeRightWhile,ye.takeWhile=em.takeWhile,ye.tap=lm.tap,ye.throttle=rm.throttle,ye.thru=Q_,ye.toArray=im.toArray,ye.toPairs=sm.toPairs,ye.toPairsIn=sm.toPairsIn,ye.toPath=dm.toPath,ye.toPlainObject=im.toPlainObject,ye.transform=sm.transform,ye.unary=rm.unary,ye.union=em.union,ye.unionBy=em.unionBy,ye.unionWith=em.unionWith,ye.uniq=em.uniq,ye.uniqBy=em.uniqBy,ye.uniqWith=em.uniqWith,ye.unset=sm.unset,ye.unzip=em.unzip,ye.unzipWith=em.unzipWith,ye.update=sm.update,ye.updateWith=sm.updateWith,ye.values=sm.values,ye.valuesIn=sm.valuesIn,ye.without=em.without,ye.words=cm.words,ye.wrap=rm.wrap,ye.xor=em.xor,ye.xorBy=em.xorBy,ye.xorWith=em.xorWith,ye.zip=em.zip,ye.zipObject=em.zipObject,ye.zipObjectDeep=em.zipObjectDeep,ye.zipWith=em.zipWith,ye.entries=sm.toPairs,ye.entriesIn=sm.toPairsIn,ye.extend=sm.assignIn,ye.extendWith=sm.assignInWith,Om(ye,ye),ye.add=am.add,ye.attempt=dm.attempt,ye.camelCase=cm.camelCase,ye.capitalize=cm.capitalize,ye.ceil=am.ceil,ye.clamp=om.clamp,ye.clone=im.clone,ye.cloneDeep=im.cloneDeep,ye.cloneDeepWith=im.cloneDeepWith,ye.cloneWith=im.cloneWith,ye.conformsTo=im.conformsTo,ye.deburr=cm.deburr,ye.defaultTo=dm.defaultTo,ye.divide=am.divide,ye.endsWith=cm.endsWith,ye.eq=im.eq,ye.escape=cm.escape,ye.escapeRegExp=cm.escapeRegExp,ye.every=tm.every,ye.find=tm.find,ye.findIndex=em.findIndex,ye.findKey=sm.findKey,ye.findLast=tm.findLast,ye.findLastIndex=em.findLastIndex,ye.findLastKey=sm.findLastKey,ye.floor=am.floor,ye.forEach=tm.forEach,ye.forEachRight=tm.forEachRight,ye.forIn=sm.forIn,ye.forInRight=sm.forInRight,ye.forOwn=sm.forOwn,ye.forOwnRight=sm.forOwnRight,ye.get=sm.get,ye.gt=im.gt,ye.gte=im.gte,ye.has=sm.has,ye.hasIn=sm.hasIn,ye.head=em.head,ye.identity=L,ye.includes=tm.includes,ye.indexOf=em.indexOf,ye.inRange=om.inRange,ye.invoke=sm.invoke,ye.isArguments=im.isArguments,ye.isArray=S,ye.isArrayBuffer=im.isArrayBuffer,ye.isArrayLike=im.isArrayLike,ye.isArrayLikeObject=im.isArrayLikeObject,ye.isBoolean=im.isBoolean,ye.isBuffer=im.isBuffer,ye.isDate=im.isDate,ye.isElement=im.isElement,ye.isEmpty=im.isEmpty,ye.isEqual=im.isEqual,ye.isEqualWith=im.isEqualWith,ye.isError=im.isError,ye.isFinite=im.isFinite,ye.isFunction=im.isFunction,ye.isInteger=im.isInteger,ye.isLength=im.isLength,ye.isMap=im.isMap,ye.isMatch=im.isMatch,ye.isMatchWith=im.isMatchWith,ye.isNaN=im.isNaN,ye.isNative=im.isNative,ye.isNil=im.isNil,ye.isNull=im.isNull,ye.isNumber=im.isNumber,ye.isObject=y,ye.isObjectLike=im.isObjectLike,ye.isPlainObject=im.isPlainObject,ye.isRegExp=im.isRegExp,ye.isSafeInteger=im.isSafeInteger,ye.isSet=im.isSet,ye.isString=im.isString,ye.isSymbol=im.isSymbol,ye.isTypedArray=im.isTypedArray,ye.isUndefined=im.isUndefined,ye.isWeakMap=im.isWeakMap,ye.isWeakSet=im.isWeakSet,ye.join=em.join,ye.kebabCase=cm.kebabCase,ye.last=Go,ye.lastIndexOf=em.lastIndexOf,ye.lowerCase=cm.lowerCase,ye.lowerFirst=cm.lowerFirst,ye.lt=im.lt,ye.lte=im.lte,ye.max=am.max,ye.maxBy=am.maxBy,ye.mean=am.mean,ye.meanBy=am.meanBy,ye.min=am.min,ye.minBy=am.minBy,ye.stubArray=dm.stubArray,ye.stubFalse=dm.stubFalse,ye.stubObject=dm.stubObject,ye.stubString=dm.stubString,ye.stubTrue=dm.stubTrue,ye.multiply=am.multiply,ye.nth=em.nth,ye.noop=dm.noop,ye.now=nm.now,ye.pad=cm.pad,ye.padEnd=cm.padEnd,ye.padStart=cm.padStart,ye.parseInt=cm.parseInt,ye.random=om.random,ye.reduce=tm.reduce,ye.reduceRight=tm.reduceRight,ye.repeat=cm.repeat,ye.replace=cm.replace,ye.result=sm.result,ye.round=am.round,ye.sample=tm.sample,ye.size=tm.size,ye.snakeCase=cm.snakeCase,ye.some=tm.some,ye.sortedIndex=em.sortedIndex,ye.sortedIndexBy=em.sortedIndexBy,ye.sortedIndexOf=em.sortedIndexOf,ye.sortedLastIndex=em.sortedLastIndex,ye.sortedLastIndexBy=em.sortedLastIndexBy,ye.sortedLastIndexOf=em.sortedLastIndexOf,ye.startCase=cm.startCase,ye.startsWith=cm.startsWith,ye.subtract=am.subtract,ye.sum=am.sum,ye.sumBy=am.sumBy,ye.template=cm.template,ye.times=dm.times,ye.toFinite=im.toFinite,ye.toInteger=w,ye.toLength=im.toLength,ye.toLower=cm.toLower,ye.toNumber=im.toNumber,ye.toSafeInteger=im.toSafeInteger,ye.toString=im.toString,ye.toUpper=cm.toUpper,ye.trim=cm.trim,ye.trimEnd=cm.trimEnd,ye.trimStart=cm.trimStart,ye.truncate=cm.truncate,ye.unescape=cm.unescape,ye.uniqueId=dm.uniqueId,ye.upperCase=cm.upperCase,ye.upperFirst=cm.upperFirst,ye.each=tm.forEach,ye.eachRight=tm.forEachRight,ye.first=em.head,Om(ye,(Sm={},io(ye,(function(e,t){vm.call(ye.prototype,t)||(Sm[t]=e)})),Sm),{chain:!1}),ye.VERSION="4.17.15",(ye.templateSettings=cm.templateSettings).imports._=ye,Fe(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){ye[e].placeholder=ye})),Fe(["drop","take"],(function(e,t){_e.prototype[e]=function(n){n=void 0===n?1:Cm(w(n),0);var r=this.__filtered__&&!t?new _e(this):this.clone();return r.__filtered__?r.__takeCount__=ym(n,r.__takeCount__):r.__views__.push({size:ym(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},_e.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),Fe(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;_e.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Qa(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),Fe(["head","last"],(function(e,t){var n="take"+(t?"Right":"");_e.prototype[e]=function(){return this[n](1).value()[0]}})),Fe(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");_e.prototype[e]=function(){return this.__filtered__?new _e(this):this[n](1)}})),_e.prototype.compact=function(){return this.filter(L)},_e.prototype.find=function(e){return this.filter(e).head()},_e.prototype.findLast=function(e){return this.reverse().find(e)},_e.prototype.invokeMap=mt((function(e,t){return"function"==typeof e?new _e(this):this.map((function(n){return Fl(n,e,t)}))})),_e.prototype.reject=function(e){return this.filter(Qc(Qa(e)))},_e.prototype.slice=function(e,t){e=w(e);var n=this;return n.__filtered__&&(e>0||t<0)?new _e(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=w(t))<0?n.dropRight(-t):n.take(t-e)),n)},_e.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},_e.prototype.toArray=function(){return this.take(4294967295)},io(_e.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=ye[r?"take"+("last"==t?"Right":""):t],a=r||/^find/.test(t);i&&(ye.prototype[t]=function(){var t=this.__wrapped__,o=r?[1]:arguments,s=t instanceof _e,l=o[0],c=s||S(t),d=function(e){var t=i.apply(ye,Gn([e],o));return r&&u?t[0]:t};c&&n&&"function"==typeof l&&1!=l.length&&(s=c=!1);var u=this.__chain__,_=!!this.__actions__.length,p=a&&!u,m=s&&!_;if(!a&&c){t=m?t:new _e(this);var g=e.apply(t,o);return g.__actions__.push({func:Q_,args:[d],thisArg:void 0}),new he(g,u)}return p&&m?e.apply(this,o):(g=this.thru(d),p?r?g.value()[0]:g.value():g)})})),Fe(["pop","push","shift","sort","splice","unshift"],(function(e){var t=bm[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);ye.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(S(i)?i:[],e)}return this[n]((function(n){return t.apply(S(n)?n:[],e)}))}})),io(_e.prototype,(function(e,t){var n=ye[t];if(n){var r=n.name+"";vm.call(ge,r)||(ge[r]=[]),ge[r].push({name:t,func:n})}})),ge[Je(void 0,2).name]=[{name:"wrapper",func:void 0}],_e.prototype.clone=um,_e.prototype.reverse=_m,_e.prototype.value=hm,ye.prototype.at=lm.at,ye.prototype.chain=lm.wrapperChain,ye.prototype.commit=lm.commit,ye.prototype.next=lm.next,ye.prototype.plant=lm.plant,ye.prototype.reverse=lm.reverse,ye.prototype.toJSON=ye.prototype.valueOf=ye.prototype.value=lm.value,ye.prototype.first=ye.prototype.head,Tm&&(ye.prototype[Tm]=lm.toIterator);var Nm=ye; +/** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */}])})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DTWRFZGl0b3Ivd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0NNZEVkaXRvci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcm9vdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLyh3ZWJwYWNrKS9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvdG9vbGJhckhhbmRsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvdXRpbC9VdGlsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvY29uZmlnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvbGFuZy9lbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvZWRpdG9yL2NvZGVtaXJyb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbW9kZS9tYXJrZG93bi9tYXJrZG93bi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vbW9kZS9vdmVybGF5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9mb2xkL3htbC1mb2xkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRjb2RlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vc3JjL2VkaXRvci9jcmVhdGVFbGVtZW50LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvbGFuZy96aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbW9kZS94bWwveG1sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9tb2RlL21ldGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL21vZGUvZ2ZtL2dmbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2VkaXQvY2xvc2V0YWcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2VkaXQvY29udGludWVsaXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9lZGl0L2Nsb3NlYnJhY2tldHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL3Njcm9sbC9hbm5vdGF0ZXNjcm9sbGJhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vbWFyay1zZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGd1dHRlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vZm9sZC9jb21tZW50LWZvbGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2ZvbGQvaW5kZW50LWZvbGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2ZvbGQvYnJhY2UtZm9sZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vZm9sZC9tYXJrZG93bi1mb2xkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbWFya2VkQDAuNS4yQG1hcmtlZC9saWIvbWFya2VkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2luZGV4LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2hpZ2hsaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvMWMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FibmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FjY2Vzc2xvZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hZGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FuZ2Vsc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcGFjaGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FwcGxlc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcmNhZGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NwcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJkdWluby5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJtYXNtLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94bWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FzY2lpZG9jLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hc3BlY3RqLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaG90a2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F2cmFzbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXdrLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9heGFwdGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2ljLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ibmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2JyYWluZnVjay5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jYXBucHJvdG8uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NleWxvbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2xlYW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUtcmVwbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY21ha2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NvZmZlZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29xLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jb3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NybXNoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcnlzdGFsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hcmtkb3duLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kYXJ0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kZWxwaGkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RpZmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RqYW5nby5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZG5zLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb2NrZXJmaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RzY29uZmlnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kdHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2R1c3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VibmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VsaXhpci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZWxtLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VybGFuZy1yZXBsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmxhbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2V4Y2VsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9maXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZsaXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZvcnRyYW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZzaGFycC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2Ftcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2F1c3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2djb2RlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9naGVya2luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbHNsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nb2xvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncmFkbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dyb292eS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFtbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFuZGxlYmFycy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFza2VsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGF4ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHNwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9odG1sYmFycy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHR0cC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2luZm9ybTcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2luaS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaXJwZjkwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pc2JsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYXZhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYXZhc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYm9zcy1jbGkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2pzb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2p1bGlhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qdWxpYS1yZXBsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9rb3RsaW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xhc3NvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZGlmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZWFmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZXNzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9saXNwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9saXZlY29kZXNlcnZlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGl2ZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGx2bS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHNsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sdWEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21ha2VmaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXRoZW1hdGljYS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF0bGFiLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXhpbWEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21lbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWVyY3VyeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWlwc2FzbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWl6YXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BlcmwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vam9saWNpb3VzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tb25rZXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vb25zY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL24xcWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25naW54LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uaW1yb2QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25peC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbnNpcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb2JqZWN0aXZlYy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb2NhbWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29wZW5zY2FkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9veHlnZW5lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wYXJzZXIzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGdzcWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGxhaW50ZXh0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb255LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb3dlcnNoZWxsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9jZXNzaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9maWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9sb2cuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3RvYnVmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wdXBwZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B1cmViYXNpYy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHl0aG9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9xLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9xbWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JlYXNvbm1sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yaWIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JvYm9jb25mLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb3V0ZXJvcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnNsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWxlc2xhbmd1YWdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zYXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NjYWxhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2hlbWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NjaWxhYi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2Nzcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2hlbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NtYWxpLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWFsbHRhbGsuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NtbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zcWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0YW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0YXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdGVwMjEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0eWx1cy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3VidW5pdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3dpZnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RhZ2dlcnNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveWFtbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90Y2wuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGhyaWZ0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90cC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHdpZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHlwZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmFsYS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmJuZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Zic2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YnNjcmlwdC1odG1sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92ZXJpbG9nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92aGRsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92aW0uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3g4NmFzbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3hxdWVyeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvemVwaGlyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvcWluaXUtc2RrLXVwbG9hZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvdXRpbC9odHRwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlVG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlTWF0aE9wZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9hZGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2FmdGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzTWFza2VkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19XZWFrTWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19tZXRhTWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU2V0RGF0YS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQ3Rvci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQmluZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXBwbHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NvbXBvc2VBcmdzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX0xhenlXcmFwcGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL25vb3AuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3JlYWxOYW1lcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX0xvZGFzaFdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fd3JhcHBlckNsb25lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzTGF6aWFibGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXREYXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faW5zZXJ0V3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGaW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc05hTi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5SW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3VwZGF0ZVdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXRXcmFwVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJlY3VycnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldEhvbGRlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVvcmRlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUh5YnJpZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVBhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21lcmdlRGF0YS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlV3JhcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9hcnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9lcS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYXNzaWduLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMva2V5c0luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Fzc2lnbkluLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Fzc2lnbkluV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9hc3NpZ25XaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pc0tleS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hHZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX0hhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc3NvY0luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19saXN0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fTGlzdENhY2hlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19NYXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21hcENhY2hlQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19tYXBDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX01hcENhY2hlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90b1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3RvS2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2dldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUF0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGbGF0dGVuLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2ZsYXRSZXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2F0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0Vycm9yLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYmVmb3JlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYmluZEFsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9iaW5kS2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU2xpY2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Nhc3RTbGljZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faGFzVW5pY29kZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RyaW5nVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQ2FzZUZpcnN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VwcGVyRmlyc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlSZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19kZWJ1cnJMZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVidXJyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc2NpaVdvcmRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19oYXNVbmljb2RlV29yZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fdW5pY29kZVdvcmRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3dvcmRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVDb21wb3VuZGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NhbWVsQ2FzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jYXN0QXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJvdW5kLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NlaWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2hhaW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2h1bmsuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VDbGFtcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jbGFtcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RhY2tDbGVhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3N0YWNrR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zdGFja0hhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX1N0YWNrLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5RmlsdGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N0dWJBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0U3ltYm9scy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY29weVN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldFN5bWJvbHNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY29weVN5bWJvbHNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldEFsbEtleXNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX1Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX1NldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0VGFnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pbml0Q2xvbmVBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fVWludDhBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVEYXRhVmlldy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Nsb25lU3ltYm9sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jbG9uZVR5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2luaXRDbG9uZUJ5VGFnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pbml0Q2xvbmVPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc01hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc01hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzU2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzU2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2xvbmVEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Nsb25lRGVlcFdpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2xvbmVXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NvbW1pdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb21wYWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3NldENhY2hlSGFzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlTb21lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2VxdWFsQnlUYWcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXNFcXVhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VIYXNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9oYXNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3Byb3BlcnR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY29uZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUNvbmZvcm1zVG8uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VDb25mb3Jtcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb25mb3Jtcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb25mb3Jtc1RvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheUFnZ3JlZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUJhc2VGb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUJhc2VFYWNoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRWFjaC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUFnZ3JlZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUFnZ3JlZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY291bnRCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY3VycnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY3VycnlSaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9ub3cuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVib3VuY2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVmYXVsdFRvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2RlZmF1bHRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zYWZlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvUGxhaW5PYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VNZXJnZURlZXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VNZXJnZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3VzdG9tRGVmYXVsdHNNZXJnZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tZXJnZVdpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVmYXVsdHNEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRGVsYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVsYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9kaWZmZXJlbmNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2xhc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGlmZmVyZW5jZUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2RpZmZlcmVuY2VXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2RpdmlkZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9kcm9wLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Ryb3BSaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVdoaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Ryb3BSaWdodFdoaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Ryb3BXaGlsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2FzdEZ1bmN0aW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZvckVhY2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5RWFjaFJpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRm9yUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGb3JPd25SaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUVhY2hSaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mb3JFYWNoUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZW5kc1dpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VUb1BhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXRUb1BhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVUb1BhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvUGFpcnMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9QYWlyc0luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZXNjYXBlUmVnRXhwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheUV2ZXJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRXZlcnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZXZlcnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9MZW5ndGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGaWxsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZpbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmlsdGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVGaW5kLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9maW5kLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRmluZEtleS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9maW5kS2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZpbmRMYXN0SW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmluZExhc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmluZExhc3RLZXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaGVhZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZU1hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxhdE1hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mbGF0TWFwRGVlcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mbGF0TWFwRGVwdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxhdHRlbkRlZXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxhdHRlbkRlcHRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZsaXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxvb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUZsb3cuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxvdy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mbG93UmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZm9ySW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZm9ySW5SaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mb3JPd24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZm9yT3duUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZnJvbVBhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRnVuY3Rpb25zLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Z1bmN0aW9ucy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mdW5jdGlvbnNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9ncm91cEJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlR3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZ3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZ3RlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSGFzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2hhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUluUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaW5SYW5nZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaW5kZXhPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbml0aWFsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSW50ZXJzZWN0aW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jYXN0QXJyYXlMaWtlT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ludGVyc2VjdGlvbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnRlcnNlY3Rpb25CeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnRlcnNlY3Rpb25XaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSW52ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUludmVydGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ludmVydC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnZlcnRCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcGFyZW50LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSW52b2tlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ludm9rZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnZva2VNYXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc0FycmF5QnVmZmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQXJyYXlCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNCb29sZWFuLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXNEYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0VsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0VxdWFsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRXF1YWxXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRmluaXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzSW50ZWdlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc01hdGNoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTWF0Y2hXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTnVtYmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTmFOLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pc01hc2thYmxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTmF0aXZlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTmlsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTnVsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzUmVnRXhwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzUmVnRXhwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzU2FmZUludGVnZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNVbmRlZmluZWQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNXZWFrTWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzV2Vha1NldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9qb2luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2tlYmFiQ2FzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9rZXlCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RyaWN0TGFzdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbGFzdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbG93ZXJDYXNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2xvd2VyRmlyc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VMdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9sdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9sdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWFwS2V5cy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXBWYWx1ZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWF0Y2hlcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXRjaGVzUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VFeHRyZW11bS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWF4QnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTdW0uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VNZWFuLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21lYW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWVhbkJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21lcmdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21ldGhvZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tZXRob2RPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9taW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWluQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWl4aW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbXVsdGlwbHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbmVnYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pdGVyYXRvclRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9BcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9uZXh0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlTnRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL250aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9udGhBcmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VVbnNldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3VzdG9tT21pdENsb25lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL29taXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VQaWNrQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGlja0J5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL29taXRCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9vbmNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU29ydEJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb21wYXJlQXNjZW5kaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb21wYXJlTXVsdGlwbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VPcmRlckJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL29yZGVyQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZU92ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvb3Zlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2FzdFJlc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvb3ZlckFyZ3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvb3ZlckV2ZXJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL292ZXJTb21lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUmVwZWF0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc2NpaVNpemUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3VuaWNvZGVTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zdHJpbmdTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVQYWRkaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3BhZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wYWRFbmQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFkU3RhcnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFyc2VJbnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFydGlhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wYXJ0aWFsUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFydGl0aW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUGljay5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9waWNrLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3BsYW50LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3Byb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJbmRleE9mV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVB1bGxBbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcHVsbEFsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wdWxsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3B1bGxBbGxCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wdWxsQWxsV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVB1bGxBdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wdWxsQXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VSYW5kb20uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmFuZG9tLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJhbmdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JhbmdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JhbmdlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVhcmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VSZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVkdWNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheVJlZHVjZVJpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JlZHVjZVJpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JlamVjdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9yZW1vdmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVwZWF0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVzdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9yb3VuZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlTYW1wbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTYW1wbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc2FtcGxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zaHVmZmxlU2VsZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlTYW1wbGVTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU2FtcGxlU2l6ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zYW1wbGVTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zZXRXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheVNodWZmbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTaHVmZmxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NodWZmbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc2l6ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zbGljZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zbmFrZUNhc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTb21lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvbWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydEJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU29ydGVkSW5kZXhCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVNvcnRlZEluZGV4LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvcnRlZEluZGV4LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvcnRlZEluZGV4QnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zb3J0ZWRMYXN0SW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkTGFzdEluZGV4QnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkTGFzdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTb3J0ZWRVbmlxLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvcnRlZFVuaXEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkVW5pcUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NwbGl0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zdGFydENhc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3RhcnRzV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zdHViT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N0dWJTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3R1YlRydWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3VidHJhY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3VtLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N1bUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RhaWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdGFrZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90YWtlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdGFrZVJpZ2h0V2hpbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdGFrZVdoaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RhcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19yZUVzY2FwZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90aHJvdHRsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90aHJ1LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RpbWVzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvSXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VXcmFwcGVyVmFsdWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvd3JhcHBlclZhbHVlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvTG93ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9QYXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvU2FmZUludGVnZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9VcHBlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NoYXJzRW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NoYXJzU3RhcnRJbmRleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90cmltLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RyaW1FbmQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdHJpbVN0YXJ0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RydW5jYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuYXJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL191bmVzY2FwZUh0bWxDaGFyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuZXNjYXBlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VVbmlxLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaW9uQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdW5pb25XaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaXEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdW5pcUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaXFXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaXF1ZUlkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3Vuc2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuemlwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuemlwV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVVwZGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy91cGRhdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdXBkYXRlV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy91cHBlckNhc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdmFsdWVzSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvd2l0aG91dC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy93cmFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3dyYXBwZXJBdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy93cmFwcGVyQ2hhaW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvd3JhcHBlclJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VYb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMveG9yLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3hvckJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3hvcldpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvemlwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlWmlwT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3ppcE9iamVjdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy96aXBPYmplY3REZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3ppcFdpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYXJyYXkuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb2xsZWN0aW9uLmRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGF0ZS5kZWZhdWx0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Z1bmN0aW9uLmRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbGFuZy5kZWZhdWx0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21hdGguZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9udW1iZXIuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9vYmplY3QuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zZXEuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zdHJpbmcuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy91dGlsLmRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xhenlDbG9uZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbGF6eVJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldFZpZXcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xhenlWYWx1ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9sb2Rhc2guZGVmYXVsdC5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJ3aW5kb3ciLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZnJlZVNlbGYiLCJzZWxmIiwiRnVuY3Rpb24iLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsImdlY2tvIiwidGVzdCIsImllX3VwdG8xMCIsImllXzExdXAiLCJleGVjIiwiZWRnZSIsImllIiwiaWVfdmVyc2lvbiIsImRvY3VtZW50IiwiZG9jdW1lbnRNb2RlIiwid2Via2l0IiwicXR3ZWJraXQiLCJjaHJvbWUiLCJwcmVzdG8iLCJzYWZhcmkiLCJ2ZW5kb3IiLCJtYWNfZ2VNb3VudGFpbkxpb24iLCJwaGFudG9tIiwiaW9zIiwiYW5kcm9pZCIsIm1vYmlsZSIsIm1hYyIsImNocm9tZU9TIiwid2luZG93cyIsInByZXN0b192ZXJzaW9uIiwibWF0Y2giLCJOdW1iZXIiLCJmbGlwQ3RybENtZCIsImNhcHR1cmVSaWdodENsaWNrIiwiY2xhc3NUZXN0IiwiY2xzIiwiUmVnRXhwIiwicmFuZ2UiLCJybUNsYXNzIiwibm9kZSIsImN1cnJlbnQiLCJjbGFzc05hbWUiLCJhZnRlciIsInNsaWNlIiwiaW5kZXgiLCJsZW5ndGgiLCJyZW1vdmVDaGlsZHJlbiIsImUiLCJjb3VudCIsImNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZCIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZHJlbkFuZEFkZCIsInBhcmVudCIsImFwcGVuZENoaWxkIiwiZWx0IiwidGFnIiwiY29udGVudCIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImVsdFAiLCJzZXRBdHRyaWJ1dGUiLCJjb250YWlucyIsImNoaWxkIiwibm9kZVR5cGUiLCJwYXJlbnROb2RlIiwiaG9zdCIsImFjdGl2ZUVsdCIsImFjdGl2ZUVsZW1lbnQiLCJib2R5Iiwic2hhZG93Um9vdCIsImFkZENsYXNzIiwiam9pbkNsYXNzZXMiLCJhIiwiYiIsImFzIiwic3BsaXQiLCJjcmVhdGVSYW5nZSIsInN0YXJ0IiwiZW5kIiwiZW5kTm9kZSIsInNldEVuZCIsInNldFN0YXJ0IiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJjb2xsYXBzZSIsIm1vdmVFbmQiLCJtb3ZlU3RhcnQiLCJzZWxlY3RJbnB1dCIsInNlbGVjdCIsImYiLCJhcmdzIiwiQXJyYXkiLCJhcmd1bWVudHMiLCJhcHBseSIsImNvcHlPYmoiLCJvYmoiLCJ0YXJnZXQiLCJvdmVyd3JpdGUiLCJwcm9wIiwiY291bnRDb2x1bW4iLCJzdHJpbmciLCJ0YWJTaXplIiwic3RhcnRJbmRleCIsInN0YXJ0VmFsdWUiLCJzZWFyY2giLCJuZXh0VGFiIiwiaW5kZXhPZiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiX2UiLCJEZWxheWVkIiwidGhpcyIsImlkIiwidGltZSIsImhhbmRsZXIiLCJvblRpbWVvdXQiLCJhcnJheSIsIkRhdGUiLCJzZXRUaW1lb3V0Iiwic2V0IiwibXMiLCJjbGVhclRpbWVvdXQiLCJQYXNzIiwidG9TdHJpbmciLCJzZWxfZG9udFNjcm9sbCIsInNjcm9sbCIsInNlbF9tb3VzZSIsIm9yaWdpbiIsInNlbF9tb3ZlIiwiZmluZENvbHVtbiIsImdvYWwiLCJwb3MiLCJjb2wiLCJza2lwcGVkIiwiTWF0aCIsIm1pbiIsInNwYWNlU3RycyIsInNwYWNlU3RyIiwicHVzaCIsImxzdCIsImFyciIsIm1hcCIsIm91dCIsIm5vdGhpbmciLCJjcmVhdGVPYmoiLCJiYXNlIiwicHJvcHMiLCJpbnN0Iiwibm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIiLCJpc1dvcmRDaGFyQmFzaWMiLCJjaCIsInRvVXBwZXJDYXNlIiwidG9Mb3dlckNhc2UiLCJpc1dvcmRDaGFyIiwiaGVscGVyIiwic291cmNlIiwiaXNFbXB0eSIsImV4dGVuZGluZ0NoYXJzIiwiaXNFeHRlbmRpbmdDaGFyIiwiY2hhckNvZGVBdCIsInNraXBFeHRlbmRpbmdDaGFycyIsInN0ciIsImRpciIsImNoYXJBdCIsImZpbmRGaXJzdCIsInByZWQiLCJmcm9tIiwidG8iLCJtaWRGIiwibWlkIiwiY2VpbCIsImZsb29yIiwiYmlkaU90aGVyIiwiZ2V0QmlkaVBhcnRBdCIsIm9yZGVyIiwic3RpY2t5IiwiZm91bmQiLCJjdXIiLCJiaWRpT3JkZXJpbmciLCJiaWRpUkUiLCJpc05ldXRyYWwiLCJpc1N0cm9uZyIsImNvdW50c0FzTGVmdCIsImNvdW50c0FzTnVtIiwiQmlkaVNwYW4iLCJsZXZlbCIsImRpcmVjdGlvbiIsIm91dGVyVHlwZSIsImNvZGUiLCJsZW4iLCJ0eXBlcyIsImkkMSIsInByZXYiLCJ0eXBlIiwiaSQyIiwidHlwZSQxIiwiaSQzIiwicHJldiQxIiwidHlwZSQyIiwiaSQ0IiwidHlwZSQzIiwicmVwbGFjZSIsImoiLCJpJDUiLCJjdXIkMSIsInR5cGUkNCIsImkkNiIsImVuZCQxIiwiYmVmb3JlIiwicmVwbGFjZSQxIiwiaiQxIiwiaSQ3IiwiYXQiLCJpc1JUTCIsImokMiIsInNwbGljZSIsIm5zdGFydCIsInVuc2hpZnQiLCJyZXZlcnNlIiwiZ2V0T3JkZXIiLCJsaW5lIiwidGV4dCIsIm5vSGFuZGxlcnMiLCJvbiIsImVtaXR0ZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlcnMiLCJjb25jYXQiLCJnZXRIYW5kbGVycyIsIm9mZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsInNpZ25hbCIsImhhbmRsZXJzIiwic2lnbmFsRE9NRXZlbnQiLCJjbSIsIm92ZXJyaWRlIiwicHJldmVudERlZmF1bHQiLCJkZWZhdWx0UHJldmVudGVkIiwiZV9kZWZhdWx0UHJldmVudGVkIiwiY29kZW1pcnJvcklnbm9yZSIsInNpZ25hbEN1cnNvckFjdGl2aXR5IiwiY3Vyc29yQWN0aXZpdHkiLCJjdXJPcCIsImN1cnNvckFjdGl2aXR5SGFuZGxlcnMiLCJoYXNIYW5kbGVyIiwiZXZlbnRNaXhpbiIsImN0b3IiLCJlX3ByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJlX3N0b3BQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImVfc3RvcCIsImVfdGFyZ2V0Iiwic3JjRWxlbWVudCIsImVfYnV0dG9uIiwid2hpY2giLCJidXR0b24iLCJjdHJsS2V5IiwiendzcFN1cHBvcnRlZCIsImJhZEJpZGlSZWN0cyIsImRyYWdBbmREcm9wIiwiZGl2IiwiemVyb1dpZHRoRWxlbWVudCIsIm1lYXN1cmUiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXRXaWR0aCIsImhhc0JhZEJpZGlSZWN0cyIsInR4dCIsInIwIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicjEiLCJsZWZ0IiwicmlnaHQiLCJzcGxpdExpbmVzQXV0byIsInJlc3VsdCIsIm5sIiwicnQiLCJoYXNTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJ0ZSIsIm93bmVyRG9jdW1lbnQiLCJzZWxlY3Rpb24iLCJwYXJlbnRFbGVtZW50IiwiY29tcGFyZUVuZFBvaW50cyIsImhhc0NvcHlFdmVudCIsIm9uY29weSIsImJhZFpvb21lZFJlY3RzIiwibW9kZXMiLCJtaW1lTW9kZXMiLCJkZWZpbmVNb2RlIiwiZGVwZW5kZW5jaWVzIiwicmVzb2x2ZU1vZGUiLCJzcGVjIiwiZ2V0TW9kZSIsIm9wdGlvbnMiLCJtZmFjdG9yeSIsIm1vZGVPYmoiLCJtb2RlRXh0ZW5zaW9ucyIsImV4dHMiLCJoZWxwZXJUeXBlIiwibW9kZVByb3BzIiwicHJvcCQxIiwiZXh0ZW5kTW9kZSIsInByb3BlcnRpZXMiLCJjb3B5U3RhdGUiLCJzdGF0ZSIsIm5zdGF0ZSIsInZhbCIsImlubmVyTW9kZSIsImluZm8iLCJzdGFydFN0YXRlIiwiYTEiLCJhMiIsIlN0cmluZ1N0cmVhbSIsImxpbmVPcmFjbGUiLCJsYXN0Q29sdW1uUG9zIiwibGFzdENvbHVtblZhbHVlIiwibGluZVN0YXJ0IiwiZ2V0TGluZSIsImRvYyIsImZpcnN0Iiwic2l6ZSIsIkVycm9yIiwiY2h1bmsiLCJsaW5lcyIsImNoaWxkcmVuIiwic3oiLCJjaHVua1NpemUiLCJnZXRCZXR3ZWVuIiwiaXRlciIsImdldExpbmVzIiwidXBkYXRlTGluZUhlaWdodCIsImhlaWdodCIsImRpZmYiLCJsaW5lTm8iLCJubyIsImxpbmVBdEhlaWdodCIsImgiLCJvdXRlciIsImxoIiwiaXNMaW5lIiwibGluZU51bWJlckZvciIsIlN0cmluZyIsImxpbmVOdW1iZXJGb3JtYXR0ZXIiLCJmaXJzdExpbmVOdW1iZXIiLCJQb3MiLCJjbXAiLCJlcXVhbEN1cnNvclBvcyIsImNvcHlQb3MiLCJ4IiwibWF4UG9zIiwibWluUG9zIiwiY2xpcExpbmUiLCJtYXgiLCJjbGlwUG9zIiwibGFzdCIsImxpbmVsZW4iLCJjbGlwVG9MZW4iLCJjbGlwUG9zQXJyYXkiLCJlb2wiLCJzb2wiLCJwZWVrIiwidW5kZWZpbmVkIiwibmV4dCIsImVhdCIsImVhdFdoaWxlIiwiZWF0U3BhY2UiLCJza2lwVG9FbmQiLCJza2lwVG8iLCJiYWNrVXAiLCJjb2x1bW4iLCJpbmRlbnRhdGlvbiIsInBhdHRlcm4iLCJjb25zdW1lIiwiY2FzZUluc2Vuc2l0aXZlIiwiY2FzZWQiLCJzdWJzdHIiLCJoaWRlRmlyc3RDaGFycyIsImlubmVyIiwibG9va0FoZWFkIiwib3JhY2xlIiwiYmFzZVRva2VuIiwiU2F2ZWRDb250ZXh0IiwiQ29udGV4dCIsIm1heExvb2tBaGVhZCIsImJhc2VUb2tlbnMiLCJiYXNlVG9rZW5Qb3MiLCJoaWdobGlnaHRMaW5lIiwiY29udGV4dCIsImZvcmNlVG9FbmQiLCJzdCIsIm1vZGVHZW4iLCJsaW5lQ2xhc3NlcyIsInJ1bk1vZGUiLCJsb29wIiwib3ZlcmxheSIsIm92ZXJsYXlzIiwiaV9lbmQiLCJvcGFxdWUiLCJzdHlsZXMiLCJjbGFzc2VzIiwiYmdDbGFzcyIsInRleHRDbGFzcyIsImdldExpbmVTdHlsZXMiLCJ1cGRhdGVGcm9udGllciIsImdldENvbnRleHRCZWZvcmUiLCJyZXNldFN0YXRlIiwibWF4SGlnaGxpZ2h0TGVuZ3RoIiwic3RhdGVBZnRlciIsInNhdmUiLCJzdHlsZUNsYXNzZXMiLCJoaWdobGlnaHRGcm9udGllciIsIm1vZGVGcm9udGllciIsInByZWNpc2UiLCJkaXNwbGF5IiwibWluaW5kZW50IiwibWlubGluZSIsImxpbSIsImluZGVudGVkIiwiZmluZFN0YXJ0TGluZSIsInNhdmVkIiwiZnJvbVNhdmVkIiwicHJvY2Vzc0xpbmUiLCJ2aWV3RnJvbSIsInZpZXdUbyIsIm5leHRMaW5lIiwic3RhcnRBdCIsInN0cmVhbSIsImNhbGxCbGFua0xpbmUiLCJyZWFkVG9rZW4iLCJibGFua0xpbmUiLCJ0b2tlbiIsImNvcHkiLCJUb2tlbiIsInRha2VUb2tlbiIsImFzQXJyYXkiLCJ0b2tlbnMiLCJleHRyYWN0TGluZUNsYXNzZXMiLCJvdXRwdXQiLCJsaW5lQ2xhc3MiLCJmbGF0dGVuU3BhbnMiLCJjdXJTdGFydCIsImN1clN0eWxlIiwiYWRkTW9kZUNsYXNzIiwibU5hbWUiLCJzYXdSZWFkT25seVNwYW5zIiwic2F3Q29sbGFwc2VkU3BhbnMiLCJNYXJrZWRTcGFuIiwibWFya2VyIiwiZ2V0TWFya2VkU3BhbkZvciIsInNwYW5zIiwic3BhbiIsInJlbW92ZU1hcmtlZFNwYW4iLCJzdHJldGNoU3BhbnNPdmVyQ2hhbmdlIiwiY2hhbmdlIiwiZnVsbCIsIm9sZEZpcnN0IiwibWFya2VkU3BhbnMiLCJvbGRMYXN0Iiwic3RhcnRDaCIsImVuZENoIiwiaXNJbnNlcnQiLCJvbGQiLCJudyIsImluY2x1c2l2ZUxlZnQiLCJpbnNlcnRMZWZ0IiwiZW5kc0FmdGVyIiwiaW5jbHVzaXZlUmlnaHQiLCJtYXJrZWRTcGFuc0JlZm9yZSIsInN0YXJ0c0JlZm9yZSIsIm1hcmtlZFNwYW5zQWZ0ZXIiLCJzYW1lTGluZSIsIm9mZnNldCIsInNwYW4kMSIsImNsZWFyRW1wdHlTcGFucyIsIm5ld01hcmtlcnMiLCJnYXBNYXJrZXJzIiwiZ2FwIiwiY2xlYXJXaGVuRW1wdHkiLCJkZXRhY2hNYXJrZWRTcGFucyIsImRldGFjaExpbmUiLCJhdHRhY2hNYXJrZWRTcGFucyIsImF0dGFjaExpbmUiLCJleHRyYUxlZnQiLCJleHRyYVJpZ2h0IiwiY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMiLCJsZW5EaWZmIiwiYVBvcyIsImZpbmQiLCJiUG9zIiwiZnJvbUNtcCIsInRvQ21wIiwiY29sbGFwc2VkU3BhbkF0U2lkZSIsInNwcyIsInNwIiwiY29sbGFwc2VkIiwiY29sbGFwc2VkU3BhbkF0U3RhcnQiLCJjb2xsYXBzZWRTcGFuQXRFbmQiLCJjb2xsYXBzZWRTcGFuQXJvdW5kIiwiY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZSIsInZpc3VhbExpbmUiLCJtZXJnZWQiLCJ2aXN1YWxMaW5lTm8iLCJsaW5lTiIsInZpcyIsInZpc3VhbExpbmVFbmRObyIsImxhc3RMaW5lIiwibGluZUlzSGlkZGVuIiwid2lkZ2V0Tm9kZSIsImxpbmVJc0hpZGRlbklubmVyIiwiaGVpZ2h0QXRMaW5lIiwibGluZU9iaiIsImxpbmVMZW5ndGgiLCJmb3VuZCQxIiwiZmluZE1heExpbmUiLCJtYXhMaW5lIiwibWF4TGluZUxlbmd0aCIsIm1heExpbmVDaGFuZ2VkIiwiTGluZSIsImVzdGltYXRlSGVpZ2h0IiwiY2xlYW5VcExpbmUiLCJzdHlsZVRvQ2xhc3NDYWNoZSIsInN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUiLCJpbnRlcnByZXRUb2tlblN0eWxlIiwiY2FjaGUiLCJidWlsZExpbmVDb250ZW50IiwibGluZVZpZXciLCJidWlsZGVyIiwicHJlIiwidHJhaWxpbmdTcGFjZSIsInNwbGl0U3BhY2VzIiwiZ2V0T3B0aW9uIiwicmVzdCIsImFkZFRva2VuIiwiYnVpbGRUb2tlbiIsImJ1aWxkVG9rZW5CYWRCaWRpIiwiaW5zZXJ0TGluZUNvbnRlbnQiLCJleHRlcm5hbE1lYXN1cmVkIiwibWFwcyIsImNhY2hlcyIsImxhc3RDaGlsZCIsInF1ZXJ5U2VsZWN0b3IiLCJkZWZhdWx0U3BlY2lhbENoYXJQbGFjZWhvbGRlciIsInRpdGxlIiwic3RhcnRTdHlsZSIsImVuZFN0eWxlIiwiY3NzIiwiYXR0cmlidXRlcyIsImRpc3BsYXlUZXh0IiwidHJhaWxpbmdCZWZvcmUiLCJzcGFjZUJlZm9yZSIsInNwZWNpYWwiLCJzcGVjaWFsQ2hhcnMiLCJtdXN0V3JhcCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJsYXN0SW5kZXgiLCJ0eHQkMSIsInRhYldpZHRoIiwic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsImZ1bGxTdHlsZSIsImF0dHIiLCJwYXJ0IiwiYnVpbGRDb2xsYXBzZWRTcGFuIiwiaWdub3JlV2lkZ2V0Iiwid2lkZ2V0IiwiaW5wdXQiLCJuZWVkc0NvbnRlbnRBdHRyaWJ1dGUiLCJzZXRVbmVkaXRhYmxlIiwiYWxsVGV4dCIsInNwYW5TdHlsZSIsInNwYW5FbmRTdHlsZSIsInNwYW5TdGFydFN0eWxlIiwibmV4dENoYW5nZSIsIkluZmluaXR5IiwiZm91bmRCb29rbWFya3MiLCJlbmRTdHlsZXMiLCJ1cHRvIiwidG9rZW5UZXh0IiwiTGluZVZpZXciLCJ2aXN1YWxMaW5lQ29udGludWVkIiwiaGlkZGVuIiwiYnVpbGRWaWV3QXJyYXkiLCJuZXh0UG9zIiwidmlldyIsIm9wZXJhdGlvbkdyb3VwIiwib3JwaGFuRGVsYXllZENhbGxiYWNrcyIsInNpZ25hbExhdGVyIiwibGlzdCIsImRlbGF5ZWRDYWxsYmFja3MiLCJmaXJlT3JwaGFuRGVsYXllZCIsImRlbGF5ZWQiLCJ1cGRhdGVMaW5lRm9yQ2hhbmdlcyIsImRpbXMiLCJjaGFuZ2VzIiwidXBkYXRlTGluZVRleHQiLCJ1cGRhdGVMaW5lR3V0dGVyIiwidXBkYXRlTGluZUNsYXNzZXMiLCJ1cGRhdGVMaW5lV2lkZ2V0cyIsImVuc3VyZUxpbmVXcmFwcGVkIiwicmVwbGFjZUNoaWxkIiwiekluZGV4IiwiZ2V0TGluZUNvbnRlbnQiLCJleHQiLCJidWlsdCIsImJhY2tncm91bmQiLCJ3cmFwIiwiaW5zZXJ0QmVmb3JlIiwidXBkYXRlTGluZUJhY2tncm91bmQiLCJ3cmFwQ2xhc3MiLCJndXR0ZXIiLCJndXR0ZXJCYWNrZ3JvdW5kIiwiZ3V0dGVyQ2xhc3MiLCJmaXhlZEd1dHRlciIsImZpeGVkUG9zIiwiZ3V0dGVyVG90YWxXaWR0aCIsIm1hcmtlcnMiLCJndXR0ZXJNYXJrZXJzIiwibGluZU51bWJlcnMiLCJ3cmFwJDEiLCJndXR0ZXJXcmFwIiwibGluZU51bWJlciIsImd1dHRlckxlZnQiLCJrIiwiZ3V0dGVyU3BlY3MiLCJndXR0ZXJXaWR0aCIsImFsaWduYWJsZSIsImlzV2lkZ2V0IiwibmV4dFNpYmxpbmciLCJpbnNlcnRMaW5lV2lkZ2V0cyIsImJ1aWxkTGluZUVsZW1lbnQiLCJpbnNlcnRMaW5lV2lkZ2V0c0ZvciIsImFsbG93QWJvdmUiLCJ3aWRnZXRzIiwid3MiLCJoYW5kbGVNb3VzZUV2ZW50cyIsInBvc2l0aW9uTGluZVdpZGdldCIsImFib3ZlIiwibm9IU2Nyb2xsIiwid2lkdGgiLCJ3cmFwcGVyV2lkdGgiLCJjb3Zlckd1dHRlciIsInBhZGRpbmdMZWZ0IiwicG9zaXRpb24iLCJtYXJnaW5MZWZ0Iiwid2lkZ2V0SGVpZ2h0IiwicGFyZW50U3R5bGUiLCJndXR0ZXJzIiwid3JhcHBlciIsImNsaWVudFdpZHRoIiwiZXZlbnRJbldpZGdldCIsImdldEF0dHJpYnV0ZSIsInNpemVyIiwibW92ZXIiLCJwYWRkaW5nVG9wIiwibGluZVNwYWNlIiwib2Zmc2V0VG9wIiwicGFkZGluZ1ZlcnQiLCJwYWRkaW5nSCIsImNhY2hlZFBhZGRpbmdIIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImN1cnJlbnRTdHlsZSIsImRhdGEiLCJwYXJzZUludCIsInBhZGRpbmdSaWdodCIsImlzTmFOIiwic2Nyb2xsR2FwIiwibmF0aXZlQmFyV2lkdGgiLCJkaXNwbGF5V2lkdGgiLCJzY3JvbGxlciIsImJhcldpZHRoIiwiZGlzcGxheUhlaWdodCIsImNsaWVudEhlaWdodCIsImJhckhlaWdodCIsIm1hcEZyb21MaW5lVmlldyIsIm1lYXN1cmVDaGFyIiwiYmlhcyIsIm1lYXN1cmVDaGFyUHJlcGFyZWQiLCJwcmVwYXJlTWVhc3VyZUZvckxpbmUiLCJmaW5kVmlld0ZvckxpbmUiLCJmaW5kVmlld0luZGV4IiwiZ2V0RGltZW5zaW9ucyIsImZvcmNlVXBkYXRlIiwibGluZU1lYXN1cmUiLCJ1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50IiwicmVjdCIsImhhc0hlaWdodHMiLCJwcmVwYXJlZCIsInZhckhlaWdodCIsIndyYXBwaW5nIiwibGluZVdyYXBwaW5nIiwiY3VyV2lkdGgiLCJoZWlnaHRzIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsImFicyIsImJvdHRvbSIsInRvcCIsImVuc3VyZUxpbmVIZWlnaHRzIiwicGxhY2UiLCJub2RlQW5kT2Zmc2V0SW5MaW5lTWFwIiwiY292ZXJTdGFydCIsImNvdmVyRW5kIiwiZ2V0VXNlZnVsUmVjdCIsInNjcmVlbiIsImxvZ2ljYWxYRFBJIiwiZGV2aWNlWERQSSIsIm5vcm1hbCIsImZyb21SYW5nZSIsImhhc0JhZFpvb21lZFJlY3RzIiwic2NhbGVYIiwic2NhbGVZIiwibG9naWNhbFlEUEkiLCJkZXZpY2VZRFBJIiwibWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyIsInJTcGFuIiwiY2hhcldpZHRoIiwibnVsbFJlY3QiLCJydG9wIiwicmJvdCIsImJvdCIsImJvZ3VzIiwic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsInJib3R0b20iLCJtZWFzdXJlQ2hhcklubmVyIiwibWVhc3VyZVRleHQiLCJtU3RhcnQiLCJtRW5kIiwiY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvciIsImNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUiLCJleHRlcm5hbE1lYXN1cmUiLCJjbGVhckNhY2hlcyIsImNhY2hlZENoYXJXaWR0aCIsImNhY2hlZFRleHRIZWlnaHQiLCJsaW5lTnVtQ2hhcnMiLCJwYWdlU2Nyb2xsWCIsInBhZ2VYT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsTGVmdCIsInBhZ2VTY3JvbGxZIiwibWFyZ2luVG9wIiwicGFnZVlPZmZzZXQiLCJzY3JvbGxUb3AiLCJ3aWRnZXRUb3BIZWlnaHQiLCJpbnRvQ29vcmRTeXN0ZW0iLCJpbmNsdWRlV2lkZ2V0cyIsInlPZmYiLCJ2aWV3T2Zmc2V0IiwibE9mZiIsInhPZmYiLCJmcm9tQ29vcmRTeXN0ZW0iLCJjb29yZHMiLCJsb2NhbEJveCIsImxpbmVTcGFjZUJveCIsImNoYXJDb29yZHMiLCJjdXJzb3JDb29yZHMiLCJwcmVwYXJlZE1lYXN1cmUiLCJnZXRCaWRpIiwicGFydFBvcyIsImludmVydCIsIm90aGVyIiwiZXN0aW1hdGVDb29yZHMiLCJQb3NXaXRoSW5mbyIsIm91dHNpZGUiLCJ4UmVsIiwiY29vcmRzQ2hhciIsInkiLCJjb29yZHNDaGFySW5uZXIiLCJyYW5nZUVuZCIsIndyYXBwZWRMaW5lRXh0ZW50IiwiYmVnaW4iLCJ3cmFwcGVkTGluZUV4dGVudENoYXIiLCJib3hJc0FmdGVyIiwiYm94IiwibHRyIiwiY29vcmRzQmlkaVBhcnRXcmFwcGVkIiwiY29vcmRzQmlkaVBhcnQiLCJiYXNlWCIsImNoQXJvdW5kIiwiYm94QXJvdW5kIiwiYXRMZWZ0IiwiYXRTdGFydCIsIl9saW5lTm8iLCJyZWYiLCJjbG9zZXN0RGlzdCIsImVuZFgiLCJkaXN0IiwidGV4dEhlaWdodCIsImFuY2hvciIsImNsaWVudExlZnQiLCJvZmZzZXRMZWZ0IiwiY29tcGVuc2F0ZUZvckhTY3JvbGwiLCJ0aCIsInBlckxpbmUiLCJ3aWRnZXRzSGVpZ2h0IiwiZXN0aW1hdGVMaW5lSGVpZ2h0cyIsImVzdCIsImVzdEhlaWdodCIsInBvc0Zyb21Nb3VzZSIsImxpYmVyYWwiLCJmb3JSZWN0Iiwic3BhY2UiLCJjbGllbnRYIiwiY2xpZW50WSIsImNvbERpZmYiLCJyb3VuZCIsInJlZ0NoYW5nZSIsImxlbmRpZmYiLCJ1cGRhdGVMaW5lTnVtYmVycyIsInZpZXdDaGFuZ2VkIiwicmVzZXRWaWV3IiwiY3V0Iiwidmlld0N1dHRpbmdQb2ludCIsImN1dCQxIiwiY3V0VG9wIiwiY3V0Qm90IiwicmVnTGluZUNoYW5nZSIsIm9sZE4iLCJuZXdOIiwiY291bnREaXJ0eVZpZXciLCJkaXJ0eSIsInVwZGF0ZVNlbGVjdGlvbiIsInNob3dTZWxlY3Rpb24iLCJwcmVwYXJlU2VsZWN0aW9uIiwicHJpbWFyeSIsImN1ckZyYWdtZW50IiwiY3Vyc29ycyIsInNlbEZyYWdtZW50Iiwic2VsIiwicmFuZ2VzIiwicHJpbUluZGV4IiwiZW1wdHkiLCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsImRyYXdTZWxlY3Rpb25DdXJzb3IiLCJoZWFkIiwiZHJhd1NlbGVjdGlvblJhbmdlIiwiY3Vyc29yIiwiY3Vyc29ySGVpZ2h0Iiwib3RoZXJDdXJzb3IiLCJjbXBDb29yZHMiLCJmcmFnbWVudCIsInBhZGRpbmciLCJsZWZ0U2lkZSIsInJpZ2h0U2lkZSIsInNpemVyV2lkdGgiLCJkb2NMVFIiLCJhZGQiLCJkcmF3Rm9yTGluZSIsImZyb21BcmciLCJ0b0FyZyIsImxpbmVMZW4iLCJ3cmFwWCIsInNpZGUiLCJleHRlbnQiLCJpdGVyYXRlQmlkaVNlY3Rpb25zIiwiZnJvbVBvcyIsInRvUG9zIiwib3BlblN0YXJ0Iiwib3BlbkVuZCIsIm9wZW5SaWdodCIsInRvcExlZnQiLCJ0b3BSaWdodCIsImJvdExlZnQiLCJib3RSaWdodCIsInNGcm9tIiwic1RvIiwiZnJvbUxpbmUiLCJ0b0xpbmUiLCJzaW5nbGVWTGluZSIsImxlZnRFbmQiLCJyaWdodFN0YXJ0IiwicmVzdGFydEJsaW5rIiwiZm9jdXNlZCIsImNsZWFySW50ZXJ2YWwiLCJibGlua2VyIiwiY3Vyc29yRGl2IiwidmlzaWJpbGl0eSIsImN1cnNvckJsaW5rUmF0ZSIsInNldEludGVydmFsIiwiZW5zdXJlRm9jdXMiLCJmb2N1cyIsIm9uRm9jdXMiLCJkZWxheUJsdXJFdmVudCIsImRlbGF5aW5nQmx1ckV2ZW50Iiwib25CbHVyIiwicmVhZE9ubHkiLCJzZWxGb3JDb250ZXh0TWVudSIsInJlc2V0IiwicmVjZWl2ZWRGb2N1cyIsInNoaWZ0IiwidXBkYXRlSGVpZ2h0c0luVmlld3BvcnQiLCJwcmV2Qm90dG9tIiwibGluZURpdiIsInVwZGF0ZVdpZGdldEhlaWdodCIsImNoV2lkdGgiLCJ3IiwidmlzaWJsZUxpbmVzIiwidmlld3BvcnQiLCJlbnN1cmUiLCJlbnN1cmVGcm9tIiwiZW5zdXJlVG8iLCJjYWxjdWxhdGVTY3JvbGxQb3MiLCJzbmFwTWFyZ2luIiwic2NyZWVudG9wIiwiZG9jQm90dG9tIiwiYXRUb3AiLCJhdEJvdHRvbSIsIm5ld1RvcCIsInNjcmVlbmxlZnQiLCJzY3JlZW53IiwidG9vV2lkZSIsImFkZFRvU2Nyb2xsVG9wIiwicmVzb2x2ZVNjcm9sbFRvUG9zIiwiZW5zdXJlQ3Vyc29yVmlzaWJsZSIsImdldEN1cnNvciIsInNjcm9sbFRvUG9zIiwibWFyZ2luIiwiY3Vyc29yU2Nyb2xsTWFyZ2luIiwic2Nyb2xsVG9Db29yZHMiLCJzY3JvbGxUb0Nvb3Jkc1JhbmdlIiwic1BvcyIsInVwZGF0ZVNjcm9sbFRvcCIsInVwZGF0ZURpc3BsYXlTaW1wbGUiLCJzZXRTY3JvbGxUb3AiLCJzdGFydFdvcmtlciIsImZvcmNlU2Nyb2xsIiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsYmFycyIsInNldFNjcm9sbExlZnQiLCJpc1Njcm9sbGVyIiwic2Nyb2xsV2lkdGgiLCJhbGlnbkhvcml6b250YWxseSIsIm1lYXN1cmVGb3JTY3JvbGxiYXJzIiwiZ3V0dGVyVyIsImRvY0giLCJ2aWV3SGVpZ2h0Iiwidmlld1dpZHRoIiwiYmFyTGVmdCIsImRvY0hlaWdodCIsIk5hdGl2ZVNjcm9sbGJhcnMiLCJ2ZXJ0IiwiaG9yaXoiLCJ0YWJJbmRleCIsImNoZWNrZWRaZXJvV2lkdGgiLCJtaW5IZWlnaHQiLCJtaW5XaWR0aCIsInVwZGF0ZSIsIm5lZWRzSCIsIm5lZWRzViIsInNXaWR0aCIsInRvdGFsSGVpZ2h0IiwidG90YWxXaWR0aCIsInplcm9XaWR0aEhhY2siLCJkaXNhYmxlSG9yaXoiLCJlbmFibGVaZXJvV2lkdGhCYXIiLCJkaXNhYmxlVmVydCIsInBvaW50ZXJFdmVudHMiLCJiYXIiLCJkZWxheSIsIm1heWJlRGlzYWJsZSIsImVsZW1lbnRGcm9tUG9pbnQiLCJjbGVhciIsIk51bGxTY3JvbGxiYXJzIiwidXBkYXRlU2Nyb2xsYmFycyIsInN0YXJ0V2lkdGgiLCJzdGFydEhlaWdodCIsInVwZGF0ZVNjcm9sbGJhcnNJbm5lciIsInNpemVzIiwicGFkZGluZ0JvdHRvbSIsImhlaWdodEZvcmNlciIsImJvcmRlckJvdHRvbSIsInNjcm9sbGJhckZpbGxlciIsImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwiZ3V0dGVyRmlsbGVyIiwic2Nyb2xsYmFyTW9kZWwiLCJpbml0U2Nyb2xsYmFycyIsInNjcm9sbGJhclN0eWxlIiwiYXhpcyIsIm5leHRPcElkIiwic3RhcnRPcGVyYXRpb24iLCJvcCIsInVwZGF0ZUlucHV0IiwidHlwaW5nIiwiY2hhbmdlT2JqcyIsImN1cnNvckFjdGl2aXR5Q2FsbGVkIiwic2VsZWN0aW9uQ2hhbmdlZCIsInVwZGF0ZU1heExpbmUiLCJvcHMiLCJvd25zR3JvdXAiLCJlbmRPcGVyYXRpb24iLCJlbmRDYiIsImdyb3VwIiwiY2FsbGJhY2tzIiwiZmlyZUNhbGxiYWNrc0Zvck9wcyIsImZpbmlzaE9wZXJhdGlvbiIsImVuZE9wZXJhdGlvbl9SMSIsImVuZE9wZXJhdGlvbl9XMSIsImVuZE9wZXJhdGlvbl9SMiIsImVuZE9wZXJhdGlvbl9XMiIsImVuZE9wZXJhdGlvbl9maW5pc2giLCJlbmRPcGVyYXRpb25zIiwic2Nyb2xsYmFyc0NsaXBwZWQiLCJtYXJnaW5Cb3R0b20iLCJib3JkZXJSaWdodFdpZHRoIiwibWF5YmVDbGlwU2Nyb2xsYmFycyIsIm11c3RVcGRhdGUiLCJEaXNwbGF5VXBkYXRlIiwidXBkYXRlZERpc3BsYXkiLCJ1cGRhdGVEaXNwbGF5SWZOZWVkZWQiLCJiYXJNZWFzdXJlIiwiYWRqdXN0V2lkdGhUbyIsIm1heFNjcm9sbExlZnQiLCJwcmVwYXJlZFNlbGVjdGlvbiIsInRha2VGb2N1cyIsInNldERvY3VtZW50SGVpZ2h0IiwicG9zdFVwZGF0ZURpc3BsYXkiLCJ3aGVlbFN0YXJ0WCIsIndoZWVsU3RhcnRZIiwiZG9TY3JvbGwiLCJpbm5lckhlaWdodCIsInNjcm9sbE5vZGUiLCJzY3JvbGxJbnRvVmlldyIsIm1heWJlU2Nyb2xsV2luZG93IiwibGltaXQiLCJjaGFuZ2VkIiwiZW5kQ29vcmRzIiwic2Nyb2xsUG9zIiwic3RhcnRUb3AiLCJzdGFydExlZnQiLCJzY3JvbGxQb3NJbnRvVmlldyIsIm1heWJlSGlkZGVuTWFya2VycyIsInVuaGlkZGVuIiwibWF5YmVVbmhpZGRlbk1hcmtlcnMiLCJmaW5pc2giLCJydW5Jbk9wIiwib3BlcmF0aW9uIiwibWV0aG9kT3AiLCJkb2NNZXRob2RPcCIsImhpZ2hsaWdodCIsImhpZ2hsaWdodFdvcmtlciIsIndvcmtUaW1lIiwiY2hhbmdlZExpbmVzIiwib2xkU3R5bGVzIiwiaGlnaGxpZ2h0ZWQiLCJvbGRDbHMiLCJuZXdDbHMiLCJpc2NoYW5nZSIsIndvcmtEZWxheSIsImZvcmNlIiwidmlzaWJsZSIsImVkaXRvcklzSGlkZGVuIiwid3JhcHBlckhlaWdodCIsIm9sZERpc3BsYXlXaWR0aCIsImV2ZW50cyIsInJlbmRlcmVkVmlldyIsIm1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoIiwidmlld3BvcnRNYXJnaW4iLCJkaWZmZXJlbnQiLCJsYXN0V3JhcEhlaWdodCIsImxhc3RXcmFwV2lkdGgiLCJhZGp1c3RWaWV3IiwidG9VcGRhdGUiLCJzZWxTbmFwc2hvdCIsImhhc0ZvY3VzIiwiYWN0aXZlIiwiYW5jaG9yTm9kZSIsImV4dGVuZCIsImFuY2hvck9mZnNldCIsImZvY3VzTm9kZSIsImZvY3VzT2Zmc2V0Iiwic2VsZWN0aW9uU25hcHNob3QiLCJ1cGRhdGVOdW1iZXJzRnJvbSIsImNvbnRhaW5lciIsInJtIiwiY3VycmVudFdoZWVsVGFyZ2V0IiwidXBkYXRlTnVtYmVyIiwicGF0Y2hEaXNwbGF5Iiwic25hcHNob3QiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJlc3RvcmVTZWxlY3Rpb24iLCJzZWxlY3Rpb25EaXYiLCJyZXBvcnRlZFZpZXdGcm9tIiwicmVwb3J0ZWRWaWV3VG8iLCJ1cGRhdGVHdXR0ZXJTcGFjZSIsImFsaWduV2lkZ2V0cyIsImNvbXAiLCJhbGlnbiIsImlubmVyVyIsImxpbmVHdXR0ZXIiLCJsaW5lTnVtSW5uZXJXaWR0aCIsImxpbmVOdW1XaWR0aCIsImdldEd1dHRlcnMiLCJzYXdMaW5lTnVtYmVycyIsInJlbmRlckd1dHRlcnMiLCJzcGVjcyIsImdFbHQiLCJ1cGRhdGVHdXR0ZXJzIiwiRGlzcGxheSIsImRyYWdnYWJsZSIsIndoZWVsRFgiLCJ3aGVlbERZIiwiYWN0aXZlVG91Y2giLCJpbml0Iiwid2hlZWxTYW1wbGVzIiwid2hlZWxQaXhlbHNQZXJVbml0Iiwid2hlZWxFdmVudERlbHRhIiwiZHgiLCJ3aGVlbERlbHRhWCIsImR5Iiwid2hlZWxEZWx0YVkiLCJkZXRhaWwiLCJIT1JJWk9OVEFMX0FYSVMiLCJWRVJUSUNBTF9BWElTIiwid2hlZWxEZWx0YSIsIndoZWVsRXZlbnRQaXhlbHMiLCJkZWx0YSIsIm9uU2Nyb2xsV2hlZWwiLCJjYW5TY3JvbGxYIiwiY2FuU2Nyb2xsWSIsInBpeGVscyIsIm1vdmVkWCIsIm1vdmVkWSIsInNhbXBsZSIsIlNlbGVjdGlvbiIsImVxdWFscyIsImhlcmUiLCJ0aGVyZSIsImRlZXBDb3B5IiwiUmFuZ2UiLCJzb21ldGhpbmdTZWxlY3RlZCIsIm5vcm1hbGl6ZVNlbGVjdGlvbiIsIm1heVRvdWNoIiwic2VsZWN0aW9uc01heVRvdWNoIiwicHJpbSIsInNvcnQiLCJpbnYiLCJzaW1wbGVTZWxlY3Rpb24iLCJjaGFuZ2VFbmQiLCJhZGp1c3RGb3JDaGFuZ2UiLCJjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UiLCJvZmZzZXRQb3MiLCJsb2FkTW9kZSIsIm1vZGVPcHRpb24iLCJyZXNldE1vZGVTdGF0ZSIsImlzV2hvbGVMaW5lVXBkYXRlIiwid2hvbGVMaW5lVXBkYXRlQmVmb3JlIiwidXBkYXRlRG9jIiwic3BhbnNGb3IiLCJ1cGRhdGVMaW5lIiwibGluZXNGb3IiLCJmaXJzdExpbmUiLCJsYXN0VGV4dCIsImxhc3RTcGFucyIsIm5saW5lcyIsImluc2VydCIsInJlbW92ZSIsImFkZGVkIiwiYWRkZWQkMSIsImFkZGVkJDIiLCJsaW5rZWREb2NzIiwic2hhcmVkSGlzdE9ubHkiLCJwcm9wYWdhdGUiLCJza2lwIiwic2hhcmVkSGlzdCIsImxpbmtlZCIsInJlbCIsInNoYXJlZCIsImF0dGFjaERvYyIsInNldERpcmVjdGlvbkNsYXNzIiwiSGlzdG9yeSIsInN0YXJ0R2VuIiwiZG9uZSIsInVuZG9uZSIsInVuZG9EZXB0aCIsImxhc3RNb2RUaW1lIiwibGFzdFNlbFRpbWUiLCJsYXN0T3AiLCJsYXN0U2VsT3AiLCJsYXN0T3JpZ2luIiwibGFzdFNlbE9yaWdpbiIsImdlbmVyYXRpb24iLCJtYXhHZW5lcmF0aW9uIiwiaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UiLCJoaXN0Q2hhbmdlIiwiYXR0YWNoTG9jYWxTcGFucyIsImNsZWFyU2VsZWN0aW9uRXZlbnRzIiwicG9wIiwiYWRkQ2hhbmdlVG9IaXN0b3J5Iiwic2VsQWZ0ZXIiLCJvcElkIiwiaGlzdCIsImhpc3RvcnkiLCJoaXN0b3J5RXZlbnREZWxheSIsImxhc3RDaGFuZ2VFdmVudCIsInB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkiLCJhZGRTZWxlY3Rpb25Ub0hpc3RvcnkiLCJzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkIiwiY2xlYXJSZWRvIiwiZGVzdCIsImV4aXN0aW5nIiwicmVtb3ZlQ2xlYXJlZFNwYW5zIiwiZXhwbGljaXRseUNsZWFyZWQiLCJtZXJnZU9sZFNwYW5zIiwiZ2V0T2xkU3BhbnMiLCJzdHJldGNoZWQiLCJvbGRDdXIiLCJzdHJldGNoQ3VyIiwiY29weUhpc3RvcnlBcnJheSIsIm5ld0dyb3VwIiwiaW5zdGFudGlhdGVTZWwiLCJldmVudCIsIm5ld0NoYW5nZXMiLCJleHRlbmRSYW5nZSIsInBvc0JlZm9yZSIsImV4dGVuZFNlbGVjdGlvbiIsInNldFNlbGVjdGlvbiIsImV4dGVuZFNlbGVjdGlvbnMiLCJoZWFkcyIsInJlcGxhY2VPbmVTZWxlY3Rpb24iLCJzZXRTaW1wbGVTZWxlY3Rpb24iLCJzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSIsInNldFNlbGVjdGlvbk5vVW5kbyIsIk5hTiIsImZpbHRlclNlbGVjdGlvbkNoYW5nZSIsInNldFNlbGVjdGlvbklubmVyIiwic2tpcEF0b21pY0luU2VsZWN0aW9uIiwicmVDaGVja1NlbGVjdGlvbiIsIm1heUNsZWFyIiwibmV3QW5jaG9yIiwic2tpcEF0b21pYyIsIm5ld0hlYWQiLCJza2lwQXRvbWljSW5uZXIiLCJvbGRQb3MiLCJwcmV2ZW50Q3Vyc29yTGVmdCIsInNlbGVjdExlZnQiLCJwcmV2ZW50Q3Vyc29yUmlnaHQiLCJzZWxlY3RSaWdodCIsImF0b21pYyIsIm5lYXIiLCJtb3ZlUG9zIiwiZmFyIiwiY2FudEVkaXQiLCJzZWxlY3RBbGwiLCJmaWx0ZXJDaGFuZ2UiLCJjYW5jZWxlZCIsImNhbmNlbCIsIm1ha2VDaGFuZ2UiLCJpZ25vcmVSZWFkT25seSIsInN1cHByZXNzRWRpdHMiLCJtYXJrIiwicGFydHMiLCJtayIsIm5ld1BhcnRzIiwiZGZyb20iLCJkdG8iLCJyZW1vdmVSZWFkT25seVJhbmdlcyIsIm1ha2VDaGFuZ2VJbm5lciIsIm1ha2VDaGFuZ2VTaW5nbGVEb2MiLCJyZWJhc2VkIiwicmViYXNlSGlzdCIsIm1ha2VDaGFuZ2VGcm9tSGlzdG9yeSIsImFsbG93U2VsZWN0aW9uT25seSIsInN1cHByZXNzIiwiYW50aUNoYW5nZXMiLCJmaWx0ZXIiLCJyZXR1cm5lZCIsInYiLCJzaGlmdERvYyIsImRpc3RhbmNlIiwicmVtb3ZlZCIsInJlY29tcHV0ZU1heExlbmd0aCIsImNoZWNrV2lkdGhTdGFydCIsInJldHJlYXRGcm9udGllciIsImNoYW5nZXNIYW5kbGVyIiwiY2hhbmdlSGFuZGxlciIsIm1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvciIsInJlcGxhY2VSYW5nZSIsImFzc2lnbiIsInNwbGl0TGluZXMiLCJyZWJhc2VIaXN0U2VsU2luZ2xlIiwicmViYXNlSGlzdEFycmF5Iiwic3ViIiwib2siLCJjb3BpZWQiLCJjaGFuZ2VMaW5lIiwiaGFuZGxlIiwiY2hhbmdlVHlwZSIsIkxlYWZDaHVuayIsIkJyYW5jaENodW5rIiwicmVtb3ZlSW5uZXIiLCJpbnNlcnRJbm5lciIsIml0ZXJOIiwib2xkSGVpZ2h0IiwicmVtYWluaW5nIiwibGVhZiIsIm1heWJlU3BpbGwiLCJtZSIsInNpYmxpbmciLCJteUluZGV4IiwidXNlZCIsIkxpbmVXaWRnZXQiLCJvcHQiLCJhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlIiwidGhpcyQxIiwib2xkSCIsIm5leHRNYXJrZXJJZCIsIlRleHRNYXJrZXIiLCJtYXJrVGV4dCIsImNsb25lTm9kZSIsImlzUGFyZW50IiwiU2hhcmVkVGV4dE1hcmtlciIsIm1hcmtUZXh0U2hhcmVkIiwicmVwbGFjZWRXaXRoIiwiYWRkVG9IaXN0b3J5IiwiY3VyTGluZSIsImFkZE1hcmtlZFNwYW4iLCJjbGVhck9uRW50ZXIiLCJjbGVhckhpc3RvcnkiLCJ3aXRoT3AiLCJ2aXN1YWwiLCJkSGVpZ2h0IiwiZmluZFNoYXJlZE1hcmtlcnMiLCJmaW5kTWFya3MiLCJkZXRhY2hTaGFyZWRNYXJrZXJzIiwic3ViTWFya2VyIiwibmV4dERvY0lkIiwiRG9jIiwibGluZVNlcCIsImNsZWFuR2VuZXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiZ2V0VmFsdWUiLCJqb2luIiwibGluZVNlcGFyYXRvciIsInNldFZhbHVlIiwiZ2V0UmFuZ2UiLCJnZXRMaW5lSGFuZGxlIiwiZ2V0TGluZU51bWJlciIsImdldExpbmVIYW5kbGVWaXN1YWxTdGFydCIsImxpbmVDb3VudCIsImxpc3RTZWxlY3Rpb25zIiwic2V0Q3Vyc29yIiwiZXh0ZW5kU2VsZWN0aW9uc0J5Iiwic2V0U2VsZWN0aW9ucyIsImFkZFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbnMiLCJyZXBsYWNlU2VsZWN0aW9uIiwiZHVwIiwicmVwbGFjZVNlbGVjdGlvbnMiLCJuZXdTZWwiLCJoaW50Iiwib2xkUHJldiIsIm5ld1ByZXYiLCJjb21wdXRlUmVwbGFjZWRTZWwiLCJ1bmRvIiwicmVkbyIsInVuZG9TZWxlY3Rpb24iLCJyZWRvU2VsZWN0aW9uIiwic2V0RXh0ZW5kaW5nIiwiZ2V0RXh0ZW5kaW5nIiwiaGlzdG9yeVNpemUiLCJtYXJrQ2xlYW4iLCJjaGFuZ2VHZW5lcmF0aW9uIiwiZm9yY2VTcGxpdCIsImlzQ2xlYW4iLCJnZW4iLCJnZXRIaXN0b3J5Iiwic2V0SGlzdG9yeSIsImhpc3REYXRhIiwic2V0R3V0dGVyTWFya2VyIiwiZ3V0dGVySUQiLCJjbGVhckd1dHRlciIsImxpbmVJbmZvIiwiYWRkTGluZUNsYXNzIiwid2hlcmUiLCJyZW1vdmVMaW5lQ2xhc3MiLCJhZGRMaW5lV2lkZ2V0IiwiaW5zZXJ0QXQiLCJhYm92ZVZpc2libGUiLCJyZW1vdmVMaW5lV2lkZ2V0Iiwic2V0Qm9va21hcmsiLCJyZWFsT3B0cyIsImZpbmRNYXJrc0F0IiwiZ2V0QWxsTWFya3MiLCJwb3NGcm9tSW5kZXgiLCJzZXBTaXplIiwiaW5kZXhGcm9tUG9zIiwiY29weUhpc3RvcnkiLCJsaW5rZWREb2MiLCJtRnJvbSIsIm1UbyIsInN1Yk1hcmsiLCJjb3B5U2hhcmVkTWFya2VycyIsInVubGlua0RvYyIsIkNvZGVNaXJyb3IiLCJzcGxpdElkcyIsIml0ZXJMaW5rZWREb2NzIiwiZ2V0RWRpdG9yIiwic2V0RGlyZWN0aW9uIiwiZWFjaExpbmUiLCJsYXN0RHJvcCIsIm9uRHJvcCIsImNsZWFyRHJhZ0N1cnNvciIsImZpbGVzIiwiZGF0YVRyYW5zZmVyIiwiaXNSZWFkT25seSIsIkZpbGVSZWFkZXIiLCJGaWxlIiwicmVhZCIsIm1hcmtBc1JlYWRBbmRQYXN0ZUlmQWxsRmlsZXNBcmVSZWFkIiwicmVhZFRleHRGcm9tRmlsZSIsImZpbGUiLCJhbGxvd0Ryb3BGaWxlVHlwZXMiLCJyZWFkZXIiLCJvbmVycm9yIiwib25sb2FkIiwicmVhZEFzVGV4dCIsImRyYWdnaW5nVGV4dCIsInRleHQkMSIsImdldERhdGEiLCJzZWxlY3RlZCIsImRyYWdDdXJzb3IiLCJmb3JFYWNoQ29kZU1pcnJvciIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJieUNsYXNzIiwiZWRpdG9ycyIsImdsb2JhbHNSZWdpc3RlcmVkIiwiZW5zdXJlR2xvYmFsSGFuZGxlcnMiLCJyZXNpemVUaW1lciIsIm9uUmVzaXplIiwic2V0U2l6ZSIsImtleU5hbWVzIiwiMyIsIjgiLCI5IiwiMTMiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjciLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0NCIsIjQ1IiwiNDYiLCI1OSIsIjYxIiwiOTEiLCI5MiIsIjkzIiwiMTA2IiwiMTA3IiwiMTA5IiwiMTEwIiwiMTExIiwiMTQ1IiwiMTczIiwiMTg2IiwiMTg3IiwiMTg4IiwiMTg5IiwiMTkwIiwiMTkxIiwiMTkyIiwiMjE5IiwiMjIwIiwiMjIxIiwiMjIyIiwiNjMyMzIiLCI2MzIzMyIsIjYzMjM0IiwiNjMyMzUiLCI2MzI3MiIsIjYzMjczIiwiNjMyNzUiLCI2MzI3NiIsIjYzMjc3IiwiNjMzMDIiLCJmcm9tQ2hhckNvZGUiLCJrZXlNYXAiLCJub3JtYWxpemVLZXlOYW1lIiwiYWx0IiwiY3RybCIsImNtZCIsIm1vZCIsIm5vcm1hbGl6ZUtleU1hcCIsImtleW1hcCIsImtleW5hbWUiLCJrZXlzIiwibG9va3VwS2V5IiwiZ2V0S2V5TWFwIiwiZmFsbHRocm91Z2giLCJpc01vZGlmaWVyS2V5Iiwia2V5Q29kZSIsImFkZE1vZGlmaWVyTmFtZXMiLCJub1NoaWZ0IiwiYWx0S2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Iiwia2V5TmFtZSIsImFsdEdyYXBoS2V5IiwiZGVsZXRlTmVhclNlbGVjdGlvbiIsImNvbXB1dGUiLCJraWxsIiwidG9LaWxsIiwicmVwbGFjZWQiLCJtb3ZlQ2hhckxvZ2ljYWxseSIsIm1vdmVMb2dpY2FsbHkiLCJlbmRPZkxpbmUiLCJ2aXN1YWxseSIsInByZXAiLCJ0YXJnZXRUb3AiLCJiYXNpYyIsInBjRGVmYXVsdCIsImVtYWNzeSIsIm1hY0RlZmF1bHQiLCJjb21tYW5kcyIsInNpbmdsZVNlbGVjdGlvbiIsImtpbGxMaW5lIiwiZGVsZXRlTGluZSIsImRlbExpbmVMZWZ0IiwiZGVsV3JhcHBlZExpbmVMZWZ0IiwiZGVsV3JhcHBlZExpbmVSaWdodCIsInJpZ2h0UG9zIiwiZ29Eb2NTdGFydCIsImdvRG9jRW5kIiwiZ29MaW5lU3RhcnQiLCJnb0xpbmVTdGFydFNtYXJ0IiwibGluZVN0YXJ0U21hcnQiLCJnb0xpbmVFbmQiLCJ2aXN1YWxMaW5lRW5kIiwibGluZUVuZCIsImdvTGluZVJpZ2h0IiwiZ29MaW5lTGVmdCIsImdvTGluZUxlZnRTbWFydCIsImdvTGluZVVwIiwibW92ZVYiLCJnb0xpbmVEb3duIiwiZ29QYWdlVXAiLCJnb1BhZ2VEb3duIiwiZ29DaGFyTGVmdCIsIm1vdmVIIiwiZ29DaGFyUmlnaHQiLCJnb0NvbHVtbkxlZnQiLCJnb0NvbHVtblJpZ2h0IiwiZ29Xb3JkTGVmdCIsImdvR3JvdXBSaWdodCIsImdvR3JvdXBMZWZ0IiwiZ29Xb3JkUmlnaHQiLCJkZWxDaGFyQmVmb3JlIiwiZGVsZXRlSCIsImRlbENoYXJBZnRlciIsImRlbFdvcmRCZWZvcmUiLCJkZWxXb3JkQWZ0ZXIiLCJkZWxHcm91cEJlZm9yZSIsImRlbEdyb3VwQWZ0ZXIiLCJpbmRlbnRBdXRvIiwiaW5kZW50U2VsZWN0aW9uIiwiaW5kZW50TW9yZSIsImluZGVudExlc3MiLCJpbnNlcnRUYWIiLCJpbnNlcnRTb2Z0VGFiIiwic3BhY2VzIiwiZGVmYXVsdFRhYiIsImV4ZWNDb21tYW5kIiwidHJhbnNwb3NlQ2hhcnMiLCJuZXdsaW5lQW5kSW5kZW50Iiwic2VscyIsImluZGVudExpbmUiLCJvcGVuTGluZSIsInRvZ2dsZU92ZXJ3cml0ZSIsImZpcnN0Tm9uV1MiLCJpbldTIiwiZG9IYW5kbGVCaW5kaW5nIiwiYm91bmQiLCJkcm9wU2hpZnQiLCJlbnN1cmVQb2xsZWQiLCJwcmV2U2hpZnQiLCJzdG9wU2VxIiwiZGlzcGF0Y2hLZXkiLCJzZXEiLCJrZXlTZXEiLCJkaXNwYXRjaEtleUlubmVyIiwia2V5TWFwcyIsImV4dHJhS2V5cyIsImxvb2t1cEtleUZvckVkaXRvciIsImhhbmRsZUtleUJpbmRpbmciLCJtb3Rpb24iLCJsYXN0U3RvcHBlZEtleSIsIm9uS2V5RG93biIsImhhbmRsZWQiLCJ1cCIsInNob3dDcm9zc0hhaXIiLCJvbktleVVwIiwib25LZXlQcmVzcyIsImNoYXJDb2RlIiwiaGFuZGxlQ2hhckJpbmRpbmciLCJsYXN0Q2xpY2siLCJsYXN0RG91YmxlQ2xpY2siLCJQYXN0Q2xpY2siLCJvbk1vdXNlRG93biIsInN1cHBvcnRzVG91Y2giLCJjbGlja0luR3V0dGVyIiwicmVwZWF0Iiwibm93IiwiY29tcGFyZSIsImNsaWNrUmVwZWF0Iiwic2VsZWN0aW5nVGV4dCIsImhhbmRsZU1hcHBlZEJ1dHRvbiIsImNvbnRhaW5lZCIsImJlaGF2aW9yIiwib3B0aW9uIiwidW5pdCIsImFkZE5ldyIsIm1vdmVPbkRyYWciLCJjb25maWd1cmVNb3VzZSIsImRyYWdEcm9wIiwibW92ZWQiLCJkcmFnRW5kIiwibW91c2VNb3ZlIiwiZHJhZ1N0YXJ0IiwiZTIiLCJsZWZ0QnV0dG9uU3RhcnREcmFnIiwib3VyUmFuZ2UiLCJvdXJJbmRleCIsInN0YXJ0U2VsIiwicmFuZ2VGb3JVbml0IiwibGFzdFBvcyIsImV4dGVuZFRvIiwic3RhcnRDb2wiLCJwb3NDb2wiLCJsZWZ0UG9zIiwib2xkUmFuZ2UiLCJyYW5nZXMkMSIsImFuY2hvckxpbmUiLCJib3VuZGFyeSIsImhlYWRJbmRleCIsInVzZVBhcnQiLCJiaWRpU2ltcGxpZnkiLCJlZGl0b3JTaXplIiwiY291bnRlciIsIm1vdmUiLCJidXR0b25zIiwiY3VyQ291bnQiLCJsZWZ0QnV0dG9uU2VsZWN0IiwibGVmdEJ1dHRvbkRvd24iLCJvbkNvbnRleHRNZW51IiwiZmluZFdvcmRBdCIsImd1dHRlckV2ZW50IiwicHJldmVudCIsIm1YIiwibVkiLCJ0b3VjaGVzIiwibGluZUJveCIsImciLCJjb250ZXh0TWVudUluR3V0dGVyIiwidGhlbWVDaGFuZ2VkIiwidGhlbWUiLCJJbml0IiwiZGVmYXVsdHMiLCJvcHRpb25IYW5kbGVycyIsImRyYWdEcm9wQ2hhbmdlZCIsImZ1bmNzIiwiZHJhZ0Z1bmN0aW9ucyIsInRvZ2dsZSIsImVudGVyIiwib3ZlciIsImxlYXZlIiwiZHJvcCIsIndyYXBwaW5nQ2hhbmdlZCIsImlucHV0U3R5bGVzIiwiaW5wdXRTdHlsZSIsInBhc3RlSW5jb21pbmciLCJjdXRJbmNvbWluZyIsImF1dG9mb2N1cyIsIndvcmQiLCJnZXRGaWVsZCIsInRvdWNoRmluaXNoZWQiLCJwcmV2VG91Y2giLCJmaW5pc2hUb3VjaCIsImZhckF3YXkiLCJ0b3VjaCIsInJhZGl1c1giLCJyYWRpdXNZIiwiaXNNb3VzZUxpa2VUb3VjaEV2ZW50IiwicGFnZVgiLCJwYWdlWSIsImZyYWciLCJvbkRyYWdPdmVyIiwic2V0RGF0YSIsImVmZmVjdEFsbG93ZWQiLCJzZXREcmFnSW1hZ2UiLCJpbWciLCJzcmMiLCJfdG9wIiwib25EcmFnU3RhcnQiLCJpbnAiLCJyZWdpc3RlckV2ZW50SGFuZGxlcnMiLCJmaW5pc2hJbml0IiwiaW5pdEhvb2tzIiwidGV4dFJlbmRlcmluZyIsImhvdyIsImFnZ3Jlc3NpdmUiLCJpbmRlbnQiLCJjdXJTcGFjZSIsImN1clNwYWNlU3RyaW5nIiwiaW5kZW50VW5pdCIsImluZGVudFN0cmluZyIsImluZGVudFdpdGhUYWJzIiwicG9zJDEiLCJkZWZpbmVJbml0SG9vayIsImxhc3RDb3BpZWQiLCJzZXRMYXN0Q29waWVkIiwibmV3TGFzdENvcGllZCIsImFwcGx5VGV4dElucHV0IiwiaW5zZXJ0ZWQiLCJkZWxldGVkIiwicmVjZW50IiwicGFzdGUiLCJ0ZXh0TGluZXMiLCJtdWx0aVBhc3RlIiwicGFzdGVMaW5lc1BlclNlbGVjdGlvbiIsImxpbmVXaXNlIiwiY2hhbmdlRXZlbnQiLCJ0cmlnZ2VyRWxlY3RyaWMiLCJoYW5kbGVQYXN0ZSIsInBhc3RlZCIsImNsaXBib2FyZERhdGEiLCJkaXNhYmxlSW5wdXQiLCJlbGVjdHJpY0NoYXJzIiwic21hcnRJbmRlbnQiLCJnZXRNb2RlQXQiLCJlbGVjdHJpY0lucHV0IiwiY29weWFibGVSYW5nZXMiLCJsaW5lUmFuZ2UiLCJkaXNhYmxlQnJvd3Nlck1hZ2ljIiwiZmllbGQiLCJzcGVsbGNoZWNrIiwiYXV0b2NvcnJlY3QiLCJhdXRvY2FwaXRhbGl6ZSIsImhpZGRlblRleHRhcmVhIiwiYm9yZGVyIiwiZmluZFBvc0giLCJvcmlnRGlyIiwibGluZURpciIsIm1vdmVPbmNlIiwiYm91bmRUb0xpbmUiLCJiaWRpIiwibXYiLCJnZXRXcmFwcGVkTGluZUV4dGVudCIsIm1vdmVJblN0b3JhZ2VPcmRlciIsInNlYXJjaEluVmlzdWFsTGluZSIsImdldFJlcyIsInJlcyIsIm5leHRDaCIsIm1vdmVWaXN1YWxseSIsInNhd1R5cGUiLCJnZXRIZWxwZXIiLCJoaXRTaWRlIiwiZmluZFBvc1YiLCJwYWdlU2l6ZSIsIm1vdmVBbW91bnQiLCJDb250ZW50RWRpdGFibGVJbnB1dCIsImxhc3RBbmNob3JOb2RlIiwibGFzdEFuY2hvck9mZnNldCIsImxhc3RGb2N1c05vZGUiLCJsYXN0Rm9jdXNPZmZzZXQiLCJwb2xsaW5nIiwiY29tcG9zaW5nIiwiZ3JhY2VQZXJpb2QiLCJyZWFkRE9NVGltZW91dCIsInBvc1RvRE9NIiwiYmFkUG9zIiwiYmFkIiwiZG9tVG9Qb3MiLCJsaW5lTm9kZSIsImxvY2F0ZU5vZGVJbkxpbmVWaWV3IiwidGV4dE5vZGUiLCJ0b3BOb2RlIiwibm9kZVZhbHVlIiwiY3VyTm9kZSIsInRleHRDb250ZW50IiwicHJldmlvdXNTaWJsaW5nIiwiZGlzdCQxIiwib25Db3B5Q3V0IiwibGluZVdpc2VDb3B5Q3V0IiwiY2xlYXJEYXRhIiwia2x1ZGdlIiwiaGFkRm9jdXMiLCJzaG93UHJpbWFyeVNlbGVjdGlvbiIsInVwZGF0ZUZyb21ET00iLCJyZWFkRnJvbURPTVNvb24iLCJmb3JjZUNvbXBvc2l0aW9uRW5kIiwic2hvd011bHRpcGxlU2VsZWN0aW9ucyIsImN1ckFuY2hvciIsImN1ckZvY3VzIiwicm5nIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJzdGFydEdyYWNlUGVyaW9kIiwicmVtZW1iZXJTZWxlY3Rpb24iLCJzZWxlY3Rpb25JbkVkaXRvciIsImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwiYmx1ciIsInBvbGxTZWxlY3Rpb24iLCJwb2xsSW50ZXJ2YWwiLCJwb2xsIiwic2NhbiIsImlzSW5HdXR0ZXIiLCJ0cmlnZ2VyT25LZXlEb3duIiwicG9sbENvbnRlbnQiLCJmcm9tSW5kZXgiLCJmcm9tTm9kZSIsInRvTm9kZSIsInRvSW5kZXgiLCJuZXdUZXh0IiwiY2xvc2luZyIsImV4dHJhTGluZWJyZWFrIiwiY2xvc2UiLCJhZGRUZXh0Iiwid2FsayIsImNtVGV4dCIsIm1hcmtlcklEIiwiaXNCbG9jayIsIm5vZGVOYW1lIiwiZG9tVGV4dEJldHdlZW4iLCJvbGRUZXh0IiwiY3V0RnJvbnQiLCJjdXRFbmQiLCJvbGRUb3AiLCJtYXhDdXRGcm9udCIsIm5ld0JvdCIsIm9sZEJvdCIsIm1heEN1dEVuZCIsImNoRnJvbSIsImNoVG8iLCJjb250ZW50RWRpdGFibGUiLCJyZWFkT25seUNoYW5nZWQiLCJyZXNldFBvc2l0aW9uIiwiVGV4dGFyZWFJbnB1dCIsInByZXZJbnB1dCIsInBvbGxpbmdGYXN0IiwiY3JlYXRlRmllbGQiLCJ0ZXh0YXJlYSIsInByZXBhcmVDb3B5Q3V0IiwiZmFzdFBvbGwiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJfZGlzcGxheSIsIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCJoZWFkUG9zIiwid3JhcE9mZiIsImxpbmVPZmYiLCJ0ZVRvcCIsInRlTGVmdCIsImRyYXduIiwiY29udGV4dE1lbnVQZW5kaW5nIiwic2xvd1BvbGwiLCJtaXNzZWQiLCJzYW1lIiwicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51Iiwib2xkU2Nyb2xsWSIsIm9sZENTUyIsIm9sZFdyYXBwZXJDU1MiLCJ3cmFwcGVyQm94Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsWSIsInNjcm9sbFRvIiwicmVoaWRlIiwiZGV0ZWN0aW5nU2VsZWN0QWxsIiwicHJlcGFyZVNlbGVjdEFsbEhhY2siLCJtb3VzZXVwIiwiZXh0dmFsIiwiZGlzYWJsZWQiLCJkZWZsdCIsIm5vdE9uSW5pdCIsImRlZmluZU9wdGlvbiIsIm5ld0JyZWFrcyIsInJlZnJlc2giLCJnZXRJbnB1dEZpZWxkIiwiZGV0YWNoIiwiYXR0YWNoIiwiaW50ZWdlciIsImRlZmluZU9wdGlvbnMiLCJoZWxwZXJzIiwic2V0T3B0aW9uIiwiZ2V0RG9jIiwiYWRkS2V5TWFwIiwicmVtb3ZlS2V5TWFwIiwiYWRkT3ZlcmxheSIsInNjb3JlIiwicHJpb3JpdHkiLCJpbnNlcnRTb3J0ZWQiLCJtb2RlU3BlYyIsInJlbW92ZU92ZXJsYXkiLCJuZXdSYW5nZXMiLCJnZXRUb2tlbkF0IiwiZ2V0TGluZVRva2VucyIsImdldFRva2VuVHlwZUF0IiwiZ2V0SGVscGVycyIsImhlbHAiLCJfZ2xvYmFsIiwiZ2V0U3RhdGVBZnRlciIsImRlZmF1bHRUZXh0SGVpZ2h0IiwiZGVmYXVsdENoYXJXaWR0aCIsImdldFZpZXdwb3J0IiwiYWRkV2lkZ2V0IiwidnNwYWNlIiwiaHNwYWNlIiwidHJpZ2dlck9uS2V5UHJlc3MiLCJ0cmlnZ2VyT25LZXlVcCIsInRyaWdnZXJPbk1vdXNlRG93biIsImFtb3VudCIsInJ0bE1vdmVWaXN1YWxseSIsImdvYWxDb2x1bW4iLCJnb2FscyIsInN0YXJ0Q2hhciIsImNoZWNrIiwiZ2V0U2Nyb2xsSW5mbyIsInNjcm9sbFRvUmFuZ2UiLCJpbnRlcnByZXQiLCJzd2FwRG9jIiwicGhyYXNlIiwicGhyYXNlVGV4dCIsInBocmFzZXMiLCJnZXRXcmFwcGVyRWxlbWVudCIsImdldFNjcm9sbGVyRWxlbWVudCIsImdldEd1dHRlckVsZW1lbnQiLCJyZWdpc3RlckhlbHBlciIsInJlZ2lzdGVyR2xvYmFsSGVscGVyIiwicHJlZGljYXRlIiwiYWRkRWRpdG9yTWV0aG9kcyIsImRvbnREZWxlZ2F0ZSIsIm1ldGhvZCIsImRlZmluZU1JTUUiLCJtaW1lIiwiZGVmaW5lRXh0ZW5zaW9uIiwiZnVuYyIsImRlZmluZURvY0V4dGVuc2lvbiIsImZyb21UZXh0QXJlYSIsInRhYmluZGV4IiwicGxhY2Vob2xkZXIiLCJyZWFsU3VibWl0IiwiZm9ybSIsImxlYXZlU3VibWl0TWV0aG9kQWxvbmUiLCJzdWJtaXQiLCJ3cmFwcGVkU3VibWl0IiwiZ2V0VGV4dEFyZWEiLCJ0b1RleHRBcmVhIiwiY21wUG9zIiwiYWRkTGVnYWN5UHJvcHMiLCJ2ZXJzaW9uIiwiZnJlZUV4cG9ydHMiLCJmcmVlTW9kdWxlIiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJyZXF1aXJlIiwiYmluZGluZyIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsImFsbG9jVW5zYWZlIiwiYnVmZmVyIiwiaXNEZWVwIiwib3JpZ2luYWxNb2R1bGUiLCJ3ZWJwYWNrUG9seWZpbGwiLCJpc01hYyIsIlVUSUwiLCJ0b2dnbGVDbGFzcyIsInJlbW92ZUNsYXNzIiwiZ2l0R3ViVXJsIiwiQ09ORklHIiwiZ2V0U3RhdGUiLCJDTSIsIkVESVRPUiIsInRvZ2dsZUJsb2NrcXVvdGUiLCJ3aW5kb3dsIiwiY3VycmVudFRhcmdldCIsImVkaXRvciIsIiRlZGl0b3IiLCIkY29kZW1pcnJvciIsInN0YXQiLCJfb3B0aW9ucyIsIiR0b29scyIsImJsb2NrU3R5bGVzIiwic3RhcnRQb2ludCIsImVuZFBvaW50IiwicmVwbCIsIl9yZXBsYWNlU2VsZWN0aW9uIiwic3RhcnRFbmQiLCJ1cmwiLCJ0b29sYmFyQnVpbHRJbkJ1dHRvbnMiLCJhY3Rpb24iLCJzdGFydENoYXJzIiwiZW5kQ2hhcnMiLCJkZWZhdWx0IiwiaXNFZGl0VG9vbHMiLCJjdXJySGVhZGluZ0xldmVsIiwiaW5zZXJ0VGV4dHMiLCJsaW5rIiwicHJvbXB0IiwiaW1hZ2UiLCJjb25zb2xlIiwibG9nIiwib3BlbiIsIiRzdGF0dXMiLCJlZGl0b3JFbCIsImVsIiwicHJldmlld0VsIiwibWRFbCIsInRvb2xQcmV2aWV3RWwiLCJ0b29sU2hvd0FsbEVsIiwidG9vbEVkaXRFbCIsImNvbW1vbkFjdGlvbiIsInRhYmxlIiwiaG9yaXpvbnRhbFJ1bGUiLCJwcm9tcHRUZXh0cyIsInNob3J0Y3V0cyIsImZpeFNob3J0Y3V0IiwiVXRpbCIsIl9tZXJnZVByb3BlcnRpZXMiLCJjbGFzc0xpc3QiLCJvYmoyQXJyIiwiaXNBcnJheSIsImtleUFyciIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwiaXRlbSIsImlzRnVuY3Rpb24iLCJmbiIsImNvbmZpZyIsImJhc2VVcmwiLCJpY29uTGluayIsInRoZW1lRGFyayIsInRoZW1lTGlnaHQiLCJmdWxsc2NyZWVuIiwiZWRpdCIsInByZXZpZXciLCJkYXJrIiwibGlnaHQiLCJsYW5ndWFnZSIsImxhbmciLCJpc09wZW4iLCJxaW5pdSIsInRva2VuQXBpVXJsIiwicmVnaW9uIiwicHV0RXh0cmEiLCJ0b29sYmFySXRlbSIsInN0YXR1c0JhciIsImNvbHVtbnMiLCJyZXQiLCJib2xkIiwicXVvdGUiLCJpdGFsaWMiLCJzdHJpa2V0aHJvdWdoIiwiY21DZmciLCJtb2RlQ2ZnIiwiaHRtbE1vZGUiLCJodG1sTW9kZU1pc3NpbmciLCJoaWdobGlnaHRGb3JtYXR0aW5nIiwibWF4QmxvY2txdW90ZURlcHRoIiwidGFza0xpc3RzIiwiZW1vamkiLCJmZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmciLCJ4bWwiLCJ0b2tlblR5cGVPdmVycmlkZXMiLCJ0b2tlblR5cGVzIiwiaGVhZGVyIiwibGlzdDEiLCJsaXN0MiIsImxpc3QzIiwiaHIiLCJpbWFnZUFsdFRleHQiLCJpbWFnZU1hcmtlciIsImZvcm1hdHRpbmciLCJsaW5rSW5saW5lIiwibGlua0VtYWlsIiwibGlua1RleHQiLCJsaW5rSHJlZiIsImVtIiwic3Ryb25nIiwidG9rZW5UeXBlIiwiaHJSRSIsImxpc3RSRSIsInRhc2tMaXN0UkUiLCJhdHhIZWFkZXJSRSIsImFsbG93QXR4SGVhZGVyV2l0aG91dFNwYWNlIiwic2V0ZXh0SGVhZGVyUkUiLCJ0ZXh0UkUiLCJmZW5jZWRDb2RlUkUiLCJsaW5rRGVmUkUiLCJwdW5jdHVhdGlvbiIsInN3aXRjaElubGluZSIsImlubGluZSIsInN3aXRjaEJsb2NrIiwiYmxvY2siLCJsaW5rVGl0bGUiLCJpbmRlbnRlZENvZGUiLCJodG1sQmxvY2siLCJleGl0IiwiaHRtbFN0YXRlIiwidGFnU3RhcnQiLCJ0b2tlbml6ZSIsImlzSW5UZXh0IiwiaW5saW5lTm9ybWFsIiwiYmxvY2tOb3JtYWwiLCJ0cmFpbGluZ1NwYWNlTmV3TGluZSIsInByZXZMaW5lIiwidGhpc0xpbmUiLCJmaXJzdFRva2VuT25MaW5lIiwicHJldkxpbmVMaW5lSXNFbXB0eSIsInByZXZMaW5lSXNJbmRlbnRlZENvZGUiLCJwcmV2TGluZUlzSHIiLCJwcmV2TGluZUlzTGlzdCIsIm1heE5vbkNvZGVJbmRlbnRhdGlvbiIsImxpc3RTdGFjayIsImxpbmVJbmRlbnRhdGlvbiIsImluZGVudGF0aW9uRGlmZiIsImFsbG93c0lubGluZUNvbnRpbnVhdGlvbiIsImZlbmNlZENvZGVFbmQiLCJpc0hyIiwiZ2V0VHlwZSIsInNldGV4dCIsImxpc3RUeXBlIiwidGFza0xpc3QiLCJmZW5jZWRFbmRSRSIsImxvY2FsTW9kZSIsImZpbmRNb2RlQnlOYW1lIiwibWltZXMiLCJsb2NhbFN0YXRlIiwibG9jYWwiLCJmb290bm90ZUxpbmsiLCJtZF9pbnNpZGUiLCJyZXR1cm5UeXBlIiwiY3Vyckxpc3RJbmQiLCJoYXNFeGl0ZWRMaXN0IiwibWF4RmVuY2VkRW5kSW5kIiwidGFza09wZW4iLCJ0YXNrQ2xvc2VkIiwibGlzdE1vZCIsImhhbmRsZVRleHQiLCJtYXRjaENoIiwicmVnZXgiLCJwcmV2aW91c0Zvcm1hdHRpbmciLCJmb3JtYXR0aW5nRXNjYXBlIiwiYXR0cyIsInN1YnN0cmluZyIsImxlZnRGbGFua2luZyIsInJpZ2h0RmxhbmtpbmciLCJzZXRFbSIsInNldFN0cm9uZyIsInJldFR5cGUiLCJlbmRDaGFyIiwicmV0dXJuU3RhdGUiLCJsaW5rUkUiLCJmb290bm90ZUxpbmtJbnNpZGUiLCJmb290bm90ZVVybCIsInRleHRBZnRlciIsImJsb2NrQ29tbWVudFN0YXJ0IiwiYmxvY2tDb21tZW50RW5kIiwiY2xvc2VCcmFja2V0cyIsImZvbGQiLCJvdmVybGF5TW9kZSIsImNvbWJpbmUiLCJiYXNlUG9zIiwiYmFzZUN1ciIsIm92ZXJsYXlQb3MiLCJvdmVybGF5Q3VyIiwic3RyZWFtU2VlbiIsImNvbWJpbmVUb2tlbnMiLCJvdmVybGF5VG9rZW4iLCJuYW1lU3RhcnRDaGFyIiwieG1sVGFnU3RhcnQiLCJJdGVyIiwidGFnQXQiLCJ0b1RhZ0VuZCIsImd0IiwibGFzdFNsYXNoIiwibGFzdEluZGV4T2YiLCJzZWxmQ2xvc2UiLCJ0b1RhZ1N0YXJ0IiwibHQiLCJ0b05leHRUYWciLCJ0b1ByZXZUYWciLCJmaW5kTWF0Y2hpbmdDbG9zZSIsInN0YWNrIiwic3RhcnRMaW5lIiwiZmluZE1hdGNoaW5nT3BlbiIsImVuZExpbmUiLCJvcGVuVGFnIiwic3RhcnRQb3MiLCJlbmRQb3MiLCJmaW5kTWF0Y2hpbmdUYWciLCJmaW5kRW5jbG9zaW5nVGFnIiwic2NhbkZvckNsb3NpbmdUYWciLCJkb0ZvbGQiLCJmaW5kZXIiLCJtaW5TaXplIiwiYWxsb3dGb2xkZWQiLCJtYXJrcyIsIl9faXNGb2xkIiwiY2xlYXJlZCIsIm15V2lkZ2V0IiwibWFrZVdpZGdldCIsIm15UmFuZ2UiLCJuZXdGb2xkRnVuY3Rpb24iLCJyYW5nZUZpbmRlciIsInRvZ2dsZUZvbGQiLCJmb2xkQ29kZSIsInVuZm9sZCIsImZvbGRBbGwiLCJ1bmZvbGRBbGwiLCJkZWZhdWx0T3B0aW9ucyIsImF1dG8iLCJtaW5Gb2xkU2l6ZSIsInNjYW5VcCIsImVkaXRvck9wdGlvbnMiLCJmb2xkT3B0aW9ucyIsIl9fd2VicGFja19hbWRfb3B0aW9uc19fIiwiY29kZW1pcm9yVG9vbHMiLCJsYW5nTWFwIiwibGFuZ0VuIiwibGFuZ1poIiwicWluaXVVcGxvYWQiLCJDTWRFZGl0b3IiLCJpbml0RGF0YSIsInRoZW4iLCJpbml0VmlldyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiaW5pdE9wdGlvbiIsImluaXRFZGl0b3JTdGF0dXMiLCJpbml0UWluaXUiLCJjcmVhdGVJY29uTGluayIsImluaXRFdmVudCIsImluaXRDb2RlTWlycm9yRGF0YSIsImluaXRNYXJrZG93bkRhdGEiLCJpbml0RGVmYXVsdENvbnRlbnQiLCJsaWZlY3ljbGVNb3VudGVkIiwiaW5pdFN0YXR1c0V2ZW50IiwiaW5pdFRvb2xzRXZlbnQiLCJsYW5nS2V5IiwiYWRkRWRpdENvbnRhaW5lclBhc2VJbWciLCJpc0NyZWF0ZWRJY29uTGluayIsIm9saW5rIiwiaHJlZiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9tUmVuZGVyIiwidG9vbHNPYmoiLCJ0b29sc0FyciIsImNhbGxCYWNrIiwidG9vbEVsIiwiQ29kZW1pcnJvciIsInRleHRBcmVhRWxlbWVudCIsImNyZWF0ZUNvZGVNaXJyb3JFbGVtZW50IiwibWF0Y2hCcmFja2V0cyIsInN0eWxlQWN0aXZlTGluZSIsImF1dG9DbG9zZUJyYWNrZXRzIiwiYXV0b0Nsb3NlVGFncyIsImZvbGRHdXR0ZXIiLCJpbml0Q29kZU1pcnJvckV2ZW50IiwiYWRkX0NNX2NoYW5nZV9ldmVudEhhbmRsZSIsImFkZF9DTV9jdXJzb3JBY3Rpdml0eV9ldmVudEhhbmRsZSIsImFkZFNjcm9sbFN5bmMiLCJkZWJvdW5jZSIsIm9uQ29kZU1pcnJvckNoYW5nZSIsImNvbW1vbkNvZGVNaXJyb3JFdmVudEhhbmRsZSIsIm9uQ29kZU1pcnJvckN1cnNvckFjdGl2aXR5Iiwic2V0SHRtbFZhbHVlIiwidXBkYXRlU3RhdHVzQmFyIiwibWFya2VkIiwibWFya2VkT3B0aW9ucyIsImdmbSIsInRhYmxlcyIsImJyZWFrcyIsInBlZGFudGljIiwic2FuaXRpemUiLCJzbWFydExpc3RzIiwic21hcnR5cGFudHMiLCJobGpzIiwiaGlnaGxpZ2h0QXV0byIsIiRtYXJrZWQiLCJzZXRPcHRpb25zIiwiZGVmYXVsdENvbiIsIm1kVmFsdWUiLCJodG1sU3RyIiwiaW5uZXJIVE1MIiwiY1Njcm9sbCIsInBTY3JvbGwiLCJyYXRpbyIsInBhcnNlRmxvYXQiLCJjb25MZW4iLCJyZW5kZXJFZGl0b3JDb250ZW50UG9zaXRpb24iLCJyZW5kZXJFZGl0Q29udGVudExlbmd0aCIsImxlbkVsZW1lbnQiLCJjbUN1cnNvciIsImN1cnJDb2wiLCJjdXJyTGluZSIsImluaXRFdmVudFRvZ2dsZVRoZW1lIiwib1RoZW1lRWwiLCJRaW5pdVVwbGFvZCIsIm9FbCIsIm9yaWdpbmFsRXZlbnQiLCJpdGVtcyIsImJsb2IiLCJnZXRBc0ZpbGUiLCJyZW5kZXIiLCJldnQiLCJoYW5kbGVJbWFnZVVwbG9hZCIsInJlYWRBc0RhdGFVUkwiLCJpbWdVcmwiLCJwdXRiNjQiLCJkb21haW4iLCJoYXNoIiwiY2F0Y2giLCJlcnIiLCJlbGVtZW50IiwiYmluZGluZ3MiLCJnZXRPcHRpb25zIiwidG9nZ2xlRnVsbFNjcmVlbiIsImNvZGVtaXJyb3IiLCJUT09MUyIsInJlbmRlclRvb2xzIiwicmVuZGVyQ29kZSIsInJlbmRlclByaXZpZXciLCJyZW5kZXJTdGF0dXMiLCJlcnJvciIsInRvb2xzTWFpbkh0bWxTdHIiLCJjcmVhdGVUb29sc01haW4iLCJ0b29sc0hhbmRsZUh0bWxTdHIiLCJjcmVhdGVUb29sc0hhbmRsZSIsImljb25zIiwidG9vbHNFZGl0IiwiZ2V0VG9vbHNFZGl0IiwidG9vbHNFZGl0TGVuIiwiY3JlYXRlVG9vbHNJdGVtIiwiaWNvbnNPcHRpb24iLCJyZXN1bHRPYmoiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJzb3J0VG9vbHNJY29uIiwiX2ljb25zIiwiZ2V0VG9vbHNIYW5kbGUiLCJvYmoxIiwib2JqMiIsImN1cnJTaG9ydGN1dHNJdGVtIiwiY3VyclBsYXRTaG9ydGN1dHNJdGVtIiwiaXRlbVRpdGxlIiwiZ2V0VG9vbEl0ZW1UaXRsZVRleHQiLCJpdGVtTmFtZSIsInBvc2l0b25IdG1sU3RyIiwiY3JlYXRlU3RhdHVzUG9zaXRpb24iLCJsZW5ndGhIdG1sU3RyIiwiY3JlYXRlU3RhdHVzTGVucyIsInRvZ2dsZVRoZW1lSHRtbFN0ciIsImNyZWF0ZVN0YXR1c1RvZ2dsZVRoZW1lIiwiaHRtbENvbmZpZyIsImF1dG9TZWxmQ2xvc2VycyIsImltcGxpY2l0bHlDbG9zZWQiLCJjb250ZXh0R3JhYmJlcnMiLCJkb05vdEluZGVudCIsImFsbG93VW5xdW90ZWQiLCJhbGxvd01pc3NpbmciLCJjYXNlRm9sZCIsInhtbENvbmZpZyIsImFsbG93TWlzc2luZ1RhZ05hbWUiLCJlZGl0b3JDb25mIiwiY29uZmlnXyIsInNldFN0eWxlIiwiaW5UZXh0IiwiY2hhaW4iLCJwYXJzZXIiLCJpbkJsb2NrIiwiZG9jdHlwZSIsImRlcHRoIiwiaW5UYWciLCJjbG9zdXJlIiwiYmFzZVN0YXRlIiwidGFnTmFtZSIsImlzSW5BdHRyaWJ1dGUiLCJzdHJpbmdTdGFydENvbCIsInRlcm1pbmF0b3IiLCJzdGFydE9mTGluZSIsIm5vSW5kZW50IiwicG9wQ29udGV4dCIsIm1heWJlUG9wQ29udGV4dCIsIm5leHRUYWdOYW1lIiwicGFyZW50VGFnTmFtZSIsInRhZ05hbWVTdGF0ZSIsImNsb3NlVGFnTmFtZVN0YXRlIiwiYXR0clN0YXRlIiwibWF0Y2hDbG9zaW5nIiwiY2xvc2VTdGF0ZSIsImNsb3NlU3RhdGVFcnIiLCJfc3RyZWFtIiwiYXR0ckVxU3RhdGUiLCJhdHRyVmFsdWVTdGF0ZSIsImF0dHJDb250aW51ZWRTdGF0ZSIsImJhc2VJbmRlbnQiLCJmdWxsTGluZSIsIm11bHRpbGluZVRhZ0luZGVudFBhc3RUYWciLCJtdWx0aWxpbmVUYWdJbmRlbnRGYWN0b3IiLCJhbGlnbkNEQVRBIiwidGFnQWZ0ZXIiLCJncmFiYmVycyIsImNvbmZpZ3VyYXRpb24iLCJza2lwQXR0cmlidXRlIiwieG1sQ3VycmVudFRhZyIsInhtbEN1cnJlbnRDb250ZXh0IiwiY3giLCJtb2RlSW5mbyIsImFsaWFzIiwiZmluZE1vZGVCeU1JTUUiLCJmaW5kTW9kZUJ5RXh0ZW5zaW9uIiwiZmluZE1vZGVCeUZpbGVOYW1lIiwiZmlsZW5hbWUiLCJkb3QiLCJ1cmxSRSIsIm1vZGVDb25maWciLCJjb2RlRGVwdGgiLCJnZm1PdmVybGF5IiwiY29kZUJsb2NrIiwiYXRlU3BhY2UiLCJkaWZmZXJlbmNlIiwiZ2l0SHViU3BpY2UiLCJtYXJrZG93bkNvbmZpZyIsInBhcnNlckNvbmZpZyIsInN0YXRlbWVudEluZGVudCIsImpzb25sZE1vZGUiLCJqc29ubGQiLCJqc29uTW9kZSIsImpzb24iLCJpc1RTIiwidHlwZXNjcmlwdCIsIndvcmRSRSIsIndvcmRDaGFyYWN0ZXJzIiwia2V5d29yZHMiLCJrdyIsIkEiLCJCIiwiQyIsIkQiLCJvcGVyYXRvciIsImF0b20iLCJpc09wZXJhdG9yQ2hhciIsImlzSnNvbmxkS2V5d29yZCIsInRwIiwiY29udCIsInRva2VuQmFzZSIsImVzY2FwZWQiLCJ0b2tlbkNvbW1lbnQiLCJleHByZXNzaW9uQWxsb3dlZCIsImluU2V0IiwicmVhZFJlZ2V4cCIsInRva2VuUXVhc2kiLCJsZXhpY2FsIiwibGFzdFR5cGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm1heWJlRW5kIiwiZmluZEZhdEFycm93IiwiZmF0QXJyb3dBdCIsImFycm93Iiwic2F3U29tZXRoaW5nIiwiYnJhY2tldCIsImF0b21pY1R5cGVzIiwiSlNMZXhpY2FsIiwiaW5TY29wZSIsInZhcm5hbWUiLCJsb2NhbFZhcnMiLCJ2YXJzIiwiY2MiLCJwYXNzIiwiaW5MaXN0IiwicmVnaXN0ZXIiLCJuZXdDb250ZXh0IiwicmVnaXN0ZXJWYXJTY29wZWQiLCJWYXIiLCJnbG9iYWxWYXJzIiwiaXNNb2RpZmllciIsImRlZmF1bHRWYXJzIiwicHVzaGNvbnRleHQiLCJwdXNoYmxvY2tjb250ZXh0IiwicG9wY29udGV4dCIsInB1c2hsZXgiLCJsZXgiLCJwb3BsZXgiLCJleHBlY3QiLCJ3YW50ZWQiLCJleHAiLCJzdGF0ZW1lbnQiLCJ2YXJkZWYiLCJwYXJlbkV4cHIiLCJtYXliZWV4cHJlc3Npb24iLCJtYXliZWVsc2UiLCJmdW5jdGlvbmRlZiIsImZvcnNwZWMiLCJlbnVtZGVmIiwidHlwZW5hbWUiLCJ0eXBlZXhwciIsImV4cHJlc3Npb24iLCJtYXliZWxhYmVsIiwibWF5YmVDYXRjaEJpbmRpbmciLCJhZnRlckV4cG9ydCIsImFmdGVySW1wb3J0IiwiZnVuYXJnIiwiZXhwcmVzc2lvbklubmVyIiwiZXhwcmVzc2lvbk5vQ29tbWEiLCJub0NvbW1hIiwiYXJyb3dCb2R5Tm9Db21tYSIsImFycm93Qm9keSIsImNvbW1hc2VwIiwibWF5YmVvcCIsIm1heWJlb3BlcmF0b3JOb0NvbW1hIiwibWF5YmVvcGVyYXRvckNvbW1hIiwiY2xhc3NFeHByZXNzaW9uIiwiYXJyYXlMaXRlcmFsIiwiY29udENvbW1hc2VwIiwib2JqcHJvcCIsInF1YXNpIiwidGFyZ2V0Tm9Db21tYSIsIm1heWJlVHlwZUFyZ3MiLCJtYXliZVRhcmdldCIsImV4cHIiLCJjb250aW51ZVF1YXNpIiwiXyIsImdldHRlclNldHRlciIsImFmdGVycHJvcCIsIm1heWJldHlwZSIsIndoYXQiLCJzZXAiLCJwcm9jZWVkIiwibWF5YmV0eXBlT3JJbiIsIm1heWJlcmV0dHlwZSIsImlzS1ciLCJhZnRlclR5cGUiLCJ0eXBlcHJvcCIsInR5cGVhcmciLCJtYXliZVJldHVyblR5cGUiLCJmdW5jdGlvbmRlY2wiLCJ0eXBlcGFyYW0iLCJtYXliZVR5cGVEZWZhdWx0IiwibWF5YmVBc3NpZ24iLCJ2YXJkZWZDb250IiwiZWx0cGF0dGVybiIsInByb3BwYXR0ZXJuIiwiX3R5cGUiLCJmb3JzcGVjMSIsImZvcnNwZWMyIiwiY2xhc3NOYW1lQWZ0ZXIiLCJjbGFzc0JvZHkiLCJjbGFzc2ZpZWxkIiwibWF5YmVGcm9tIiwiZXhwb3J0RmllbGQiLCJpbXBvcnRTcGVjIiwibWF5YmVNb3JlSW1wb3J0cyIsIm1heWJlQXMiLCJlbnVtbWVtYmVyIiwiYmFzZWNvbHVtbiIsInBhcnNlSlMiLCJmaXJzdENoYXIiLCJpc0NvbnRpbnVlZFN0YXRlbWVudCIsImRvdWJsZUluZGVudFN3aXRjaCIsImJsb2NrQ29tbWVudENvbnRpbnVlIiwibGluZUNvbW1lbnQiLCJza2lwRXhwcmVzc2lvbiIsIndoZW5DbG9zaW5nIiwiYXV0b0Nsb3NlQ3VycmVudCIsImF1dG9DbG9zZVNsYXNoIiwid2hlbk9wZW5pbmciLCJyZXBsYWNlbWVudHMiLCJ0b2siLCJ0YWdJbmZvIiwiaHRtbCIsImRvbnRDbG9zZVRhZ3MiLCJodG1sRG9udENsb3NlIiwiaW5kZW50VGFncyIsImh0bWxJbmRlbnQiLCJsb3dlclRhZ05hbWUiLCJjbG9zaW5nVGFnRXhpc3RzIiwiZW1wdHlUYWdzIiwibmV3UG9zIiwiZG9udEluZGVudE9uQXV0b0Nsb3NlIiwiYXV0b0Nsb3NlR1QiLCJ0eXBpbmdTbGFzaCIsImRvbnRJbmRlbnRPblNsYXNoIiwicmVwbGFjZW1lbnQiLCJtaXhlZCIsImNvbGxlY3Rpb24iLCJuZXdUYWciLCJuZXh0Q2xvc2UiLCJvbkN4IiwiY2xvc2VUYWciLCJlbXB0eUxpc3RSRSIsInVub3JkZXJlZExpc3RSRSIsImluY3JlbWVudFJlbWFpbmluZ01hcmtkb3duTGlzdE51bWJlcnMiLCJza2lwQ291bnQiLCJzdGFydEl0ZW0iLCJzdGFydEluZGVudCIsIm5leHRMaW5lTnVtYmVyIiwibmV4dEl0ZW0iLCJuZXh0SW5kZW50IiwibmV3TnVtYmVyIiwibmV4dE51bWJlciIsIml0ZW1OdW1iZXIiLCJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QiLCJlb2xTdGF0ZSIsImluUXVvdGUiLCJjdXJzb3JCZWZvcmVCdWxsZXQiLCJlbmRPZlF1b3RlIiwiZW5kT2ZMaXN0IiwibnVtYmVyZWQiLCJidWxsZXQiLCJwYWlycyIsImNsb3NlQmVmb3JlIiwidHJpcGxlcyIsImV4cGxvZGUiLCJjb25mIiwiZW5zdXJlQm91bmQiLCJCYWNrc3BhY2UiLCJnZXRDb25maWciLCJhcm91bmQiLCJjaGFyc0Fyb3VuZCIsIkVudGVyIiwibGluZXNlcCIsImNoYXJzIiwiaWRlbnRpY2FsIiwib3BlbmluZyIsImN1clR5cGUiLCJzdHJpbmdTdGFydHNBZnRlciIsImludmVydGVkIiwiaGFuZGxlQ2hhciIsIkFubm90YXRpb24iLCJzY2hlZHVsZVJlZHJhdyIsImRvUmVkcmF3IiwicmVkcmF3IiwiYnV0dG9uSGVpZ2h0Iiwic2Nyb2xsQnV0dG9uSGVpZ2h0IiwiYW5ub3RhdGlvbnMiLCJkb1VwZGF0ZSIsImNvbXB1dGVTY2FsZSIsInJlc2l6ZUhhbmRsZXIiLCJsaXN0ZW5Gb3JDaGFuZ2VzIiwiaFNjYWxlIiwiYW5ucyIsInNpbmdsZUxpbmVIIiwiY3VyTGluZU9iaiIsImdldFkiLCJuZXh0VG9wIiwiYW5uIiwiQkFDS19DTEFTUyIsImNsZWFyQWN0aXZlTGluZXMiLCJhY3RpdmVMaW5lcyIsInVwZGF0ZUFjdGl2ZUxpbmVzIiwibm9uRW1wdHkiLCJzYW1lQXJyYXkiLCJzZWxlY3Rpb25DaGFuZ2UiLCJvbkN1cnNvckFjdGl2aXR5IiwibWFya2VkU2VsZWN0aW9uIiwiY292ZXJSYW5nZSIsIm9uQ2hhbmdlIiwibWFya2VkU2VsZWN0aW9uU3R5bGUiLCJhZGRBdCIsImF0RW5kIiwib3B0cyIsIm9uR3V0dGVyQ2xpY2siLCJvblZpZXdwb3J0Q2hhbmdlIiwib25Gb2xkIiwiU3RhdGUiLCJpbmRpY2F0b3JPcGVuIiwiaW5kaWNhdG9yRm9sZGVkIiwidXBkYXRlSW5WaWV3cG9ydCIsImlzRm9sZGVkIiwidXBkYXRlRm9sZEluZm8iLCJmb2xkT3B0aW9uIiwiY2xzRm9sZGVkIiwiY2xzT3BlbiIsInZwIiwiZm9sZGVkIiwiY2hhbmdlVXBkYXRlIiwiZm9sZE9uQ2hhbmdlVGltZVNwYW4iLCJ1cGRhdGVWaWV3cG9ydFRpbWVTcGFuIiwic3RhcnRUb2tlbiIsImVuZFRva2VuIiwibGluZVRleHQiLCJuZXh0T3BlbiIsImxpbmVJbmRlbnQiLCJzcGFjZVRvIiwibXlJbmRlbnQiLCJsYXN0TGluZUluRm9sZCIsImZpbmRPcGVuaW5nIiwib3BlbkNoIiwiaGFzSW1wb3J0Iiwic2VtaSIsImhhcyIsImhhc0luY2x1ZGUiLCJpc0hlYWRlciIsInRva2VudHlwZSIsImhlYWRlckxldmVsIiwibGFzdExpbmVObyIsIm5leHROZXh0TGluZSIsIm5ld2xpbmUiLCJmZW5jZXMiLCJub29wIiwiaGVhZGluZyIsIm5wdGFibGUiLCJibG9ja3F1b3RlIiwiZGVmIiwibGhlYWRpbmciLCJwYXJhZ3JhcGgiLCJMZXhlciIsImxpbmtzIiwicnVsZXMiLCJfbGFiZWwiLCJfdGl0bGUiLCJnZXRSZWdleCIsIl90YWciLCJfY29tbWVudCIsIm1lcmdlIiwibG9vc2UiLCJjYXAiLCJidWxsIiwibGlzdFN0YXJ0IiwibGlzdEl0ZW1zIiwiaXNvcmRlcmVkIiwiaXN0YXNrIiwiaXNjaGVja2VkIiwicnRyaW0iLCJzcGxpdENlbGxzIiwiY2VsbHMiLCJvcmRlcmVkIiwidGFzayIsImNoZWNrZWQiLCJzYW5pdGl6ZXIiLCJlc2NhcGUiLCJhdXRvbGluayIsInJlZmxpbmsiLCJub2xpbmsiLCJiciIsImRlbCIsIklubGluZUxleGVyIiwicmVuZGVyZXIiLCJSZW5kZXJlciIsIlRleHRSZW5kZXJlciIsIlBhcnNlciIsImVuY29kZSIsImVzY2FwZVRlc3QiLCJlc2NhcGVSZXBsYWNlIiwiZXNjYXBlVGVzdE5vRW5jb2RlIiwiZXNjYXBlUmVwbGFjZU5vRW5jb2RlIiwidW5lc2NhcGUiLCJjbGVhblVybCIsInByb3QiLCJkZWNvZGVVUklDb21wb25lbnQiLCJvcmlnaW5JbmRlcGVuZGVudFVybCIsImJhc2VVcmxzIiwicmVzb2x2ZVVybCIsImVuY29kZVVSSSIsIl9lc2NhcGVzIiwiX3NjaGVtZSIsIl9lbWFpbCIsIl9hdHRyaWJ1dGUiLCJfaHJlZiIsIl9leHRlbmRlZF9lbWFpbCIsIl9iYWNrcGVkYWwiLCJwcmV2Q2FwWmVybyIsIm1hbmdsZSIsImluTGluayIsImluUmF3QmxvY2siLCJ0cmltIiwib3V0cHV0TGluayIsImVzY2FwZXMiLCJjb2Rlc3BhbiIsInJhbmRvbSIsImxhbmdQcmVmaXgiLCJyYXciLCJoZWFkZXJJZHMiLCJoZWFkZXJQcmVmaXgiLCJ4aHRtbCIsImxpc3RpdGVtIiwiY2hlY2tib3giLCJ0YWJsZXJvdyIsInRhYmxlY2VsbCIsImZsYWdzIiwiaW5saW5lVGV4dCIsInBhcnNlVGV4dCIsInJvdyIsImNlbGwiLCJ0YWJsZVJvdyIsImN1cnIiLCJzdWZmTGVuIiwiY3VyckNoYXIiLCJjYWxsYmFjayIsInBlbmRpbmciLCJtZXNzYWdlIiwic2lsZW50IiwiZ2V0RGVmYXVsdHMiLCJsZXhlciIsImlubGluZUxleGVyIiwicmVnaXN0ZXJMYW5ndWFnZSIsImdsb2JhbE9iamVjdCIsIkFycmF5UHJvdG8iLCJvYmplY3RLZXlzIiwibGFuZ3VhZ2VzIiwiYWxpYXNlcyIsIlNBRkVfTU9ERSIsIm5vSGlnaGxpZ2h0UmUiLCJsYW5ndWFnZVByZWZpeFJlIiwiZml4TWFya3VwUmUiLCJMQU5HVUFHRV9OT1RfRk9VTkQiLCJjbGFzc1ByZWZpeCIsInRhYlJlcGxhY2UiLCJ1c2VCUiIsIkNPTU1PTl9LRVlXT1JEUyIsImlzTm90SGlnaGxpZ2h0ZWQiLCJpbmhlcml0Iiwib2JqZWN0cyIsIm5vZGVTdHJlYW0iLCJfbm9kZVN0cmVhbSIsImV4cGFuZF9vcl9jbG9uZV9tb2RlIiwidmFyaWFudHMiLCJjYWNoZWRfdmFyaWFudHMiLCJ2YXJpYW50IiwiZGVwZW5kZW5jeU9uUGFyZW50IiwiZW5kc1dpdGhQYXJlbnQiLCJzdGFydHMiLCJpc0Zyb3plbiIsInNjb3JlRm9yS2V5d29yZCIsImtleXdvcmQiLCJwcm92aWRlZFNjb3JlIiwiY29tcGlsZUxhbmd1YWdlIiwicmVTdHIiLCJyZSIsImxhbmdSZSIsImNhc2VfaW5zZW5zaXRpdmUiLCJidWlsZE1vZGVSZWdleCIsIm1hdGNoZXJSZSIsInRlcm0iLCJtYXRjaEluZGV4ZXMiLCJyZWdleGVzIiwibWF0Y2hlciIsIm1hdGNoQXQiLCJhZGRSdWxlIiwicnVsZSIsInJlQ291bnRNYXRjaEdyb3VwcyIsImJlZ2luS2V5d29yZHMiLCJ0ZXJtaW5hdG9yX2VuZCIsImlsbGVnYWwiLCJ0ZXJtaW5hdG9ycyIsInJlZ2V4cHMiLCJzZXBhcmF0b3IiLCJiYWNrcmVmZXJlbmNlUmUiLCJudW1DYXB0dXJlcyIsImpvaW5SZSIsImV4dHJhIiwiY29tcGlsZU1vZGUiLCJjb21waWxlZCIsInJhd0tleXdvcmRzIiwiY29tcGlsZWRfa2V5d29yZHMiLCJzcGxpdEFuZENvbXBpbGUiLCJwYWlyIiwiY29tcGlsZUtleXdvcmRzIiwibGV4ZW1lc1JlIiwibGV4ZW1lcyIsImJlZ2luUmUiLCJlbmRTYW1lQXNCZWdpbiIsImVuZFJlIiwiaWxsZWdhbFJlIiwicmVsZXZhbmNlIiwibGFuZ3VhZ2VOYW1lIiwiaWdub3JlX2lsbGVnYWxzIiwiY29udGludWF0aW9uIiwiY29kZVRvSGlnaGxpZ2h0Iiwia2V5d29yZE1hdGNoIiwibWF0Y2hfc3RyIiwiYnVpbGRTcGFuIiwiaW5zaWRlU3BhbiIsImxlYXZlT3BlbiIsIm5vUHJlZml4Iiwib3BlblNwYW4iLCJwcm9jZXNzQnVmZmVyIiwic3ViTGFuZ3VhZ2UiLCJleHBsaWNpdCIsIm1vZGVfYnVmZmVyIiwiY29udGludWF0aW9ucyIsInByb2Nlc3NTdWJMYW5ndWFnZSIsImtleXdvcmRfbWF0Y2giLCJsYXN0X2luZGV4IiwicHJvY2Vzc0tleXdvcmRzIiwic3RhcnROZXdNb2RlIiwiZG9CZWdpbk1hdGNoIiwibGV4ZW1lIiwibmV3X21vZGUiLCJleGNsdWRlQmVnaW4iLCJyZXR1cm5CZWdpbiIsImRvRW5kTWF0Y2giLCJtYXRjaFBsdXNSZW1haW5kZXIiLCJlbmRfbW9kZSIsImVuZE9mTW9kZSIsInRlc3RSZSIsImVuZHNQYXJlbnQiLCJyZXR1cm5FbmQiLCJleGNsdWRlRW5kIiwibGFzdE1hdGNoIiwicHJvY2Vzc0xleGVtZSIsInRleHRfYmVmb3JlX21hdGNoIiwicHJvY2Vzc2VkIiwiZ2V0TGFuZ3VhZ2UiLCJlcnJvclJhaXNlZCIsImxhbmd1YWdlU3Vic2V0Iiwic2Vjb25kX2Jlc3QiLCJhdXRvRGV0ZWN0aW9uIiwiZml4TWFya3VwIiwicDEiLCJoaWdobGlnaHRCbG9jayIsIm9yaWdpbmFsU3RyZWFtIiwicmVzdWx0Tm9kZSIsIl9jbGFzcyIsIndhcm4iLCJibG9ja0xhbmd1YWdlIiwib3JpZ2luYWwiLCJub2RlU3RhY2siLCJzZWxlY3RTdHJlYW0iLCJtZXJnZVN0cmVhbXMiLCJwcmV2Q2xhc3NOYW1lIiwiY3VycmVudExhbmciLCJyZXN1bHRMYW5nIiwiYnVpbGRDbGFzc05hbWUiLCJpbml0SGlnaGxpZ2h0aW5nIiwiY2FsbGVkIiwiYmxvY2tzIiwicXVlcnlTZWxlY3RvckFsbCIsIlBMQUlOVEVYVF9MQU5HVUFHRSIsImRpc2FibGVBdXRvZGV0ZWN0IiwiY29uZmlndXJlIiwidXNlcl9vcHRpb25zIiwiaW5pdEhpZ2hsaWdodGluZ09uTG9hZCIsInJhd0RlZmluaXRpb24iLCJsaXN0TGFuZ3VhZ2VzIiwicmVxdWlyZUxhbmd1YWdlIiwiZGVidWdNb2RlIiwiSURFTlRfUkUiLCJVTkRFUlNDT1JFX0lERU5UX1JFIiwiTlVNQkVSX1JFIiwiQ19OVU1CRVJfUkUiLCJCSU5BUllfTlVNQkVSX1JFIiwiUkVfU1RBUlRFUlNfUkUiLCJCQUNLU0xBU0hfRVNDQVBFIiwiQVBPU19TVFJJTkdfTU9ERSIsIlFVT1RFX1NUUklOR19NT0RFIiwiUEhSQVNBTF9XT1JEU19NT0RFIiwiQ09NTUVOVCIsImluaGVyaXRzIiwiQ19MSU5FX0NPTU1FTlRfTU9ERSIsIkNfQkxPQ0tfQ09NTUVOVF9NT0RFIiwiSEFTSF9DT01NRU5UX01PREUiLCJOVU1CRVJfTU9ERSIsIkNfTlVNQkVSX01PREUiLCJCSU5BUllfTlVNQkVSX01PREUiLCJDU1NfTlVNQkVSX01PREUiLCJSRUdFWFBfTU9ERSIsIlRJVExFX01PREUiLCJVTkRFUlNDT1JFX1RJVExFX01PREUiLCJNRVRIT0RfR1VBUkQiLCJkZWVwRnJlZXplIiwiZnJlZXplIiwib2JqSXNGdW5jdGlvbiIsIktFWVdPUkQiLCJ2N19rZXl3b3JkcyIsIkxJVEVSQUwiLCJOVU1CRVJTIiwiU1RSSU5HUyIsIkRBVEUiLCJDT01NRU5UUyIsImJ1aWx0X2luIiwidjdfc3lzdGVtX2NvbnN0YW50cyIsImNsYXNzIiwidjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzIiwidjhfc2hhcmVkX29iamVjdCIsImxpdGVyYWwiLCJ2N19tZXRhX2tleXdvcmRzIiwiY29tbWVudE1vZGUiLCJydWxlRGVjbGFyYXRpb25Nb2RlIiwiSFRUUF9WRVJCUyIsIkFTM19SRVNUX0FSR19NT0RFIiwiSURfUkVHRVgiLCJWQVJfREVDTFMiLCJidWlsdEluVHlwZU1vZGUiLCJvYmplY3RIYW5kbGVNb2RlIiwiZ2VuZXJpY01vZGUiLCJOVU1CRVIiLCJub21hcmt1cCIsIlNUUklORyIsIlBBUkFNUyIsIkNPTU1FTlRfTU9ERV8xIiwiS0VZV09SRFMiLCJTVUJTVCIsIlRFTVBMQVRFX1NUUklORyIsIlBBUkFNU19DT05UQUlOUyIsIm9wdGlvbmFsIiwiRlVOQ1RJT05fVFlQRV9SRSIsIkNQUF9QUklNSVRJVkVfVFlQRVMiLCJQUkVQUk9DRVNTT1IiLCJGVU5DVElPTl9USVRMRSIsIkNQUF9LRVlXT1JEUyIsIkVYUFJFU1NJT05fQ09OVEFJTlMiLCJFWFBSRVNTSU9OX0NPTlRFWFQiLCJGVU5DVElPTl9ERUNMQVJBVElPTiIsInByZXByb2Nlc3NvciIsInN0cmluZ3MiLCJBUkRVSU5PX0tXIiwiQVJEVUlOTyIsImt3cyIsIm1ldGEiLCJYTUxfRU5USVRJRVMiLCJYTUxfTUVUQV9LRVlXT1JEUyIsIlhNTF9NRVRBX1BBUl9LRVlXT1JEUyIsIkFQT1NfTUVUQV9TVFJJTkdfTU9ERSIsIlFVT1RFX01FVEFfU1RSSU5HX01PREUiLCJUQUdfSU5URVJOQUxTIiwiQkFDS1RJQ0tfRVNDQVBFIiwiVkFSSUFCTEUiLCJWQVIiLCJRVU9URV9TVFJJTkciLCJDT01NRU5UX01PREVTIiwiQ0hBUl9TVFJJTkciLCJQUk9DRURVUkUiLCJPQkpFQ1QiLCJFWFBSRVNTSU9OUyIsIlNZTUJPTF9SRSIsIlNZTUJPTCIsIkNPTExFQ1RJT04iLCJISU5UIiwiSElOVF9DT0wiLCJLRVkiLCJMSVNUIiwiQk9EWSIsIk5BTUUiLCJERUZBVUxUX0NPTlRBSU5TIiwiSlNfSURFTlRfUkUiLCJUSVRMRSIsIkNPTU1BTkRTIiwiSU5UX1NVRkZJWCIsIkNSWVNUQUxfTUVUSE9EX1JFIiwiQ1JZU1RBTF9LRVlXT1JEUyIsIkVYUEFOU0lPTiIsInJlY3Vyc2l2ZVBhcmVuIiwiUV9TVFJJTkciLCJSRUdFWFAiLCJDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlMiLCJWRVJCQVRJTV9TVFJJTkciLCJWRVJCQVRJTV9TVFJJTkdfTk9fTEYiLCJTVUJTVF9OT19MRiIsIklOVEVSUE9MQVRFRF9TVFJJTkciLCJJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HIiwiSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklOR19OT19MRiIsIlRZUEVfSURFTlRfUkUiLCJSVUxFIiwiaW50ZWdlcl9yZSIsImVzY2FwZV9zZXF1ZW5jZV9yZSIsIkRfSU5URUdFUl9NT0RFIiwiRF9GTE9BVF9NT0RFIiwiRF9DSEFSQUNURVJfTU9ERSIsIkRfU1RSSU5HX01PREUiLCJEX05FU1RJTkdfQ09NTUVOVF9NT0RFIiwiQlJBQ0VEX1NVQlNUIiwiRElSRUNUSVZFIiwiQ0xBU1MiLCJGVU5DVElPTiIsIkZJTFRFUiIsIkRUU19SRUZFUkVOQ0UiLCJEVFNfS0VZV09SRCIsIkRUU19MQUJFTCIsIkRUU19DRUxMX1BST1BFUlRZIiwiRFRTX05PREUiLCJFTElYSVJfSURFTlRfUkUiLCJFTElYSVJfS0VZV09SRFMiLCJMT1dFUkNBU0VfU0lHSUwiLCJVUENBU0VfU0lHSUwiLCJFTElYSVJfREVGQVVMVF9DT05UQUlOUyIsIkNPTlNUUlVDVE9SIiwiUlVCWV9NRVRIT0RfUkUiLCJSVUJZX0tFWVdPUkRTIiwiWUFSRE9DVEFHIiwiSVJCX09CSkVDVCIsIlJVQllfREVGQVVMVF9DT05UQUlOUyIsIklSQl9ERUZBVUxUIiwiQkFTSUNfQVRPTV9SRSIsIkZVTkNUSU9OX05BTUVfUkUiLCJFUkxBTkdfUkVTRVJWRUQiLCJOQU1FRF9GVU4iLCJGVU5DVElPTl9DQUxMIiwiVFVQTEUiLCJWQVIxIiwiVkFSMiIsIlJFQ09SRF9BQ0NFU1MiLCJCTE9DS19TVEFURU1FTlRTIiwiQkFTSUNfTU9ERVMiLCJNRVRIT0QiLCJUWVBFUEFSQU0iLCJTWU1CT0xTIiwiUVNUUiIsIkFTU0lHTk1FTlQiLCJERVNDVEVYVCIsIkFUX0NPTU1FTlRfTU9ERSIsIlNUUlVDVF9UWVBFIiwiUEFSU0VfUEFSQU1TIiwiRlVOQ1RJT05fREVGIiwiREVGSU5JVElPTiIsIkJVSUxUX0lOX1JFRiIsIlNUUklOR19SRUYiLCJGVU5DVElPTl9SRUYiLCJGVU5DVElPTl9SRUZfUEFSQU1TIiwiR0NPREVfQ09ERSIsInN5bWJvbCIsIkdPX0tFWVdPUkRTIiwiQlVJTFRfSU5TIiwiSURFTlRJRklFUl9QTEFJTl9PUl9RVU9URUQiLCJFWFBSRVNTSU9OX09SX0hFTFBFUl9DQUxMIiwiQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFMiLCJCQVNJQ19NVVNUQUNIRV9DT05URU5UUyIsIlBSQUdNQSIsIlRBR19JTk5BUkRTIiwiVkFSSUFCTEVTIiwiTElURVJBTFMiLCJET0NUQUdTIiwiQ09OU1RBTlRTIiwiTUVUSE9EUyIsIlRZUEVTIiwiRlVOQ1RJT05fTkFNRV9JREVOVF9SRSIsIkpBVkFfTlVNQkVSX01PREUiLCJGUkFHTUVOVCIsIlhNTF9UQUciLCJIVE1MX1RFTVBMQVRFIiwiQ1NTX1RFTVBMQVRFIiwiUEFSQU1TQkxPQ0siLCJBTExPV0VEX0NPTU1FTlRTIiwiVkFMVUVfQ09OVEFJTkVSIiwiQVJSQVkiLCJWQVJJQUJMRV9OQU1FX1JFIiwiREVGQVVMVCIsIklOVEVSUE9MQVRJT04iLCJJTlRFUlBPTEFURURfVkFSSUFCTEUiLCJDT01NQU5EIiwiTUFDUk9DQUxMIiwiTEFCRUwiLCJBTk5PVEFUSU9OX1VTRV9TSVRFIiwiQU5OT1RBVElPTiIsIktPVExJTl9OVU1CRVJfTU9ERSIsIktPVExJTl9ORVNURURfQ09NTUVOVCIsIktPVExJTl9QQVJFTl9UWVBFIiwiS09UTElOX1BBUkVOX1RZUEUyIiwiTEFTU09fQ0xPU0VfUkUiLCJMQVNTT19LRVlXT1JEUyIsIkhUTUxfQ09NTUVOVCIsIkxBU1NPX05PUFJPQ0VTUyIsIkxBU1NPX1NUQVJUIiwiTEFTU09fREFUQU1FTUJFUiIsIkxBU1NPX0NPREUiLCJMQVNTT19JREVOVF9SRSIsIlJVTEVTIiwiVkFMVUUiLCJTVFJJTkdfTU9ERSIsIklERU5UX01PREUiLCJQQVJFTlNfTU9ERSIsIlZBTFVFX1dJVEhfUlVMRVNFVFMiLCJNSVhJTl9HVUFSRF9NT0RFIiwiUlVMRV9NT0RFIiwiSU5URVJQX0lERU5UX1JFIiwiQVRfUlVMRV9NT0RFIiwiVkFSX1JVTEVfTU9ERSIsIlNFTEVDVE9SX01PREUiLCJMSVNQX0lERU5UX1JFIiwiTElTUF9TSU1QTEVfTlVNQkVSX1JFIiwiSURFTlQiLCJNRUMiLCJRVU9URUQiLCJRVU9URURfQVRPTSIsIlRJVExFMSIsIlRJVExFMiIsIlNVQlNUX1NJTVBMRSIsImlkZW50aWZpZXIiLCJMU0xfU1RSSU5HUyIsIkxTTF9OVU1CRVJTIiwiTE9OR19CUkFDS0VUUyIsIkZVTkMiLCJUQVJHRVQiLCJUUkFOU1BPU0UiLCJBVE9NIiwiUEVSTF9LRVlXT1JEUyIsIlNUUklOR19DT05UQUlOUyIsIlBFUkxfREVGQVVMVF9DT05UQUlOUyIsIk5JWF9LRVlXT1JEUyIsIkFOVElRVU9URSIsIkRFRklORVMiLCJMQU5HVUFHRVMiLCJMRVhFTUVTIiwiQ0xBU1NfS0VZV09SRFMiLCJTUEVDSUFMX1ZBUlMiLCJGVU5DVElPTlMiLCJPWFlHRU5FX0tFWVdPUkRTIiwiQ1VSTFlfQ09NTUVOVCIsIlBBUkVOX0NPTU1FTlQiLCJDVVJMWV9TVUJDT01NRU5UIiwiQ09NTUVOVF9NT0RFIiwiVFlQRVNfUkUiLCJGVU5DVElPTlNfUkUiLCJTUUxfS1ciLCJTUUxfQkkiLCJBUE9TX1NUUklORyIsIlBTX0NPTU1FTlQiLCJDTURMRVRTIiwiUFNfQ0xBU1MiLCJQU19GVU5DVElPTiIsIlBTX1VTSU5HIiwiUFNfQVJHVU1FTlRTIiwiUFNfTUVUSE9EUyIsIkdFTlRMRU1BTlNfU0VUIiwiUFNfVFlQRSIsIlBBUkVOVEVEIiwiTElORV9DT01NRU5UIiwiQkFDS1RJQ0tfU1RSSU5HIiwiV1MwIiwiREVMSU0iLCJLRVlfT1RIRVIiLCJERUxJTV9BTkRfVkFMVUUiLCJQUk9NUFQiLCJMSVRFUkFMX0JSQUNLRVQiLCJRTUxfSURFTlRfUkUiLCJJRF9JRCIsIlFNTF9BVFRSSUJVVEUiLCJRTUxfT0JKRUNUIiwiUkVfSURFTlQiLCJSRV9NT0RVTEVfSURFTlQiLCJSRV9PUEVSQVRPUiIsImNoYXIiLCJSRV9PUEVSQVRPUl9TUEFDRUQiLCJSRV9OVU1CRVIiLCJPUEVSQVRPUl9NT0RFIiwiTElTVF9DT05URU5UU19NT0RFUyIsIk1PRFVMRV9BQ0NFU1NfQ09OVEVOVFMiLCJQQVJBTVNfQ09OVEVOVFMiLCJGVU5DVElPTl9CTE9DS19NT0RFIiwiQ09OU1RSVUNUT1JfTU9ERSIsIlBBVFRFUk5fTUFUQ0hfQkxPQ0tfTU9ERSIsIk1PRFVMRV9BQ0NFU1NfTU9ERSIsIlBST1BFUlRZIiwiU1RBVEVNRU5UUyIsIk5VTV9TVUZGSVgiLCJCVUlMVElOUyIsIlRZUEUiLCJTQ0hFTUVfSURFTlRfUkUiLCJTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSIsIlFVT1RFRF9JREVOVCIsIlFVT1RFRF9MSVNUIiwiQ09NTU9OX0NPTlRBSU5TIiwiSEVYQ09MT1IiLCJzbWFsaV9pbnN0cl9sb3dfcHJpbyIsIkNIQVIiLCJWQVJfSURFTlRfUkUiLCJIRVhfQ09MT1IiLCJTV0lGVF9LRVlXT1JEUyIsIkJMT0NLX0NPTU1FTlQiLCJUUElEIiwiVFBMQUJFTCIsIkZVTkNUSU9OX05BTUVTIiwiVEFHUyIsIkRFQ09SQVRPUiIsIkFSR1MiLCJYTF9LRVlXT1JEUyIsIkRPVUJMRV9RVU9URV9URVhUIiwiSU1QT1JUIiwiRlVOQ1RJT05fREVGSU5JVElPTiIsIkNPTlRBSU5TIiwiYXBpVXJsIiwiZ2V0VG9rZW4iLCJCQVNFX0FQSV9VUkwiLCJxaW5pdU9wdGlvbnMiLCJ1c2VDZG5Eb21haW4iLCJkaXNhYmxlU3RhdGlzdGljc1JlcG9ydCIsInJldHJ5Q291bnQiLCJ6MSIsImZuYW1lIiwicGFyYW1zIiwibWltZVR5cGUiLCJmZXRjaEdldFRva2VuIiwicmVzRGF0YSIsInN0YXR1cyIsInJlcXVlc3QiLCJhamF4Iiwic3VjY2VzcyIsInN1Yk9iamVjdCIsInJlc3BvbnNlIiwiY29tcGxldGUiLCJjb25zb2VsIiwidXBsb2FkIiwic3Vic2NyaWJlIiwiYmFzZTY0IiwicGljIiwiYmFzZTY0ZW5jb2RlIiwiZmlsZVNpemUiLCJnZXRCYXNlNjRTaXplIiwiZ2V0UmVnaW9uVXJsIiwiaGVhZGVycyIsImJhc2U2NHVybCIsImVxdWFsSW5kZXgiLCJzdHJMZW5ndGgiLCJodHRwIiwic2V0dGluZ3MiLCJfcyIsImRhdGFUeXBlIiwiYXN5bmMiLCJ0aW1lb3V0IiwiYmVmb3JlU2VuZCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwicmVzcG9uc2VYTUwiLCJ1c2VVcmxQYXJhbSIsInNUeXBlIiwiZ2V0VXJsUGFyYW0iLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImdldFF1ZXJ5RGF0YSIsImFsZXJ0IiwicGFyYW1zU3RyIiwiZ2V0UXVlcnlTdHJpbmciLCJGb3JtRGF0YSIsInBhcmFtc0FyciIsImVuY29kZVVSSUNvbXBvbmVudCIsIm9iamVjdFByb3RvIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImlzT3duIiwidW5tYXNrZWQiLCJpdGVyYXRlZSIsInN5bWJvbFByb3RvIiwic3ltYm9sVG9TdHJpbmciLCJiYXNlVG9TdHJpbmciLCJkZWZhdWx0VmFsdWUiLCJhdWdlbmQiLCJhZGRlbmQiLCJyZVRyaW0iLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNPY3RhbCIsImZyZWVQYXJzZUludCIsInZhbHVlT2YiLCJpc0JpbmFyeSIsInJlbWFpbmRlciIsIlR5cGVFcnJvciIsInVpZCIsIm1hc2tTcmNLZXkiLCJJRV9QUk9UTyIsImZ1bmNUb1N0cmluZyIsInJlSXNIb3N0Q3RvciIsInJlSXNOYXRpdmUiLCJvYmplY3RDcmVhdGUiLCJwcm90byIsIkN0b3IiLCJ0aGlzQmluZGluZyIsImJpdG1hc2siLCJ0aGlzQXJnIiwiaXNCaW5kIiwibmF0aXZlTWF4IiwicGFydGlhbHMiLCJob2xkZXJzIiwiaXNDdXJyaWVkIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsIkxhenlXcmFwcGVyIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fZGlyX18iLCJfX2ZpbHRlcmVkX18iLCJfX2l0ZXJhdGVlc19fIiwiX190YWtlQ291bnRfXyIsIl9fdmlld3NfXyIsIm90aGVyRnVuYyIsIkxvZGFzaFdyYXBwZXIiLCJjaGFpbkFsbCIsIl9fY2hhaW5fXyIsIl9faW5kZXhfXyIsIl9fdmFsdWVzX18iLCJjbG9uZSIsImxvZGFzaCIsImZ1bmNOYW1lIiwibmF0aXZlTm93IiwibGFzdENhbGxlZCIsInN0YW1wIiwicmVXcmFwRGV0YWlscyIsInJlU3BsaXREZXRhaWxzIiwicmVXcmFwQ29tbWVudCIsImRldGFpbHMiLCJmcm9tUmlnaHQiLCJ3cmFwRmxhZ3MiLCJyZWZlcmVuY2UiLCJ3cmFwRnVuYyIsImFyZ1BvcyIsImFyeSIsImFyaXR5IiwiaXNDdXJyeSIsIm5ld0RhdGEiLCJyZUlzVWludCIsIm5hdGl2ZU1pbiIsImluZGV4ZXMiLCJhcnJMZW5ndGgiLCJvbGRBcnJheSIsInJlc0luZGV4IiwiY3JlYXRlSHlicmlkIiwicGFydGlhbHNSaWdodCIsImhvbGRlcnNSaWdodCIsImlzQXJ5IiwiaXNCaW5kS2V5IiwiaXNGbGlwIiwiaG9sZGVyc0NvdW50IiwibmV3SG9sZGVycyIsInNyY0JpdG1hc2siLCJuZXdCaXRtYXNrIiwiaXNDb21tb24iLCJpc0NvbWJvIiwiZ3VhcmQiLCJvYmpWYWx1ZSIsImN1c3RvbWl6ZXIiLCJpc05ldyIsIm5ld1ZhbHVlIiwidHJhbnNmb3JtIiwib3RoZXJBcmdzIiwiYXNzaWduZXIiLCJzb3VyY2VzIiwidHlwZWRBcnJheVRhZ3MiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiYXJnIiwiaXNQcm90byIsInNyY0luZGV4IiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsIl9fZGF0YV9fIiwiSGFzaCIsImVudHJpZXMiLCJlbnRyeSIsIkxpc3RDYWNoZSIsIk1hcENhY2hlIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJudW1iZXIiLCJzdWJTdHJpbmciLCJwYXRoIiwicGF0aHMiLCJ2YWx1ZXMiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiYmFzZUZsYXR0ZW4iLCJpc1N0cmljdCIsImdldFByb3RvdHlwZU9mIiwib2JqZWN0Q3RvclN0cmluZyIsIm1ldGhvZE5hbWVzIiwiYmluZEtleSIsInJlSGFzVW5pY29kZSIsInJzQXN0cmFsIiwicnNDb21ibyIsInJzRml0eiIsInJzTm9uQXN0cmFsIiwicnNSZWdpb25hbCIsInJzU3VyclBhaXIiLCJyZU9wdE1vZCIsInJzU2VxIiwicnNTeW1ib2wiLCJyZVVuaWNvZGUiLCJtZXRob2ROYW1lIiwic3RyU3ltYm9scyIsImNociIsInRyYWlsaW5nIiwiYWNjdW11bGF0b3IiLCJpbml0QWNjdW0iLCJyZUxhdGluIiwicmVDb21ib01hcmsiLCJyZUFzY2lpV29yZCIsInJlSGFzVW5pY29kZVdvcmQiLCJyc0JyZWFrUmFuZ2UiLCJyc01hdGhPcFJhbmdlIiwicnNCcmVhayIsInJzRGlnaXRzIiwicnNEaW5nYmF0IiwicnNMb3dlciIsInJzTWlzYyIsInJzVXBwZXIiLCJyc01pc2NMb3dlciIsInJzTWlzY1VwcGVyIiwicnNFbW9qaSIsInJlVW5pY29kZVdvcmQiLCJyZUFwb3MiLCJuYXRpdmVJc0Zpbml0ZSIsImlzRmluaXRlIiwicHJlY2lzaW9uIiwibmF0aXZlQ2VpbCIsImxvd2VyIiwidXBwZXIiLCJMQVJHRV9BUlJBWV9TSVpFIiwiU3RhY2siLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsImRhdGFWaWV3Q3RvclN0cmluZyIsIm1hcEN0b3JTdHJpbmciLCJwcm9taXNlQ3RvclN0cmluZyIsInNldEN0b3JTdHJpbmciLCJ3ZWFrTWFwQ3RvclN0cmluZyIsImdldFRhZyIsIkFycmF5QnVmZmVyIiwiY3RvclN0cmluZyIsIlVpbnQ4QXJyYXkiLCJhcnJheUJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJkYXRhVmlldyIsImJ5dGVPZmZzZXQiLCJyZUZsYWdzIiwicmVnZXhwIiwic3ltYm9sVmFsdWVPZiIsInR5cGVkQXJyYXkiLCJub2RlSXNNYXAiLCJpc01hcCIsIm5vZGVJc1NldCIsImlzU2V0IiwiY2xvbmVhYmxlVGFncyIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImlzRnVuYyIsInN0YWNrZWQiLCJzdWJWYWx1ZSIsImtleXNJbiIsIlNldENhY2hlIiwiZXF1YWxGdW5jIiwiaXNQYXJ0aWFsIiwib3RoTGVuZ3RoIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm90aEluZGV4IiwiY29udmVydCIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwic2tpcEN0b3IiLCJvYmpDdG9yIiwib3RoQ3RvciIsIm9iaklzQXJyIiwib3RoSXNBcnIiLCJvYmpUYWciLCJvdGhUYWciLCJvYmpJc09iaiIsIm90aElzT2JqIiwiaXNTYW1lVGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwiYmFzZUlzRXF1YWwiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJzcmNWYWx1ZSIsImhhc0Z1bmMiLCJ0b0l0ZXJhdGVlIiwic2V0dGVyIiwiaXRlcmFibGUiLCJlYWNoRnVuYyIsImluaXRpYWxpemVyIiwiY3VycnkiLCJjdXJyeVJpZ2h0Iiwid2FpdCIsImxhc3RBcmdzIiwibGFzdFRoaXMiLCJtYXhXYWl0IiwidGltZXJJZCIsImxhc3RDYWxsVGltZSIsImxhc3RJbnZva2VUaW1lIiwibGVhZGluZyIsIm1heGluZyIsImludm9rZUZ1bmMiLCJsZWFkaW5nRWRnZSIsInRpbWVyRXhwaXJlZCIsInNob3VsZEludm9rZSIsInRpbWVTaW5jZUxhc3RDYWxsIiwidHJhaWxpbmdFZGdlIiwidGltZVdhaXRpbmciLCJyZW1haW5pbmdXYWl0IiwiZGVib3VuY2VkIiwiaXNJbnZva2luZyIsImZsdXNoIiwicHJvcHNJbmRleCIsInByb3BzTGVuZ3RoIiwibWVyZ2VGdW5jIiwiaXNUeXBlZCIsImJhc2VNZXJnZSIsImN1c3RvbURlZmF1bHRzTWVyZ2UiLCJjb21wYXJhdG9yIiwiaW5jbHVkZXMiLCJ2YWx1ZXNMZW5ndGgiLCJjb21wdXRlZCIsInZhbHVlc0luZGV4IiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiaXNEcm9wIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwicmVIYXNSZWdFeHBDaGFyIiwiZmluZEluZGV4RnVuYyIsInByZXJlcSIsInRocnUiLCJwbGFudCIsImFycmF5cyIsIm1heExlbmd0aCIsIm1hcHBlZCIsIm5vZGVJc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsIm5vZGVJc0RhdGUiLCJpc0RhdGUiLCJzdHViRmFsc2UiLCJub2RlSXNSZWdFeHAiLCJpc1JlZ0V4cCIsIm5hdGl2ZUpvaW4iLCJhY3Rpb25zIiwibXVsdGlwbGllciIsIm11bHRpcGxpY2FuZCIsIml0ZXJhdG9yIiwic3ltSXRlcmF0b3IiLCJuZXN0ZWQiLCJjb21wYXJlciIsInZhbElzRGVmaW5lZCIsInZhbElzTnVsbCIsInZhbElzUmVmbGV4aXZlIiwidmFsSXNTeW1ib2wiLCJvdGhJc0RlZmluZWQiLCJvdGhJc051bGwiLCJvdGhJc1JlZmxleGl2ZSIsIm90aElzU3ltYm9sIiwib3JkZXJzIiwib2JqQ3JpdGVyaWEiLCJjcml0ZXJpYSIsIm90aENyaXRlcmlhIiwib3JkZXJzTGVuZ3RoIiwiaXRlcmF0ZWVzIiwiYXJyYXlGdW5jIiwidHJhbnNmb3JtcyIsImZ1bmNzTGVuZ3RoIiwibmF0aXZlRmxvb3IiLCJjaGFyc0xlbmd0aCIsInJlVHJpbVN0YXJ0IiwibmF0aXZlUGFyc2VJbnQiLCJyYWRpeCIsInBhcnRpYWwiLCJwYXJ0aWFsUmlnaHQiLCJwcmV2aW91cyIsIm5hdGl2ZVJhbmRvbSIsImZyZWVQYXJzZUZsb2F0IiwiZmxvYXRpbmciLCJ0ZW1wIiwicmFuZCIsInN0ZXAiLCJuYXRpdmVSZXZlcnNlIiwicmV0SGlnaGVzdCIsImxvdyIsImhpZ2giLCJ2YWxJc05hTiIsInZhbElzVW5kZWZpbmVkIiwic2V0TG93IiwibWludWVuZCIsInN1YnRyYWhlbmQiLCJpbnRlcmNlcHRvciIsInN0cmluZ0VzY2FwZXMiLCJyZUVtcHR5U3RyaW5nTGVhZGluZyIsInJlRW1wdHlTdHJpbmdNaWRkbGUiLCJyZUVtcHR5U3RyaW5nVHJhaWxpbmciLCJyZUVzVGVtcGxhdGUiLCJyZU5vTWF0Y2giLCJyZVVuZXNjYXBlZFN0cmluZyIsImltcG9ydHMiLCJ0ZW1wbGF0ZVNldHRpbmdzIiwiaXNFc2NhcGluZyIsImlzRXZhbHVhdGluZyIsImltcG9ydHNLZXlzIiwiaW1wb3J0c1ZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJpc0Fyckxpa2UiLCJjaHJTeW1ib2xzIiwicmVUcmltRW5kIiwib21pc3Npb24iLCJuZXdFbmQiLCJyZUVzY2FwZWRIdG1sIiwicmVIYXNFc2NhcGVkSHRtbCIsInNlZW5JbmRleCIsImlkQ291bnRlciIsInByZWZpeCIsInVwZGF0ZXIiLCJ3cmFwcGVkIiwiYXNzaWduRnVuYyIsInZhbHNMZW5ndGgiLCJjb21wYWN0IiwiZGlmZmVyZW5jZUJ5IiwiZGlmZmVyZW5jZVdpdGgiLCJkcm9wUmlnaHQiLCJkcm9wUmlnaHRXaGlsZSIsImRyb3BXaGlsZSIsImZpbGwiLCJmaW5kSW5kZXgiLCJmaW5kTGFzdEluZGV4IiwiZmxhdHRlbiIsImZsYXR0ZW5EZWVwIiwiZmxhdHRlbkRlcHRoIiwiZnJvbVBhaXJzIiwiaW5pdGlhbCIsImludGVyc2VjdGlvbiIsImludGVyc2VjdGlvbkJ5IiwiaW50ZXJzZWN0aW9uV2l0aCIsIm50aCIsInB1bGwiLCJwdWxsQWxsIiwicHVsbEFsbEJ5IiwicHVsbEFsbFdpdGgiLCJwdWxsQXQiLCJzb3J0ZWRJbmRleCIsInNvcnRlZEluZGV4QnkiLCJzb3J0ZWRJbmRleE9mIiwic29ydGVkTGFzdEluZGV4Iiwic29ydGVkTGFzdEluZGV4QnkiLCJzb3J0ZWRMYXN0SW5kZXhPZiIsInNvcnRlZFVuaXEiLCJzb3J0ZWRVbmlxQnkiLCJ0YWlsIiwidGFrZSIsInRha2VSaWdodCIsInRha2VSaWdodFdoaWxlIiwidGFrZVdoaWxlIiwidW5pb24iLCJ1bmlvbkJ5IiwidW5pb25XaXRoIiwidW5pcSIsInVuaXFCeSIsInVuaXFXaXRoIiwidW56aXAiLCJ1bnppcFdpdGgiLCJ3aXRob3V0IiwieG9yIiwieG9yQnkiLCJ4b3JXaXRoIiwiemlwIiwiemlwT2JqZWN0IiwiemlwT2JqZWN0RGVlcCIsInppcFdpdGgiLCJjb3VudEJ5IiwiZWFjaCIsImVhY2hSaWdodCIsImV2ZXJ5IiwiZmluZExhc3QiLCJmbGF0TWFwIiwiZmxhdE1hcERlZXAiLCJmbGF0TWFwRGVwdGgiLCJmb3JFYWNoUmlnaHQiLCJncm91cEJ5IiwiaW52b2tlTWFwIiwia2V5QnkiLCJvcmRlckJ5IiwicGFydGl0aW9uIiwicmVkdWNlIiwicmVkdWNlUmlnaHQiLCJzYW1wbGVTaXplIiwic2h1ZmZsZSIsInNvbWUiLCJzb3J0QnkiLCJkZWZlciIsImZsaXAiLCJuZWdhdGUiLCJvbmNlIiwib3ZlckFyZ3MiLCJyZWFyZyIsInNwcmVhZCIsInRocm90dGxlIiwidW5hcnkiLCJjYXN0QXJyYXkiLCJjbG9uZURlZXAiLCJjbG9uZURlZXBXaXRoIiwiY2xvbmVXaXRoIiwiY29uZm9ybXNUbyIsImVxIiwiZ3RlIiwiaXNBcmd1bWVudHMiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0IiwiaXNCb29sZWFuIiwiaXNFbGVtZW50IiwiaXNFcXVhbCIsImlzRXF1YWxXaXRoIiwiaXNFcnJvciIsImlzSW50ZWdlciIsImlzTGVuZ3RoIiwiaXNNYXRjaCIsImlzTWF0Y2hXaXRoIiwiaXNOYXRpdmUiLCJpc05pbCIsImlzTnVsbCIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc09iamVjdExpa2UiLCJpc1BsYWluT2JqZWN0IiwiaXNTYWZlSW50ZWdlciIsImlzU3RyaW5nIiwiaXNTeW1ib2wiLCJpc1VuZGVmaW5lZCIsImlzV2Vha01hcCIsImlzV2Vha1NldCIsImx0ZSIsInRvQXJyYXkiLCJ0b0Zpbml0ZSIsInRvSW50ZWdlciIsInRvTGVuZ3RoIiwidG9OdW1iZXIiLCJ0b1BsYWluT2JqZWN0IiwidG9TYWZlSW50ZWdlciIsImRpdmlkZSIsIm1heEJ5IiwibWVhbiIsIm1lYW5CeSIsIm1pbkJ5IiwibXVsdGlwbHkiLCJzdWJ0cmFjdCIsInN1bSIsInN1bUJ5IiwiY2xhbXAiLCJpblJhbmdlIiwiYXNzaWduSW4iLCJhc3NpZ25JbldpdGgiLCJhc3NpZ25XaXRoIiwiZGVmYXVsdHNEZWVwIiwiZW50cmllc0luIiwiZXh0ZW5kV2l0aCIsImZpbmRLZXkiLCJmaW5kTGFzdEtleSIsImZvckluIiwiZm9ySW5SaWdodCIsImZvck93biIsImZvck93blJpZ2h0IiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25zSW4iLCJoYXNJbiIsImludmVydEJ5IiwiaW52b2tlIiwibWFwS2V5cyIsIm1hcFZhbHVlcyIsIm1lcmdlV2l0aCIsIm9taXQiLCJvbWl0QnkiLCJwaWNrIiwicGlja0J5Iiwic2V0V2l0aCIsInRvUGFpcnMiLCJ0b1BhaXJzSW4iLCJ1bnNldCIsInVwZGF0ZVdpdGgiLCJ2YWx1ZXNJbiIsImNvbW1pdCIsInRhcCIsInRvSXRlcmF0b3IiLCJ0b0pTT04iLCJ3cmFwcGVyQ2hhaW4iLCJjYW1lbENhc2UiLCJjYXBpdGFsaXplIiwiZGVidXJyIiwiZW5kc1dpdGgiLCJlc2NhcGVSZWdFeHAiLCJrZWJhYkNhc2UiLCJsb3dlckNhc2UiLCJsb3dlckZpcnN0IiwicGFkIiwicGFkRW5kIiwicGFkU3RhcnQiLCJzbmFrZUNhc2UiLCJzdGFydENhc2UiLCJzdGFydHNXaXRoIiwidGVtcGxhdGUiLCJ0b0xvd2VyIiwidG9VcHBlciIsInRyaW1FbmQiLCJ0cmltU3RhcnQiLCJ0cnVuY2F0ZSIsInVwcGVyQ2FzZSIsInVwcGVyRmlyc3QiLCJ3b3JkcyIsImF0dGVtcHQiLCJiaW5kQWxsIiwiY29uZCIsImNvbmZvcm1zIiwiY29uc3RhbnQiLCJkZWZhdWx0VG8iLCJmbG93IiwiZmxvd1JpZ2h0IiwiaWRlbnRpdHkiLCJtYXRjaGVzIiwibWF0Y2hlc1Byb3BlcnR5IiwibWV0aG9kT2YiLCJtaXhpbiIsIm50aEFyZyIsIm92ZXJFdmVyeSIsIm92ZXJTb21lIiwicHJvcGVydHlPZiIsInJhbmdlUmlnaHQiLCJzdHViQXJyYXkiLCJzdHViT2JqZWN0Iiwic3R1YlN0cmluZyIsInN0dWJUcnVlIiwidGltZXMiLCJ0b1BhdGgiLCJ1bmlxdWVJZCIsImlzUmlnaHQiLCJpdGVyTGVuZ3RoIiwidGFrZUNvdW50IiwiaXRlckluZGV4IiwiaXNPYmoiLCJWRVJTSU9OIiwiaXNGaWx0ZXIiLCJ0YWtlTmFtZSIsImRyb3BOYW1lIiwiY2hlY2tJdGVyYXRlZSIsImlzVGFrZXIiLCJsb2Rhc2hGdW5jIiwicmV0VW53cmFwcGVkIiwiaXNMYXp5IiwidXNlTGF6eSIsImlzSHlicmlkIiwiaXNVbndyYXBwZWQiLCJvbmx5TGF6eSIsImNoYWluTmFtZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUFtQixVQUFJRCxJQUV2QkQsRUFBZ0IsVUFBSUMsSUFSdEIsQ0FTR0ssUUFBUSxXQUNYLE8sWUNURSxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIs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QUFRLElBQ2hELElBQVEsSUFBTSxJQUFRLElBQUssSUFBUSxJQUFLLElBQVEsSUFDaEQsSUFBUSxJQUFNLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUNoRCxJQUFRLElBQU0sSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQ2hELElBQVEsSUFBTSxJQUFRLElBQ3RCLElBQVEsSUFBTSxJQUFRLElBQUssSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUMxRSxJQUFRLElBQU0sSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUFLLElBQVEsSUFDMUUsSUFBUSxJQUFNLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUNoRCxJQUFRLElBQU0sSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQ2hELElBQVEsSUFBTSxJQUFRLElBQUssSUFBUSxJQUNuQyxJQUFRLEtBQU0sSUFBUSxLQUN0QixJQUFRLEtBQU0sSUFBUSxLQUN0QixJQUFRLEtBRVIsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQ3pDLElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUN6QyxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDeEQsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN4RCxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDeEQsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN4RCxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2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WCxVQUFVcWtILE1BQVEsR0FBSUEsTUFDN0IsR0FBT3JrSCxVQUFVa08sUUFBVSxHQUFJQSxRQUMvQixHQUFPbE8sVUFBVTAwSCxPQUFTLEdBQU8xMEgsVUFBVTB5RyxRQUFVLEdBQU8xeUcsVUFBVVgsTUFBUSxHQUFJQSxNQUdsRixHQUFPVyxVQUFVMlUsTUFBUSxHQUFPM1UsVUFBVTQwQixLQUV0QyxLQUNGLEdBQU81MEIsVUFBVSxJQUFlLEdBQUl5MEgsWUFHdkIiLCJmaWxlIjoiY01kRWRpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiQ01kRWRpdG9yXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkNNZEVkaXRvclwiXSA9IGZhY3RvcnkoKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE5KTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHBzOi8vY29kZW1pcnJvci5uZXQpLCBhIGNvZGUgZWRpdG9yXG4vLyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IG9uIHRvcCBvZiB0aGUgYnJvd3NlcidzIERPTS5cbi8vXG4vLyBZb3UgY2FuIGZpbmQgc29tZSB0ZWNobmljYWwgYmFja2dyb3VuZCBmb3Igc29tZSBvZiB0aGUgY29kZSBiZWxvd1xuLy8gYXQgaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nLyNjbS1pbnRlcm5hbHMgLlxuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkNvZGVNaXJyb3IgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgLy8gS2x1ZGdlcyBmb3IgYnVncyBhbmQgYmVoYXZpb3IgZGlmZmVyZW5jZXMgdGhhdCBjYW4ndCBiZSBmZWF0dXJlXG4gIC8vIGRldGVjdGVkIGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuXG4gIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm07XG5cbiAgdmFyIGdlY2tvID0gL2dlY2tvXFwvXFxkL2kudGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgaWVfdXB0bzEwID0gL01TSUUgXFxkLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBpZV8xMXVwID0gL1RyaWRlbnRcXC8oPzpbNy05XXxcXGR7Mix9KVxcLi4qcnY6KFxcZCspLy5leGVjKHVzZXJBZ2VudCk7XG4gIHZhciBlZGdlID0gL0VkZ2VcXC8oXFxkKykvLmV4ZWModXNlckFnZW50KTtcbiAgdmFyIGllID0gaWVfdXB0bzEwIHx8IGllXzExdXAgfHwgZWRnZTtcbiAgdmFyIGllX3ZlcnNpb24gPSBpZSAmJiAoaWVfdXB0bzEwID8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDYgOiArKGVkZ2UgfHwgaWVfMTF1cClbMV0pO1xuICB2YXIgd2Via2l0ID0gIWVkZ2UgJiYgL1dlYktpdFxcLy8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XFwvXFxkK1xcLlxcZCsvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGNocm9tZSA9ICFlZGdlICYmIC9DaHJvbWVcXC8vLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIHByZXN0byA9IC9PcGVyYVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpO1xuICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01hYyBPUyBYIDFcXGRcXEQoWzgtOV18XFxkXFxkKVxcRC8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgcGhhbnRvbSA9IC9QaGFudG9tSlMvLnRlc3QodXNlckFnZW50KTtcblxuICB2YXIgaW9zID0gIWVkZ2UgJiYgL0FwcGxlV2ViS2l0Ly50ZXN0KHVzZXJBZ2VudCkgJiYgL01vYmlsZVxcL1xcdysvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGFuZHJvaWQgPSAvQW5kcm9pZC8udGVzdCh1c2VyQWdlbnQpO1xuICAvLyBUaGlzIGlzIHdvZWZ1bGx5IGluY29tcGxldGUuIFN1Z2dlc3Rpb25zIGZvciBhbHRlcm5hdGl2ZSBtZXRob2RzIHdlbGNvbWUuXG4gIHZhciBtb2JpbGUgPSBpb3MgfHwgYW5kcm9pZCB8fCAvd2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChwbGF0Zm9ybSk7XG4gIHZhciBjaHJvbWVPUyA9IC9cXGJDck9TXFxiLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciB3aW5kb3dzID0gL3dpbi9pLnRlc3QocGxhdGZvcm0pO1xuXG4gIHZhciBwcmVzdG9fdmVyc2lvbiA9IHByZXN0byAmJiB1c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cXC8oXFxkKlxcLlxcZCopLyk7XG4gIGlmIChwcmVzdG9fdmVyc2lvbikgeyBwcmVzdG9fdmVyc2lvbiA9IE51bWJlcihwcmVzdG9fdmVyc2lvblsxXSk7IH1cbiAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9XG4gIC8vIFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBPUyBYXG4gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTtcbiAgdmFyIGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmIGllX3ZlcnNpb24gPj0gOSk7XG5cbiAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xzICsgXCIoPzokfFxcXFxzKVxcXFxzKlwiKSB9XG5cbiAgdmFyIHJtQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbHMpIHtcbiAgICB2YXIgY3VycmVudCA9IG5vZGUuY2xhc3NOYW1lO1xuICAgIHZhciBtYXRjaCA9IGNsYXNzVGVzdChjbHMpLmV4ZWMoY3VycmVudCk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgYWZ0ZXIgPSBjdXJyZW50LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgIG5vZGUuY2xhc3NOYW1lID0gY3VycmVudC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAoYWZ0ZXIgPyBtYXRjaFsxXSArIGFmdGVyIDogXCJcIik7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuKGUpIHtcbiAgICBmb3IgKHZhciBjb3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4gMDsgLS1jb3VudClcbiAgICAgIHsgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOyB9XG4gICAgcmV0dXJuIGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHBhcmVudCwgZSkge1xuICAgIHJldHVybiByZW1vdmVDaGlsZHJlbihwYXJlbnQpLmFwcGVuZENoaWxkKGUpXG4gIH1cblxuICBmdW5jdGlvbiBlbHQodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7XG4gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgaWYgKGNsYXNzTmFtZSkgeyBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuICAgIGlmIChzdHlsZSkgeyBlLnN0eWxlLmNzc1RleHQgPSBzdHlsZTsgfVxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PSBcInN0cmluZ1wiKSB7IGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpOyB9XG4gICAgZWxzZSBpZiAoY29udGVudCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyArK2kpIHsgZS5hcHBlbmRDaGlsZChjb250ZW50W2ldKTsgfSB9XG4gICAgcmV0dXJuIGVcbiAgfVxuICAvLyB3cmFwcGVyIGZvciBlbHQsIHdoaWNoIHJlbW92ZXMgdGhlIGVsdCBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWVcbiAgZnVuY3Rpb24gZWx0UCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHtcbiAgICB2YXIgZSA9IGVsdCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpO1xuICAgIGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcInByZXNlbnRhdGlvblwiKTtcbiAgICByZXR1cm4gZVxuICB9XG5cbiAgdmFyIHJhbmdlO1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHsgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmROb2RlKSB7XG4gICAgdmFyIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHIuc2V0RW5kKGVuZE5vZGUgfHwgbm9kZSwgZW5kKTtcbiAgICByLnNldFN0YXJ0KG5vZGUsIHN0YXJ0KTtcbiAgICByZXR1cm4gclxuICB9OyB9XG4gIGVsc2UgeyByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgdHJ5IHsgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOyB9XG4gICAgY2F0Y2goZSkgeyByZXR1cm4gciB9XG4gICAgci5jb2xsYXBzZSh0cnVlKTtcbiAgICByLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIiwgZW5kKTtcbiAgICByLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCBzdGFydCk7XG4gICAgcmV0dXJuIHJcbiAgfTsgfVxuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMykgLy8gQW5kcm9pZCBicm93c2VyIGFsd2F5cyByZXR1cm5zIGZhbHNlIHdoZW4gY2hpbGQgaXMgYSB0ZXh0bm9kZVxuICAgICAgeyBjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGU7IH1cbiAgICBpZiAocGFyZW50LmNvbnRhaW5zKVxuICAgICAgeyByZXR1cm4gcGFyZW50LmNvbnRhaW5zKGNoaWxkKSB9XG4gICAgZG8ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDExKSB7IGNoaWxkID0gY2hpbGQuaG9zdDsgfVxuICAgICAgaWYgKGNoaWxkID09IHBhcmVudCkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgfSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKVxuICB9XG5cbiAgZnVuY3Rpb24gYWN0aXZlRWx0KCkge1xuICAgIC8vIElFIGFuZCBFZGdlIG1heSB0aHJvdyBhbiBcIlVuc3BlY2lmaWVkIEVycm9yXCIgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5cbiAgICAvLyBJRSA8IDEwIHdpbGwgdGhyb3cgd2hlbiBhY2Nlc3NlZCB3aGlsZSB0aGUgcGFnZSBpcyBsb2FkaW5nIG9yIGluIGFuIGlmcmFtZS5cbiAgICAvLyBJRSA+IDkgYW5kIEVkZ2Ugd2lsbCB0aHJvdyB3aGVuIGFjY2Vzc2VkIGluIGFuIGlmcmFtZSBpZiBkb2N1bWVudC5ib2R5IGlzIHVuYXZhaWxhYmxlLlxuICAgIHZhciBhY3RpdmVFbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5ib2R5IHx8IG51bGw7XG4gICAgfVxuICAgIHdoaWxlIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCAmJiBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudClcbiAgICAgIHsgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50OyB9XG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNscykge1xuICAgIHZhciBjdXJyZW50ID0gbm9kZS5jbGFzc05hbWU7XG4gICAgaWYgKCFjbGFzc1Rlc3QoY2xzKS50ZXN0KGN1cnJlbnQpKSB7IG5vZGUuY2xhc3NOYW1lICs9IChjdXJyZW50ID8gXCIgXCIgOiBcIlwiKSArIGNsczsgfVxuICB9XG4gIGZ1bmN0aW9uIGpvaW5DbGFzc2VzKGEsIGIpIHtcbiAgICB2YXIgYXMgPSBhLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBpZiAoYXNbaV0gJiYgIWNsYXNzVGVzdChhc1tpXSkudGVzdChiKSkgeyBiICs9IFwiIFwiICsgYXNbaV07IH0gfVxuICAgIHJldHVybiBiXG4gIH1cblxuICB2YXIgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0KCk7IH07XG4gIGlmIChpb3MpIC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLlxuICAgIHsgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAwOyBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOyB9OyB9XG4gIGVsc2UgaWYgKGllKSAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzXG4gICAgeyBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfSBjYXRjaChfZSkge30gfTsgfVxuXG4gIGZ1bmN0aW9uIGJpbmQoZikge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKX1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJnZXQsIG92ZXJ3cml0ZSkge1xuICAgIGlmICghdGFyZ2V0KSB7IHRhcmdldCA9IHt9OyB9XG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopXG4gICAgICB7IGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiYgKG92ZXJ3cml0ZSAhPT0gZmFsc2UgfHwgIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkpXG4gICAgICAgIHsgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdOyB9IH1cbiAgICByZXR1cm4gdGFyZ2V0XG4gIH1cblxuICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC5cbiAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi5cbiAgZnVuY3Rpb24gY291bnRDb2x1bW4oc3RyaW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHtcbiAgICBpZiAoZW5kID09IG51bGwpIHtcbiAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXFxzXFx1MDBhMF0vKTtcbiAgICAgIGlmIChlbmQgPT0gLTEpIHsgZW5kID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOzspIHtcbiAgICAgIHZhciBuZXh0VGFiID0gc3RyaW5nLmluZGV4T2YoXCJcXHRcIiwgaSk7XG4gICAgICBpZiAobmV4dFRhYiA8IDAgfHwgbmV4dFRhYiA+PSBlbmQpXG4gICAgICAgIHsgcmV0dXJuIG4gKyAoZW5kIC0gaSkgfVxuICAgICAgbiArPSBuZXh0VGFiIC0gaTtcbiAgICAgIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7XG4gICAgICBpID0gbmV4dFRhYiArIDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIERlbGF5ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlkID0gbnVsbDtcbiAgICB0aGlzLmYgPSBudWxsO1xuICAgIHRoaXMudGltZSA9IDA7XG4gICAgdGhpcy5oYW5kbGVyID0gYmluZCh0aGlzLm9uVGltZW91dCwgdGhpcyk7XG4gIH07XG4gIERlbGF5ZWQucHJvdG90eXBlLm9uVGltZW91dCA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gICAgc2VsZi5pZCA9IDA7XG4gICAgaWYgKHNlbGYudGltZSA8PSArbmV3IERhdGUpIHtcbiAgICAgIHNlbGYuZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KHNlbGYuaGFuZGxlciwgc2VsZi50aW1lIC0gK25ldyBEYXRlKTtcbiAgICB9XG4gIH07XG4gIERlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtcywgZikge1xuICAgIHRoaXMuZiA9IGY7XG4gICAgdmFyIHRpbWUgPSArbmV3IERhdGUgKyBtcztcbiAgICBpZiAoIXRoaXMuaWQgfHwgdGltZSA8IHRoaXMudGltZSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpO1xuICAgICAgdGhpcy5pZCA9IHNldFRpbWVvdXQodGhpcy5oYW5kbGVyLCBtcyk7XG4gICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCBlbHQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgeyBpZiAoYXJyYXlbaV0gPT0gZWx0KSB7IHJldHVybiBpIH0gfVxuICAgIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHBpeGVscyBhZGRlZCB0byBzY3JvbGxlciBhbmQgc2l6ZXIgdG8gaGlkZSBzY3JvbGxiYXJcbiAgdmFyIHNjcm9sbGVyR2FwID0gMzA7XG5cbiAgLy8gUmV0dXJuZWQgb3IgdGhyb3duIGJ5IHZhcmlvdXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdFxuICAvLyBoYW5kbGluZyB0aGlzJy5cbiAgdmFyIFBhc3MgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuIFwiQ29kZU1pcnJvci5QYXNzXCJ9fTtcblxuICAvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHNcbiAgdmFyIHNlbF9kb250U2Nyb2xsID0ge3Njcm9sbDogZmFsc2V9LCBzZWxfbW91c2UgPSB7b3JpZ2luOiBcIiptb3VzZVwifSwgc2VsX21vdmUgPSB7b3JpZ2luOiBcIittb3ZlXCJ9O1xuXG4gIC8vIFRoZSBpbnZlcnNlIG9mIGNvdW50Q29sdW1uIC0tIGZpbmQgdGhlIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvXG4gIC8vIGEgcGFydGljdWxhciBjb2x1bW4uXG4gIGZ1bmN0aW9uIGZpbmRDb2x1bW4oc3RyaW5nLCBnb2FsLCB0YWJTaXplKSB7XG4gICAgZm9yICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7XG4gICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKFwiXFx0XCIsIHBvcyk7XG4gICAgICBpZiAobmV4dFRhYiA9PSAtMSkgeyBuZXh0VGFiID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgICAgdmFyIHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zO1xuICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpXG4gICAgICAgIHsgcmV0dXJuIHBvcyArIE1hdGgubWluKHNraXBwZWQsIGdvYWwgLSBjb2wpIH1cbiAgICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zO1xuICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7XG4gICAgICBwb3MgPSBuZXh0VGFiICsgMTtcbiAgICAgIGlmIChjb2wgPj0gZ29hbCkgeyByZXR1cm4gcG9zIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3BhY2VTdHJzID0gW1wiXCJdO1xuICBmdW5jdGlvbiBzcGFjZVN0cihuKSB7XG4gICAgd2hpbGUgKHNwYWNlU3Rycy5sZW5ndGggPD0gbilcbiAgICAgIHsgc3BhY2VTdHJzLnB1c2gobHN0KHNwYWNlU3RycykgKyBcIiBcIik7IH1cbiAgICByZXR1cm4gc3BhY2VTdHJzW25dXG4gIH1cblxuICBmdW5jdGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJyLmxlbmd0aC0xXSB9XG5cbiAgZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsgb3V0W2ldID0gZihhcnJheVtpXSwgaSk7IH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRTb3J0ZWQoYXJyYXksIHZhbHVlLCBzY29yZSkge1xuICAgIHZhciBwb3MgPSAwLCBwcmlvcml0eSA9IHNjb3JlKHZhbHVlKTtcbiAgICB3aGlsZSAocG9zIDwgYXJyYXkubGVuZ3RoICYmIHNjb3JlKGFycmF5W3Bvc10pIDw9IHByaW9yaXR5KSB7IHBvcysrOyB9XG4gICAgYXJyYXkuc3BsaWNlKHBvcywgMCwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90aGluZygpIHt9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7XG4gICAgdmFyIGluc3Q7XG4gICAgaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgICAgIGluc3QgPSBPYmplY3QuY3JlYXRlKGJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RoaW5nLnByb3RvdHlwZSA9IGJhc2U7XG4gICAgICBpbnN0ID0gbmV3IG5vdGhpbmcoKTtcbiAgICB9XG4gICAgaWYgKHByb3BzKSB7IGNvcHlPYmoocHJvcHMsIGluc3QpOyB9XG4gICAgcmV0dXJuIGluc3RcbiAgfVxuXG4gIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXFx1MDBkZlxcdTA1ODdcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUzMDQwLVxcdTMwOWZcXHUzMGEwLVxcdTMwZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmY2NcXHVhYzAwLVxcdWQ3YWZdLztcbiAgZnVuY3Rpb24gaXNXb3JkQ2hhckJhc2ljKGNoKSB7XG4gICAgcmV0dXJuIC9cXHcvLnRlc3QoY2gpIHx8IGNoID4gXCJcXHg4MFwiICYmXG4gICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKVxuICB9XG4gIGZ1bmN0aW9uIGlzV29yZENoYXIoY2gsIGhlbHBlcikge1xuICAgIGlmICghaGVscGVyKSB7IHJldHVybiBpc1dvcmRDaGFyQmFzaWMoY2gpIH1cbiAgICBpZiAoaGVscGVyLnNvdXJjZS5pbmRleE9mKFwiXFxcXHdcIikgPiAtMSAmJiBpc1dvcmRDaGFyQmFzaWMoY2gpKSB7IHJldHVybiB0cnVlIH1cbiAgICByZXR1cm4gaGVscGVyLnRlc3QoY2gpXG4gIH1cblxuICBmdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICAgIGZvciAodmFyIG4gaW4gb2JqKSB7IGlmIChvYmouaGFzT3duUHJvcGVydHkobikgJiYgb2JqW25dKSB7IHJldHVybiBmYWxzZSB9IH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gRXh0ZW5kaW5nIHVuaWNvZGUgY2hhcmFjdGVycy4gQSBzZXJpZXMgb2YgYSBub24tZXh0ZW5kaW5nIGNoYXIgK1xuICAvLyBhbnkgbnVtYmVyIG9mIGV4dGVuZGluZyBjaGFycyBpcyB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYXMgZmFyXG4gIC8vIGFzIGVkaXRpbmcgYW5kIG1lYXN1cmluZyBpcyBjb25jZXJuZWQuIFRoaXMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsXG4gIC8vIHNpbmNlIHNvbWUgc2NyaXB0cy9mb250cy9icm93c2VycyBhbHNvIHRyZWF0IG90aGVyIGNvbmZpZ3VyYXRpb25zXG4gIC8vIG9mIGNvZGUgcG9pbnRzIGFzIGEgZ3JvdXAuXG4gIHZhciBleHRlbmRpbmdDaGFycyA9IC9bXFx1MDMwMC1cXHUwMzZmXFx1MDQ4My1cXHUwNDg5XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjVlXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGUtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA5MDAtXFx1MDkwMlxcdTA5M2NcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDliY1xcdTA5YmVcXHUwOWMxLVxcdTA5YzRcXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MGEwMVxcdTBhMDJcXHUwYTNjXFx1MGE0MVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTcwXFx1MGE3MVxcdTBhNzVcXHUwYTgxXFx1MGE4MlxcdTBhYmNcXHUwYWMxLVxcdTBhYzVcXHUwYWM3XFx1MGFjOFxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBiMDFcXHUwYjNjXFx1MGIzZVxcdTBiM2ZcXHUwYjQxLVxcdTBiNDRcXHUwYjRkXFx1MGI1NlxcdTBiNTdcXHUwYjYyXFx1MGI2M1xcdTBiODJcXHUwYmJlXFx1MGJjMFxcdTBiY2RcXHUwYmQ3XFx1MGMzZS1cXHUwYzQwXFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjYmNcXHUwY2JmXFx1MGNjMlxcdTBjYzZcXHUwY2NjXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwZDNlXFx1MGQ0MS1cXHUwZDQ0XFx1MGQ0ZFxcdTBkNTdcXHUwZDYyXFx1MGQ2M1xcdTBkY2FcXHUwZGNmXFx1MGRkMi1cXHUwZGQ0XFx1MGRkNlxcdTBkZGZcXHUwZTMxXFx1MGUzNC1cXHUwZTNhXFx1MGU0Ny1cXHUwZTRlXFx1MGViMVxcdTBlYjQtXFx1MGViOVxcdTBlYmJcXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGYxOFxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2XFx1MGY4N1xcdTBmOTAtXFx1MGY5N1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5XFx1MTAzYVxcdTEwM2RcXHUxMDNlXFx1MTA1OFxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzRcXHUxMDgyXFx1MTA4NVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyN1xcdTE5MjhcXHUxOTMyXFx1MTkzOS1cXHUxOTNiXFx1MWExN1xcdTFhMThcXHUxYTU2XFx1MWE1OC1cXHUxYTVlXFx1MWE2MFxcdTFhNjJcXHUxYTY1LVxcdTFhNmNcXHUxYTczLVxcdTFhN2NcXHUxYTdmXFx1MWIwMC1cXHUxYjAzXFx1MWIzNFxcdTFiMzYtXFx1MWIzYVxcdTFiM2NcXHUxYjQyXFx1MWI2Yi1cXHUxYjczXFx1MWI4MFxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4XFx1MWJhOVxcdTFjMmMtXFx1MWMzM1xcdTFjMzZcXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFkYzAtXFx1MWRlNlxcdTFkZmQtXFx1MWRmZlxcdTIwMGNcXHUyMDBkXFx1MjBkMC1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjZmLVxcdWE2NzJcXHVhNjdjXFx1YTY3ZFxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyNVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmNcXHVhYTI5LVxcdWFhMmVcXHVhYTMxXFx1YWEzMlxcdWFhMzVcXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiN1xcdWFhYjhcXHVhYWJlXFx1YWFiZlxcdWFhYzFcXHVhYmU1XFx1YWJlOFxcdWFiZWRcXHVkYzAwLVxcdWRmZmZcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTI2XFx1ZmY5ZVxcdWZmOWZdLztcbiAgZnVuY3Rpb24gaXNFeHRlbmRpbmdDaGFyKGNoKSB7IHJldHVybiBjaC5jaGFyQ29kZUF0KDApID49IDc2OCAmJiBleHRlbmRpbmdDaGFycy50ZXN0KGNoKSB9XG5cbiAgLy8gUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSByYW5nZSBbYDBgOyBgc3RyLmxlbmd0aGBdIHVubGVzcyBgcG9zYCBpcyBvdXRzaWRlIHRoYXQgcmFuZ2UuXG4gIGZ1bmN0aW9uIHNraXBFeHRlbmRpbmdDaGFycyhzdHIsIHBvcywgZGlyKSB7XG4gICAgd2hpbGUgKChkaXIgPCAwID8gcG9zID4gMCA6IHBvcyA8IHN0ci5sZW5ndGgpICYmIGlzRXh0ZW5kaW5nQ2hhcihzdHIuY2hhckF0KHBvcykpKSB7IHBvcyArPSBkaXI7IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBmcm9tIHRoZSByYW5nZSBbYGZyb21gOyBgdG9gXSB0aGF0IHNhdGlzZmllc1xuICAvLyBgcHJlZGAgYW5kIGlzIGNsb3Nlc3QgdG8gYGZyb21gLiBBc3N1bWVzIHRoYXQgYXQgbGVhc3QgYHRvYFxuICAvLyBzYXRpc2ZpZXMgYHByZWRgLiBTdXBwb3J0cyBgZnJvbWAgYmVpbmcgZ3JlYXRlciB0aGFuIGB0b2AuXG4gIGZ1bmN0aW9uIGZpbmRGaXJzdChwcmVkLCBmcm9tLCB0bykge1xuICAgIC8vIEF0IGFueSBwb2ludCB3ZSBhcmUgY2VydGFpbiBgdG9gIHNhdGlzZmllcyBgcHJlZGAsIGRvbid0IGtub3dcbiAgICAvLyB3aGV0aGVyIGBmcm9tYCBkb2VzLlxuICAgIHZhciBkaXIgPSBmcm9tID4gdG8gPyAtMSA6IDE7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKGZyb20gPT0gdG8pIHsgcmV0dXJuIGZyb20gfVxuICAgICAgdmFyIG1pZEYgPSAoZnJvbSArIHRvKSAvIDIsIG1pZCA9IGRpciA8IDAgPyBNYXRoLmNlaWwobWlkRikgOiBNYXRoLmZsb29yKG1pZEYpO1xuICAgICAgaWYgKG1pZCA9PSBmcm9tKSB7IHJldHVybiBwcmVkKG1pZCkgPyBmcm9tIDogdG8gfVxuICAgICAgaWYgKHByZWQobWlkKSkgeyB0byA9IG1pZDsgfVxuICAgICAgZWxzZSB7IGZyb20gPSBtaWQgKyBkaXI7IH1cbiAgICB9XG4gIH1cblxuICAvLyBCSURJIEhFTFBFUlNcblxuICBmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywgZikge1xuICAgIGlmICghb3JkZXIpIHsgcmV0dXJuIGYoZnJvbSwgdG8sIFwibHRyXCIsIDApIH1cbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9tKSB7XG4gICAgICAgIGYoTWF0aC5tYXgocGFydC5mcm9tLCBmcm9tKSwgTWF0aC5taW4ocGFydC50bywgdG8pLCBwYXJ0LmxldmVsID09IDEgPyBcInJ0bFwiIDogXCJsdHJcIiwgaSk7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkgeyBmKGZyb20sIHRvLCBcImx0clwiKTsgfVxuICB9XG5cbiAgdmFyIGJpZGlPdGhlciA9IG51bGw7XG4gIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpIHtcbiAgICB2YXIgZm91bmQ7XG4gICAgYmlkaU90aGVyID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY3VyID0gb3JkZXJbaV07XG4gICAgICBpZiAoY3VyLmZyb20gPCBjaCAmJiBjdXIudG8gPiBjaCkgeyByZXR1cm4gaSB9XG4gICAgICBpZiAoY3VyLnRvID09IGNoKSB7XG4gICAgICAgIGlmIChjdXIuZnJvbSAhPSBjdXIudG8gJiYgc3RpY2t5ID09IFwiYmVmb3JlXCIpIHsgZm91bmQgPSBpOyB9XG4gICAgICAgIGVsc2UgeyBiaWRpT3RoZXIgPSBpOyB9XG4gICAgICB9XG4gICAgICBpZiAoY3VyLmZyb20gPT0gY2gpIHtcbiAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50byAmJiBzdGlja3kgIT0gXCJiZWZvcmVcIikgeyBmb3VuZCA9IGk7IH1cbiAgICAgICAgZWxzZSB7IGJpZGlPdGhlciA9IGk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kICE9IG51bGwgPyBmb3VuZCA6IGJpZGlPdGhlclxuICB9XG5cbiAgLy8gQmlkaXJlY3Rpb25hbCBvcmRlcmluZyBhbGdvcml0aG1cbiAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS90cjktMTMuaHRtbCBmb3IgdGhlIGFsZ29yaXRobVxuICAvLyB0aGF0IHRoaXMgKHBhcnRpYWxseSkgaW1wbGVtZW50cy5cblxuICAvLyBPbmUtY2hhciBjb2RlcyB1c2VkIGZvciBjaGFyYWN0ZXIgdHlwZXM6XG4gIC8vIEwgKEwpOiAgIExlZnQtdG8tUmlnaHRcbiAgLy8gUiAoUik6ICAgUmlnaHQtdG8tTGVmdFxuICAvLyByIChBTCk6ICBSaWdodC10by1MZWZ0IEFyYWJpY1xuICAvLyAxIChFTik6ICBFdXJvcGVhbiBOdW1iZXJcbiAgLy8gKyAoRVMpOiAgRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvclxuICAvLyAlIChFVCk6ICBFdXJvcGVhbiBOdW1iZXIgVGVybWluYXRvclxuICAvLyBuIChBTik6ICBBcmFiaWMgTnVtYmVyXG4gIC8vICwgKENTKTogIENvbW1vbiBOdW1iZXIgU2VwYXJhdG9yXG4gIC8vIG0gKE5TTSk6IE5vbi1TcGFjaW5nIE1hcmtcbiAgLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1dHJhbFxuICAvLyBzIChCKTogICBQYXJhZ3JhcGggU2VwYXJhdG9yXG4gIC8vIHQgKFMpOiAgIFNlZ21lbnQgU2VwYXJhdG9yXG4gIC8vIHcgKFdTKTogIFdoaXRlc3BhY2VcbiAgLy8gTiAoT04pOiAgT3RoZXIgTmV1dHJhbHNcblxuICAvLyBSZXR1cm5zIG51bGwgaWYgY2hhcmFjdGVycyBhcmUgb3JkZXJlZCBhcyB0aGV5IGFwcGVhclxuICAvLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxldmVsfVxuICAvLyBvYmplY3RzKSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1ciB2aXN1YWxseS5cbiAgdmFyIGJpZGlPcmRlcmluZyA9IChmdW5jdGlvbigpIHtcbiAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmXG4gICAgdmFyIGxvd1R5cGVzID0gXCJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTlwiO1xuICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmOVxuICAgIHZhciBhcmFiaWNUeXBlcyA9IFwibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMVwiO1xuICAgIGZ1bmN0aW9uIGNoYXJUeXBlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlIDw9IDB4ZjcpIHsgcmV0dXJuIGxvd1R5cGVzLmNoYXJBdChjb2RlKSB9XG4gICAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHsgcmV0dXJuIFwiUlwiIH1cbiAgICAgIGVsc2UgaWYgKDB4NjAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDZmOSkgeyByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCkgfVxuICAgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSB7IHJldHVybiBcInJcIiB9XG4gICAgICBlbHNlIGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MjAwYikgeyByZXR1cm4gXCJ3XCIgfVxuICAgICAgZWxzZSBpZiAoY29kZSA9PSAweDIwMGMpIHsgcmV0dXJuIFwiYlwiIH1cbiAgICAgIGVsc2UgeyByZXR1cm4gXCJMXCIgfVxuICAgIH1cblxuICAgIHZhciBiaWRpUkUgPSAvW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY10vO1xuICAgIHZhciBpc05ldXRyYWwgPSAvW3N0d05dLywgaXNTdHJvbmcgPSAvW0xScl0vLCBjb3VudHNBc0xlZnQgPSAvW0xiMW5dLywgY291bnRzQXNOdW0gPSAvWzFuXS87XG5cbiAgICBmdW5jdGlvbiBCaWRpU3BhbihsZXZlbCwgZnJvbSwgdG8pIHtcbiAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyLCBkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBvdXRlclR5cGUgPSBkaXJlY3Rpb24gPT0gXCJsdHJcIiA/IFwiTFwiIDogXCJSXCI7XG5cbiAgICAgIGlmIChzdHIubGVuZ3RoID09IDAgfHwgZGlyZWN0aW9uID09IFwibHRyXCIgJiYgIWJpZGlSRS50ZXN0KHN0cikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgeyB0eXBlcy5wdXNoKGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7IH1cblxuICAgICAgLy8gVzEuIEV4YW1pbmUgZWFjaCBub24tc3BhY2luZyBtYXJrIChOU00pIGluIHRoZSBsZXZlbCBydW4sIGFuZFxuICAgICAgLy8gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBOU00gdG8gdGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzXG4gICAgICAvLyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGxcbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzb3IuXG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBwcmV2ID0gb3V0ZXJUeXBlOyBpJDEgPCBsZW47ICsraSQxKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNbaSQxXTtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJtXCIpIHsgdHlwZXNbaSQxXSA9IHByZXY7IH1cbiAgICAgICAgZWxzZSB7IHByZXYgPSB0eXBlOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIFcyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlclxuICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBBTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW5cbiAgICAgIC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWNcbiAgICAgIC8vIG51bWJlci5cbiAgICAgIC8vIFczLiBDaGFuZ2UgYWxsIEFMcyB0byBSLlxuICAgICAgZm9yICh2YXIgaSQyID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpJDIgPCBsZW47ICsraSQyKSB7XG4gICAgICAgIHZhciB0eXBlJDEgPSB0eXBlc1tpJDJdO1xuICAgICAgICBpZiAodHlwZSQxID09IFwiMVwiICYmIGN1ciA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJuXCI7IH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDEpKSB7IGN1ciA9IHR5cGUkMTsgaWYgKHR5cGUkMSA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJSXCI7IH0gfVxuICAgICAgfVxuXG4gICAgICAvLyBXNC4gQSBzaW5nbGUgRXVyb3BlYW4gc2VwYXJhdG9yIGJldHdlZW4gdHdvIEV1cm9wZWFuIG51bWJlcnNcbiAgICAgIC8vIGNoYW5nZXMgdG8gYSBFdXJvcGVhbiBudW1iZXIuIEEgc2luZ2xlIGNvbW1vbiBzZXBhcmF0b3IgYmV0d2VlblxuICAgICAgLy8gdHdvIG51bWJlcnMgb2YgdGhlIHNhbWUgdHlwZSBjaGFuZ2VzIHRvIHRoYXQgdHlwZS5cbiAgICAgIGZvciAodmFyIGkkMyA9IDEsIHByZXYkMSA9IHR5cGVzWzBdOyBpJDMgPCBsZW4gLSAxOyArK2kkMykge1xuICAgICAgICB2YXIgdHlwZSQyID0gdHlwZXNbaSQzXTtcbiAgICAgICAgaWYgKHR5cGUkMiA9PSBcIitcIiAmJiBwcmV2JDEgPT0gXCIxXCIgJiYgdHlwZXNbaSQzKzFdID09IFwiMVwiKSB7IHR5cGVzW2kkM10gPSBcIjFcIjsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlJDIgPT0gXCIsXCIgJiYgcHJldiQxID09IHR5cGVzW2kkMysxXSAmJlxuICAgICAgICAgICAgICAgICAocHJldiQxID09IFwiMVwiIHx8IHByZXYkMSA9PSBcIm5cIikpIHsgdHlwZXNbaSQzXSA9IHByZXYkMTsgfVxuICAgICAgICBwcmV2JDEgPSB0eXBlJDI7XG4gICAgICB9XG5cbiAgICAgIC8vIFc1LiBBIHNlcXVlbmNlIG9mIEV1cm9wZWFuIHRlcm1pbmF0b3JzIGFkamFjZW50IHRvIEV1cm9wZWFuXG4gICAgICAvLyBudW1iZXJzIGNoYW5nZXMgdG8gYWxsIEV1cm9wZWFuIG51bWJlcnMuXG4gICAgICAvLyBXNi4gT3RoZXJ3aXNlLCBzZXBhcmF0b3JzIGFuZCB0ZXJtaW5hdG9ycyBjaGFuZ2UgdG8gT3RoZXJcbiAgICAgIC8vIE5ldXRyYWwuXG4gICAgICBmb3IgKHZhciBpJDQgPSAwOyBpJDQgPCBsZW47ICsraSQ0KSB7XG4gICAgICAgIHZhciB0eXBlJDMgPSB0eXBlc1tpJDRdO1xuICAgICAgICBpZiAodHlwZSQzID09IFwiLFwiKSB7IHR5cGVzW2kkNF0gPSBcIk5cIjsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlJDMgPT0gXCIlXCIpIHtcbiAgICAgICAgICB2YXIgZW5kID0gKHZvaWQgMCk7XG4gICAgICAgICAgZm9yIChlbmQgPSBpJDQgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSBcIiVcIjsgKytlbmQpIHt9XG4gICAgICAgICAgdmFyIHJlcGxhY2UgPSAoaSQ0ICYmIHR5cGVzW2kkNC0xXSA9PSBcIiFcIikgfHwgKGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRdID09IFwiMVwiKSA/IFwiMVwiIDogXCJOXCI7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IGkkNDsgaiA8IGVuZDsgKytqKSB7IHR5cGVzW2pdID0gcmVwbGFjZTsgfVxuICAgICAgICAgIGkkNCA9IGVuZCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVzcuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyXG4gICAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuIEwgaXNcbiAgICAgIC8vIGZvdW5kLCB0aGVuIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgRXVyb3BlYW4gbnVtYmVyIHRvIEwuXG4gICAgICBmb3IgKHZhciBpJDUgPSAwLCBjdXIkMSA9IG91dGVyVHlwZTsgaSQ1IDwgbGVuOyArK2kkNSkge1xuICAgICAgICB2YXIgdHlwZSQ0ID0gdHlwZXNbaSQ1XTtcbiAgICAgICAgaWYgKGN1ciQxID09IFwiTFwiICYmIHR5cGUkNCA9PSBcIjFcIikgeyB0eXBlc1tpJDVdID0gXCJMXCI7IH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDQpKSB7IGN1ciQxID0gdHlwZSQ0OyB9XG4gICAgICB9XG5cbiAgICAgIC8vIE4xLiBBIHNlcXVlbmNlIG9mIG5ldXRyYWxzIHRha2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlXG4gICAgICAvLyBzdXJyb3VuZGluZyBzdHJvbmcgdGV4dCBpZiB0aGUgdGV4dCBvbiBib3RoIHNpZGVzIGhhcyB0aGUgc2FtZVxuICAgICAgLy8gZGlyZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51bWJlcnMgYWN0IGFzIGlmIHRoZXkgd2VyZSBSIGluXG4gICAgICAvLyB0ZXJtcyBvZiB0aGVpciBpbmZsdWVuY2Ugb24gbmV1dHJhbHMuIFN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKVxuICAgICAgLy8gYW5kIGVuZC1vZi1sZXZlbC1ydW4gKGVvcikgYXJlIHVzZWQgYXQgbGV2ZWwgcnVuIGJvdW5kYXJpZXMuXG4gICAgICAvLyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLlxuICAgICAgZm9yICh2YXIgaSQ2ID0gMDsgaSQ2IDwgbGVuOyArK2kkNikge1xuICAgICAgICBpZiAoaXNOZXV0cmFsLnRlc3QodHlwZXNbaSQ2XSkpIHtcbiAgICAgICAgICB2YXIgZW5kJDEgPSAodm9pZCAwKTtcbiAgICAgICAgICBmb3IgKGVuZCQxID0gaSQ2ICsgMTsgZW5kJDEgPCBsZW4gJiYgaXNOZXV0cmFsLnRlc3QodHlwZXNbZW5kJDFdKTsgKytlbmQkMSkge31cbiAgICAgICAgICB2YXIgYmVmb3JlID0gKGkkNiA/IHR5cGVzW2kkNi0xXSA6IG91dGVyVHlwZSkgPT0gXCJMXCI7XG4gICAgICAgICAgdmFyIGFmdGVyID0gKGVuZCQxIDwgbGVuID8gdHlwZXNbZW5kJDFdIDogb3V0ZXJUeXBlKSA9PSBcIkxcIjtcbiAgICAgICAgICB2YXIgcmVwbGFjZSQxID0gYmVmb3JlID09IGFmdGVyID8gKGJlZm9yZSA/IFwiTFwiIDogXCJSXCIpIDogb3V0ZXJUeXBlO1xuICAgICAgICAgIGZvciAodmFyIGokMSA9IGkkNjsgaiQxIDwgZW5kJDE7ICsraiQxKSB7IHR5cGVzW2okMV0gPSByZXBsYWNlJDE7IH1cbiAgICAgICAgICBpJDYgPSBlbmQkMSAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGVyZSB3ZSBkZXBhcnQgZnJvbSB0aGUgZG9jdW1lbnRlZCBhbGdvcml0aG0sIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgICAvLyBidWlsZGluZyB1cCBhbiBhY3R1YWwgbGV2ZWxzIGFycmF5LiBTaW5jZSB0aGVyZSBhcmUgb25seSB0aHJlZVxuICAgICAgLy8gbGV2ZWxzICgwLCAxLCAyKSBpbiBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZVxuICAgICAgLy8gZXhwbGljaXQgZW1iZWRkaW5nIGludG8gYWNjb3VudCwgd2UgY2FuIGJ1aWxkIHVwIHRoZSBvcmRlciBvblxuICAgICAgLy8gdGhlIGZseSwgd2l0aG91dCBmb2xsb3dpbmcgdGhlIGxldmVsLWJhc2VkIGFsZ29yaXRobS5cbiAgICAgIHZhciBvcmRlciA9IFtdLCBtO1xuICAgICAgZm9yICh2YXIgaSQ3ID0gMDsgaSQ3IDwgbGVuOykge1xuICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaSQ3XSkpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSBpJDc7XG4gICAgICAgICAgZm9yICgrK2kkNzsgaSQ3IDwgbGVuICYmIGNvdW50c0FzTGVmdC50ZXN0KHR5cGVzW2kkN10pOyArK2kkNykge31cbiAgICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBzdGFydCwgaSQ3KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHBvcyA9IGkkNywgYXQgPSBvcmRlci5sZW5ndGgsIGlzUlRMID0gZGlyZWN0aW9uID09IFwicnRsXCIgPyAxIDogMDtcbiAgICAgICAgICBmb3IgKCsraSQ3OyBpJDcgPCBsZW4gJiYgdHlwZXNbaSQ3XSAhPSBcIkxcIjsgKytpJDcpIHt9XG4gICAgICAgICAgZm9yICh2YXIgaiQyID0gcG9zOyBqJDIgPCBpJDc7KSB7XG4gICAgICAgICAgICBpZiAoY291bnRzQXNOdW0udGVzdCh0eXBlc1tqJDJdKSkge1xuICAgICAgICAgICAgICBpZiAocG9zIDwgaiQyKSB7IG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaiQyKSk7IGF0ICs9IGlzUlRMOyB9XG4gICAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqJDI7XG4gICAgICAgICAgICAgIGZvciAoKytqJDI7IGokMiA8IGkkNyAmJiBjb3VudHNBc051bS50ZXN0KHR5cGVzW2okMl0pOyArK2okMikge31cbiAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMiwgbnN0YXJ0LCBqJDIpKTtcbiAgICAgICAgICAgICAgYXQgKz0gaXNSVEw7XG4gICAgICAgICAgICAgIHBvcyA9IGokMjtcbiAgICAgICAgICAgIH0gZWxzZSB7ICsraiQyOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3MgPCBpJDcpIHsgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpJDcpKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09IFwibHRyXCIpIHtcbiAgICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL15cXHMrLykpKSB7XG4gICAgICAgICAgb3JkZXJbMF0uZnJvbSA9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDAsIDAsIG1bMF0ubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxzdChvcmRlcikubGV2ZWwgPT0gMSAmJiAobSA9IHN0ci5tYXRjaCgvXFxzKyQvKSkpIHtcbiAgICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIGxlbiAtIG1bMF0ubGVuZ3RoLCBsZW4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09IFwicnRsXCIgPyBvcmRlci5yZXZlcnNlKCkgOiBvcmRlclxuICAgIH1cbiAgfSkoKTtcblxuICAvLyBHZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRoZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBSZXR1cm5zXG4gIC8vIGZhbHNlIGZvciBsaW5lcyB0aGF0IGFyZSBmdWxseSBsZWZ0LXRvLXJpZ2h0LCBhbmQgYW4gYXJyYXkgb2ZcbiAgLy8gQmlkaVNwYW4gb2JqZWN0cyBvdGhlcndpc2UuXG4gIGZ1bmN0aW9uIGdldE9yZGVyKGxpbmUsIGRpcmVjdGlvbikge1xuICAgIHZhciBvcmRlciA9IGxpbmUub3JkZXI7XG4gICAgaWYgKG9yZGVyID09IG51bGwpIHsgb3JkZXIgPSBsaW5lLm9yZGVyID0gYmlkaU9yZGVyaW5nKGxpbmUudGV4dCwgZGlyZWN0aW9uKTsgfVxuICAgIHJldHVybiBvcmRlclxuICB9XG5cbiAgLy8gRVZFTlQgSEFORExJTkdcblxuICAvLyBMaWdodHdlaWdodCBldmVudCBmcmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLFxuICAvLyByZWdpc3RlcmluZyBuYXRpdmUgRE9NIGhhbmRsZXJzLlxuXG4gIHZhciBub0hhbmRsZXJzID0gW107XG5cbiAgdmFyIG9uID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikge1xuICAgIGlmIChlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KSB7XG4gICAgICBlbWl0dGVyLmF0dGFjaEV2ZW50KFwib25cIiArIHR5cGUsIGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWFwID0gZW1pdHRlci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pO1xuICAgICAgbWFwW3R5cGVdID0gKG1hcFt0eXBlXSB8fCBub0hhbmRsZXJzKS5jb25jYXQoZik7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV0gfHwgbm9IYW5kbGVyc1xuICB9XG5cbiAgZnVuY3Rpb24gb2ZmKGVtaXR0ZXIsIHR5cGUsIGYpIHtcbiAgICBpZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZiwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hFdmVudCkge1xuICAgICAgZW1pdHRlci5kZXRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hcCA9IGVtaXR0ZXIuX2hhbmRsZXJzLCBhcnIgPSBtYXAgJiYgbWFwW3R5cGVdO1xuICAgICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleE9mKGFyciwgZik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgICAgIHsgbWFwW3R5cGVdID0gYXJyLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoYXJyLnNsaWNlKGluZGV4ICsgMSkpOyB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVlcy4uLiovKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSk7XG4gICAgaWYgKCFoYW5kbGVycy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7ICsraSkgeyBoYW5kbGVyc1tpXS5hcHBseShudWxsLCBhcmdzKTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSBldmVudHMgdGhhdCBDb2RlTWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnlcbiAgLy8gcmVnaXN0ZXJpbmcgYSAobm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9yIGZvciB0aGUgZXZlbnQgbmFtZSxcbiAgLy8gYW5kIHByZXZlbnREZWZhdWx0LWluZyB0aGUgZXZlbnQgaW4gdGhhdCBoYW5kbGVyLlxuICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHtcbiAgICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIilcbiAgICAgIHsgZSA9IHt0eXBlOiBlLCBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7IHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH19OyB9XG4gICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTtcbiAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZVxuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pIHtcbiAgICB2YXIgYXJyID0gY20uX2hhbmRsZXJzICYmIGNtLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTtcbiAgICBpZiAoIWFycikgeyByZXR1cm4gfVxuICAgIHZhciBzZXQgPSBjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzIHx8IChjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzID0gW10pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7IGlmIChpbmRleE9mKHNldCwgYXJyW2ldKSA9PSAtMSlcbiAgICAgIHsgc2V0LnB1c2goYXJyW2ldKTsgfSB9XG4gIH1cblxuICBmdW5jdGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSkubGVuZ3RoID4gMFxuICB9XG5cbiAgLy8gQWRkIG9uIGFuZCBvZmYgbWV0aG9kcyB0byBhIGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlLCB0byBtYWtlXG4gIC8vIHJlZ2lzdGVyaW5nIGV2ZW50cyBvbiBzdWNoIG9iamVjdHMgbW9yZSBjb252ZW5pZW50LlxuICBmdW5jdGlvbiBldmVudE1peGluKGN0b3IpIHtcbiAgICBjdG9yLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9O1xuICAgIGN0b3IucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhpcywgdHlwZSwgZik7fTtcbiAgfVxuXG4gIC8vIER1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWVcbiAgLy8gY29tcGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkLlxuXG4gIGZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkge1xuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgIGVsc2UgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgfVxuICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7XG4gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH1cbiAgICBlbHNlIHsgZS5jYW5jZWxCdWJibGUgPSB0cnVlOyB9XG4gIH1cbiAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHtcbiAgICByZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVlID09IGZhbHNlXG4gIH1cbiAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9XG5cbiAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnR9XG4gIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHtcbiAgICB2YXIgYiA9IGUud2hpY2g7XG4gICAgaWYgKGIgPT0gbnVsbCkge1xuICAgICAgaWYgKGUuYnV0dG9uICYgMSkgeyBiID0gMTsgfVxuICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiAyKSB7IGIgPSAzOyB9XG4gICAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDQpIHsgYiA9IDI7IH1cbiAgICB9XG4gICAgaWYgKG1hYyAmJiBlLmN0cmxLZXkgJiYgYiA9PSAxKSB7IGIgPSAzOyB9XG4gICAgcmV0dXJuIGJcbiAgfVxuXG4gIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wXG4gIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRoZXJlIGlzICpzb21lKiBraW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYtOCwgYnV0IElcbiAgICAvLyBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIGRpdiA9IGVsdCgnZGl2Jyk7XG4gICAgcmV0dXJuIFwiZHJhZ2dhYmxlXCIgaW4gZGl2IHx8IFwiZHJhZ0Ryb3BcIiBpbiBkaXZcbiAgfSgpO1xuXG4gIHZhciB6d3NwU3VwcG9ydGVkO1xuICBmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50KG1lYXN1cmUpIHtcbiAgICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7XG4gICAgICB2YXIgdGVzdCA9IGVsdChcInNwYW5cIiwgXCJcXHUyMDBiXCIpO1xuICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBbdGVzdCwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpXSkpO1xuICAgICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0gMClcbiAgICAgICAgeyB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhKGllICYmIGllX3ZlcnNpb24gPCA4KTsgfVxuICAgIH1cbiAgICB2YXIgbm9kZSA9IHp3c3BTdXBwb3J0ZWQgPyBlbHQoXCJzcGFuXCIsIFwiXFx1MjAwYlwiKSA6XG4gICAgICBlbHQoXCJzcGFuXCIsIFwiXFx1MDBhMFwiLCBudWxsLCBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4XCIpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBcIlwiKTtcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgLy8gRmVhdHVyZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZvciBiaWRpIHRleHRcbiAgdmFyIGJhZEJpZGlSZWN0cztcbiAgZnVuY3Rpb24gaGFzQmFkQmlkaVJlY3RzKG1lYXN1cmUpIHtcbiAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHsgcmV0dXJuIGJhZEJpZGlSZWN0cyB9XG4gICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiQVxcdTA2MmVBXCIpKTtcbiAgICB2YXIgcjAgPSByYW5nZSh0eHQsIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmVtb3ZlQ2hpbGRyZW4obWVhc3VyZSk7XG4gICAgaWYgKCFyMCB8fCByMC5sZWZ0ID09IHIwLnJpZ2h0KSB7IHJldHVybiBmYWxzZSB9IC8vIFNhZmFyaSByZXR1cm5zIG51bGwgaW4gc29tZSBjYXNlcyAoIzI3ODApXG4gICAgcmV0dXJuIGJhZEJpZGlSZWN0cyA9IChyMS5yaWdodCAtIHIwLnJpZ2h0IDwgMylcbiAgfVxuXG4gIC8vIFNlZSBpZiBcIlwiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW5cbiAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0IGxpbmVzLlxuICB2YXIgc3BsaXRMaW5lc0F1dG8gPSBcIlxcblxcbmJcIi5zcGxpdCgvXFxuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIHBvcyA9IDAsIHJlc3VsdCA9IFtdLCBsID0gc3RyaW5nLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zIDw9IGwpIHtcbiAgICAgIHZhciBubCA9IHN0cmluZy5pbmRleE9mKFwiXFxuXCIsIHBvcyk7XG4gICAgICBpZiAobmwgPT0gLTEpIHsgbmwgPSBzdHJpbmcubGVuZ3RoOyB9XG4gICAgICB2YXIgbGluZSA9IHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQobmwgLSAxKSA9PSBcIlxcclwiID8gbmwgLSAxIDogbmwpO1xuICAgICAgdmFyIHJ0ID0gbGluZS5pbmRleE9mKFwiXFxyXCIpO1xuICAgICAgaWYgKHJ0ICE9IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUuc2xpY2UoMCwgcnQpKTtcbiAgICAgICAgcG9zICs9IHJ0ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUpO1xuICAgICAgICBwb3MgPSBubCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHN0cmluZy5zcGxpdCgvXFxyXFxuP3xcXG4vKTsgfTtcblxuICB2YXIgaGFzU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbiA/IGZ1bmN0aW9uICh0ZSkge1xuICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQgfVxuICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgfSA6IGZ1bmN0aW9uICh0ZSkge1xuICAgIHZhciByYW5nZTtcbiAgICB0cnkge3JhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9XG4gICAgY2F0Y2goZSkge31cbiAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0ZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRzKFwiU3RhcnRUb0VuZFwiLCByYW5nZSkgIT0gMFxuICB9O1xuXG4gIHZhciBoYXNDb3B5RXZlbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gZWx0KFwiZGl2XCIpO1xuICAgIGlmIChcIm9uY29weVwiIGluIGUpIHsgcmV0dXJuIHRydWUgfVxuICAgIGUuc2V0QXR0cmlidXRlKFwib25jb3B5XCIsIFwicmV0dXJuO1wiKTtcbiAgICByZXR1cm4gdHlwZW9mIGUub25jb3B5ID09IFwiZnVuY3Rpb25cIlxuICB9KSgpO1xuXG4gIHZhciBiYWRab29tZWRSZWN0cyA9IG51bGw7XG4gIGZ1bmN0aW9uIGhhc0JhZFpvb21lZFJlY3RzKG1lYXN1cmUpIHtcbiAgICBpZiAoYmFkWm9vbWVkUmVjdHMgIT0gbnVsbCkgeyByZXR1cm4gYmFkWm9vbWVkUmVjdHMgfVxuICAgIHZhciBub2RlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBcInhcIikpO1xuICAgIHZhciBub3JtYWwgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBmcm9tUmFuZ2UgPSByYW5nZShub2RlLCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gYmFkWm9vbWVkUmVjdHMgPSBNYXRoLmFicyhub3JtYWwubGVmdCAtIGZyb21SYW5nZS5sZWZ0KSA+IDFcbiAgfVxuXG4gIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FXG4gIHZhciBtb2RlcyA9IHt9LCBtaW1lTW9kZXMgPSB7fTtcblxuICAvLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hpY2ggaXNcbiAgLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9hZG1vZGUuanMgdG8gYXV0b21hdGljYWxseVxuICAvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBtZWNoYW5pc20gaXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLilcbiAgZnVuY3Rpb24gZGVmaW5lTW9kZShuYW1lLCBtb2RlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKVxuICAgICAgeyBtb2RlLmRlcGVuZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7IH1cbiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7XG4gIH1cblxuICBmdW5jdGlvbiBkZWZpbmVNSU1FKG1pbWUsIHNwZWMpIHtcbiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjO1xuICB9XG5cbiAgLy8gR2l2ZW4gYSBNSU1FIHR5cGUsIGEge25hbWUsIC4uLm9wdGlvbnN9IGNvbmZpZyBvYmplY3QsIG9yIGEgbmFtZVxuICAvLyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC5cbiAgZnVuY3Rpb24gcmVzb2x2ZU1vZGUoc3BlYykge1xuICAgIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkge1xuICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTtcbiAgICB9IGVsc2UgaWYgKHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSBcInN0cmluZ1wiICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgICB2YXIgZm91bmQgPSBtaW1lTW9kZXNbc3BlYy5uYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gXCJzdHJpbmdcIikgeyBmb3VuZCA9IHtuYW1lOiBmb3VuZH07IH1cbiAgICAgIHNwZWMgPSBjcmVhdGVPYmooZm91bmQsIHNwZWMpO1xuICAgICAgc3BlYy5uYW1lID0gZm91bmQubmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCt4bWwkLy50ZXN0KHNwZWMpKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU1vZGUoXCJhcHBsaWNhdGlvbi94bWxcIilcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCtqc29uJC8udGVzdChzcGVjKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVNb2RlKFwiYXBwbGljYXRpb24vanNvblwiKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIikgeyByZXR1cm4ge25hbWU6IHNwZWN9IH1cbiAgICBlbHNlIHsgcmV0dXJuIHNwZWMgfHwge25hbWU6IFwibnVsbFwifSB9XG4gIH1cblxuICAvLyBHaXZlbiBhIG1vZGUgc3BlYyAoYW55dGhpbmcgdGhhdCByZXNvbHZlTW9kZSBhY2NlcHRzKSwgZmluZCBhbmRcbiAgLy8gaW5pdGlhbGl6ZSBhbiBhY3R1YWwgbW9kZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGdldE1vZGUob3B0aW9ucywgc3BlYykge1xuICAgIHNwZWMgPSByZXNvbHZlTW9kZShzcGVjKTtcbiAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdO1xuICAgIGlmICghbWZhY3RvcnkpIHsgcmV0dXJuIGdldE1vZGUob3B0aW9ucywgXCJ0ZXh0L3BsYWluXCIpIH1cbiAgICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpO1xuICAgIGlmIChtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zW3NwZWMubmFtZV07XG4gICAgICBmb3IgKHZhciBwcm9wIGluIGV4dHMpIHtcbiAgICAgICAgaWYgKCFleHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1vZGVPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsgbW9kZU9ialtcIl9cIiArIHByb3BdID0gbW9kZU9ialtwcm9wXTsgfVxuICAgICAgICBtb2RlT2JqW3Byb3BdID0gZXh0c1twcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lO1xuICAgIGlmIChzcGVjLmhlbHBlclR5cGUpIHsgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlOyB9XG4gICAgaWYgKHNwZWMubW9kZVByb3BzKSB7IGZvciAodmFyIHByb3AkMSBpbiBzcGVjLm1vZGVQcm9wcylcbiAgICAgIHsgbW9kZU9ialtwcm9wJDFdID0gc3BlYy5tb2RlUHJvcHNbcHJvcCQxXTsgfSB9XG5cbiAgICByZXR1cm4gbW9kZU9ialxuICB9XG5cbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRhY2ggcHJvcGVydGllcyB0byBtb2RlIG9iamVjdHMgZnJvbVxuICAvLyBvdXRzaWRlIHRoZSBhY3R1YWwgbW9kZSBkZWZpbml0aW9uLlxuICB2YXIgbW9kZUV4dGVuc2lvbnMgPSB7fTtcbiAgZnVuY3Rpb24gZXh0ZW5kTW9kZShtb2RlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/IG1vZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pO1xuICAgIGNvcHlPYmoocHJvcGVydGllcywgZXh0cyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IHRydWUpIHsgcmV0dXJuIHN0YXRlIH1cbiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHsgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKSB9XG4gICAgdmFyIG5zdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIG4gaW4gc3RhdGUpIHtcbiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTtcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheSkgeyB2YWwgPSB2YWwuY29uY2F0KFtdKTsgfVxuICAgICAgbnN0YXRlW25dID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gbnN0YXRlXG4gIH1cblxuICAvLyBHaXZlbiBhIG1vZGUgYW5kIGEgc3RhdGUgKGZvciB0aGF0IG1vZGUpLCBmaW5kIHRoZSBpbm5lciBtb2RlIGFuZFxuICAvLyBzdGF0ZSBhdCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgc3RhdGUgcmVmZXJzIHRvLlxuICBmdW5jdGlvbiBpbm5lck1vZGUobW9kZSwgc3RhdGUpIHtcbiAgICB2YXIgaW5mbztcbiAgICB3aGlsZSAobW9kZS5pbm5lck1vZGUpIHtcbiAgICAgIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSk7XG4gICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIHsgYnJlYWsgfVxuICAgICAgc3RhdGUgPSBpbmZvLnN0YXRlO1xuICAgICAgbW9kZSA9IGluZm8ubW9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7XG4gICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZVxuICB9XG5cbiAgLy8gU1RSSU5HIFNUUkVBTVxuXG4gIC8vIEZlZCB0byB0aGUgbW9kZSBwYXJzZXJzLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2VcbiAgLy8gcGFyc2VycyBtb3JlIHN1Y2NpbmN0LlxuXG4gIHZhciBTdHJpbmdTdHJlYW0gPSBmdW5jdGlvbihzdHJpbmcsIHRhYlNpemUsIGxpbmVPcmFjbGUpIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwO1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODtcbiAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IDA7XG4gICAgdGhpcy5saW5lU3RhcnQgPSAwO1xuICAgIHRoaXMubGluZU9yYWNsZSA9IGxpbmVPcmFjbGU7XG4gIH07XG5cbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lb2wgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc29sID0gZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLnBvcyA9PSB0aGlzLmxpbmVTdGFydH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWR9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKVxuICAgICAgeyByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspIH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lYXQgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO1xuICAgIHZhciBvaztcbiAgICBpZiAodHlwZW9mIG1hdGNoID09IFwic3RyaW5nXCIpIHsgb2sgPSBjaCA9PSBtYXRjaDsgfVxuICAgIGVsc2UgeyBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOyB9XG4gICAgaWYgKG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNofVxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFdoaWxlID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSl7fVxuICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZWF0U3BhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgd2hpbGUgKC9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHsgKyt0aGlzLnBvczsgfVxuICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvRW5kID0gZnVuY3Rpb24gKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO307XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpO1xuICAgIGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWV9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuYmFja1VwID0gZnVuY3Rpb24gKG4pIHt0aGlzLnBvcyAtPSBuO307XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuY29sdW1uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7XG4gICAgICB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUsIHRoaXMubGFzdENvbHVtblBvcywgdGhpcy5sYXN0Q29sdW1uVmFsdWUpO1xuICAgICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdENvbHVtblZhbHVlIC0gKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMClcbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5pbmRlbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSkgLVxuICAgICAgKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMClcbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIGNhc2VkID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7IH07XG4gICAgICB2YXIgc3Vic3RyID0gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgICBpZiAoY2FzZWQoc3Vic3RyKSA9PSBjYXNlZChwYXR0ZXJuKSkge1xuICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gcGF0dGVybi5sZW5ndGg7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ID4gMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOyB9XG4gICAgICByZXR1cm4gbWF0Y2hcbiAgICB9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uICgpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyl9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmhpZGVGaXJzdENoYXJzID0gZnVuY3Rpb24gKG4sIGlubmVyKSB7XG4gICAgdGhpcy5saW5lU3RhcnQgKz0gbjtcbiAgICB0cnkgeyByZXR1cm4gaW5uZXIoKSB9XG4gICAgZmluYWxseSB7IHRoaXMubGluZVN0YXJ0IC09IG47IH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUubG9va0FoZWFkKG4pXG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUuYmFzZVRva2VuKHRoaXMucG9zKVxuICB9O1xuXG4gIC8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLlxuICBmdW5jdGlvbiBnZXRMaW5lKGRvYywgbikge1xuICAgIG4gLT0gZG9jLmZpcnN0O1xuICAgIGlmIChuIDwgMCB8fCBuID49IGRvYy5zaXplKSB7IHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGxpbmUgXCIgKyAobiArIGRvYy5maXJzdCkgKyBcIiBpbiB0aGUgZG9jdW1lbnQuXCIpIH1cbiAgICB2YXIgY2h1bmsgPSBkb2M7XG4gICAgd2hpbGUgKCFjaHVuay5saW5lcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWsgfVxuICAgICAgICBuIC09IHN6O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2h1bmsubGluZXNbbl1cbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFydCBvZiBhIGRvY3VtZW50IGJldHdlZW4gdHdvIHBvc2l0aW9ucywgYXMgYW4gYXJyYXkgb2ZcbiAgLy8gc3RyaW5ncy5cbiAgZnVuY3Rpb24gZ2V0QmV0d2Vlbihkb2MsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgb3V0ID0gW10sIG4gPSBzdGFydC5saW5lO1xuICAgIGRvYy5pdGVyKHN0YXJ0LmxpbmUsIGVuZC5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciB0ZXh0ID0gbGluZS50ZXh0O1xuICAgICAgaWYgKG4gPT0gZW5kLmxpbmUpIHsgdGV4dCA9IHRleHQuc2xpY2UoMCwgZW5kLmNoKTsgfVxuICAgICAgaWYgKG4gPT0gc3RhcnQubGluZSkgeyB0ZXh0ID0gdGV4dC5zbGljZShzdGFydC5jaCk7IH1cbiAgICAgIG91dC5wdXNoKHRleHQpO1xuICAgICAgKytuO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXRcbiAgfVxuICAvLyBHZXQgdGhlIGxpbmVzIGJldHdlZW4gZnJvbSBhbmQgdG8sIGFzIGFycmF5IG9mIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGdldExpbmVzKGRvYywgZnJvbSwgdG8pIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uIChsaW5lKSB7IG91dC5wdXNoKGxpbmUudGV4dCk7IH0pOyAvLyBpdGVyIGFib3J0cyB3aGVuIGNhbGxiYWNrIHJldHVybnMgdHJ1dGh5IHZhbHVlXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCBwcm9wYWdhdGluZyB0aGUgaGVpZ2h0IGNoYW5nZVxuICAvLyB1cHdhcmRzIHRvIHBhcmVudCBub2Rlcy5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHtcbiAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0O1xuICAgIGlmIChkaWZmKSB7IGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIHsgbi5oZWlnaHQgKz0gZGlmZjsgfSB9XG4gIH1cblxuICAvLyBHaXZlbiBhIGxpbmUgb2JqZWN0LCBmaW5kIGl0cyBsaW5lIG51bWJlciBieSB3YWxraW5nIHVwIHRocm91Z2hcbiAgLy8gaXRzIHBhcmVudCBsaW5rcy5cbiAgZnVuY3Rpb24gbGluZU5vKGxpbmUpIHtcbiAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTtcbiAgICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsgPSBjaHVuay5wYXJlbnQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7XG4gICAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9PSBjdXIpIHsgYnJlYWsgfVxuICAgICAgICBubyArPSBjaHVuay5jaGlsZHJlbltpXS5jaHVua1NpemUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vICsgY3VyLmZpcnN0XG4gIH1cblxuICAvLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodFxuICAvLyBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS5cbiAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7XG4gICAgdmFyIG4gPSBjaHVuay5maXJzdDtcbiAgICBvdXRlcjogZG8ge1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpJDFdLCBjaCA9IGNoaWxkLmhlaWdodDtcbiAgICAgICAgaWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlciB9XG4gICAgICAgIGggLT0gY2g7XG4gICAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gblxuICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcylcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDtcbiAgICAgIGlmIChoIDwgbGgpIHsgYnJlYWsgfVxuICAgICAgaCAtPSBsaDtcbiAgICB9XG4gICAgcmV0dXJuIG4gKyBpXG4gIH1cblxuICBmdW5jdGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZX1cblxuICBmdW5jdGlvbiBsaW5lTnVtYmVyRm9yKG9wdGlvbnMsIGkpIHtcbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbnMubGluZU51bWJlckZvcm1hdHRlcihpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIpKVxuICB9XG5cbiAgLy8gQSBQb3MgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dC5cbiAgZnVuY3Rpb24gUG9zKGxpbmUsIGNoLCBzdGlja3kpIHtcbiAgICBpZiAoIHN0aWNreSA9PT0gdm9pZCAwICkgc3RpY2t5ID0gbnVsbDtcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSB7IHJldHVybiBuZXcgUG9zKGxpbmUsIGNoLCBzdGlja3kpIH1cbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIHRoaXMuY2ggPSBjaDtcbiAgICB0aGlzLnN0aWNreSA9IHN0aWNreTtcbiAgfVxuXG4gIC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIGEgbmVnYXRpdmVcbiAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLlxuICBmdW5jdGlvbiBjbXAoYSwgYikgeyByZXR1cm4gYS5saW5lIC0gYi5saW5lIHx8IGEuY2ggLSBiLmNoIH1cblxuICBmdW5jdGlvbiBlcXVhbEN1cnNvclBvcyhhLCBiKSB7IHJldHVybiBhLnN0aWNreSA9PSBiLnN0aWNreSAmJiBjbXAoYSwgYikgPT0gMCB9XG5cbiAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHguY2gpfVxuICBmdW5jdGlvbiBtYXhQb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGIgOiBhIH1cbiAgZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYiB9XG5cbiAgLy8gTW9zdCBvZiB0aGUgZXh0ZXJuYWwgQVBJIGNsaXBzIGdpdmVuIHBvc2l0aW9ucyB0byBtYWtlIHN1cmUgdGhleVxuICAvLyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKX1cbiAgZnVuY3Rpb24gY2xpcFBvcyhkb2MsIHBvcykge1xuICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCkgeyByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCkgfVxuICAgIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICAgIGlmIChwb3MubGluZSA+IGxhc3QpIHsgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpIH1cbiAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0Lmxlbmd0aClcbiAgfVxuICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVuKSB7XG4gICAgdmFyIGNoID0gcG9zLmNoO1xuICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxlbikgeyByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKSB9XG4gICAgZWxzZSBpZiAoY2ggPCAwKSB7IHJldHVybiBQb3MocG9zLmxpbmUsIDApIH1cbiAgICBlbHNlIHsgcmV0dXJuIHBvcyB9XG4gIH1cbiAgZnVuY3Rpb24gY2xpcFBvc0FycmF5KGRvYywgYXJyYXkpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeyBvdXRbaV0gPSBjbGlwUG9zKGRvYywgYXJyYXlbaV0pOyB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgdmFyIFNhdmVkQ29udGV4dCA9IGZ1bmN0aW9uKHN0YXRlLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH07XG5cbiAgdmFyIENvbnRleHQgPSBmdW5jdGlvbihkb2MsIHN0YXRlLCBsaW5lLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLm1heExvb2tBaGVhZCA9IGxvb2tBaGVhZCB8fCAwO1xuICAgIHRoaXMuYmFzZVRva2VucyA9IG51bGw7XG4gICAgdGhpcy5iYXNlVG9rZW5Qb3MgPSAxO1xuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLmxvb2tBaGVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHRoaXMubGluZSArIG4pO1xuICAgIGlmIChsaW5lICE9IG51bGwgJiYgbiA+IHRoaXMubWF4TG9va0FoZWFkKSB7IHRoaXMubWF4TG9va0FoZWFkID0gbjsgfVxuICAgIHJldHVybiBsaW5lXG4gIH07XG5cbiAgQ29udGV4dC5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKG4pIHtcbiAgICBpZiAoIXRoaXMuYmFzZVRva2VucykgeyByZXR1cm4gbnVsbCB9XG4gICAgd2hpbGUgKHRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10gPD0gbilcbiAgICAgIHsgdGhpcy5iYXNlVG9rZW5Qb3MgKz0gMjsgfVxuICAgIHZhciB0eXBlID0gdGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zICsgMV07XG4gICAgcmV0dXJuIHt0eXBlOiB0eXBlICYmIHR5cGUucmVwbGFjZSgvKCB8XilvdmVybGF5IC4qLywgXCJcIiksXG4gICAgICAgICAgICBzaXplOiB0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdIC0gbn1cbiAgfTtcblxuICBDb250ZXh0LnByb3RvdHlwZS5uZXh0TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxpbmUrKztcbiAgICBpZiAodGhpcy5tYXhMb29rQWhlYWQgPiAwKSB7IHRoaXMubWF4TG9va0FoZWFkLS07IH1cbiAgfTtcblxuICBDb250ZXh0LmZyb21TYXZlZCA9IGZ1bmN0aW9uIChkb2MsIHNhdmVkLCBsaW5lKSB7XG4gICAgaWYgKHNhdmVkIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0KVxuICAgICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkLnN0YXRlKSwgbGluZSwgc2F2ZWQubG9va0FoZWFkKSB9XG4gICAgZWxzZVxuICAgICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkKSwgbGluZSkgfVxuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiAoY29weSkge1xuICAgIHZhciBzdGF0ZSA9IGNvcHkgIT09IGZhbHNlID8gY29weVN0YXRlKHRoaXMuZG9jLm1vZGUsIHRoaXMuc3RhdGUpIDogdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gdGhpcy5tYXhMb29rQWhlYWQgPiAwID8gbmV3IFNhdmVkQ29udGV4dChzdGF0ZSwgdGhpcy5tYXhMb29rQWhlYWQpIDogc3RhdGVcbiAgfTtcblxuXG4gIC8vIENvbXB1dGUgYSBzdHlsZSBhcnJheSAoYW4gYXJyYXkgc3RhcnRpbmcgd2l0aCBhIG1vZGUgZ2VuZXJhdGlvblxuICAvLyAtLSBmb3IgaW52YWxpZGF0aW9uIC0tIGZvbGxvd2VkIGJ5IHBhaXJzIG9mIGVuZCBwb3NpdGlvbnMgYW5kXG4gIC8vIHN0eWxlIHN0cmluZ3MpLCB3aGljaCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgdG9rZW5zIG9uIHRoZVxuICAvLyBsaW5lLlxuICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0LCBmb3JjZVRvRW5kKSB7XG4gICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlkZW50aWZ5aW5nIHRoZVxuICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52YWxpZGF0aW9uKS5cbiAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307XG4gICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBvZiBzdHlsZXNcbiAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBjb250ZXh0LCBmdW5jdGlvbiAoZW5kLCBzdHlsZSkgeyByZXR1cm4gc3QucHVzaChlbmQsIHN0eWxlKTsgfSxcbiAgICAgICAgICAgIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKTtcbiAgICB2YXIgc3RhdGUgPSBjb250ZXh0LnN0YXRlO1xuXG4gICAgLy8gUnVuIG92ZXJsYXlzLCBhZGp1c3Qgc3R5bGUgYXJyYXkuXG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIG8gKSB7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlbnMgPSBzdDtcbiAgICAgIHZhciBvdmVybGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10sIGkgPSAxLCBhdCA9IDA7XG4gICAgICBjb250ZXh0LnN0YXRlID0gdHJ1ZTtcbiAgICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgb3ZlcmxheS5tb2RlLCBjb250ZXh0LCBmdW5jdGlvbiAoZW5kLCBzdHlsZSkge1xuICAgICAgICB2YXIgc3RhcnQgPSBpO1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXRcbiAgICAgICAgd2hpbGUgKGF0IDwgZW5kKSB7XG4gICAgICAgICAgdmFyIGlfZW5kID0gc3RbaV07XG4gICAgICAgICAgaWYgKGlfZW5kID4gZW5kKVxuICAgICAgICAgICAgeyBzdC5zcGxpY2UoaSwgMSwgZW5kLCBzdFtpKzFdLCBpX2VuZCk7IH1cbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0eWxlKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkge1xuICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsIFwib3ZlcmxheSBcIiArIHN0eWxlKTtcbiAgICAgICAgICBpID0gc3RhcnQgKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoOyBzdGFydCA8IGk7IHN0YXJ0ICs9IDIpIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSBzdFtzdGFydCsxXTtcbiAgICAgICAgICAgIHN0W3N0YXJ0KzFdID0gKGN1ciA/IGN1ciArIFwiIFwiIDogXCJcIikgKyBcIm92ZXJsYXkgXCIgKyBzdHlsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIGxpbmVDbGFzc2VzKTtcbiAgICAgIGNvbnRleHQuc3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnRleHQuYmFzZVRva2VucyA9IG51bGw7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlblBvcyA9IDE7XG4gICAgfTtcblxuICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28pIGxvb3AoIG8gKTtcblxuICAgIHJldHVybiB7c3R5bGVzOiBzdCwgY2xhc3NlczogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50ZXh0Q2xhc3MgPyBsaW5lQ2xhc3NlcyA6IG51bGx9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCB1cGRhdGVGcm9udGllcikge1xuICAgIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikge1xuICAgICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBsaW5lTm8obGluZSkpO1xuICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggJiYgY29weVN0YXRlKGNtLmRvYy5tb2RlLCBjb250ZXh0LnN0YXRlKTtcbiAgICAgIHZhciByZXN1bHQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0KTtcbiAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoIXJlc2V0U3RhdGUpO1xuICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzO1xuICAgICAgaWYgKHJlc3VsdC5jbGFzc2VzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gcmVzdWx0LmNsYXNzZXM7IH1cbiAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgaWYgKHVwZGF0ZUZyb250aWVyID09PSBjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIpXG4gICAgICAgIHsgY20uZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGNtLmRvYy5tb2RlRnJvbnRpZXIsICsrY20uZG9jLmhpZ2hsaWdodEZyb250aWVyKTsgfVxuICAgIH1cbiAgICByZXR1cm4gbGluZS5zdHlsZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbnRleHRCZWZvcmUoY20sIG4sIHByZWNpc2UpIHtcbiAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoIWRvYy5tb2RlLnN0YXJ0U3RhdGUpIHsgcmV0dXJuIG5ldyBDb250ZXh0KGRvYywgdHJ1ZSwgbikgfVxuICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpO1xuICAgIHZhciBzYXZlZCA9IHN0YXJ0ID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBzdGFydCAtIDEpLnN0YXRlQWZ0ZXI7XG4gICAgdmFyIGNvbnRleHQgPSBzYXZlZCA/IENvbnRleHQuZnJvbVNhdmVkKGRvYywgc2F2ZWQsIHN0YXJ0KSA6IG5ldyBDb250ZXh0KGRvYywgc3RhcnRTdGF0ZShkb2MubW9kZSksIHN0YXJ0KTtcblxuICAgIGRvYy5pdGVyKHN0YXJ0LCBuLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgY29udGV4dCk7XG4gICAgICB2YXIgcG9zID0gY29udGV4dC5saW5lO1xuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gcG9zID09IG4gLSAxIHx8IHBvcyAlIDUgPT0gMCB8fCBwb3MgPj0gZGlzcGxheS52aWV3RnJvbSAmJiBwb3MgPCBkaXNwbGF5LnZpZXdUbyA/IGNvbnRleHQuc2F2ZSgpIDogbnVsbDtcbiAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICB9KTtcbiAgICBpZiAocHJlY2lzZSkgeyBkb2MubW9kZUZyb250aWVyID0gY29udGV4dC5saW5lOyB9XG4gICAgcmV0dXJuIGNvbnRleHRcbiAgfVxuXG4gIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHByb2NlZWQgb3ZlciB0aGlzIGxpbmUgYW5kXG4gIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJheS4gVXNlZCBmb3IgbGluZXMgdGhhdFxuICAvLyBhcmVuJ3QgY3VycmVudGx5IHZpc2libGUuXG4gIGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBjb250ZXh0LCBzdGFydEF0KSB7XG4gICAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUsIGNvbnRleHQpO1xuICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3MgPSBzdGFydEF0IHx8IDA7XG4gICAgaWYgKHRleHQgPT0gXCJcIikgeyBjYWxsQmxhbmtMaW5lKG1vZGUsIGNvbnRleHQuc3RhdGUpOyB9XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUpO1xuICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG1vZGUuYmxhbmtMaW5lKSB7IHJldHVybiBtb2RlLmJsYW5rTGluZShzdGF0ZSkgfVxuICAgIGlmICghbW9kZS5pbm5lck1vZGUpIHsgcmV0dXJuIH1cbiAgICB2YXIgaW5uZXIgPSBpbm5lck1vZGUobW9kZSwgc3RhdGUpO1xuICAgIGlmIChpbm5lci5tb2RlLmJsYW5rTGluZSkgeyByZXR1cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgaWYgKGlubmVyKSB7IGlubmVyWzBdID0gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlOyB9XG4gICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0cmVhbS5wb3MgPiBzdHJlYW0uc3RhcnQpIHsgcmV0dXJuIHN0eWxlIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIiArIG1vZGUubmFtZSArIFwiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS5cIilcbiAgfVxuXG4gIHZhciBUb2tlbiA9IGZ1bmN0aW9uKHN0cmVhbSwgdHlwZSwgc3RhdGUpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyB0aGlzLmVuZCA9IHN0cmVhbS5wb3M7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgbnVsbDtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBmb3IgZ2V0VG9rZW5BdCBhbmQgZ2V0TGluZVRva2Vuc1xuICBmdW5jdGlvbiB0YWtlVG9rZW4oY20sIHBvcywgcHJlY2lzZSwgYXNBcnJheSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIG1vZGUgPSBkb2MubW9kZSwgc3R5bGU7XG4gICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLCBjb250ZXh0ID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgcG9zLmxpbmUsIHByZWNpc2UpO1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplLCBjb250ZXh0KSwgdG9rZW5zO1xuICAgIGlmIChhc0FycmF5KSB7IHRva2VucyA9IFtdOyB9XG4gICAgd2hpbGUgKChhc0FycmF5IHx8IHN0cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUpO1xuICAgICAgaWYgKGFzQXJyYXkpIHsgdG9rZW5zLnB1c2gobmV3IFRva2VuKHN0cmVhbSwgc3R5bGUsIGNvcHlTdGF0ZShkb2MubW9kZSwgY29udGV4dC5zdGF0ZSkpKTsgfVxuICAgIH1cbiAgICByZXR1cm4gYXNBcnJheSA/IHRva2VucyA6IG5ldyBUb2tlbihzdHJlYW0sIHN0eWxlLCBjb250ZXh0LnN0YXRlKVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0cmFjdExpbmVDbGFzc2VzKHR5cGUsIG91dHB1dCkge1xuICAgIGlmICh0eXBlKSB7IGZvciAoOzspIHtcbiAgICAgIHZhciBsaW5lQ2xhc3MgPSB0eXBlLm1hdGNoKC8oPzpefFxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcXFMrKS8pO1xuICAgICAgaWYgKCFsaW5lQ2xhc3MpIHsgYnJlYWsgfVxuICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGluZUNsYXNzWzBdLmxlbmd0aCk7XG4gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/IFwiYmdDbGFzc1wiIDogXCJ0ZXh0Q2xhc3NcIjtcbiAgICAgIGlmIChvdXRwdXRbcHJvcF0gPT0gbnVsbClcbiAgICAgICAgeyBvdXRwdXRbcHJvcF0gPSBsaW5lQ2xhc3NbMl07IH1cbiAgICAgIGVsc2UgaWYgKCEobmV3IFJlZ0V4cChcIig/Ol58XFxzKVwiICsgbGluZUNsYXNzWzJdICsgXCIoPzokfFxccylcIikpLnRlc3Qob3V0cHV0W3Byb3BdKSlcbiAgICAgICAgeyBvdXRwdXRbcHJvcF0gKz0gXCIgXCIgKyBsaW5lQ2xhc3NbMl07IH1cbiAgICB9IH1cbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLy8gUnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVhY2ggdG9rZW4uXG4gIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIGNvbnRleHQsIGYsIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7XG4gICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUuZmxhdHRlblNwYW5zO1xuICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgeyBmbGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsgfVxuICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVsbDtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUsIGNvbnRleHQpLCBzdHlsZTtcbiAgICB2YXIgaW5uZXIgPSBjbS5vcHRpb25zLmFkZE1vZGVDbGFzcyAmJiBbbnVsbF07XG4gICAgaWYgKHRleHQgPT0gXCJcIikgeyBleHRyYWN0TGluZUNsYXNzZXMoY2FsbEJsYW5rTGluZShtb2RlLCBjb250ZXh0LnN0YXRlKSwgbGluZUNsYXNzZXMpOyB9XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpIHtcbiAgICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7XG4gICAgICAgIGlmIChmb3JjZVRvRW5kKSB7IHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBjb250ZXh0LCBzdHJlYW0ucG9zKTsgfVxuICAgICAgICBzdHJlYW0ucG9zID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIHN0eWxlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gZXh0cmFjdExpbmVDbGFzc2VzKHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUsIGlubmVyKSwgbGluZUNsYXNzZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGlubmVyKSB7XG4gICAgICAgIHZhciBtTmFtZSA9IGlubmVyWzBdLm5hbWU7XG4gICAgICAgIGlmIChtTmFtZSkgeyBzdHlsZSA9IFwibS1cIiArIChzdHlsZSA/IG1OYW1lICsgXCIgXCIgKyBzdHlsZSA6IG1OYW1lKTsgfVxuICAgICAgfVxuICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHtcbiAgICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgICAgY3VyU3RhcnQgPSBNYXRoLm1pbihzdHJlYW0uc3RhcnQsIGN1clN0YXJ0ICsgNTAwMCk7XG4gICAgICAgICAgZihjdXJTdGFydCwgY3VyU3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGN1clN0eWxlID0gc3R5bGU7XG4gICAgICB9XG4gICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuICAgIH1cbiAgICB3aGlsZSAoY3VyU3RhcnQgPCBzdHJlYW0ucG9zKSB7XG4gICAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5vZGVzIGxvbmdlciB0aGFuIDU3NDQ0XG4gICAgICAvLyBjaGFyYWN0ZXJzLCBhbmQgcmV0dXJucyBpbmFjY3VyYXRlIG1lYXN1cmVtZW50cyBpbiBub2Rlc1xuICAgICAgLy8gc3RhcnRpbmcgYXJvdW5kIDUwMDAgY2hhcnMuXG4gICAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBvcywgY3VyU3RhcnQgKyA1MDAwKTtcbiAgICAgIGYocG9zLCBjdXJTdHlsZSk7XG4gICAgICBjdXJTdGFydCA9IHBvcztcbiAgICB9XG4gIH1cblxuICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG9cbiAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYVxuICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZVxuICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0b1xuICAvLyBwYXJzZSBjb3JyZWN0bHkuXG4gIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpIHtcbiAgICB2YXIgbWluaW5kZW50LCBtaW5saW5lLCBkb2MgPSBjbS5kb2M7XG4gICAgdmFyIGxpbSA9IHByZWNpc2UgPyAtMSA6IG4gLSAoY20uZG9jLm1vZGUuaW5uZXJNb2RlID8gMTAwMCA6IDEwMCk7XG4gICAgZm9yICh2YXIgc2VhcmNoID0gbjsgc2VhcmNoID4gbGltOyAtLXNlYXJjaCkge1xuICAgICAgaWYgKHNlYXJjaCA8PSBkb2MuZmlyc3QpIHsgcmV0dXJuIGRvYy5maXJzdCB9XG4gICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2ggLSAxKSwgYWZ0ZXIgPSBsaW5lLnN0YXRlQWZ0ZXI7XG4gICAgICBpZiAoYWZ0ZXIgJiYgKCFwcmVjaXNlIHx8IHNlYXJjaCArIChhZnRlciBpbnN0YW5jZW9mIFNhdmVkQ29udGV4dCA/IGFmdGVyLmxvb2tBaGVhZCA6IDApIDw9IGRvYy5tb2RlRnJvbnRpZXIpKVxuICAgICAgICB7IHJldHVybiBzZWFyY2ggfVxuICAgICAgdmFyIGluZGVudGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpO1xuICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkge1xuICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTtcbiAgICAgICAgbWluaW5kZW50ID0gaW5kZW50ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaW5saW5lXG4gIH1cblxuICBmdW5jdGlvbiByZXRyZWF0RnJvbnRpZXIoZG9jLCBuKSB7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWluKGRvYy5tb2RlRnJvbnRpZXIsIG4pO1xuICAgIGlmIChkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBuIC0gMTApIHsgcmV0dXJuIH1cbiAgICB2YXIgc3RhcnQgPSBkb2MuZmlyc3Q7XG4gICAgZm9yICh2YXIgbGluZSA9IG4gLSAxOyBsaW5lID4gc3RhcnQ7IGxpbmUtLSkge1xuICAgICAgdmFyIHNhdmVkID0gZ2V0TGluZShkb2MsIGxpbmUpLnN0YXRlQWZ0ZXI7XG4gICAgICAvLyBjaGFuZ2UgaXMgb24gM1xuICAgICAgLy8gc3RhdGUgb24gbGluZSAxIGxvb2tlZCBhaGVhZCAyIC0tIHNvIHNhdyAzXG4gICAgICAvLyB0ZXN0IDEgKyAyIDwgMyBzaG91bGQgY292ZXIgdGhpc1xuICAgICAgaWYgKHNhdmVkICYmICghKHNhdmVkIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0KSB8fCBsaW5lICsgc2F2ZWQubG9va0FoZWFkIDwgbikpIHtcbiAgICAgICAgc3RhcnQgPSBsaW5lICsgMTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jLmhpZ2hsaWdodEZyb250aWVyID0gTWF0aC5taW4oZG9jLmhpZ2hsaWdodEZyb250aWVyLCBzdGFydCk7XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQuXG4gIHZhciBzYXdSZWFkT25seVNwYW5zID0gZmFsc2UsIHNhd0NvbGxhcHNlZFNwYW5zID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gc2VlUmVhZE9ubHlTcGFucygpIHtcbiAgICBzYXdSZWFkT25seVNwYW5zID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlZUNvbGxhcHNlZFNwYW5zKCkge1xuICAgIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRFWFRNQVJLRVIgU1BBTlNcblxuICBmdW5jdGlvbiBNYXJrZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHtcbiAgICB0aGlzLm1hcmtlciA9IG1hcmtlcjtcbiAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87XG4gIH1cblxuICAvLyBTZWFyY2ggYW4gYXJyYXkgb2Ygc3BhbnMgZm9yIGEgc3BhbiBtYXRjaGluZyB0aGUgZ2l2ZW4gbWFya2VyLlxuICBmdW5jdGlvbiBnZXRNYXJrZWRTcGFuRm9yKHNwYW5zLCBtYXJrZXIpIHtcbiAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgIGlmIChzcGFuLm1hcmtlciA9PSBtYXJrZXIpIHsgcmV0dXJuIHNwYW4gfVxuICAgIH0gfVxuICB9XG4gIC8vIFJlbW92ZSBhIHNwYW4gZnJvbSBhbiBhcnJheSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBubyBzcGFucyBhcmVcbiAgLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJyYXlzIGZvciBsaW5lcyB3aXRob3V0IHNwYW5zKS5cbiAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3Bhbikge1xuICAgIHZhciByO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICB7IGlmIChzcGFuc1tpXSAhPSBzcGFuKSB7IChyIHx8IChyID0gW10pKS5wdXNoKHNwYW5zW2ldKTsgfSB9XG4gICAgcmV0dXJuIHJcbiAgfVxuICAvLyBBZGQgYSBzcGFuIHRvIGEgbGluZS5cbiAgZnVuY3Rpb24gYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKSB7XG4gICAgbGluZS5tYXJrZWRTcGFucyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChbc3Bhbl0pIDogW3NwYW5dO1xuICAgIHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSk7XG4gIH1cblxuICAvLyBVc2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZvciBhIGNoYW5nZSBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBjdXQgYW4gYXJyYXkgb2Ygc3BhbnMgYXQgYSBnaXZlblxuICAvLyBjaGFyYWN0ZXIgcG9zaXRpb24sIHJldHVybmluZyBhbiBhcnJheSBvZiByZW1haW5pbmcgY2h1bmtzIChvclxuICAvLyB1bmRlZmluZWQgaWYgbm90aGluZyByZW1haW5zKS5cbiAgZnVuY3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFydENoLCBpc0luc2VydCkge1xuICAgIHZhciBudztcbiAgICBpZiAob2xkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7XG4gICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENoKTtcbiAgICAgIGlmIChzdGFydHNCZWZvcmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7XG4gICAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gc3RhcnRDaCA6IHNwYW4udG8gPiBzdGFydENoKVxuICAgICAgICA7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHNwYW4uZnJvbSwgZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4udG8pKTtcbiAgICAgIH1cbiAgICB9IH1cbiAgICByZXR1cm4gbndcbiAgfVxuICBmdW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgZW5kQ2gsIGlzSW5zZXJ0KSB7XG4gICAgdmFyIG53O1xuICAgIGlmIChvbGQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjtcbiAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gZW5kQ2ggOiBzcGFuLnRvID4gZW5kQ2gpO1xuICAgICAgaWYgKGVuZHNBZnRlciB8fCBzcGFuLmZyb20gPT0gZW5kQ2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHtcbiAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJvbSA8IGVuZENoKVxuICAgICAgICA7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHN0YXJ0c0JlZm9yZSA/IG51bGwgOiBzcGFuLmZyb20gLSBlbmRDaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnRvID09IG51bGwgPyBudWxsIDogc3Bhbi50byAtIGVuZENoKSk7XG4gICAgICB9XG4gICAgfSB9XG4gICAgcmV0dXJuIG53XG4gIH1cblxuICAvLyBHaXZlbiBhIGNoYW5nZSBvYmplY3QsIGNvbXB1dGUgdGhlIG5ldyBzZXQgb2YgbWFya2VyIHNwYW5zIHRoYXRcbiAgLy8gY292ZXIgdGhlIGxpbmUgaW4gd2hpY2ggdGhlIGNoYW5nZSB0b29rIHBsYWNlLiBSZW1vdmVzIHNwYW5zXG4gIC8vIGVudGlyZWx5IHdpdGhpbiB0aGUgY2hhbmdlLCByZWNvbm5lY3RzIHNwYW5zIGJlbG9uZ2luZyB0byB0aGVcbiAgLy8gc2FtZSBtYXJrZXIgdGhhdCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiB0aGUgY2hhbmdlLCBhbmQgY3V0cyBvZmZcbiAgLy8gc3BhbnMgcGFydGlhbGx5IHdpdGhpbiB0aGUgY2hhbmdlLiBSZXR1cm5zIGFuIGFycmF5IG9mIHNwYW5cbiAgLy8gYXJyYXlzIHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBpbiAoYWZ0ZXIpIHRoZSBjaGFuZ2UuXG4gIGZ1bmN0aW9uIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHtcbiAgICBpZiAoY2hhbmdlLmZ1bGwpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFucztcbiAgICB2YXIgb2xkTGFzdCA9IGlzTGluZShkb2MsIGNoYW5nZS50by5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgIGlmICghb2xkRmlyc3QgJiYgIW9sZExhc3QpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDA7XG4gICAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGggc2lkZXNcbiAgICB2YXIgZmlyc3QgPSBtYXJrZWRTcGFuc0JlZm9yZShvbGRGaXJzdCwgc3RhcnRDaCwgaXNJbnNlcnQpO1xuICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBlbmRDaCwgaXNJbnNlcnQpO1xuXG4gICAgLy8gTmV4dCwgbWVyZ2UgdGhvc2UgdHdvIGVuZHNcbiAgICB2YXIgc2FtZUxpbmUgPSBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSwgb2Zmc2V0ID0gbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoc2FtZUxpbmUgPyBzdGFydENoIDogMCk7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAvLyBGaXggdXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3RcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwYW4gPSBmaXJzdFtpXTtcbiAgICAgICAgaWYgKHNwYW4udG8gPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtlZFNwYW5Gb3IobGFzdCwgc3Bhbi5tYXJrZXIpO1xuICAgICAgICAgIGlmICghZm91bmQpIHsgc3Bhbi50byA9IHN0YXJ0Q2g7IH1cbiAgICAgICAgICBlbHNlIGlmIChzYW1lTGluZSkgeyBzcGFuLnRvID0gZm91bmQudG8gPT0gbnVsbCA/IG51bGwgOiBmb3VuZC50byArIG9mZnNldDsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsYXN0KSB7XG4gICAgICAvLyBGaXggdXAgLmZyb20gaW4gbGFzdCAob3IgbW92ZSB0aGVtIGludG8gZmlyc3QgaW4gY2FzZSBvZiBzYW1lTGluZSlcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGxhc3QubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgc3BhbiQxID0gbGFzdFtpJDFdO1xuICAgICAgICBpZiAoc3BhbiQxLnRvICE9IG51bGwpIHsgc3BhbiQxLnRvICs9IG9mZnNldDsgfVxuICAgICAgICBpZiAoc3BhbiQxLmZyb20gPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmb3VuZCQxID0gZ2V0TWFya2VkU3BhbkZvcihmaXJzdCwgc3BhbiQxLm1hcmtlcik7XG4gICAgICAgICAgaWYgKCFmb3VuZCQxKSB7XG4gICAgICAgICAgICBzcGFuJDEuZnJvbSA9IG9mZnNldDtcbiAgICAgICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3BhbiQxLmZyb20gKz0gb2Zmc2V0O1xuICAgICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1sZW5ndGggc3BhbnNcbiAgICBpZiAoZmlyc3QpIHsgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMoZmlyc3QpOyB9XG4gICAgaWYgKGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgeyBsYXN0ID0gY2xlYXJFbXB0eVNwYW5zKGxhc3QpOyB9XG5cbiAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07XG4gICAgaWYgKCFzYW1lTGluZSkge1xuICAgICAgLy8gRmlsbCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zXG4gICAgICB2YXIgZ2FwID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMiwgZ2FwTWFya2VycztcbiAgICAgIGlmIChnYXAgPiAwICYmIGZpcnN0KVxuICAgICAgICB7IGZvciAodmFyIGkkMiA9IDA7IGkkMiA8IGZpcnN0Lmxlbmd0aDsgKytpJDIpXG4gICAgICAgICAgeyBpZiAoZmlyc3RbaSQyXS50byA9PSBudWxsKVxuICAgICAgICAgICAgeyAoZ2FwTWFya2VycyB8fCAoZ2FwTWFya2VycyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihmaXJzdFtpJDJdLm1hcmtlciwgbnVsbCwgbnVsbCkpOyB9IH0gfVxuICAgICAgZm9yICh2YXIgaSQzID0gMDsgaSQzIDwgZ2FwOyArK2kkMylcbiAgICAgICAgeyBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7IH1cbiAgICAgIG5ld01hcmtlcnMucHVzaChsYXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01hcmtlcnNcbiAgfVxuXG4gIC8vIFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3QgaGF2ZSBhIGNsZWFyV2hlbkVtcHR5XG4gIC8vIG9wdGlvbiBvZiBmYWxzZS5cbiAgZnVuY3Rpb24gY2xlYXJFbXB0eVNwYW5zKHNwYW5zKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCAmJiBzcGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpXG4gICAgICAgIHsgc3BhbnMuc3BsaWNlKGktLSwgMSk7IH1cbiAgICB9XG4gICAgaWYgKCFzcGFucy5sZW5ndGgpIHsgcmV0dXJuIG51bGwgfVxuICAgIHJldHVybiBzcGFuc1xuICB9XG5cbiAgLy8gVXNlZCB0byAnY2xpcCcgb3V0IHJlYWRPbmx5IHJhbmdlcyB3aGVuIG1ha2luZyBhIGNoYW5nZS5cbiAgZnVuY3Rpb24gcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykge1xuICAgIHZhciBtYXJrZXJzID0gbnVsbDtcbiAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBtYXJrID0gbGluZS5tYXJrZWRTcGFuc1tpXS5tYXJrZXI7XG4gICAgICAgIGlmIChtYXJrLnJlYWRPbmx5ICYmICghbWFya2VycyB8fCBpbmRleE9mKG1hcmtlcnMsIG1hcmspID09IC0xKSlcbiAgICAgICAgICB7IChtYXJrZXJzIHx8IChtYXJrZXJzID0gW10pKS5wdXNoKG1hcmspOyB9XG4gICAgICB9IH1cbiAgICB9KTtcbiAgICBpZiAoIW1hcmtlcnMpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBwYXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgwKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFydHMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIHAgPSBwYXJ0c1tqXTtcbiAgICAgICAgaWYgKGNtcChwLnRvLCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIHsgY29udGludWUgfVxuICAgICAgICB2YXIgbmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAuZnJvbSwgbS5mcm9tKSwgZHRvID0gY21wKHAudG8sIG0udG8pO1xuICAgICAgICBpZiAoZGZyb20gPCAwIHx8ICFtay5pbmNsdXNpdmVMZWZ0ICYmICFkZnJvbSlcbiAgICAgICAgICB7IG5ld1BhcnRzLnB1c2goe2Zyb206IHAuZnJvbSwgdG86IG0uZnJvbX0pOyB9XG4gICAgICAgIGlmIChkdG8gPiAwIHx8ICFtay5pbmNsdXNpdmVSaWdodCAmJiAhZHRvKVxuICAgICAgICAgIHsgbmV3UGFydHMucHVzaCh7ZnJvbTogbS50bywgdG86IHAudG99KTsgfVxuICAgICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMsIG5ld1BhcnRzKTtcbiAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHNcbiAgfVxuXG4gIC8vIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS5cbiAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkge1xuICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7XG4gICAgaWYgKCFzcGFucykgeyByZXR1cm4gfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICB7IHNwYW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUpOyB9XG4gICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gYXR0YWNoTWFya2VkU3BhbnMobGluZSwgc3BhbnMpIHtcbiAgICBpZiAoIXNwYW5zKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSlcbiAgICAgIHsgc3BhbnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGluZSk7IH1cbiAgICBsaW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7XG4gIH1cblxuICAvLyBIZWxwZXJzIHVzZWQgd2hlbiBjb21wdXRpbmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29sbGFwc2VkIHNwYW5cbiAgLy8gY291bnRzIGFzIHRoZSBsYXJnZXIgb25lLlxuICBmdW5jdGlvbiBleHRyYUxlZnQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMCB9XG4gIGZ1bmN0aW9uIGV4dHJhUmlnaHQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyAxIDogMCB9XG5cbiAgLy8gUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIG9mIHR3byBvdmVybGFwcGluZyBjb2xsYXBzZWRcbiAgLy8gc3BhbnMgaXMgbGFyZ2VyIChhbmQgdGh1cyBpbmNsdWRlcyB0aGUgb3RoZXIpLiBGYWxscyBiYWNrIHRvXG4gIC8vIGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5nZS5cbiAgZnVuY3Rpb24gY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoYSwgYikge1xuICAgIHZhciBsZW5EaWZmID0gYS5saW5lcy5sZW5ndGggLSBiLmxpbmVzLmxlbmd0aDtcbiAgICBpZiAobGVuRGlmZiAhPSAwKSB7IHJldHVybiBsZW5EaWZmIH1cbiAgICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7XG4gICAgdmFyIGZyb21DbXAgPSBjbXAoYVBvcy5mcm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVmdChhKSAtIGV4dHJhTGVmdChiKTtcbiAgICBpZiAoZnJvbUNtcCkgeyByZXR1cm4gLWZyb21DbXAgfVxuICAgIHZhciB0b0NtcCA9IGNtcChhUG9zLnRvLCBiUG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0gZXh0cmFSaWdodChiKTtcbiAgICBpZiAodG9DbXApIHsgcmV0dXJuIHRvQ21wIH1cbiAgICByZXR1cm4gYi5pZCAtIGEuaWRcbiAgfVxuXG4gIC8vIEZpbmQgb3V0IHdoZXRoZXIgYSBsaW5lIGVuZHMgb3Igc3RhcnRzIGluIGEgY29sbGFwc2VkIHNwYW4uIElmXG4gIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtlciBmb3IgdGhhdCBzcGFuLlxuICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7XG4gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnMsIGZvdW5kO1xuICAgIGlmIChzcHMpIHsgZm9yICh2YXIgc3AgPSAodm9pZCAwKSwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gc3BzW2ldO1xuICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8gc3AuZnJvbSA6IHNwLnRvKSA9PSBudWxsICYmXG4gICAgICAgICAgKCFmb3VuZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFya2Vycyhmb3VuZCwgc3AubWFya2VyKSA8IDApKVxuICAgICAgICB7IGZvdW5kID0gc3AubWFya2VyOyB9XG4gICAgfSB9XG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCB0cnVlKSB9XG4gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIGZhbHNlKSB9XG5cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkFyb3VuZChsaW5lLCBjaCkge1xuICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDtcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAoc3AuZnJvbSA9PSBudWxsIHx8IHNwLmZyb20gPCBjaCkgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBjaCkgJiZcbiAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpIHsgZm91bmQgPSBzcC5tYXJrZXI7IH1cbiAgICB9IH1cbiAgICByZXR1cm4gZm91bmRcbiAgfVxuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGVyZSBleGlzdHMgYSBjb2xsYXBzZWQgc3BhbiB0aGF0IHBhcnRpYWxseVxuICAvLyBvdmVybGFwcyAoY292ZXJzIHRoZSBzdGFydCBvciBlbmQsIGJ1dCBub3QgYm90aCkgb2YgYSBuZXcgc3Bhbi5cbiAgLy8gU3VjaCBvdmVybGFwIGlzIG5vdCBhbGxvd2VkLlxuICBmdW5jdGlvbiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgbGluZU5vLCBmcm9tLCB0bywgbWFya2VyKSB7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU5vKTtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIHsgY29udGludWUgfVxuICAgICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQoMCk7XG4gICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9tKSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpO1xuICAgICAgdmFyIHRvQ21wID0gY21wKGZvdW5kLnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJrZXIpO1xuICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSB7IGNvbnRpbnVlIH1cbiAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKHNwLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IGNtcChmb3VuZC50bywgZnJvbSkgPj0gMCA6IGNtcChmb3VuZC50bywgZnJvbSkgPiAwKSB8fFxuICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoc3AubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gY21wKGZvdW5kLmZyb20sIHRvKSA8PSAwIDogY21wKGZvdW5kLmZyb20sIHRvKSA8IDApKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9IH1cbiAgfVxuXG4gIC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZvbGRpbmcsIGZvclxuICAvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVsdGlwbGUgbG9naWNhbCBsaW5lcyB0byBhcHBlYXIgb24gdGhlIHNhbWVcbiAgLy8gdmlzdWFsIGxpbmUuIFRoaXMgZmluZHMgdGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZVxuICAvLyBnaXZlbiBsaW5lIGlzIHBhcnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLlxuICBmdW5jdGlvbiB2aXN1YWxMaW5lKGxpbmUpIHtcbiAgICB2YXIgbWVyZ2VkO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSlcbiAgICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKC0xLCB0cnVlKS5saW5lOyB9XG4gICAgcmV0dXJuIGxpbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmVFbmQobGluZSkge1xuICAgIHZhciBtZXJnZWQ7XG4gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSlcbiAgICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7IH1cbiAgICByZXR1cm4gbGluZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBsb2dpY2FsIGxpbmVzIHRoYXQgY29udGludWUgdGhlIHZpc3VhbCBsaW5lXG4gIC8vIHN0YXJ0ZWQgYnkgdGhlIGFyZ3VtZW50LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggbGluZXMuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkge1xuICAgIHZhciBtZXJnZWQsIGxpbmVzO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpIHtcbiAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lXG4gICAgICA7KGxpbmVzIHx8IChsaW5lcyA9IFtdKSkucHVzaChsaW5lKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzXG4gIH1cblxuICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGVcbiAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZU5vKGRvYywgbGluZU4pIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIHZpcyA9IHZpc3VhbExpbmUobGluZSk7XG4gICAgaWYgKGxpbmUgPT0gdmlzKSB7IHJldHVybiBsaW5lTiB9XG4gICAgcmV0dXJuIGxpbmVObyh2aXMpXG4gIH1cblxuICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB2aXN1YWwgbGluZSBhZnRlclxuICAvLyB0aGUgZ2l2ZW4gbGluZS5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZE5vKGRvYywgbGluZU4pIHtcbiAgICBpZiAobGluZU4gPiBkb2MubGFzdExpbmUoKSkgeyByZXR1cm4gbGluZU4gfVxuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgbWVyZ2VkO1xuICAgIGlmICghbGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHsgcmV0dXJuIGxpbmVOIH1cbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKVxuICAgICAgeyBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsgfVxuICAgIHJldHVybiBsaW5lTm8obGluZSkgKyAxXG4gIH1cblxuICAvLyBDb21wdXRlIHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMgaGlkZGVuIHdoZW4gdGhleVxuICAvLyBhcmUgcGFydCBvZiBhIHZpc3VhbCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggYW5vdGhlciBsaW5lLCBvciB3aGVuXG4gIC8vIHRoZXkgYXJlIGVudGlyZWx5IGNvdmVyZWQgYnkgY29sbGFwc2VkLCBub24td2lkZ2V0IHNwYW4uXG4gIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpIHtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIHNwID0gKHZvaWQgMCksIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICBzcCA9IHNwc1tpXTtcbiAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNlZCkgeyBjb250aW51ZSB9XG4gICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSB7IHJldHVybiB0cnVlIH1cbiAgICAgIGlmIChzcC5tYXJrZXIud2lkZ2V0Tm9kZSkgeyBjb250aW51ZSB9XG4gICAgICBpZiAoc3AuZnJvbSA9PSAwICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9IH1cbiAgfVxuICBmdW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwYW4pIHtcbiAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7XG4gICAgICB2YXIgZW5kID0gc3Bhbi5tYXJrZXIuZmluZCgxLCB0cnVlKTtcbiAgICAgIHJldHVybiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZC5saW5lLCBnZXRNYXJrZWRTcGFuRm9yKGVuZC5saW5lLm1hcmtlZFNwYW5zLCBzcGFuLm1hcmtlcikpXG4gICAgfVxuICAgIGlmIChzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpXG4gICAgICB7IHJldHVybiB0cnVlIH1cbiAgICBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTtcbiAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIud2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiZcbiAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCBzcC50byAhPSBzcGFuLmZyb20pICYmXG4gICAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJlxuICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuXG4gIGZ1bmN0aW9uIGhlaWdodEF0TGluZShsaW5lT2JqKSB7XG4gICAgbGluZU9iaiA9IHZpc3VhbExpbmUobGluZU9iaik7XG5cbiAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5wYXJlbnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lID09IGxpbmVPYmopIHsgYnJlYWsgfVxuICAgICAgZWxzZSB7IGggKz0gbGluZS5oZWlnaHQ7IH1cbiAgICB9XG4gICAgZm9yICh2YXIgcCA9IGNodW5rLnBhcmVudDsgcDsgY2h1bmsgPSBwLCBwID0gY2h1bmsucGFyZW50KSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwLmNoaWxkcmVuLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgICAgdmFyIGN1ciA9IHAuY2hpbGRyZW5baSQxXTtcbiAgICAgICAgaWYgKGN1ciA9PSBjaHVuaykgeyBicmVhayB9XG4gICAgICAgIGVsc2UgeyBoICs9IGN1ci5oZWlnaHQ7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50XG4gIC8vIGNvbGxhcHNlZCByYW5nZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdodCBoaWRlIHBhcnRzLCBhbmQgam9pblxuICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LlxuICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHtcbiAgICBpZiAobGluZS5oZWlnaHQgPT0gMCkgeyByZXR1cm4gMCB9XG4gICAgdmFyIGxlbiA9IGxpbmUudGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTtcbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkge1xuICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7XG4gICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7XG4gICAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoO1xuICAgIH1cbiAgICBjdXIgPSBsaW5lO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkge1xuICAgICAgdmFyIGZvdW5kJDEgPSBtZXJnZWQuZmluZCgwLCB0cnVlKTtcbiAgICAgIGxlbiAtPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZCQxLmZyb20uY2g7XG4gICAgICBjdXIgPSBmb3VuZCQxLnRvLmxpbmU7XG4gICAgICBsZW4gKz0gY3VyLnRleHQubGVuZ3RoIC0gZm91bmQkMS50by5jaDtcbiAgICB9XG4gICAgcmV0dXJuIGxlblxuICB9XG5cbiAgLy8gRmluZCB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICBkLm1heExpbmUgPSBnZXRMaW5lKGRvYywgZG9jLmZpcnN0KTtcbiAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7XG4gICAgZC5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7XG4gICAgZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpO1xuICAgICAgaWYgKGxlbiA+IGQubWF4TGluZUxlbmd0aCkge1xuICAgICAgICBkLm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgIGQubWF4TGluZSA9IGxpbmU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBMSU5FIERBVEEgU1RSVUNUVVJFXG5cbiAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmdcbiAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLlxuICB2YXIgTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkge1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpO1xuICAgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7XG4gIH07XG5cbiAgTGluZS5wcm90b3R5cGUubGluZU5vID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbGluZU5vKHRoaXMpIH07XG4gIGV2ZW50TWl4aW4oTGluZSk7XG5cbiAgLy8gQ2hhbmdlIHRoZSBjb250ZW50ICh0ZXh0LCBtYXJrZXJzKSBvZiBhIGxpbmUuIEF1dG9tYXRpY2FsbHlcbiAgLy8gaW52YWxpZGF0ZXMgY2FjaGVkIGluZm9ybWF0aW9uIGFuZCB0cmllcyB0byByZS1lc3RpbWF0ZSB0aGVcbiAgLy8gbGluZSdzIGhlaWdodC5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHtcbiAgICBsaW5lLnRleHQgPSB0ZXh0O1xuICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgIGlmIChsaW5lLnN0eWxlcykgeyBsaW5lLnN0eWxlcyA9IG51bGw7IH1cbiAgICBpZiAobGluZS5vcmRlciAhPSBudWxsKSB7IGxpbmUub3JkZXIgPSBudWxsOyB9XG4gICAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7XG4gICAgYXR0YWNoTWFya2VkU3BhbnMobGluZSwgbWFya2VkU3BhbnMpO1xuICAgIHZhciBlc3RIZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVpZ2h0KGxpbmUpIDogMTtcbiAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsgfVxuICB9XG5cbiAgLy8gRGV0YWNoIGEgbGluZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMgbWFya2Vycy5cbiAgZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkge1xuICAgIGxpbmUucGFyZW50ID0gbnVsbDtcbiAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgYSBzdHlsZSBhcyByZXR1cm5lZCBieSBhIG1vZGUgKGVpdGhlciBudWxsLCBvciBhIHN0cmluZ1xuICAvLyBjb250YWluaW5nIG9uZSBvciBtb3JlIHN0eWxlcykgdG8gYSBDU1Mgc3R5bGUuIFRoaXMgaXMgY2FjaGVkLFxuICAvLyBhbmQgYWxzbyBsb29rcyBmb3IgbGluZS13aWRlIHN0eWxlcy5cbiAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge30sIHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgPSB7fTtcbiAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZSwgb3B0aW9ucykge1xuICAgIGlmICghc3R5bGUgfHwgL15cXHMqJC8udGVzdChzdHlsZSkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjYWNoZSA9IG9wdGlvbnMuYWRkTW9kZUNsYXNzID8gc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA6IHN0eWxlVG9DbGFzc0NhY2hlO1xuICAgIHJldHVybiBjYWNoZVtzdHlsZV0gfHxcbiAgICAgIChjYWNoZVtzdHlsZV0gPSBzdHlsZS5yZXBsYWNlKC9cXFMrL2csIFwiY20tJCZcIikpXG4gIH1cblxuICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzXG4gIC8vIHVwIGEgJ2xpbmUgbWFwJywgd2hpY2ggcG9pbnRzIGF0IHRoZSBET00gbm9kZXMgdGhhdCByZXByZXNlbnRcbiAgLy8gc3BlY2lmaWMgc3RyZXRjaGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJpbmcgY29kZS5cbiAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRoaXMgbWFwLCBhbmRcbiAgLy8gaW5mb3JtYXRpb24gYWJvdXQgbGluZS13aWRlIHN0eWxlcyB0aGF0IHdlcmUgc2V0IGJ5IHRoZSBtb2RlLlxuICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAgIC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgJ2JvcmRlcicsIHdoaWNoXG4gICAgLy8gaXMgbmVlZGVkIG9uIFdlYmtpdCB0byBiZSBhYmxlIHRvIGdldCBsaW5lLWxldmVsIGJvdW5kaW5nXG4gICAgLy8gcmVjdGFuZ2xlcyBmb3IgaXQgKGluIG1lYXN1cmVDaGFyKS5cbiAgICB2YXIgY29udGVudCA9IGVsdFAoXCJzcGFuXCIsIG51bGwsIG51bGwsIHdlYmtpdCA/IFwicGFkZGluZy1yaWdodDogLjFweFwiIDogbnVsbCk7XG4gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHRQKFwicHJlXCIsIFtjb250ZW50XSwgXCJDb2RlTWlycm9yLWxpbmVcIiksIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgY29sOiAwLCBwb3M6IDAsIGNtOiBjbSxcbiAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICBzcGxpdFNwYWNlczogY20uZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpfTtcbiAgICBsaW5lVmlldy5tZWFzdXJlID0ge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgdmlzdWFsIGxpbmUuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gKGxpbmVWaWV3LnJlc3QgPyBsaW5lVmlldy5yZXN0Lmxlbmd0aCA6IDApOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gaSA/IGxpbmVWaWV3LnJlc3RbaSAtIDFdIDogbGluZVZpZXcubGluZSwgb3JkZXIgPSAodm9pZCAwKTtcbiAgICAgIGJ1aWxkZXIucG9zID0gMDtcbiAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuO1xuICAgICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3MgaW50byB0aGUgdG9rZW4tcmVuZGVyaW5nXG4gICAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0aCBicm93c2VyIHF1aXJrcy5cbiAgICAgIGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFzdXJlKSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKSkpXG4gICAgICAgIHsgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsgfVxuICAgICAgYnVpbGRlci5tYXAgPSBbXTtcbiAgICAgIHZhciBhbGxvd0Zyb250aWVyVXBkYXRlID0gbGluZVZpZXcgIT0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkICYmIGxpbmVObyhsaW5lKTtcbiAgICAgIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIGFsbG93RnJvbnRpZXJVcGRhdGUpKTtcbiAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcykge1xuICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcylcbiAgICAgICAgICB7IGJ1aWxkZXIuYmdDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxkZXIuYmdDbGFzcyB8fCBcIlwiKTsgfVxuICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzKVxuICAgICAgICAgIHsgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8IFwiXCIpOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBhIHNpbmdsZSBub2RlIGlzIHByZXNlbnQsIGZvciBtZWFzdXJpbmcuXG4gICAgICBpZiAoYnVpbGRlci5tYXAubGVuZ3RoID09IDApXG4gICAgICAgIHsgYnVpbGRlci5tYXAucHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKSk7IH1cblxuICAgICAgLy8gU3RvcmUgdGhlIG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluZVxuICAgICAgaWYgKGkgPT0gMCkge1xuICAgICAgICBsaW5lVmlldy5tZWFzdXJlLm1hcCA9IGJ1aWxkZXIubWFwO1xuICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307XG4gICAgICB9IGVsc2Uge1xuICAobGluZVZpZXcubWVhc3VyZS5tYXBzIHx8IChsaW5lVmlldy5tZWFzdXJlLm1hcHMgPSBbXSkpLnB1c2goYnVpbGRlci5tYXApXG4gICAgICAgIDsobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWUgaXNzdWUgIzI5MDFcbiAgICBpZiAod2Via2l0KSB7XG4gICAgICB2YXIgbGFzdCA9IGJ1aWxkZXIuY29udGVudC5sYXN0Q2hpbGQ7XG4gICAgICBpZiAoL1xcYmNtLXRhYlxcYi8udGVzdChsYXN0LmNsYXNzTmFtZSkgfHwgKGxhc3QucXVlcnlTZWxlY3RvciAmJiBsYXN0LnF1ZXJ5U2VsZWN0b3IoXCIuY20tdGFiXCIpKSlcbiAgICAgICAgeyBidWlsZGVyLmNvbnRlbnQuY2xhc3NOYW1lID0gXCJjbS10YWItd3JhcC1oYWNrXCI7IH1cbiAgICB9XG5cbiAgICBzaWduYWwoY20sIFwicmVuZGVyTGluZVwiLCBjbSwgbGluZVZpZXcubGluZSwgYnVpbGRlci5wcmUpO1xuICAgIGlmIChidWlsZGVyLnByZS5jbGFzc05hbWUpXG4gICAgICB7IGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMoYnVpbGRlci5wcmUuY2xhc3NOYW1lLCBidWlsZGVyLnRleHRDbGFzcyB8fCBcIlwiKTsgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyKGNoKSB7XG4gICAgdmFyIHRva2VuID0gZWx0KFwic3BhblwiLCBcIlxcdTIwMjJcIiwgXCJjbS1pbnZhbGlkY2hhclwiKTtcbiAgICB0b2tlbi50aXRsZSA9IFwiXFxcXHVcIiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIHRva2VuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdG9rZW4udGl0bGUpO1xuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLy8gQnVpbGQgdXAgdGhlIERPTSByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgdG9rZW4sIGFuZCBhZGQgaXQgdG9cbiAgLy8gdGhlIGxpbmUgbWFwLiBUYWtlcyBjYXJlIHRvIHJlbmRlciBzcGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVseS5cbiAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIGNzcywgYXR0cmlidXRlcykge1xuICAgIGlmICghdGV4dCkgeyByZXR1cm4gfVxuICAgIHZhciBkaXNwbGF5VGV4dCA9IGJ1aWxkZXIuc3BsaXRTcGFjZXMgPyBzcGxpdFNwYWNlcyh0ZXh0LCBidWlsZGVyLnRyYWlsaW5nU3BhY2UpIDogdGV4dDtcbiAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlO1xuICAgIHZhciBjb250ZW50O1xuICAgIGlmICghc3BlY2lhbC50ZXN0KHRleHQpKSB7XG4gICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5VGV4dCk7XG4gICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHRleHQubGVuZ3RoLCBjb250ZW50KTtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyBtdXN0V3JhcCA9IHRydWU7IH1cbiAgICAgIGJ1aWxkZXIucG9zICs9IHRleHQubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgdmFyIHBvcyA9IDA7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvcztcbiAgICAgICAgdmFyIG0gPSBzcGVjaWFsLmV4ZWModGV4dCk7XG4gICAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5kZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvcztcbiAgICAgICAgaWYgKHNraXBwZWQpIHtcbiAgICAgICAgICB2YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheVRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVkKSk7XG4gICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0XSkpOyB9XG4gICAgICAgICAgZWxzZSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsgfVxuICAgICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwgdHh0KTtcbiAgICAgICAgICBidWlsZGVyLmNvbCArPSBza2lwcGVkO1xuICAgICAgICAgIGJ1aWxkZXIucG9zICs9IHNraXBwZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7IGJyZWFrIH1cbiAgICAgICAgcG9zICs9IHNraXBwZWQgKyAxO1xuICAgICAgICB2YXIgdHh0JDEgPSAodm9pZCAwKTtcbiAgICAgICAgaWYgKG1bMF0gPT0gXCJcXHRcIikge1xuICAgICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTtcbiAgICAgICAgICB0eHQkMSA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBzcGFjZVN0cih0YWJXaWR0aCksIFwiY20tdGFiXCIpKTtcbiAgICAgICAgICB0eHQkMS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwicHJlc2VudGF0aW9uXCIpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgXCJcXHRcIik7XG4gICAgICAgICAgYnVpbGRlci5jb2wgKz0gdGFiV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAobVswXSA9PSBcIlxcclwiIHx8IG1bMF0gPT0gXCJcXG5cIikge1xuICAgICAgICAgIHR4dCQxID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIG1bMF0gPT0gXCJcXHJcIiA/IFwiXFx1MjQwZFwiIDogXCJcXHUyNDI0XCIsIFwiY20taW52YWxpZGNoYXJcIikpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgbVswXSk7XG4gICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eHQkMSA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgbVswXSk7XG4gICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0JDFdKSk7IH1cbiAgICAgICAgICBlbHNlIHsgY29udGVudC5hcHBlbmRDaGlsZCh0eHQkMSk7IH1cbiAgICAgICAgICBidWlsZGVyLmNvbCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgMSwgdHh0JDEpO1xuICAgICAgICBidWlsZGVyLnBvcysrO1xuICAgICAgfVxuICAgIH1cbiAgICBidWlsZGVyLnRyYWlsaW5nU3BhY2UgPSBkaXNwbGF5VGV4dC5jaGFyQ29kZUF0KHRleHQubGVuZ3RoIC0gMSkgPT0gMzI7XG4gICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgbXVzdFdyYXAgfHwgY3NzKSB7XG4gICAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwgXCJcIjtcbiAgICAgIGlmIChzdGFydFN0eWxlKSB7IGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOyB9XG4gICAgICBpZiAoZW5kU3R5bGUpIHsgZnVsbFN0eWxlICs9IGVuZFN0eWxlOyB9XG4gICAgICB2YXIgdG9rZW4gPSBlbHQoXCJzcGFuXCIsIFtjb250ZW50XSwgZnVsbFN0eWxlLCBjc3MpO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7IGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpICYmIGF0dHIgIT0gXCJzdHlsZVwiICYmIGF0dHIgIT0gXCJjbGFzc1wiKVxuICAgICAgICAgIHsgdG9rZW4uc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJpYnV0ZXNbYXR0cl0pOyB9IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pXG4gICAgfVxuICAgIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfVxuXG4gIC8vIENoYW5nZSBzb21lIHNwYWNlcyB0byBOQlNQIHRvIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBjb2xsYXBzaW5nXG4gIC8vIHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aGVuIHJlbmRlcmluZyB0ZXh0IChpc3N1ZSAjMTM2MikuXG4gIGZ1bmN0aW9uIHNwbGl0U3BhY2VzKHRleHQsIHRyYWlsaW5nQmVmb3JlKSB7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMSAmJiAhLyAgLy50ZXN0KHRleHQpKSB7IHJldHVybiB0ZXh0IH1cbiAgICB2YXIgc3BhY2VCZWZvcmUgPSB0cmFpbGluZ0JlZm9yZSwgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaCA9IHRleHQuY2hhckF0KGkpO1xuICAgICAgaWYgKGNoID09IFwiIFwiICYmIHNwYWNlQmVmb3JlICYmIChpID09IHRleHQubGVuZ3RoIC0gMSB8fCB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID09IDMyKSlcbiAgICAgICAgeyBjaCA9IFwiXFx1MDBhMFwiOyB9XG4gICAgICByZXN1bHQgKz0gY2g7XG4gICAgICBzcGFjZUJlZm9yZSA9IGNoID09IFwiIFwiO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBXb3JrIGFyb3VuZCBub25zZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBzdHJldGNoZXMgb2ZcbiAgLy8gcmlnaHQtdG8tbGVmdCB0ZXh0LlxuICBmdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5lciwgb3JkZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB7XG4gICAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyBcIiBjbS1mb3JjZS1ib3JkZXJcIiA6IFwiY20tZm9yY2UtYm9yZGVyXCI7XG4gICAgICB2YXIgc3RhcnQgPSBidWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXJ0IG9mIHRoaXMgdGV4dFxuICAgICAgICB2YXIgcGFydCA9ICh2b2lkIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgICAgIGlmIChwYXJ0LnRvID4gc3RhcnQgJiYgcGFydC5mcm9tIDw9IHN0YXJ0KSB7IGJyZWFrIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydC50byA+PSBlbmQpIHsgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB9XG4gICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGwsIGNzcywgYXR0cmlidXRlcyk7XG4gICAgICAgIHN0YXJ0U3R5bGUgPSBudWxsO1xuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0gc3RhcnQpO1xuICAgICAgICBzdGFydCA9IHBhcnQudG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7XG4gICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7XG4gICAgaWYgKHdpZGdldCkgeyBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNpemUsIHdpZGdldCk7IH1cbiAgICBpZiAoIWlnbm9yZVdpZGdldCAmJiBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQubmVlZHNDb250ZW50QXR0cmlidXRlKSB7XG4gICAgICBpZiAoIXdpZGdldClcbiAgICAgICAgeyB3aWRnZXQgPSBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpOyB9XG4gICAgICB3aWRnZXQuc2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIsIG1hcmtlci5pZCk7XG4gICAgfVxuICAgIGlmICh3aWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHdpZGdldCk7XG4gICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQod2lkZ2V0KTtcbiAgICB9XG4gICAgYnVpbGRlci5wb3MgKz0gc2l6ZTtcbiAgICBidWlsZGVyLnRyYWlsaW5nU3BhY2UgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIE91dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFrZSB1cCBhIGxpbmUsIHRha2luZyBoaWdobGlnaHRpbmdcbiAgLy8gYW5kIG1hcmtlZCB0ZXh0IGludG8gYWNjb3VudC5cbiAgZnVuY3Rpb24gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgc3R5bGVzKSB7XG4gICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucywgYWxsVGV4dCA9IGxpbmUudGV4dCwgYXQgPSAwO1xuICAgIGlmICghc3BhbnMpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDE7IGkkMSA8IHN0eWxlcy5sZW5ndGg7IGkkMSs9MilcbiAgICAgICAgeyBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2kkMV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpJDErMV0sIGJ1aWxkZXIuY20ub3B0aW9ucykpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0gXCJcIiwgc3R5bGUsIGNzcztcbiAgICB2YXIgbmV4dENoYW5nZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgY29sbGFwc2VkLCBhdHRyaWJ1dGVzO1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0XG4gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gY3NzID0gXCJcIjtcbiAgICAgICAgYXR0cmlidXRlcyA9IG51bGw7XG4gICAgICAgIGNvbGxhcHNlZCA9IG51bGw7IG5leHRDaGFuZ2UgPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIGZvdW5kQm9va21hcmtzID0gW10sIGVuZFN0eWxlcyA9ICh2b2lkIDApO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7XG4gICAgICAgICAgaWYgKG0udHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSB7XG4gICAgICAgICAgICBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA8PSBwb3MgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBwb3MgfHwgbS5jb2xsYXBzZWQgJiYgc3AudG8gPT0gcG9zICYmIHNwLmZyb20gPT0gcG9zKSkge1xuICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC50bykge1xuICAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AudG87XG4gICAgICAgICAgICAgIHNwYW5FbmRTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHsgc3BhblN0eWxlICs9IFwiIFwiICsgbS5jbGFzc05hbWU7IH1cbiAgICAgICAgICAgIGlmIChtLmNzcykgeyBjc3MgPSAoY3NzID8gY3NzICsgXCI7XCIgOiBcIlwiKSArIG0uY3NzOyB9XG4gICAgICAgICAgICBpZiAobS5zdGFydFN0eWxlICYmIHNwLmZyb20gPT0gcG9zKSB7IHNwYW5TdGFydFN0eWxlICs9IFwiIFwiICsgbS5zdGFydFN0eWxlOyB9XG4gICAgICAgICAgICBpZiAobS5lbmRTdHlsZSAmJiBzcC50byA9PSBuZXh0Q2hhbmdlKSB7IChlbmRTdHlsZXMgfHwgKGVuZFN0eWxlcyA9IFtdKSkucHVzaChtLmVuZFN0eWxlLCBzcC50byk7IH1cbiAgICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIHRoZSBvbGQgdGl0bGUgcHJvcGVydHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlbWlycm9yL0NvZGVNaXJyb3IvcHVsbC81NjczXG4gICAgICAgICAgICBpZiAobS50aXRsZSkgeyAoYXR0cmlidXRlcyB8fCAoYXR0cmlidXRlcyA9IHt9KSkudGl0bGUgPSBtLnRpdGxlOyB9XG4gICAgICAgICAgICBpZiAobS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIHsgKGF0dHJpYnV0ZXMgfHwgKGF0dHJpYnV0ZXMgPSB7fSkpW2F0dHJdID0gbS5hdHRyaWJ1dGVzW2F0dHJdOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFwc2VkLm1hcmtlciwgbSkgPCAwKSlcbiAgICAgICAgICAgICAgeyBjb2xsYXBzZWQgPSBzcDsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AuZnJvbSkge1xuICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLmZyb207XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRTdHlsZXMpIHsgZm9yICh2YXIgaiQxID0gMDsgaiQxIDwgZW5kU3R5bGVzLmxlbmd0aDsgaiQxICs9IDIpXG4gICAgICAgICAgeyBpZiAoZW5kU3R5bGVzW2okMSArIDFdID09IG5leHRDaGFuZ2UpIHsgc3BhbkVuZFN0eWxlICs9IFwiIFwiICsgZW5kU3R5bGVzW2okMV07IH0gfSB9XG5cbiAgICAgICAgaWYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2VkLmZyb20gPT0gcG9zKSB7IGZvciAodmFyIGokMiA9IDA7IGokMiA8IGZvdW5kQm9va21hcmtzLmxlbmd0aDsgKytqJDIpXG4gICAgICAgICAgeyBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRCb29rbWFya3NbaiQyXSk7IH0gfVxuICAgICAgICBpZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHtcbiAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50bykgLSBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpO1xuICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gcG9zKSB7IGNvbGxhcHNlZCA9IGZhbHNlOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb3MgPj0gbGVuKSB7IGJyZWFrIH1cblxuICAgICAgdmFyIHVwdG8gPSBNYXRoLm1pbihsZW4sIG5leHRDaGFuZ2UpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICB2YXIgZW5kID0gcG9zICsgdGV4dC5sZW5ndGg7XG4gICAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8gdGV4dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7XG4gICAgICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgPyBzdHlsZSArIHNwYW5TdHlsZSA6IHNwYW5TdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6IFwiXCIsIGNzcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVha31cbiAgICAgICAgICBwb3MgPSBlbmQ7XG4gICAgICAgICAgc3BhblN0YXJ0U3R5bGUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHRleHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpKytdKTtcbiAgICAgICAgc3R5bGUgPSBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKytdLCBidWlsZGVyLmNtLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2libGUgKGN1cnJlbnRseSBkcmF3bilcbiAgLy8gcGFydCBvZiB0aGUgZG9jdW1lbnQuIEEgTGluZVZpZXcgbWF5IGNvcnJlc3BvbmQgdG8gbXVsdGlwbGVcbiAgLy8gbG9naWNhbCBsaW5lcywgaWYgdGhvc2UgYXJlIGNvbm5lY3RlZCBieSBjb2xsYXBzZWQgcmFuZ2VzLlxuICBmdW5jdGlvbiBMaW5lVmlldyhkb2MsIGxpbmUsIGxpbmVOKSB7XG4gICAgLy8gVGhlIHN0YXJ0aW5nIGxpbmVcbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIC8vIENvbnRpbnVpbmcgbGluZXMsIGlmIGFueVxuICAgIHRoaXMucmVzdCA9IHZpc3VhbExpbmVDb250aW51ZWQobGluZSk7XG4gICAgLy8gTnVtYmVyIG9mIGxvZ2ljYWwgbGluZXMgaW4gdGhpcyB2aXN1YWwgbGluZVxuICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVzdCA/IGxpbmVObyhsc3QodGhpcy5yZXN0KSkgLSBsaW5lTiArIDEgOiAxO1xuICAgIHRoaXMubm9kZSA9IHRoaXMudGV4dCA9IG51bGw7XG4gICAgdGhpcy5oaWRkZW4gPSBsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHJhbmdlIG9mIExpbmVWaWV3IG9iamVjdHMgZm9yIHRoZSBnaXZlbiBsaW5lcy5cbiAgZnVuY3Rpb24gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKSB7XG4gICAgdmFyIGFycmF5ID0gW10sIG5leHRQb3M7XG4gICAgZm9yICh2YXIgcG9zID0gZnJvbTsgcG9zIDwgdG87IHBvcyA9IG5leHRQb3MpIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IExpbmVWaWV3KGNtLmRvYywgZ2V0TGluZShjbS5kb2MsIHBvcyksIHBvcyk7XG4gICAgICBuZXh0UG9zID0gcG9zICsgdmlldy5zaXplO1xuICAgICAgYXJyYXkucHVzaCh2aWV3KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICB2YXIgb3BlcmF0aW9uR3JvdXAgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHB1c2hPcGVyYXRpb24ob3ApIHtcbiAgICBpZiAob3BlcmF0aW9uR3JvdXApIHtcbiAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3Aub3duc0dyb3VwID0gb3BlcmF0aW9uR3JvdXAgPSB7XG4gICAgICAgIG9wczogW29wXSxcbiAgICAgICAgZGVsYXllZENhbGxiYWNrczogW11cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCkge1xuICAgIC8vIENhbGxzIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCBjdXJzb3JBY3Rpdml0eSBoYW5kbGVycyB1bnRpbCBub1xuICAgIC8vIG5ldyBvbmVzIGFwcGVhclxuICAgIHZhciBjYWxsYmFja3MgPSBncm91cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDtcbiAgICBkbyB7XG4gICAgICBmb3IgKDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBjYWxsYmFja3NbaV0uY2FsbChudWxsKTsgfVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC5vcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG9wID0gZ3JvdXAub3BzW2pdO1xuICAgICAgICBpZiAob3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycylcbiAgICAgICAgICB7IHdoaWxlIChvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCA8IG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoKVxuICAgICAgICAgICAgeyBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW29wLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdLmNhbGwobnVsbCwgb3AuY20pOyB9IH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChpIDwgY2FsbGJhY2tzLmxlbmd0aClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaE9wZXJhdGlvbihvcCwgZW5kQ2IpIHtcbiAgICB2YXIgZ3JvdXAgPSBvcC5vd25zR3JvdXA7XG4gICAgaWYgKCFncm91cCkgeyByZXR1cm4gfVxuXG4gICAgdHJ5IHsgZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCk7IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIG9wZXJhdGlvbkdyb3VwID0gbnVsbDtcbiAgICAgIGVuZENiKGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICB2YXIgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7XG5cbiAgLy8gT2Z0ZW4sIHdlIHdhbnQgdG8gc2lnbmFsIGV2ZW50cyBhdCBhIHBvaW50IHdoZXJlIHdlIGFyZSBpbiB0aGVcbiAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZ1xuICAvLyBvdGhlciBtZXRob2RzIG9uIHRoZSBlZGl0b3IsIHdoaWNoIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudFxuICAvLyBzdGF0ZSBvciBzaW1wbHkgbm90IGV4cGVjdCBhbnkgb3RoZXIgZXZlbnRzIHRvIGhhcHBlbi5cbiAgLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzXG4gIC8vIHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gZW5kcywgb3IsIGlmIG5vXG4gIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0IGZpcmVzLlxuICBmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykge1xuICAgIHZhciBhcnIgPSBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKTtcbiAgICBpZiAoIWFyci5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksIGxpc3Q7XG4gICAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7XG4gICAgICBsaXN0ID0gb3BlcmF0aW9uR3JvdXAuZGVsYXllZENhbGxiYWNrcztcbiAgICB9IGVsc2UgaWYgKG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MpIHtcbiAgICAgIGxpc3QgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IFtdO1xuICAgICAgc2V0VGltZW91dChmaXJlT3JwaGFuRGVsYXllZCwgMCk7XG4gICAgfVxuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkge1xuICAgICAgbGlzdC5wdXNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFycltpXS5hcHBseShudWxsLCBhcmdzKTsgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKVxuICAgICAgbG9vcCggaSApO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlyZU9ycGhhbkRlbGF5ZWQoKSB7XG4gICAgdmFyIGRlbGF5ZWQgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzO1xuICAgIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgeyBkZWxheWVkW2ldKCk7IH1cbiAgfVxuXG4gIC8vIFdoZW4gYW4gYXNwZWN0IG9mIGEgbGluZSBjaGFuZ2VzLCBhIHN0cmluZyBpcyBhZGRlZCB0b1xuICAvLyBsaW5lVmlldy5jaGFuZ2VzLiBUaGlzIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGxpbmUnc1xuICAvLyBET00gc3RydWN0dXJlLlxuICBmdW5jdGlvbiB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lVmlldy5jaGFuZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgdHlwZSA9IGxpbmVWaWV3LmNoYW5nZXNbal07XG4gICAgICBpZiAodHlwZSA9PSBcInRleHRcIikgeyB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpOyB9XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwiZ3V0dGVyXCIpIHsgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImNsYXNzXCIpIHsgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIndpZGdldFwiKSB7IHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7IH1cbiAgICB9XG4gICAgbGluZVZpZXcuY2hhbmdlcyA9IG51bGw7XG4gIH1cblxuICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJhY2tncm91bmQgY2xhc3MgbmVlZCB0b1xuICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2XG4gIGZ1bmN0aW9uIGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KSB7XG4gICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcudGV4dCkge1xuICAgICAgbGluZVZpZXcubm9kZSA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZVwiKTtcbiAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpXG4gICAgICAgIHsgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5lVmlldy50ZXh0KTsgfVxuICAgICAgbGluZVZpZXcubm9kZS5hcHBlbmRDaGlsZChsaW5lVmlldy50ZXh0KTtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7IH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldykge1xuICAgIHZhciBjbHMgPSBsaW5lVmlldy5iZ0NsYXNzID8gbGluZVZpZXcuYmdDbGFzcyArIFwiIFwiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCBcIlwiKSA6IGxpbmVWaWV3LmxpbmUuYmdDbGFzcztcbiAgICBpZiAoY2xzKSB7IGNscyArPSBcIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kXCI7IH1cbiAgICBpZiAobGluZVZpZXcuYmFja2dyb3VuZCkge1xuICAgICAgaWYgKGNscykgeyBsaW5lVmlldy5iYWNrZ3JvdW5kLmNsYXNzTmFtZSA9IGNsczsgfVxuICAgICAgZWxzZSB7IGxpbmVWaWV3LmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5iYWNrZ3JvdW5kKTsgbGluZVZpZXcuYmFja2dyb3VuZCA9IG51bGw7IH1cbiAgICB9IGVsc2UgaWYgKGNscykge1xuICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICBsaW5lVmlldy5iYWNrZ3JvdW5kID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KFwiZGl2XCIsIG51bGwsIGNscyksIHdyYXAuZmlyc3RDaGlsZCk7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobGluZVZpZXcuYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBhcm91bmQgYnVpbGRMaW5lQ29udGVudCB3aGljaCB3aWxsIHJldXNlIHRoZSBzdHJ1Y3R1cmVcbiAgLy8gaW4gZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkIHdoZW4gcG9zc2libGUuXG4gIGZ1bmN0aW9uIGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAgIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBleHQubGluZSA9PSBsaW5lVmlldy5saW5lKSB7XG4gICAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsO1xuICAgICAgbGluZVZpZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJlO1xuICAgICAgcmV0dXJuIGV4dC5idWlsdFxuICAgIH1cbiAgICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpXG4gIH1cblxuICAvLyBSZWRyYXcgdGhlIGxpbmUncyB0ZXh0LiBJbnRlcmFjdHMgd2l0aCB0aGUgYmFja2dyb3VuZCBhbmQgdGV4dFxuICAvLyBjbGFzc2VzIGJlY2F1c2UgdGhlIG1vZGUgbWF5IG91dHB1dCB0b2tlbnMgdGhhdCBpbmZsdWVuY2UgdGhlc2VcbiAgLy8gY2xhc3Nlcy5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KSB7XG4gICAgdmFyIGNscyA9IGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lO1xuICAgIHZhciBidWlsdCA9IGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7XG4gICAgaWYgKGxpbmVWaWV3LnRleHQgPT0gbGluZVZpZXcubm9kZSkgeyBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOyB9XG4gICAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpO1xuICAgIGxpbmVWaWV3LnRleHQgPSBidWlsdC5wcmU7XG4gICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0gbGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNzKSB7XG4gICAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzcztcbiAgICAgIGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzcztcbiAgICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldyk7XG4gICAgfSBlbHNlIGlmIChjbHMpIHtcbiAgICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gY2xzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldykge1xuICAgIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldyk7XG4gICAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKVxuICAgICAgeyBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldykuY2xhc3NOYW1lID0gbGluZVZpZXcubGluZS53cmFwQ2xhc3M7IH1cbiAgICBlbHNlIGlmIChsaW5lVmlldy5ub2RlICE9IGxpbmVWaWV3LnRleHQpXG4gICAgICB7IGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gXCJcIjsgfVxuICAgIHZhciB0ZXh0Q2xhc3MgPSBsaW5lVmlldy50ZXh0Q2xhc3MgPyBsaW5lVmlldy50ZXh0Q2xhc3MgKyBcIiBcIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCBcIlwiKSA6IGxpbmVWaWV3LmxpbmUudGV4dENsYXNzO1xuICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gdGV4dENsYXNzIHx8IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHtcbiAgICBpZiAobGluZVZpZXcuZ3V0dGVyKSB7XG4gICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7XG4gICAgICBsaW5lVmlldy5ndXR0ZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCkge1xuICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKTtcbiAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcykge1xuICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCBcIiArIGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcImxlZnQ6IFwiICsgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyBcInB4OyB3aWR0aDogXCIgKyAoZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArIFwicHhcIikpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQpO1xuICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCwgbGluZVZpZXcudGV4dCk7XG4gICAgfVxuICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJNYXJrZXJzO1xuICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHtcbiAgICAgIHZhciB3cmFwJDEgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICB2YXIgZ3V0dGVyV3JhcCA9IGxpbmVWaWV3Lmd1dHRlciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXJcIiwgKFwibGVmdDogXCIgKyAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArIFwicHhcIikpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApO1xuICAgICAgd3JhcCQxLmluc2VydEJlZm9yZShndXR0ZXJXcmFwLCBsaW5lVmlldy50ZXh0KTtcbiAgICAgIGlmIChsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzKVxuICAgICAgICB7IGd1dHRlcldyYXAuY2xhc3NOYW1lICs9IFwiIFwiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsgfVxuICAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgKCFtYXJrZXJzIHx8ICFtYXJrZXJzW1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSkpXG4gICAgICAgIHsgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgZWx0KFwiZGl2XCIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pLFxuICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgKFwibGVmdDogXCIgKyAoZGltcy5ndXR0ZXJMZWZ0W1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSkgKyBcInB4OyB3aWR0aDogXCIgKyAoY20uZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCkgKyBcInB4XCIpKSk7IH1cbiAgICAgIGlmIChtYXJrZXJzKSB7IGZvciAodmFyIGsgPSAwOyBrIDwgY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7ICsraykge1xuICAgICAgICB2YXIgaWQgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2tdLmNsYXNzTmFtZSwgZm91bmQgPSBtYXJrZXJzLmhhc093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTtcbiAgICAgICAgaWYgKGZvdW5kKVxuICAgICAgICAgIHsgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgW2ZvdW5kXSwgXCJDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJsZWZ0OiBcIiArIChkaW1zLmd1dHRlckxlZnRbaWRdKSArIFwicHg7IHdpZHRoOiBcIiArIChkaW1zLmd1dHRlcldpZHRoW2lkXSkgKyBcInB4XCIpKSk7IH1cbiAgICAgIH0gfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykge1xuICAgIGlmIChsaW5lVmlldy5hbGlnbmFibGUpIHsgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsgfVxuICAgIHZhciBpc1dpZGdldCA9IGNsYXNzVGVzdChcIkNvZGVNaXJyb3ItbGluZXdpZGdldFwiKTtcbiAgICBmb3IgKHZhciBub2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0ID0gKHZvaWQgMCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7XG4gICAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIGlmIChpc1dpZGdldC50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgeyBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKG5vZGUpOyB9XG4gICAgfVxuICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7XG4gIH1cblxuICAvLyBCdWlsZCBhIGxpbmUncyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNoXG4gIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykge1xuICAgIHZhciBidWlsdCA9IGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7XG4gICAgbGluZVZpZXcudGV4dCA9IGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7XG4gICAgaWYgKGJ1aWx0LmJnQ2xhc3MpIHsgbGluZVZpZXcuYmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3M7IH1cbiAgICBpZiAoYnVpbHQudGV4dENsYXNzKSB7IGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzczsgfVxuXG4gICAgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTtcbiAgICB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpO1xuICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7XG4gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbiAgfVxuXG4gIC8vIEEgbGluZVZpZXcgbWF5IGNvbnRhaW4gbXVsdGlwbGUgbG9naWNhbCBsaW5lcyAod2hlbiBtZXJnZWQgYnlcbiAgLy8gY29sbGFwc2VkIHNwYW5zKS4gVGhlIHdpZGdldHMgZm9yIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUgZHJhd24uXG4gIGZ1bmN0aW9uIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykge1xuICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGNtLCBsaW5lVmlldy5saW5lLCBsaW5lVmlldywgZGltcywgdHJ1ZSk7XG4gICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgeyBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsgfSB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHtcbiAgICBpZiAoIWxpbmUud2lkZ2V0cykgeyByZXR1cm4gfVxuICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoXCJkaXZcIiwgW3dpZGdldC5ub2RlXSwgXCJDb2RlTWlycm9yLWxpbmV3aWRnZXRcIiArICh3aWRnZXQuY2xhc3NOYW1lID8gXCIgXCIgKyB3aWRnZXQuY2xhc3NOYW1lIDogXCJcIikpO1xuICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMpIHsgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTsgfVxuICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgICAgaWYgKGFsbG93QWJvdmUgJiYgd2lkZ2V0LmFib3ZlKVxuICAgICAgICB7IHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGxpbmVWaWV3Lmd1dHRlciB8fCBsaW5lVmlldy50ZXh0KTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7IH1cbiAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgXCJyZWRyYXdcIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpIHtcbiAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkge1xuICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5lVmlldy5hbGlnbmFibGUgPSBbXSkpLnB1c2gobm9kZSk7XG4gICAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBwZXJXaWR0aDtcbiAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyBcInB4XCI7XG4gICAgICBpZiAoIXdpZGdldC5jb3Zlckd1dHRlcikge1xuICAgICAgICB3aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUucGFkZGluZ0xlZnQgPSBkaW1zLmd1dHRlclRvdGFsV2lkdGggKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG4gICAgfVxuICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpIHtcbiAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gNTtcbiAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgICBpZiAoIXdpZGdldC5ub0hTY3JvbGwpIHsgbm9kZS5zdHlsZS5tYXJnaW5MZWZ0ID0gLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCArIFwicHhcIjsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdpZGdldEhlaWdodCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7IHJldHVybiB3aWRnZXQuaGVpZ2h0IH1cbiAgICB2YXIgY20gPSB3aWRnZXQuZG9jLmNtO1xuICAgIGlmICghY20pIHsgcmV0dXJuIDAgfVxuICAgIGlmICghY29udGFpbnMoZG9jdW1lbnQuYm9keSwgd2lkZ2V0Lm5vZGUpKSB7XG4gICAgICB2YXIgcGFyZW50U3R5bGUgPSBcInBvc2l0aW9uOiByZWxhdGl2ZTtcIjtcbiAgICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpXG4gICAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJtYXJnaW4tbGVmdDogLVwiICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoICsgXCJweDtcIjsgfVxuICAgICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpXG4gICAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJ3aWR0aDogXCIgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyBcInB4O1wiOyB9XG4gICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdChcImRpdlwiLCBbd2lkZ2V0Lm5vZGVdLCBudWxsLCBwYXJlbnRTdHlsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0XG4gIH1cblxuICAvLyBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBnaXZlbiBtb3VzZSBldmVudCBoYXBwZW5lZCBpbiBhIHdpZGdldFxuICBmdW5jdGlvbiBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHtcbiAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIW4gfHwgKG4ubm9kZVR5cGUgPT0gMSAmJiBuLmdldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIikgPT0gXCJ0cnVlXCIpIHx8XG4gICAgICAgICAgKG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikpXG4gICAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBPU0lUSU9OIE1FQVNVUkVNRU5UXG5cbiAgZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcH1cbiAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkge3JldHVybiBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldEhlaWdodH1cbiAgZnVuY3Rpb24gcGFkZGluZ0goZGlzcGxheSkge1xuICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRpbmdIKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIIH1cbiAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KFwicHJlXCIsIFwieFwiLCBcIkNvZGVNaXJyb3ItbGluZS1saWtlXCIpKTtcbiAgICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpIDogZS5jdXJyZW50U3R5bGU7XG4gICAgdmFyIGRhdGEgPSB7bGVmdDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQpLCByaWdodDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07XG4gICAgaWYgKCFpc05hTihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgeyBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gZGF0YTsgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aCB9XG4gIGZ1bmN0aW9uIGRpc3BsYXlXaWR0aChjbSkge1xuICAgIHJldHVybiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFyV2lkdGhcbiAgfVxuICBmdW5jdGlvbiBkaXNwbGF5SGVpZ2h0KGNtKSB7XG4gICAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFySGVpZ2h0XG4gIH1cblxuICAvLyBFbnN1cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJhd25cbiAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmVcbiAgLy8gaGVpZ2h0LlxuICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHtcbiAgICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBkaXNwbGF5V2lkdGgoY20pO1xuICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzIHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHtcbiAgICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107XG4gICAgICBpZiAod3JhcHBpbmcpIHtcbiAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1cldpZHRoO1xuICAgICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV07XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkgPiAyKVxuICAgICAgICAgICAgeyBoZWlnaHRzLnB1c2goKGN1ci5ib3R0b20gKyBuZXh0LnRvcCkgLyAyIC0gcmVjdC50b3ApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhlaWdodHMucHVzaChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIGEgbGluZSBtYXAgKG1hcHBpbmcgY2hhcmFjdGVyIG9mZnNldHMgdG8gdGV4dCBub2RlcykgYW5kIGFcbiAgLy8gbWVhc3VyZW1lbnQgY2FjaGUgZm9yIHRoZSBnaXZlbiBsaW5lIG51bWJlci4gKEEgbGluZSB2aWV3IG1pZ2h0XG4gIC8vIGNvbnRhaW4gbXVsdGlwbGUgbGluZXMgd2hlbiBjb2xsYXBzZWQgcmFuZ2VzIGFyZSBwcmVzZW50LilcbiAgZnVuY3Rpb24gbWFwRnJvbUxpbmVWaWV3KGxpbmVWaWV3LCBsaW5lLCBsaW5lTikge1xuICAgIGlmIChsaW5lVmlldy5saW5lID09IGxpbmUpXG4gICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBpKyspXG4gICAgICB7IGlmIChsaW5lVmlldy5yZXN0W2ldID09IGxpbmUpXG4gICAgICAgIHsgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldfSB9IH1cbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSQxKyspXG4gICAgICB7IGlmIChsaW5lTm8obGluZVZpZXcucmVzdFtpJDFdKSA+IGxpbmVOKVxuICAgICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaSQxXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2kkMV0sIGJlZm9yZTogdHJ1ZX0gfSB9XG4gIH1cblxuICAvLyBSZW5kZXIgYSBsaW5lIGludG8gdGhlIGhpZGRlbiBub2RlIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNlZFxuICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LlxuICBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7XG4gICAgbGluZSA9IHZpc3VhbExpbmUobGluZSk7XG4gICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpO1xuICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IExpbmVWaWV3KGNtLmRvYywgbGluZSwgbGluZU4pO1xuICAgIHZpZXcubGluZU4gPSBsaW5lTjtcbiAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7XG4gICAgdmlldy50ZXh0ID0gYnVpbHQucHJlO1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubGluZU1lYXN1cmUsIGJ1aWx0LnByZSk7XG4gICAgcmV0dXJuIHZpZXdcbiAgfVxuXG4gIC8vIEdldCBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHR9IGJveCAoaW4gbGluZS1sb2NhbCBjb29yZGluYXRlcylcbiAgLy8gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLlxuICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGJpYXMpIHtcbiAgICByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKSwgY2gsIGJpYXMpXG4gIH1cblxuICAvLyBGaW5kIGEgbGluZSB2aWV3IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLlxuICBmdW5jdGlvbiBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKSB7XG4gICAgaWYgKGxpbmVOID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgbGluZU4gPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildIH1cbiAgICB2YXIgZXh0ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgIGlmIChleHQgJiYgbGluZU4gPj0gZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IHJldHVybiBleHQgfVxuICB9XG5cbiAgLy8gTWVhc3VyZW1lbnQgY2FuIGJlIHNwbGl0IGluIHR3byBzdGVwcywgdGhlIHNldC11cCB3b3JrIHRoYXRcbiAgLy8gYXBwbGllcyB0byB0aGUgd2hvbGUgbGluZSwgYW5kIHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgYWN0dWFsXG4gIC8vIGNoYXJhY3Rlci4gRnVuY3Rpb25zIGxpa2UgY29vcmRzQ2hhciwgdGhhdCBuZWVkIHRvIGRvIGEgbG90IG9mXG4gIC8vIG1lYXN1cmVtZW50cyBpbiBhIHJvdywgY2FuIHRodXMgZW5zdXJlIHRoYXQgdGhlIHNldC11cCB3b3JrIGlzXG4gIC8vIG9ubHkgZG9uZSBvbmNlLlxuICBmdW5jdGlvbiBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpIHtcbiAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7XG4gICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKTtcbiAgICBpZiAodmlldyAmJiAhdmlldy50ZXh0KSB7XG4gICAgICB2aWV3ID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZpZXcgJiYgdmlldy5jaGFuZ2VzKSB7XG4gICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgdmlldywgbGluZU4sIGdldERpbWVuc2lvbnMoY20pKTtcbiAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF2aWV3KVxuICAgICAgeyB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7IH1cblxuICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIGxpbmVOKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCxcbiAgICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNhY2hlLCBiZWZvcmU6IGluZm8uYmVmb3JlLFxuICAgICAgaGFzSGVpZ2h0czogZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBHaXZlbiBhIHByZXBhcmVkIG1lYXN1cmVtZW50IG9iamVjdCwgbWVhc3VyZXMgdGhlIHBvc2l0aW9uIG9mIGFuXG4gIC8vIGFjdHVhbCBjaGFyYWN0ZXIgKG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUpLlxuICBmdW5jdGlvbiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMsIHZhckhlaWdodCkge1xuICAgIGlmIChwcmVwYXJlZC5iZWZvcmUpIHsgY2ggPSAtMTsgfVxuICAgIHZhciBrZXkgPSBjaCArIChiaWFzIHx8IFwiXCIpLCBmb3VuZDtcbiAgICBpZiAocHJlcGFyZWQuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZm91bmQgPSBwcmVwYXJlZC5jYWNoZVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXByZXBhcmVkLnJlY3QpXG4gICAgICAgIHsgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgfVxuICAgICAgaWYgKCFwcmVwYXJlZC5oYXNIZWlnaHRzKSB7XG4gICAgICAgIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBwcmVwYXJlZC52aWV3LCBwcmVwYXJlZC5yZWN0KTtcbiAgICAgICAgcHJlcGFyZWQuaGFzSGVpZ2h0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3VuZCA9IG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcyk7XG4gICAgICBpZiAoIWZvdW5kLmJvZ3VzKSB7IHByZXBhcmVkLmNhY2hlW2tleV0gPSBmb3VuZDsgfVxuICAgIH1cbiAgICByZXR1cm4ge2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCxcbiAgICAgICAgICAgIHRvcDogdmFySGVpZ2h0ID8gZm91bmQucnRvcCA6IGZvdW5kLnRvcCxcbiAgICAgICAgICAgIGJvdHRvbTogdmFySGVpZ2h0ID8gZm91bmQucmJvdHRvbSA6IGZvdW5kLmJvdHRvbX1cbiAgfVxuXG4gIHZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9O1xuXG4gIGZ1bmN0aW9uIG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAobWFwLCBjaCwgYmlhcykge1xuICAgIHZhciBub2RlLCBzdGFydCwgZW5kLCBjb2xsYXBzZSwgbVN0YXJ0LCBtRW5kO1xuICAgIC8vIEZpcnN0LCBzZWFyY2ggdGhlIGxpbmUgbWFwIGZvciB0aGUgdGV4dCBub2RlIGNvcnJlc3BvbmRpbmcgdG8sXG4gICAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRhcmdldCBjaGFyYWN0ZXIuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIG1TdGFydCA9IG1hcFtpXTtcbiAgICAgIG1FbmQgPSBtYXBbaSArIDFdO1xuICAgICAgaWYgKGNoIDwgbVN0YXJ0KSB7XG4gICAgICAgIHN0YXJ0ID0gMDsgZW5kID0gMTtcbiAgICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPCBtRW5kKSB7XG4gICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7XG4gICAgICAgIGVuZCA9IHN0YXJ0ICsgMTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVuZ3RoIC0gMyB8fCBjaCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkge1xuICAgICAgICBlbmQgPSBtRW5kIC0gbVN0YXJ0O1xuICAgICAgICBzdGFydCA9IGVuZCAtIDE7XG4gICAgICAgIGlmIChjaCA+PSBtRW5kKSB7IGNvbGxhcHNlID0gXCJyaWdodFwiOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbWFwW2kgKyAyXTtcbiAgICAgICAgaWYgKG1TdGFydCA9PSBtRW5kICYmIGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/IFwibGVmdFwiIDogXCJyaWdodFwiKSlcbiAgICAgICAgICB7IGNvbGxhcHNlID0gYmlhczsgfVxuICAgICAgICBpZiAoYmlhcyA9PSBcImxlZnRcIiAmJiBzdGFydCA9PSAwKVxuICAgICAgICAgIHsgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBbaSAtIDNdICYmIG1hcFtpIC0gMV0uaW5zZXJ0TGVmdCkge1xuICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAtPSAzKSArIDJdO1xuICAgICAgICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICAgICAgICB9IH1cbiAgICAgICAgaWYgKGJpYXMgPT0gXCJyaWdodFwiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpXG4gICAgICAgICAgeyB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYmIG1hcFtpICsgM10gPT0gbWFwW2kgKyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7XG4gICAgICAgICAgICBub2RlID0gbWFwWyhpICs9IDMpICsgMl07XG4gICAgICAgICAgICBjb2xsYXBzZSA9IFwicmlnaHRcIjtcbiAgICAgICAgICB9IH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtub2RlOiBub2RlLCBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBjb2xsYXBzZTogY29sbGFwc2UsIGNvdmVyU3RhcnQ6IG1TdGFydCwgY292ZXJFbmQ6IG1FbmR9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVc2VmdWxSZWN0KHJlY3RzLCBiaWFzKSB7XG4gICAgdmFyIHJlY3QgPSBudWxsUmVjdDtcbiAgICBpZiAoYmlhcyA9PSBcImxlZnRcIikgeyBmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKHJlY3QgPSByZWN0c1tpXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgICB9IH0gZWxzZSB7IGZvciAodmFyIGkkMSA9IHJlY3RzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSkge1xuICAgICAgaWYgKChyZWN0ID0gcmVjdHNbaSQxXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgICB9IH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgZnVuY3Rpb24gbWVhc3VyZUNoYXJJbm5lcihjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7XG4gICAgdmFyIHBsYWNlID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChwcmVwYXJlZC5tYXAsIGNoLCBiaWFzKTtcbiAgICB2YXIgbm9kZSA9IHBsYWNlLm5vZGUsIHN0YXJ0ID0gcGxhY2Uuc3RhcnQsIGVuZCA9IHBsYWNlLmVuZCwgY29sbGFwc2UgPSBwbGFjZS5jb2xsYXBzZTtcblxuICAgIHZhciByZWN0O1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMpIHsgLy8gSWYgaXQgaXMgYSB0ZXh0IG5vZGUsIHVzZSBhIHJhbmdlIHRvIHJldHJpZXZlIHRoZSBjb29yZGluYXRlcy5cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IDQ7IGkkMSsrKSB7IC8vIFJldHJ5IGEgbWF4aW11bSBvZiA0IHRpbWVzIHdoZW4gbm9uc2Vuc2UgcmVjdGFuZ2xlcyBhcmUgcmV0dXJuZWRcbiAgICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBzdGFydCkpKSB7IC0tc3RhcnQ7IH1cbiAgICAgICAgd2hpbGUgKHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQgPCBwbGFjZS5jb3ZlckVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgZW5kKSkpIHsgKytlbmQ7IH1cbiAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5ICYmIHN0YXJ0ID09IDAgJiYgZW5kID09IHBsYWNlLmNvdmVyRW5kIC0gcGxhY2UuY292ZXJTdGFydClcbiAgICAgICAgICB7IHJlY3QgPSBub2RlLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgcmVjdCA9IGdldFVzZWZ1bFJlY3QocmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Q2xpZW50UmVjdHMoKSwgYmlhcyk7IH1cbiAgICAgICAgaWYgKHJlY3QubGVmdCB8fCByZWN0LnJpZ2h0IHx8IHN0YXJ0ID09IDApIHsgYnJlYWsgfVxuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgICAgc3RhcnQgPSBzdGFydCAtIDE7XG4gICAgICAgIGNvbGxhcHNlID0gXCJyaWdodFwiO1xuICAgICAgfVxuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgeyByZWN0ID0gbWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyhjbS5kaXNwbGF5Lm1lYXN1cmUsIHJlY3QpOyB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXQgaXMgYSB3aWRnZXQsIHNpbXBseSBnZXQgdGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdldC5cbiAgICAgIGlmIChzdGFydCA+IDApIHsgY29sbGFwc2UgPSBiaWFzID0gXCJyaWdodFwiOyB9XG4gICAgICB2YXIgcmVjdHM7XG4gICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpKS5sZW5ndGggPiAxKVxuICAgICAgICB7IHJlY3QgPSByZWN0c1tiaWFzID09IFwicmlnaHRcIiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAwXTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyB9XG4gICAgfVxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiAhc3RhcnQgJiYgKCFyZWN0IHx8ICFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpKSB7XG4gICAgICB2YXIgclNwYW4gPSBub2RlLnBhcmVudE5vZGUuZ2V0Q2xpZW50UmVjdHMoKVswXTtcbiAgICAgIGlmIChyU3BhbilcbiAgICAgICAgeyByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219OyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmVjdCA9IG51bGxSZWN0OyB9XG4gICAgfVxuXG4gICAgdmFyIHJ0b3AgPSByZWN0LnRvcCAtIHByZXBhcmVkLnJlY3QudG9wLCByYm90ID0gcmVjdC5ib3R0b20gLSBwcmVwYXJlZC5yZWN0LnRvcDtcbiAgICB2YXIgbWlkID0gKHJ0b3AgKyByYm90KSAvIDI7XG4gICAgdmFyIGhlaWdodHMgPSBwcmVwYXJlZC52aWV3Lm1lYXN1cmUuaGVpZ2h0cztcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgIHsgaWYgKG1pZCA8IGhlaWdodHNbaV0pIHsgYnJlYWsgfSB9XG4gICAgdmFyIHRvcCA9IGkgPyBoZWlnaHRzW2kgLSAxXSA6IDAsIGJvdCA9IGhlaWdodHNbaV07XG4gICAgdmFyIHJlc3VsdCA9IHtsZWZ0OiAoY29sbGFwc2UgPT0gXCJyaWdodFwiID8gcmVjdC5yaWdodCA6IHJlY3QubGVmdCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICByaWdodDogKGNvbGxhcHNlID09IFwibGVmdFwiID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICB0b3A6IHRvcCwgYm90dG9tOiBib3R9O1xuICAgIGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSB7IHJlc3VsdC5ib2d1cyA9IHRydWU7IH1cbiAgICBpZiAoIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSkgeyByZXN1bHQucnRvcCA9IHJ0b3A7IHJlc3VsdC5yYm90dG9tID0gcmJvdDsgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIGJvdW5kaW5nIGNsaWVudCByZWN0cyBvbiByYW5nZXMgYmVpbmdcbiAgLy8gcmV0dXJuZWQgaW5jb3JyZWN0bHkgd2hlbiB6b29tZWQgb24gSUUxMCBhbmQgYmVsb3cuXG4gIGZ1bmN0aW9uIG1heWJlVXBkYXRlUmVjdEZvclpvb21pbmcobWVhc3VyZSwgcmVjdCkge1xuICAgIGlmICghd2luZG93LnNjcmVlbiB8fCBzY3JlZW4ubG9naWNhbFhEUEkgPT0gbnVsbCB8fFxuICAgICAgICBzY3JlZW4ubG9naWNhbFhEUEkgPT0gc2NyZWVuLmRldmljZVhEUEkgfHwgIWhhc0JhZFpvb21lZFJlY3RzKG1lYXN1cmUpKVxuICAgICAgeyByZXR1cm4gcmVjdCB9XG4gICAgdmFyIHNjYWxlWCA9IHNjcmVlbi5sb2dpY2FsWERQSSAvIHNjcmVlbi5kZXZpY2VYRFBJO1xuICAgIHZhciBzY2FsZVkgPSBzY3JlZW4ubG9naWNhbFlEUEkgLyBzY3JlZW4uZGV2aWNlWURQSTtcbiAgICByZXR1cm4ge2xlZnQ6IHJlY3QubGVmdCAqIHNjYWxlWCwgcmlnaHQ6IHJlY3QucmlnaHQgKiBzY2FsZVgsXG4gICAgICAgICAgICB0b3A6IHJlY3QudG9wICogc2NhbGVZLCBib3R0b206IHJlY3QuYm90dG9tICogc2NhbGVZfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihsaW5lVmlldykge1xuICAgIGlmIChsaW5lVmlldy5tZWFzdXJlKSB7XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBudWxsO1xuICAgICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgICB7IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldID0ge307IH0gfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pIHtcbiAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZSA9IG51bGw7XG4gICAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5lTWVhc3VyZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspXG4gICAgICB7IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IoY20uZGlzcGxheS52aWV3W2ldKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHtcbiAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKTtcbiAgICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7IH1cbiAgICBjbS5kaXNwbGF5LmxpbmVOdW1DaGFycyA9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBwYWdlU2Nyb2xsWCgpIHtcbiAgICAvLyBXb3JrIGFyb3VuZCBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00ODkyMDZcbiAgICAvLyB3aGljaCBjYXVzZXMgcGFnZV9PZmZzZXQgYW5kIGJvdW5kaW5nIGNsaWVudCByZWN0cyB0byB1c2VcbiAgICAvLyBkaWZmZXJlbnQgcmVmZXJlbmNlIHZpZXdwb3J0cyBhbmQgaW52YWxpZGF0ZSBvdXIgY2FsY3VsYXRpb25zLlxuICAgIGlmIChjaHJvbWUgJiYgYW5kcm9pZCkgeyByZXR1cm4gLShkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpbkxlZnQpKSB9XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnRcbiAgfVxuICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHtcbiAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQpIHsgcmV0dXJuIC0oZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpblRvcCkpIH1cbiAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wXG4gIH1cblxuICBmdW5jdGlvbiB3aWRnZXRUb3BIZWlnaHQobGluZU9iaikge1xuICAgIHZhciBoZWlnaHQgPSAwO1xuICAgIGlmIChsaW5lT2JqLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIHsgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92ZSlcbiAgICAgIHsgaGVpZ2h0ICs9IHdpZGdldEhlaWdodChsaW5lT2JqLndpZGdldHNbaV0pOyB9IH0gfVxuICAgIHJldHVybiBoZWlnaHRcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20gbGluZS1sb2NhbFxuICAvLyBjb29yZGluYXRlcyBpbnRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uIENvbnRleHQgbWF5IGJlIG9uZSBvZlxuICAvLyBcImxpbmVcIiwgXCJkaXZcIiAoZGlzcGxheS5saW5lRGl2KSwgXCJsb2NhbFwiLi9udWxsIChlZGl0b3IpLCBcIndpbmRvd1wiLFxuICAvLyBvciBcInBhZ2VcIi5cbiAgZnVuY3Rpb24gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0LCBpbmNsdWRlV2lkZ2V0cykge1xuICAgIGlmICghaW5jbHVkZVdpZGdldHMpIHtcbiAgICAgIHZhciBoZWlnaHQgPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgICByZWN0LnRvcCArPSBoZWlnaHQ7IHJlY3QuYm90dG9tICs9IGhlaWdodDtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT0gXCJsaW5lXCIpIHsgcmV0dXJuIHJlY3QgfVxuICAgIGlmICghY29udGV4dCkgeyBjb250ZXh0ID0gXCJsb2NhbFwiOyB9XG4gICAgdmFyIHlPZmYgPSBoZWlnaHRBdExpbmUobGluZU9iaik7XG4gICAgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiKSB7IHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsgfVxuICAgIGVsc2UgeyB5T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsgfVxuICAgIGlmIChjb250ZXh0ID09IFwicGFnZVwiIHx8IGNvbnRleHQgPT0gXCJ3aW5kb3dcIikge1xuICAgICAgdmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSBcIndpbmRvd1wiID8gMCA6IHBhZ2VTY3JvbGxZKCkpO1xuICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSBcIndpbmRvd1wiID8gMCA6IHBhZ2VTY3JvbGxYKCkpO1xuICAgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjtcbiAgICB9XG4gICAgcmVjdC50b3AgKz0geU9mZjsgcmVjdC5ib3R0b20gKz0geU9mZjtcbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gQ292ZXJ0cyBhIGJveCBmcm9tIFwiZGl2XCIgY29vcmRzIHRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uXG4gIC8vIENvbnRleHQgbWF5IGJlIFwid2luZG93XCIsIFwicGFnZVwiLCBcImRpdlwiLCBvciBcImxvY2FsXCIuL251bGwuXG4gIGZ1bmN0aW9uIGZyb21Db29yZFN5c3RlbShjbSwgY29vcmRzLCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT0gXCJkaXZcIikgeyByZXR1cm4gY29vcmRzIH1cbiAgICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wO1xuICAgIC8vIEZpcnN0IG1vdmUgaW50byBcInBhZ2VcIiBjb29yZGluYXRlIHN5c3RlbVxuICAgIGlmIChjb250ZXh0ID09IFwicGFnZVwiKSB7XG4gICAgICBsZWZ0IC09IHBhZ2VTY3JvbGxYKCk7XG4gICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiIHx8ICFjb250ZXh0KSB7XG4gICAgICB2YXIgbG9jYWxCb3ggPSBjbS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgbGVmdCArPSBsb2NhbEJveC5sZWZ0O1xuICAgICAgdG9wICs9IGxvY2FsQm94LnRvcDtcbiAgICB9XG5cbiAgICB2YXIgbGluZVNwYWNlQm94ID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHtsZWZ0OiBsZWZ0IC0gbGluZVNwYWNlQm94LmxlZnQsIHRvcDogdG9wIC0gbGluZVNwYWNlQm94LnRvcH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgYmlhcykge1xuICAgIGlmICghbGluZU9iaikgeyBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsgfVxuICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIGJpYXMpLCBjb250ZXh0KVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJveCBmb3IgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHdoaWNoIG1heSBoYXZlIGFuXG4gIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3JcbiAgLy8gb24gYSBiaWRpIGJvdW5kYXJ5LlxuICAvLyBBIGN1cnNvciBQb3MobGluZSwgY2hhciwgXCJiZWZvcmVcIikgaXMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmUgYXMgYGNoYXIgLSAxYFxuICAvLyBhbmQgYWZ0ZXIgYGNoYXIgLSAxYCBpbiB3cml0aW5nIG9yZGVyIG9mIGBjaGFyIC0gMWBcbiAgLy8gQSBjdXJzb3IgUG9zKGxpbmUsIGNoYXIsIFwiYWZ0ZXJcIikgaXMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmUgYXMgYGNoYXJgXG4gIC8vIGFuZCBiZWZvcmUgYGNoYXJgIGluIHdyaXRpbmcgb3JkZXIgb2YgYGNoYXJgXG4gIC8vIEV4YW1wbGVzICh1cHBlci1jYXNlIGxldHRlcnMgYXJlIFJUTCwgbG93ZXItY2FzZSBhcmUgTFRSKTpcbiAgLy8gICAgIFBvcygwLCAxLCAuLi4pXG4gIC8vICAgICBiZWZvcmUgICBhZnRlclxuICAvLyBhYiAgICAgYXxiICAgICBhfGJcbiAgLy8gYUIgICAgIGF8QiAgICAgYUJ8XG4gIC8vIEFiICAgICB8QWIgICAgIEF8YlxuICAvLyBBQiAgICAgQnxBICAgICBCfEFcbiAgLy8gRXZlcnkgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEgbGluZSBpcyBjb25zaWRlcmVkIHRvIHN0aWNrXG4gIC8vIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvbiB0aGUgbGluZS5cbiAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7XG4gICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTtcbiAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgeyBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOyB9XG4gICAgZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkge1xuICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoLCByaWdodCA/IFwicmlnaHRcIiA6IFwibGVmdFwiLCB2YXJIZWlnaHQpO1xuICAgICAgaWYgKHJpZ2h0KSB7IG0ubGVmdCA9IG0ucmlnaHQ7IH0gZWxzZSB7IG0ucmlnaHQgPSBtLmxlZnQ7IH1cbiAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNvbnRleHQpXG4gICAgfVxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGNtLmRvYy5kaXJlY3Rpb24pLCBjaCA9IHBvcy5jaCwgc3RpY2t5ID0gcG9zLnN0aWNreTtcbiAgICBpZiAoY2ggPj0gbGluZU9iai50ZXh0Lmxlbmd0aCkge1xuICAgICAgY2ggPSBsaW5lT2JqLnRleHQubGVuZ3RoO1xuICAgICAgc3RpY2t5ID0gXCJiZWZvcmVcIjtcbiAgICB9IGVsc2UgaWYgKGNoIDw9IDApIHtcbiAgICAgIGNoID0gMDtcbiAgICAgIHN0aWNreSA9IFwiYWZ0ZXJcIjtcbiAgICB9XG4gICAgaWYgKCFvcmRlcikgeyByZXR1cm4gZ2V0KHN0aWNreSA9PSBcImJlZm9yZVwiID8gY2ggLSAxIDogY2gsIHN0aWNreSA9PSBcImJlZm9yZVwiKSB9XG5cbiAgICBmdW5jdGlvbiBnZXRCaWRpKGNoLCBwYXJ0UG9zLCBpbnZlcnQpIHtcbiAgICAgIHZhciBwYXJ0ID0gb3JkZXJbcGFydFBvc10sIHJpZ2h0ID0gcGFydC5sZXZlbCA9PSAxO1xuICAgICAgcmV0dXJuIGdldChpbnZlcnQgPyBjaCAtIDEgOiBjaCwgcmlnaHQgIT0gaW52ZXJ0KVxuICAgIH1cbiAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpO1xuICAgIHZhciBvdGhlciA9IGJpZGlPdGhlcjtcbiAgICB2YXIgdmFsID0gZ2V0QmlkaShjaCwgcGFydFBvcywgc3RpY2t5ID09IFwiYmVmb3JlXCIpO1xuICAgIGlmIChvdGhlciAhPSBudWxsKSB7IHZhbC5vdGhlciA9IGdldEJpZGkoY2gsIG90aGVyLCBzdGlja3kgIT0gXCJiZWZvcmVcIik7IH1cbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICAvLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2VkIGZvclxuICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuXG4gIGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHtcbiAgICB2YXIgbGVmdCA9IDA7XG4gICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBsZWZ0ID0gY2hhcldpZHRoKGNtLmRpc3BsYXkpICogcG9zLmNoOyB9XG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpO1xuICAgIHZhciB0b3AgPSBoZWlnaHRBdExpbmUobGluZU9iaikgKyBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpO1xuICAgIHJldHVybiB7bGVmdDogbGVmdCwgcmlnaHQ6IGxlZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVpZ2h0fVxuICB9XG5cbiAgLy8gUG9zaXRpb25zIHJldHVybmVkIGJ5IGNvb3Jkc0NoYXIgY29udGFpbiBzb21lIGV4dHJhIGluZm9ybWF0aW9uLlxuICAvLyB4UmVsIGlzIHRoZSByZWxhdGl2ZSB4IHBvc2l0aW9uIG9mIHRoZSBpbnB1dCBjb29yZGluYXRlcyBjb21wYXJlZFxuICAvLyB0byB0aGUgZm91bmQgcG9zaXRpb24gKHNvIHhSZWwgPiAwIG1lYW5zIHRoZSBjb29yZGluYXRlcyBhcmUgdG9cbiAgLy8gdGhlIHJpZ2h0IG9mIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24sIGZvciBleGFtcGxlKS4gV2hlbiBvdXRzaWRlXG4gIC8vIGlzIHRydWUsIHRoYXQgbWVhbnMgdGhlIGNvb3JkaW5hdGVzIGxpZSBvdXRzaWRlIHRoZSBsaW5lJ3NcbiAgLy8gdmVydGljYWwgcmFuZ2UuXG4gIGZ1bmN0aW9uIFBvc1dpdGhJbmZvKGxpbmUsIGNoLCBzdGlja3ksIG91dHNpZGUsIHhSZWwpIHtcbiAgICB2YXIgcG9zID0gUG9zKGxpbmUsIGNoLCBzdGlja3kpO1xuICAgIHBvcy54UmVsID0geFJlbDtcbiAgICBpZiAob3V0c2lkZSkgeyBwb3Mub3V0c2lkZSA9IG91dHNpZGU7IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuXG4gIC8vIElucHV0IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsIChcImRpdlwiIGNvb3JkaW5hdGUgc3lzdGVtKS5cbiAgZnVuY3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2M7XG4gICAgeSArPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7XG4gICAgaWYgKHkgPCAwKSB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIG51bGwsIC0xLCAtMSkgfVxuICAgIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICAgIGlmIChsaW5lTiA+IGxhc3QpXG4gICAgICB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCwgbnVsbCwgMSwgMSkgfVxuICAgIGlmICh4IDwgMCkgeyB4ID0gMDsgfVxuXG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4pO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU4sIHgsIHkpO1xuICAgICAgdmFyIGNvbGxhcHNlZCA9IGNvbGxhcHNlZFNwYW5Bcm91bmQobGluZU9iaiwgZm91bmQuY2ggKyAoZm91bmQueFJlbCA+IDAgfHwgZm91bmQub3V0c2lkZSA+IDAgPyAxIDogMCkpO1xuICAgICAgaWYgKCFjb2xsYXBzZWQpIHsgcmV0dXJuIGZvdW5kIH1cbiAgICAgIHZhciByYW5nZUVuZCA9IGNvbGxhcHNlZC5maW5kKDEpO1xuICAgICAgaWYgKHJhbmdlRW5kLmxpbmUgPT0gbGluZU4pIHsgcmV0dXJuIHJhbmdlRW5kIH1cbiAgICAgIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4gPSByYW5nZUVuZC5saW5lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB5KSB7XG4gICAgeSAtPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgdmFyIGVuZCA9IGxpbmVPYmoudGV4dC5sZW5ndGg7XG4gICAgdmFyIGJlZ2luID0gZmluZEZpcnN0KGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCAtIDEpLmJvdHRvbSA8PSB5OyB9LCBlbmQsIDApO1xuICAgIGVuZCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gpLnRvcCA+IHk7IH0sIGJlZ2luLCBlbmQpO1xuICAgIHJldHVybiB7YmVnaW46IGJlZ2luLCBlbmQ6IGVuZH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwZWRMaW5lRXh0ZW50Q2hhcihjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpIHtcbiAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgeyBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOyB9XG4gICAgdmFyIHRhcmdldFRvcCA9IGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpLCBcImxpbmVcIikudG9wO1xuICAgIHJldHVybiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXRUb3ApXG4gIH1cblxuICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNpZGUgb2YgYSBib3ggaXMgYWZ0ZXIgdGhlIGdpdmVuXG4gIC8vIGNvb3JkaW5hdGVzLCBpbiB0b3AtdG8tYm90dG9tLCBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICBmdW5jdGlvbiBib3hJc0FmdGVyKGJveCwgeCwgeSwgbGVmdCkge1xuICAgIHJldHVybiBib3guYm90dG9tIDw9IHkgPyBmYWxzZSA6IGJveC50b3AgPiB5ID8gdHJ1ZSA6IChsZWZ0ID8gYm94LmxlZnQgOiBib3gucmlnaHQpID4geFxuICB9XG5cbiAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpIHtcbiAgICAvLyBNb3ZlIHkgaW50byBsaW5lLWxvY2FsIGNvb3JkaW5hdGUgc3BhY2VcbiAgICB5IC09IGhlaWdodEF0TGluZShsaW5lT2JqKTtcbiAgICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTtcbiAgICAvLyBXaGVuIGRpcmVjdGx5IGNhbGxpbmcgYG1lYXN1cmVDaGFyUHJlcGFyZWRgLCB3ZSBoYXZlIHRvIGFkanVzdFxuICAgIC8vIGZvciB0aGUgd2lkZ2V0cyBhdCB0aGlzIGxpbmUuXG4gICAgdmFyIHdpZGdldEhlaWdodCA9IHdpZGdldFRvcEhlaWdodChsaW5lT2JqKTtcbiAgICB2YXIgYmVnaW4gPSAwLCBlbmQgPSBsaW5lT2JqLnRleHQubGVuZ3RoLCBsdHIgPSB0cnVlO1xuXG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiwgY20uZG9jLmRpcmVjdGlvbik7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXNuJ3QgcGxhaW4gbGVmdC10by1yaWdodCB0ZXh0LCBmaXJzdCBmaWd1cmUgb3V0XG4gICAgLy8gd2hpY2ggYmlkaSBzZWN0aW9uIHRoZSBjb29yZGluYXRlcyBmYWxsIGludG8uXG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICB2YXIgcGFydCA9IChjbS5vcHRpb25zLmxpbmVXcmFwcGluZyA/IGNvb3Jkc0JpZGlQYXJ0V3JhcHBlZCA6IGNvb3Jkc0JpZGlQYXJ0KVxuICAgICAgICAgICAgICAgICAgIChjbSwgbGluZU9iaiwgbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KTtcbiAgICAgIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIC8vIFRoZSBhd2t3YXJkIC0xIG9mZnNldHMgYXJlIG5lZWRlZCBiZWNhdXNlIGZpbmRGaXJzdCAoY2FsbGVkXG4gICAgICAvLyBvbiB0aGVzZSBiZWxvdykgd2lsbCB0cmVhdCBpdHMgZmlyc3QgYm91bmQgYXMgaW5jbHVzaXZlLFxuICAgICAgLy8gc2Vjb25kIGFzIGV4Y2x1c2l2ZSwgYnV0IHdlIHdhbnQgdG8gYWN0dWFsbHkgYWRkcmVzcyB0aGVcbiAgICAgIC8vIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnQncyByYW5nZVxuICAgICAgYmVnaW4gPSBsdHIgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMTtcbiAgICAgIGVuZCA9IGx0ciA/IHBhcnQudG8gOiBwYXJ0LmZyb20gLSAxO1xuICAgIH1cblxuICAgIC8vIEEgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hvc2UgYm91bmRpbmcgYm94XG4gICAgLy8gc3RhcnRzIGFmdGVyIHRoZSBjb29yZGluYXRlcy4gSWYgd2UgcnVuIGFjcm9zcyBhbnkgd2hvc2UgYm94IHdyYXBcbiAgICAvLyB0aGUgY29vcmRpbmF0ZXMsIHN0b3JlIHRoYXQuXG4gICAgdmFyIGNoQXJvdW5kID0gbnVsbCwgYm94QXJvdW5kID0gbnVsbDtcbiAgICB2YXIgY2ggPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGNoKSB7XG4gICAgICB2YXIgYm94ID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCk7XG4gICAgICBib3gudG9wICs9IHdpZGdldEhlaWdodDsgYm94LmJvdHRvbSArPSB3aWRnZXRIZWlnaHQ7XG4gICAgICBpZiAoIWJveElzQWZ0ZXIoYm94LCB4LCB5LCBmYWxzZSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGlmIChib3gudG9wIDw9IHkgJiYgYm94LmxlZnQgPD0geCkge1xuICAgICAgICBjaEFyb3VuZCA9IGNoO1xuICAgICAgICBib3hBcm91bmQgPSBib3g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIGJlZ2luLCBlbmQpO1xuXG4gICAgdmFyIGJhc2VYLCBzdGlja3ksIG91dHNpZGUgPSBmYWxzZTtcbiAgICAvLyBJZiBhIGJveCBhcm91bmQgdGhlIGNvb3JkaW5hdGVzIHdhcyBmb3VuZCwgdXNlIHRoYXRcbiAgICBpZiAoYm94QXJvdW5kKSB7XG4gICAgICAvLyBEaXN0aW5ndWlzaCBjb29yZGluYXRlcyBuZWFyZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2lkZSBvZiB0aGUgYm94XG4gICAgICB2YXIgYXRMZWZ0ID0geCAtIGJveEFyb3VuZC5sZWZ0IDwgYm94QXJvdW5kLnJpZ2h0IC0geCwgYXRTdGFydCA9IGF0TGVmdCA9PSBsdHI7XG4gICAgICBjaCA9IGNoQXJvdW5kICsgKGF0U3RhcnQgPyAwIDogMSk7XG4gICAgICBzdGlja3kgPSBhdFN0YXJ0ID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICAgIGJhc2VYID0gYXRMZWZ0ID8gYm94QXJvdW5kLmxlZnQgOiBib3hBcm91bmQucmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIChBZGp1c3QgZm9yIGV4dGVuZGVkIGJvdW5kLCBpZiBuZWNlc3NhcnkuKVxuICAgICAgaWYgKCFsdHIgJiYgKGNoID09IGVuZCB8fCBjaCA9PSBiZWdpbikpIHsgY2grKzsgfVxuICAgICAgLy8gVG8gZGV0ZXJtaW5lIHdoaWNoIHNpZGUgdG8gYXNzb2NpYXRlIHdpdGgsIGdldCB0aGUgYm94IHRvIHRoZVxuICAgICAgLy8gbGVmdCBvZiB0aGUgY2hhcmFjdGVyIGFuZCBjb21wYXJlIGl0J3MgdmVydGljYWwgcG9zaXRpb24gdG8gdGhlXG4gICAgICAvLyBjb29yZGluYXRlc1xuICAgICAgc3RpY2t5ID0gY2ggPT0gMCA/IFwiYWZ0ZXJcIiA6IGNoID09IGxpbmVPYmoudGV4dC5sZW5ndGggPyBcImJlZm9yZVwiIDpcbiAgICAgICAgKG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2ggLSAobHRyID8gMSA6IDApKS5ib3R0b20gKyB3aWRnZXRIZWlnaHQgPD0geSkgPT0gbHRyID9cbiAgICAgICAgXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICAgIC8vIE5vdyBnZXQgYWNjdXJhdGUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgcGxhY2UsIGluIG9yZGVyIHRvIGdldCBhXG4gICAgICAvLyBiYXNlIFggcG9zaXRpb25cbiAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoLCBzdGlja3kpLCBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKTtcbiAgICAgIGJhc2VYID0gY29vcmRzLmxlZnQ7XG4gICAgICBvdXRzaWRlID0geSA8IGNvb3Jkcy50b3AgPyAtMSA6IHkgPj0gY29vcmRzLmJvdHRvbSA/IDEgOiAwO1xuICAgIH1cblxuICAgIGNoID0gc2tpcEV4dGVuZGluZ0NoYXJzKGxpbmVPYmoudGV4dCwgY2gsIDEpO1xuICAgIHJldHVybiBQb3NXaXRoSW5mbyhsaW5lTm8sIGNoLCBzdGlja3ksIG91dHNpZGUsIHggLSBiYXNlWClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3Jkc0JpZGlQYXJ0KGNtLCBsaW5lT2JqLCBsaW5lTm8sIHByZXBhcmVkTWVhc3VyZSwgb3JkZXIsIHgsIHkpIHtcbiAgICAvLyBCaWRpIHBhcnRzIGFyZSBzb3J0ZWQgbGVmdC10by1yaWdodCwgYW5kIGluIGEgbm9uLWxpbmUtd3JhcHBpbmdcbiAgICAvLyBzaXR1YXRpb24sIHdlIGNhbiB0YWtlIHRoaXMgb3JkZXJpbmcgdG8gY29ycmVzcG9uZCB0byB0aGUgdmlzdWFsXG4gICAgLy8gb3JkZXJpbmcuIFRoaXMgZmluZHMgdGhlIGZpcnN0IHBhcnQgd2hvc2UgZW5kIGlzIGFmdGVyIHRoZSBnaXZlblxuICAgIC8vIGNvb3JkaW5hdGVzLlxuICAgIHZhciBpbmRleCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoaSkge1xuICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXSwgbHRyID0gcGFydC5sZXZlbCAhPSAxO1xuICAgICAgcmV0dXJuIGJveElzQWZ0ZXIoY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBsdHIgPyBwYXJ0LnRvIDogcGFydC5mcm9tLCBsdHIgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKSwgeCwgeSwgdHJ1ZSlcbiAgICB9LCAwLCBvcmRlci5sZW5ndGggLSAxKTtcbiAgICB2YXIgcGFydCA9IG9yZGVyW2luZGV4XTtcbiAgICAvLyBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJ0LCB0aGUgcGFydCdzIHN0YXJ0IGlzIGFsc28gYWZ0ZXJcbiAgICAvLyB0aGUgY29vcmRpbmF0ZXMsIGFuZCB0aGUgY29vcmRpbmF0ZXMgYXJlbid0IG9uIHRoZSBzYW1lIGxpbmUgYXNcbiAgICAvLyB0aGF0IHN0YXJ0LCBtb3ZlIG9uZSBwYXJ0IGJhY2suXG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdmFyIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIHZhciBzdGFydCA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgbHRyID8gcGFydC5mcm9tIDogcGFydC50bywgbHRyID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5lXCIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSk7XG4gICAgICBpZiAoYm94SXNBZnRlcihzdGFydCwgeCwgeSwgdHJ1ZSkgJiYgc3RhcnQudG9wID4geSlcbiAgICAgICAgeyBwYXJ0ID0gb3JkZXJbaW5kZXggLSAxXTsgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydFxuICB9XG5cbiAgZnVuY3Rpb24gY29vcmRzQmlkaVBhcnRXcmFwcGVkKGNtLCBsaW5lT2JqLCBfbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KSB7XG4gICAgLy8gSW4gYSB3cmFwcGVkIGxpbmUsIHJ0bCB0ZXh0IG9uIHdyYXBwaW5nIGJvdW5kYXJpZXMgY2FuIGRvIHRoaW5nc1xuICAgIC8vIHRoYXQgZG9uJ3QgY29ycmVzcG9uZCB0byB0aGUgb3JkZXJpbmcgaW4gb3VyIGBvcmRlcmAgYXJyYXkgYXRcbiAgICAvLyBhbGwsIHNvIGEgYmluYXJ5IHNlYXJjaCBkb2Vzbid0IHdvcmssIGFuZCB3ZSB3YW50IHRvIHJldHVybiBhXG4gICAgLy8gcGFydCB0aGF0IG9ubHkgc3BhbnMgb25lIGxpbmUgc28gdGhhdCB0aGUgYmluYXJ5IHNlYXJjaCBpblxuICAgIC8vIGNvb3Jkc0NoYXJJbm5lciBpcyBzYWZlLiBBcyBzdWNoLCB3ZSBmaXJzdCBmaW5kIHRoZSBleHRlbnQgb2YgdGhlXG4gICAgLy8gd3JhcHBlZCBsaW5lLCBhbmQgdGhlbiBkbyBhIGZsYXQgc2VhcmNoIGluIHdoaWNoIHdlIGRpc2NhcmQgYW55XG4gICAgLy8gc3BhbnMgdGhhdCBhcmVuJ3Qgb24gdGhlIGxpbmUuXG4gICAgdmFyIHJlZiA9IHdyYXBwZWRMaW5lRXh0ZW50KGNtLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUsIHkpO1xuICAgIHZhciBiZWdpbiA9IHJlZi5iZWdpbjtcbiAgICB2YXIgZW5kID0gcmVmLmVuZDtcbiAgICBpZiAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGVuZCAtIDEpKSkgeyBlbmQtLTsgfVxuICAgIHZhciBwYXJ0ID0gbnVsbCwgY2xvc2VzdERpc3QgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwID0gb3JkZXJbaV07XG4gICAgICBpZiAocC5mcm9tID49IGVuZCB8fCBwLnRvIDw9IGJlZ2luKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBsdHIgPSBwLmxldmVsICE9IDE7XG4gICAgICB2YXIgZW5kWCA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgbHRyID8gTWF0aC5taW4oZW5kLCBwLnRvKSAtIDEgOiBNYXRoLm1heChiZWdpbiwgcC5mcm9tKSkucmlnaHQ7XG4gICAgICAvLyBXZWlnaCBhZ2FpbnN0IHNwYW5zIGVuZGluZyBiZWZvcmUgdGhpcywgc28gdGhhdCB0aGV5IGFyZSBvbmx5XG4gICAgICAvLyBwaWNrZWQgaWYgbm90aGluZyBlbmRzIGFmdGVyXG4gICAgICB2YXIgZGlzdCA9IGVuZFggPCB4ID8geCAtIGVuZFggKyAxZTkgOiBlbmRYIC0geDtcbiAgICAgIGlmICghcGFydCB8fCBjbG9zZXN0RGlzdCA+IGRpc3QpIHtcbiAgICAgICAgcGFydCA9IHA7XG4gICAgICAgIGNsb3Nlc3REaXN0ID0gZGlzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwYXJ0KSB7IHBhcnQgPSBvcmRlcltvcmRlci5sZW5ndGggLSAxXTsgfVxuICAgIC8vIENsaXAgdGhlIHBhcnQgdG8gdGhlIHdyYXBwZWQgbGluZS5cbiAgICBpZiAocGFydC5mcm9tIDwgYmVnaW4pIHsgcGFydCA9IHtmcm9tOiBiZWdpbiwgdG86IHBhcnQudG8sIGxldmVsOiBwYXJ0LmxldmVsfTsgfVxuICAgIGlmIChwYXJ0LnRvID4gZW5kKSB7IHBhcnQgPSB7ZnJvbTogcGFydC5mcm9tLCB0bzogZW5kLCBsZXZlbDogcGFydC5sZXZlbH07IH1cbiAgICByZXR1cm4gcGFydFxuICB9XG5cbiAgdmFyIG1lYXN1cmVUZXh0O1xuICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IHRleHQgaGVpZ2h0LlxuICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KGRpc3BsYXkpIHtcbiAgICBpZiAoZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ICE9IG51bGwpIHsgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCB9XG4gICAgaWYgKG1lYXN1cmVUZXh0ID09IG51bGwpIHtcbiAgICAgIG1lYXN1cmVUZXh0ID0gZWx0KFwicHJlXCIsIG51bGwsIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgICAvLyBNZWFzdXJlIGEgYnVuY2ggb2YgbGluZXMsIGZvciBicm93c2VycyB0aGF0IGNvbXB1dGVcbiAgICAgIC8vIGZyYWN0aW9uYWwgaGVpZ2h0cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDk7ICsraSkge1xuICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChlbHQoXCJiclwiKSk7XG4gICAgICB9XG4gICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgIH1cbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIG1lYXN1cmVUZXh0KTtcbiAgICB2YXIgaGVpZ2h0ID0gbWVhc3VyZVRleHQub2Zmc2V0SGVpZ2h0IC8gNTA7XG4gICAgaWYgKGhlaWdodCA+IDMpIHsgZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gaGVpZ2h0OyB9XG4gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKTtcbiAgICByZXR1cm4gaGVpZ2h0IHx8IDFcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHdpZHRoLlxuICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxheSkge1xuICAgIGlmIChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAhPSBudWxsKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCB9XG4gICAgdmFyIGFuY2hvciA9IGVsdChcInNwYW5cIiwgXCJ4eHh4eHh4eHh4XCIpO1xuICAgIHZhciBwcmUgPSBlbHQoXCJwcmVcIiwgW2FuY2hvcl0sIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpO1xuICAgIHZhciByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDEwO1xuICAgIGlmICh3aWR0aCA+IDIpIHsgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsgfVxuICAgIHJldHVybiB3aWR0aCB8fCAxMFxuICB9XG5cbiAgLy8gRG8gYSBidWxrLXJlYWQgb2YgdGhlIERPTSBwb3NpdGlvbnMgYW5kIHNpemVzIG5lZWRlZCB0byBkcmF3IHRoZVxuICAvLyB2aWV3LCBzbyB0aGF0IHdlIGRvbid0IGludGVybGVhdmUgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgRE9NLlxuICBmdW5jdGlvbiBnZXREaW1lbnNpb25zKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBsZWZ0ID0ge30sIHdpZHRoID0ge307XG4gICAgdmFyIGd1dHRlckxlZnQgPSBkLmd1dHRlcnMuY2xpZW50TGVmdDtcbiAgICBmb3IgKHZhciBuID0gZC5ndXR0ZXJzLmZpcnN0Q2hpbGQsIGkgPSAwOyBuOyBuID0gbi5uZXh0U2libGluZywgKytpKSB7XG4gICAgICB2YXIgaWQgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2ldLmNsYXNzTmFtZTtcbiAgICAgIGxlZnRbaWRdID0gbi5vZmZzZXRMZWZ0ICsgbi5jbGllbnRMZWZ0ICsgZ3V0dGVyTGVmdDtcbiAgICAgIHdpZHRoW2lkXSA9IG4uY2xpZW50V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiB7Zml4ZWRQb3M6IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGQpLFxuICAgICAgICAgICAgZ3V0dGVyVG90YWxXaWR0aDogZC5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgZ3V0dGVyTGVmdDogbGVmdCxcbiAgICAgICAgICAgIGd1dHRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIHdyYXBwZXJXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRofVxuICB9XG5cbiAgLy8gQ29tcHV0ZXMgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAvLyBidXQgdXNpbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IHRvIGdldCBhIHN1Yi1waXhlbC1hY2N1cmF0ZVxuICAvLyByZXN1bHQuXG4gIGZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHtcbiAgICByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBlc3RpbWF0ZXMgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHRvIHVzZSBhc1xuICAvLyBmaXJzdCBhcHByb3hpbWF0aW9uIHVudGlsIHRoZSBsaW5lIGJlY29tZXMgdmlzaWJsZSAoYW5kIGlzIHRodXNcbiAgLy8gcHJvcGVybHkgbWVhc3VyYWJsZSkuXG4gIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7XG4gICAgdmFyIHRoID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KSwgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgubWF4KDUsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlzcGxheSkgLSAzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkgeyByZXR1cm4gMCB9XG5cbiAgICAgIHZhciB3aWRnZXRzSGVpZ2h0ID0gMDtcbiAgICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQpIHsgd2lkZ2V0c0hlaWdodCArPSBsaW5lLndpZGdldHNbaV0uaGVpZ2h0OyB9XG4gICAgICB9IH1cblxuICAgICAgaWYgKHdyYXBwaW5nKVxuICAgICAgICB7IHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aCB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aCB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIGVzdCA9IGVzdGltYXRlSGVpZ2h0KGNtKTtcbiAgICBkb2MuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIGVzdEhlaWdodCA9IGVzdChsaW5lKTtcbiAgICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOyB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBHaXZlbiBhIG1vdXNlIGV2ZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsXG4gIC8vIGlzIGZhbHNlLCBpdCBjaGVja3Mgd2hldGhlciBhIGd1dHRlciBvciBzY3JvbGxiYXIgd2FzIGNsaWNrZWQsXG4gIC8vIGFuZCByZXR1cm5zIG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkgcmVjdGFuZ3VsYXJcbiAgLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hhcmFjdGVyIHBvc2l0aW9uIGV2ZW4gZm9yXG4gIC8vIGNvb3JkaW5hdGVzIGJleW9uZCB0aGUgcmlnaHQgb2YgdGhlIHRleHQuXG4gIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwgZm9yUmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoIWxpYmVyYWwgJiYgZV90YXJnZXQoZSkuZ2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIikgPT0gXCJ0cnVlXCIpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgdmFyIHgsIHksIHNwYWNlID0gZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LlxuICAgIHRyeSB7IHggPSBlLmNsaWVudFggLSBzcGFjZS5sZWZ0OyB5ID0gZS5jbGllbnRZIC0gc3BhY2UudG9wOyB9XG4gICAgY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGluZTtcbiAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA+IDAgJiYgKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHtcbiAgICAgIHZhciBjb2xEaWZmID0gY291bnRDb2x1bW4obGluZSwgbGluZS5sZW5ndGgsIGNtLm9wdGlvbnMudGFiU2l6ZSkgLSBsaW5lLmxlbmd0aDtcbiAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSAtIGNvbERpZmYpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb3Jkc1xuICB9XG5cbiAgLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBsaW5lLiBSZXR1cm4gbnVsbFxuICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0IHZpc2libGUuXG4gIGZ1bmN0aW9uIGZpbmRWaWV3SW5kZXgoY20sIG4pIHtcbiAgICBpZiAobiA+PSBjbS5kaXNwbGF5LnZpZXdUbykgeyByZXR1cm4gbnVsbCB9XG4gICAgbiAtPSBjbS5kaXNwbGF5LnZpZXdGcm9tO1xuICAgIGlmIChuIDwgMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBuIC09IHZpZXdbaV0uc2l6ZTtcbiAgICAgIGlmIChuIDwgMCkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBhIGdpdmVuIGNoYW5nZSB0byB0aGVcbiAgLy8gZG9jdW1lbnQuIEZyb20gYW5kIHRvIGFyZSBpbiBwcmUtY2hhbmdlIGNvb3JkaW5hdGVzLiBMZW5kaWZmIGlzXG4gIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlzXG4gIC8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheVxuICAvLyBsaW5lcyBhcmUgZGl2aWRlZCBpbnRvIHZpc3VhbCBsaW5lcy4gcmVnTGluZUNoYW5nZSAoYmVsb3cpXG4gIC8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLlxuICBmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7XG4gICAgaWYgKGZyb20gPT0gbnVsbCkgeyBmcm9tID0gY20uZG9jLmZpcnN0OyB9XG4gICAgaWYgKHRvID09IG51bGwpIHsgdG8gPSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZTsgfVxuICAgIGlmICghbGVuZGlmZikgeyBsZW5kaWZmID0gMDsgfVxuXG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIGlmIChsZW5kaWZmICYmIHRvIDwgZGlzcGxheS52aWV3VG8gJiZcbiAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID4gZnJvbSkpXG4gICAgICB7IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOyB9XG5cbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG5cbiAgICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBDaGFuZ2UgYWZ0ZXJcbiAgICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucyAmJiB2aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKSA8IGRpc3BsYXkudmlld1RvKVxuICAgICAgICB7IHJlc2V0VmlldyhjbSk7IH1cbiAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZVxuICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7XG4gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwXG4gICAgICByZXNldFZpZXcoY20pO1xuICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwXG4gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0KSB7XG4gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5kZXgpO1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOO1xuICAgICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRvbSBvdmVybGFwXG4gICAgICB2YXIgY3V0JDEgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICBpZiAoY3V0JDEpIHtcbiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dCQxLmluZGV4KTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQkMS5saW5lTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGVcbiAgICAgIHZhciBjdXRUb3AgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICB2YXIgY3V0Qm90ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkge1xuICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0VG9wLmluZGV4KVxuICAgICAgICAgIC5jb25jYXQoYnVpbGRWaWV3QXJyYXkoY20sIGN1dFRvcC5saW5lTiwgY3V0Qm90LmxpbmVOKSlcbiAgICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtcbiAgICBpZiAoZXh0KSB7XG4gICAgICBpZiAodG8gPCBleHQubGluZU4pXG4gICAgICAgIHsgZXh0LmxpbmVOICs9IGxlbmRpZmY7IH1cbiAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSlcbiAgICAgICAgeyBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgdG8gYSBzaW5nbGUgbGluZS4gVHlwZSBtdXN0IGJlIG9uZSBvZiBcInRleHRcIixcbiAgLy8gXCJndXR0ZXJcIiwgXCJjbGFzc1wiLCBcIndpZGdldFwiXG4gIGZ1bmN0aW9uIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHtcbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7IH1cblxuICAgIGlmIChsaW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCBsaW5lID49IGRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGxpbmVWaWV3ID0gZGlzcGxheS52aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmUpXTtcbiAgICBpZiAobGluZVZpZXcubm9kZSA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgdmFyIGFyciA9IGxpbmVWaWV3LmNoYW5nZXMgfHwgKGxpbmVWaWV3LmNoYW5nZXMgPSBbXSk7XG4gICAgaWYgKGluZGV4T2YoYXJyLCB0eXBlKSA9PSAtMSkgeyBhcnIucHVzaCh0eXBlKTsgfVxuICB9XG5cbiAgLy8gQ2xlYXIgdGhlIHZpZXcuXG4gIGZ1bmN0aW9uIHJlc2V0VmlldyhjbSkge1xuICAgIGNtLmRpc3BsYXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRvYy5maXJzdDtcbiAgICBjbS5kaXNwbGF5LnZpZXcgPSBbXTtcbiAgICBjbS5kaXNwbGF5LnZpZXdPZmZzZXQgPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgb2xkTiksIGRpZmYsIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgaWYgKCFzYXdDb2xsYXBzZWRTcGFucyB8fCBuZXdOID09IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplKVxuICAgICAgeyByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059IH1cbiAgICB2YXIgbiA9IGNtLmRpc3BsYXkudmlld0Zyb207XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKVxuICAgICAgeyBuICs9IHZpZXdbaV0uc2l6ZTsgfVxuICAgIGlmIChuICE9IG9sZE4pIHtcbiAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBkaWZmID0gKG4gKyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWZmID0gbiAtIG9sZE47XG4gICAgICB9XG4gICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjtcbiAgICB9XG4gICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5ld04pIHtcbiAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSB7IHJldHVybiBudWxsIH1cbiAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRleCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplO1xuICAgICAgaW5kZXggKz0gZGlyO1xuICAgIH1cbiAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059XG4gIH1cblxuICAvLyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50XG4gIC8vIG9yIGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRlZC5cbiAgZnVuY3Rpb24gYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgaWYgKHZpZXcubGVuZ3RoID09IDAgfHwgZnJvbSA+PSBkaXNwbGF5LnZpZXdUbyB8fCB0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pO1xuICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tID4gZnJvbSlcbiAgICAgICAgeyBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgZGlzcGxheS52aWV3RnJvbSkuY29uY2F0KGRpc3BsYXkudmlldyk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKVxuICAgICAgICB7IGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSk7IH1cbiAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tO1xuICAgICAgaWYgKGRpc3BsYXkudmlld1RvIDwgdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGZpbmRWaWV3SW5kZXgoY20sIHRvKSk7IH1cbiAgICB9XG4gICAgZGlzcGxheS52aWV3VG8gPSB0bztcbiAgfVxuXG4gIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2VudGF0aW9uIGlzXG4gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuXG4gIGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07XG4gICAgICBpZiAoIWxpbmVWaWV3LmhpZGRlbiAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpIHsgKytkaXJ0eTsgfVxuICAgIH1cbiAgICByZXR1cm4gZGlydHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihjbSkge1xuICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7XG4gICAgaWYgKCBwcmltYXJ5ID09PSB2b2lkIDAgKSBwcmltYXJ5ID0gdHJ1ZTtcblxuICAgIHZhciBkb2MgPSBjbS5kb2MsIHJlc3VsdCA9IHt9O1xuICAgIHZhciBjdXJGcmFnbWVudCA9IHJlc3VsdC5jdXJzb3JzID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBzZWxGcmFnbWVudCA9IHJlc3VsdC5zZWxlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXByaW1hcnkgJiYgaSA9PSBkb2Muc2VsLnByaW1JbmRleCkgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZS5mcm9tKCkubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCByYW5nZS50bygpLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBjb2xsYXBzZWQgPSByYW5nZS5lbXB0eSgpO1xuICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKVxuICAgICAgICB7IGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLmhlYWQsIGN1ckZyYWdtZW50KTsgfVxuICAgICAgaWYgKCFjb2xsYXBzZWQpXG4gICAgICAgIHsgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21lbnQpOyB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2VcbiAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgaGVhZCwgb3V0cHV0KSB7XG4gICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgXCJkaXZcIiwgbnVsbCwgbnVsbCwgIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7XG5cbiAgICB2YXIgY3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBcIlxcdTAwYTBcIiwgXCJDb2RlTWlycm9yLWN1cnNvclwiKSk7XG4gICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQgKyBcInB4XCI7XG5cbiAgICBpZiAocG9zLm90aGVyKSB7XG4gICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHRcbiAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgXCJcXHUwMGEwXCIsIFwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3JcIikpO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyBcInB4XCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mub3RoZXIudG9wICsgXCJweFwiO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArIFwicHhcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbXBDb29yZHMoYSwgYikgeyByZXR1cm4gYS50b3AgLSBiLnRvcCB8fCBhLmxlZnQgLSBiLmxlZnQgfVxuXG4gIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVkIHNlbGVjdGlvblxuICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRwdXQpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQ7XG4gICAgdmFyIHJpZ2h0U2lkZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXJXaWR0aCwgZGlzcGxheVdpZHRoKGNtKSAtIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCkgLSBwYWRkaW5nLnJpZ2h0O1xuICAgIHZhciBkb2NMVFIgPSBkb2MuZGlyZWN0aW9uID09IFwibHRyXCI7XG5cbiAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7XG4gICAgICBpZiAodG9wIDwgMCkgeyB0b3AgPSAwOyB9XG4gICAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCk7XG4gICAgICBib3R0b20gPSBNYXRoLnJvdW5kKGJvdHRvbSk7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNlbGVjdGVkXCIsIChcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogXCIgKyBsZWZ0ICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogXCIgKyB0b3AgKyBcInB4OyB3aWR0aDogXCIgKyAod2lkdGggPT0gbnVsbCA/IHJpZ2h0U2lkZSAtIGxlZnQgOiB3aWR0aCkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIiArIChib3R0b20gLSB0b3ApICsgXCJweFwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJnKSB7XG4gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTtcbiAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICAgIHZhciBzdGFydCwgZW5kO1xuICAgICAgZnVuY3Rpb24gY29vcmRzKGNoLCBiaWFzKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCBcImRpdlwiLCBsaW5lT2JqLCBiaWFzKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB3cmFwWChwb3MsIGRpciwgc2lkZSkge1xuICAgICAgICB2YXIgZXh0ZW50ID0gd3JhcHBlZExpbmVFeHRlbnRDaGFyKGNtLCBsaW5lT2JqLCBudWxsLCBwb3MpO1xuICAgICAgICB2YXIgcHJvcCA9IChkaXIgPT0gXCJsdHJcIikgPT0gKHNpZGUgPT0gXCJhZnRlclwiKSA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgICAgICB2YXIgY2ggPSBzaWRlID09IFwiYWZ0ZXJcIiA/IGV4dGVudC5iZWdpbiA6IGV4dGVudC5lbmQgLSAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGV4dGVudC5lbmQgLSAxKSkgPyAyIDogMSk7XG4gICAgICAgIHJldHVybiBjb29yZHMoY2gsIHByb3ApW3Byb3BdXG4gICAgICB9XG5cbiAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGRvYy5kaXJlY3Rpb24pO1xuICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbiAoZnJvbSwgdG8sIGRpciwgaSkge1xuICAgICAgICB2YXIgbHRyID0gZGlyID09IFwibHRyXCI7XG4gICAgICAgIHZhciBmcm9tUG9zID0gY29vcmRzKGZyb20sIGx0ciA/IFwibGVmdFwiIDogXCJyaWdodFwiKTtcbiAgICAgICAgdmFyIHRvUG9zID0gY29vcmRzKHRvIC0gMSwgbHRyID8gXCJyaWdodFwiIDogXCJsZWZ0XCIpO1xuXG4gICAgICAgIHZhciBvcGVuU3RhcnQgPSBmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwLCBvcGVuRW5kID0gdG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuO1xuICAgICAgICB2YXIgZmlyc3QgPSBpID09IDAsIGxhc3QgPSAhb3JkZXIgfHwgaSA9PSBvcmRlci5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodG9Qb3MudG9wIC0gZnJvbVBvcy50b3AgPD0gMykgeyAvLyBTaW5nbGUgbGluZVxuICAgICAgICAgIHZhciBvcGVuTGVmdCA9IChkb2NMVFIgPyBvcGVuU3RhcnQgOiBvcGVuRW5kKSAmJiBmaXJzdDtcbiAgICAgICAgICB2YXIgb3BlblJpZ2h0ID0gKGRvY0xUUiA/IG9wZW5FbmQgOiBvcGVuU3RhcnQpICYmIGxhc3Q7XG4gICAgICAgICAgdmFyIGxlZnQgPSBvcGVuTGVmdCA/IGxlZnRTaWRlIDogKGx0ciA/IGZyb21Qb3MgOiB0b1BvcykubGVmdDtcbiAgICAgICAgICB2YXIgcmlnaHQgPSBvcGVuUmlnaHQgPyByaWdodFNpZGUgOiAobHRyID8gdG9Qb3MgOiBmcm9tUG9zKS5yaWdodDtcbiAgICAgICAgICBhZGQobGVmdCwgZnJvbVBvcy50b3AsIHJpZ2h0IC0gbGVmdCwgZnJvbVBvcy5ib3R0b20pO1xuICAgICAgICB9IGVsc2UgeyAvLyBNdWx0aXBsZSBsaW5lc1xuICAgICAgICAgIHZhciB0b3BMZWZ0LCB0b3BSaWdodCwgYm90TGVmdCwgYm90UmlnaHQ7XG4gICAgICAgICAgaWYgKGx0cikge1xuICAgICAgICAgICAgdG9wTGVmdCA9IGRvY0xUUiAmJiBvcGVuU3RhcnQgJiYgZmlyc3QgPyBsZWZ0U2lkZSA6IGZyb21Qb3MubGVmdDtcbiAgICAgICAgICAgIHRvcFJpZ2h0ID0gZG9jTFRSID8gcmlnaHRTaWRlIDogd3JhcFgoZnJvbSwgZGlyLCBcImJlZm9yZVwiKTtcbiAgICAgICAgICAgIGJvdExlZnQgPSBkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgICBib3RSaWdodCA9IGRvY0xUUiAmJiBvcGVuRW5kICYmIGxhc3QgPyByaWdodFNpZGUgOiB0b1Bvcy5yaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9wTGVmdCA9ICFkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKGZyb20sIGRpciwgXCJiZWZvcmVcIik7XG4gICAgICAgICAgICB0b3BSaWdodCA9ICFkb2NMVFIgJiYgb3BlblN0YXJ0ICYmIGZpcnN0ID8gcmlnaHRTaWRlIDogZnJvbVBvcy5yaWdodDtcbiAgICAgICAgICAgIGJvdExlZnQgPSAhZG9jTFRSICYmIG9wZW5FbmQgJiYgbGFzdCA/IGxlZnRTaWRlIDogdG9Qb3MubGVmdDtcbiAgICAgICAgICAgIGJvdFJpZ2h0ID0gIWRvY0xUUiA/IHJpZ2h0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZCh0b3BMZWZ0LCBmcm9tUG9zLnRvcCwgdG9wUmlnaHQgLSB0b3BMZWZ0LCBmcm9tUG9zLmJvdHRvbSk7XG4gICAgICAgICAgaWYgKGZyb21Qb3MuYm90dG9tIDwgdG9Qb3MudG9wKSB7IGFkZChsZWZ0U2lkZSwgZnJvbVBvcy5ib3R0b20sIG51bGwsIHRvUG9zLnRvcCk7IH1cbiAgICAgICAgICBhZGQoYm90TGVmdCwgdG9Qb3MudG9wLCBib3RSaWdodCAtIGJvdExlZnQsIHRvUG9zLmJvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXJ0IHx8IGNtcENvb3Jkcyhmcm9tUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gZnJvbVBvczsgfVxuICAgICAgICBpZiAoY21wQ29vcmRzKHRvUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gdG9Qb3M7IH1cbiAgICAgICAgaWYgKCFlbmQgfHwgY21wQ29vcmRzKGZyb21Qb3MsIGVuZCkgPCAwKSB7IGVuZCA9IGZyb21Qb3M7IH1cbiAgICAgICAgaWYgKGNtcENvb3Jkcyh0b1BvcywgZW5kKSA8IDApIHsgZW5kID0gdG9Qb3M7IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfVxuICAgIH1cblxuICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20oKSwgc1RvID0gcmFuZ2UudG8oKTtcbiAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkge1xuICAgICAgZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTtcbiAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxpbmUpID09IHZpc3VhbExpbmUodG9MaW5lKTtcbiAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5kO1xuICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDtcbiAgICAgIGlmIChzaW5nbGVWTGluZSkge1xuICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApXG4gICAgICAgIHsgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOyB9XG4gICAgfVxuXG4gICAgb3V0cHV0LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgfVxuXG4gIC8vIEN1cnNvci1ibGlua2luZ1xuICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgcmV0dXJuIH1cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgY2xlYXJJbnRlcnZhbChkaXNwbGF5LmJsaW5rZXIpO1xuICAgIHZhciBvbiA9IHRydWU7XG4gICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCI7XG4gICAgaWYgKGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlID4gMClcbiAgICAgIHsgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyBcIlwiIDogXCJoaWRkZW5cIjsgfSxcbiAgICAgICAgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOyB9XG4gICAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPCAwKVxuICAgICAgeyBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVsYXlCbHVyRXZlbnQoY20pIHtcbiAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IHRydWU7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkge1xuICAgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIG9uQmx1cihjbSk7XG4gICAgfSB9LCAxMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Gb2N1cyhjbSwgZSkge1xuICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOyB9XG5cbiAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSA9PSBcIm5vY3Vyc29yXCIpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICAgIHNpZ25hbChjbSwgXCJmb2N1c1wiLCBjbSwgZSk7XG4gICAgICBjbS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLWZvY3VzZWRcIik7XG4gICAgICAvLyBUaGlzIHRlc3QgcHJldmVudHMgdGhpcyBmcm9tIGZpcmluZyB3aGVuIGEgY29udGV4dFxuICAgICAgLy8gbWVudSBpcyBjbG9zZWQgKHNpbmNlIHRoZSBpbnB1dCByZXNldCB3b3VsZCBraWxsIHRoZVxuICAgICAgLy8gc2VsZWN0LWFsbCBkZXRlY3Rpb24gaGFjaylcbiAgICAgIGlmICghY20uY3VyT3AgJiYgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBjbS5kb2Muc2VsKSB7XG4gICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgaWYgKHdlYmtpdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgfSAvLyBJc3N1ZSAjMTczMFxuICAgICAgfVxuICAgICAgY20uZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCk7XG4gICAgfVxuICAgIHJlc3RhcnRCbGluayhjbSk7XG4gIH1cbiAgZnVuY3Rpb24gb25CbHVyKGNtLCBlKSB7XG4gICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSB7IHJldHVybiB9XG5cbiAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgc2lnbmFsKGNtLCBcImJsdXJcIiwgY20sIGUpO1xuICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci1mb2N1c2VkXCIpO1xuICAgIH1cbiAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH0gfSwgMTUwKTtcbiAgfVxuXG4gIC8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRoZSByZW5kZXJlZCBsaW5lcywgYW5kIHVwZGF0ZSB0aGVpclxuICAvLyBzdG9yZWQgaGVpZ2h0cyB0byBtYXRjaC5cbiAgZnVuY3Rpb24gdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3VyID0gZGlzcGxheS52aWV3W2ldLCB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nO1xuICAgICAgdmFyIGhlaWdodCA9ICh2b2lkIDApLCB3aWR0aCA9IDA7XG4gICAgICBpZiAoY3VyLmhpZGRlbikgeyBjb250aW51ZSB9XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHtcbiAgICAgICAgdmFyIGJvdCA9IGN1ci5ub2RlLm9mZnNldFRvcCArIGN1ci5ub2RlLm9mZnNldEhlaWdodDtcbiAgICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTtcbiAgICAgICAgcHJldkJvdHRvbSA9IGJvdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50b3A7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgbGluZXMgZG9uJ3QgZXh0ZW5kIHBhc3QgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50XG4gICAgICAgIC8vIGVkaXRvciB3aWR0aFxuICAgICAgICBpZiAoIXdyYXBwaW5nICYmIGN1ci50ZXh0LmZpcnN0Q2hpbGQpXG4gICAgICAgICAgeyB3aWR0aCA9IGN1ci50ZXh0LmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLSBib3gubGVmdCAtIDE7IH1cbiAgICAgIH1cbiAgICAgIHZhciBkaWZmID0gY3VyLmxpbmUuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgaWYgKGRpZmYgPiAuMDA1IHx8IGRpZmYgPCAtLjAwNSkge1xuICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGN1ci5saW5lLCBoZWlnaHQpO1xuICAgICAgICB1cGRhdGVXaWRnZXRIZWlnaHQoY3VyLmxpbmUpO1xuICAgICAgICBpZiAoY3VyLnJlc3QpIHsgZm9yICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKylcbiAgICAgICAgICB7IHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7IH0gfVxuICAgICAgfVxuICAgICAgaWYgKHdpZHRoID4gY20uZGlzcGxheS5zaXplcldpZHRoKSB7XG4gICAgICAgIHZhciBjaFdpZHRoID0gTWF0aC5jZWlsKHdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKTtcbiAgICAgICAgaWYgKGNoV2lkdGggPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBjaFdpZHRoO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IGN1ci5saW5lO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBnaXZlbiBsaW5lLlxuICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWlnaHQobGluZSkge1xuICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciB3ID0gbGluZS53aWRnZXRzW2ldLCBwYXJlbnQgPSB3Lm5vZGUucGFyZW50Tm9kZTtcbiAgICAgIGlmIChwYXJlbnQpIHsgdy5oZWlnaHQgPSBwYXJlbnQub2Zmc2V0SGVpZ2h0OyB9XG4gICAgfSB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1bHRzXG4gIC8vIHRoZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3cG9ydCBtYXkgY29udGFpbiB0b3AsXG4gIC8vIGhlaWdodCwgYW5kIGVuc3VyZSAoc2VlIG9wLnNjcm9sbFRvUG9zKSBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkge1xuICAgIHZhciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpO1xuICAgIHZhciBib3R0b20gPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdwb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG5cbiAgICB2YXIgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKTtcbiAgICAvLyBFbnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNofSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5kXG4gICAgLy8gZm9yY2VzIHRob3NlIGxpbmVzIGludG8gdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSkuXG4gICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LmVuc3VyZSkge1xuICAgICAgdmFyIGVuc3VyZUZyb20gPSB2aWV3cG9ydC5lbnN1cmUuZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdwb3J0LmVuc3VyZS50by5saW5lO1xuICAgICAgaWYgKGVuc3VyZUZyb20gPCBmcm9tKSB7XG4gICAgICAgIGZyb20gPSBlbnN1cmVGcm9tO1xuICAgICAgICB0byA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCk7XG4gICAgICB9IGVsc2UgaWYgKE1hdGgubWluKGVuc3VyZVRvLCBkb2MubGFzdExpbmUoKSkgPj0gdG8pIHtcbiAgICAgICAgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpO1xuICAgICAgICB0byA9IGVuc3VyZVRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBNYXRoLm1heCh0bywgZnJvbSArIDEpfVxuICB9XG5cbiAgLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVdcblxuICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgd2luZG93LCBwYXJ0aWFsbHlcbiAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS5cbiAgZnVuY3Rpb24gbWF5YmVTY3JvbGxXaW5kb3coY20sIHJlY3QpIHtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIFwic2Nyb2xsQ3Vyc29ySW50b1ZpZXdcIikpIHsgcmV0dXJuIH1cblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZG9TY3JvbGwgPSBudWxsO1xuICAgIGlmIChyZWN0LnRvcCArIGJveC50b3AgPCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZTsgfVxuICAgIGVsc2UgaWYgKHJlY3QuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIHsgZG9TY3JvbGwgPSBmYWxzZTsgfVxuICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7XG4gICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdChcImRpdlwiLCBcIlxcdTIwMGJcIiwgbnVsbCwgKFwicG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiICsgKHJlY3QudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiICsgKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWlnaHQpICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIgKyAocmVjdC5sZWZ0KSArIFwicHg7IHdpZHRoOiBcIiArIChNYXRoLm1heCgyLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSkgKyBcInB4O1wiKSk7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChzY3JvbGxOb2RlKTtcbiAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpO1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChpbW1lZGlhdGVseSksIHZlcmlmeWluZyB0aGF0XG4gIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNpYmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHlcbiAgLy8gbWVhc3VyZWQsIHRoZSBwb3NpdGlvbiBvZiBzb21ldGhpbmcgbWF5ICdkcmlmdCcgZHVyaW5nIGRyYXdpbmcpLlxuICBmdW5jdGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikge1xuICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSAwOyB9XG4gICAgdmFyIHJlY3Q7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwb3MgPT0gZW5kKSB7XG4gICAgICAvLyBTZXQgcG9zIGFuZCBlbmQgdG8gdGhlIGN1cnNvciBwb3NpdGlvbnMgYXJvdW5kIHRoZSBjaGFyYWN0ZXIgcG9zIHN0aWNrcyB0b1xuICAgICAgLy8gSWYgcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiLCB0aGF0IGlzIGFyb3VuZCBwb3MuY2ggLSAxLCBvdGhlcndpc2UgYXJvdW5kIHBvcy5jaFxuICAgICAgLy8gSWYgcG9zID09IFBvcyhfLCAwLCBcImJlZm9yZVwiKSwgcG9zIGFuZCBlbmQgYXJlIHVuY2hhbmdlZFxuICAgICAgcG9zID0gcG9zLmNoID8gUG9zKHBvcy5saW5lLCBwb3Muc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBwb3MuY2ggLSAxIDogcG9zLmNoLCBcImFmdGVyXCIpIDogcG9zO1xuICAgICAgZW5kID0gcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiID8gUG9zKHBvcy5saW5lLCBwb3MuY2ggKyAxLCBcImJlZm9yZVwiKSA6IHBvcztcbiAgICB9XG4gICAgZm9yICh2YXIgbGltaXQgPSAwOyBsaW1pdCA8IDU7IGxpbWl0KyspIHtcbiAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpO1xuICAgICAgdmFyIGVuZENvb3JkcyA9ICFlbmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTtcbiAgICAgIHJlY3QgPSB7bGVmdDogTWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSxcbiAgICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihjb29yZHMudG9wLCBlbmRDb29yZHMudG9wKSAtIG1hcmdpbixcbiAgICAgICAgICAgICAgcmlnaHQ6IE1hdGgubWF4KGNvb3Jkcy5sZWZ0LCBlbmRDb29yZHMubGVmdCksXG4gICAgICAgICAgICAgIGJvdHRvbTogTWF0aC5tYXgoY29vcmRzLmJvdHRvbSwgZW5kQ29vcmRzLmJvdHRvbSkgKyBtYXJnaW59O1xuICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCk7XG4gICAgICB2YXIgc3RhcnRUb3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBzdGFydExlZnQgPSBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkge1xuICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7XG4gICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHN0YXJ0TGVmdCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoYW5nZWQpIHsgYnJlYWsgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLlxuICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhjbSwgcmVjdCkge1xuICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHJlY3QpO1xuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsgfVxuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGEgbmV3IHNjcm9sbCBwb3NpdGlvbiBuZWVkZWQgdG8gc2Nyb2xsIHRoZSBnaXZlblxuICAvLyByZWN0YW5nbGUgaW50byB2aWV3LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmRcbiAgLy8gc2Nyb2xsTGVmdCBwcm9wZXJ0aWVzLiBXaGVuIHRoZXNlIGFyZSB1bmRlZmluZWQsIHRoZVxuICAvLyB2ZXJ0aWNhbC9ob3Jpem9udGFsIHBvc2l0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRleHRIZWlnaHQoY20uZGlzcGxheSk7XG4gICAgaWYgKHJlY3QudG9wIDwgMCkgeyByZWN0LnRvcCA9IDA7IH1cbiAgICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSksIHJlc3VsdCA9IHt9O1xuICAgIGlmIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wID4gc2NyZWVuKSB7IHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBzY3JlZW47IH1cbiAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpO1xuICAgIHZhciBhdFRvcCA9IHJlY3QudG9wIDwgc25hcE1hcmdpbiwgYXRCb3R0b20gPSByZWN0LmJvdHRvbSA+IGRvY0JvdHRvbSAtIHNuYXBNYXJnaW47XG4gICAgaWYgKHJlY3QudG9wIDwgc2NyZWVudG9wKSB7XG4gICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogcmVjdC50b3A7XG4gICAgfSBlbHNlIGlmIChyZWN0LmJvdHRvbSA+IHNjcmVlbnRvcCArIHNjcmVlbikge1xuICAgICAgdmFyIG5ld1RvcCA9IE1hdGgubWluKHJlY3QudG9wLCAoYXRCb3R0b20gPyBkb2NCb3R0b20gOiByZWN0LmJvdHRvbSkgLSBzY3JlZW4pO1xuICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHsgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsgfVxuICAgIH1cblxuICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsTGVmdCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdDtcbiAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0aChjbSkgLSAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA6IDApO1xuICAgIHZhciB0b29XaWRlID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdCA+IHNjcmVlbnc7XG4gICAgaWYgKHRvb1dpZGUpIHsgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIHNjcmVlbnc7IH1cbiAgICBpZiAocmVjdC5sZWZ0IDwgMTApXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gMDsgfVxuICAgIGVsc2UgaWYgKHJlY3QubGVmdCA8IHNjcmVlbmxlZnQpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0IC0gKHRvb1dpZGUgPyAwIDogMTApKTsgfVxuICAgIGVsc2UgaWYgKHJlY3QucmlnaHQgPiBzY3JlZW53ICsgc2NyZWVubGVmdCAtIDMpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gcmVjdC5yaWdodCArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7IH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBTdG9yZSBhIHJlbGF0aXZlIGFkanVzdG1lbnQgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICAvLyBvcGVyYXRpb24gKHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS5cbiAgZnVuY3Rpb24gYWRkVG9TY3JvbGxUb3AoY20sIHRvcCkge1xuICAgIGlmICh0b3AgPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9wID0gKGNtLmN1ck9wLnNjcm9sbFRvcCA9PSBudWxsID8gY20uZG9jLnNjcm9sbFRvcCA6IGNtLmN1ck9wLnNjcm9sbFRvcCkgKyB0b3A7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gdGhlIGN1cnJlbnQgY3Vyc29yIGlzXG4gIC8vIHNob3duLlxuICBmdW5jdGlvbiBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogY3VyLCB0bzogY3VyLCBtYXJnaW46IGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2lufTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzKGNtLCB4LCB5KSB7XG4gICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHsgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTsgfVxuICAgIGlmICh4ICE9IG51bGwpIHsgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IHg7IH1cbiAgICBpZiAoeSAhPSBudWxsKSB7IGNtLmN1ck9wLnNjcm9sbFRvcCA9IHk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UoY20sIHJhbmdlKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHJhbmdlO1xuICB9XG5cbiAgLy8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyXG4gIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLCB0aGlzXG4gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc29cbiAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuXG4gIGZ1bmN0aW9uIHJlc29sdmVTY3JvbGxUb1BvcyhjbSkge1xuICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsO1xuICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTtcbiAgICAgIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCByYW5nZS5tYXJnaW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCBtYXJnaW4pIHtcbiAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwge1xuICAgICAgbGVmdDogTWF0aC5taW4oZnJvbS5sZWZ0LCB0by5sZWZ0KSxcbiAgICAgIHRvcDogTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSBtYXJnaW4sXG4gICAgICByaWdodDogTWF0aC5tYXgoZnJvbS5yaWdodCwgdG8ucmlnaHQpLFxuICAgICAgYm90dG9tOiBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIG1hcmdpblxuICAgIH0pO1xuICAgIHNjcm9sbFRvQ29vcmRzKGNtLCBzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTtcbiAgfVxuXG4gIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydFxuICAvLyBjb3ZlcnMgdGhlIHZpc2libGUgYXJlYS5cbiAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsVG9wKGNtLCB2YWwpIHtcbiAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSB7IHJldHVybiB9XG4gICAgaWYgKCFnZWNrbykgeyB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB2YWx9KTsgfVxuICAgIHNldFNjcm9sbFRvcChjbSwgdmFsLCB0cnVlKTtcbiAgICBpZiAoZ2Vja28pIHsgdXBkYXRlRGlzcGxheVNpbXBsZShjbSk7IH1cbiAgICBzdGFydFdvcmtlcihjbSwgMTAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNjcm9sbFRvcChjbSwgdmFsLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIHZhbCkpO1xuICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9PSB2YWwgJiYgIWZvcmNlU2Nyb2xsKSB7IHJldHVybiB9XG4gICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDtcbiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgeyBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsgfVxuICB9XG5cbiAgLy8gU3luYyBzY3JvbGxlciBhbmQgc2Nyb2xsYmFyLCBlbnN1cmUgdGhlIGd1dHRlciBlbGVtZW50cyBhcmVcbiAgLy8gYWxpZ25lZC5cbiAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHZhbCwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpKTtcbiAgICBpZiAoKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSAmJiAhZm9yY2VTY3JvbGwpIHsgcmV0dXJuIH1cbiAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbDtcbiAgICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSB2YWwpIHsgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsOyB9XG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbExlZnQodmFsKTtcbiAgfVxuXG4gIC8vIFNDUk9MTEJBUlNcblxuICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZVxuICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuXG4gIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBndXR0ZXJXID0gZC5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIHZhciBkb2NIID0gTWF0aC5yb3VuZChjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkpO1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRIZWlnaHQ6IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LFxuICAgICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdodCxcbiAgICAgIHNjcm9sbFdpZHRoOiBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aDogZC5zY3JvbGxlci5jbGllbnRXaWR0aCxcbiAgICAgIHZpZXdXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRoLFxuICAgICAgYmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAwLFxuICAgICAgZG9jSGVpZ2h0OiBkb2NILFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBkb2NIICsgc2Nyb2xsR2FwKGNtKSArIGQuYmFySGVpZ2h0LFxuICAgICAgbmF0aXZlQmFyV2lkdGg6IGQubmF0aXZlQmFyV2lkdGgsXG4gICAgICBndXR0ZXJXaWR0aDogZ3V0dGVyV1xuICAgIH1cbiAgfVxuXG4gIHZhciBOYXRpdmVTY3JvbGxiYXJzID0gZnVuY3Rpb24ocGxhY2UsIHNjcm9sbCwgY20pIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBudWxsLCBudWxsLCBcIm1pbi13aWR0aDogMXB4XCIpXSwgXCJDb2RlTWlycm9yLXZzY3JvbGxiYXJcIik7XG4gICAgdmFyIGhvcml6ID0gdGhpcy5ob3JpeiA9IGVsdChcImRpdlwiLCBbZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHhcIildLCBcIkNvZGVNaXJyb3ItaHNjcm9sbGJhclwiKTtcbiAgICB2ZXJ0LnRhYkluZGV4ID0gaG9yaXoudGFiSW5kZXggPSAtMTtcbiAgICBwbGFjZSh2ZXJ0KTsgcGxhY2UoaG9yaXopO1xuXG4gICAgb24odmVydCwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHZlcnQuY2xpZW50SGVpZ2h0KSB7IHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgXCJ2ZXJ0aWNhbFwiKTsgfVxuICAgIH0pO1xuICAgIG9uKGhvcml6LCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaG9yaXouY2xpZW50V2lkdGgpIHsgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsIFwiaG9yaXpvbnRhbFwiKTsgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jaGVja2VkWmVyb1dpZHRoID0gZmFsc2U7XG4gICAgLy8gTmVlZCB0byBzZXQgYSBtaW5pbXVtIHdpZHRoIHRvIHNlZSB0aGUgc2Nyb2xsYmFyIG9uIElFNyAoYnV0IG11c3Qgbm90IHNldCBpdCBvbiBJRTgpLlxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyB0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodCA9IHRoaXMudmVydC5zdHlsZS5taW5XaWR0aCA9IFwiMThweFwiOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG1lYXN1cmUpIHtcbiAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGggKyAxO1xuICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICB2YXIgc1dpZHRoID0gbWVhc3VyZS5uYXRpdmVCYXJXaWR0aDtcblxuICAgIGlmIChuZWVkc1YpIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNXaWR0aCArIFwicHhcIiA6IFwiMFwiO1xuICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gbWVhc3VyZS52aWV3SGVpZ2h0IC0gKG5lZWRzSCA/IHNXaWR0aCA6IDApO1xuICAgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC5cbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9XG4gICAgICAgIE1hdGgubWF4KDAsIG1lYXN1cmUuc2Nyb2xsSGVpZ2h0IC0gbWVhc3VyZS5jbGllbnRIZWlnaHQgKyB0b3RhbEhlaWdodCkgKyBcInB4XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgIH1cblxuICAgIGlmIChuZWVkc0gpIHtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBzV2lkdGggKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUubGVmdCA9IG1lYXN1cmUuYmFyTGVmdCArIFwicHhcIjtcbiAgICAgIHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAobmVlZHNWID8gc1dpZHRoIDogMCk7XG4gICAgICB0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPVxuICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIHRvdGFsV2lkdGgpICsgXCJweFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrZWRaZXJvV2lkdGggJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICBpZiAoc1dpZHRoID09IDApIHsgdGhpcy56ZXJvV2lkdGhIYWNrKCk7IH1cbiAgICAgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAwfVxuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbiAocG9zKSB7XG4gICAgaWYgKHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHsgdGhpcy5ob3Jpei5zY3JvbGxMZWZ0ID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUhvcml6KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMuZGlzYWJsZUhvcml6LCBcImhvcml6XCIpOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKHBvcykge1xuICAgIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBvcykgeyB0aGlzLnZlcnQuc2Nyb2xsVG9wID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZVZlcnQpIHsgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LCB0aGlzLmRpc2FibGVWZXJ0LCBcInZlcnRcIik7IH1cbiAgfTtcblxuICBOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS56ZXJvV2lkdGhIYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3ID0gbWFjICYmICFtYWNfZ2VNb3VudGFpbkxpb24gPyBcIjEycHhcIiA6IFwiMThweFwiO1xuICAgIHRoaXMuaG9yaXouc3R5bGUuaGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLndpZHRoID0gdztcbiAgICB0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLnZlcnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICAgIHRoaXMuZGlzYWJsZUhvcml6ID0gbmV3IERlbGF5ZWQ7XG4gICAgdGhpcy5kaXNhYmxlVmVydCA9IG5ldyBEZWxheWVkO1xuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhciA9IGZ1bmN0aW9uIChiYXIsIGRlbGF5LCB0eXBlKSB7XG4gICAgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcbiAgICBmdW5jdGlvbiBtYXliZURpc2FibGUoKSB7XG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc3RpbGwgdmlzaWJsZSwgd2VcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGVsZW1lbnQgdW5kZXIgdGhlIHBpeGVsIGluIHRoZSBib3R0b21cbiAgICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgc2Nyb2xsYmFyIGJveCBpcyB0aGUgc2Nyb2xsYmFyIGJveFxuICAgICAgLy8gaXRzZWxmICh3aGVuIHRoZSBiYXIgaXMgc3RpbGwgdmlzaWJsZSkgb3IgaXRzIGZpbGxlciBjaGlsZFxuICAgICAgLy8gKHdoZW4gdGhlIGJhciBpcyBoaWRkZW4pLiBJZiBpdCBpcyBzdGlsbCB2aXNpYmxlLCB3ZSBrZWVwXG4gICAgICAvLyBpdCBlbmFibGVkLCBpZiBpdCdzIGhpZGRlbiwgd2UgZGlzYWJsZSBwb2ludGVyIGV2ZW50cy5cbiAgICAgIHZhciBib3ggPSBiYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgZWx0ID0gdHlwZSA9PSBcInZlcnRcIiA/IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYm94LnJpZ2h0IC0gMSwgKGJveC50b3AgKyBib3guYm90dG9tKSAvIDIpXG4gICAgICAgICAgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChib3gucmlnaHQgKyBib3gubGVmdCkgLyAyLCBib3guYm90dG9tIC0gMSk7XG4gICAgICBpZiAoZWx0ICE9IGJhcikgeyBiYXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiOyB9XG4gICAgICBlbHNlIHsgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7IH1cbiAgICB9XG4gICAgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5ob3Jpeik7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudmVydCk7XG4gIH07XG5cbiAgdmFyIE51bGxTY3JvbGxiYXJzID0gZnVuY3Rpb24gKCkge307XG5cbiAgTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHtib3R0b206IDAsIHJpZ2h0OiAwfSB9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uICgpIHt9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKCkge307XG4gIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnMoY20sIG1lYXN1cmUpIHtcbiAgICBpZiAoIW1lYXN1cmUpIHsgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsgfVxuICAgIHZhciBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aCwgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDtcbiAgICB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNCAmJiBzdGFydFdpZHRoICE9IGNtLmRpc3BsYXkuYmFyV2lkdGggfHwgc3RhcnRIZWlnaHQgIT0gY20uZGlzcGxheS5iYXJIZWlnaHQ7IGkrKykge1xuICAgICAgaWYgKHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgICAgeyB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7IH1cbiAgICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pKTtcbiAgICAgIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoOyBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlXG4gIC8vIGNvbnRlbnQuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheTtcbiAgICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpO1xuXG4gICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArIFwicHhcIjtcbiAgICBkLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsgXCJweFwiO1xuICAgIGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLmJvcmRlckJvdHRvbSA9IHNpemVzLmJvdHRvbSArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcblxuICAgIGlmIChzaXplcy5yaWdodCAmJiBzaXplcy5ib3R0b20pIHtcbiAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNpemVzLnJpZ2h0ICsgXCJweFwiO1xuICAgIH0gZWxzZSB7IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9XG4gICAgaWYgKHNpemVzLmJvdHRvbSAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYmIGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpIHtcbiAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aCA9IG1lYXN1cmUuZ3V0dGVyV2lkdGggKyBcInB4XCI7XG4gICAgfSBlbHNlIHsgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiXCI7IH1cbiAgfVxuXG4gIHZhciBzY3JvbGxiYXJNb2RlbCA9IHtcIm5hdGl2ZVwiOiBOYXRpdmVTY3JvbGxiYXJzLCBcIm51bGxcIjogTnVsbFNjcm9sbGJhcnN9O1xuXG4gIGZ1bmN0aW9uIGluaXRTY3JvbGxiYXJzKGNtKSB7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycykge1xuICAgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLmNsZWFyKCk7XG4gICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgICB7IHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOyB9XG4gICAgfVxuXG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzID0gbmV3IHNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVdKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBjbS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKTtcbiAgICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1c1xuICAgICAgb24obm9kZSwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMCk7IH1cbiAgICAgIH0pO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIik7XG4gICAgfSwgZnVuY3Rpb24gKHBvcywgYXhpcykge1xuICAgICAgaWYgKGF4aXMgPT0gXCJob3Jpem9udGFsXCIpIHsgc2V0U2Nyb2xsTGVmdChjbSwgcG9zKTsgfVxuICAgICAgZWxzZSB7IHVwZGF0ZVNjcm9sbFRvcChjbSwgcG9zKTsgfVxuICAgIH0sIGNtKTtcbiAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgeyBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7IH1cbiAgfVxuXG4gIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBhIHNlcmllcyBvZiBjaGFuZ2VzIHRvIHRoZSBlZGl0b3JcbiAgLy8gc3RhdGUgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZVxuICAvLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3csIGFuZFxuICAvLyBlcnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBhcmUgYmF0Y2hlZCBhbmQgdGhlbiBhbGxcbiAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuXG5cbiAgdmFyIG5leHRPcElkID0gMDtcbiAgLy8gU3RhcnQgYSBuZXcgb3BlcmF0aW9uLlxuICBmdW5jdGlvbiBzdGFydE9wZXJhdGlvbihjbSkge1xuICAgIGNtLmN1ck9wID0ge1xuICAgICAgY206IGNtLFxuICAgICAgdmlld0NoYW5nZWQ6IGZhbHNlLCAgICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBsaW5lcyBtaWdodCBuZWVkIHRvIGJlIHJlZHJhd25cbiAgICAgIHN0YXJ0SGVpZ2h0OiBjbS5kb2MuaGVpZ2h0LCAvLyBVc2VkIHRvIGRldGVjdCBuZWVkIHRvIHVwZGF0ZSBzY3JvbGxiYXJcbiAgICAgIGZvcmNlVXBkYXRlOiBmYWxzZSwgICAgICAvLyBVc2VkIHRvIGZvcmNlIGEgcmVkcmF3XG4gICAgICB1cGRhdGVJbnB1dDogMCwgICAgICAgLy8gV2hldGhlciB0byByZXNldCB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIHR5cGluZzogZmFsc2UsICAgICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVzZXQgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbGVhdmUgZXhpc3RpbmcgdGV4dCAoZm9yIGNvbXBvc2l0aW5nKVxuICAgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxhdGVkIGNoYW5nZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50c1xuICAgICAgY3Vyc29yQWN0aXZpdHlIYW5kbGVyczogbnVsbCwgLy8gU2V0IG9mIGhhbmRsZXJzIHRvIGZpcmUgY3Vyc29yQWN0aXZpdHkgb25cbiAgICAgIGN1cnNvckFjdGl2aXR5Q2FsbGVkOiAwLCAvLyBUcmFja3Mgd2hpY2ggY3Vyc29yQWN0aXZpdHkgaGFuZGxlcnMgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5XG4gICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJhd25cbiAgICAgIHVwZGF0ZU1heExpbmU6IGZhbHNlLCAgICAvLyBTZXQgd2hlbiB0aGUgd2lkZXN0IGxpbmUgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBhbmV3XG4gICAgICBzY3JvbGxMZWZ0OiBudWxsLCBzY3JvbGxUb3A6IG51bGwsIC8vIEludGVybWVkaWF0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCBwdXNoZWQgdG8gRE9NIHlldFxuICAgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8gc2Nyb2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb25cbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGlkOiArK25leHRPcElkICAgICAgICAgICAvLyBVbmlxdWUgSURcbiAgICB9O1xuICAgIHB1c2hPcGVyYXRpb24oY20uY3VyT3ApO1xuICB9XG5cbiAgLy8gRmluaXNoIGFuIG9wZXJhdGlvbiwgdXBkYXRpbmcgdGhlIGRpc3BsYXkgYW5kIHNpZ25hbGxpbmcgZGVsYXllZCBldmVudHNcbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKGNtKSB7XG4gICAgdmFyIG9wID0gY20uY3VyT3A7XG4gICAgaWYgKG9wKSB7IGZpbmlzaE9wZXJhdGlvbihvcCwgZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLm9wcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOyB9XG4gICAgICBlbmRPcGVyYXRpb25zKGdyb3VwKTtcbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc29cbiAgLy8gdGhhdCB0aGUgbWluaW11bSBudW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9ucyhncm91cCkge1xuICAgIHZhciBvcHMgPSBncm91cC5vcHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9SMShvcHNbaV0pOyB9XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgb3BzLmxlbmd0aDsgaSQxKyspIC8vIFdyaXRlIERPTSAobWF5YmUpXG4gICAgICB7IGVuZE9wZXJhdGlvbl9XMShvcHNbaSQxXSk7IH1cbiAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBvcHMubGVuZ3RoOyBpJDIrKykgLy8gUmVhZCBET01cbiAgICAgIHsgZW5kT3BlcmF0aW9uX1IyKG9wc1tpJDJdKTsgfVxuICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IG9wcy5sZW5ndGg7IGkkMysrKSAvLyBXcml0ZSBET00gKG1heWJlKVxuICAgICAgeyBlbmRPcGVyYXRpb25fVzIob3BzW2kkM10pOyB9XG4gICAgZm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgb3BzLmxlbmd0aDsgaSQ0KyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2kkNF0pOyB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjEob3ApIHtcbiAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSk7XG4gICAgaWYgKG9wLnVwZGF0ZU1heExpbmUpIHsgZmluZE1heExpbmUoY20pOyB9XG5cbiAgICBvcC5tdXN0VXBkYXRlID0gb3Audmlld0NoYW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHxcbiAgICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+PSBkaXNwbGF5LnZpZXdUbykgfHxcbiAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gICAgb3AudXBkYXRlID0gb3AubXVzdFVwZGF0ZSAmJlxuICAgICAgbmV3IERpc3BsYXlVcGRhdGUoY20sIG9wLm11c3RVcGRhdGUgJiYge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9zfSwgb3AuZm9yY2VVcGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cxKG9wKSB7XG4gICAgb3AudXBkYXRlZERpc3BsYXkgPSBvcC5tdXN0VXBkYXRlICYmIHVwZGF0ZURpc3BsYXlJZk5lZWRlZChvcC5jbSwgb3AudXBkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9SMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAob3AudXBkYXRlZERpc3BsYXkpIHsgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOyB9XG5cbiAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pO1xuXG4gICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsXG4gICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVzIGl0LlxuICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nXG4gICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBvcC5hZGp1c3RXaWR0aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwgZGlzcGxheS5tYXhMaW5lLnRleHQubGVuZ3RoKS5sZWZ0ICsgMztcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87XG4gICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID1cbiAgICAgICAgTWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChjbSkgKyBjbS5kaXNwbGF5LmJhcldpZHRoKTtcbiAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnNlbGVjdGlvbkNoYW5nZWQpXG4gICAgICB7IG9wLnByZXBhcmVkU2VsZWN0aW9uID0gZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9XMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtO1xuXG4gICAgaWYgKG9wLmFkanVzdFdpZHRoVG8gIT0gbnVsbCkge1xuICAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG9wLmFkanVzdFdpZHRoVG8gKyBcInB4XCI7XG4gICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KVxuICAgICAgICB7IHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgb3AubWF4U2Nyb2xsTGVmdCksIHRydWUpOyB9XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRha2VGb2N1cyA9IG9wLmZvY3VzICYmIG9wLmZvY3VzID09IGFjdGl2ZUVsdCgpO1xuICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbilcbiAgICAgIHsgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKG9wLnByZXBhcmVkU2VsZWN0aW9uLCB0YWtlRm9jdXMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnN0YXJ0SGVpZ2h0ICE9IGNtLmRvYy5oZWlnaHQpXG4gICAgICB7IHVwZGF0ZVNjcm9sbGJhcnMoY20sIG9wLmJhck1lYXN1cmUpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KVxuICAgICAgeyBzZXREb2N1bWVudEhlaWdodChjbSwgb3AuYmFyTWVhc3VyZSk7IH1cblxuICAgIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkKSB7IHJlc3RhcnRCbGluayhjbSk7IH1cblxuICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KVxuICAgICAgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KG9wLnR5cGluZyk7IH1cbiAgICBpZiAodGFrZUZvY3VzKSB7IGVuc3VyZUZvY3VzKG9wLmNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX2ZpbmlzaChvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB7IHBvc3RVcGRhdGVEaXNwbGF5KGNtLCBvcC51cGRhdGUpOyB9XG5cbiAgICAvLyBBYm9ydCBtb3VzZSB3aGVlbCBkZWx0YSBtZWFzdXJlbWVudCwgd2hlbiBzY3JvbGxpbmcgZXhwbGljaXRseVxuICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYICE9IG51bGwgJiYgKG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8IG9wLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBvcC5zY3JvbGxUb1BvcykpXG4gICAgICB7IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBET00gc2Nyb2xsZXJcbiAgICBpZiAob3Auc2Nyb2xsVG9wICE9IG51bGwpIHsgc2V0U2Nyb2xsVG9wKGNtLCBvcC5zY3JvbGxUb3AsIG9wLmZvcmNlU2Nyb2xsKTsgfVxuXG4gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCkgeyBzZXRTY3JvbGxMZWZ0KGNtLCBvcC5zY3JvbGxMZWZ0LCB0cnVlLCB0cnVlKTsgfVxuICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lmaWMgcG9zaXRpb24gaW50byB2aWV3LCBkbyBzby5cbiAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHtcbiAgICAgIHZhciByZWN0ID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTtcbiAgICAgIG1heWJlU2Nyb2xsV2luZG93KGNtLCByZWN0KTtcbiAgICB9XG5cbiAgICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBieSBlZGl0aW5nIG9yXG4gICAgLy8gdW5kb2luZ1xuICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7XG4gICAgaWYgKGhpZGRlbikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlbi5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKCFoaWRkZW5baV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbChoaWRkZW5baV0sIFwiaGlkZVwiKTsgfSB9IH1cbiAgICBpZiAodW5oaWRkZW4pIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kkMSlcbiAgICAgIHsgaWYgKHVuaGlkZGVuW2kkMV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbCh1bmhpZGRlbltpJDFdLCBcInVuaGlkZVwiKTsgfSB9IH1cblxuICAgIGlmIChkaXNwbGF5LndyYXBwZXIub2Zmc2V0SGVpZ2h0KVxuICAgICAgeyBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7IH1cblxuICAgIC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAob3AuY2hhbmdlT2JqcylcbiAgICAgIHsgc2lnbmFsKGNtLCBcImNoYW5nZXNcIiwgY20sIG9wLmNoYW5nZU9ianMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZSlcbiAgICAgIHsgb3AudXBkYXRlLmZpbmlzaCgpOyB9XG4gIH1cblxuICAvLyBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvblxuICBmdW5jdGlvbiBydW5Jbk9wKGNtLCBmKSB7XG4gICAgaWYgKGNtLmN1ck9wKSB7IHJldHVybiBmKCkgfVxuICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTtcbiAgICB0cnkgeyByZXR1cm4gZigpIH1cbiAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICB9XG4gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoY20uY3VyT3ApIHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgICB9XG4gIH1cbiAgLy8gVXNlZCB0byBhZGQgbWV0aG9kcyB0byBlZGl0b3IgYW5kIGRvYyBpbnN0YW5jZXMsIHdyYXBwaW5nIHRoZW0gaW5cbiAgLy8gb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gbWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24odGhpcyk7XG4gICAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbiAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7IH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjbSA9IHRoaXMuY207XG4gICAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG4gICAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJR0hMSUdIVCBXT1JLRVJcblxuICBmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkge1xuICAgIGlmIChjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKGNtKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYztcbiAgICBpZiAoZG9jLmhpZ2hsaWdodEZyb250aWVyID49IGNtLmRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWU7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIpO1xuICAgIHZhciBjaGFuZ2VkTGluZXMgPSBbXTtcblxuICAgIGRvYy5pdGVyKGNvbnRleHQubGluZSwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChjb250ZXh0LmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlXG4gICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxlcztcbiAgICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggPyBjb3B5U3RhdGUoZG9jLm1vZGUsIGNvbnRleHQuc3RhdGUpIDogbnVsbDtcbiAgICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzO1xuICAgICAgICB2YXIgb2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7XG4gICAgICAgIGlmIChuZXdDbHMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7IH1cbiAgICAgICAgZWxzZSBpZiAob2xkQ2xzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoIHx8XG4gICAgICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5iZ0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRleHRDbGFzcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgeyBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsgfVxuICAgICAgICBpZiAoaXNjaGFuZ2UpIHsgY2hhbmdlZExpbmVzLnB1c2goY29udGV4dC5saW5lKTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgY29udGV4dC5uZXh0TGluZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPD0gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpXG4gICAgICAgICAgeyBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBjb250ZXh0KTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LmxpbmUgJSA1ID09IDAgPyBjb250ZXh0LnNhdmUoKSA6IG51bGw7XG4gICAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHtcbiAgICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBjb250ZXh0LmxpbmU7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGRvYy5tb2RlRnJvbnRpZXIsIGNvbnRleHQubGluZSk7XG4gICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5ndGgpIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkTGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgcmVnTGluZUNoYW5nZShjbSwgY2hhbmdlZExpbmVzW2ldLCBcInRleHRcIik7IH1cbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gRElTUExBWSBEUkFXSU5HXG5cbiAgdmFyIERpc3BsYXlVcGRhdGUgPSBmdW5jdGlvbihjbSwgdmlld3BvcnQsIGZvcmNlKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuXG4gICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgIC8vIFN0b3JlIHNvbWUgdmFsdWVzIHRoYXQgd2UnbGwgbmVlZCBsYXRlciAoYnV0IGRvbid0IHdhbnQgdG8gZm9yY2UgYSByZWxheW91dCBmb3IpXG4gICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGNtLmRvYywgdmlld3BvcnQpO1xuICAgIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoO1xuICAgIHRoaXMud3JhcHBlckhlaWdodCA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy53cmFwcGVyV2lkdGggPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGg7XG4gICAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pO1xuICAgIHRoaXMuZm9yY2UgPSBmb3JjZTtcbiAgICB0aGlzLmRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICB9O1xuXG4gIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uIChlbWl0dGVyLCB0eXBlKSB7XG4gICAgaWYgKGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkpXG4gICAgICB7IHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsgfVxuICB9O1xuICBEaXNwbGF5VXBkYXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIHsgc2lnbmFsLmFwcGx5KG51bGwsIHRoaXMuZXZlbnRzW2ldKTsgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG1heWJlQ2xpcFNjcm9sbGJhcnMoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKCFkaXNwbGF5LnNjcm9sbGJhcnNDbGlwcGVkICYmIGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGgpIHtcbiAgICAgIGRpc3BsYXkubmF0aXZlQmFyV2lkdGggPSBkaXNwbGF5LnNjcm9sbGVyLm9mZnNldFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtcbiAgICAgIGRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IHNjcm9sbEdhcChjbSkgKyBcInB4XCI7XG4gICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsgXCJweFwiO1xuICAgICAgZGlzcGxheS5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gc2Nyb2xsR2FwKGNtKSArIFwicHhcIjtcbiAgICAgIGRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvblNuYXBzaG90KGNtKSB7XG4gICAgaWYgKGNtLmhhc0ZvY3VzKCkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbHQoKTtcbiAgICBpZiAoIWFjdGl2ZSB8fCAhY29udGFpbnMoY20uZGlzcGxheS5saW5lRGl2LCBhY3RpdmUpKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgcmVzdWx0ID0ge2FjdGl2ZUVsdDogYWN0aXZlfTtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSAmJiBzZWwuZXh0ZW5kICYmIGNvbnRhaW5zKGNtLmRpc3BsYXkubGluZURpdiwgc2VsLmFuY2hvck5vZGUpKSB7XG4gICAgICAgIHJlc3VsdC5hbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7XG4gICAgICAgIHJlc3VsdC5hbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgICAgICByZXN1bHQuZm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICAgICAgcmVzdWx0LmZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHNuYXBzaG90KSB7XG4gICAgaWYgKCFzbmFwc2hvdCB8fCAhc25hcHNob3QuYWN0aXZlRWx0IHx8IHNuYXBzaG90LmFjdGl2ZUVsdCA9PSBhY3RpdmVFbHQoKSkgeyByZXR1cm4gfVxuICAgIHNuYXBzaG90LmFjdGl2ZUVsdC5mb2N1cygpO1xuICAgIGlmIChzbmFwc2hvdC5hbmNob3JOb2RlICYmIGNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHNuYXBzaG90LmFuY2hvck5vZGUpICYmIGNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHNuYXBzaG90LmZvY3VzTm9kZSkpIHtcbiAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNldEVuZChzbmFwc2hvdC5hbmNob3JOb2RlLCBzbmFwc2hvdC5hbmNob3JPZmZzZXQpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbC5leHRlbmQoc25hcHNob3QuZm9jdXNOb2RlLCBzbmFwc2hvdC5mb2N1c09mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxzIG91dFxuICAvLyAocmV0dXJuaW5nIGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBhbmQgZm9yY2VkIGlzXG4gIC8vIGZhbHNlLlxuICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKHVwZGF0ZS5lZGl0b3JJc0hpZGRlbikge1xuICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLlxuICAgIGlmICghdXBkYXRlLmZvcmNlICYmXG4gICAgICAgIHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJlxuICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPj0gZGlzcGxheS52aWV3VG8pICYmXG4gICAgICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID09IGRpc3BsYXkudmlldyAmJiBjb3VudERpcnR5VmlldyhjbSkgPT0gMClcbiAgICAgIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkpIHtcbiAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB1cGRhdGUuZGltcyA9IGdldERpbWVuc2lvbnMoY20pO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgYSBzdWl0YWJsZSBuZXcgdmlld3BvcnQgKGZyb20gJiB0bylcbiAgICB2YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNpemU7XG4gICAgdmFyIGZyb20gPSBNYXRoLm1heCh1cGRhdGUudmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbiwgZG9jLmZpcnN0KTtcbiAgICB2YXIgdG8gPSBNYXRoLm1pbihlbmQsIHVwZGF0ZS52aXNpYmxlLnRvICsgY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7XG4gICAgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnZpZXdGcm9tIDwgMjApIHsgZnJvbSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7IH1cbiAgICBpZiAoZGlzcGxheS52aWV3VG8gPiB0byAmJiBkaXNwbGF5LnZpZXdUbyAtIHRvIDwgMjApIHsgdG8gPSBNYXRoLm1pbihlbmQsIGRpc3BsYXkudmlld1RvKTsgfVxuICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykge1xuICAgICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pO1xuICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0byk7XG4gICAgfVxuXG4gICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS52aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fFxuICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCAhPSB1cGRhdGUud3JhcHBlckhlaWdodCB8fCBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggIT0gdXBkYXRlLndyYXBwZXJXaWR0aDtcbiAgICBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0byk7XG5cbiAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTtcbiAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uXG4gICAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyBcInB4XCI7XG5cbiAgICB2YXIgdG9VcGRhdGUgPSBjb3VudERpcnR5VmlldyhjbSk7XG4gICAgaWYgKCFkaWZmZXJlbnQgJiYgdG9VcGRhdGUgPT0gMCAmJiAhdXBkYXRlLmZvcmNlICYmIGRpc3BsYXkucmVuZGVyZWRWaWV3ID09IGRpc3BsYXkudmlldyAmJlxuICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPj0gZGlzcGxheS52aWV3VG8pKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgLy8gRm9yIGJpZyBjaGFuZ2VzLCB3ZSBoaWRlIHRoZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhlXG4gICAgLy8gdXBkYXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJzLlxuICAgIHZhciBzZWxTbmFwc2hvdCA9IHNlbGVjdGlvblNuYXBzaG90KGNtKTtcbiAgICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7IH1cbiAgICBwYXRjaERpc3BsYXkoY20sIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMsIHVwZGF0ZS5kaW1zKTtcbiAgICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJcIjsgfVxuICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID0gZGlzcGxheS52aWV3O1xuICAgIC8vIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290XG4gICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LlxuICAgIHJlc3RvcmVTZWxlY3Rpb24oc2VsU25hcHNob3QpO1xuXG4gICAgLy8gUHJldmVudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBzY3JvbGxcbiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0LlxuICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuY3Vyc29yRGl2KTtcbiAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LnNlbGVjdGlvbkRpdik7XG4gICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gMDtcblxuICAgIGlmIChkaWZmZXJlbnQpIHtcbiAgICAgIGRpc3BsYXkubGFzdFdyYXBIZWlnaHQgPSB1cGRhdGUud3JhcHBlckhlaWdodDtcbiAgICAgIGRpc3BsYXkubGFzdFdyYXBXaWR0aCA9IHVwZGF0ZS53cmFwcGVyV2lkdGg7XG4gICAgICBzdGFydFdvcmtlcihjbSwgNDAwKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7XG4gICAgdmFyIHZpZXdwb3J0ID0gdXBkYXRlLnZpZXdwb3J0O1xuXG4gICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkge1xuICAgICAgaWYgKCFmaXJzdCB8fCAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgfHwgdXBkYXRlLm9sZERpc3BsYXlXaWR0aCA9PSBkaXNwbGF5V2lkdGgoY20pKSB7XG4gICAgICAgIC8vIENsaXAgZm9yY2VkIHZpZXdwb3J0IHRvIGFjdHVhbCBzY3JvbGxhYmxlIGFyZWEuXG4gICAgICAgIGlmICh2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbClcbiAgICAgICAgICB7IHZpZXdwb3J0ID0ge3RvcDogTWF0aC5taW4oY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRpc3BsYXkpIC0gZGlzcGxheUhlaWdodChjbSksIHZpZXdwb3J0LnRvcCl9OyB9XG4gICAgICAgIC8vIFVwZGF0ZWQgbGluZSBoZWlnaHRzIG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy5cbiAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7XG4gICAgICAgIGlmICh1cGRhdGUudmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgdXBkYXRlLnZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8pXG4gICAgICAgICAgeyBicmVhayB9XG4gICAgICB9IGVsc2UgaWYgKGZpcnN0KSB7XG4gICAgICAgIHVwZGF0ZS52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmlld3BvcnQpO1xuICAgICAgfVxuICAgICAgaWYgKCF1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHsgYnJlYWsgfVxuICAgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pO1xuICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTZWxlY3Rpb24oY20pO1xuICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7XG4gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7XG4gICAgICB1cGRhdGUuZm9yY2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGUuc2lnbmFsKGNtLCBcInVwZGF0ZVwiLCBjbSk7XG4gICAgaWYgKGNtLmRpc3BsYXkudmlld0Zyb20gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8pIHtcbiAgICAgIHVwZGF0ZS5zaWduYWwoY20sIFwidmlld3BvcnRDaGFuZ2VcIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmlld1RvKTtcbiAgICAgIGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbSA9IGNtLmRpc3BsYXkudmlld0Zyb207IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8gPSBjbS5kaXNwbGF5LnZpZXdUbztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB2aWV3cG9ydCkge1xuICAgIHZhciB1cGRhdGUgPSBuZXcgRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQpO1xuICAgIGlmICh1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHtcbiAgICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTtcbiAgICAgIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRhdGUpO1xuICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTZWxlY3Rpb24oY20pO1xuICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7XG4gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7XG4gICAgICB1cGRhdGUuZmluaXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3luYyB0aGUgYWN0dWFsIGRpc3BsYXkgRE9NIHN0cnVjdHVyZSB3aXRoIGRpc3BsYXkudmlldywgcmVtb3ZpbmdcbiAgLy8gbm9kZXMgZm9yIGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB2aWV3LCBhbmQgY3JlYXRpbmcgdGhlIG9uZXNcbiAgLy8gdGhhdCBhcmUgbm90IHRoZXJlIHlldCwgYW5kIHVwZGF0aW5nIHRoZSBvbmVzIHRoYXQgYXJlIG91dCBvZlxuICAvLyBkYXRlLlxuICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIHVwZGF0ZU51bWJlcnNGcm9tLCBkaW1zKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBsaW5lTnVtYmVycyA9IGNtLm9wdGlvbnMubGluZU51bWJlcnM7XG4gICAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXkubGluZURpdiwgY3VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICBmdW5jdGlvbiBybShub2RlKSB7XG4gICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAvLyBXb3JrcyBhcm91bmQgYSB0aHJvdy1zY3JvbGwgYnVnIGluIE9TIFggV2Via2l0XG4gICAgICBpZiAod2Via2l0ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBub2RlKVxuICAgICAgICB7IG5vZGUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOyB9XG4gICAgICByZXR1cm4gbmV4dFxuICAgIH1cblxuICAgIHZhciB2aWV3ID0gZGlzcGxheS52aWV3LCBsaW5lTiA9IGRpc3BsYXkudmlld0Zyb207XG4gICAgLy8gTG9vcCBvdmVyIHRoZSBlbGVtZW50cyBpbiB0aGUgdmlldywgc3luY2luZyBjdXIgKHRoZSBET00gbm9kZXNcbiAgICAvLyBpbiBkaXNwbGF5LmxpbmVEaXYpIHdpdGggdGhlIHZpZXcgYXMgd2UgZ28uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZVZpZXcgPSB2aWV3W2ldO1xuICAgICAgaWYgKGxpbmVWaWV3LmhpZGRlbikgOyBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5ZXRcbiAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpO1xuICAgICAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGN1cik7XG4gICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduXG4gICAgICAgIHdoaWxlIChjdXIgIT0gbGluZVZpZXcubm9kZSkgeyBjdXIgPSBybShjdXIpOyB9XG4gICAgICAgIHZhciB1cGRhdGVOdW1iZXIgPSBsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJzRnJvbSAhPSBudWxsICYmXG4gICAgICAgICAgdXBkYXRlTnVtYmVyc0Zyb20gPD0gbGluZU4gJiYgbGluZVZpZXcubGluZU51bWJlcjtcbiAgICAgICAgaWYgKGxpbmVWaWV3LmNoYW5nZXMpIHtcbiAgICAgICAgICBpZiAoaW5kZXhPZihsaW5lVmlldy5jaGFuZ2VzLCBcImd1dHRlclwiKSA+IC0xKSB7IHVwZGF0ZU51bWJlciA9IGZhbHNlOyB9XG4gICAgICAgICAgdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU51bWJlcikge1xuICAgICAgICAgIHJlbW92ZUNoaWxkcmVuKGxpbmVWaWV3LmxpbmVOdW1iZXIpO1xuICAgICAgICAgIGxpbmVWaWV3LmxpbmVOdW1iZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTikpKTtcbiAgICAgICAgfVxuICAgICAgICBjdXIgPSBsaW5lVmlldy5ub2RlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgbGluZU4gKz0gbGluZVZpZXcuc2l6ZTtcbiAgICB9XG4gICAgd2hpbGUgKGN1cikgeyBjdXIgPSBybShjdXIpOyB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShkaXNwbGF5KSB7XG4gICAgdmFyIHdpZHRoID0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIGRpc3BsYXkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdCA9IHdpZHRoICsgXCJweFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHtcbiAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgXCJweFwiO1xuICAgIGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgXCJweFwiO1xuICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSAobWVhc3VyZS5kb2NIZWlnaHQgKyBjbS5kaXNwbGF5LmJhckhlaWdodCArIHNjcm9sbEdhcChjbSkpICsgXCJweFwiO1xuICB9XG5cbiAgLy8gUmUtYWxpZ24gbGluZSBudW1iZXJzIGFuZCBndXR0ZXIgbWFya3MgdG8gY29tcGVuc2F0ZSBmb3JcbiAgLy8gaG9yaXpvbnRhbCBzY3JvbGxpbmcuXG4gIGZ1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5KGNtKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3O1xuICAgIGlmICghZGlzcGxheS5hbGlnbldpZGdldHMgJiYgKCFkaXNwbGF5Lmd1dHRlcnMuZmlyc3RDaGlsZCB8fCAhY20ub3B0aW9ucy5maXhlZEd1dHRlcikpIHsgcmV0dXJuIH1cbiAgICB2YXIgY29tcCA9IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgY20uZG9jLnNjcm9sbExlZnQ7XG4gICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsIGxlZnQgPSBjb21wICsgXCJweFwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgeyBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7XG4gICAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcikge1xuICAgICAgICBpZiAodmlld1tpXS5ndXR0ZXIpXG4gICAgICAgICAgeyB2aWV3W2ldLmd1dHRlci5zdHlsZS5sZWZ0ID0gbGVmdDsgfVxuICAgICAgICBpZiAodmlld1tpXS5ndXR0ZXJCYWNrZ3JvdW5kKVxuICAgICAgICAgIHsgdmlld1tpXS5ndXR0ZXJCYWNrZ3JvdW5kLnN0eWxlLmxlZnQgPSBsZWZ0OyB9XG4gICAgICB9XG4gICAgICB2YXIgYWxpZ24gPSB2aWV3W2ldLmFsaWduYWJsZTtcbiAgICAgIGlmIChhbGlnbikgeyBmb3IgKHZhciBqID0gMDsgaiA8IGFsaWduLmxlbmd0aDsgaisrKVxuICAgICAgICB7IGFsaWduW2pdLnN0eWxlLmxlZnQgPSBsZWZ0OyB9IH1cbiAgICB9IH1cbiAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcilcbiAgICAgIHsgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSAoY29tcCArIGd1dHRlclcpICsgXCJweFwiOyB9XG4gIH1cblxuICAvLyBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBsaW5lIG51bWJlciBndXR0ZXIgaXMgc3RpbGwgdGhlIHJpZ2h0XG4gIC8vIHNpemUgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IHNpemUuIFJldHVybnMgdHJ1ZSB3aGVuIGFuIHVwZGF0ZVxuICAvLyBpcyBuZWVkZWQuXG4gIGZ1bmN0aW9uIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSB7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgbGFzdCA9IGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJzKSB7XG4gICAgICB2YXIgdGVzdCA9IGRpc3BsYXkubWVhc3VyZS5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBsYXN0KV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIpKTtcbiAgICAgIHZhciBpbm5lclcgPSB0ZXN0LmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsIHBhZGRpbmcgPSB0ZXN0Lm9mZnNldFdpZHRoIC0gaW5uZXJXO1xuICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0eWxlLndpZHRoID0gXCJcIjtcbiAgICAgIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChpbm5lclcsIGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpICsgMTtcbiAgICAgIGRpc3BsYXkubGluZU51bVdpZHRoID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArIHBhZGRpbmc7XG4gICAgICBkaXNwbGF5LmxpbmVOdW1DaGFycyA9IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPyBsYXN0Lmxlbmd0aCA6IC0xO1xuICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0eWxlLndpZHRoID0gZGlzcGxheS5saW5lTnVtV2lkdGggKyBcInB4XCI7XG4gICAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbS5kaXNwbGF5KTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0R3V0dGVycyhndXR0ZXJzLCBsaW5lTnVtYmVycykge1xuICAgIHZhciByZXN1bHQgPSBbXSwgc2F3TGluZU51bWJlcnMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGd1dHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gZ3V0dGVyc1tpXSwgc3R5bGUgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lICE9IFwic3RyaW5nXCIpIHsgc3R5bGUgPSBuYW1lLnN0eWxlOyBuYW1lID0gbmFtZS5jbGFzc05hbWU7IH1cbiAgICAgIGlmIChuYW1lID09IFwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiKSB7XG4gICAgICAgIGlmICghbGluZU51bWJlcnMpIHsgY29udGludWUgfVxuICAgICAgICBlbHNlIHsgc2F3TGluZU51bWJlcnMgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh7Y2xhc3NOYW1lOiBuYW1lLCBzdHlsZTogc3R5bGV9KTtcbiAgICB9XG4gICAgaWYgKGxpbmVOdW1iZXJzICYmICFzYXdMaW5lTnVtYmVycykgeyByZXN1bHQucHVzaCh7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIiwgc3R5bGU6IG51bGx9KTsgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIFJlYnVpbGQgdGhlIGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBtYXJnaW4gdG8gdGhlIGxlZnQgb2YgdGhlXG4gIC8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC5cbiAgZnVuY3Rpb24gcmVuZGVyR3V0dGVycyhkaXNwbGF5KSB7XG4gICAgdmFyIGd1dHRlcnMgPSBkaXNwbGF5Lmd1dHRlcnMsIHNwZWNzID0gZGlzcGxheS5ndXR0ZXJTcGVjcztcbiAgICByZW1vdmVDaGlsZHJlbihndXR0ZXJzKTtcbiAgICBkaXNwbGF5LmxpbmVHdXR0ZXIgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BlY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciByZWYgPSBzcGVjc1tpXTtcbiAgICAgIHZhciBjbGFzc05hbWUgPSByZWYuY2xhc3NOYW1lO1xuICAgICAgdmFyIHN0eWxlID0gcmVmLnN0eWxlO1xuICAgICAgdmFyIGdFbHQgPSBndXR0ZXJzLmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyIFwiICsgY2xhc3NOYW1lKSk7XG4gICAgICBpZiAoc3R5bGUpIHsgZ0VsdC5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7IH1cbiAgICAgIGlmIChjbGFzc05hbWUgPT0gXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIpIHtcbiAgICAgICAgZGlzcGxheS5saW5lR3V0dGVyID0gZ0VsdDtcbiAgICAgICAgZ0VsdC5zdHlsZS53aWR0aCA9IChkaXNwbGF5LmxpbmVOdW1XaWR0aCB8fCAxKSArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ3V0dGVycy5zdHlsZS5kaXNwbGF5ID0gc3BlY3MubGVuZ3RoID8gXCJcIiA6IFwibm9uZVwiO1xuICAgIHVwZGF0ZUd1dHRlclNwYWNlKGRpc3BsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlR3V0dGVycyhjbSkge1xuICAgIHJlbmRlckd1dHRlcnMoY20uZGlzcGxheSk7XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gIH1cblxuICAvLyBUaGUgZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGggZm9yIGlucHV0IHJlYWRpbmdcbiAgLy8gYW5kIGNvbnRlbnQgZHJhd2luZy4gSXQgaG9sZHMgcmVmZXJlbmNlcyB0byBET00gbm9kZXMgYW5kXG4gIC8vIGRpc3BsYXktcmVsYXRlZCBzdGF0ZS5cblxuICBmdW5jdGlvbiBEaXNwbGF5KHBsYWNlLCBkb2MsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgdmFyIGQgPSB0aGlzO1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgIC8vIENvdmVycyBib3R0b20tcmlnaHQgc3F1YXJlIHdoZW4gYm90aCBzY3JvbGxiYXJzIGFyZSBwcmVzZW50LlxuICAgIGQuc2Nyb2xsYmFyRmlsbGVyID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyXCIpO1xuICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsIFwidHJ1ZVwiKTtcbiAgICAvLyBDb3ZlcnMgYm90dG9tIG9mIGd1dHRlciB3aGVuIGNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIGlzIG9uXG4gICAgLy8gYW5kIGggc2Nyb2xsYmFyIGlzIHByZXNlbnQuXG4gICAgZC5ndXR0ZXJGaWxsZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXJcIik7XG4gICAgZC5ndXR0ZXJGaWxsZXIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIHZpZXdwb3J0LlxuICAgIGQubGluZURpdiA9IGVsdFAoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWNvZGVcIik7XG4gICAgLy8gRWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZXNlIHRvIHJlcHJlc2VudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMuXG4gICAgZC5zZWxlY3Rpb25EaXYgPSBlbHQoXCJkaXZcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDFcIik7XG4gICAgZC5jdXJzb3JEaXYgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWN1cnNvcnNcIik7XG4gICAgLy8gQSB2aXNpYmlsaXR5OiBoaWRkZW4gZWxlbWVudCB1c2VkIHRvIGZpbmQgdGhlIHNpemUgb2YgdGhpbmdzLlxuICAgIGQubWVhc3VyZSA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItbWVhc3VyZVwiKTtcbiAgICAvLyBXaGVuIGxpbmVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IGFyZSBtZWFzdXJlZCwgdGhleSBhcmUgZHJhd24gaW4gdGhpcy5cbiAgICBkLmxpbmVNZWFzdXJlID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpO1xuICAgIC8vIFdyYXBzIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBleGlzdCBpbnNpZGUgdGhlIHZlcnRpY2FsbHktcGFkZGVkIGNvb3JkaW5hdGUgc3lzdGVtXG4gICAgZC5saW5lU3BhY2UgPSBlbHRQKFwiZGl2XCIsIFtkLm1lYXN1cmUsIGQubGluZU1lYXN1cmUsIGQuc2VsZWN0aW9uRGl2LCBkLmN1cnNvckRpdiwgZC5saW5lRGl2XSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZVwiKTtcbiAgICB2YXIgbGluZXMgPSBlbHRQKFwiZGl2XCIsIFtkLmxpbmVTcGFjZV0sIFwiQ29kZU1pcnJvci1saW5lc1wiKTtcbiAgICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcuXG4gICAgZC5tb3ZlciA9IGVsdChcImRpdlwiLCBbbGluZXNdLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZVwiKTtcbiAgICAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgZG9jdW1lbnQsIGFsbG93aW5nIHNjcm9sbGluZy5cbiAgICBkLnNpemVyID0gZWx0KFwiZGl2XCIsIFtkLm1vdmVyXSwgXCJDb2RlTWlycm9yLXNpemVyXCIpO1xuICAgIGQuc2l6ZXJXaWR0aCA9IG51bGw7XG4gICAgLy8gQmVoYXZpb3Igb2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzXG4gICAgLy8gaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGVcbiAgICAvLyBzY3JvbGxhYmxlIGFyZWEgaXMgYmlnIGVub3VnaC5cbiAgICBkLmhlaWdodEZvcmNlciA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiBcIiArIHNjcm9sbGVyR2FwICsgXCJweDsgd2lkdGg6IDFweDtcIik7XG4gICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkuXG4gICAgZC5ndXR0ZXJzID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXJzXCIpO1xuICAgIGQubGluZUd1dHRlciA9IG51bGw7XG4gICAgLy8gQWN0dWFsIHNjcm9sbGFibGUgZWxlbWVudC5cbiAgICBkLnNjcm9sbGVyID0gZWx0KFwiZGl2XCIsIFtkLnNpemVyLCBkLmhlaWdodEZvcmNlciwgZC5ndXR0ZXJzXSwgXCJDb2RlTWlycm9yLXNjcm9sbFwiKTtcbiAgICBkLnNjcm9sbGVyLnNldEF0dHJpYnV0ZShcInRhYkluZGV4XCIsIFwiLTFcIik7XG4gICAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBsaXZlcy5cbiAgICBkLndyYXBwZXIgPSBlbHQoXCJkaXZcIiwgW2Quc2Nyb2xsYmFyRmlsbGVyLCBkLmd1dHRlckZpbGxlciwgZC5zY3JvbGxlcl0sIFwiQ29kZU1pcnJvclwiKTtcblxuICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1ZyAobm90IHBlcmZlY3QsIGhlbmNlIElFNyBub3QgcmVhbGx5IGJlaW5nIHN1cHBvcnRlZClcbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH1cbiAgICBpZiAoIXdlYmtpdCAmJiAhKGdlY2tvICYmIG1vYmlsZSkpIHsgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOyB9XG5cbiAgICBpZiAocGxhY2UpIHtcbiAgICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgeyBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOyB9XG4gICAgICBlbHNlIHsgcGxhY2UoZC53cmFwcGVyKTsgfVxuICAgIH1cblxuICAgIC8vIEN1cnJlbnQgcmVuZGVyZWQgcmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLlxuICAgIGQudmlld0Zyb20gPSBkLnZpZXdUbyA9IGRvYy5maXJzdDtcbiAgICBkLnJlcG9ydGVkVmlld0Zyb20gPSBkLnJlcG9ydGVkVmlld1RvID0gZG9jLmZpcnN0O1xuICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5lcy5cbiAgICBkLnZpZXcgPSBbXTtcbiAgICBkLnJlbmRlcmVkVmlldyA9IG51bGw7XG4gICAgLy8gSG9sZHMgaW5mbyBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4gaXQgd2FzIHJlbmRlcmVkXG4gICAgLy8gZm9yIG1lYXN1cmVtZW50LCB3aGlsZSBub3QgaW4gdmlldy5cbiAgICBkLmV4dGVybmFsTWVhc3VyZWQgPSBudWxsO1xuICAgIC8vIEVtcHR5IHNwYWNlIChpbiBwaXhlbHMpIGFib3ZlIHRoZSB2aWV3XG4gICAgZC52aWV3T2Zmc2V0ID0gMDtcbiAgICBkLmxhc3RXcmFwSGVpZ2h0ID0gZC5sYXN0V3JhcFdpZHRoID0gMDtcbiAgICBkLnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICAgIGQubmF0aXZlQmFyV2lkdGggPSBkLmJhckhlaWdodCA9IGQuYmFyV2lkdGggPSAwO1xuICAgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciB3aGVuIG5lY2Vzc2FyeSAod2hlblxuICAgIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgY3Jvc3NlcyBhIGJvdW5kYXJ5IHRoYXQgbWFrZXMgaXRzIHdpZHRoIGNoYW5nZSlcbiAgICBkLmxpbmVOdW1XaWR0aCA9IGQubGluZU51bUlubmVyV2lkdGggPSBkLmxpbmVOdW1DaGFycyA9IG51bGw7XG4gICAgLy8gU2V0IHRvIHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5lIHdpZGdldCBpc1xuICAgIC8vIGFkZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0IGFsaWduaW5nIGlzIHNraXBwZWQgd2hlblxuICAgIC8vIHRoaXMgaXMgZmFsc2UuXG4gICAgZC5hbGlnbldpZGdldHMgPSBmYWxzZTtcblxuICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5nSCA9IG51bGw7XG5cbiAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXJcbiAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuXG4gICAgZC5tYXhMaW5lID0gbnVsbDtcbiAgICBkLm1heExpbmVMZW5ndGggPSAwO1xuICAgIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgZm9yIG1lYXN1cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHlcbiAgICBkLndoZWVsRFggPSBkLndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7XG5cbiAgICAvLyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLlxuICAgIGQuc2hpZnQgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hldGhlciBhbnl0aGluZyBoYXBwZW5lZCBzaW5jZSB0aGUgY29udGV4dCBtZW51XG4gICAgLy8gd2FzIG9wZW5lZC5cbiAgICBkLnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDtcblxuICAgIGQuYWN0aXZlVG91Y2ggPSBudWxsO1xuXG4gICAgZC5ndXR0ZXJTcGVjcyA9IGdldEd1dHRlcnMob3B0aW9ucy5ndXR0ZXJzLCBvcHRpb25zLmxpbmVOdW1iZXJzKTtcbiAgICByZW5kZXJHdXR0ZXJzKGQpO1xuXG4gICAgaW5wdXQuaW5pdChkKTtcbiAgfVxuXG4gIC8vIFNpbmNlIHRoZSBkZWx0YSB2YWx1ZXMgcmVwb3J0ZWQgb24gbW91c2Ugd2hlZWwgZXZlbnRzIGFyZVxuICAvLyB1bnN0YW5kYXJkaXplZCBiZXR3ZWVuIGJyb3dzZXJzIGFuZCBldmVuIGJyb3dzZXIgdmVyc2lvbnMsIGFuZFxuICAvLyBnZW5lcmFsbHkgaG9ycmlibHkgdW5wcmVkaWN0YWJsZSwgdGhpcyBjb2RlIHN0YXJ0cyBieSBtZWFzdXJpbmdcbiAgLy8gdGhlIHNjcm9sbCBlZmZlY3QgdGhhdCB0aGUgZmlyc3QgZmV3IG1vdXNlIHdoZWVsIGV2ZW50cyBoYXZlLFxuICAvLyBhbmQsIGZyb20gdGhhdCwgZGV0ZWN0cyB0aGUgd2F5IGl0IGNhbiBjb252ZXJ0IGRlbHRhcyB0byBwaXhlbFxuICAvLyBvZmZzZXRzIGFmdGVyd2FyZHMuXG4gIC8vXG4gIC8vIFRoZSByZWFzb24gd2Ugd2FudCB0byBrbm93IHRoZSBhbW91bnQgYSB3aGVlbCBldmVudCB3aWxsIHNjcm9sbFxuICAvLyBpcyB0aGF0IGl0IGdpdmVzIHVzIGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSBiZWZvcmUgdGhlXG4gIC8vIGFjdHVhbCBzY3JvbGxpbmcgaGFwcGVucywgcmVkdWNpbmcgZmxpY2tlcmluZy5cblxuICB2YXIgd2hlZWxTYW1wbGVzID0gMCwgd2hlZWxQaXhlbHNQZXJVbml0ID0gbnVsbDtcbiAgLy8gRmlsbCBpbiBhIGJyb3dzZXItZGV0ZWN0ZWQgc3RhcnRpbmcgdmFsdWUgb24gYnJvd3NlcnMgd2hlcmUgd2VcbiAgLy8ga25vdyBvbmUuIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgYWNjdXJhdGUgLS0gdGhlIHJlc3VsdCBvZiB0aGVtXG4gIC8vIGJlaW5nIHdyb25nIHdvdWxkIGp1c3QgYmUgYSBzbGlnaHQgZmxpY2tlciBvbiB0aGUgZmlyc3Qgd2hlZWxcbiAgLy8gc2Nyb2xsIChpZiBpdCBpcyBsYXJnZSBlbm91Z2gpLlxuICBpZiAoaWUpIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS41MzsgfVxuICBlbHNlIGlmIChnZWNrbykgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAxNTsgfVxuICBlbHNlIGlmIChjaHJvbWUpIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS43OyB9XG4gIGVsc2UgaWYgKHNhZmFyaSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtMS8zOyB9XG5cbiAgZnVuY3Rpb24gd2hlZWxFdmVudERlbHRhKGUpIHtcbiAgICB2YXIgZHggPSBlLndoZWVsRGVsdGFYLCBkeSA9IGUud2hlZWxEZWx0YVk7XG4gICAgaWYgKGR4ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7IGR4ID0gZS5kZXRhaWw7IH1cbiAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNBTF9BWElTKSB7IGR5ID0gZS5kZXRhaWw7IH1cbiAgICBlbHNlIGlmIChkeSA9PSBudWxsKSB7IGR5ID0gZS53aGVlbERlbHRhOyB9XG4gICAgcmV0dXJuIHt4OiBkeCwgeTogZHl9XG4gIH1cbiAgZnVuY3Rpb24gd2hlZWxFdmVudFBpeGVscyhlKSB7XG4gICAgdmFyIGRlbHRhID0gd2hlZWxFdmVudERlbHRhKGUpO1xuICAgIGRlbHRhLnggKj0gd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgIGRlbHRhLnkgKj0gd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgIHJldHVybiBkZWx0YVxuICB9XG5cbiAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkge1xuICAgIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9IGRlbHRhLnk7XG5cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNjcm9sbCA9IGRpc3BsYXkuc2Nyb2xsZXI7XG4gICAgLy8gUXVpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2Nyb2xsIGhlcmVcbiAgICB2YXIgY2FuU2Nyb2xsWCA9IHNjcm9sbC5zY3JvbGxXaWR0aCA+IHNjcm9sbC5jbGllbnRXaWR0aDtcbiAgICB2YXIgY2FuU2Nyb2xsWSA9IHNjcm9sbC5zY3JvbGxIZWlnaHQgPiBzY3JvbGwuY2xpZW50SGVpZ2h0O1xuICAgIGlmICghKGR4ICYmIGNhblNjcm9sbFggfHwgZHkgJiYgY2FuU2Nyb2xsWSkpIHsgcmV0dXJuIH1cblxuICAgIC8vIFdlYmtpdCBicm93c2VycyBvbiBPUyBYIGFib3J0IG1vbWVudHVtIHNjcm9sbHMgd2hlbiB0aGUgdGFyZ2V0XG4gICAgLy8gb2YgdGhlIHNjcm9sbCBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIHNjcm9sbGFibGUgZWxlbWVudC5cbiAgICAvLyBUaGlzIGhhY2sgKHNlZSByZWxhdGVkIGNvZGUgaW4gcGF0Y2hEaXNwbGF5KSBtYWtlcyBzdXJlIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMga2VwdCBhcm91bmQuXG4gICAgaWYgKGR5ICYmIG1hYyAmJiB3ZWJraXQpIHtcbiAgICAgIG91dGVyOiBmb3IgKHZhciBjdXIgPSBlLnRhcmdldCwgdmlldyA9IGRpc3BsYXkudmlldzsgY3VyICE9IHNjcm9sbDsgY3VyID0gY3VyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHZpZXdbaV0ubm9kZSA9PSBjdXIpIHtcbiAgICAgICAgICAgIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID0gY3VyO1xuICAgICAgICAgICAgYnJlYWsgb3V0ZXJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbiBzb21lIGJyb3dzZXJzLCBob3Jpem9udGFsIHNjcm9sbGluZyB3aWxsIGNhdXNlIHJlZHJhd3MgdG9cbiAgICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0ZXIgaGFzIGJlZW4gcmVhbGlnbmVkLCBjYXVzaW5nIGl0IHRvXG4gICAgLy8gd3JpZ2dsZSBhcm91bmQgaW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuXG4gICAgLy8gZXN0aW1hdGVkIHBpeGVscy9kZWx0YSB2YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbFxuICAgIC8vIHNjcm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUsIGJ1dFxuICAgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuXG4gICAgaWYgKGR4ICYmICFnZWNrbyAmJiAhcHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7XG4gICAgICBpZiAoZHkgJiYgY2FuU2Nyb2xsWSlcbiAgICAgICAgeyB1cGRhdGVTY3JvbGxUb3AoY20sIE1hdGgubWF4KDAsIHNjcm9sbC5zY3JvbGxUb3AgKyBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdCkpOyB9XG4gICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1heCgwLCBzY3JvbGwuc2Nyb2xsTGVmdCArIGR4ICogd2hlZWxQaXhlbHNQZXJVbml0KSk7XG4gICAgICAvLyBPbmx5IHByZXZlbnQgZGVmYXVsdCBzY3JvbGxpbmcgaWYgdmVydGljYWwgc2Nyb2xsaW5nIGlzXG4gICAgICAvLyBhY3R1YWxseSBwb3NzaWJsZS4gT3RoZXJ3aXNlLCBpdCBjYXVzZXMgdmVydGljYWwgc2Nyb2xsXG4gICAgICAvLyBqaXR0ZXIgb24gT1NYIHRyYWNrcGFkcyB3aGVuIGRlbHRhWCBpcyBzbWFsbCBhbmQgZGVsdGFZXG4gICAgICAvLyBpcyBsYXJnZSAoaXNzdWUgIzM1NzkpXG4gICAgICBpZiAoIWR5IHx8IChkeSAmJiBjYW5TY3JvbGxZKSlcbiAgICAgICAgeyBlX3ByZXZlbnREZWZhdWx0KGUpOyB9XG4gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gbnVsbDsgLy8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAnUHJvamVjdCcgdGhlIHZpc2libGUgdmlld3BvcnQgdG8gY292ZXIgdGhlIGFyZWEgdGhhdCBpcyBiZWluZ1xuICAgIC8vIHNjcm9sbGVkIGludG8gdmlldyAoaWYgd2Uga25vdyBlbm91Z2ggdG8gZXN0aW1hdGUgaXQpLlxuICAgIGlmIChkeSAmJiB3aGVlbFBpeGVsc1BlclVuaXQgIT0gbnVsbCkge1xuICAgICAgdmFyIHBpeGVscyA9IGR5ICogd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgICAgdmFyIHRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIGJvdCA9IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG4gICAgICBpZiAocGl4ZWxzIDwgMCkgeyB0b3AgPSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7IH1cbiAgICAgIGVsc2UgeyBib3QgPSBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1MCk7IH1cbiAgICAgIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTtcbiAgICB9XG5cbiAgICBpZiAod2hlZWxTYW1wbGVzIDwgMjApIHtcbiAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHtcbiAgICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IHNjcm9sbC5zY3JvbGxMZWZ0OyBkaXNwbGF5LndoZWVsU3RhcnRZID0gc2Nyb2xsLnNjcm9sbFRvcDtcbiAgICAgICAgZGlzcGxheS53aGVlbERYID0gZHg7IGRpc3BsYXkud2hlZWxEWSA9IGR5O1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZGlzcGxheS53aGVlbFN0YXJ0WCA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgICAgICAgdmFyIG1vdmVkWCA9IHNjcm9sbC5zY3JvbGxMZWZ0IC0gZGlzcGxheS53aGVlbFN0YXJ0WDtcbiAgICAgICAgICB2YXIgbW92ZWRZID0gc2Nyb2xsLnNjcm9sbFRvcCAtIGRpc3BsYXkud2hlZWxTdGFydFk7XG4gICAgICAgICAgdmFyIHNhbXBsZSA9IChtb3ZlZFkgJiYgZGlzcGxheS53aGVlbERZICYmIG1vdmVkWSAvIGRpc3BsYXkud2hlZWxEWSkgfHxcbiAgICAgICAgICAgIChtb3ZlZFggJiYgZGlzcGxheS53aGVlbERYICYmIG1vdmVkWCAvIGRpc3BsYXkud2hlZWxEWCk7XG4gICAgICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IGRpc3BsYXkud2hlZWxTdGFydFkgPSBudWxsO1xuICAgICAgICAgIGlmICghc2FtcGxlKSB7IHJldHVybiB9XG4gICAgICAgICAgd2hlZWxQaXhlbHNQZXJVbml0ID0gKHdoZWVsUGl4ZWxzUGVyVW5pdCAqIHdoZWVsU2FtcGxlcyArIHNhbXBsZSkgLyAod2hlZWxTYW1wbGVzICsgMSk7XG4gICAgICAgICAgKyt3aGVlbFNhbXBsZXM7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5LndoZWVsRFggKz0gZHg7IGRpc3BsYXkud2hlZWxEWSArPSBkeTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWxlY3Rpb24gb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBBIG5ldyBvbmUgaXMgY3JlYXRlZCBldmVyeSB0aW1lXG4gIC8vIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gQSBzZWxlY3Rpb24gaXMgb25lIG9yIG1vcmUgbm9uLW92ZXJsYXBwaW5nXG4gIC8vIChhbmQgbm9uLXRvdWNoaW5nKSByYW5nZXMsIHNvcnRlZCwgYW5kIGFuIGludGVnZXIgdGhhdCBpbmRpY2F0ZXNcbiAgLy8gd2hpY2ggb25lIGlzIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiAodGhlIG9uZSB0aGF0J3Mgc2Nyb2xsZWQgaW50b1xuICAvLyB2aWV3LCB0aGF0IGdldEN1cnNvciByZXR1cm5zLCBldGMpLlxuICB2YXIgU2VsZWN0aW9uID0gZnVuY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHtcbiAgICB0aGlzLnJhbmdlcyA9IHJhbmdlcztcbiAgICB0aGlzLnByaW1JbmRleCA9IHByaW1JbmRleDtcbiAgfTtcblxuICBTZWxlY3Rpb24ucHJvdG90eXBlLnByaW1hcnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnByaW1JbmRleF0gfTtcblxuICBTZWxlY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmIChvdGhlciA9PSB0aGlzKSB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAob3RoZXIucHJpbUluZGV4ICE9IHRoaXMucHJpbUluZGV4IHx8IG90aGVyLnJhbmdlcy5sZW5ndGggIT0gdGhpcy5yYW5nZXMubGVuZ3RoKSB7IHJldHVybiBmYWxzZSB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlcmUgPSB0aGlzLnJhbmdlc1tpXSwgdGhlcmUgPSBvdGhlci5yYW5nZXNbaV07XG4gICAgICBpZiAoIWVxdWFsQ3Vyc29yUG9zKGhlcmUuYW5jaG9yLCB0aGVyZS5hbmNob3IpIHx8ICFlcXVhbEN1cnNvclBvcyhoZXJlLmhlYWQsIHRoZXJlLmhlYWQpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH07XG5cbiAgU2VsZWN0aW9uLnByb3RvdHlwZS5kZWVwQ29weSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgb3V0W2ldID0gbmV3IFJhbmdlKGNvcHlQb3ModGhpcy5yYW5nZXNbaV0uYW5jaG9yKSwgY29weVBvcyh0aGlzLnJhbmdlc1tpXS5oZWFkKSk7IH1cbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIHRoaXMucHJpbUluZGV4KVxuICB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUuc29tZXRoaW5nU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgaWYgKCF0aGlzLnJhbmdlc1tpXS5lbXB0eSgpKSB7IHJldHVybiB0cnVlIH0gfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAocG9zLCBlbmQpIHtcbiAgICBpZiAoIWVuZCkgeyBlbmQgPSBwb3M7IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLnJhbmdlc1tpXTtcbiAgICAgIGlmIChjbXAoZW5kLCByYW5nZS5mcm9tKCkpID49IDAgJiYgY21wKHBvcywgcmFuZ2UudG8oKSkgPD0gMClcbiAgICAgICAgeyByZXR1cm4gaSB9XG4gICAgfVxuICAgIHJldHVybiAtMVxuICB9O1xuXG4gIHZhciBSYW5nZSA9IGZ1bmN0aW9uKGFuY2hvciwgaGVhZCkge1xuICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yOyB0aGlzLmhlYWQgPSBoZWFkO1xuICB9O1xuXG4gIFJhbmdlLnByb3RvdHlwZS5mcm9tID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWluUG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpIH07XG4gIFJhbmdlLnByb3RvdHlwZS50byA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKSB9O1xuICBSYW5nZS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmhlYWQubGluZSA9PSB0aGlzLmFuY2hvci5saW5lICYmIHRoaXMuaGVhZC5jaCA9PSB0aGlzLmFuY2hvci5jaCB9O1xuXG4gIC8vIFRha2UgYW4gdW5zb3J0ZWQsIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIHNldCBvZiByYW5nZXMsIGFuZFxuICAvLyBidWlsZCBhIHNlbGVjdGlvbiBvdXQgb2YgaXQuICdDb25zdW1lcycgcmFuZ2VzIGFycmF5IChtb2RpZnlpbmdcbiAgLy8gaXQpLlxuICBmdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcywgcHJpbUluZGV4KSB7XG4gICAgdmFyIG1heVRvdWNoID0gY20gJiYgY20ub3B0aW9ucy5zZWxlY3Rpb25zTWF5VG91Y2g7XG4gICAgdmFyIHByaW0gPSByYW5nZXNbcHJpbUluZGV4XTtcbiAgICByYW5nZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gY21wKGEuZnJvbSgpLCBiLmZyb20oKSk7IH0pO1xuICAgIHByaW1JbmRleCA9IGluZGV4T2YocmFuZ2VzLCBwcmltKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV07XG4gICAgICB2YXIgZGlmZiA9IGNtcChwcmV2LnRvKCksIGN1ci5mcm9tKCkpO1xuICAgICAgaWYgKG1heVRvdWNoICYmICFjdXIuZW1wdHkoKSA/IGRpZmYgPiAwIDogZGlmZiA+PSAwKSB7XG4gICAgICAgIHZhciBmcm9tID0gbWluUG9zKHByZXYuZnJvbSgpLCBjdXIuZnJvbSgpKSwgdG8gPSBtYXhQb3MocHJldi50bygpLCBjdXIudG8oKSk7XG4gICAgICAgIHZhciBpbnYgPSBwcmV2LmVtcHR5KCkgPyBjdXIuZnJvbSgpID09IGN1ci5oZWFkIDogcHJldi5mcm9tKCkgPT0gcHJldi5oZWFkO1xuICAgICAgICBpZiAoaSA8PSBwcmltSW5kZXgpIHsgLS1wcmltSW5kZXg7IH1cbiAgICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0bykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihbbmV3IFJhbmdlKGFuY2hvciwgaGVhZCB8fCBhbmNob3IpXSwgMClcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgYSBjaGFuZ2UgKGl0cyAndG8nIHByb3BlcnR5XG4gIC8vIHJlZmVycyB0byB0aGUgcHJlLWNoYW5nZSBlbmQpLlxuICBmdW5jdGlvbiBjaGFuZ2VFbmQoY2hhbmdlKSB7XG4gICAgaWYgKCFjaGFuZ2UudGV4dCkgeyByZXR1cm4gY2hhbmdlLnRvIH1cbiAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApKVxuICB9XG5cbiAgLy8gQWRqdXN0IGEgcG9zaXRpb24gdG8gcmVmZXIgdG8gdGhlIHBvc3QtY2hhbmdlIHBvc2l0aW9uIG9mIHRoZVxuICAvLyBzYW1lIHRleHQsIG9yIHRoZSBlbmQgb2YgdGhlIGNoYW5nZSBpZiB0aGUgY2hhbmdlIGNvdmVycyBpdC5cbiAgZnVuY3Rpb24gYWRqdXN0Rm9yQ2hhbmdlKHBvcywgY2hhbmdlKSB7XG4gICAgaWYgKGNtcChwb3MsIGNoYW5nZS5mcm9tKSA8IDApIHsgcmV0dXJuIHBvcyB9XG4gICAgaWYgKGNtcChwb3MsIGNoYW5nZS50bykgPD0gMCkgeyByZXR1cm4gY2hhbmdlRW5kKGNoYW5nZSkgfVxuXG4gICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpIC0gMSwgY2ggPSBwb3MuY2g7XG4gICAgaWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSB7IGNoICs9IGNoYW5nZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOyB9XG4gICAgcmV0dXJuIFBvcyhsaW5lLCBjaClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIG91dC5wdXNoKG5ldyBSYW5nZShhZGp1c3RGb3JDaGFuZ2UocmFuZ2UuYW5jaG9yLCBjaGFuZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdEZvckNoYW5nZShyYW5nZS5oZWFkLCBjaGFuZ2UpKSk7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvdXQsIGRvYy5zZWwucHJpbUluZGV4KVxuICB9XG5cbiAgZnVuY3Rpb24gb2Zmc2V0UG9zKHBvcywgb2xkLCBudykge1xuICAgIGlmIChwb3MubGluZSA9PSBvbGQubGluZSlcbiAgICAgIHsgcmV0dXJuIFBvcyhudy5saW5lLCBwb3MuY2ggLSBvbGQuY2ggKyBudy5jaCkgfVxuICAgIGVsc2VcbiAgICAgIHsgcmV0dXJuIFBvcyhudy5saW5lICsgKHBvcy5saW5lIC0gb2xkLmxpbmUpLCBwb3MuY2gpIH1cbiAgfVxuXG4gIC8vIFVzZWQgYnkgcmVwbGFjZVNlbGVjdGlvbnMgdG8gYWxsb3cgbW92aW5nIHRoZSBzZWxlY3Rpb24gdG8gdGhlXG4gIC8vIHN0YXJ0IG9yIGFyb3VuZCB0aGUgcmVwbGFjZWQgdGVzdC4gSGludCBtYXkgYmUgXCJzdGFydFwiIG9yIFwiYXJvdW5kXCIuXG4gIGZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNlbChkb2MsIGNoYW5nZXMsIGhpbnQpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIG9sZFByZXYgPSBQb3MoZG9jLmZpcnN0LCAwKSwgbmV3UHJldiA9IG9sZFByZXY7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICAgIHZhciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBvbGRQcmV2LCBuZXdQcmV2KTtcbiAgICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwgb2xkUHJldiwgbmV3UHJldik7XG4gICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvO1xuICAgICAgbmV3UHJldiA9IHRvO1xuICAgICAgaWYgKGhpbnQgPT0gXCJhcm91bmRcIikge1xuICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXSwgaW52ID0gY21wKHJhbmdlLmhlYWQsIHJhbmdlLmFuY2hvcikgPCAwO1xuICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoaW52ID8gdG8gOiBmcm9tLCBpbnYgPyBmcm9tIDogdG8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGZyb20sIGZyb20pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIGRvYy5zZWwucHJpbUluZGV4KVxuICB9XG5cbiAgLy8gVXNlZCB0byBnZXQgdGhlIGVkaXRvciBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBhZ2FpbiB3aGVuIG9wdGlvbnMgY2hhbmdlLlxuXG4gIGZ1bmN0aW9uIGxvYWRNb2RlKGNtKSB7XG4gICAgY20uZG9jLm1vZGUgPSBnZXRNb2RlKGNtLm9wdGlvbnMsIGNtLmRvYy5tb2RlT3B0aW9uKTtcbiAgICByZXNldE1vZGVTdGF0ZShjbSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldE1vZGVTdGF0ZShjbSkge1xuICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH1cbiAgICAgIGlmIChsaW5lLnN0eWxlcykgeyBsaW5lLnN0eWxlcyA9IG51bGw7IH1cbiAgICB9KTtcbiAgICBjbS5kb2MubW9kZUZyb250aWVyID0gY20uZG9jLmhpZ2hsaWdodEZyb250aWVyID0gY20uZG9jLmZpcnN0O1xuICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApO1xuICAgIGNtLnN0YXRlLm1vZGVHZW4rKztcbiAgICBpZiAoY20uY3VyT3ApIHsgcmVnQ2hhbmdlKGNtKTsgfVxuICB9XG5cbiAgLy8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkVcblxuICAvLyBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoYXQgc3RhcnQgYW5kIGVuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZVxuICAvLyBhcmUgdHJlYXRlZCBzcGVjaWFsbHksIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uIG9mIGxpbmVcbiAgLy8gd2lkZ2V0cyBhbmQgbWFya2VyIGVsZW1lbnRzIHdpdGggdGhlIHRleHQgYmVoYXZlIG1vcmUgaW50dWl0aXZlLlxuICBmdW5jdGlvbiBpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkge1xuICAgIHJldHVybiBjaGFuZ2UuZnJvbS5jaCA9PSAwICYmIGNoYW5nZS50by5jaCA9PSAwICYmIGxzdChjaGFuZ2UudGV4dCkgPT0gXCJcIiAmJlxuICAgICAgKCFkb2MuY20gfHwgZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKVxuICB9XG5cbiAgLy8gUGVyZm9ybSBhIGNoYW5nZSBvbiB0aGUgZG9jdW1lbnQgZGF0YSBzdHJ1Y3R1cmUuXG4gIGZ1bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7XG4gICAgZnVuY3Rpb24gc3BhbnNGb3Iobikge3JldHVybiBtYXJrZWRTcGFucyA/IG1hcmtlZFNwYW5zW25dIDogbnVsbH1cbiAgICBmdW5jdGlvbiB1cGRhdGUobGluZSwgdGV4dCwgc3BhbnMpIHtcbiAgICAgIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KTtcbiAgICAgIHNpZ25hbExhdGVyKGxpbmUsIFwiY2hhbmdlXCIsIGxpbmUsIGNoYW5nZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpbmVzRm9yKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKVxuICAgICAgICB7IHJlc3VsdC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOyB9XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dDtcbiAgICB2YXIgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZShkb2MsIHRvLmxpbmUpO1xuICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwgbGFzdFNwYW5zID0gc3BhbnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZTtcblxuICAgIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmVcbiAgICBpZiAoY2hhbmdlLmZ1bGwpIHtcbiAgICAgIGRvYy5pbnNlcnQoMCwgbGluZXNGb3IoMCwgdGV4dC5sZW5ndGgpKTtcbiAgICAgIGRvYy5yZW1vdmUodGV4dC5sZW5ndGgsIGRvYy5zaXplIC0gdGV4dC5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoaXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlXG4gICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uXG4gICAgICB2YXIgYWRkZWQgPSBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMpO1xuICAgICAgaWYgKG5saW5lcykgeyBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsgfVxuICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgeyBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOyB9XG4gICAgfSBlbHNlIGlmIChmaXJzdExpbmUgPT0gbGFzdExpbmUpIHtcbiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgbGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYWRkZWQkMSA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGFkZGVkJDEucHVzaChuZXcgTGluZShsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpO1xuICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTtcbiAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCQxKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRleHQubGVuZ3RoID09IDEpIHtcbiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBzcGFuc0ZvcigwKSk7XG4gICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpO1xuICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0VGV4dCArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpO1xuICAgICAgdmFyIGFkZGVkJDIgPSBsaW5lc0ZvcigxLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKG5saW5lcyA+IDEpIHsgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxKTsgfVxuICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCQyKTtcbiAgICB9XG5cbiAgICBzaWduYWxMYXRlcihkb2MsIFwiY2hhbmdlXCIsIGRvYywgY2hhbmdlKTtcbiAgfVxuXG4gIC8vIENhbGwgZiBmb3IgYWxsIGxpbmtlZCBkb2N1bWVudHMuXG4gIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkge1xuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHtcbiAgICAgIGlmIChkb2MubGlua2VkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcmVsID0gZG9jLmxpbmtlZFtpXTtcbiAgICAgICAgaWYgKHJlbC5kb2MgPT0gc2tpcCkgeyBjb250aW51ZSB9XG4gICAgICAgIHZhciBzaGFyZWQgPSBzaGFyZWRIaXN0ICYmIHJlbC5zaGFyZWRIaXN0O1xuICAgICAgICBpZiAoc2hhcmVkSGlzdE9ubHkgJiYgIXNoYXJlZCkgeyBjb250aW51ZSB9XG4gICAgICAgIGYocmVsLmRvYywgc2hhcmVkKTtcbiAgICAgICAgcHJvcGFnYXRlKHJlbC5kb2MsIGRvYywgc2hhcmVkKTtcbiAgICAgIH0gfVxuICAgIH1cbiAgICBwcm9wYWdhdGUoZG9jLCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIC8vIEF0dGFjaCBhIGRvY3VtZW50IHRvIGFuIGVkaXRvci5cbiAgZnVuY3Rpb24gYXR0YWNoRG9jKGNtLCBkb2MpIHtcbiAgICBpZiAoZG9jLmNtKSB7IHRocm93IG5ldyBFcnJvcihcIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuXCIpIH1cbiAgICBjbS5kb2MgPSBkb2M7XG4gICAgZG9jLmNtID0gY207XG4gICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7XG4gICAgbG9hZE1vZGUoY20pO1xuICAgIHNldERpcmVjdGlvbkNsYXNzKGNtKTtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGZpbmRNYXhMaW5lKGNtKTsgfVxuICAgIGNtLm9wdGlvbnMubW9kZSA9IGRvYy5tb2RlT3B0aW9uO1xuICAgIHJlZ0NoYW5nZShjbSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXREaXJlY3Rpb25DbGFzcyhjbSkge1xuICAoY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiID8gYWRkQ2xhc3MgOiBybUNsYXNzKShjbS5kaXNwbGF5LmxpbmVEaXYsIFwiQ29kZU1pcnJvci1ydGxcIik7XG4gIH1cblxuICBmdW5jdGlvbiBkaXJlY3Rpb25DaGFuZ2VkKGNtKSB7XG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0RGlyZWN0aW9uQ2xhc3MoY20pO1xuICAgICAgcmVnQ2hhbmdlKGNtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEhpc3Rvcnkoc3RhcnRHZW4pIHtcbiAgICAvLyBBcnJheXMgb2YgY2hhbmdlIGV2ZW50cyBhbmQgc2VsZWN0aW9ucy4gRG9pbmcgc29tZXRoaW5nIGFkZHMgYW5cbiAgICAvLyBldmVudCB0byBkb25lIGFuZCBjbGVhcnMgdW5kby4gVW5kb2luZyBtb3ZlcyBldmVudHMgZnJvbSBkb25lXG4gICAgLy8gdG8gdW5kb25lLCByZWRvaW5nIG1vdmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgICB0aGlzLmRvbmUgPSBbXTsgdGhpcy51bmRvbmUgPSBbXTtcbiAgICB0aGlzLnVuZG9EZXB0aCA9IEluZmluaXR5O1xuICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hlbiBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1bmRvXG4gICAgLy8gZXZlbnRcbiAgICB0aGlzLmxhc3RNb2RUaW1lID0gdGhpcy5sYXN0U2VsVGltZSA9IDA7XG4gICAgdGhpcy5sYXN0T3AgPSB0aGlzLmxhc3RTZWxPcCA9IG51bGw7XG4gICAgdGhpcy5sYXN0T3JpZ2luID0gdGhpcy5sYXN0U2VsT3JpZ2luID0gbnVsbDtcbiAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kXG4gICAgdGhpcy5nZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGhpc3RvcnkgY2hhbmdlIGV2ZW50IGZyb20gYW4gdXBkYXRlRG9jLXN0eWxlIGNoYW5nZVxuICAvLyBvYmplY3QuXG4gIGZ1bmN0aW9uIGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSB7XG4gICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogY29weVBvcyhjaGFuZ2UuZnJvbSksIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfTtcbiAgICBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTtcbiAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYykgeyByZXR1cm4gYXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7IH0sIHRydWUpO1xuICAgIHJldHVybiBoaXN0Q2hhbmdlXG4gIH1cblxuICAvLyBQb3AgYWxsIHNlbGVjdGlvbiBldmVudHMgb2ZmIHRoZSBlbmQgb2YgYSBoaXN0b3J5IGFycmF5LiBTdG9wIGF0XG4gIC8vIGEgY2hhbmdlIGV2ZW50LlxuICBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbkV2ZW50cyhhcnJheSkge1xuICAgIHdoaWxlIChhcnJheS5sZW5ndGgpIHtcbiAgICAgIHZhciBsYXN0ID0gbHN0KGFycmF5KTtcbiAgICAgIGlmIChsYXN0LnJhbmdlcykgeyBhcnJheS5wb3AoKTsgfVxuICAgICAgZWxzZSB7IGJyZWFrIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSB0b3AgY2hhbmdlIGV2ZW50IGluIHRoZSBoaXN0b3J5LiBQb3Agb2ZmIHNlbGVjdGlvblxuICAvLyBldmVudHMgdGhhdCBhcmUgaW4gdGhlIHdheS5cbiAgZnVuY3Rpb24gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LmRvbmUpO1xuICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpXG4gICAgfSBlbHNlIGlmIChoaXN0LmRvbmUubGVuZ3RoICYmICFsc3QoaGlzdC5kb25lKS5yYW5nZXMpIHtcbiAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKVxuICAgIH0gZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCA+IDEgJiYgIWhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMl0ucmFuZ2VzKSB7XG4gICAgICBoaXN0LmRvbmUucG9wKCk7XG4gICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSlcbiAgICB9XG4gIH1cblxuICAvLyBSZWdpc3RlciBhIGNoYW5nZSBpbiB0aGUgaGlzdG9yeS4gTWVyZ2VzIGNoYW5nZXMgdGhhdCBhcmUgd2l0aGluXG4gIC8vIGEgc2luZ2xlIG9wZXJhdGlvbiwgb3IgYXJlIGNsb3NlIHRvZ2V0aGVyIHdpdGggYW4gb3JpZ2luIHRoYXRcbiAgLy8gYWxsb3dzIG1lcmdpbmcgKHN0YXJ0aW5nIHdpdGggXCIrXCIpIGludG8gYSBzaW5nbGUgZXZlbnQuXG4gIGZ1bmN0aW9uIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIG9wSWQpIHtcbiAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5O1xuICAgIGhpc3QudW5kb25lLmxlbmd0aCA9IDA7XG4gICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGN1cjtcbiAgICB2YXIgbGFzdDtcblxuICAgIGlmICgoaGlzdC5sYXN0T3AgPT0gb3BJZCB8fFxuICAgICAgICAgaGlzdC5sYXN0T3JpZ2luID09IGNoYW5nZS5vcmlnaW4gJiYgY2hhbmdlLm9yaWdpbiAmJlxuICAgICAgICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSBcIitcIiAmJiBoaXN0Lmxhc3RNb2RUaW1lID4gdGltZSAtIChkb2MuY20gPyBkb2MuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSA6IDUwMCkpIHx8XG4gICAgICAgICAgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gXCIqXCIpKSAmJlxuICAgICAgICAoY3VyID0gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGhpc3QubGFzdE9wID09IG9wSWQpKSkge1xuICAgICAgLy8gTWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0aGUgbGFzdCBldmVudFxuICAgICAgbGFzdCA9IGxzdChjdXIuY2hhbmdlcyk7XG4gICAgICBpZiAoY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDAgJiYgY21wKGNoYW5nZS5mcm9tLCBsYXN0LnRvKSA9PSAwKSB7XG4gICAgICAgIC8vIE9wdGltaXplZCBjYXNlIGZvciBzaW1wbGUgaW5zZXJ0aW9uIC0tIGRvbid0IHdhbnQgdG8gYWRkXG4gICAgICAgIC8vIG5ldyBjaGFuZ2VzZXRzIGZvciBldmVyeSBjaGFyYWN0ZXIgdHlwZWRcbiAgICAgICAgbGFzdC50byA9IGNoYW5nZUVuZChjaGFuZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIG5ldyBzdWItZXZlbnRcbiAgICAgICAgY3VyLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQuXG4gICAgICB2YXIgYmVmb3JlID0gbHN0KGhpc3QuZG9uZSk7XG4gICAgICBpZiAoIWJlZm9yZSB8fCAhYmVmb3JlLnJhbmdlcylcbiAgICAgICAgeyBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGRvYy5zZWwsIGhpc3QuZG9uZSk7IH1cbiAgICAgIGN1ciA9IHtjaGFuZ2VzOiBbaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpXSxcbiAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259O1xuICAgICAgaGlzdC5kb25lLnB1c2goY3VyKTtcbiAgICAgIHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpIHtcbiAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7XG4gICAgICAgIGlmICghaGlzdC5kb25lWzBdLnJhbmdlcykgeyBoaXN0LmRvbmUuc2hpZnQoKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBoaXN0LmRvbmUucHVzaChzZWxBZnRlcik7XG4gICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247XG4gICAgaGlzdC5sYXN0TW9kVGltZSA9IGhpc3QubGFzdFNlbFRpbWUgPSB0aW1lO1xuICAgIGhpc3QubGFzdE9wID0gaGlzdC5sYXN0U2VsT3AgPSBvcElkO1xuICAgIGhpc3QubGFzdE9yaWdpbiA9IGhpc3QubGFzdFNlbE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47XG5cbiAgICBpZiAoIWxhc3QpIHsgc2lnbmFsKGRvYywgXCJoaXN0b3J5QWRkZWRcIik7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIHByZXYsIHNlbCkge1xuICAgIHZhciBjaCA9IG9yaWdpbi5jaGFyQXQoMCk7XG4gICAgcmV0dXJuIGNoID09IFwiKlwiIHx8XG4gICAgICBjaCA9PSBcIitcIiAmJlxuICAgICAgcHJldi5yYW5nZXMubGVuZ3RoID09IHNlbC5yYW5nZXMubGVuZ3RoICYmXG4gICAgICBwcmV2LnNvbWV0aGluZ1NlbGVjdGVkKCkgPT0gc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkgJiZcbiAgICAgIG5ldyBEYXRlIC0gZG9jLmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDogNTAwKVxuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcywgc2V0cyB0aGUgbmV3IHNlbGVjdGlvbiBhc1xuICAvLyB0aGUgcGVuZGluZyBzZWxlY3Rpb24gaW4gdGhlIGhpc3RvcnksIGFuZCBwdXNoZXMgdGhlIG9sZCBwZW5kaW5nXG4gIC8vIHNlbGVjdGlvbiBpbnRvIHRoZSAnZG9uZScgYXJyYXkgd2hlbiBpdCB3YXMgc2lnbmlmaWNhbnRseVxuICAvLyBkaWZmZXJlbnQgKGluIG51bWJlciBvZiBzZWxlY3RlZCByYW5nZXMsIGVtcHRpbmVzcywgb3IgdGltZSkuXG4gIGZ1bmN0aW9uIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIHNlbCwgb3BJZCwgb3B0aW9ucykge1xuICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIG9yaWdpbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW47XG5cbiAgICAvLyBBIG5ldyBldmVudCBpcyBzdGFydGVkIHdoZW4gdGhlIHByZXZpb3VzIG9yaWdpbiBkb2VzIG5vdCBtYXRjaFxuICAgIC8vIHRoZSBjdXJyZW50LCBvciB0aGUgb3JpZ2lucyBkb24ndCBhbGxvdyBtYXRjaGluZy4gT3JpZ2luc1xuICAgIC8vIHN0YXJ0aW5nIHdpdGggKiBhcmUgYWx3YXlzIG1lcmdlZCwgdGhvc2Ugc3RhcnRpbmcgd2l0aCArIGFyZVxuICAgIC8vIG1lcmdlZCB3aGVuIHNpbWlsYXIgYW5kIGNsb3NlIHRvZ2V0aGVyIGluIHRpbWUuXG4gICAgaWYgKG9wSWQgPT0gaGlzdC5sYXN0U2VsT3AgfHxcbiAgICAgICAgKG9yaWdpbiAmJiBoaXN0Lmxhc3RTZWxPcmlnaW4gPT0gb3JpZ2luICYmXG4gICAgICAgICAoaGlzdC5sYXN0TW9kVGltZSA9PSBoaXN0Lmxhc3RTZWxUaW1lICYmIGhpc3QubGFzdE9yaWdpbiA9PSBvcmlnaW4gfHxcbiAgICAgICAgICBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBsc3QoaGlzdC5kb25lKSwgc2VsKSkpKVxuICAgICAgeyBoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDFdID0gc2VsOyB9XG4gICAgZWxzZVxuICAgICAgeyBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgaGlzdC5kb25lKTsgfVxuXG4gICAgaGlzdC5sYXN0U2VsVGltZSA9ICtuZXcgRGF0ZTtcbiAgICBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBvcmlnaW47XG4gICAgaGlzdC5sYXN0U2VsT3AgPSBvcElkO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY2xlYXJSZWRvICE9PSBmYWxzZSlcbiAgICAgIHsgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51bmRvbmUpOyB9XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgZGVzdCkge1xuICAgIHZhciB0b3AgPSBsc3QoZGVzdCk7XG4gICAgaWYgKCEodG9wICYmIHRvcC5yYW5nZXMgJiYgdG9wLmVxdWFscyhzZWwpKSlcbiAgICAgIHsgZGVzdC5wdXNoKHNlbCk7IH1cbiAgfVxuXG4gIC8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4gdGhlIGhpc3RvcnkuXG4gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7XG4gICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdLCBuID0gMDtcbiAgICBkb2MuaXRlcihNYXRoLm1heChkb2MuZmlyc3QsIGZyb20pLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgdG8pLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpXG4gICAgICAgIHsgKGV4aXN0aW5nIHx8IChleGlzdGluZyA9IGNoYW5nZVtcInNwYW5zX1wiICsgZG9jLmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zOyB9XG4gICAgICArK247XG4gICAgfSk7XG4gIH1cblxuICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBtYXJrZWQgc3BhbnMsIHRob3NlXG4gIC8vIHRoYXQgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgY2xlYXJlZCBzaG91bGQgbm90IGJlIHJlc3RvcmVkLlxuICBmdW5jdGlvbiByZW1vdmVDbGVhcmVkU3BhbnMoc3BhbnMpIHtcbiAgICBpZiAoIXNwYW5zKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgb3V0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChzcGFuc1tpXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIHsgb3V0ID0gc3BhbnMuc2xpY2UoMCwgaSk7IH0gfVxuICAgICAgZWxzZSBpZiAob3V0KSB7IG91dC5wdXNoKHNwYW5zW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gIW91dCA/IHNwYW5zIDogb3V0Lmxlbmd0aCA/IG91dCA6IG51bGxcbiAgfVxuXG4gIC8vIFJldHJpZXZlIGFuZCBmaWx0ZXIgdGhlIG9sZCBtYXJrZWQgc3BhbnMgc3RvcmVkIGluIGEgY2hhbmdlIGV2ZW50LlxuICBmdW5jdGlvbiBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSkge1xuICAgIHZhciBmb3VuZCA9IGNoYW5nZVtcInNwYW5zX1wiICsgZG9jLmlkXTtcbiAgICBpZiAoIWZvdW5kKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgbncgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZS50ZXh0Lmxlbmd0aDsgKytpKVxuICAgICAgeyBudy5wdXNoKHJlbW92ZUNsZWFyZWRTcGFucyhmb3VuZFtpXSkpOyB9XG4gICAgcmV0dXJuIG53XG4gIH1cblxuICAvLyBVc2VkIGZvciB1bi9yZS1kb2luZyBjaGFuZ2VzIGZyb20gdGhlIGhpc3RvcnkuIENvbWJpbmVzIHRoZVxuICAvLyByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBleGlzdGluZyBzcGFucyB3aXRoIHRoZSBzZXQgb2Ygc3BhbnMgdGhhdFxuICAvLyBleGlzdGVkIGluIHRoZSBoaXN0b3J5IChzbyB0aGF0IGRlbGV0aW5nIGFyb3VuZCBhIHNwYW4gYW5kIHRoZW5cbiAgLy8gdW5kb2luZyBicmluZ3MgYmFjayB0aGUgc3BhbikuXG4gIGZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHtcbiAgICB2YXIgb2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpO1xuICAgIHZhciBzdHJldGNoZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTtcbiAgICBpZiAoIW9sZCkgeyByZXR1cm4gc3RyZXRjaGVkIH1cbiAgICBpZiAoIXN0cmV0Y2hlZCkgeyByZXR1cm4gb2xkIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgb2xkQ3VyID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVkW2ldO1xuICAgICAgaWYgKG9sZEN1ciAmJiBzdHJldGNoQ3VyKSB7XG4gICAgICAgIHNwYW5zOiBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmV0Y2hDdXIubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICB2YXIgc3BhbiA9IHN0cmV0Y2hDdXJbal07XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDdXIubGVuZ3RoOyArK2spXG4gICAgICAgICAgICB7IGlmIChvbGRDdXJba10ubWFya2VyID09IHNwYW4ubWFya2VyKSB7IGNvbnRpbnVlIHNwYW5zIH0gfVxuICAgICAgICAgIG9sZEN1ci5wdXNoKHNwYW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmV0Y2hDdXIpIHtcbiAgICAgICAgb2xkW2ldID0gc3RyZXRjaEN1cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9sZFxuICB9XG5cbiAgLy8gVXNlZCBib3RoIHRvIHByb3ZpZGUgYSBKU09OLXNhZmUgb2JqZWN0IGluIC5nZXRIaXN0b3J5LCBhbmQsIHdoZW5cbiAgLy8gZGV0YWNoaW5nIGEgZG9jdW1lbnQsIHRvIHNwbGl0IHRoZSBoaXN0b3J5IGluIHR3b1xuICBmdW5jdGlvbiBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXAsIGluc3RhbnRpYXRlU2VsKSB7XG4gICAgdmFyIGNvcHkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuICAgICAgaWYgKGV2ZW50LnJhbmdlcykge1xuICAgICAgICBjb3B5LnB1c2goaW5zdGFudGlhdGVTZWwgPyBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZlbnQpO1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgdmFyIGNoYW5nZXMgPSBldmVudC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107XG4gICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXN9KTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hhbmdlcy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tqXSwgbSA9ICh2b2lkIDApO1xuICAgICAgICBuZXdDaGFuZ2VzLnB1c2goe2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlLnRvLCB0ZXh0OiBjaGFuZ2UudGV4dH0pO1xuICAgICAgICBpZiAobmV3R3JvdXApIHsgZm9yICh2YXIgcHJvcCBpbiBjaGFuZ2UpIHsgaWYgKG0gPSBwcm9wLm1hdGNoKC9ec3BhbnNfKFxcZCspJC8pKSB7XG4gICAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkgPiAtMSkge1xuICAgICAgICAgICAgbHN0KG5ld0NoYW5nZXMpW3Byb3BdID0gY2hhbmdlW3Byb3BdO1xuICAgICAgICAgICAgZGVsZXRlIGNoYW5nZVtwcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gfSB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH1cblxuICAvLyBUaGUgJ3Njcm9sbCcgcGFyYW1ldGVyIGdpdmVuIHRvIG1hbnkgb2YgdGhlc2UgaW5kaWNhdGVkIHdoZXRoZXJcbiAgLy8gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24gc2hvdWxkIGJlIHNjcm9sbGVkIGludG8gdmlldyBhZnRlclxuICAvLyBtb2RpZnlpbmcgdGhlIHNlbGVjdGlvbi5cblxuICAvLyBJZiBzaGlmdCBpcyBoZWxkIG9yIHRoZSBleHRlbmQgZmxhZyBpcyBzZXQsIGV4dGVuZHMgYSByYW5nZSB0b1xuICAvLyBpbmNsdWRlIGEgZ2l2ZW4gcG9zaXRpb24gKGFuZCBvcHRpb25hbGx5IGEgc2Vjb25kIHBvc2l0aW9uKS5cbiAgLy8gT3RoZXJ3aXNlLCBzaW1wbHkgcmV0dXJucyB0aGUgcmFuZ2UgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRpb25zLlxuICAvLyBVc2VkIGZvciBjdXJzb3IgbW90aW9uIGFuZCBzdWNoLlxuICBmdW5jdGlvbiBleHRlbmRSYW5nZShyYW5nZSwgaGVhZCwgb3RoZXIsIGV4dGVuZCkge1xuICAgIGlmIChleHRlbmQpIHtcbiAgICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNob3I7XG4gICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgdmFyIHBvc0JlZm9yZSA9IGNtcChoZWFkLCBhbmNob3IpIDwgMDtcbiAgICAgICAgaWYgKHBvc0JlZm9yZSAhPSAoY21wKG90aGVyLCBhbmNob3IpIDwgMCkpIHtcbiAgICAgICAgICBhbmNob3IgPSBoZWFkO1xuICAgICAgICAgIGhlYWQgPSBvdGhlcjtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZvcmUgIT0gKGNtcChoZWFkLCBvdGhlcikgPCAwKSkge1xuICAgICAgICAgIGhlYWQgPSBvdGhlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSYW5nZShhbmNob3IsIGhlYWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwgaGVhZClcbiAgICB9XG4gIH1cblxuICAvLyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBkaXNjYXJkIHRoZSByZXN0LlxuICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBoZWFkLCBvdGhlciwgb3B0aW9ucywgZXh0ZW5kKSB7XG4gICAgaWYgKGV4dGVuZCA9PSBudWxsKSB7IGV4dGVuZCA9IGRvYy5jbSAmJiAoZG9jLmNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCk7IH1cbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtleHRlbmRSYW5nZShkb2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIsIGV4dGVuZCldLCAwKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBFeHRlbmQgYWxsIHNlbGVjdGlvbnMgKHBvcyBpcyBhbiBhcnJheSBvZiBzZWxlY3Rpb25zIHdpdGggbGVuZ3RoXG4gIC8vIGVxdWFsIHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucylcbiAgZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9ucyhkb2MsIGhlYWRzLCBvcHRpb25zKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIHZhciBleHRlbmQgPSBkb2MuY20gJiYgKGRvYy5jbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICB7IG91dFtpXSA9IGV4dGVuZFJhbmdlKGRvYy5zZWwucmFuZ2VzW2ldLCBoZWFkc1tpXSwgbnVsbCwgZXh0ZW5kKTsgfVxuICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvdXQsIGRvYy5zZWwucHJpbUluZGV4KTtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXdTZWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIHNpbmdsZSByYW5nZSBpbiB0aGUgc2VsZWN0aW9uLlxuICBmdW5jdGlvbiByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgaSwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgcmFuZ2VzID0gZG9jLnNlbC5yYW5nZXMuc2xpY2UoMCk7XG4gICAgcmFuZ2VzW2ldID0gcmFuZ2U7XG4gICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGRvYy5jbSwgcmFuZ2VzLCBkb2Muc2VsLnByaW1JbmRleCksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUmVzZXQgdGhlIHNlbGVjdGlvbiB0byBhIHNpbmdsZSByYW5nZS5cbiAgZnVuY3Rpb24gc2V0U2ltcGxlU2VsZWN0aW9uKGRvYywgYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgc2V0U2VsZWN0aW9uKGRvYywgc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gR2l2ZSBiZWZvcmVTZWxlY3Rpb25DaGFuZ2UgaGFuZGxlcnMgYSBjaGFuZ2UgdG8gaW5mbHVlbmNlIGFcbiAgLy8gc2VsZWN0aW9uIHVwZGF0ZS5cbiAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIHJhbmdlczogc2VsLnJhbmdlcyxcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocmFuZ2VzKSB7XG4gICAgICAgIHRoaXMucmFuZ2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHsgdGhpcy5yYW5nZXNbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5hbmNob3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoZG9jLCByYW5nZXNbaV0uaGVhZCkpOyB9XG4gICAgICB9LFxuICAgICAgb3JpZ2luOiBvcHRpb25zICYmIG9wdGlvbnMub3JpZ2luXG4gICAgfTtcbiAgICBzaWduYWwoZG9jLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBkb2MsIG9iaik7XG4gICAgaWYgKGRvYy5jbSkgeyBzaWduYWwoZG9jLmNtLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBkb2MuY20sIG9iaik7IH1cbiAgICBpZiAob2JqLnJhbmdlcyAhPSBzZWwucmFuZ2VzKSB7IHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvYmoucmFuZ2VzLCBvYmoucmFuZ2VzLmxlbmd0aCAtIDEpIH1cbiAgICBlbHNlIHsgcmV0dXJuIHNlbCB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShkb2MsIHNlbCwgb3B0aW9ucykge1xuICAgIHZhciBkb25lID0gZG9jLmhpc3RvcnkuZG9uZSwgbGFzdCA9IGxzdChkb25lKTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LnJhbmdlcykge1xuICAgICAgZG9uZVtkb25lLmxlbmd0aCAtIDFdID0gc2VsO1xuICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgc2VsLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgYSBuZXcgc2VsZWN0aW9uLlxuICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICAgIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIGRvYy5zZWwsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTiwgb3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIikpXG4gICAgICB7IHNlbCA9IGZpbHRlclNlbGVjdGlvbkNoYW5nZShkb2MsIHNlbCwgb3B0aW9ucyk7IH1cblxuICAgIHZhciBiaWFzID0gb3B0aW9ucyAmJiBvcHRpb25zLmJpYXMgfHxcbiAgICAgIChjbXAoc2VsLnByaW1hcnkoKS5oZWFkLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkKSA8IDAgPyAtMSA6IDEpO1xuICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgc2VsLCBiaWFzLCB0cnVlKSk7XG5cbiAgICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMuc2Nyb2xsID09PSBmYWxzZSkgJiYgZG9jLmNtKVxuICAgICAgeyBlbnN1cmVDdXJzb3JWaXNpYmxlKGRvYy5jbSk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2VsKSB7XG4gICAgaWYgKHNlbC5lcXVhbHMoZG9jLnNlbCkpIHsgcmV0dXJuIH1cblxuICAgIGRvYy5zZWwgPSBzZWw7XG5cbiAgICBpZiAoZG9jLmNtKSB7XG4gICAgICBkb2MuY20uY3VyT3AudXBkYXRlSW5wdXQgPSAxO1xuICAgICAgZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoZG9jLmNtKTtcbiAgICB9XG4gICAgc2lnbmFsTGF0ZXIoZG9jLCBcImN1cnNvckFjdGl2aXR5XCIsIGRvYyk7XG4gIH1cblxuICAvLyBWZXJpZnkgdGhhdCB0aGUgc2VsZWN0aW9uIGRvZXMgbm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pY1xuICAvLyBtYXJrZWQgcmFuZ2VzLlxuICBmdW5jdGlvbiByZUNoZWNrU2VsZWN0aW9uKGRvYykge1xuICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgZG9jLnNlbCwgbnVsbCwgZmFsc2UpKTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHNlbGVjdGlvbiB0aGF0IGRvZXMgbm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pY1xuICAvLyByYW5nZXMuXG4gIGZ1bmN0aW9uIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHtcbiAgICB2YXIgb3V0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICAgIHZhciBvbGQgPSBzZWwucmFuZ2VzLmxlbmd0aCA9PSBkb2Muc2VsLnJhbmdlcy5sZW5ndGggJiYgZG9jLnNlbC5yYW5nZXNbaV07XG4gICAgICB2YXIgbmV3QW5jaG9yID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmFuY2hvciwgb2xkICYmIG9sZC5hbmNob3IsIGJpYXMsIG1heUNsZWFyKTtcbiAgICAgIHZhciBuZXdIZWFkID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmhlYWQsIG9sZCAmJiBvbGQuaGVhZCwgYmlhcywgbWF5Q2xlYXIpO1xuICAgICAgaWYgKG91dCB8fCBuZXdBbmNob3IgIT0gcmFuZ2UuYW5jaG9yIHx8IG5ld0hlYWQgIT0gcmFuZ2UuaGVhZCkge1xuICAgICAgICBpZiAoIW91dCkgeyBvdXQgPSBzZWwucmFuZ2VzLnNsaWNlKDAsIGkpOyB9XG4gICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShuZXdBbmNob3IsIG5ld0hlYWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0ID8gbm9ybWFsaXplU2VsZWN0aW9uKGRvYy5jbSwgb3V0LCBzZWwucHJpbUluZGV4KSA6IHNlbFxuICB9XG5cbiAgZnVuY3Rpb24gc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgbWF5Q2xlYXIpIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSk7XG4gICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLCBtID0gc3AubWFya2VyO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGN1cnNvciBiZWluZyBwbGFjZWQgdG8gdGhlIGxlZnQvcmlnaHQgb2YgYW4gYXRvbWljIG1hcmtlclxuICAgICAgLy8gSGlzdG9yaWNhbGx5IHRoaXMgd2FzIGRldGVybWluZWQgdXNpbmcgdGhlIGluY2x1c2l2ZUxlZnQvUmlnaHQgb3B0aW9uLCBidXQgdGhlIG5ldyB3YXkgdG8gY29udHJvbCBpdFxuICAgICAgLy8gaXMgd2l0aCBzZWxlY3RMZWZ0L1JpZ2h0XG4gICAgICB2YXIgcHJldmVudEN1cnNvckxlZnQgPSAoXCJzZWxlY3RMZWZ0XCIgaW4gbSkgPyAhbS5zZWxlY3RMZWZ0IDogbS5pbmNsdXNpdmVMZWZ0O1xuICAgICAgdmFyIHByZXZlbnRDdXJzb3JSaWdodCA9IChcInNlbGVjdFJpZ2h0XCIgaW4gbSkgPyAhbS5zZWxlY3RSaWdodCA6IG0uaW5jbHVzaXZlUmlnaHQ7XG5cbiAgICAgIGlmICgoc3AuZnJvbSA9PSBudWxsIHx8IChwcmV2ZW50Q3Vyc29yTGVmdCA/IHNwLmZyb20gPD0gcG9zLmNoIDogc3AuZnJvbSA8IHBvcy5jaCkpICYmXG4gICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgKHByZXZlbnRDdXJzb3JSaWdodCA/IHNwLnRvID49IHBvcy5jaCA6IHNwLnRvID4gcG9zLmNoKSkpIHtcbiAgICAgICAgaWYgKG1heUNsZWFyKSB7XG4gICAgICAgICAgc2lnbmFsKG0sIFwiYmVmb3JlQ3Vyc29yRW50ZXJcIik7XG4gICAgICAgICAgaWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHtcbiAgICAgICAgICAgIGlmICghbGluZS5tYXJrZWRTcGFucykgeyBicmVhayB9XG4gICAgICAgICAgICBlbHNlIHstLWk7IGNvbnRpbnVlfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW0uYXRvbWljKSB7IGNvbnRpbnVlIH1cblxuICAgICAgICBpZiAob2xkUG9zKSB7XG4gICAgICAgICAgdmFyIG5lYXIgPSBtLmZpbmQoZGlyIDwgMCA/IDEgOiAtMSksIGRpZmYgPSAodm9pZCAwKTtcbiAgICAgICAgICBpZiAoZGlyIDwgMCA/IHByZXZlbnRDdXJzb3JSaWdodCA6IHByZXZlbnRDdXJzb3JMZWZ0KVxuICAgICAgICAgICAgeyBuZWFyID0gbW92ZVBvcyhkb2MsIG5lYXIsIC1kaXIsIG5lYXIgJiYgbmVhci5saW5lID09IHBvcy5saW5lID8gbGluZSA6IG51bGwpOyB9XG4gICAgICAgICAgaWYgKG5lYXIgJiYgbmVhci5saW5lID09IHBvcy5saW5lICYmIChkaWZmID0gY21wKG5lYXIsIG9sZFBvcykpICYmIChkaXIgPCAwID8gZGlmZiA8IDAgOiBkaWZmID4gMCkpXG4gICAgICAgICAgICB7IHJldHVybiBza2lwQXRvbWljSW5uZXIoZG9jLCBuZWFyLCBwb3MsIGRpciwgbWF5Q2xlYXIpIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmYXIgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDogMSk7XG4gICAgICAgIGlmIChkaXIgPCAwID8gcHJldmVudEN1cnNvckxlZnQgOiBwcmV2ZW50Q3Vyc29yUmlnaHQpXG4gICAgICAgICAgeyBmYXIgPSBtb3ZlUG9zKGRvYywgZmFyLCBkaXIsIGZhci5saW5lID09IHBvcy5saW5lID8gbGluZSA6IG51bGwpOyB9XG4gICAgICAgIHJldHVybiBmYXIgPyBza2lwQXRvbWljSW5uZXIoZG9jLCBmYXIsIHBvcywgZGlyLCBtYXlDbGVhcikgOiBudWxsXG4gICAgICB9XG4gICAgfSB9XG4gICAgcmV0dXJuIHBvc1xuICB9XG5cbiAgLy8gRW5zdXJlIGEgZ2l2ZW4gcG9zaXRpb24gaXMgbm90IGluc2lkZSBhbiBhdG9taWMgcmFuZ2UuXG4gIGZ1bmN0aW9uIHNraXBBdG9taWMoZG9jLCBwb3MsIG9sZFBvcywgYmlhcywgbWF5Q2xlYXIpIHtcbiAgICB2YXIgZGlyID0gYmlhcyB8fCAxO1xuICAgIHZhciBmb3VuZCA9IHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCBkaXIsIG1heUNsZWFyKSB8fFxuICAgICAgICAoIW1heUNsZWFyICYmIHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCBkaXIsIHRydWUpKSB8fFxuICAgICAgICBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgLWRpciwgbWF5Q2xlYXIpIHx8XG4gICAgICAgICghbWF5Q2xlYXIgJiYgc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIC1kaXIsIHRydWUpKTtcbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICBkb2MuY2FudEVkaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApXG4gICAgfVxuICAgIHJldHVybiBmb3VuZFxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZVBvcyhkb2MsIHBvcywgZGlyLCBsaW5lKSB7XG4gICAgaWYgKGRpciA8IDAgJiYgcG9zLmNoID09IDApIHtcbiAgICAgIGlmIChwb3MubGluZSA+IGRvYy5maXJzdCkgeyByZXR1cm4gY2xpcFBvcyhkb2MsIFBvcyhwb3MubGluZSAtIDEpKSB9XG4gICAgICBlbHNlIHsgcmV0dXJuIG51bGwgfVxuICAgIH0gZWxzZSBpZiAoZGlyID4gMCAmJiBwb3MuY2ggPT0gKGxpbmUgfHwgZ2V0TGluZShkb2MsIHBvcy5saW5lKSkudGV4dC5sZW5ndGgpIHtcbiAgICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSkgeyByZXR1cm4gUG9zKHBvcy5saW5lICsgMSwgMCkgfVxuICAgICAgZWxzZSB7IHJldHVybiBudWxsIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQb3MocG9zLmxpbmUsIHBvcy5jaCArIGRpcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RBbGwoY20pIHtcbiAgICBjbS5zZXRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSwgUG9zKGNtLmxhc3RMaW5lKCkpLCBzZWxfZG9udFNjcm9sbCk7XG4gIH1cblxuICAvLyBVUERBVElOR1xuXG4gIC8vIEFsbG93IFwiYmVmb3JlQ2hhbmdlXCIgZXZlbnQgaGFuZGxlcnMgdG8gaW5mbHVlbmNlIGEgY2hhbmdlXG4gIGZ1bmN0aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgIGZyb206IGNoYW5nZS5mcm9tLFxuICAgICAgdG86IGNoYW5nZS50byxcbiAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LFxuICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLFxuICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmouY2FuY2VsZWQgPSB0cnVlOyB9XG4gICAgfTtcbiAgICBpZiAodXBkYXRlKSB7IG9iai51cGRhdGUgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHRleHQsIG9yaWdpbikge1xuICAgICAgaWYgKGZyb20pIHsgb2JqLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7IH1cbiAgICAgIGlmICh0bykgeyBvYmoudG8gPSBjbGlwUG9zKGRvYywgdG8pOyB9XG4gICAgICBpZiAodGV4dCkgeyBvYmoudGV4dCA9IHRleHQ7IH1cbiAgICAgIGlmIChvcmlnaW4gIT09IHVuZGVmaW5lZCkgeyBvYmoub3JpZ2luID0gb3JpZ2luOyB9XG4gICAgfTsgfVxuICAgIHNpZ25hbChkb2MsIFwiYmVmb3JlQ2hhbmdlXCIsIGRvYywgb2JqKTtcbiAgICBpZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sIFwiYmVmb3JlQ2hhbmdlXCIsIGRvYy5jbSwgb2JqKTsgfVxuXG4gICAgaWYgKG9iai5jYW5jZWxlZCkge1xuICAgICAgaWYgKGRvYy5jbSkgeyBkb2MuY20uY3VyT3AudXBkYXRlSW5wdXQgPSAyOyB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4ge2Zyb206IG9iai5mcm9tLCB0bzogb2JqLnRvLCB0ZXh0OiBvYmoudGV4dCwgb3JpZ2luOiBvYmoub3JpZ2lufVxuICB9XG5cbiAgLy8gQXBwbHkgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCwgYW5kIGFkZCBpdCB0byB0aGUgZG9jdW1lbnQnc1xuICAvLyBoaXN0b3J5LCBhbmQgcHJvcGFnYXRpbmcgaXQgdG8gYWxsIGxpbmtlZCBkb2N1bWVudHMuXG4gIGZ1bmN0aW9uIG1ha2VDaGFuZ2UoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5KSB7XG4gICAgaWYgKGRvYy5jbSkge1xuICAgICAgaWYgKCFkb2MuY20uY3VyT3ApIHsgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSkgfVxuICAgICAgaWYgKGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKSB7IHJldHVybiB9XG4gICAgfVxuXG4gICAgaWYgKGhhc0hhbmRsZXIoZG9jLCBcImJlZm9yZUNoYW5nZVwiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sIFwiYmVmb3JlQ2hhbmdlXCIpKSB7XG4gICAgICBjaGFuZ2UgPSBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIHRydWUpO1xuICAgICAgaWYgKCFjaGFuZ2UpIHsgcmV0dXJuIH1cbiAgICB9XG5cbiAgICAvLyBQb3NzaWJseSBzcGxpdCBvciBzdXBwcmVzcyB0aGUgdXBkYXRlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZVxuICAgIC8vIG9mIHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuXG4gICAgdmFyIHNwbGl0ID0gc2F3UmVhZE9ubHlTcGFucyAmJiAhaWdub3JlUmVhZE9ubHkgJiYgcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTtcbiAgICBpZiAoc3BsaXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDA7IC0taSlcbiAgICAgICAgeyBtYWtlQ2hhbmdlSW5uZXIoZG9jLCB7ZnJvbTogc3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0W2ldLnRvLCB0ZXh0OiBpID8gW1wiXCJdIDogY2hhbmdlLnRleHQsIG9yaWdpbjogY2hhbmdlLm9yaWdpbn0pOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1ha2VDaGFuZ2VJbm5lcihkb2MsIGNoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKSB7XG4gICAgaWYgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmIGNoYW5nZS50ZXh0WzBdID09IFwiXCIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHsgcmV0dXJuIH1cbiAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpO1xuICAgIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7XG5cbiAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSkpO1xuICAgIHZhciByZWJhc2VkID0gW107XG5cbiAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYywgc2hhcmVkSGlzdCkge1xuICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2YocmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7XG4gICAgICAgIHJlYmFzZUhpc3QoZG9jLmhpc3RvcnksIGNoYW5nZSk7XG4gICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7XG4gICAgICB9XG4gICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZXZlcnQgYSBjaGFuZ2Ugc3RvcmVkIGluIGEgZG9jdW1lbnQncyBoaXN0b3J5LlxuICBmdW5jdGlvbiBtYWtlQ2hhbmdlRnJvbUhpc3RvcnkoZG9jLCB0eXBlLCBhbGxvd1NlbGVjdGlvbk9ubHkpIHtcbiAgICB2YXIgc3VwcHJlc3MgPSBkb2MuY20gJiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHM7XG4gICAgaWYgKHN1cHByZXNzICYmICFhbGxvd1NlbGVjdGlvbk9ubHkpIHsgcmV0dXJuIH1cblxuICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7XG4gICAgdmFyIHNvdXJjZSA9IHR5cGUgPT0gXCJ1bmRvXCIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSwgZGVzdCA9IHR5cGUgPT0gXCJ1bmRvXCIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgdXNlYWJsZSBldmVudCAoc28gdGhhdCBjdHJsLXogd29uJ3RcbiAgICAvLyBuZWVkbGVzc2x5IGNsZWFyIHNlbGVjdGlvbiBldmVudHMpXG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBldmVudCA9IHNvdXJjZVtpXTtcbiAgICAgIGlmIChhbGxvd1NlbGVjdGlvbk9ubHkgPyBldmVudC5yYW5nZXMgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSA6ICFldmVudC5yYW5nZXMpXG4gICAgICAgIHsgYnJlYWsgfVxuICAgIH1cbiAgICBpZiAoaSA9PSBzb3VyY2UubGVuZ3RoKSB7IHJldHVybiB9XG4gICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2luID0gbnVsbDtcblxuICAgIGZvciAoOzspIHtcbiAgICAgIGV2ZW50ID0gc291cmNlLnBvcCgpO1xuICAgICAgaWYgKGV2ZW50LnJhbmdlcykge1xuICAgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGV2ZW50LCBkZXN0KTtcbiAgICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSAmJiAhZXZlbnQuZXF1YWxzKGRvYy5zZWwpKSB7XG4gICAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgZXZlbnQsIHtjbGVhclJlZG86IGZhbHNlfSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsQWZ0ZXIgPSBldmVudDtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcHJlc3MpIHtcbiAgICAgICAgc291cmNlLnB1c2goZXZlbnQpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7IGJyZWFrIH1cbiAgICB9XG5cbiAgICAvLyBCdWlsZCB1cCBhIHJldmVyc2UgY2hhbmdlIG9iamVjdCB0byBhZGQgdG8gdGhlIG9wcG9zaXRlIGhpc3RvcnlcbiAgICAvLyBzdGFjayAocmVkbyB3aGVuIHVuZG9pbmcsIGFuZCB2aWNlIHZlcnNhKS5cbiAgICB2YXIgYW50aUNoYW5nZXMgPSBbXTtcbiAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbEFmdGVyLCBkZXN0KTtcbiAgICBkZXN0LnB1c2goe2NoYW5nZXM6IGFudGlDaGFuZ2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259KTtcbiAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5tYXhHZW5lcmF0aW9uO1xuXG4gICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCBcImJlZm9yZUNoYW5nZVwiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sIFwiYmVmb3JlQ2hhbmdlXCIpO1xuXG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGkgKSB7XG4gICAgICB2YXIgY2hhbmdlID0gZXZlbnQuY2hhbmdlc1tpXTtcbiAgICAgIGNoYW5nZS5vcmlnaW4gPSB0eXBlO1xuICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBmYWxzZSkpIHtcbiAgICAgICAgc291cmNlLmxlbmd0aCA9IDA7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuXG4gICAgICBhbnRpQ2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG5cbiAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIDogbHN0KHNvdXJjZSk7XG4gICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpO1xuICAgICAgaWYgKCFpICYmIGRvYy5jbSkgeyBkb2MuY20uc2Nyb2xsSW50b1ZpZXcoe2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5nZSl9KTsgfVxuICAgICAgdmFyIHJlYmFzZWQgPSBbXTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHRoZSBsaW5rZWQgZG9jdW1lbnRzXG4gICAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYywgc2hhcmVkSGlzdCkge1xuICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHtcbiAgICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0b3J5LCBjaGFuZ2UpO1xuICAgICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkkMSA9IGV2ZW50LmNoYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IC0taSQxKSB7XG4gICAgICB2YXIgcmV0dXJuZWQgPSBsb29wKCBpJDEgKTtcblxuICAgICAgaWYgKCByZXR1cm5lZCApIHJldHVybiByZXR1cm5lZC52O1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1Yi12aWV3cyBuZWVkIHRoZWlyIGxpbmUgbnVtYmVycyBzaGlmdGVkIHdoZW4gdGV4dCBpcyBhZGRlZFxuICAvLyBhYm92ZSBvciBiZWxvdyB0aGVtIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuXG4gIGZ1bmN0aW9uIHNoaWZ0RG9jKGRvYywgZGlzdGFuY2UpIHtcbiAgICBpZiAoZGlzdGFuY2UgPT0gMCkgeyByZXR1cm4gfVxuICAgIGRvYy5maXJzdCArPSBkaXN0YW5jZTtcbiAgICBkb2Muc2VsID0gbmV3IFNlbGVjdGlvbihtYXAoZG9jLnNlbC5yYW5nZXMsIGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbmV3IFJhbmdlKFxuICAgICAgUG9zKHJhbmdlLmFuY2hvci5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmFuY2hvci5jaCksXG4gICAgICBQb3MocmFuZ2UuaGVhZC5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmhlYWQuY2gpXG4gICAgKTsgfSksIGRvYy5zZWwucHJpbUluZGV4KTtcbiAgICBpZiAoZG9jLmNtKSB7XG4gICAgICByZWdDaGFuZ2UoZG9jLmNtLCBkb2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBkaXN0YW5jZSk7XG4gICAgICBmb3IgKHZhciBkID0gZG9jLmNtLmRpc3BsYXksIGwgPSBkLnZpZXdGcm9tOyBsIDwgZC52aWV3VG87IGwrKylcbiAgICAgICAgeyByZWdMaW5lQ2hhbmdlKGRvYy5jbSwgbCwgXCJndXR0ZXJcIik7IH1cbiAgICB9XG4gIH1cblxuICAvLyBNb3JlIGxvd2VyLWxldmVsIGNoYW5nZSBmdW5jdGlvbiwgaGFuZGxpbmcgb25seSBhIHNpbmdsZSBkb2N1bWVudFxuICAvLyAobm90IGxpbmtlZCBvbmVzKS5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKSB7XG4gICAgaWYgKGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKVxuICAgICAgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZVNpbmdsZURvYykoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgfVxuXG4gICAgaWYgKGNoYW5nZS50by5saW5lIDwgZG9jLmZpcnN0KSB7XG4gICAgICBzaGlmdERvYyhkb2MsIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEgLSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSk7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPiBkb2MubGFzdExpbmUoKSkgeyByZXR1cm4gfVxuXG4gICAgLy8gQ2xpcCB0aGUgY2hhbmdlIHRvIHRoZSBzaXplIG9mIHRoaXMgZG9jXG4gICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPCBkb2MuZmlyc3QpIHtcbiAgICAgIHZhciBzaGlmdCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEgLSAoZG9jLmZpcnN0IC0gY2hhbmdlLmZyb20ubGluZSk7XG4gICAgICBzaGlmdERvYyhkb2MsIHNoaWZ0KTtcbiAgICAgIGNoYW5nZSA9IHtmcm9tOiBQb3MoZG9jLmZpcnN0LCAwKSwgdG86IFBvcyhjaGFuZ2UudG8ubGluZSArIHNoaWZ0LCBjaGFuZ2UudG8uY2gpLFxuICAgICAgICAgICAgICAgIHRleHQ6IFtsc3QoY2hhbmdlLnRleHQpXSwgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufTtcbiAgICB9XG4gICAgdmFyIGxhc3QgPSBkb2MubGFzdExpbmUoKTtcbiAgICBpZiAoY2hhbmdlLnRvLmxpbmUgPiBsYXN0KSB7XG4gICAgICBjaGFuZ2UgPSB7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBbY2hhbmdlLnRleHRbMF1dLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59O1xuICAgIH1cblxuICAgIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pO1xuXG4gICAgaWYgKCFzZWxBZnRlcikgeyBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7IH1cbiAgICBpZiAoZG9jLmNtKSB7IG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihkb2MuY20sIGNoYW5nZSwgc3BhbnMpOyB9XG4gICAgZWxzZSB7IHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMpOyB9XG4gICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsQWZ0ZXIsIHNlbF9kb250U2Nyb2xsKTtcblxuICAgIGlmIChkb2MuY2FudEVkaXQgJiYgc2tpcEF0b21pYyhkb2MsIFBvcyhkb2MuZmlyc3RMaW5lKCksIDApKSlcbiAgICAgIHsgZG9jLmNhbnRFZGl0ID0gZmFsc2U7IH1cbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gb2YgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCB3aXRoIHRoZSBlZGl0b3JcbiAgLy8gdGhhdCB0aGlzIGRvY3VtZW50IGlzIHBhcnQgb2YuXG4gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihjbSwgY2hhbmdlLCBzcGFucykge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvO1xuXG4gICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBjaGVja1dpZHRoU3RhcnQgPSBmcm9tLmxpbmU7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZ2V0TGluZShkb2MsIGZyb20ubGluZSkpKTtcbiAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lID09IGRpc3BsYXkubWF4TGluZSkge1xuICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zZWwuY29udGFpbnMoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSlcbiAgICAgIHsgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pOyB9XG5cbiAgICB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodChjbSkpO1xuXG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCBmcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGgsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpO1xuICAgICAgICBpZiAobGVuID4gZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7XG4gICAgICAgICAgZGlzcGxheS5tYXhMaW5lID0gbGluZTtcbiAgICAgICAgICBkaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgeyBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsgfVxuICAgIH1cblxuICAgIHJldHJlYXRGcm9udGllcihkb2MsIGZyb20ubGluZSk7XG4gICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7XG5cbiAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7XG4gICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXlcbiAgICBpZiAoY2hhbmdlLmZ1bGwpXG4gICAgICB7IHJlZ0NoYW5nZShjbSk7IH1cbiAgICBlbHNlIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAmJiAhaXNXaG9sZUxpbmVVcGRhdGUoY20uZG9jLCBjaGFuZ2UpKVxuICAgICAgeyByZWdMaW5lQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIFwidGV4dFwiKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsgfVxuXG4gICAgdmFyIGNoYW5nZXNIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgXCJjaGFuZ2VzXCIpLCBjaGFuZ2VIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgXCJjaGFuZ2VcIik7XG4gICAgaWYgKGNoYW5nZUhhbmRsZXIgfHwgY2hhbmdlc0hhbmRsZXIpIHtcbiAgICAgIHZhciBvYmogPSB7XG4gICAgICAgIGZyb206IGZyb20sIHRvOiB0byxcbiAgICAgICAgdGV4dDogY2hhbmdlLnRleHQsXG4gICAgICAgIHJlbW92ZWQ6IGNoYW5nZS5yZW1vdmVkLFxuICAgICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW5cbiAgICAgIH07XG4gICAgICBpZiAoY2hhbmdlSGFuZGxlcikgeyBzaWduYWxMYXRlcihjbSwgXCJjaGFuZ2VcIiwgY20sIG9iaik7IH1cbiAgICAgIGlmIChjaGFuZ2VzSGFuZGxlcikgeyAoY20uY3VyT3AuY2hhbmdlT2JqcyB8fCAoY20uY3VyT3AuY2hhbmdlT2JqcyA9IFtdKSkucHVzaChvYmopOyB9XG4gICAgfVxuICAgIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGRvYywgY29kZSwgZnJvbSwgdG8sIG9yaWdpbikge1xuICAgIHZhciBhc3NpZ247XG5cbiAgICBpZiAoIXRvKSB7IHRvID0gZnJvbTsgfVxuICAgIGlmIChjbXAodG8sIGZyb20pIDwgMCkgeyAoYXNzaWduID0gW3RvLCBmcm9tXSwgZnJvbSA9IGFzc2lnblswXSwgdG8gPSBhc3NpZ25bMV0pOyB9XG4gICAgaWYgKHR5cGVvZiBjb2RlID09IFwic3RyaW5nXCIpIHsgY29kZSA9IGRvYy5zcGxpdExpbmVzKGNvZGUpOyB9XG4gICAgbWFrZUNoYW5nZShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lufSk7XG4gIH1cblxuICAvLyBSZWJhc2luZy9yZXNldHRpbmcgaGlzdG9yeSB0byBkZWFsIHdpdGggZXh0ZXJuYWxseS1zb3VyY2VkIGNoYW5nZXNcblxuICBmdW5jdGlvbiByZWJhc2VIaXN0U2VsU2luZ2xlKHBvcywgZnJvbSwgdG8sIGRpZmYpIHtcbiAgICBpZiAodG8gPCBwb3MubGluZSkge1xuICAgICAgcG9zLmxpbmUgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKGZyb20gPCBwb3MubGluZSkge1xuICAgICAgcG9zLmxpbmUgPSBmcm9tO1xuICAgICAgcG9zLmNoID0gMDtcbiAgICB9XG4gIH1cblxuICAvLyBUcmllcyB0byByZWJhc2UgYW4gYXJyYXkgb2YgaGlzdG9yeSBldmVudHMgZ2l2ZW4gYSBjaGFuZ2UgaW4gdGhlXG4gIC8vIGRvY3VtZW50LiBJZiB0aGUgY2hhbmdlIHRvdWNoZXMgdGhlIHNhbWUgbGluZXMgYXMgdGhlIGV2ZW50LCB0aGVcbiAgLy8gZXZlbnQsIGFuZCBldmVyeXRoaW5nICdiZWhpbmQnIGl0LCBpcyBkaXNjYXJkZWQuIElmIHRoZSBjaGFuZ2UgaXNcbiAgLy8gYmVmb3JlIHRoZSBldmVudCwgdGhlIGV2ZW50J3MgcG9zaXRpb25zIGFyZSB1cGRhdGVkLiBVc2VzIGFcbiAgLy8gY29weS1vbi13cml0ZSBzY2hlbWUgZm9yIHRoZSBwb3NpdGlvbnMsIHRvIGF2b2lkIGhhdmluZyB0b1xuICAvLyByZWFsbG9jYXRlIHRoZW0gYWxsIG9uIGV2ZXJ5IHJlYmFzZSwgYnV0IGFsc28gYXZvaWQgcHJvYmxlbXMgd2l0aFxuICAvLyBzaGFyZWQgcG9zaXRpb24gb2JqZWN0cyBiZWluZyB1bnNhZmVseSB1cGRhdGVkLlxuICBmdW5jdGlvbiByZWJhc2VIaXN0QXJyYXkoYXJyYXksIGZyb20sIHRvLCBkaWZmKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHN1YiA9IGFycmF5W2ldLCBvayA9IHRydWU7XG4gICAgICBpZiAoc3ViLnJhbmdlcykge1xuICAgICAgICBpZiAoIXN1Yi5jb3BpZWQpIHsgc3ViID0gYXJyYXlbaV0gPSBzdWIuZGVlcENvcHkoKTsgc3ViLmNvcGllZCA9IHRydWU7IH1cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIucmFuZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwgZnJvbSwgdG8sIGRpZmYpO1xuICAgICAgICAgIHJlYmFzZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdlc1tqXS5oZWFkLCBmcm9tLCB0bywgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGokMSA9IDA7IGokMSA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsgKytqJDEpIHtcbiAgICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2okMV07XG4gICAgICAgIGlmICh0byA8IGN1ci5mcm9tLmxpbmUpIHtcbiAgICAgICAgICBjdXIuZnJvbSA9IFBvcyhjdXIuZnJvbS5saW5lICsgZGlmZiwgY3VyLmZyb20uY2gpO1xuICAgICAgICAgIGN1ci50byA9IFBvcyhjdXIudG8ubGluZSArIGRpZmYsIGN1ci50by5jaCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBjdXIudG8ubGluZSkge1xuICAgICAgICAgIG9rID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvaykge1xuICAgICAgICBhcnJheS5zcGxpY2UoMCwgaSArIDEpO1xuICAgICAgICBpID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWJhc2VIaXN0KGhpc3QsIGNoYW5nZSkge1xuICAgIHZhciBmcm9tID0gY2hhbmdlLmZyb20ubGluZSwgdG8gPSBjaGFuZ2UudG8ubGluZSwgZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pIC0gMTtcbiAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC5kb25lLCBmcm9tLCB0bywgZGlmZik7XG4gICAgcmViYXNlSGlzdEFycmF5KGhpc3QudW5kb25lLCBmcm9tLCB0bywgZGlmZik7XG4gIH1cblxuICAvLyBVdGlsaXR5IGZvciBhcHBseWluZyBhIGNoYW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51bWJlcixcbiAgLy8gcmV0dXJuaW5nIHRoZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgdGhlIGxpbmUgYXNcbiAgLy8gY2hhbmdlZC5cbiAgZnVuY3Rpb24gY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHtcbiAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGU7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGUgPT0gXCJudW1iZXJcIikgeyBsaW5lID0gZ2V0TGluZShkb2MsIGNsaXBMaW5lKGRvYywgaGFuZGxlKSk7IH1cbiAgICBlbHNlIHsgbm8gPSBsaW5lTm8oaGFuZGxlKTsgfVxuICAgIGlmIChubyA9PSBudWxsKSB7IHJldHVybiBudWxsIH1cbiAgICBpZiAob3AobGluZSwgbm8pICYmIGRvYy5jbSkgeyByZWdMaW5lQ2hhbmdlKGRvYy5jbSwgbm8sIGNoYW5nZVR5cGUpOyB9XG4gICAgcmV0dXJuIGxpbmVcbiAgfVxuXG4gIC8vIFRoZSBkb2N1bWVudCBpcyByZXByZXNlbnRlZCBhcyBhIEJUcmVlIGNvbnNpc3Rpbmcgb2YgbGVhdmVzLCB3aXRoXG4gIC8vIGNodW5rIG9mIGxpbmVzIGluIHRoZW0sIGFuZCBicmFuY2hlcywgd2l0aCB1cCB0byB0ZW4gbGVhdmVzIG9yXG4gIC8vIG90aGVyIGJyYW5jaCBub2RlcyBiZWxvdyB0aGVtLiBUaGUgdG9wIG5vZGUgaXMgYWx3YXlzIGEgYnJhbmNoXG4gIC8vIG5vZGUsIGFuZCBpcyB0aGUgZG9jdW1lbnQgb2JqZWN0IGl0c2VsZiAobWVhbmluZyBpdCBoYXNcbiAgLy8gYWRkaXRpb25hbCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzKS5cbiAgLy9cbiAgLy8gQWxsIG5vZGVzIGhhdmUgcGFyZW50IGxpbmtzLiBUaGUgdHJlZSBpcyB1c2VkIGJvdGggdG8gZ28gZnJvbVxuICAvLyBsaW5lIG51bWJlcnMgdG8gbGluZSBvYmplY3RzLCBhbmQgdG8gZ28gZnJvbSBvYmplY3RzIHRvIG51bWJlcnMuXG4gIC8vIEl0IGFsc28gaW5kZXhlcyBieSBoZWlnaHQsIGFuZCBpcyB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBoZWlnaHRcbiAgLy8gYW5kIGxpbmUgb2JqZWN0LCBhbmQgdG8gZmluZCB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudC5cbiAgLy9cbiAgLy8gU2VlIGFsc28gaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nL2NvZGVtaXJyb3ItbGluZS10cmVlLmh0bWxcblxuICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIHZhciBoZWlnaHQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7XG4gICAgICBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIExlYWZDaHVuay5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoIH0sXG5cbiAgICAvLyBSZW1vdmUgdGhlIG4gbGluZXMgYXQgb2Zmc2V0ICdhdCcuXG4gICAgcmVtb3ZlSW5uZXI6IGZ1bmN0aW9uKGF0LCBuKSB7XG4gICAgICBmb3IgKHZhciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBlOyArK2kpIHtcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldO1xuICAgICAgICB0aGlzLmhlaWdodCAtPSBsaW5lLmhlaWdodDtcbiAgICAgICAgY2xlYW5VcExpbmUobGluZSk7XG4gICAgICAgIHNpZ25hbExhdGVyKGxpbmUsIFwiZGVsZXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5lcy5zcGxpY2UoYXQsIG4pO1xuICAgIH0sXG5cbiAgICAvLyBIZWxwZXIgdXNlZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJyYW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuXG4gICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7XG4gICAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmxpbmVzKTtcbiAgICB9LFxuXG4gICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBhcnJheSBvZiBsaW5lcyBhdCBvZmZzZXQgJ2F0JywgY291bnQgdGhlbSBhc1xuICAgIC8vIGhhdmluZyB0aGUgZ2l2ZW4gaGVpZ2h0LlxuICAgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkge1xuICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0O1xuICAgICAgdGhpcy5saW5lcyA9IHRoaXMubGluZXMuc2xpY2UoMCwgYXQpLmNvbmNhdChsaW5lcykuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYXQpKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsgbGluZXNbaV0ucGFyZW50ID0gdGhpczsgfVxuICAgIH0sXG5cbiAgICAvLyBVc2VkIHRvIGl0ZXJhdGUgb3ZlciBhIHBhcnQgb2YgdGhlIHRyZWUuXG4gICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkge1xuICAgICAgZm9yICh2YXIgZSA9IGF0ICsgbjsgYXQgPCBlOyArK2F0KVxuICAgICAgICB7IGlmIChvcCh0aGlzLmxpbmVzW2F0XSkpIHsgcmV0dXJuIHRydWUgfSB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxkcmVuKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHZhciBzaXplID0gMCwgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTtcbiAgICAgIHNpemUgKz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7XG4gICAgICBjaC5wYXJlbnQgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgfVxuXG4gIEJyYW5jaENodW5rLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zaXplIH0sXG5cbiAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHtcbiAgICAgIHRoaXMuc2l6ZSAtPSBuO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChhdCA8IHN6KSB7XG4gICAgICAgICAgdmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxkLmhlaWdodDtcbiAgICAgICAgICBjaGlsZC5yZW1vdmVJbm5lcihhdCwgcm0pO1xuICAgICAgICAgIHRoaXMuaGVpZ2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodDtcbiAgICAgICAgICBpZiAoc3ogPT0gcm0pIHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsgY2hpbGQucGFyZW50ID0gbnVsbDsgfVxuICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgeyBicmVhayB9XG4gICAgICAgICAgYXQgPSAwO1xuICAgICAgICB9IGVsc2UgeyBhdCAtPSBzejsgfVxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gMjUgbGluZXMsIGVuc3VyZSB0aGF0IGl0IGlzIGFcbiAgICAgIC8vIHNpbmdsZSBsZWFmIG5vZGUuXG4gICAgICBpZiAodGhpcy5zaXplIC0gbiA8IDI1ICYmXG4gICAgICAgICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBMZWFmQ2h1bmspKSkge1xuICAgICAgICB2YXIgbGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb2xsYXBzZShsaW5lcyk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldO1xuICAgICAgICB0aGlzLmNoaWxkcmVuWzBdLnBhcmVudCA9IHRoaXM7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7IHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOyB9XG4gICAgfSxcblxuICAgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkge1xuICAgICAgdGhpcy5zaXplICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgICBpZiAoYXQgPD0gc3opIHtcbiAgICAgICAgICBjaGlsZC5pbnNlcnRJbm5lcihhdCwgbGluZXMsIGhlaWdodCk7XG4gICAgICAgICAgaWYgKGNoaWxkLmxpbmVzICYmIGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICAgICAgICAvLyBUbyBhdm9pZCBtZW1vcnkgdGhyYXNoaW5nIHdoZW4gY2hpbGQubGluZXMgaXMgaHVnZSAoZS5nLiBmaXJzdCB2aWV3IG9mIGEgbGFyZ2UgZmlsZSksIGl0J3MgbmV2ZXIgc3BsaWNlZC5cbiAgICAgICAgICAgIC8vIEluc3RlYWQsIHNtYWxsIHNsaWNlcyBhcmUgdGFrZW4uIFRoZXkncmUgdGFrZW4gaW4gb3JkZXIgYmVjYXVzZSBzZXF1ZW50aWFsIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZmFzdGVzdC5cbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSBjaGlsZC5saW5lcy5sZW5ndGggJSAyNSArIDI1O1xuICAgICAgICAgICAgZm9yICh2YXIgcG9zID0gcmVtYWluaW5nOyBwb3MgPCBjaGlsZC5saW5lcy5sZW5ndGg7KSB7XG4gICAgICAgICAgICAgIHZhciBsZWFmID0gbmV3IExlYWZDaHVuayhjaGlsZC5saW5lcy5zbGljZShwb3MsIHBvcyArPSAyNSkpO1xuICAgICAgICAgICAgICBjaGlsZC5oZWlnaHQgLT0gbGVhZi5oZWlnaHQ7XG4gICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKCsraSwgMCwgbGVhZik7XG4gICAgICAgICAgICAgIGxlYWYucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkLmxpbmVzID0gY2hpbGQubGluZXMuc2xpY2UoMCwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgIHRoaXMubWF5YmVTcGlsbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGF0IC09IHN6O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBXaGVuIGEgbm9kZSBoYXMgZ3Jvd24sIGNoZWNrIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHNwbGl0LlxuICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSB7IHJldHVybiB9XG4gICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgc3BpbGxlZCA9IG1lLmNoaWxkcmVuLnNwbGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTtcbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXcgQnJhbmNoQ2h1bmsoc3BpbGxlZCk7XG4gICAgICAgIGlmICghbWUucGFyZW50KSB7IC8vIEJlY29tZSB0aGUgcGFyZW50IG5vZGVcbiAgICAgICAgICB2YXIgY29weSA9IG5ldyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbik7XG4gICAgICAgICAgY29weS5wYXJlbnQgPSBtZTtcbiAgICAgICAgICBtZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXTtcbiAgICAgICAgICBtZSA9IGNvcHk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZS5zaXplIC09IHNpYmxpbmcuc2l6ZTtcbiAgICAgICAgICBtZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7XG4gICAgICAgICAgdmFyIG15SW5kZXggPSBpbmRleE9mKG1lLnBhcmVudC5jaGlsZHJlbiwgbWUpO1xuICAgICAgICAgIG1lLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobXlJbmRleCArIDEsIDAsIHNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHNpYmxpbmcucGFyZW50ID0gbWUucGFyZW50O1xuICAgICAgfSB3aGlsZSAobWUuY2hpbGRyZW4ubGVuZ3RoID4gMTApXG4gICAgICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpO1xuICAgIH0sXG5cbiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTtcbiAgICAgICAgaWYgKGF0IDwgc3opIHtcbiAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpO1xuICAgICAgICAgIGlmIChjaGlsZC5pdGVyTihhdCwgdXNlZCwgb3ApKSB7IHJldHVybiB0cnVlIH1cbiAgICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgeyBicmVhayB9XG4gICAgICAgICAgYXQgPSAwO1xuICAgICAgICB9IGVsc2UgeyBhdCAtPSBzejsgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBMaW5lIHdpZGdldHMgYXJlIGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBhYm92ZSBvciBiZWxvdyBhIGxpbmUuXG5cbiAgdmFyIExpbmVXaWRnZXQgPSBmdW5jdGlvbihkb2MsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykgeyBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgeyBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKVxuICAgICAgeyB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07IH0gfSB9XG4gICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgfTtcblxuICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7XG4gICAgaWYgKG5vID09IG51bGwgfHwgIXdzKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3cy5sZW5ndGg7ICsraSkgeyBpZiAod3NbaV0gPT0gdGhpcykgeyB3cy5zcGxpY2UoaS0tLCAxKTsgfSB9XG4gICAgaWYgKCF3cy5sZW5ndGgpIHsgbGluZS53aWRnZXRzID0gbnVsbDsgfVxuICAgIHZhciBoZWlnaHQgPSB3aWRnZXRIZWlnaHQodGhpcyk7XG4gICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpO1xuICAgIGlmIChjbSkge1xuICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCAtaGVpZ2h0KTtcbiAgICAgICAgcmVnTGluZUNoYW5nZShjbSwgbm8sIFwid2lkZ2V0XCIpO1xuICAgICAgfSk7XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0Q2xlYXJlZFwiLCBjbSwgdGhpcywgbm8pO1xuICAgIH1cbiAgfTtcblxuICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgb2xkSCA9IHRoaXMuaGVpZ2h0LCBjbSA9IHRoaXMuZG9jLmNtLCBsaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDtcbiAgICB2YXIgZGlmZiA9IHdpZGdldEhlaWdodCh0aGlzKSAtIG9sZEg7XG4gICAgaWYgKCFkaWZmKSB7IHJldHVybiB9XG4gICAgaWYgKCFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUpKSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsgfVxuICAgIGlmIChjbSkge1xuICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpO1xuICAgICAgICBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0Q2hhbmdlZFwiLCBjbSwgdGhpcyQxLCBsaW5lTm8obGluZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBldmVudE1peGluKExpbmVXaWRnZXQpO1xuXG4gIGZ1bmN0aW9uIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpIHtcbiAgICBpZiAoaGVpZ2h0QXRMaW5lKGxpbmUpIDwgKChjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxUb3ApIHx8IGNtLmRvYy5zY3JvbGxUb3ApKVxuICAgICAgeyBhZGRUb1Njcm9sbFRvcChjbSwgZGlmZik7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRnZXQoZG9jLCBub2RlLCBvcHRpb25zKTtcbiAgICB2YXIgY20gPSBkb2MuY207XG4gICAgaWYgKGNtICYmIHdpZGdldC5ub0hTY3JvbGwpIHsgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOyB9XG4gICAgY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgXCJ3aWRnZXRcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSk7XG4gICAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09IG51bGwpIHsgd2lkZ2V0cy5wdXNoKHdpZGdldCk7IH1cbiAgICAgIGVsc2UgeyB3aWRnZXRzLnNwbGljZShNYXRoLm1pbih3aWRnZXRzLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkpLCAwLCB3aWRnZXQpOyB9XG4gICAgICB3aWRnZXQubGluZSA9IGxpbmU7XG4gICAgICBpZiAoY20gJiYgIWxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB7XG4gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGluZSkgPCBkb2Muc2Nyb2xsVG9wO1xuICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgd2lkZ2V0SGVpZ2h0KHdpZGdldCkpO1xuICAgICAgICBpZiAoYWJvdmVWaXNpYmxlKSB7IGFkZFRvU2Nyb2xsVG9wKGNtLCB3aWRnZXQuaGVpZ2h0KTsgfVxuICAgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChjbSkgeyBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0QWRkZWRcIiwgY20sIHdpZGdldCwgdHlwZW9mIGhhbmRsZSA9PSBcIm51bWJlclwiID8gaGFuZGxlIDogbGluZU5vKGhhbmRsZSkpOyB9XG4gICAgcmV0dXJuIHdpZGdldFxuICB9XG5cbiAgLy8gVEVYVE1BUktFUlNcblxuICAvLyBDcmVhdGVkIHdpdGggbWFya1RleHQgYW5kIHNldEJvb2ttYXJrIG1ldGhvZHMuIEEgVGV4dE1hcmtlciBpcyBhXG4gIC8vIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNsZWFyIG9yIGZpbmQgYSBtYXJrZWQgcG9zaXRpb24gaW4gdGhlXG4gIC8vIGRvY3VtZW50LiBMaW5lIG9iamVjdHMgaG9sZCBhcnJheXMgKG1hcmtlZFNwYW5zKSBjb250YWluaW5nXG4gIC8vIHtmcm9tLCB0bywgbWFya2VyfSBvYmplY3QgcG9pbnRpbmcgdG8gc3VjaCBtYXJrZXIgb2JqZWN0cywgYW5kXG4gIC8vIGluZGljYXRpbmcgdGhhdCBzdWNoIGEgbWFya2VyIGlzIHByZXNlbnQgb24gdGhhdCBsaW5lLiBNdWx0aXBsZVxuICAvLyBsaW5lcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgbWFya2VyIHdoZW4gaXQgc3BhbnMgYWNyb3NzIGxpbmVzLlxuICAvLyBUaGUgc3BhbnMgd2lsbCBoYXZlIG51bGwgZm9yIHRoZWlyIGZyb20vdG8gcHJvcGVydGllcyB3aGVuIHRoZVxuICAvLyBtYXJrZXIgY29udGludWVzIGJleW9uZCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBsaW5lLiBNYXJrZXJzIGhhdmVcbiAgLy8gbGlua3MgYmFjayB0byB0aGUgbGluZXMgdGhleSBjdXJyZW50bHkgdG91Y2guXG5cbiAgLy8gQ29sbGFwc2VkIG1hcmtlcnMgaGF2ZSB1bmlxdWUgaWRzLCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIG9yZGVyXG4gIC8vIHRoZW0sIHdoaWNoIGlzIG5lZWRlZCBmb3IgdW5pcXVlbHkgZGV0ZXJtaW5pbmcgYW4gb3V0ZXIgbWFya2VyXG4gIC8vIHdoZW4gdGhleSBvdmVybGFwICh0aGV5IG1heSBuZXN0LCBidXQgbm90IHBhcnRpYWxseSBvdmVybGFwKS5cbiAgdmFyIG5leHRNYXJrZXJJZCA9IDA7XG5cbiAgdmFyIFRleHRNYXJrZXIgPSBmdW5jdGlvbihkb2MsIHR5cGUpIHtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmRvYyA9IGRvYztcbiAgICB0aGlzLmlkID0gKytuZXh0TWFya2VySWQ7XG4gIH07XG5cbiAgLy8gQ2xlYXIgdGhlIG1hcmtlci5cbiAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHsgcmV0dXJuIH1cbiAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd2l0aE9wID0gY20gJiYgIWNtLmN1ck9wO1xuICAgIGlmICh3aXRoT3ApIHsgc3RhcnRPcGVyYXRpb24oY20pOyB9XG4gICAgaWYgKGhhc0hhbmRsZXIodGhpcywgXCJjbGVhclwiKSkge1xuICAgICAgdmFyIGZvdW5kID0gdGhpcy5maW5kKCk7XG4gICAgICBpZiAoZm91bmQpIHsgc2lnbmFsTGF0ZXIodGhpcywgXCJjbGVhclwiLCBmb3VuZC5mcm9tLCBmb3VuZC50byk7IH1cbiAgICB9XG4gICAgdmFyIG1pbiA9IG51bGwsIG1heCA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7XG4gICAgICBpZiAoY20gJiYgIXRoaXMuY29sbGFwc2VkKSB7IHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObyhsaW5lKSwgXCJ0ZXh0XCIpOyB9XG4gICAgICBlbHNlIGlmIChjbSkge1xuICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7IG1heCA9IGxpbmVObyhsaW5lKTsgfVxuICAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIHsgbWluID0gbGluZU5vKGxpbmUpOyB9XG4gICAgICB9XG4gICAgICBsaW5lLm1hcmtlZFNwYW5zID0gcmVtb3ZlTWFya2VkU3BhbihsaW5lLm1hcmtlZFNwYW5zLCBzcGFuKTtcbiAgICAgIGlmIChzcGFuLmZyb20gPT0gbnVsbCAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRoaXMuZG9jLCBsaW5lKSAmJiBjbSlcbiAgICAgICAgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOyB9XG4gICAgfVxuICAgIGlmIChjbSAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSQxKSB7XG4gICAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZSh0aGlzLmxpbmVzW2kkMV0pLCBsZW4gPSBsaW5lTGVuZ3RoKHZpc3VhbCk7XG4gICAgICBpZiAobGVuID4gY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7XG4gICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IHZpc3VhbDtcbiAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuO1xuICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IH1cblxuICAgIGlmIChtaW4gIT0gbnVsbCAmJiBjbSAmJiB0aGlzLmNvbGxhcHNlZCkgeyByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7IH1cbiAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuYXRvbWljICYmIHRoaXMuZG9jLmNhbnRFZGl0KSB7XG4gICAgICB0aGlzLmRvYy5jYW50RWRpdCA9IGZhbHNlO1xuICAgICAgaWYgKGNtKSB7IHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsgfVxuICAgIH1cbiAgICBpZiAoY20pIHsgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQ2xlYXJlZFwiLCBjbSwgdGhpcywgbWluLCBtYXgpOyB9XG4gICAgaWYgKHdpdGhPcCkgeyBlbmRPcGVyYXRpb24oY20pOyB9XG4gICAgaWYgKHRoaXMucGFyZW50KSB7IHRoaXMucGFyZW50LmNsZWFyKCk7IH1cbiAgfTtcblxuICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFya2VyIGluIHRoZSBkb2N1bWVudC4gUmV0dXJucyBhIHtmcm9tLFxuICAvLyB0b30gb2JqZWN0IGJ5IGRlZmF1bHQuIFNpZGUgY2FuIGJlIHBhc3NlZCB0byBnZXQgYSBzcGVjaWZpYyBzaWRlXG4gIC8vIC0tIDAgKGJvdGgpLCAtMSAobGVmdCksIG9yIDEgKHJpZ2h0KS4gV2hlbiBsaW5lT2JqIGlzIHRydWUsIHRoZVxuICAvLyBQb3Mgb2JqZWN0cyByZXR1cm5lZCBjb250YWluIGEgbGluZSBvYmplY3QsIHJhdGhlciB0aGFuIGEgbGluZVxuICAvLyBudW1iZXIgKHVzZWQgdG8gcHJldmVudCBsb29raW5nIHVwIHRoZSBzYW1lIGxpbmUgdHdpY2UpLlxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gKHNpZGUsIGxpbmVPYmopIHtcbiAgICBpZiAoc2lkZSA9PSBudWxsICYmIHRoaXMudHlwZSA9PSBcImJvb2ttYXJrXCIpIHsgc2lkZSA9IDE7IH1cbiAgICB2YXIgZnJvbSwgdG87XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7XG4gICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIHtcbiAgICAgICAgZnJvbSA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi5mcm9tKTtcbiAgICAgICAgaWYgKHNpZGUgPT0gLTEpIHsgcmV0dXJuIGZyb20gfVxuICAgICAgfVxuICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkge1xuICAgICAgICB0byA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi50byk7XG4gICAgICAgIGlmIChzaWRlID09IDEpIHsgcmV0dXJuIHRvIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0b31cbiAgfTtcblxuICAvLyBTaWduYWxzIHRoYXQgdGhlIG1hcmtlcidzIHdpZGdldCBjaGFuZ2VkLCBhbmQgc3Vycm91bmRpbmcgbGF5b3V0XG4gIC8vIHNob3VsZCBiZSByZWNvbXB1dGVkLlxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcG9zID0gdGhpcy5maW5kKC0xLCB0cnVlKSwgd2lkZ2V0ID0gdGhpcywgY20gPSB0aGlzLmRvYy5jbTtcbiAgICBpZiAoIXBvcyB8fCAhY20pIHsgcmV0dXJuIH1cbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGluZSA9IHBvcy5saW5lLCBsaW5lTiA9IGxpbmVObyhwb3MubGluZSk7XG4gICAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pO1xuICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcih2aWV3KTtcbiAgICAgICAgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlO1xuICAgICAgaWYgKCFsaW5lSXNIaWRkZW4od2lkZ2V0LmRvYywgbGluZSkgJiYgd2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvbGRIZWlnaHQgPSB3aWRnZXQuaGVpZ2h0O1xuICAgICAgICB3aWRnZXQuaGVpZ2h0ID0gbnVsbDtcbiAgICAgICAgdmFyIGRIZWlnaHQgPSB3aWRnZXRIZWlnaHQod2lkZ2V0KSAtIG9sZEhlaWdodDtcbiAgICAgICAgaWYgKGRIZWlnaHQpXG4gICAgICAgICAgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZEhlaWdodCk7IH1cbiAgICAgIH1cbiAgICAgIHNpZ25hbExhdGVyKGNtLCBcIm1hcmtlckNoYW5nZWRcIiwgY20sIHRoaXMkMSk7XG4gICAgfSk7XG4gIH07XG5cbiAgVGV4dE1hcmtlci5wcm90b3R5cGUuYXR0YWNoTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkge1xuICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3A7XG4gICAgICBpZiAoIW9wLm1heWJlSGlkZGVuTWFya2VycyB8fCBpbmRleE9mKG9wLm1heWJlSGlkZGVuTWFya2VycywgdGhpcykgPT0gLTEpXG4gICAgICAgIHsgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZVVuaGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTsgfVxuICAgIH1cbiAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gIH07XG5cbiAgVGV4dE1hcmtlci5wcm90b3R5cGUuZGV0YWNoTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgdGhpcy5saW5lcy5zcGxpY2UoaW5kZXhPZih0aGlzLmxpbmVzLCBsaW5lKSwgMSk7XG4gICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkge1xuICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3BcbiAgICAgIDsob3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZUhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7XG4gICAgfVxuICB9O1xuICBldmVudE1peGluKFRleHRNYXJrZXIpO1xuXG4gIC8vIENyZWF0ZSBhIG1hcmtlciwgd2lyZSBpdCB1cCB0byB0aGUgcmlnaHQgbGluZXMsIGFuZFxuICBmdW5jdGlvbiBtYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7XG4gICAgLy8gU2hhcmVkIG1hcmtlcnMgKGFjcm9zcyBsaW5rZWQgZG9jdW1lbnRzKSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG4gICAgLy8gKG1hcmtUZXh0U2hhcmVkIHdpbGwgY2FsbCBvdXQgdG8gdGhpcyBhZ2Fpbiwgb25jZSBwZXJcbiAgICAvLyBkb2N1bWVudCkuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQpIHsgcmV0dXJuIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIH1cbiAgICAvLyBFbnN1cmUgd2UgYXJlIGluIGFuIG9wZXJhdGlvbi5cbiAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApIHsgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1hcmtUZXh0KShkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB9XG5cbiAgICB2YXIgbWFya2VyID0gbmV3IFRleHRNYXJrZXIoZG9jLCB0eXBlKSwgZGlmZiA9IGNtcChmcm9tLCB0byk7XG4gICAgaWYgKG9wdGlvbnMpIHsgY29weU9iaihvcHRpb25zLCBtYXJrZXIsIGZhbHNlKTsgfVxuICAgIC8vIERvbid0IGNvbm5lY3QgZW1wdHkgbWFya2VycyB1bmxlc3MgY2xlYXJXaGVuRW1wdHkgaXMgZmFsc2VcbiAgICBpZiAoZGlmZiA+IDAgfHwgZGlmZiA9PSAwICYmIG1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpXG4gICAgICB7IHJldHVybiBtYXJrZXIgfVxuICAgIGlmIChtYXJrZXIucmVwbGFjZWRXaXRoKSB7XG4gICAgICAvLyBTaG93aW5nIHVwIGFzIGEgd2lkZ2V0IGltcGxpZXMgY29sbGFwc2VkICh3aWRnZXQgcmVwbGFjZXMgdGV4dClcbiAgICAgIG1hcmtlci5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgbWFya2VyLndpZGdldE5vZGUgPSBlbHRQKFwic3BhblwiLCBbbWFya2VyLnJlcGxhY2VkV2l0aF0sIFwiQ29kZU1pcnJvci13aWRnZXRcIik7XG4gICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIHsgbWFya2VyLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7IH1cbiAgICAgIGlmIChvcHRpb25zLmluc2VydExlZnQpIHsgbWFya2VyLndpZGdldE5vZGUuaW5zZXJ0TGVmdCA9IHRydWU7IH1cbiAgICB9XG4gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHtcbiAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgZnJvbS5saW5lLCBmcm9tLCB0bywgbWFya2VyKSB8fFxuICAgICAgICAgIGZyb20ubGluZSAhPSB0by5saW5lICYmIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5saW5lLCBmcm9tLCB0bywgbWFya2VyKSlcbiAgICAgICAgeyB0aHJvdyBuZXcgRXJyb3IoXCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lXCIpIH1cbiAgICAgIHNlZUNvbGxhcHNlZFNwYW5zKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hcmtlci5hZGRUb0hpc3RvcnkpXG4gICAgICB7IGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIG9yaWdpbjogXCJtYXJrVGV4dFwifSwgZG9jLnNlbCwgTmFOKTsgfVxuXG4gICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lO1xuICAgIGRvYy5pdGVyKGN1ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGNtICYmIG1hcmtlci5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIHZpc3VhbExpbmUobGluZSkgPT0gY20uZGlzcGxheS5tYXhMaW5lKVxuICAgICAgICB7IHVwZGF0ZU1heExpbmUgPSB0cnVlOyB9XG4gICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCAmJiBjdXJMaW5lICE9IGZyb20ubGluZSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOyB9XG4gICAgICBhZGRNYXJrZWRTcGFuKGxpbmUsIG5ldyBNYXJrZWRTcGFuKG1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSB0by5saW5lID8gdG8uY2ggOiBudWxsKSk7XG4gICAgICArK2N1ckxpbmU7XG4gICAgfSk7XG4gICAgLy8gbGluZUlzSGlkZGVuIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzcGFucywgc28gbmVlZHMgYSBzZWNvbmQgcGFzc1xuICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7IGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKTsgfVxuICAgIH0pOyB9XG5cbiAgICBpZiAobWFya2VyLmNsZWFyT25FbnRlcikgeyBvbihtYXJrZXIsIFwiYmVmb3JlQ3Vyc29yRW50ZXJcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFya2VyLmNsZWFyKCk7IH0pOyB9XG5cbiAgICBpZiAobWFya2VyLnJlYWRPbmx5KSB7XG4gICAgICBzZWVSZWFkT25seVNwYW5zKCk7XG4gICAgICBpZiAoZG9jLmhpc3RvcnkuZG9uZS5sZW5ndGggfHwgZG9jLmhpc3RvcnkudW5kb25lLmxlbmd0aClcbiAgICAgICAgeyBkb2MuY2xlYXJIaXN0b3J5KCk7IH1cbiAgICB9XG4gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHtcbiAgICAgIG1hcmtlci5pZCA9ICsrbmV4dE1hcmtlcklkO1xuICAgICAgbWFya2VyLmF0b21pYyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjbSkge1xuICAgICAgLy8gU3luYyBlZGl0b3Igc3RhdGVcbiAgICAgIGlmICh1cGRhdGVNYXhMaW5lKSB7IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOyB9XG4gICAgICBpZiAobWFya2VyLmNvbGxhcHNlZClcbiAgICAgICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOyB9XG4gICAgICBlbHNlIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY3NzIHx8XG4gICAgICAgICAgICAgICBtYXJrZXIuYXR0cmlidXRlcyB8fCBtYXJrZXIudGl0bGUpXG4gICAgICAgIHsgZm9yICh2YXIgaSA9IGZyb20ubGluZTsgaSA8PSB0by5saW5lOyBpKyspIHsgcmVnTGluZUNoYW5nZShjbSwgaSwgXCJ0ZXh0XCIpOyB9IH1cbiAgICAgIGlmIChtYXJrZXIuYXRvbWljKSB7IHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsgfVxuICAgICAgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQWRkZWRcIiwgY20sIG1hcmtlcik7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJcbiAgfVxuXG4gIC8vIFNIQVJFRCBURVhUTUFSS0VSU1xuXG4gIC8vIEEgc2hhcmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJdCBpc1xuICAvLyBpbXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBsZSBub3JtYWxcbiAgLy8gbWFya2Vycy5cbiAgdmFyIFNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5KSB7XG4gICAgdGhpcy5tYXJrZXJzID0gbWFya2VycztcbiAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSlcbiAgICAgIHsgbWFya2Vyc1tpXS5wYXJlbnQgPSB0aGlzOyB9XG4gIH07XG5cbiAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHsgcmV0dXJuIH1cbiAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSlcbiAgICAgIHsgdGhpcy5tYXJrZXJzW2ldLmNsZWFyKCk7IH1cbiAgICBzaWduYWxMYXRlcih0aGlzLCBcImNsZWFyXCIpO1xuICB9O1xuXG4gIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoc2lkZSwgbGluZU9iaikge1xuICAgIHJldHVybiB0aGlzLnByaW1hcnkuZmluZChzaWRlLCBsaW5lT2JqKVxuICB9O1xuICBldmVudE1peGluKFNoYXJlZFRleHRNYXJrZXIpO1xuXG4gIGZ1bmN0aW9uIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHtcbiAgICBvcHRpb25zID0gY29weU9iaihvcHRpb25zKTtcbiAgICBvcHRpb25zLnNoYXJlZCA9IGZhbHNlO1xuICAgIHZhciBtYXJrZXJzID0gW21hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpXSwgcHJpbWFyeSA9IG1hcmtlcnNbMF07XG4gICAgdmFyIHdpZGdldCA9IG9wdGlvbnMud2lkZ2V0Tm9kZTtcbiAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYykge1xuICAgICAgaWYgKHdpZGdldCkgeyBvcHRpb25zLndpZGdldE5vZGUgPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOyB9XG4gICAgICBtYXJrZXJzLnB1c2gobWFya1RleHQoZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9wdGlvbnMsIHR5cGUpKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSlcbiAgICAgICAgeyBpZiAoZG9jLmxpbmtlZFtpXS5pc1BhcmVudCkgeyByZXR1cm4gfSB9XG4gICAgICBwcmltYXJ5ID0gbHN0KG1hcmtlcnMpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXcgU2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5KVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFNoYXJlZE1hcmtlcnMoZG9jKSB7XG4gICAgcmV0dXJuIGRvYy5maW5kTWFya3MoUG9zKGRvYy5maXJzdCwgMCksIGRvYy5jbGlwUG9zKFBvcyhkb2MubGFzdExpbmUoKSkpLCBmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5wYXJlbnQ7IH0pXG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U2hhcmVkTWFya2Vycyhkb2MsIG1hcmtlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBwb3MgPSBtYXJrZXIuZmluZCgpO1xuICAgICAgdmFyIG1Gcm9tID0gZG9jLmNsaXBQb3MocG9zLmZyb20pLCBtVG8gPSBkb2MuY2xpcFBvcyhwb3MudG8pO1xuICAgICAgaWYgKGNtcChtRnJvbSwgbVRvKSkge1xuICAgICAgICB2YXIgc3ViTWFyayA9IG1hcmtUZXh0KGRvYywgbUZyb20sIG1UbywgbWFya2VyLnByaW1hcnksIG1hcmtlci5wcmltYXJ5LnR5cGUpO1xuICAgICAgICBtYXJrZXIubWFya2Vycy5wdXNoKHN1Yk1hcmspO1xuICAgICAgICBzdWJNYXJrLnBhcmVudCA9IG1hcmtlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXRhY2hTaGFyZWRNYXJrZXJzKG1hcmtlcnMpIHtcbiAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggaSApIHtcbiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBsaW5rZWQgPSBbbWFya2VyLnByaW1hcnkuZG9jXTtcbiAgICAgIGxpbmtlZERvY3MobWFya2VyLnByaW1hcnkuZG9jLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gbGlua2VkLnB1c2goZCk7IH0pO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgc3ViTWFya2VyID0gbWFya2VyLm1hcmtlcnNbal07XG4gICAgICAgIGlmIChpbmRleE9mKGxpbmtlZCwgc3ViTWFya2VyLmRvYykgPT0gLTEpIHtcbiAgICAgICAgICBzdWJNYXJrZXIucGFyZW50ID0gbnVsbDtcbiAgICAgICAgICBtYXJrZXIubWFya2Vycy5zcGxpY2Uoai0tLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIGxvb3AoIGkgKTtcbiAgfVxuXG4gIHZhciBuZXh0RG9jSWQgPSAwO1xuICB2YXIgRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwgZmlyc3RMaW5lLCBsaW5lU2VwLCBkaXJlY3Rpb24pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkgeyByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXAsIGRpcmVjdGlvbikgfVxuICAgIGlmIChmaXJzdExpbmUgPT0gbnVsbCkgeyBmaXJzdExpbmUgPSAwOyB9XG5cbiAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZShcIlwiLCBudWxsKV0pXSk7XG4gICAgdGhpcy5maXJzdCA9IGZpcnN0TGluZTtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG4gICAgdGhpcy5jYW50RWRpdCA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gMTtcbiAgICB0aGlzLm1vZGVGcm9udGllciA9IHRoaXMuaGlnaGxpZ2h0RnJvbnRpZXIgPSBmaXJzdExpbmU7XG4gICAgdmFyIHN0YXJ0ID0gUG9zKGZpcnN0TGluZSwgMCk7XG4gICAgdGhpcy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpO1xuICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpO1xuICAgIHRoaXMuaWQgPSArK25leHREb2NJZDtcbiAgICB0aGlzLm1vZGVPcHRpb24gPSBtb2RlO1xuICAgIHRoaXMubGluZVNlcCA9IGxpbmVTZXA7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSAoZGlyZWN0aW9uID09IFwicnRsXCIpID8gXCJydGxcIiA6IFwibHRyXCI7XG4gICAgdGhpcy5leHRlbmQgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgdGV4dCA9PSBcInN0cmluZ1wiKSB7IHRleHQgPSB0aGlzLnNwbGl0TGluZXModGV4dCk7IH1cbiAgICB1cGRhdGVEb2ModGhpcywge2Zyb206IHN0YXJ0LCB0bzogc3RhcnQsIHRleHQ6IHRleHR9KTtcbiAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHN0YXJ0KSwgc2VsX2RvbnRTY3JvbGwpO1xuICB9O1xuXG4gIERvYy5wcm90b3R5cGUgPSBjcmVhdGVPYmooQnJhbmNoQ2h1bmsucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IERvYyxcbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGRvY3VtZW50LiBTdXBwb3J0cyB0d28gZm9ybXMgLS0gd2l0aCBvbmx5IG9uZVxuICAgIC8vIGFyZ3VtZW50LCBpdCBjYWxscyB0aGF0IGZvciBlYWNoIGxpbmUgaW4gdGhlIGRvY3VtZW50LiBXaXRoXG4gICAgLy8gdGhyZWUsIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIHJhbmdlIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gKHdpdGhcbiAgICAvLyB0aGUgc2Vjb25kIGJlaW5nIG5vbi1pbmNsdXNpdmUpLlxuICAgIGl0ZXI6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcCkge1xuICAgICAgaWYgKG9wKSB7IHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJvbSwgb3ApOyB9XG4gICAgICBlbHNlIHsgdGhpcy5pdGVyTih0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplLCBmcm9tKTsgfVxuICAgIH0sXG5cbiAgICAvLyBOb24tcHVibGljIGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy5cbiAgICBpbnNlcnQ6IGZ1bmN0aW9uKGF0LCBsaW5lcykge1xuICAgICAgdmFyIGhlaWdodCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7IGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7IH1cbiAgICAgIHRoaXMuaW5zZXJ0SW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBsaW5lcywgaGVpZ2h0KTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4pIHsgdGhpcy5yZW1vdmVJbm5lcihhdCAtIHRoaXMuZmlyc3QsIG4pOyB9LFxuXG4gICAgLy8gRnJvbSBoZXJlLCB0aGUgbWV0aG9kcyBhcmUgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gTW9zdFxuICAgIC8vIGFyZSBhbHNvIGF2YWlsYWJsZSBmcm9tIENvZGVNaXJyb3IgKGVkaXRvcikgaW5zdGFuY2VzLlxuXG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHtcbiAgICAgIHZhciBsaW5lcyA9IGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpO1xuICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSB7IHJldHVybiBsaW5lcyB9XG4gICAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKVxuICAgIH0sXG4gICAgc2V0VmFsdWU6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGNvZGUpIHtcbiAgICAgIHZhciB0b3AgPSBQb3ModGhpcy5maXJzdCwgMCksIGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTtcbiAgICAgIG1ha2VDaGFuZ2UodGhpcywge2Zyb206IHRvcCwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKHRoaXMsIGxhc3QpLnRleHQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiBcInNldFZhbHVlXCIsIGZ1bGw6IHRydWV9LCB0cnVlKTtcbiAgICAgIGlmICh0aGlzLmNtKSB7IHNjcm9sbFRvQ29vcmRzKHRoaXMuY20sIDAsIDApOyB9XG4gICAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHRvcCksIHNlbF9kb250U2Nyb2xsKTtcbiAgICB9KSxcbiAgICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHtcbiAgICAgIGZyb20gPSBjbGlwUG9zKHRoaXMsIGZyb20pO1xuICAgICAgdG8gPSB0byA/IGNsaXBQb3ModGhpcywgdG8pIDogZnJvbTtcbiAgICAgIHJlcGxhY2VSYW5nZSh0aGlzLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKTtcbiAgICB9LFxuICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bywgbGluZVNlcCkge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0QmV0d2Vlbih0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSk7XG4gICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHsgcmV0dXJuIGxpbmVzIH1cbiAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpXG4gICAgfSxcblxuICAgIGdldExpbmU6IGZ1bmN0aW9uKGxpbmUpIHt2YXIgbCA9IHRoaXMuZ2V0TGluZUhhbmRsZShsaW5lKTsgcmV0dXJuIGwgJiYgbC50ZXh0fSxcblxuICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxpbmUpKSB7IHJldHVybiBnZXRMaW5lKHRoaXMsIGxpbmUpIH19LFxuICAgIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpfSxcblxuICAgIGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDogZnVuY3Rpb24obGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHsgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7IH1cbiAgICAgIHJldHVybiB2aXN1YWxMaW5lKGxpbmUpXG4gICAgfSxcblxuICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2l6ZX0sXG4gICAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdH0sXG4gICAgbGFzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMX0sXG5cbiAgICBjbGlwUG9zOiBmdW5jdGlvbihwb3MpIHtyZXR1cm4gY2xpcFBvcyh0aGlzLCBwb3MpfSxcblxuICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHtcbiAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsLnByaW1hcnkoKSwgcG9zO1xuICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gXCJoZWFkXCIpIHsgcG9zID0gcmFuZ2UuaGVhZDsgfVxuICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gXCJhbmNob3JcIikgeyBwb3MgPSByYW5nZS5hbmNob3I7IH1cbiAgICAgIGVsc2UgaWYgKHN0YXJ0ID09IFwiZW5kXCIgfHwgc3RhcnQgPT0gXCJ0b1wiIHx8IHN0YXJ0ID09PSBmYWxzZSkgeyBwb3MgPSByYW5nZS50bygpOyB9XG4gICAgICBlbHNlIHsgcG9zID0gcmFuZ2UuZnJvbSgpOyB9XG4gICAgICByZXR1cm4gcG9zXG4gICAgfSxcbiAgICBsaXN0U2VsZWN0aW9uczogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNlbC5yYW5nZXMgfSxcbiAgICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCl9LFxuXG4gICAgc2V0Q3Vyc29yOiBkb2NNZXRob2RPcChmdW5jdGlvbihsaW5lLCBjaCwgb3B0aW9ucykge1xuICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgdHlwZW9mIGxpbmUgPT0gXCJudW1iZXJcIiA/IFBvcyhsaW5lLCBjaCB8fCAwKSA6IGxpbmUpLCBudWxsLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBzZXRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykge1xuICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciksIG9wdGlvbnMpO1xuICAgIH0pLFxuICAgIGV4dGVuZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZCwgb3RoZXIsIG9wdGlvbnMpIHtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGhlYWQpLCBvdGhlciAmJiBjbGlwUG9zKHRoaXMsIG90aGVyKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgZXh0ZW5kU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZHMsIG9wdGlvbnMpIHtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgZXh0ZW5kU2VsZWN0aW9uc0J5OiBkb2NNZXRob2RPcChmdW5jdGlvbihmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgaGVhZHMgPSBtYXAodGhpcy5zZWwucmFuZ2VzLCBmKTtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgc2V0U2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7IG91dFtpXSA9IG5ldyBSYW5nZShjbGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5hbmNob3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyh0aGlzLCByYW5nZXNbaV0uaGVhZCkpOyB9XG4gICAgICBpZiAocHJpbWFyeSA9PSBudWxsKSB7IHByaW1hcnkgPSBNYXRoLm1pbihyYW5nZXMubGVuZ3RoIC0gMSwgdGhpcy5zZWwucHJpbUluZGV4KTsgfVxuICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIG5vcm1hbGl6ZVNlbGVjdGlvbih0aGlzLmNtLCBvdXQsIHByaW1hcnkpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBhZGRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykge1xuICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICAgIHJhbmdlcy5wdXNoKG5ldyBSYW5nZShjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNsaXBQb3ModGhpcywgaGVhZCB8fCBhbmNob3IpKSk7XG4gICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKHRoaXMuY20sIHJhbmdlcywgcmFuZ2VzLmxlbmd0aCAtIDEpLCBvcHRpb25zKTtcbiAgICB9KSxcblxuICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24obGluZVNlcCkge1xuICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcywgbGluZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gICAgICAgIGxpbmVzID0gbGluZXMgPyBsaW5lcy5jb25jYXQoc2VsKSA6IHNlbDtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgeyByZXR1cm4gbGluZXMgfVxuICAgICAgZWxzZSB7IHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpIH1cbiAgICB9LFxuICAgIGdldFNlbGVjdGlvbnM6IGZ1bmN0aW9uKGxpbmVTZXApIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdLCByYW5nZXMgPSB0aGlzLnNlbC5yYW5nZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gICAgICAgIGlmIChsaW5lU2VwICE9PSBmYWxzZSkgeyBzZWwgPSBzZWwuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTsgfVxuICAgICAgICBwYXJ0c1tpXSA9IHNlbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJ0c1xuICAgIH0sXG4gICAgcmVwbGFjZVNlbGVjdGlvbjogZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikge1xuICAgICAgdmFyIGR1cCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgZHVwW2ldID0gY29kZTsgfVxuICAgICAgdGhpcy5yZXBsYWNlU2VsZWN0aW9ucyhkdXAsIGNvbGxhcHNlLCBvcmlnaW4gfHwgXCIraW5wdXRcIik7XG4gICAgfSxcbiAgICByZXBsYWNlU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikge1xuICAgICAgdmFyIGNoYW5nZXMgPSBbXSwgc2VsID0gdGhpcy5zZWw7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICAgICAgY2hhbmdlc1tpXSA9IHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpLCB0ZXh0OiB0aGlzLnNwbGl0TGluZXMoY29kZVtpXSksIG9yaWdpbjogb3JpZ2lufTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSBcImVuZFwiICYmIGNvbXB1dGVSZXBsYWNlZFNlbCh0aGlzLCBjaGFuZ2VzLCBjb2xsYXBzZSk7XG4gICAgICBmb3IgKHZhciBpJDEgPSBjaGFuZ2VzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSlcbiAgICAgICAgeyBtYWtlQ2hhbmdlKHRoaXMsIGNoYW5nZXNbaSQxXSk7IH1cbiAgICAgIGlmIChuZXdTZWwpIHsgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkodGhpcywgbmV3U2VsKTsgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jbSkgeyBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMuY20pOyB9XG4gICAgfSksXG4gICAgdW5kbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsIFwidW5kb1wiKTt9KSxcbiAgICByZWRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJyZWRvXCIpO30pLFxuICAgIHVuZG9TZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCBcInVuZG9cIiwgdHJ1ZSk7fSksXG4gICAgcmVkb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsIFwicmVkb1wiLCB0cnVlKTt9KSxcblxuICAgIHNldEV4dGVuZGluZzogZnVuY3Rpb24odmFsKSB7dGhpcy5leHRlbmQgPSB2YWw7fSxcbiAgICBnZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmV4dGVuZH0sXG5cbiAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSwgZG9uZSA9IDAsIHVuZG9uZSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpc3QuZG9uZS5sZW5ndGg7IGkrKykgeyBpZiAoIWhpc3QuZG9uZVtpXS5yYW5nZXMpIHsgKytkb25lOyB9IH1cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGhpc3QudW5kb25lLmxlbmd0aDsgaSQxKyspIHsgaWYgKCFoaXN0LnVuZG9uZVtpJDFdLnJhbmdlcykgeyArK3VuZG9uZTsgfSB9XG4gICAgICByZXR1cm4ge3VuZG86IGRvbmUsIHJlZG86IHVuZG9uZX1cbiAgICB9LFxuICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO1xuICAgICAgbGlua2VkRG9jcyh0aGlzLCBmdW5jdGlvbiAoZG9jKSB7IHJldHVybiBkb2MuaGlzdG9yeSA9IHRoaXMkMS5oaXN0b3J5OyB9LCB0cnVlKTtcbiAgICB9LFxuXG4gICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKHRydWUpO1xuICAgIH0sXG4gICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oZm9yY2VTcGxpdCkge1xuICAgICAgaWYgKGZvcmNlU3BsaXQpXG4gICAgICAgIHsgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0U2VsT3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7IH1cbiAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvblxuICAgIH0sXG4gICAgaXNDbGVhbjogZnVuY3Rpb24gKGdlbikge1xuICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uID09IChnZW4gfHwgdGhpcy5jbGVhbkdlbmVyYXRpb24pXG4gICAgfSxcblxuICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtkb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSxcbiAgICAgICAgICAgICAgdW5kb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfVxuICAgIH0sXG4gICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHtcbiAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO1xuICAgICAgaGlzdC5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVlKTtcbiAgICAgIGhpc3QudW5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS51bmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpO1xuICAgIH0sXG5cbiAgICBzZXRHdXR0ZXJNYXJrZXI6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGd1dHRlcklELCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgbGluZSwgXCJndXR0ZXJcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTtcbiAgICAgICAgbWFya2Vyc1tndXR0ZXJJRF0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiBpc0VtcHR5KG1hcmtlcnMpKSB7IGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSksXG5cbiAgICBjbGVhckd1dHRlcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7XG4gICAgICAgICAgY2hhbmdlTGluZSh0aGlzJDEsIGxpbmUsIFwiZ3V0dGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0gPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgeyBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsOyB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcblxuICAgIGxpbmVJbmZvOiBmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgbjtcbiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGlmICghaXNMaW5lKHRoaXMsIGxpbmUpKSB7IHJldHVybiBudWxsIH1cbiAgICAgICAgbiA9IGxpbmU7XG4gICAgICAgIGxpbmUgPSBnZXRMaW5lKHRoaXMsIGxpbmUpO1xuICAgICAgICBpZiAoIWxpbmUpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IGxpbmVObyhsaW5lKTtcbiAgICAgICAgaWYgKG4gPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1dHRlck1hcmtlcnMsXG4gICAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJnQ2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcyxcbiAgICAgICAgICAgICAgd2lkZ2V0czogbGluZS53aWRnZXRzfVxuICAgIH0sXG5cbiAgICBhZGRMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykge1xuICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJcIiA6IFwiY2xhc3NcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSBcInRleHRcIiA/IFwidGV4dENsYXNzXCJcbiAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImJhY2tncm91bmRcIiA/IFwiYmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyQ2xhc3NcIiA6IFwid3JhcENsYXNzXCI7XG4gICAgICAgIGlmICghbGluZVtwcm9wXSkgeyBsaW5lW3Byb3BdID0gY2xzOyB9XG4gICAgICAgIGVsc2UgaWYgKGNsYXNzVGVzdChjbHMpLnRlc3QobGluZVtwcm9wXSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgZWxzZSB7IGxpbmVbcHJvcF0gKz0gXCIgXCIgKyBjbHM7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSksXG4gICAgcmVtb3ZlTGluZUNsYXNzOiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHtcbiAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyXCIgOiBcImNsYXNzXCIsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gXCJ0ZXh0XCIgPyBcInRleHRDbGFzc1wiXG4gICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gXCJiYWNrZ3JvdW5kXCIgPyBcImJnQ2xhc3NcIlxuICAgICAgICAgICAgICAgICA6IHdoZXJlID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlckNsYXNzXCIgOiBcIndyYXBDbGFzc1wiO1xuICAgICAgICB2YXIgY3VyID0gbGluZVtwcm9wXTtcbiAgICAgICAgaWYgKCFjdXIpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwpIHsgbGluZVtwcm9wXSA9IG51bGw7IH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gY3VyLm1hdGNoKGNsYXNzVGVzdChjbHMpKTtcbiAgICAgICAgICBpZiAoIWZvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgdmFyIGVuZCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoO1xuICAgICAgICAgIGxpbmVbcHJvcF0gPSBjdXIuc2xpY2UoMCwgZm91bmQuaW5kZXgpICsgKCFmb3VuZC5pbmRleCB8fCBlbmQgPT0gY3VyLmxlbmd0aCA/IFwiXCIgOiBcIiBcIikgKyBjdXIuc2xpY2UoZW5kKSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH0pLFxuXG4gICAgYWRkTGluZVdpZGdldDogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYWRkTGluZVdpZGdldCh0aGlzLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpXG4gICAgfSksXG4gICAgcmVtb3ZlTGluZVdpZGdldDogZnVuY3Rpb24od2lkZ2V0KSB7IHdpZGdldC5jbGVhcigpOyB9LFxuXG4gICAgbWFya1RleHQ6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbWFya1RleHQodGhpcywgY2xpcFBvcyh0aGlzLCBmcm9tKSwgY2xpcFBvcyh0aGlzLCB0byksIG9wdGlvbnMsIG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlIHx8IFwicmFuZ2VcIilcbiAgICB9LFxuICAgIHNldEJvb2ttYXJrOiBmdW5jdGlvbihwb3MsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAmJiBvcHRpb25zLmluc2VydExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IGZhbHNlLCBzaGFyZWQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50c307XG4gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7XG4gICAgICByZXR1cm4gbWFya1RleHQodGhpcywgcG9zLCBwb3MsIHJlYWxPcHRzLCBcImJvb2ttYXJrXCIpXG4gICAgfSxcbiAgICBmaW5kTWFya3NBdDogZnVuY3Rpb24ocG9zKSB7XG4gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7XG4gICAgICB2YXIgbWFya2VycyA9IFtdLCBzcGFucyA9IGdldExpbmUodGhpcywgcG9zLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgICAgaWYgKHNwYW5zKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgICAgaWYgKChzcGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJlxuICAgICAgICAgICAgKHNwYW4udG8gPT0gbnVsbCB8fCBzcGFuLnRvID49IHBvcy5jaCkpXG4gICAgICAgICAgeyBtYXJrZXJzLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsgfVxuICAgICAgfSB9XG4gICAgICByZXR1cm4gbWFya2Vyc1xuICAgIH0sXG4gICAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmlsdGVyKSB7XG4gICAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKTsgdG8gPSBjbGlwUG9zKHRoaXMsIHRvKTtcbiAgICAgIHZhciBmb3VuZCA9IFtdLCBsaW5lTm8gPSBmcm9tLmxpbmU7XG4gICAgICB0aGlzLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucztcbiAgICAgICAgaWYgKHNwYW5zKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICAgIGlmICghKHNwYW4udG8gIT0gbnVsbCAmJiBsaW5lTm8gPT0gZnJvbS5saW5lICYmIGZyb20uY2ggPj0gc3Bhbi50byB8fFxuICAgICAgICAgICAgICAgIHNwYW4uZnJvbSA9PSBudWxsICYmIGxpbmVObyAhPSBmcm9tLmxpbmUgfHxcbiAgICAgICAgICAgICAgICBzcGFuLmZyb20gIT0gbnVsbCAmJiBsaW5lTm8gPT0gdG8ubGluZSAmJiBzcGFuLmZyb20gPj0gdG8uY2gpICYmXG4gICAgICAgICAgICAgICghZmlsdGVyIHx8IGZpbHRlcihzcGFuLm1hcmtlcikpKVxuICAgICAgICAgICAgeyBmb3VuZC5wdXNoKHNwYW4ubWFya2VyLnBhcmVudCB8fCBzcGFuLm1hcmtlcik7IH1cbiAgICAgICAgfSB9XG4gICAgICAgICsrbGluZU5vO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm91bmRcbiAgICB9LFxuICAgIGdldEFsbE1hcmtzOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtYXJrZXJzID0gW107XG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHNwcyA9IGxpbmUubWFya2VkU3BhbnM7XG4gICAgICAgIGlmIChzcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgeyBpZiAoc3BzW2ldLmZyb20gIT0gbnVsbCkgeyBtYXJrZXJzLnB1c2goc3BzW2ldLm1hcmtlcik7IH0gfSB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtYXJrZXJzXG4gICAgfSxcblxuICAgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24ob2ZmKSB7XG4gICAgICB2YXIgY2gsIGxpbmVObyA9IHRoaXMuZmlyc3QsIHNlcFNpemUgPSB0aGlzLmxpbmVTZXBhcmF0b3IoKS5sZW5ndGg7XG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHN6ID0gbGluZS50ZXh0Lmxlbmd0aCArIHNlcFNpemU7XG4gICAgICAgIGlmIChzeiA+IG9mZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWUgfVxuICAgICAgICBvZmYgLT0gc3o7XG4gICAgICAgICsrbGluZU5vO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2xpcFBvcyh0aGlzLCBQb3MobGluZU5vLCBjaCkpXG4gICAgfSxcbiAgICBpbmRleEZyb21Qb3M6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgIGNvb3JkcyA9IGNsaXBQb3ModGhpcywgY29vcmRzKTtcbiAgICAgIHZhciBpbmRleCA9IGNvb3Jkcy5jaDtcbiAgICAgIGlmIChjb29yZHMubGluZSA8IHRoaXMuZmlyc3QgfHwgY29vcmRzLmNoIDwgMCkgeyByZXR1cm4gMCB9XG4gICAgICB2YXIgc2VwU2l6ZSA9IHRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtcbiAgICAgIHRoaXMuaXRlcih0aGlzLmZpcnN0LCBjb29yZHMubGluZSwgZnVuY3Rpb24gKGxpbmUpIHsgLy8gaXRlciBhYm9ydHMgd2hlbiBjYWxsYmFjayByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlXG4gICAgICAgIGluZGV4ICs9IGxpbmUudGV4dC5sZW5ndGggKyBzZXBTaXplO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5kZXhcbiAgICB9LFxuXG4gICAgY29weTogZnVuY3Rpb24oY29weUhpc3RvcnkpIHtcbiAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlT3B0aW9uLCB0aGlzLmZpcnN0LCB0aGlzLmxpbmVTZXAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICAgIGRvYy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDsgZG9jLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7XG4gICAgICBkb2Muc2VsID0gdGhpcy5zZWw7XG4gICAgICBkb2MuZXh0ZW5kID0gZmFsc2U7XG4gICAgICBpZiAoY29weUhpc3RvcnkpIHtcbiAgICAgICAgZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdGhpcy5oaXN0b3J5LnVuZG9EZXB0aDtcbiAgICAgICAgZG9jLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvY1xuICAgIH0sXG5cbiAgICBsaW5rZWREb2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucykgeyBvcHRpb25zID0ge307IH1cbiAgICAgIHZhciBmcm9tID0gdGhpcy5maXJzdCwgdG8gPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplO1xuICAgICAgaWYgKG9wdGlvbnMuZnJvbSAhPSBudWxsICYmIG9wdGlvbnMuZnJvbSA+IGZyb20pIHsgZnJvbSA9IG9wdGlvbnMuZnJvbTsgfVxuICAgICAgaWYgKG9wdGlvbnMudG8gIT0gbnVsbCAmJiBvcHRpb25zLnRvIDwgdG8pIHsgdG8gPSBvcHRpb25zLnRvOyB9XG4gICAgICB2YXIgY29weSA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlT3B0aW9uLCBmcm9tLCB0aGlzLmxpbmVTZXAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIHsgY29weS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5XG4gICAgICA7IH0odGhpcy5saW5rZWQgfHwgKHRoaXMubGlua2VkID0gW10pKS5wdXNoKHtkb2M6IGNvcHksIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH0pO1xuICAgICAgY29weS5saW5rZWQgPSBbe2RvYzogdGhpcywgaXNQYXJlbnQ6IHRydWUsIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH1dO1xuICAgICAgY29weVNoYXJlZE1hcmtlcnMoY29weSwgZmluZFNoYXJlZE1hcmtlcnModGhpcykpO1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuICAgIHVubGlua0RvYzogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIENvZGVNaXJyb3IpIHsgb3RoZXIgPSBvdGhlci5kb2M7IH1cbiAgICAgIGlmICh0aGlzLmxpbmtlZCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlua2VkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBsaW5rID0gdGhpcy5saW5rZWRbaV07XG4gICAgICAgIGlmIChsaW5rLmRvYyAhPSBvdGhlcikgeyBjb250aW51ZSB9XG4gICAgICAgIHRoaXMubGlua2VkLnNwbGljZShpLCAxKTtcbiAgICAgICAgb3RoZXIudW5saW5rRG9jKHRoaXMpO1xuICAgICAgICBkZXRhY2hTaGFyZWRNYXJrZXJzKGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gfVxuICAgICAgLy8gSWYgdGhlIGhpc3RvcmllcyB3ZXJlIHNoYXJlZCwgc3BsaXQgdGhlbSBhZ2FpblxuICAgICAgaWYgKG90aGVyLmhpc3RvcnkgPT0gdGhpcy5oaXN0b3J5KSB7XG4gICAgICAgIHZhciBzcGxpdElkcyA9IFtvdGhlci5pZF07XG4gICAgICAgIGxpbmtlZERvY3Mob3RoZXIsIGZ1bmN0aW9uIChkb2MpIHsgcmV0dXJuIHNwbGl0SWRzLnB1c2goZG9jLmlkKTsgfSwgdHJ1ZSk7XG4gICAgICAgIG90aGVyLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTtcbiAgICAgICAgb3RoZXIuaGlzdG9yeS5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSwgc3BsaXRJZHMpO1xuICAgICAgICBvdGhlci5oaXN0b3J5LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSwgc3BsaXRJZHMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXRlckxpbmtlZERvY3M6IGZ1bmN0aW9uKGYpIHtsaW5rZWREb2NzKHRoaXMsIGYpO30sXG5cbiAgICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlfSxcbiAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtfSxcblxuICAgIHNwbGl0TGluZXM6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgaWYgKHRoaXMubGluZVNlcCkgeyByZXR1cm4gc3RyLnNwbGl0KHRoaXMubGluZVNlcCkgfVxuICAgICAgcmV0dXJuIHNwbGl0TGluZXNBdXRvKHN0cilcbiAgICB9LFxuICAgIGxpbmVTZXBhcmF0b3I6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lU2VwIHx8IFwiXFxuXCIgfSxcblxuICAgIHNldERpcmVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24gKGRpcikge1xuICAgICAgaWYgKGRpciAhPSBcInJ0bFwiKSB7IGRpciA9IFwibHRyXCI7IH1cbiAgICAgIGlmIChkaXIgPT0gdGhpcy5kaXJlY3Rpb24pIHsgcmV0dXJuIH1cbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyO1xuICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7IHJldHVybiBsaW5lLm9yZGVyID0gbnVsbDsgfSk7XG4gICAgICBpZiAodGhpcy5jbSkgeyBkaXJlY3Rpb25DaGFuZ2VkKHRoaXMuY20pOyB9XG4gICAgfSlcbiAgfSk7XG5cbiAgLy8gUHVibGljIGFsaWFzLlxuICBEb2MucHJvdG90eXBlLmVhY2hMaW5lID0gRG9jLnByb3RvdHlwZS5pdGVyO1xuXG4gIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCBzdHJhbmdlIElFIGJlaGF2aW9yIHdoZXJlIGl0J2xsIHNvbWV0aW1lc1xuICAvLyByZS1maXJlIGEgc2VyaWVzIG9mIGRyYWctcmVsYXRlZCBldmVudHMgcmlnaHQgYWZ0ZXIgdGhlIGRyb3AgKCMxNTUxKVxuICB2YXIgbGFzdERyb3AgPSAwO1xuXG4gIGZ1bmN0aW9uIG9uRHJvcChlKSB7XG4gICAgdmFyIGNtID0gdGhpcztcbiAgICBjbGVhckRyYWdDdXJzb3IoY20pO1xuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSlcbiAgICAgIHsgcmV0dXJuIH1cbiAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgIGlmIChpZSkgeyBsYXN0RHJvcCA9ICtuZXcgRGF0ZTsgfVxuICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzO1xuICAgIGlmICghcG9zIHx8IGNtLmlzUmVhZE9ubHkoKSkgeyByZXR1cm4gfVxuICAgIC8vIE1pZ2h0IGJlIGEgZmlsZSBkcm9wLCBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBleHRyYWN0IHRoZSB0ZXh0XG4gICAgLy8gYW5kIGluc2VydCBpdC5cbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7XG4gICAgICB2YXIgbiA9IGZpbGVzLmxlbmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDtcbiAgICAgIHZhciBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7XG4gICAgICAgICAgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwb3MgPSBjbGlwUG9zKGNtLmRvYywgcG9zKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSB7ZnJvbTogcG9zLCB0bzogcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjbS5kb2Muc3BsaXRMaW5lcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0ICE9IG51bGw7IH0pLmpvaW4oY20uZG9jLmxpbmVTZXBhcmF0b3IoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFwicGFzdGVcIn07XG4gICAgICAgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKGNsaXBQb3MoY20uZG9jLCBwb3MpLCBjbGlwUG9zKGNtLmRvYywgY2hhbmdlRW5kKGNoYW5nZSkpKSk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciByZWFkVGV4dEZyb21GaWxlID0gZnVuY3Rpb24gKGZpbGUsIGkpIHtcbiAgICAgICAgaWYgKGNtLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzICYmXG4gICAgICAgICAgICBpbmRleE9mKGNtLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzLCBmaWxlLnR5cGUpID09IC0xKSB7XG4gICAgICAgICAgbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTsgfTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgY29udGVudCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgICAgaWYgKC9bXFx4MDAtXFx4MDhcXHgwZS1cXHgxZl17Mn0vLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgIG1hcmtBc1JlYWRBbmRQYXN0ZUlmQWxsRmlsZXNBcmVSZWFkKCk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dFtpXSA9IGNvbnRlbnQ7XG4gICAgICAgICAgbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgICB9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgeyByZWFkVGV4dEZyb21GaWxlKGZpbGVzW2ldLCBpKTsgfVxuICAgIH0gZWxzZSB7IC8vIE5vcm1hbCBkcm9wXG4gICAgICAvLyBEb24ndCBkbyBhIHJlcGxhY2UgaWYgdGhlIGRyb3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LlxuICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPiAtMSkge1xuICAgICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQoZSk7XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgZWRpdG9yIGlzIHJlLWZvY3VzZWRcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIwKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdGV4dCQxID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcIlRleHRcIik7XG4gICAgICAgIGlmICh0ZXh0JDEpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWQ7XG4gICAgICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhY20uc3RhdGUuZHJhZ2dpbmdUZXh0LmNvcHkpXG4gICAgICAgICAgICB7IHNlbGVjdGVkID0gY20ubGlzdFNlbGVjdGlvbnMoKTsgfVxuICAgICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBvcykpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZCkgeyBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSQxKVxuICAgICAgICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCBcIlwiLCBzZWxlY3RlZFtpJDFdLmFuY2hvciwgc2VsZWN0ZWRbaSQxXS5oZWFkLCBcImRyYWdcIik7IH0gfVxuICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCQxLCBcImFyb3VuZFwiLCBcInBhc3RlXCIpO1xuICAgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2F0Y2goZSl7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7XG4gICAgaWYgKGllICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0b3AoZSk7IHJldHVybiB9XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSB7IHJldHVybiB9XG5cbiAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKFwiVGV4dFwiLCBjbS5nZXRTZWxlY3Rpb24oKSk7XG4gICAgZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwiY29weU1vdmVcIjtcblxuICAgIC8vIFVzZSBkdW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuXG4gICAgLy8gUmVjZW50IFNhZmFyaSAofjYuMC4yKSBoYXZlIGEgdGVuZGVuY3kgdG8gc2VnZmF1bHQgd2hlbiB0aGlzIGhhcHBlbnMsIHNvIHdlIGRvbid0IGRvIGl0IHRoZXJlLlxuICAgIGlmIChlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UgJiYgIXNhZmFyaSkge1xuICAgICAgdmFyIGltZyA9IGVsdChcImltZ1wiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwO1wiKTtcbiAgICAgIGltZy5zcmMgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09XCI7XG4gICAgICBpZiAocHJlc3RvKSB7XG4gICAgICAgIGltZy53aWR0aCA9IGltZy5oZWlnaHQgPSAxO1xuICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgLy8gRm9yY2UgYSByZWxheW91dCwgb3IgT3BlcmEgd29uJ3QgdXNlIG91ciBpbWFnZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvblxuICAgICAgICBpbWcuX3RvcCA9IGltZy5vZmZzZXRUb3A7XG4gICAgICB9XG4gICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTtcbiAgICAgIGlmIChwcmVzdG8pIHsgaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRHJhZ092ZXIoY20sIGUpIHtcbiAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKTtcbiAgICBpZiAoIXBvcykgeyByZXR1cm4gfVxuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHBvcywgZnJhZyk7XG4gICAgaWYgKCFjbS5kaXNwbGF5LmRyYWdDdXJzb3IpIHtcbiAgICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY3Vyc29ycyBDb2RlTWlycm9yLWRyYWdjdXJzb3JzXCIpO1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGNtLmRpc3BsYXkuZHJhZ0N1cnNvciwgY20uZGlzcGxheS5jdXJzb3JEaXYpO1xuICAgIH1cbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGZyYWcpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJEcmFnQ3Vyc29yKGNtKSB7XG4gICAgaWYgKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcikge1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoY20uZGlzcGxheS5kcmFnQ3Vyc29yKTtcbiAgICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlc2UgbXVzdCBiZSBoYW5kbGVkIGNhcmVmdWxseSwgYmVjYXVzZSBuYWl2ZWx5IHJlZ2lzdGVyaW5nIGFcbiAgLy8gaGFuZGxlciBmb3IgZWFjaCBlZGl0b3Igd2lsbCBjYXVzZSB0aGUgZWRpdG9ycyB0byBuZXZlciBiZVxuICAvLyBnYXJiYWdlIGNvbGxlY3RlZC5cblxuICBmdW5jdGlvbiBmb3JFYWNoQ29kZU1pcnJvcihmKSB7XG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7IHJldHVybiB9XG4gICAgdmFyIGJ5Q2xhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiQ29kZU1pcnJvclwiKSwgZWRpdG9ycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnlDbGFzcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNtID0gYnlDbGFzc1tpXS5Db2RlTWlycm9yO1xuICAgICAgaWYgKGNtKSB7IGVkaXRvcnMucHVzaChjbSk7IH1cbiAgICB9XG4gICAgaWYgKGVkaXRvcnMubGVuZ3RoKSB7IGVkaXRvcnNbMF0ub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdG9ycy5sZW5ndGg7IGkrKykgeyBmKGVkaXRvcnNbaV0pOyB9XG4gICAgfSk7IH1cbiAgfVxuXG4gIHZhciBnbG9iYWxzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBlbnN1cmVHbG9iYWxIYW5kbGVycygpIHtcbiAgICBpZiAoZ2xvYmFsc1JlZ2lzdGVyZWQpIHsgcmV0dXJuIH1cbiAgICByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCk7XG4gICAgZ2xvYmFsc1JlZ2lzdGVyZWQgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsSGFuZGxlcnMoKSB7XG4gICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMsIHdlIG5lZWQgdG8gcmVmcmVzaCBhY3RpdmUgZWRpdG9ycy5cbiAgICB2YXIgcmVzaXplVGltZXI7XG4gICAgb24od2luZG93LCBcInJlc2l6ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVsbCkgeyByZXNpemVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNpemVUaW1lciA9IG51bGw7XG4gICAgICAgIGZvckVhY2hDb2RlTWlycm9yKG9uUmVzaXplKTtcbiAgICAgIH0sIDEwMCk7IH1cbiAgICB9KTtcbiAgICAvLyBXaGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMsIHdlIHdhbnQgdG8gc2hvdyB0aGUgZWRpdG9yIGFzIGJsdXJyZWRcbiAgICBvbih3aW5kb3csIFwiYmx1clwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmb3JFYWNoQ29kZU1pcnJvcihvbkJsdXIpOyB9KTtcbiAgfVxuICAvLyBDYWxsZWQgd2hlbiB0aGUgd2luZG93IHJlc2l6ZXNcbiAgZnVuY3Rpb24gb25SZXNpemUoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXk7XG4gICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hlcy5cbiAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuICAgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTtcbiAgICBjbS5zZXRTaXplKCk7XG4gIH1cblxuICB2YXIga2V5TmFtZXMgPSB7XG4gICAgMzogXCJQYXVzZVwiLCA4OiBcIkJhY2tzcGFjZVwiLCA5OiBcIlRhYlwiLCAxMzogXCJFbnRlclwiLCAxNjogXCJTaGlmdFwiLCAxNzogXCJDdHJsXCIsIDE4OiBcIkFsdFwiLFxuICAgIDE5OiBcIlBhdXNlXCIsIDIwOiBcIkNhcHNMb2NrXCIsIDI3OiBcIkVzY1wiLCAzMjogXCJTcGFjZVwiLCAzMzogXCJQYWdlVXBcIiwgMzQ6IFwiUGFnZURvd25cIiwgMzU6IFwiRW5kXCIsXG4gICAgMzY6IFwiSG9tZVwiLCAzNzogXCJMZWZ0XCIsIDM4OiBcIlVwXCIsIDM5OiBcIlJpZ2h0XCIsIDQwOiBcIkRvd25cIiwgNDQ6IFwiUHJpbnRTY3JuXCIsIDQ1OiBcIkluc2VydFwiLFxuICAgIDQ2OiBcIkRlbGV0ZVwiLCA1OTogXCI7XCIsIDYxOiBcIj1cIiwgOTE6IFwiTW9kXCIsIDkyOiBcIk1vZFwiLCA5MzogXCJNb2RcIixcbiAgICAxMDY6IFwiKlwiLCAxMDc6IFwiPVwiLCAxMDk6IFwiLVwiLCAxMTA6IFwiLlwiLCAxMTE6IFwiL1wiLCAxNDU6IFwiU2Nyb2xsTG9ja1wiLFxuICAgIDE3MzogXCItXCIsIDE4NjogXCI7XCIsIDE4NzogXCI9XCIsIDE4ODogXCIsXCIsIDE4OTogXCItXCIsIDE5MDogXCIuXCIsIDE5MTogXCIvXCIsIDE5MjogXCJgXCIsIDIxOTogXCJbXCIsIDIyMDogXCJcXFxcXCIsXG4gICAgMjIxOiBcIl1cIiwgMjIyOiBcIidcIiwgNjMyMzI6IFwiVXBcIiwgNjMyMzM6IFwiRG93blwiLCA2MzIzNDogXCJMZWZ0XCIsIDYzMjM1OiBcIlJpZ2h0XCIsIDYzMjcyOiBcIkRlbGV0ZVwiLFxuICAgIDYzMjczOiBcIkhvbWVcIiwgNjMyNzU6IFwiRW5kXCIsIDYzMjc2OiBcIlBhZ2VVcFwiLCA2MzI3NzogXCJQYWdlRG93blwiLCA2MzMwMjogXCJJbnNlcnRcIlxuICB9O1xuXG4gIC8vIE51bWJlciBrZXlzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeyBrZXlOYW1lc1tpICsgNDhdID0ga2V5TmFtZXNbaSArIDk2XSA9IFN0cmluZyhpKTsgfVxuICAvLyBBbHBoYWJldGljIGtleXNcbiAgZm9yICh2YXIgaSQxID0gNjU7IGkkMSA8PSA5MDsgaSQxKyspIHsga2V5TmFtZXNbaSQxXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSQxKTsgfVxuICAvLyBGdW5jdGlvbiBrZXlzXG4gIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8PSAxMjsgaSQyKyspIHsga2V5TmFtZXNbaSQyICsgMTExXSA9IGtleU5hbWVzW2kkMiArIDYzMjM1XSA9IFwiRlwiICsgaSQyOyB9XG5cbiAgdmFyIGtleU1hcCA9IHt9O1xuXG4gIGtleU1hcC5iYXNpYyA9IHtcbiAgICBcIkxlZnRcIjogXCJnb0NoYXJMZWZ0XCIsIFwiUmlnaHRcIjogXCJnb0NoYXJSaWdodFwiLCBcIlVwXCI6IFwiZ29MaW5lVXBcIiwgXCJEb3duXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiRW5kXCI6IFwiZ29MaW5lRW5kXCIsIFwiSG9tZVwiOiBcImdvTGluZVN0YXJ0U21hcnRcIiwgXCJQYWdlVXBcIjogXCJnb1BhZ2VVcFwiLCBcIlBhZ2VEb3duXCI6IFwiZ29QYWdlRG93blwiLFxuICAgIFwiRGVsZXRlXCI6IFwiZGVsQ2hhckFmdGVyXCIsIFwiQmFja3NwYWNlXCI6IFwiZGVsQ2hhckJlZm9yZVwiLCBcIlNoaWZ0LUJhY2tzcGFjZVwiOiBcImRlbENoYXJCZWZvcmVcIixcbiAgICBcIlRhYlwiOiBcImRlZmF1bHRUYWJcIiwgXCJTaGlmdC1UYWJcIjogXCJpbmRlbnRBdXRvXCIsXG4gICAgXCJFbnRlclwiOiBcIm5ld2xpbmVBbmRJbmRlbnRcIiwgXCJJbnNlcnRcIjogXCJ0b2dnbGVPdmVyd3JpdGVcIixcbiAgICBcIkVzY1wiOiBcInNpbmdsZVNlbGVjdGlvblwiXG4gIH07XG4gIC8vIE5vdGUgdGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5XG4gIC8vIGRlZmF1bHQuIFVzZXIgY29kZSBvciBhZGRvbnMgY2FuIGRlZmluZSB0aGVtLiBVbmtub3duIGNvbW1hbmRzXG4gIC8vIGFyZSBzaW1wbHkgaWdub3JlZC5cbiAga2V5TWFwLnBjRGVmYXVsdCA9IHtcbiAgICBcIkN0cmwtQVwiOiBcInNlbGVjdEFsbFwiLCBcIkN0cmwtRFwiOiBcImRlbGV0ZUxpbmVcIiwgXCJDdHJsLVpcIjogXCJ1bmRvXCIsIFwiU2hpZnQtQ3RybC1aXCI6IFwicmVkb1wiLCBcIkN0cmwtWVwiOiBcInJlZG9cIixcbiAgICBcIkN0cmwtSG9tZVwiOiBcImdvRG9jU3RhcnRcIiwgXCJDdHJsLUVuZFwiOiBcImdvRG9jRW5kXCIsIFwiQ3RybC1VcFwiOiBcImdvTGluZVVwXCIsIFwiQ3RybC1Eb3duXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiQ3RybC1MZWZ0XCI6IFwiZ29Hcm91cExlZnRcIiwgXCJDdHJsLVJpZ2h0XCI6IFwiZ29Hcm91cFJpZ2h0XCIsIFwiQWx0LUxlZnRcIjogXCJnb0xpbmVTdGFydFwiLCBcIkFsdC1SaWdodFwiOiBcImdvTGluZUVuZFwiLFxuICAgIFwiQ3RybC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLCBcIkN0cmwtRGVsZXRlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkN0cmwtU1wiOiBcInNhdmVcIiwgXCJDdHJsLUZcIjogXCJmaW5kXCIsXG4gICAgXCJDdHJsLUdcIjogXCJmaW5kTmV4dFwiLCBcIlNoaWZ0LUN0cmwtR1wiOiBcImZpbmRQcmV2XCIsIFwiU2hpZnQtQ3RybC1GXCI6IFwicmVwbGFjZVwiLCBcIlNoaWZ0LUN0cmwtUlwiOiBcInJlcGxhY2VBbGxcIixcbiAgICBcIkN0cmwtW1wiOiBcImluZGVudExlc3NcIiwgXCJDdHJsLV1cIjogXCJpbmRlbnRNb3JlXCIsXG4gICAgXCJDdHJsLVVcIjogXCJ1bmRvU2VsZWN0aW9uXCIsIFwiU2hpZnQtQ3RybC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLCBcIkFsdC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLFxuICAgIFwiZmFsbHRocm91Z2hcIjogXCJiYXNpY1wiXG4gIH07XG4gIC8vIFZlcnkgYmFzaWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBNYWMuXG4gIGtleU1hcC5lbWFjc3kgPSB7XG4gICAgXCJDdHJsLUZcIjogXCJnb0NoYXJSaWdodFwiLCBcIkN0cmwtQlwiOiBcImdvQ2hhckxlZnRcIiwgXCJDdHJsLVBcIjogXCJnb0xpbmVVcFwiLCBcIkN0cmwtTlwiOiBcImdvTGluZURvd25cIixcbiAgICBcIkFsdC1GXCI6IFwiZ29Xb3JkUmlnaHRcIiwgXCJBbHQtQlwiOiBcImdvV29yZExlZnRcIiwgXCJDdHJsLUFcIjogXCJnb0xpbmVTdGFydFwiLCBcIkN0cmwtRVwiOiBcImdvTGluZUVuZFwiLFxuICAgIFwiQ3RybC1WXCI6IFwiZ29QYWdlRG93blwiLCBcIlNoaWZ0LUN0cmwtVlwiOiBcImdvUGFnZVVwXCIsIFwiQ3RybC1EXCI6IFwiZGVsQ2hhckFmdGVyXCIsIFwiQ3RybC1IXCI6IFwiZGVsQ2hhckJlZm9yZVwiLFxuICAgIFwiQWx0LURcIjogXCJkZWxXb3JkQWZ0ZXJcIiwgXCJBbHQtQmFja3NwYWNlXCI6IFwiZGVsV29yZEJlZm9yZVwiLCBcIkN0cmwtS1wiOiBcImtpbGxMaW5lXCIsIFwiQ3RybC1UXCI6IFwidHJhbnNwb3NlQ2hhcnNcIixcbiAgICBcIkN0cmwtT1wiOiBcIm9wZW5MaW5lXCJcbiAgfTtcbiAga2V5TWFwLm1hY0RlZmF1bHQgPSB7XG4gICAgXCJDbWQtQVwiOiBcInNlbGVjdEFsbFwiLCBcIkNtZC1EXCI6IFwiZGVsZXRlTGluZVwiLCBcIkNtZC1aXCI6IFwidW5kb1wiLCBcIlNoaWZ0LUNtZC1aXCI6IFwicmVkb1wiLCBcIkNtZC1ZXCI6IFwicmVkb1wiLFxuICAgIFwiQ21kLUhvbWVcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ21kLVVwXCI6IFwiZ29Eb2NTdGFydFwiLCBcIkNtZC1FbmRcIjogXCJnb0RvY0VuZFwiLCBcIkNtZC1Eb3duXCI6IFwiZ29Eb2NFbmRcIiwgXCJBbHQtTGVmdFwiOiBcImdvR3JvdXBMZWZ0XCIsXG4gICAgXCJBbHQtUmlnaHRcIjogXCJnb0dyb3VwUmlnaHRcIiwgXCJDbWQtTGVmdFwiOiBcImdvTGluZUxlZnRcIiwgXCJDbWQtUmlnaHRcIjogXCJnb0xpbmVSaWdodFwiLCBcIkFsdC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLFxuICAgIFwiQ3RybC1BbHQtQmFja3NwYWNlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkFsdC1EZWxldGVcIjogXCJkZWxHcm91cEFmdGVyXCIsIFwiQ21kLVNcIjogXCJzYXZlXCIsIFwiQ21kLUZcIjogXCJmaW5kXCIsXG4gICAgXCJDbWQtR1wiOiBcImZpbmROZXh0XCIsIFwiU2hpZnQtQ21kLUdcIjogXCJmaW5kUHJldlwiLCBcIkNtZC1BbHQtRlwiOiBcInJlcGxhY2VcIiwgXCJTaGlmdC1DbWQtQWx0LUZcIjogXCJyZXBsYWNlQWxsXCIsXG4gICAgXCJDbWQtW1wiOiBcImluZGVudExlc3NcIiwgXCJDbWQtXVwiOiBcImluZGVudE1vcmVcIiwgXCJDbWQtQmFja3NwYWNlXCI6IFwiZGVsV3JhcHBlZExpbmVMZWZ0XCIsIFwiQ21kLURlbGV0ZVwiOiBcImRlbFdyYXBwZWRMaW5lUmlnaHRcIixcbiAgICBcIkNtZC1VXCI6IFwidW5kb1NlbGVjdGlvblwiLCBcIlNoaWZ0LUNtZC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLCBcIkN0cmwtVXBcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ3RybC1Eb3duXCI6IFwiZ29Eb2NFbmRcIixcbiAgICBcImZhbGx0aHJvdWdoXCI6IFtcImJhc2ljXCIsIFwiZW1hY3N5XCJdXG4gIH07XG4gIGtleU1hcFtcImRlZmF1bHRcIl0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7XG5cbiAgLy8gS0VZTUFQIERJU1BBVENIXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7XG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgvLSg/ISQpLyk7XG4gICAgbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBhbHQsIGN0cmwsIHNoaWZ0LCBjbWQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIHZhciBtb2QgPSBwYXJ0c1tpXTtcbiAgICAgIGlmICgvXihjbWR8bWV0YXxtKSQvaS50ZXN0KG1vZCkpIHsgY21kID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChtb2QpKSB7IGFsdCA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KG1vZCkpIHsgY3RybCA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKC9ecyhoaWZ0KT8kL2kudGVzdChtb2QpKSB7IHNoaWZ0ID0gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiBcIiArIG1vZCkgfVxuICAgIH1cbiAgICBpZiAoYWx0KSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgICBpZiAoY3RybCkgeyBuYW1lID0gXCJDdHJsLVwiICsgbmFtZTsgfVxuICAgIGlmIChjbWQpIHsgbmFtZSA9IFwiQ21kLVwiICsgbmFtZTsgfVxuICAgIGlmIChzaGlmdCkgeyBuYW1lID0gXCJTaGlmdC1cIiArIG5hbWU7IH1cbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgLy8gVGhpcyBpcyBhIGtsdWRnZSB0byBrZWVwIGtleW1hcHMgbW9zdGx5IHdvcmtpbmcgYXMgcmF3IG9iamVjdHNcbiAgLy8gKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KSB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIHN1cHBvcnQgZmVhdHVyZXNcbiAgLy8gbGlrZSBub3JtYWxpemF0aW9uIGFuZCBtdWx0aS1zdHJva2Uga2V5IGJpbmRpbmdzLiBJdCBjb21waWxlcyBhXG4gIC8vIG5ldyBub3JtYWxpemVkIGtleW1hcCwgYW5kIHRoZW4gdXBkYXRlcyB0aGUgb2xkIG9iamVjdCB0byByZWZsZWN0XG4gIC8vIHRoaXMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleU1hcChrZXltYXApIHtcbiAgICB2YXIgY29weSA9IHt9O1xuICAgIGZvciAodmFyIGtleW5hbWUgaW4ga2V5bWFwKSB7IGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGtleW1hcFtrZXluYW1lXTtcbiAgICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdofChkZXxhdCl0YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIHsgY29udGludWUgfVxuICAgICAgaWYgKHZhbHVlID09IFwiLi4uXCIpIHsgZGVsZXRlIGtleW1hcFtrZXluYW1lXTsgY29udGludWUgfVxuXG4gICAgICB2YXIga2V5cyA9IG1hcChrZXluYW1lLnNwbGl0KFwiIFwiKSwgbm9ybWFsaXplS2V5TmFtZSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbCA9ICh2b2lkIDApLCBuYW1lID0gKHZvaWQgMCk7XG4gICAgICAgIGlmIChpID09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG5hbWUgPSBrZXlzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIHZhbCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiIFwiKTtcbiAgICAgICAgICB2YWwgPSBcIi4uLlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2ID0gY29weVtuYW1lXTtcbiAgICAgICAgaWYgKCFwcmV2KSB7IGNvcHlbbmFtZV0gPSB2YWw7IH1cbiAgICAgICAgZWxzZSBpZiAocHJldiAhPSB2YWwpIHsgdGhyb3cgbmV3IEVycm9yKFwiSW5jb25zaXN0ZW50IGJpbmRpbmdzIGZvciBcIiArIG5hbWUpIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBrZXltYXBba2V5bmFtZV07XG4gICAgfSB9XG4gICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSB7IGtleW1hcFtwcm9wXSA9IGNvcHlbcHJvcF07IH1cbiAgICByZXR1cm4ga2V5bWFwXG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBLZXkoa2V5LCBtYXAsIGhhbmRsZSwgY29udGV4dCkge1xuICAgIG1hcCA9IGdldEtleU1hcChtYXApO1xuICAgIHZhciBmb3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldO1xuICAgIGlmIChmb3VuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIFwibm90aGluZ1wiIH1cbiAgICBpZiAoZm91bmQgPT09IFwiLi4uXCIpIHsgcmV0dXJuIFwibXVsdGlcIiB9XG4gICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgeyByZXR1cm4gXCJoYW5kbGVkXCIgfVxuXG4gICAgaWYgKG1hcC5mYWxsdGhyb3VnaCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtYXAuZmFsbHRocm91Z2gpICE9IFwiW29iamVjdCBBcnJheV1cIilcbiAgICAgICAgeyByZXR1cm4gbG9va3VwS2V5KGtleSwgbWFwLmZhbGx0aHJvdWdoLCBoYW5kbGUsIGNvbnRleHQpIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2hbaV0sIGhhbmRsZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHsgcmV0dXJuIHJlc3VsdCB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGVcbiAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFsbHRocm91Z2guXG4gIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkodmFsdWUpIHtcbiAgICB2YXIgbmFtZSA9IHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiBrZXlOYW1lc1t2YWx1ZS5rZXlDb2RlXTtcbiAgICByZXR1cm4gbmFtZSA9PSBcIkN0cmxcIiB8fCBuYW1lID09IFwiQWx0XCIgfHwgbmFtZSA9PSBcIlNoaWZ0XCIgfHwgbmFtZSA9PSBcIk1vZFwiXG4gIH1cblxuICBmdW5jdGlvbiBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50LCBub1NoaWZ0KSB7XG4gICAgdmFyIGJhc2UgPSBuYW1lO1xuICAgIGlmIChldmVudC5hbHRLZXkgJiYgYmFzZSAhPSBcIkFsdFwiKSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXkpICYmIGJhc2UgIT0gXCJDdHJsXCIpIHsgbmFtZSA9IFwiQ3RybC1cIiArIG5hbWU7IH1cbiAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQuY3RybEtleSA6IGV2ZW50Lm1ldGFLZXkpICYmIGJhc2UgIT0gXCJDbWRcIikgeyBuYW1lID0gXCJDbWQtXCIgKyBuYW1lOyB9XG4gICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGJhc2UgIT0gXCJTaGlmdFwiKSB7IG5hbWUgPSBcIlNoaWZ0LVwiICsgbmFtZTsgfVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEga2V5IGFzIGluZGljYXRlZCBieSBhbiBldmVudCBvYmplY3QuXG4gIGZ1bmN0aW9uIGtleU5hbWUoZXZlbnQsIG5vU2hpZnQpIHtcbiAgICBpZiAocHJlc3RvICYmIGV2ZW50LmtleUNvZGUgPT0gMzQgJiYgZXZlbnRbXCJjaGFyXCJdKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlDb2RlXTtcbiAgICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgLy8gQ3RybC1TY3JvbGxMb2NrIGhhcyBrZXlDb2RlIDMsIHNhbWUgYXMgQ3RybC1QYXVzZSxcbiAgICAvLyBzbyB3ZSdsbCB1c2UgZXZlbnQuY29kZSB3aGVuIGF2YWlsYWJsZSAoQ2hyb21lIDQ4KywgRkYgMzgrLCBTYWZhcmkgMTAuMSspXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMyAmJiBldmVudC5jb2RlKSB7IG5hbWUgPSBldmVudC5jb2RlOyB9XG4gICAgcmV0dXJuIGFkZE1vZGlmaWVyTmFtZXMobmFtZSwgZXZlbnQsIG5vU2hpZnQpXG4gIH1cblxuICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiA/IGtleU1hcFt2YWxdIDogdmFsXG4gIH1cblxuICAvLyBIZWxwZXIgZm9yIGRlbGV0aW5nIHRleHQgbmVhciB0aGUgc2VsZWN0aW9uKHMpLCB1c2VkIHRvIGltcGxlbWVudFxuICAvLyBiYWNrc3BhY2UsIGRlbGV0ZSwgYW5kIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS5cbiAgZnVuY3Rpb24gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgY29tcHV0ZSkge1xuICAgIHZhciByYW5nZXMgPSBjbS5kb2Muc2VsLnJhbmdlcywga2lsbCA9IFtdO1xuICAgIC8vIEJ1aWxkIHVwIGEgc2V0IG9mIHJhbmdlcyB0byBraWxsIGZpcnN0LCBtZXJnaW5nIG92ZXJsYXBwaW5nXG4gICAgLy8gcmFuZ2VzLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9LaWxsID0gY29tcHV0ZShyYW5nZXNbaV0pO1xuICAgICAgd2hpbGUgKGtpbGwubGVuZ3RoICYmIGNtcCh0b0tpbGwuZnJvbSwgbHN0KGtpbGwpLnRvKSA8PSAwKSB7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGtpbGwucG9wKCk7XG4gICAgICAgIGlmIChjbXAocmVwbGFjZWQuZnJvbSwgdG9LaWxsLmZyb20pIDwgMCkge1xuICAgICAgICAgIHRvS2lsbC5mcm9tID0gcmVwbGFjZWQuZnJvbTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBraWxsLnB1c2godG9LaWxsKTtcbiAgICB9XG4gICAgLy8gTmV4dCwgcmVtb3ZlIHRob3NlIGFjdHVhbCByYW5nZXMuXG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IGtpbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHsgcmVwbGFjZVJhbmdlKGNtLmRvYywgXCJcIiwga2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCBcIitkZWxldGVcIik7IH1cbiAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgY2gsIGRpcikge1xuICAgIHZhciB0YXJnZXQgPSBza2lwRXh0ZW5kaW5nQ2hhcnMobGluZS50ZXh0LCBjaCArIGRpciwgZGlyKTtcbiAgICByZXR1cm4gdGFyZ2V0IDwgMCB8fCB0YXJnZXQgPiBsaW5lLnRleHQubGVuZ3RoID8gbnVsbCA6IHRhcmdldFxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFydCwgZGlyKSB7XG4gICAgdmFyIGNoID0gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgc3RhcnQuY2gsIGRpcik7XG4gICAgcmV0dXJuIGNoID09IG51bGwgPyBudWxsIDogbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgZGlyIDwgMCA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCIpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRPZkxpbmUodmlzdWFsbHksIGNtLCBsaW5lT2JqLCBsaW5lTm8sIGRpcikge1xuICAgIGlmICh2aXN1YWxseSkge1xuICAgICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIikgeyBkaXIgPSAtZGlyOyB9XG4gICAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lT2JqLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICB2YXIgcGFydCA9IGRpciA8IDAgPyBsc3Qob3JkZXIpIDogb3JkZXJbMF07XG4gICAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSk7XG4gICAgICAgIHZhciBzdGlja3kgPSBtb3ZlSW5TdG9yYWdlT3JkZXIgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgICAgICB2YXIgY2g7XG4gICAgICAgIC8vIFdpdGggYSB3cmFwcGVkIHJ0bCBjaHVuayAocG9zc2libHkgc3Bhbm5pbmcgbXVsdGlwbGUgYmlkaSBwYXJ0cyksXG4gICAgICAgIC8vIGl0IGNvdWxkIGJlIHRoYXQgdGhlIGxhc3QgYmlkaSBwYXJ0IGlzIG5vdCBvbiB0aGUgbGFzdCB2aXN1YWwgbGluZSxcbiAgICAgICAgLy8gc2luY2UgdmlzdWFsIGxpbmVzIGNvbnRhaW4gY29udGVudCBvcmRlci1jb25zZWN1dGl2ZSBjaHVua3MuXG4gICAgICAgIC8vIFRodXMsIGluIHJ0bCwgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCAoY29udGVudC1vcmRlcikgY2hhcmFjdGVyXG4gICAgICAgIC8vIGluIHRoZSBydGwgY2h1bmsgdGhhdCBpcyBvbiB0aGUgbGFzdCBsaW5lICh0aGF0IGlzLCB0aGUgc2FtZSBsaW5lXG4gICAgICAgIC8vIGFzIHRoZSBsYXN0IChjb250ZW50LW9yZGVyKSBjaGFyYWN0ZXIpLlxuICAgICAgICBpZiAocGFydC5sZXZlbCA+IDAgfHwgY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiKSB7XG4gICAgICAgICAgdmFyIHByZXAgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopO1xuICAgICAgICAgIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgICB2YXIgdGFyZ2V0VG9wID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcCwgY2gpLnRvcDtcbiAgICAgICAgICBjaCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXAsIGNoKS50b3AgPT0gdGFyZ2V0VG9wOyB9LCAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSkgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMSwgY2gpO1xuICAgICAgICAgIGlmIChzdGlja3kgPT0gXCJiZWZvcmVcIikgeyBjaCA9IG1vdmVDaGFyTG9naWNhbGx5KGxpbmVPYmosIGNoLCAxKTsgfVxuICAgICAgICB9IGVsc2UgeyBjaCA9IGRpciA8IDAgPyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9XG4gICAgICAgIHJldHVybiBuZXcgUG9zKGxpbmVObywgY2gsIHN0aWNreSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQb3MobGluZU5vLCBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDAsIGRpciA8IDAgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKVxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZVZpc3VhbGx5KGNtLCBsaW5lLCBzdGFydCwgZGlyKSB7XG4gICAgdmFyIGJpZGkgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgICBpZiAoIWJpZGkpIHsgcmV0dXJuIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpcikgfVxuICAgIGlmIChzdGFydC5jaCA+PSBsaW5lLnRleHQubGVuZ3RoKSB7XG4gICAgICBzdGFydC5jaCA9IGxpbmUudGV4dC5sZW5ndGg7XG4gICAgICBzdGFydC5zdGlja3kgPSBcImJlZm9yZVwiO1xuICAgIH0gZWxzZSBpZiAoc3RhcnQuY2ggPD0gMCkge1xuICAgICAgc3RhcnQuY2ggPSAwO1xuICAgICAgc3RhcnQuc3RpY2t5ID0gXCJhZnRlclwiO1xuICAgIH1cbiAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQoYmlkaSwgc3RhcnQuY2gsIHN0YXJ0LnN0aWNreSksIHBhcnQgPSBiaWRpW3BhcnRQb3NdO1xuICAgIGlmIChjbS5kb2MuZGlyZWN0aW9uID09IFwibHRyXCIgJiYgcGFydC5sZXZlbCAlIDIgPT0gMCAmJiAoZGlyID4gMCA/IHBhcnQudG8gPiBzdGFydC5jaCA6IHBhcnQuZnJvbSA8IHN0YXJ0LmNoKSkge1xuICAgICAgLy8gQ2FzZSAxOiBXZSBtb3ZlIHdpdGhpbiBhbiBsdHIgcGFydCBpbiBhbiBsdHIgZWRpdG9yLiBFdmVuIHdpdGggd3JhcHBlZCBsaW5lcyxcbiAgICAgIC8vIG5vdGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVucy5cbiAgICAgIHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIpXG4gICAgfVxuXG4gICAgdmFyIG12ID0gZnVuY3Rpb24gKHBvcywgZGlyKSB7IHJldHVybiBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBwb3MgaW5zdGFuY2VvZiBQb3MgPyBwb3MuY2ggOiBwb3MsIGRpcik7IH07XG4gICAgdmFyIHByZXA7XG4gICAgdmFyIGdldFdyYXBwZWRMaW5lRXh0ZW50ID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IHJldHVybiB7YmVnaW46IDAsIGVuZDogbGluZS50ZXh0Lmxlbmd0aH0gfVxuICAgICAgcHJlcCA9IHByZXAgfHwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKTtcbiAgICAgIHJldHVybiB3cmFwcGVkTGluZUV4dGVudENoYXIoY20sIGxpbmUsIHByZXAsIGNoKVxuICAgIH07XG4gICAgdmFyIHdyYXBwZWRMaW5lRXh0ZW50ID0gZ2V0V3JhcHBlZExpbmVFeHRlbnQoc3RhcnQuc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBtdihzdGFydCwgLTEpIDogc3RhcnQuY2gpO1xuXG4gICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIiB8fCBwYXJ0LmxldmVsID09IDEpIHtcbiAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAocGFydC5sZXZlbCA9PSAxKSA9PSAoZGlyIDwgMCk7XG4gICAgICB2YXIgY2ggPSBtdihzdGFydCwgbW92ZUluU3RvcmFnZU9yZGVyID8gMSA6IC0xKTtcbiAgICAgIGlmIChjaCAhPSBudWxsICYmICghbW92ZUluU3RvcmFnZU9yZGVyID8gY2ggPj0gcGFydC5mcm9tICYmIGNoID49IHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDogY2ggPD0gcGFydC50byAmJiBjaCA8PSB3cmFwcGVkTGluZUV4dGVudC5lbmQpKSB7XG4gICAgICAgIC8vIENhc2UgMjogV2UgbW92ZSB3aXRoaW4gYW4gcnRsIHBhcnQgb3IgaW4gYW4gcnRsIGVkaXRvciBvbiB0aGUgc2FtZSB2aXN1YWwgbGluZVxuICAgICAgICB2YXIgc3RpY2t5ID0gbW92ZUluU3RvcmFnZU9yZGVyID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIjtcbiAgICAgICAgcmV0dXJuIG5ldyBQb3Moc3RhcnQubGluZSwgY2gsIHN0aWNreSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYXNlIDM6IENvdWxkIG5vdCBtb3ZlIHdpdGhpbiB0aGlzIGJpZGkgcGFydCBpbiB0aGlzIHZpc3VhbCBsaW5lLCBzbyBsZWF2ZVxuICAgIC8vIHRoZSBjdXJyZW50IGJpZGkgcGFydFxuXG4gICAgdmFyIHNlYXJjaEluVmlzdWFsTGluZSA9IGZ1bmN0aW9uIChwYXJ0UG9zLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KSB7XG4gICAgICB2YXIgZ2V0UmVzID0gZnVuY3Rpb24gKGNoLCBtb3ZlSW5TdG9yYWdlT3JkZXIpIHsgcmV0dXJuIG1vdmVJblN0b3JhZ2VPcmRlclxuICAgICAgICA/IG5ldyBQb3Moc3RhcnQubGluZSwgbXYoY2gsIDEpLCBcImJlZm9yZVwiKVxuICAgICAgICA6IG5ldyBQb3Moc3RhcnQubGluZSwgY2gsIFwiYWZ0ZXJcIik7IH07XG5cbiAgICAgIGZvciAoOyBwYXJ0UG9zID49IDAgJiYgcGFydFBvcyA8IGJpZGkubGVuZ3RoOyBwYXJ0UG9zICs9IGRpcikge1xuICAgICAgICB2YXIgcGFydCA9IGJpZGlbcGFydFBvc107XG4gICAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAoZGlyID4gMCkgPT0gKHBhcnQubGV2ZWwgIT0gMSk7XG4gICAgICAgIHZhciBjaCA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDogbXYod3JhcHBlZExpbmVFeHRlbnQuZW5kLCAtMSk7XG4gICAgICAgIGlmIChwYXJ0LmZyb20gPD0gY2ggJiYgY2ggPCBwYXJ0LnRvKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgICBjaCA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IHBhcnQuZnJvbSA6IG12KHBhcnQudG8sIC0xKTtcbiAgICAgICAgaWYgKHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDw9IGNoICYmIGNoIDwgd3JhcHBlZExpbmVFeHRlbnQuZW5kKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDYXNlIDNhOiBMb29rIGZvciBvdGhlciBiaWRpIHBhcnRzIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lXG4gICAgdmFyIHJlcyA9IHNlYXJjaEluVmlzdWFsTGluZShwYXJ0UG9zICsgZGlyLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KTtcbiAgICBpZiAocmVzKSB7IHJldHVybiByZXMgfVxuXG4gICAgLy8gQ2FzZSAzYjogTG9vayBmb3Igb3RoZXIgYmlkaSBwYXJ0cyBvbiB0aGUgbmV4dCB2aXN1YWwgbGluZVxuICAgIHZhciBuZXh0Q2ggPSBkaXIgPiAwID8gd3JhcHBlZExpbmVFeHRlbnQuZW5kIDogbXYod3JhcHBlZExpbmVFeHRlbnQuYmVnaW4sIC0xKTtcbiAgICBpZiAobmV4dENoICE9IG51bGwgJiYgIShkaXIgPiAwICYmIG5leHRDaCA9PSBsaW5lLnRleHQubGVuZ3RoKSkge1xuICAgICAgcmVzID0gc2VhcmNoSW5WaXN1YWxMaW5lKGRpciA+IDAgPyAwIDogYmlkaS5sZW5ndGggLSAxLCBkaXIsIGdldFdyYXBwZWRMaW5lRXh0ZW50KG5leHRDaCkpO1xuICAgICAgaWYgKHJlcykgeyByZXR1cm4gcmVzIH1cbiAgICB9XG5cbiAgICAvLyBDYXNlIDQ6IE5vd2hlcmUgdG8gbW92ZVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDb21tYW5kcyBhcmUgcGFyYW1ldGVyLWxlc3MgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW5cbiAgLy8gZWRpdG9yLCBtb3N0bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuXG4gIHZhciBjb21tYW5kcyA9IHtcbiAgICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcbiAgICBzaW5nbGVTZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uc2V0U2VsZWN0aW9uKGNtLmdldEN1cnNvcihcImFuY2hvclwiKSwgY20uZ2V0Q3Vyc29yKFwiaGVhZFwiKSwgc2VsX2RvbnRTY3JvbGwpOyB9LFxuICAgIGtpbGxMaW5lOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgaWYgKHJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgdmFyIGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9PSBsZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSlcbiAgICAgICAgICB7IHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX0gfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyByZXR1cm4ge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBQb3MocmFuZ2UuaGVhZC5saW5lLCBsZW4pfSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCl9XG4gICAgICB9XG4gICAgfSk7IH0sXG4gICAgZGVsZXRlTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuICh7XG4gICAgICBmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLFxuICAgICAgdG86IGNsaXBQb3MoY20uZG9jLCBQb3MocmFuZ2UudG8oKS5saW5lICsgMSwgMCkpXG4gICAgfSk7IH0pOyB9LFxuICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gKHtcbiAgICAgIGZyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksIHRvOiByYW5nZS5mcm9tKClcbiAgICB9KTsgfSk7IH0sXG4gICAgZGVsV3JhcHBlZExpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIHJldHVybiB7ZnJvbTogbGVmdFBvcywgdG86IHJhbmdlLmZyb20oKX1cbiAgICB9KTsgfSxcbiAgICBkZWxXcmFwcGVkTGluZVJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciByaWdodFBvcyA9IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmlnaHRQb3MgfVxuICAgIH0pOyB9LFxuICAgIHVuZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kbygpOyB9LFxuICAgIHJlZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkbygpOyB9LFxuICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kb1NlbGVjdGlvbigpOyB9LFxuICAgIHJlZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkb1NlbGVjdGlvbigpOyB9LFxuICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpOyB9LFxuICAgIGdvRG9jRW5kOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpOyB9LFxuICAgIGdvTGluZVN0YXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSxcbiAgICAgIHtvcmlnaW46IFwiK21vdmVcIiwgYmlhczogMX1cbiAgICApOyB9LFxuICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpOyB9LFxuICAgICAge29yaWdpbjogXCIrbW92ZVwiLCBiaWFzOiAxfVxuICAgICk7IH0sXG4gICAgZ29MaW5lRW5kOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVFbmQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sXG4gICAgICB7b3JpZ2luOiBcIittb3ZlXCIsIGJpYXM6IC0xfVxuICAgICk7IH0sXG4gICAgZ29MaW5lUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmN1cnNvckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCBcImRpdlwiKVxuICAgIH0sIHNlbF9tb3ZlKTsgfSxcbiAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgIHZhciB0b3AgPSBjbS5jdXJzb3JDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpXG4gICAgfSwgc2VsX21vdmUpOyB9LFxuICAgIGdvTGluZUxlZnRTbWFydDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgdG9wID0gY20uY3Vyc29yQ29vcmRzKHJhbmdlLmhlYWQsIFwiZGl2XCIpLnRvcCArIDU7XG4gICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIGlmIChwb3MuY2ggPCBjbS5nZXRMaW5lKHBvcy5saW5lKS5zZWFyY2goL1xcUy8pKSB7IHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCkgfVxuICAgICAgcmV0dXJuIHBvc1xuICAgIH0sIHNlbF9tb3ZlKTsgfSxcbiAgICBnb0xpbmVVcDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigtMSwgXCJsaW5lXCIpOyB9LFxuICAgIGdvTGluZURvd246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZVYoMSwgXCJsaW5lXCIpOyB9LFxuICAgIGdvUGFnZVVwOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVWKC0xLCBcInBhZ2VcIik7IH0sXG4gICAgZ29QYWdlRG93bjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigxLCBcInBhZ2VcIik7IH0sXG4gICAgZ29DaGFyTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJjaGFyXCIpOyB9LFxuICAgIGdvQ2hhclJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwiY2hhclwiKTsgfSxcbiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoLTEsIFwiY29sdW1uXCIpOyB9LFxuICAgIGdvQ29sdW1uUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoMSwgXCJjb2x1bW5cIik7IH0sXG4gICAgZ29Xb3JkTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJ3b3JkXCIpOyB9LFxuICAgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCBcImdyb3VwXCIpOyB9LFxuICAgIGdvR3JvdXBMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcImdyb3VwXCIpOyB9LFxuICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwid29yZFwiKTsgfSxcbiAgICBkZWxDaGFyQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwiY2hhclwiKTsgfSxcbiAgICBkZWxDaGFyQWZ0ZXI6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgxLCBcImNoYXJcIik7IH0sXG4gICAgZGVsV29yZEJlZm9yZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKC0xLCBcIndvcmRcIik7IH0sXG4gICAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoMSwgXCJ3b3JkXCIpOyB9LFxuICAgIGRlbEdyb3VwQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwiZ3JvdXBcIik7IH0sXG4gICAgZGVsR3JvdXBBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwiZ3JvdXBcIik7IH0sXG4gICAgaW5kZW50QXV0bzogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5pbmRlbnRTZWxlY3Rpb24oXCJzbWFydFwiKTsgfSxcbiAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTsgfSxcbiAgICBpbmRlbnRMZXNzOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcInN1YnRyYWN0XCIpOyB9LFxuICAgIGluc2VydFRhYjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXFx0XCIpOyB9LFxuICAgIGluc2VydFNvZnRUYWI6IGZ1bmN0aW9uIChjbSkge1xuICAgICAgdmFyIHNwYWNlcyA9IFtdLCByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5mcm9tKCk7XG4gICAgICAgIHZhciBjb2wgPSBjb3VudENvbHVtbihjbS5nZXRMaW5lKHBvcy5saW5lKSwgcG9zLmNoLCB0YWJTaXplKTtcbiAgICAgICAgc3BhY2VzLnB1c2goc3BhY2VTdHIodGFiU2l6ZSAtIGNvbCAlIHRhYlNpemUpKTtcbiAgICAgIH1cbiAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNwYWNlcyk7XG4gICAgfSxcbiAgICBkZWZhdWx0VGFiOiBmdW5jdGlvbiAoY20pIHtcbiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IGNtLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTsgfVxuICAgICAgZWxzZSB7IGNtLmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGFiXCIpOyB9XG4gICAgfSxcbiAgICAvLyBTd2FwIHRoZSB0d28gY2hhcnMgbGVmdCBhbmQgcmlnaHQgb2YgZWFjaCBzZWxlY3Rpb24ncyBoZWFkLlxuICAgIC8vIE1vdmUgY3Vyc29yIGJlaGluZCB0aGUgdHdvIHN3YXBwZWQgY2hhcmFjdGVycyBhZnRlcndhcmRzLlxuICAgIC8vXG4gICAgLy8gRG9lc24ndCBjb25zaWRlciBsaW5lIGZlZWRzIGEgY2hhcmFjdGVyLlxuICAgIC8vIERvZXNuJ3Qgc2NhbiBtb3JlIHRoYW4gb25lIGxpbmUgYWJvdmUgdG8gZmluZCBhIGNoYXJhY3Rlci5cbiAgICAvLyBEb2Vzbid0IGRvIGFueXRoaW5nIG9uIGFuIGVtcHR5IGxpbmUuXG4gICAgLy8gRG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIG5vbi1lbXB0eSBzZWxlY3Rpb25zLlxuICAgIHRyYW5zcG9zZUNoYXJzOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCBuZXdTZWwgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHsgY29udGludWUgfVxuICAgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQsIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUpLnRleHQ7XG4gICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgaWYgKGN1ci5jaCA9PSBsaW5lLmxlbmd0aCkgeyBjdXIgPSBuZXcgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKTsgfVxuICAgICAgICAgIGlmIChjdXIuY2ggPiAwKSB7XG4gICAgICAgICAgICBjdXIgPSBuZXcgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKTtcbiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2ggLSAxKSArIGxpbmUuY2hhckF0KGN1ci5jaCAtIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMiksIGN1ciwgXCIrdHJhbnNwb3NlXCIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VyLmxpbmUgPiBjbS5kb2MuZmlyc3QpIHtcbiAgICAgICAgICAgIHZhciBwcmV2ID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lIC0gMSkudGV4dDtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIDEpO1xuICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkgKyBjbS5kb2MubGluZVNlcGFyYXRvcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYuY2hhckF0KHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MoY3VyLmxpbmUgLSAxLCBwcmV2Lmxlbmd0aCAtIDEpLCBjdXIsIFwiK3RyYW5zcG9zZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsLnB1c2gobmV3IFJhbmdlKGN1ciwgY3VyKSk7XG4gICAgICB9XG4gICAgICBjbS5zZXRTZWxlY3Rpb25zKG5ld1NlbCk7XG4gICAgfSk7IH0sXG4gICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VscyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgICBmb3IgKHZhciBpID0gc2Vscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgeyBjbS5yZXBsYWNlUmFuZ2UoY20uZG9jLmxpbmVTZXBhcmF0b3IoKSwgc2Vsc1tpXS5hbmNob3IsIHNlbHNbaV0uaGVhZCwgXCIraW5wdXRcIik7IH1cbiAgICAgIHNlbHMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2Vscy5sZW5ndGg7IGkkMSsrKVxuICAgICAgICB7IGNtLmluZGVudExpbmUoc2Vsc1tpJDFdLmZyb20oKS5saW5lLCBudWxsLCB0cnVlKTsgfVxuICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7XG4gICAgfSk7IH0sXG4gICAgb3BlbkxpbmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVwbGFjZVNlbGVjdGlvbihcIlxcblwiLCBcInN0YXJ0XCIpOyB9LFxuICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS50b2dnbGVPdmVyd3JpdGUoKTsgfVxuICB9O1xuXG5cbiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNtLCBsaW5lTikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTtcbiAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShsaW5lKTtcbiAgICBpZiAodmlzdWFsICE9IGxpbmUpIHsgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsgfVxuICAgIHJldHVybiBlbmRPZkxpbmUodHJ1ZSwgY20sIHZpc3VhbCwgbGluZU4sIDEpXG4gIH1cbiAgZnVuY3Rpb24gbGluZUVuZChjbSwgbGluZU4pIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7XG4gICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmVFbmQobGluZSk7XG4gICAgaWYgKHZpc3VhbCAhPSBsaW5lKSB7IGxpbmVOID0gbGluZU5vKHZpc3VhbCk7IH1cbiAgICByZXR1cm4gZW5kT2ZMaW5lKHRydWUsIGNtLCBsaW5lLCBsaW5lTiwgLTEpXG4gIH1cbiAgZnVuY3Rpb24gbGluZVN0YXJ0U21hcnQoY20sIHBvcykge1xuICAgIHZhciBzdGFydCA9IGxpbmVTdGFydChjbSwgcG9zLmxpbmUpO1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIHN0YXJ0LmxpbmUpO1xuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pO1xuICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkge1xuICAgICAgdmFyIGZpcnN0Tm9uV1MgPSBNYXRoLm1heChzdGFydC5jaCwgbGluZS50ZXh0LnNlYXJjaCgvXFxTLykpO1xuICAgICAgdmFyIGluV1MgPSBwb3MubGluZSA9PSBzdGFydC5saW5lICYmIHBvcy5jaCA8PSBmaXJzdE5vbldTICYmIHBvcy5jaDtcbiAgICAgIHJldHVybiBQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTLCBzdGFydC5zdGlja3kpXG4gICAgfVxuICAgIHJldHVybiBzdGFydFxuICB9XG5cbiAgLy8gUnVuIGEgaGFuZGxlciB0aGF0IHdhcyBib3VuZCB0byBhIGtleS5cbiAgZnVuY3Rpb24gZG9IYW5kbGVCaW5kaW5nKGNtLCBib3VuZCwgZHJvcFNoaWZ0KSB7XG4gICAgaWYgKHR5cGVvZiBib3VuZCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTtcbiAgICAgIGlmICghYm91bmQpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB9XG4gICAgLy8gRW5zdXJlIHByZXZpb3VzIGlucHV0IGhhcyBiZWVuIHJlYWQsIHNvIHRoYXQgdGhlIGhhbmRsZXIgc2VlcyBhXG4gICAgLy8gY29uc2lzdGVudCB2aWV3IG9mIHRoZSBkb2N1bWVudFxuICAgIGNtLmRpc3BsYXkuaW5wdXQuZW5zdXJlUG9sbGVkKCk7XG4gICAgdmFyIHByZXZTaGlmdCA9IGNtLmRpc3BsYXkuc2hpZnQsIGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaWYgKGNtLmlzUmVhZE9ubHkoKSkgeyBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsgfVxuICAgICAgaWYgKGRyb3BTaGlmdCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH1cbiAgICAgIGRvbmUgPSBib3VuZChjbSkgIT0gUGFzcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY20uZGlzcGxheS5zaGlmdCA9IHByZXZTaGlmdDtcbiAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFuZGxlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5zdGF0ZS5rZXlNYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9va3VwS2V5KG5hbWUsIGNtLnN0YXRlLmtleU1hcHNbaV0sIGhhbmRsZSwgY20pO1xuICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0IH1cbiAgICB9XG4gICAgcmV0dXJuIChjbS5vcHRpb25zLmV4dHJhS2V5cyAmJiBsb29rdXBLZXkobmFtZSwgY20ub3B0aW9ucy5leHRyYUtleXMsIGhhbmRsZSwgY20pKVxuICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMua2V5TWFwLCBoYW5kbGUsIGNtKVxuICB9XG5cbiAgLy8gTm90ZSB0aGF0LCBkZXNwaXRlIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB0byBjaGVja1xuICAvLyBmb3IgYm91bmQgbW91c2UgY2xpY2tzLlxuXG4gIHZhciBzdG9wU2VxID0gbmV3IERlbGF5ZWQ7XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGhhbmRsZSkge1xuICAgIHZhciBzZXEgPSBjbS5zdGF0ZS5rZXlTZXE7XG4gICAgaWYgKHNlcSkge1xuICAgICAgaWYgKGlzTW9kaWZpZXJLZXkobmFtZSkpIHsgcmV0dXJuIFwiaGFuZGxlZFwiIH1cbiAgICAgIGlmICgvXFwnJC8udGVzdChuYW1lKSlcbiAgICAgICAgeyBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgc3RvcFNlcS5zZXQoNTAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY20uc3RhdGUua2V5U2VxID09IHNlcSkge1xuICAgICAgICAgICAgY20uc3RhdGUua2V5U2VxID0gbnVsbDtcbiAgICAgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyB9XG4gICAgICBpZiAoZGlzcGF0Y2hLZXlJbm5lcihjbSwgc2VxICsgXCIgXCIgKyBuYW1lLCBlLCBoYW5kbGUpKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoS2V5SW5uZXIoY20sIG5hbWUsIGUsIGhhbmRsZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoS2V5SW5uZXIoY20sIG5hbWUsIGUsIGhhbmRsZSkge1xuICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXlGb3JFZGl0b3IoY20sIG5hbWUsIGhhbmRsZSk7XG5cbiAgICBpZiAocmVzdWx0ID09IFwibXVsdGlcIilcbiAgICAgIHsgY20uc3RhdGUua2V5U2VxID0gbmFtZTsgfVxuICAgIGlmIChyZXN1bHQgPT0gXCJoYW5kbGVkXCIpXG4gICAgICB7IHNpZ25hbExhdGVyKGNtLCBcImtleUhhbmRsZWRcIiwgY20sIG5hbWUsIGUpOyB9XG5cbiAgICBpZiAocmVzdWx0ID09IFwiaGFuZGxlZFwiIHx8IHJlc3VsdCA9PSBcIm11bHRpXCIpIHtcbiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICByZXN0YXJ0QmxpbmsoY20pO1xuICAgIH1cblxuICAgIHJldHVybiAhIXJlc3VsdFxuICB9XG5cbiAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuXG4gIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHtcbiAgICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSk7XG4gICAgaWYgKCFuYW1lKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICBpZiAoZS5zaGlmdEtleSAmJiAhY20uc3RhdGUua2V5U2VxKSB7XG4gICAgICAvLyBGaXJzdCB0cnkgdG8gcmVzb2x2ZSBmdWxsIG5hbWUgKGluY2x1ZGluZyAnU2hpZnQtJykuIEZhaWxpbmdcbiAgICAgIC8vIHRoYXQsIHNlZSBpZiB0aGVyZSBpcyBhIGN1cnNvci1tb3Rpb24gY29tbWFuZCAoc3RhcnRpbmcgd2l0aFxuICAgICAgLy8gJ2dvJykgYm91bmQgdG8gdGhlIGtleW5hbWUgd2l0aG91dCAnU2hpZnQtJy5cbiAgICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgXCJTaGlmdC1cIiArIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KVxuICAgICAgICAgIHx8IGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgPyAvXmdvW0EtWl0vLnRlc3QoYikgOiBiLm1vdGlvbilcbiAgICAgICAgICAgICAgICAgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKSB9XG4gICAgICAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBmdW5jdGlvbiAoYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgYSBrZXkgZnJvbSB0aGUga2V5cHJlc3MgZXZlbnRcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBcIidcIiArIGNoICsgXCInXCIsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KVxuICB9XG5cbiAgdmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbDtcbiAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICB2YXIgY20gPSB0aGlzO1xuICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSAmJiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7XG4gICAgY20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTtcbiAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpO1xuICAgIGlmIChwcmVzdG8pIHtcbiAgICAgIGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsO1xuICAgICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBldmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ib1xuICAgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgIWhhc0NvcHlFdmVudCAmJiAobWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSlcbiAgICAgICAgeyBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpOyB9XG4gICAgfVxuICAgIGlmIChnZWNrbyAmJiAhbWFjICYmICFoYW5kbGVkICYmIGNvZGUgPT0gNDYgJiYgZS5zaGlmdEtleSAmJiAhZS5jdHJsS2V5ICYmIGRvY3VtZW50LmV4ZWNDb21tYW5kKVxuICAgICAgeyBkb2N1bWVudC5leGVjQ29tbWFuZChcImN1dFwiKTsgfVxuXG4gICAgLy8gVHVybiBtb3VzZSBpbnRvIGNyb3NzaGFpciB3aGVuIEFsdCBpcyBoZWxkIG9uIE1hYy5cbiAgICBpZiAoY29kZSA9PSAxOCAmJiAhL1xcYkNvZGVNaXJyb3ItY3Jvc3NoYWlyXFxiLy50ZXN0KGNtLmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUpKVxuICAgICAgeyBzaG93Q3Jvc3NIYWlyKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvd0Nyb3NzSGFpcihjbSkge1xuICAgIHZhciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2O1xuICAgIGFkZENsYXNzKGxpbmVEaXYsIFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIik7XG5cbiAgICBmdW5jdGlvbiB1cChlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09IDE4IHx8ICFlLmFsdEtleSkge1xuICAgICAgICBybUNsYXNzKGxpbmVEaXYsIFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIik7XG4gICAgICAgIG9mZihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gICAgICAgIG9mZihkb2N1bWVudCwgXCJtb3VzZW92ZXJcIiwgdXApO1xuICAgICAgfVxuICAgIH1cbiAgICBvbihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2VvdmVyXCIsIHVwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgIGlmIChlLmtleUNvZGUgPT0gMTYpIHsgdGhpcy5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7IH1cbiAgICBzaWduYWxET01FdmVudCh0aGlzLCBlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkge1xuICAgIHZhciBjbSA9IHRoaXM7XG4gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGUuY3RybEtleSAmJiAhZS5hbHRLZXkgfHwgbWFjICYmIGUubWV0YUtleSkgeyByZXR1cm4gfVxuICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7XG4gICAgaWYgKHByZXN0byAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm59XG4gICAgaWYgKChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSB7IHJldHVybiB9XG4gICAgdmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTtcbiAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUga2V5cHJlc3MgZXZlbnRzIGZvciBiYWNrc3BhY2VcbiAgICBpZiAoY2ggPT0gXCJcXHgwOFwiKSB7IHJldHVybiB9XG4gICAgaWYgKGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkpIHsgcmV0dXJuIH1cbiAgICBjbS5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoZSk7XG4gIH1cblxuICB2YXIgRE9VQkxFQ0xJQ0tfREVMQVkgPSA0MDA7XG5cbiAgdmFyIFBhc3RDbGljayA9IGZ1bmN0aW9uKHRpbWUsIHBvcywgYnV0dG9uKSB7XG4gICAgdGhpcy50aW1lID0gdGltZTtcbiAgICB0aGlzLnBvcyA9IHBvcztcbiAgICB0aGlzLmJ1dHRvbiA9IGJ1dHRvbjtcbiAgfTtcblxuICBQYXN0Q2xpY2sucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAodGltZSwgcG9zLCBidXR0b24pIHtcbiAgICByZXR1cm4gdGhpcy50aW1lICsgRE9VQkxFQ0xJQ0tfREVMQVkgPiB0aW1lICYmXG4gICAgICBjbXAocG9zLCB0aGlzLnBvcykgPT0gMCAmJiBidXR0b24gPT0gdGhpcy5idXR0b25cbiAgfTtcblxuICB2YXIgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7XG4gIGZ1bmN0aW9uIGNsaWNrUmVwZWF0KHBvcywgYnV0dG9uKSB7XG4gICAgdmFyIG5vdyA9ICtuZXcgRGF0ZTtcbiAgICBpZiAobGFzdERvdWJsZUNsaWNrICYmIGxhc3REb3VibGVDbGljay5jb21wYXJlKG5vdywgcG9zLCBidXR0b24pKSB7XG4gICAgICBsYXN0Q2xpY2sgPSBsYXN0RG91YmxlQ2xpY2sgPSBudWxsO1xuICAgICAgcmV0dXJuIFwidHJpcGxlXCJcbiAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2suY29tcGFyZShub3csIHBvcywgYnV0dG9uKSkge1xuICAgICAgbGFzdERvdWJsZUNsaWNrID0gbmV3IFBhc3RDbGljayhub3csIHBvcywgYnV0dG9uKTtcbiAgICAgIGxhc3RDbGljayA9IG51bGw7XG4gICAgICByZXR1cm4gXCJkb3VibGVcIlxuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0Q2xpY2sgPSBuZXcgUGFzdENsaWNrKG5vdywgcG9zLCBidXR0b24pO1xuICAgICAgbGFzdERvdWJsZUNsaWNrID0gbnVsbDtcbiAgICAgIHJldHVybiBcInNpbmdsZVwiXG4gICAgfVxuICB9XG5cbiAgLy8gQSBtb3VzZSBkb3duIGNhbiBiZSBhIHNpbmdsZSBjbGljaywgZG91YmxlIGNsaWNrLCB0cmlwbGUgY2xpY2ssXG4gIC8vIHN0YXJ0IG9mIHNlbGVjdGlvbiBkcmFnLCBzdGFydCBvZiB0ZXh0IGRyYWcsIG5ldyBjdXJzb3JcbiAgLy8gKGN0cmwtY2xpY2spLCByZWN0YW5nbGUgZHJhZyAoYWx0LWRyYWcpLCBvciB4d2luXG4gIC8vIG1pZGRsZS1jbGljay1wYXN0ZS4gT3IgaXQgbWlnaHQgYmUgYSBjbGljayBvbiBzb21ldGhpbmcgd2Ugc2hvdWxkXG4gIC8vIG5vdCBpbnRlcmZlcmUgd2l0aCwgc3VjaCBhcyBhIHNjcm9sbGJhciBvciB3aWRnZXQuXG4gIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGRpc3BsYXkuYWN0aXZlVG91Y2ggJiYgZGlzcGxheS5pbnB1dC5zdXBwb3J0c1RvdWNoKCkpIHsgcmV0dXJuIH1cbiAgICBkaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO1xuICAgIGRpc3BsYXkuc2hpZnQgPSBlLnNoaWZ0S2V5O1xuXG4gICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHtcbiAgICAgIGlmICghd2Via2l0KSB7XG4gICAgICAgIC8vIEJyaWVmbHkgdHVybiBvZmYgZHJhZ2dhYmlsaXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvXG4gICAgICAgIC8vIG5vcm1hbCBkcmFnZ2luZyB0aGluZ3MuXG4gICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOyB9LCAxMDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjbGlja0luR3V0dGVyKGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpLCBidXR0b24gPSBlX2J1dHRvbihlKSwgcmVwZWF0ID0gcG9zID8gY2xpY2tSZXBlYXQocG9zLCBidXR0b24pIDogXCJzaW5nbGVcIjtcbiAgICB3aW5kb3cuZm9jdXMoKTtcblxuICAgIC8vICMzMjYxOiBtYWtlIHN1cmUsIHRoYXQgd2UncmUgbm90IHN0YXJ0aW5nIGEgc2Vjb25kIHNlbGVjdGlvblxuICAgIGlmIChidXR0b24gPT0gMSAmJiBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0KVxuICAgICAgeyBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0KGUpOyB9XG5cbiAgICBpZiAocG9zICYmIGhhbmRsZU1hcHBlZEJ1dHRvbihjbSwgYnV0dG9uLCBwb3MsIHJlcGVhdCwgZSkpIHsgcmV0dXJuIH1cblxuICAgIGlmIChidXR0b24gPT0gMSkge1xuICAgICAgaWYgKHBvcykgeyBsZWZ0QnV0dG9uRG93bihjbSwgcG9zLCByZXBlYXQsIGUpOyB9XG4gICAgICBlbHNlIGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PSAyKSB7XG4gICAgICBpZiAocG9zKSB7IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHBvcyk7IH1cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9LCAyMCk7XG4gICAgfSBlbHNlIGlmIChidXR0b24gPT0gMykge1xuICAgICAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSB7IGNtLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShlKTsgfVxuICAgICAgZWxzZSB7IGRlbGF5Qmx1ckV2ZW50KGNtKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU1hcHBlZEJ1dHRvbihjbSwgYnV0dG9uLCBwb3MsIHJlcGVhdCwgZXZlbnQpIHtcbiAgICB2YXIgbmFtZSA9IFwiQ2xpY2tcIjtcbiAgICBpZiAocmVwZWF0ID09IFwiZG91YmxlXCIpIHsgbmFtZSA9IFwiRG91YmxlXCIgKyBuYW1lOyB9XG4gICAgZWxzZSBpZiAocmVwZWF0ID09IFwidHJpcGxlXCIpIHsgbmFtZSA9IFwiVHJpcGxlXCIgKyBuYW1lOyB9XG4gICAgbmFtZSA9IChidXR0b24gPT0gMSA/IFwiTGVmdFwiIDogYnV0dG9uID09IDIgPyBcIk1pZGRsZVwiIDogXCJSaWdodFwiKSArIG5hbWU7XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sICBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50KSwgZXZlbnQsIGZ1bmN0aW9uIChib3VuZCkge1xuICAgICAgaWYgKHR5cGVvZiBib3VuZCA9PSBcInN0cmluZ1wiKSB7IGJvdW5kID0gY29tbWFuZHNbYm91bmRdOyB9XG4gICAgICBpZiAoIWJvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNtLmlzUmVhZE9ubHkoKSkgeyBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsgfVxuICAgICAgICBkb25lID0gYm91bmQoY20sIHBvcykgIT0gUGFzcztcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb25lXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZU1vdXNlKGNtLCByZXBlYXQsIGV2ZW50KSB7XG4gICAgdmFyIG9wdGlvbiA9IGNtLmdldE9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIpO1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbiA/IG9wdGlvbihjbSwgcmVwZWF0LCBldmVudCkgOiB7fTtcbiAgICBpZiAodmFsdWUudW5pdCA9PSBudWxsKSB7XG4gICAgICB2YXIgcmVjdCA9IGNocm9tZU9TID8gZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQubWV0YUtleSA6IGV2ZW50LmFsdEtleTtcbiAgICAgIHZhbHVlLnVuaXQgPSByZWN0ID8gXCJyZWN0YW5nbGVcIiA6IHJlcGVhdCA9PSBcInNpbmdsZVwiID8gXCJjaGFyXCIgOiByZXBlYXQgPT0gXCJkb3VibGVcIiA/IFwid29yZFwiIDogXCJsaW5lXCI7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5leHRlbmQgPT0gbnVsbCB8fCBjbS5kb2MuZXh0ZW5kKSB7IHZhbHVlLmV4dGVuZCA9IGNtLmRvYy5leHRlbmQgfHwgZXZlbnQuc2hpZnRLZXk7IH1cbiAgICBpZiAodmFsdWUuYWRkTmV3ID09IG51bGwpIHsgdmFsdWUuYWRkTmV3ID0gbWFjID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXk7IH1cbiAgICBpZiAodmFsdWUubW92ZU9uRHJhZyA9PSBudWxsKSB7IHZhbHVlLm1vdmVPbkRyYWcgPSAhKG1hYyA/IGV2ZW50LmFsdEtleSA6IGV2ZW50LmN0cmxLZXkpOyB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0QnV0dG9uRG93bihjbSwgcG9zLCByZXBlYXQsIGV2ZW50KSB7XG4gICAgaWYgKGllKSB7IHNldFRpbWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsgfVxuICAgIGVsc2UgeyBjbS5jdXJPcC5mb2N1cyA9IGFjdGl2ZUVsdCgpOyB9XG5cbiAgICB2YXIgYmVoYXZpb3IgPSBjb25maWd1cmVNb3VzZShjbSwgcmVwZWF0LCBldmVudCk7XG5cbiAgICB2YXIgc2VsID0gY20uZG9jLnNlbCwgY29udGFpbmVkO1xuICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFjbS5pc1JlYWRPbmx5KCkgJiZcbiAgICAgICAgcmVwZWF0ID09IFwic2luZ2xlXCIgJiYgKGNvbnRhaW5lZCA9IHNlbC5jb250YWlucyhwb3MpKSA+IC0xICYmXG4gICAgICAgIChjbXAoKGNvbnRhaW5lZCA9IHNlbC5yYW5nZXNbY29udGFpbmVkXSkuZnJvbSgpLCBwb3MpIDwgMCB8fCBwb3MueFJlbCA+IDApICYmXG4gICAgICAgIChjbXAoY29udGFpbmVkLnRvKCksIHBvcykgPiAwIHx8IHBvcy54UmVsIDwgMCkpXG4gICAgICB7IGxlZnRCdXR0b25TdGFydERyYWcoY20sIGV2ZW50LCBwb3MsIGJlaGF2aW9yKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgbGVmdEJ1dHRvblNlbGVjdChjbSwgZXZlbnQsIHBvcywgYmVoYXZpb3IpOyB9XG4gIH1cblxuICAvLyBTdGFydCBhIHRleHQgZHJhZy4gV2hlbiBpdCBlbmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5XG4gIC8vIGhhcHBlbiwgYW5kIHRyZWF0IGFzIGEgY2xpY2sgaWYgaXQgZGlkbid0LlxuICBmdW5jdGlvbiBsZWZ0QnV0dG9uU3RhcnREcmFnKGNtLCBldmVudCwgcG9zLCBiZWhhdmlvcikge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbW92ZWQgPSBmYWxzZTtcbiAgICB2YXIgZHJhZ0VuZCA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICh3ZWJraXQpIHsgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsgfVxuICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZmFsc2U7XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCBkcmFnRW5kKTtcbiAgICAgIG9mZihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW91c2VNb3ZlKTtcbiAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBkcmFnU3RhcnQpO1xuICAgICAgb2ZmKGRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJvcFwiLCBkcmFnRW5kKTtcbiAgICAgIGlmICghbW92ZWQpIHtcbiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgaWYgKCFiZWhhdmlvci5hZGROZXcpXG4gICAgICAgICAgeyBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBwb3MsIG51bGwsIG51bGwsIGJlaGF2aW9yLmV4dGVuZCk7IH1cbiAgICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJsZSBmb2N1cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJvbWUgKCMzMDgxKVxuICAgICAgICBpZiAod2Via2l0IHx8IGllICYmIGllX3ZlcnNpb24gPT0gOSlcbiAgICAgICAgICB7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge2Rpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmJvZHkuZm9jdXMoKTsgZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgbW91c2VNb3ZlID0gZnVuY3Rpb24oZTIpIHtcbiAgICAgIG1vdmVkID0gbW92ZWQgfHwgTWF0aC5hYnMoZXZlbnQuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIGUyLmNsaWVudFkpID49IDEwO1xuICAgIH07XG4gICAgdmFyIGRyYWdTdGFydCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1vdmVkID0gdHJ1ZTsgfTtcbiAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy5cbiAgICBpZiAod2Via2l0KSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsgfVxuICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGRyYWdFbmQ7XG4gICAgZHJhZ0VuZC5jb3B5ID0gIWJlaGF2aW9yLm1vdmVPbkRyYWc7XG4gICAgLy8gSUUncyBhcHByb2FjaCB0byBkcmFnZ2FibGVcbiAgICBpZiAoZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCkgeyBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7IH1cbiAgICBvbihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZXVwXCIsIGRyYWdFbmQpO1xuICAgIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBtb3VzZU1vdmUpO1xuICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ3N0YXJ0XCIsIGRyYWdTdGFydCk7XG4gICAgb24oZGlzcGxheS5zY3JvbGxlciwgXCJkcm9wXCIsIGRyYWdFbmQpO1xuXG4gICAgZGVsYXlCbHVyRXZlbnQoY20pO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9LCAyMCk7XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZUZvclVuaXQoY20sIHBvcywgdW5pdCkge1xuICAgIGlmICh1bml0ID09IFwiY2hhclwiKSB7IHJldHVybiBuZXcgUmFuZ2UocG9zLCBwb3MpIH1cbiAgICBpZiAodW5pdCA9PSBcIndvcmRcIikgeyByZXR1cm4gY20uZmluZFdvcmRBdChwb3MpIH1cbiAgICBpZiAodW5pdCA9PSBcImxpbmVcIikgeyByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpIH1cbiAgICB2YXIgcmVzdWx0ID0gdW5pdChjbSwgcG9zKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlKHJlc3VsdC5mcm9tLCByZXN1bHQudG8pXG4gIH1cblxuICAvLyBOb3JtYWwgc2VsZWN0aW9uLCBhcyBvcHBvc2VkIHRvIHRleHQgZHJhZ2dpbmcuXG4gIGZ1bmN0aW9uIGxlZnRCdXR0b25TZWxlY3QoY20sIGV2ZW50LCBzdGFydCwgYmVoYXZpb3IpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICBlX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgIHZhciBvdXJSYW5nZSwgb3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbCwgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzO1xuICAgIGlmIChiZWhhdmlvci5hZGROZXcgJiYgIWJlaGF2aW9yLmV4dGVuZCkge1xuICAgICAgb3VySW5kZXggPSBkb2Muc2VsLmNvbnRhaW5zKHN0YXJ0KTtcbiAgICAgIGlmIChvdXJJbmRleCA+IC0xKVxuICAgICAgICB7IG91clJhbmdlID0gcmFuZ2VzW291ckluZGV4XTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IG91clJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTtcbiAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5wcmltSW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKGJlaGF2aW9yLnVuaXQgPT0gXCJyZWN0YW5nbGVcIikge1xuICAgICAgaWYgKCFiZWhhdmlvci5hZGROZXcpIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsgfVxuICAgICAgc3RhcnQgPSBwb3NGcm9tTW91c2UoY20sIGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgIG91ckluZGV4ID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByYW5nZSA9IHJhbmdlRm9yVW5pdChjbSwgc3RhcnQsIGJlaGF2aW9yLnVuaXQpO1xuICAgICAgaWYgKGJlaGF2aW9yLmV4dGVuZClcbiAgICAgICAgeyBvdXJSYW5nZSA9IGV4dGVuZFJhbmdlKG91clJhbmdlLCByYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQsIGJlaGF2aW9yLmV4dGVuZCk7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBvdXJSYW5nZSA9IHJhbmdlOyB9XG4gICAgfVxuXG4gICAgaWYgKCFiZWhhdmlvci5hZGROZXcpIHtcbiAgICAgIG91ckluZGV4ID0gMDtcbiAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW291clJhbmdlXSwgMCksIHNlbF9tb3VzZSk7XG4gICAgICBzdGFydFNlbCA9IGRvYy5zZWw7XG4gICAgfSBlbHNlIGlmIChvdXJJbmRleCA9PSAtMSkge1xuICAgICAgb3VySW5kZXggPSByYW5nZXMubGVuZ3RoO1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCByYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0pLCBvdXJJbmRleCksXG4gICAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogXCIqbW91c2VcIn0pO1xuICAgIH0gZWxzZSBpZiAocmFuZ2VzLmxlbmd0aCA+IDEgJiYgcmFuZ2VzW291ckluZGV4XS5lbXB0eSgpICYmIGJlaGF2aW9yLnVuaXQgPT0gXCJjaGFyXCIgJiYgIWJlaGF2aW9yLmV4dGVuZCkge1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCByYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMuc2xpY2Uob3VySW5kZXggKyAxKSksIDApLFxuICAgICAgICAgICAgICAgICAgIHtzY3JvbGw6IGZhbHNlLCBvcmlnaW46IFwiKm1vdXNlXCJ9KTtcbiAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4LCBvdXJSYW5nZSwgc2VsX21vdXNlKTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvcyA9IHN0YXJ0O1xuICAgIGZ1bmN0aW9uIGV4dGVuZFRvKHBvcykge1xuICAgICAgaWYgKGNtcChsYXN0UG9zLCBwb3MpID09IDApIHsgcmV0dXJuIH1cbiAgICAgIGxhc3RQb3MgPSBwb3M7XG5cbiAgICAgIGlmIChiZWhhdmlvci51bml0ID09IFwicmVjdGFuZ2xlXCIpIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IFtdLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplO1xuICAgICAgICB2YXIgc3RhcnRDb2wgPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgc3RhcnQubGluZSkudGV4dCwgc3RhcnQuY2gsIHRhYlNpemUpO1xuICAgICAgICB2YXIgcG9zQ29sID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0LCBwb3MuY2gsIHRhYlNpemUpO1xuICAgICAgICB2YXIgbGVmdCA9IE1hdGgubWluKHN0YXJ0Q29sLCBwb3NDb2wpLCByaWdodCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBwb3NDb2wpO1xuICAgICAgICBmb3IgKHZhciBsaW5lID0gTWF0aC5taW4oc3RhcnQubGluZSwgcG9zLmxpbmUpLCBlbmQgPSBNYXRoLm1pbihjbS5sYXN0TGluZSgpLCBNYXRoLm1heChzdGFydC5saW5lLCBwb3MubGluZSkpO1xuICAgICAgICAgICAgIGxpbmUgPD0gZW5kOyBsaW5lKyspIHtcbiAgICAgICAgICB2YXIgdGV4dCA9IGdldExpbmUoZG9jLCBsaW5lKS50ZXh0LCBsZWZ0UG9zID0gZmluZENvbHVtbih0ZXh0LCBsZWZ0LCB0YWJTaXplKTtcbiAgICAgICAgICBpZiAobGVmdCA9PSByaWdodClcbiAgICAgICAgICAgIHsgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0UG9zKSwgUG9zKGxpbmUsIGxlZnRQb3MpKSk7IH1cbiAgICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxlZnRQb3MpXG4gICAgICAgICAgICB7IHJhbmdlcy5wdXNoKG5ldyBSYW5nZShQb3MobGluZSwgbGVmdFBvcyksIFBvcyhsaW5lLCBmaW5kQ29sdW1uKHRleHQsIHJpZ2h0LCB0YWJTaXplKSkpKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeyByYW5nZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSk7IH1cbiAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCBzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBvdXJJbmRleCksXG4gICAgICAgICAgICAgICAgICAgICB7b3JpZ2luOiBcIiptb3VzZVwiLCBzY3JvbGw6IGZhbHNlfSk7XG4gICAgICAgIGNtLnNjcm9sbEludG9WaWV3KHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2xkUmFuZ2UgPSBvdXJSYW5nZTtcbiAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VGb3JVbml0KGNtLCBwb3MsIGJlaGF2aW9yLnVuaXQpO1xuICAgICAgICB2YXIgYW5jaG9yID0gb2xkUmFuZ2UuYW5jaG9yLCBoZWFkO1xuICAgICAgICBpZiAoY21wKHJhbmdlLmFuY2hvciwgYW5jaG9yKSA+IDApIHtcbiAgICAgICAgICBoZWFkID0gcmFuZ2UuaGVhZDtcbiAgICAgICAgICBhbmNob3IgPSBtaW5Qb3Mob2xkUmFuZ2UuZnJvbSgpLCByYW5nZS5hbmNob3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWQgPSByYW5nZS5hbmNob3I7XG4gICAgICAgICAgYW5jaG9yID0gbWF4UG9zKG9sZFJhbmdlLnRvKCksIHJhbmdlLmhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByYW5nZXMkMSA9IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICAgICAgcmFuZ2VzJDFbb3VySW5kZXhdID0gYmlkaVNpbXBsaWZ5KGNtLCBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIGFuY2hvciksIGhlYWQpKTtcbiAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCByYW5nZXMkMSwgb3VySW5kZXgpLCBzZWxfbW91c2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBlZGl0b3JTaXplID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vIFVzZWQgdG8gZW5zdXJlIHRpbWVvdXQgcmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kXG4gICAgLy8gaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFibGUgLS0gYXRcbiAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZlbiB3aGVuIGNsZWFyZWQsXG4gICAgLy8gaWYgdGhlIGNsZWFyIGhhcHBlbnMgYWZ0ZXIgdGhlaXIgc2NoZWR1bGVkIGZpcmluZyB0aW1lKS5cbiAgICB2YXIgY291bnRlciA9IDA7XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoZSkge1xuICAgICAgdmFyIGN1ckNvdW50ID0gKytjb3VudGVyO1xuICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgYmVoYXZpb3IudW5pdCA9PSBcInJlY3RhbmdsZVwiKTtcbiAgICAgIGlmICghY3VyKSB7IHJldHVybiB9XG4gICAgICBpZiAoY21wKGN1ciwgbGFzdFBvcykgIT0gMCkge1xuICAgICAgICBjbS5jdXJPcC5mb2N1cyA9IGFjdGl2ZUVsdCgpO1xuICAgICAgICBleHRlbmRUbyhjdXIpO1xuICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MpO1xuICAgICAgICBpZiAoY3VyLmxpbmUgPj0gdmlzaWJsZS50byB8fCBjdXIubGluZSA8IHZpc2libGUuZnJvbSlcbiAgICAgICAgICB7IHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7aWYgKGNvdW50ZXIgPT0gY3VyQ291bnQpIHsgZXh0ZW5kKGUpOyB9fSksIDE1MCk7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvdXRzaWRlID0gZS5jbGllbnRZIDwgZWRpdG9yU2l6ZS50b3AgPyAtMjAgOiBlLmNsaWVudFkgPiBlZGl0b3JTaXplLmJvdHRvbSA/IDIwIDogMDtcbiAgICAgICAgaWYgKG91dHNpZGUpIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY291bnRlciAhPSBjdXJDb3VudCkgeyByZXR1cm4gfVxuICAgICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICs9IG91dHNpZGU7XG4gICAgICAgICAgZXh0ZW5kKGUpO1xuICAgICAgICB9KSwgNTApOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9uZShlKSB7XG4gICAgICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gZmFsc2U7XG4gICAgICBjb3VudGVyID0gSW5maW5pdHk7XG4gICAgICAvLyBJZiBlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHdlIGludGVycHJldCB0aGlzIGFzIHNvbWVvbmUgdHJ5aW5nXG4gICAgICAvLyB0byBleHBsaWNpdGx5IGNhbmNlbCB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIHRoZSB1c2VyXG4gICAgICAvLyBsZXR0aW5nIGdvIG9mIHRoZSBtb3VzZSBidXR0b24uXG4gICAgICBpZiAoZSkge1xuICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgICAgICBkaXNwbGF5LmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdmUpO1xuICAgICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgdXApO1xuICAgICAgZG9jLmhpc3RvcnkubGFzdFNlbE9yaWdpbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1vdmUgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5idXR0b25zID09PSAwIHx8ICFlX2J1dHRvbihlKSkgeyBkb25lKGUpOyB9XG4gICAgICBlbHNlIHsgZXh0ZW5kKGUpOyB9XG4gICAgfSk7XG4gICAgdmFyIHVwID0gb3BlcmF0aW9uKGNtLCBkb25lKTtcbiAgICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gdXA7XG4gICAgb24oZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdmUpO1xuICAgIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgdXApO1xuICB9XG5cbiAgLy8gVXNlZCB3aGVuIG1vdXNlLXNlbGVjdGluZyB0byBhZGp1c3QgdGhlIGFuY2hvciB0byB0aGUgcHJvcGVyIHNpZGVcbiAgLy8gb2YgYSBiaWRpIGp1bXAgZGVwZW5kaW5nIG9uIHRoZSB2aXN1YWwgcG9zaXRpb24gb2YgdGhlIGhlYWQuXG4gIGZ1bmN0aW9uIGJpZGlTaW1wbGlmeShjbSwgcmFuZ2UpIHtcbiAgICB2YXIgYW5jaG9yID0gcmFuZ2UuYW5jaG9yO1xuICAgIHZhciBoZWFkID0gcmFuZ2UuaGVhZDtcbiAgICB2YXIgYW5jaG9yTGluZSA9IGdldExpbmUoY20uZG9jLCBhbmNob3IubGluZSk7XG4gICAgaWYgKGNtcChhbmNob3IsIGhlYWQpID09IDAgJiYgYW5jaG9yLnN0aWNreSA9PSBoZWFkLnN0aWNreSkgeyByZXR1cm4gcmFuZ2UgfVxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGFuY2hvckxpbmUpO1xuICAgIGlmICghb3JkZXIpIHsgcmV0dXJuIHJhbmdlIH1cbiAgICB2YXIgaW5kZXggPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBhbmNob3IuY2gsIGFuY2hvci5zdGlja3kpLCBwYXJ0ID0gb3JkZXJbaW5kZXhdO1xuICAgIGlmIChwYXJ0LmZyb20gIT0gYW5jaG9yLmNoICYmIHBhcnQudG8gIT0gYW5jaG9yLmNoKSB7IHJldHVybiByYW5nZSB9XG4gICAgdmFyIGJvdW5kYXJ5ID0gaW5kZXggKyAoKHBhcnQuZnJvbSA9PSBhbmNob3IuY2gpID09IChwYXJ0LmxldmVsICE9IDEpID8gMCA6IDEpO1xuICAgIGlmIChib3VuZGFyeSA9PSAwIHx8IGJvdW5kYXJ5ID09IG9yZGVyLmxlbmd0aCkgeyByZXR1cm4gcmFuZ2UgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcmVsYXRpdmUgdmlzdWFsIHBvc2l0aW9uIG9mIHRoZSBoZWFkIGNvbXBhcmVkIHRvIHRoZVxuICAgIC8vIGFuY2hvciAoPDAgaXMgdG8gdGhlIGxlZnQsID4wIHRvIHRoZSByaWdodClcbiAgICB2YXIgbGVmdFNpZGU7XG4gICAgaWYgKGhlYWQubGluZSAhPSBhbmNob3IubGluZSkge1xuICAgICAgbGVmdFNpZGUgPSAoaGVhZC5saW5lIC0gYW5jaG9yLmxpbmUpICogKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJsdHJcIiA/IDEgOiAtMSkgPiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaGVhZEluZGV4ID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgaGVhZC5jaCwgaGVhZC5zdGlja3kpO1xuICAgICAgdmFyIGRpciA9IGhlYWRJbmRleCAtIGluZGV4IHx8IChoZWFkLmNoIC0gYW5jaG9yLmNoKSAqIChwYXJ0LmxldmVsID09IDEgPyAtMSA6IDEpO1xuICAgICAgaWYgKGhlYWRJbmRleCA9PSBib3VuZGFyeSAtIDEgfHwgaGVhZEluZGV4ID09IGJvdW5kYXJ5KVxuICAgICAgICB7IGxlZnRTaWRlID0gZGlyIDwgMDsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IGxlZnRTaWRlID0gZGlyID4gMDsgfVxuICAgIH1cblxuICAgIHZhciB1c2VQYXJ0ID0gb3JkZXJbYm91bmRhcnkgKyAobGVmdFNpZGUgPyAtMSA6IDApXTtcbiAgICB2YXIgZnJvbSA9IGxlZnRTaWRlID09ICh1c2VQYXJ0LmxldmVsID09IDEpO1xuICAgIHZhciBjaCA9IGZyb20gPyB1c2VQYXJ0LmZyb20gOiB1c2VQYXJ0LnRvLCBzdGlja3kgPSBmcm9tID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICByZXR1cm4gYW5jaG9yLmNoID09IGNoICYmIGFuY2hvci5zdGlja3kgPT0gc3RpY2t5ID8gcmFuZ2UgOiBuZXcgUmFuZ2UobmV3IFBvcyhhbmNob3IubGluZSwgY2gsIHN0aWNreSksIGhlYWQpXG4gIH1cblxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciBhbiBldmVudCBoYXBwZW5lZCBpbiB0aGUgZ3V0dGVyLCBhbmQgZmlyZXMgdGhlXG4gIC8vIGhhbmRsZXJzIGZvciB0aGUgY29ycmVzcG9uZGluZyBldmVudC5cbiAgZnVuY3Rpb24gZ3V0dGVyRXZlbnQoY20sIGUsIHR5cGUsIHByZXZlbnQpIHtcbiAgICB2YXIgbVgsIG1ZO1xuICAgIGlmIChlLnRvdWNoZXMpIHtcbiAgICAgIG1YID0gZS50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICBtWSA9IGUudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkgeyBtWCA9IGUuY2xpZW50WDsgbVkgPSBlLmNsaWVudFk7IH1cbiAgICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB9XG4gICAgaWYgKG1YID49IE1hdGguZmxvb3IoY20uZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmIChwcmV2ZW50KSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICB2YXIgbGluZUJveCA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmIChtWSA+IGxpbmVCb3guYm90dG9tIHx8ICFoYXNIYW5kbGVyKGNtLCB0eXBlKSkgeyByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIH1cbiAgICBtWSAtPSBsaW5lQm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTtcbiAgICAgIGlmIChnICYmIGcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPj0gbVgpIHtcbiAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20uZG9jLCBtWSk7XG4gICAgICAgIHZhciBndXR0ZXIgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2ldO1xuICAgICAgICBzaWduYWwoY20sIHR5cGUsIGNtLCBsaW5lLCBndXR0ZXIuY2xhc3NOYW1lLCBlKTtcbiAgICAgICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHtcbiAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsIFwiZ3V0dGVyQ2xpY2tcIiwgdHJ1ZSlcbiAgfVxuXG4gIC8vIENPTlRFWFQgTUVOVSBIQU5ETElOR1xuXG4gIC8vIFRvIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBuZWVkIHRvIGJyaWVmbHkgdW5oaWRlIHRoZVxuICAvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVub2J0cnVzaXZlIGFzIHBvc3NpYmxlKSB0byBsZXQgdGhlXG4gIC8vIHJpZ2h0LWNsaWNrIHRha2UgZWZmZWN0IG9uIGl0LlxuICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGNtLCBlKSB7XG4gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUsIFwiY29udGV4dG1lbnVcIikpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWNhcHR1cmVSaWdodENsaWNrKSB7IGNtLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShlKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkge1xuICAgIGlmICghaGFzSGFuZGxlcihjbSwgXCJndXR0ZXJDb250ZXh0TWVudVwiKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHJldHVybiBndXR0ZXJFdmVudChjbSwgZSwgXCJndXR0ZXJDb250ZXh0TWVudVwiLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkge1xuICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xccypjbS1zLVxcUysvZywgXCJcIikgK1xuICAgICAgY20ub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxcXHMpXFxzKi9nLCBcIiBjbS1zLVwiKTtcbiAgICBjbGVhckNhY2hlcyhjbSk7XG4gIH1cblxuICB2YXIgSW5pdCA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gXCJDb2RlTWlycm9yLkluaXRcIn19O1xuXG4gIHZhciBkZWZhdWx0cyA9IHt9O1xuICB2YXIgb3B0aW9uSGFuZGxlcnMgPSB7fTtcblxuICBmdW5jdGlvbiBkZWZpbmVPcHRpb25zKENvZGVNaXJyb3IpIHtcbiAgICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzO1xuXG4gICAgZnVuY3Rpb24gb3B0aW9uKG5hbWUsIGRlZmx0LCBoYW5kbGUsIG5vdE9uSW5pdCkge1xuICAgICAgQ29kZU1pcnJvci5kZWZhdWx0c1tuYW1lXSA9IGRlZmx0O1xuICAgICAgaWYgKGhhbmRsZSkgeyBvcHRpb25IYW5kbGVyc1tuYW1lXSA9XG4gICAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtpZiAob2xkICE9IEluaXQpIHsgaGFuZGxlKGNtLCB2YWwsIG9sZCk7IH19IDogaGFuZGxlOyB9XG4gICAgfVxuXG4gICAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24gPSBvcHRpb247XG5cbiAgICAvLyBQYXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8gb2xkIHZhbHVlLlxuICAgIENvZGVNaXJyb3IuSW5pdCA9IEluaXQ7XG5cbiAgICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5XG4gICAgLy8gaGF2ZSB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGVkaXRvciBjYW4gc3RhcnQgYXQgYWxsLlxuICAgIG9wdGlvbihcInZhbHVlXCIsIFwiXCIsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5zZXRWYWx1ZSh2YWwpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJtb2RlXCIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kb2MubW9kZU9wdGlvbiA9IHZhbDtcbiAgICAgIGxvYWRNb2RlKGNtKTtcbiAgICB9LCB0cnVlKTtcblxuICAgIG9wdGlvbihcImluZGVudFVuaXRcIiwgMiwgbG9hZE1vZGUsIHRydWUpO1xuICAgIG9wdGlvbihcImluZGVudFdpdGhUYWJzXCIsIGZhbHNlKTtcbiAgICBvcHRpb24oXCJzbWFydEluZGVudFwiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJ0YWJTaXplXCIsIDQsIGZ1bmN0aW9uIChjbSkge1xuICAgICAgcmVzZXRNb2RlU3RhdGUoY20pO1xuICAgICAgY2xlYXJDYWNoZXMoY20pO1xuICAgICAgcmVnQ2hhbmdlKGNtKTtcbiAgICB9LCB0cnVlKTtcblxuICAgIG9wdGlvbihcImxpbmVTZXBhcmF0b3JcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRvYy5saW5lU2VwID0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBuZXdCcmVha3MgPSBbXSwgbGluZU5vID0gY20uZG9jLmZpcnN0O1xuICAgICAgY20uZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgZm9yICh2YXIgcG9zID0gMDs7KSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gbGluZS50ZXh0LmluZGV4T2YodmFsLCBwb3MpO1xuICAgICAgICAgIGlmIChmb3VuZCA9PSAtMSkgeyBicmVhayB9XG4gICAgICAgICAgcG9zID0gZm91bmQgKyB2YWwubGVuZ3RoO1xuICAgICAgICAgIG5ld0JyZWFrcy5wdXNoKFBvcyhsaW5lTm8sIGZvdW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZU5vKys7XG4gICAgICB9KTtcbiAgICAgIGZvciAodmFyIGkgPSBuZXdCcmVha3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHsgcmVwbGFjZVJhbmdlKGNtLmRvYywgdmFsLCBuZXdCcmVha3NbaV0sIFBvcyhuZXdCcmVha3NbaV0ubGluZSwgbmV3QnJlYWtzW2ldLmNoICsgdmFsLmxlbmd0aCkpOyB9XG4gICAgfSk7XG4gICAgb3B0aW9uKFwic3BlY2lhbENoYXJzXCIsIC9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXFx1MDBhZFxcdTA2MWNcXHUyMDBiLVxcdTIwMGZcXHUyMDI4XFx1MjAyOVxcdWZlZmZcXHVmZmY5LVxcdWZmZmNdL2csIGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtcbiAgICAgIGNtLnN0YXRlLnNwZWNpYWxDaGFycyA9IG5ldyBSZWdFeHAodmFsLnNvdXJjZSArICh2YWwudGVzdChcIlxcdFwiKSA/IFwiXCIgOiBcInxcXHRcIiksIFwiZ1wiKTtcbiAgICAgIGlmIChvbGQgIT0gSW5pdCkgeyBjbS5yZWZyZXNoKCk7IH1cbiAgICB9KTtcbiAgICBvcHRpb24oXCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyXCIsIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlZnJlc2goKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZWxlY3RyaWNDaGFyc1wiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJpbnB1dFN0eWxlXCIsIG1vYmlsZSA/IFwiY29udGVudGVkaXRhYmxlXCIgOiBcInRleHRhcmVhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0U3R5bGUgY2FuIG5vdCAoeWV0KSBiZSBjaGFuZ2VkIGluIGEgcnVubmluZyBlZGl0b3JcIikgLy8gRklYTUVcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJzcGVsbGNoZWNrXCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2sgPSB2YWw7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcImF1dG9jb3JyZWN0XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLmF1dG9jb3JyZWN0ID0gdmFsOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJhdXRvY2FwaXRhbGl6ZVwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmdldElucHV0RmllbGQoKS5hdXRvY2FwaXRhbGl6ZSA9IHZhbDsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwicnRsTW92ZVZpc3VhbGx5XCIsICF3aW5kb3dzKTtcbiAgICBvcHRpb24oXCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmVcIiwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJ0aGVtZVwiLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICB0aGVtZUNoYW5nZWQoY20pO1xuICAgICAgdXBkYXRlR3V0dGVycyhjbSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwia2V5TWFwXCIsIFwiZGVmYXVsdFwiLCBmdW5jdGlvbiAoY20sIHZhbCwgb2xkKSB7XG4gICAgICB2YXIgbmV4dCA9IGdldEtleU1hcCh2YWwpO1xuICAgICAgdmFyIHByZXYgPSBvbGQgIT0gSW5pdCAmJiBnZXRLZXlNYXAob2xkKTtcbiAgICAgIGlmIChwcmV2ICYmIHByZXYuZGV0YWNoKSB7IHByZXYuZGV0YWNoKGNtLCBuZXh0KTsgfVxuICAgICAgaWYgKG5leHQuYXR0YWNoKSB7IG5leHQuYXR0YWNoKGNtLCBwcmV2IHx8IG51bGwpOyB9XG4gICAgfSk7XG4gICAgb3B0aW9uKFwiZXh0cmFLZXlzXCIsIG51bGwpO1xuICAgIG9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIsIG51bGwpO1xuXG4gICAgb3B0aW9uKFwibGluZVdyYXBwaW5nXCIsIGZhbHNlLCB3cmFwcGluZ0NoYW5nZWQsIHRydWUpO1xuICAgIG9wdGlvbihcImd1dHRlcnNcIiwgW10sIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyh2YWwsIGNtLm9wdGlvbnMubGluZU51bWJlcnMpO1xuICAgICAgdXBkYXRlR3V0dGVycyhjbSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZml4ZWRHdXR0ZXJcIiwgdHJ1ZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIGNtLnJlZnJlc2goKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhclwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2Nyb2xsYmFyU3R5bGVcIiwgXCJuYXRpdmVcIiwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICBpbml0U2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtKTtcbiAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoY20uZG9jLnNjcm9sbFRvcCk7XG4gICAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChjbS5kb2Muc2Nyb2xsTGVmdCk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZU51bWJlcnNcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyhjbS5vcHRpb25zLmd1dHRlcnMsIHZhbCk7XG4gICAgICB1cGRhdGVHdXR0ZXJzKGNtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJmaXJzdExpbmVOdW1iZXJcIiwgMSwgdXBkYXRlR3V0dGVycywgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZU51bWJlckZvcm1hdHRlclwiLCBmdW5jdGlvbiAoaW50ZWdlcikgeyByZXR1cm4gaW50ZWdlcjsgfSwgdXBkYXRlR3V0dGVycywgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmdcIiwgZmFsc2UsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnVcIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZVdpc2VDb3B5Q3V0XCIsIHRydWUpO1xuICAgIG9wdGlvbihcInBhc3RlTGluZXNQZXJTZWxlY3Rpb25cIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2VsZWN0aW9uc01heVRvdWNoXCIsIGZhbHNlKTtcblxuICAgIG9wdGlvbihcInJlYWRPbmx5XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgaWYgKHZhbCA9PSBcIm5vY3Vyc29yXCIpIHtcbiAgICAgICAgb25CbHVyKGNtKTtcbiAgICAgICAgY20uZGlzcGxheS5pbnB1dC5ibHVyKCk7XG4gICAgICB9XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnJlYWRPbmx5Q2hhbmdlZCh2YWwpO1xuICAgIH0pO1xuICAgIG9wdGlvbihcImRpc2FibGVJbnB1dFwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtpZiAoIXZhbCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7IH19LCB0cnVlKTtcbiAgICBvcHRpb24oXCJkcmFnRHJvcFwiLCB0cnVlLCBkcmFnRHJvcENoYW5nZWQpO1xuICAgIG9wdGlvbihcImFsbG93RHJvcEZpbGVUeXBlc1wiLCBudWxsKTtcblxuICAgIG9wdGlvbihcImN1cnNvckJsaW5rUmF0ZVwiLCA1MzApO1xuICAgIG9wdGlvbihcImN1cnNvclNjcm9sbE1hcmdpblwiLCAwKTtcbiAgICBvcHRpb24oXCJjdXJzb3JIZWlnaHRcIiwgMSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTtcbiAgICBvcHRpb24oXCJzaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lXCIsIHRydWUsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwid29ya1RpbWVcIiwgMTAwKTtcbiAgICBvcHRpb24oXCJ3b3JrRGVsYXlcIiwgMTAwKTtcbiAgICBvcHRpb24oXCJmbGF0dGVuU3BhbnNcIiwgdHJ1ZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpO1xuICAgIG9wdGlvbihcImFkZE1vZGVDbGFzc1wiLCBmYWxzZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpO1xuICAgIG9wdGlvbihcInBvbGxJbnRlcnZhbFwiLCAxMDApO1xuICAgIG9wdGlvbihcInVuZG9EZXB0aFwiLCAyMDAsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2YWw7IH0pO1xuICAgIG9wdGlvbihcImhpc3RvcnlFdmVudERlbGF5XCIsIDEyNTApO1xuICAgIG9wdGlvbihcInZpZXdwb3J0TWFyZ2luXCIsIDEwLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlZnJlc2goKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibWF4SGlnaGxpZ2h0TGVuZ3RoXCIsIDEwMDAwLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibW92ZUlucHV0V2l0aEN1cnNvclwiLCB0cnVlLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgaWYgKCF2YWwpIHsgY20uZGlzcGxheS5pbnB1dC5yZXNldFBvc2l0aW9uKCk7IH1cbiAgICB9KTtcblxuICAgIG9wdGlvbihcInRhYmluZGV4XCIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXggPSB2YWwgfHwgXCJcIjsgfSk7XG4gICAgb3B0aW9uKFwiYXV0b2ZvY3VzXCIsIG51bGwpO1xuICAgIG9wdGlvbihcImRpcmVjdGlvblwiLCBcImx0clwiLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZG9jLnNldERpcmVjdGlvbih2YWwpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJwaHJhc2VzXCIsIG51bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhZ0Ryb3BDaGFuZ2VkKGNtLCB2YWx1ZSwgb2xkKSB7XG4gICAgdmFyIHdhc09uID0gb2xkICYmIG9sZCAhPSBJbml0O1xuICAgIGlmICghdmFsdWUgIT0gIXdhc09uKSB7XG4gICAgICB2YXIgZnVuY3MgPSBjbS5kaXNwbGF5LmRyYWdGdW5jdGlvbnM7XG4gICAgICB2YXIgdG9nZ2xlID0gdmFsdWUgPyBvbiA6IG9mZjtcbiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBmdW5jcy5zdGFydCk7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnZW50ZXJcIiwgZnVuY3MuZW50ZXIpO1xuICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ292ZXJcIiwgZnVuY3Mub3Zlcik7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnbGVhdmVcIiwgZnVuY3MubGVhdmUpO1xuICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJvcFwiLCBmdW5jcy5kcm9wKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoY20pIHtcbiAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHtcbiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLXdyYXBcIik7XG4gICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gXCJcIjtcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3Itd3JhcFwiKTtcbiAgICAgIGZpbmRNYXhMaW5lKGNtKTtcbiAgICB9XG4gICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgICBjbGVhckNhY2hlcyhjbSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgMTAwKTtcbiAgfVxuXG4gIC8vIEEgQ29kZU1pcnJvciBpbnN0YW5jZSByZXByZXNlbnRzIGFuIGVkaXRvci4gVGhpcyBpcyB0aGUgb2JqZWN0XG4gIC8vIHRoYXQgdXNlciBjb2RlIGlzIHVzdWFsbHkgZGVhbGluZyB3aXRoLlxuXG4gIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb2RlTWlycm9yKSkgeyByZXR1cm4gbmV3IENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBvcHRpb25zID8gY29weU9iaihvcHRpb25zKSA6IHt9O1xuICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLlxuICAgIGNvcHlPYmooZGVmYXVsdHMsIG9wdGlvbnMsIGZhbHNlKTtcblxuICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlO1xuICAgIGlmICh0eXBlb2YgZG9jID09IFwic3RyaW5nXCIpIHsgZG9jID0gbmV3IERvYyhkb2MsIG9wdGlvbnMubW9kZSwgbnVsbCwgb3B0aW9ucy5saW5lU2VwYXJhdG9yLCBvcHRpb25zLmRpcmVjdGlvbik7IH1cbiAgICBlbHNlIGlmIChvcHRpb25zLm1vZGUpIHsgZG9jLm1vZGVPcHRpb24gPSBvcHRpb25zLm1vZGU7IH1cbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlTWlycm9yLmlucHV0U3R5bGVzW29wdGlvbnMuaW5wdXRTdHlsZV0odGhpcyk7XG4gICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcgRGlzcGxheShwbGFjZSwgZG9jLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgZGlzcGxheS53cmFwcGVyLkNvZGVNaXJyb3IgPSB0aGlzO1xuICAgIHRoZW1lQ2hhbmdlZCh0aGlzKTtcbiAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpXG4gICAgICB7IHRoaXMuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSBcIiBDb2RlTWlycm9yLXdyYXBcIjsgfVxuICAgIGluaXRTY3JvbGxiYXJzKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGtleU1hcHM6IFtdLCAgLy8gc3RvcmVzIG1hcHMgYWRkZWQgYnkgYWRkS2V5TWFwXG4gICAgICBvdmVybGF5czogW10sIC8vIGhpZ2hsaWdodGluZyBvdmVybGF5cywgYXMgYWRkZWQgYnkgYWRkT3ZlcmxheVxuICAgICAgbW9kZUdlbjogMCwgICAvLyBidW1wZWQgd2hlbiBtb2RlL292ZXJsYXkgY2hhbmdlcywgdXNlZCB0byBpbnZhbGlkYXRlIGhpZ2hsaWdodGluZyBpbmZvXG4gICAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgZGVsYXlpbmdCbHVyRXZlbnQ6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwgLy8gdXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVycyB3aGVuIGluIHJlYWRPbmx5IG1vZGVcbiAgICAgIHBhc3RlSW5jb21pbmc6IC0xLCBjdXRJbmNvbWluZzogLTEsIC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiBpbnB1dC5wb2xsXG4gICAgICBzZWxlY3RpbmdUZXh0OiBmYWxzZSxcbiAgICAgIGRyYWdnaW5nVGV4dDogZmFsc2UsXG4gICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCksIC8vIHN0b3JlcyBoaWdobGlnaHQgd29ya2VyIHRpbWVvdXRcbiAgICAgIGtleVNlcTogbnVsbCwgIC8vIFVuZmluaXNoZWQga2V5IHNlcXVlbmNlXG4gICAgICBzcGVjaWFsQ2hhcnM6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHsgZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9XG5cbiAgICAvLyBPdmVycmlkZSBtYWdpYyB0ZXh0YXJlYSBjb250ZW50IHJlc3RvcmUgdGhhdCBJRSBzb21ldGltZXMgZG9lc1xuICAgIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5kaXNwbGF5LmlucHV0LnJlc2V0KHRydWUpOyB9LCAyMCk7IH1cblxuICAgIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyh0aGlzKTtcbiAgICBlbnN1cmVHbG9iYWxIYW5kbGVycygpO1xuXG4gICAgc3RhcnRPcGVyYXRpb24odGhpcyk7XG4gICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7XG5cbiAgICBpZiAoKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHx8IHRoaXMuaGFzRm9jdXMoKSlcbiAgICAgIHsgc2V0VGltZW91dChiaW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7IH1cbiAgICBlbHNlXG4gICAgICB7IG9uQmx1cih0aGlzKTsgfVxuXG4gICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbkhhbmRsZXJzKSB7IGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKVxuICAgICAgeyBvcHRpb25IYW5kbGVyc1tvcHRdKHRoaXMsIG9wdGlvbnNbb3B0XSwgSW5pdCk7IH0gfVxuICAgIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKHRoaXMpO1xuICAgIGlmIChvcHRpb25zLmZpbmlzaEluaXQpIHsgb3B0aW9ucy5maW5pc2hJbml0KHRoaXMpOyB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyArK2kpIHsgaW5pdEhvb2tzW2ldKHRoaXMpOyB9XG4gICAgZW5kT3BlcmF0aW9uKHRoaXMpO1xuICAgIC8vIFN1cHByZXNzIG9wdGltaXplbGVnaWJpbGl0eSBpbiBXZWJraXQsIHNpbmNlIGl0IGJyZWFrcyB0ZXh0XG4gICAgLy8gbWVhc3VyaW5nIG9uIGxpbmUgd3JhcHBpbmcgYm91bmRhcmllcy5cbiAgICBpZiAod2Via2l0ICYmIG9wdGlvbnMubGluZVdyYXBwaW5nICYmXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZGlzcGxheS5saW5lRGl2KS50ZXh0UmVuZGVyaW5nID09IFwib3B0aW1pemVsZWdpYmlsaXR5XCIpXG4gICAgICB7IGRpc3BsYXkubGluZURpdi5zdHlsZS50ZXh0UmVuZGVyaW5nID0gXCJhdXRvXCI7IH1cbiAgfVxuXG4gIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgQ29kZU1pcnJvci5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAvLyBGdW5jdGlvbnMgdG8gcnVuIHdoZW4gb3B0aW9ucyBhcmUgY2hhbmdlZC5cbiAgQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycyA9IG9wdGlvbkhhbmRsZXJzO1xuXG4gIC8vIEF0dGFjaCB0aGUgbmVjZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBlZGl0b3JcbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5O1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwibW91c2Vkb3duXCIsIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKTtcbiAgICAvLyBPbGRlciBJRSdzIHdpbGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBjbGlja1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpXG4gICAgICB7IG9uKGQuc2Nyb2xsZXIsIFwiZGJsY2xpY2tcIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9XG4gICAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpO1xuICAgICAgICBpZiAoIXBvcyB8fCBjbGlja0luR3V0dGVyKGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSB7IHJldHVybiB9XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIHZhciB3b3JkID0gY20uZmluZFdvcmRBdChwb3MpO1xuICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTtcbiAgICAgIH0pKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgb24oZC5zY3JvbGxlciwgXCJkYmxjbGlja1wiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGVfcHJldmVudERlZmF1bHQoZSk7IH0pOyB9XG4gICAgLy8gU29tZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXRcbiAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdpdGggaXQgYW55bW9yZS4gQ29udGV4dCBtZW51IGlzXG4gICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJvd3NlcnMuXG4gICAgb24oZC5zY3JvbGxlciwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25Db250ZXh0TWVudShjbSwgZSk7IH0pO1xuICAgIG9uKGQuaW5wdXQuZ2V0RmllbGQoKSwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCFkLnNjcm9sbGVyLmNvbnRhaW5zKGUudGFyZ2V0KSkgeyBvbkNvbnRleHRNZW51KGNtLCBlKTsgfVxuICAgIH0pO1xuXG4gICAgLy8gVXNlZCB0byBzdXBwcmVzcyBtb3VzZSBldmVudCBoYW5kbGluZyB3aGVuIGEgdG91Y2ggaGFwcGVuc1xuICAgIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTtcbiAgICBmdW5jdGlvbiBmaW5pc2hUb3VjaCgpIHtcbiAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7XG4gICAgICAgIHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGQuYWN0aXZlVG91Y2ggPSBudWxsOyB9LCAxMDAwKTtcbiAgICAgICAgcHJldlRvdWNoID0gZC5hY3RpdmVUb3VjaDtcbiAgICAgICAgcHJldlRvdWNoLmVuZCA9ICtuZXcgRGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpIHtcbiAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHZhciB0b3VjaCA9IGUudG91Y2hlc1swXTtcbiAgICAgIHJldHVybiB0b3VjaC5yYWRpdXNYIDw9IDEgJiYgdG91Y2gucmFkaXVzWSA8PSAxXG4gICAgfVxuICAgIGZ1bmN0aW9uIGZhckF3YXkodG91Y2gsIG90aGVyKSB7XG4gICAgICBpZiAob3RoZXIubGVmdCA9PSBudWxsKSB7IHJldHVybiB0cnVlIH1cbiAgICAgIHZhciBkeCA9IG90aGVyLmxlZnQgLSB0b3VjaC5sZWZ0LCBkeSA9IG90aGVyLnRvcCAtIHRvdWNoLnRvcDtcbiAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSA+IDIwICogMjBcbiAgICB9XG4gICAgb24oZC5zY3JvbGxlciwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSAmJiAhaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpICYmICFjbGlja0luR3V0dGVyKGNtLCBlKSkge1xuICAgICAgICBkLmlucHV0LmVuc3VyZVBvbGxlZCgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodG91Y2hGaW5pc2hlZCk7XG4gICAgICAgIHZhciBub3cgPSArbmV3IERhdGU7XG4gICAgICAgIGQuYWN0aXZlVG91Y2ggPSB7c3RhcnQ6IG5vdywgbW92ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZXY6IG5vdyAtIHByZXZUb3VjaC5lbmQgPD0gMzAwID8gcHJldlRvdWNoIDogbnVsbH07XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBkLmFjdGl2ZVRvdWNoLmxlZnQgPSBlLnRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICAgICAgZC5hY3RpdmVUb3VjaC50b3AgPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBvbihkLnNjcm9sbGVyLCBcInRvdWNobW92ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZC5hY3RpdmVUb3VjaCkgeyBkLmFjdGl2ZVRvdWNoLm1vdmVkID0gdHJ1ZTsgfVxuICAgIH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwidG91Y2hlbmRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciB0b3VjaCA9IGQuYWN0aXZlVG91Y2g7XG4gICAgICBpZiAodG91Y2ggJiYgIWV2ZW50SW5XaWRnZXQoZCwgZSkgJiYgdG91Y2gubGVmdCAhPSBudWxsICYmXG4gICAgICAgICAgIXRvdWNoLm1vdmVkICYmIG5ldyBEYXRlIC0gdG91Y2guc3RhcnQgPCAzMDApIHtcbiAgICAgICAgdmFyIHBvcyA9IGNtLmNvb3Jkc0NoYXIoZC5hY3RpdmVUb3VjaCwgXCJwYWdlXCIpLCByYW5nZTtcbiAgICAgICAgaWYgKCF0b3VjaC5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYpKSAvLyBTaW5nbGUgdGFwXG4gICAgICAgICAgeyByYW5nZSA9IG5ldyBSYW5nZShwb3MsIHBvcyk7IH1cbiAgICAgICAgZWxzZSBpZiAoIXRvdWNoLnByZXYucHJldiB8fCBmYXJBd2F5KHRvdWNoLCB0b3VjaC5wcmV2LnByZXYpKSAvLyBEb3VibGUgdGFwXG4gICAgICAgICAgeyByYW5nZSA9IGNtLmZpbmRXb3JkQXQocG9zKTsgfVxuICAgICAgICBlbHNlIC8vIFRyaXBsZSB0YXBcbiAgICAgICAgICB7IHJhbmdlID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOyB9XG4gICAgICAgIGNtLnNldFNlbGVjdGlvbihyYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQpO1xuICAgICAgICBjbS5mb2N1cygpO1xuICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgICAgfVxuICAgICAgZmluaXNoVG91Y2goKTtcbiAgICB9KTtcbiAgICBvbihkLnNjcm9sbGVyLCBcInRvdWNoY2FuY2VsXCIsIGZpbmlzaFRvdWNoKTtcblxuICAgIC8vIFN5bmMgc2Nyb2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCByZWFsIHNjcm9sbGFibGVcbiAgICAvLyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGluZy5cbiAgICBvbihkLnNjcm9sbGVyLCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGVyLnNjcm9sbFRvcCk7XG4gICAgICAgIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdHJ1ZSk7XG4gICAgICAgIHNpZ25hbChjbSwgXCJzY3JvbGxcIiwgY20pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTGlzdGVuIHRvIHdoZWVsIGV2ZW50cyBpbiBvcmRlciB0byB0cnkgYW5kIHVwZGF0ZSB0aGUgdmlld3BvcnQgb24gdGltZS5cbiAgICBvbihkLnNjcm9sbGVyLCBcIm1vdXNld2hlZWxcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uU2Nyb2xsV2hlZWwoY20sIGUpOyB9KTtcbiAgICBvbihkLnNjcm9sbGVyLCBcIkRPTU1vdXNlU2Nyb2xsXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvblNjcm9sbFdoZWVsKGNtLCBlKTsgfSk7XG5cbiAgICAvLyBQcmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZ1xuICAgIG9uKGQud3JhcHBlciwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZC53cmFwcGVyLnNjcm9sbFRvcCA9IGQud3JhcHBlci5zY3JvbGxMZWZ0ID0gMDsgfSk7XG5cbiAgICBkLmRyYWdGdW5jdGlvbnMgPSB7XG4gICAgICBlbnRlcjogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBlX3N0b3AoZSk7IH19LFxuICAgICAgb3ZlcjogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBvbkRyYWdPdmVyKGNtLCBlKTsgZV9zdG9wKGUpOyB9fSxcbiAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25EcmFnU3RhcnQoY20sIGUpOyB9LFxuICAgICAgZHJvcDogb3BlcmF0aW9uKGNtLCBvbkRyb3ApLFxuICAgICAgbGVhdmU6IGZ1bmN0aW9uIChlKSB7aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIHsgY2xlYXJEcmFnQ3Vyc29yKGNtKTsgfX1cbiAgICB9O1xuXG4gICAgdmFyIGlucCA9IGQuaW5wdXQuZ2V0RmllbGQoKTtcbiAgICBvbihpbnAsIFwia2V5dXBcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uS2V5VXAuY2FsbChjbSwgZSk7IH0pO1xuICAgIG9uKGlucCwgXCJrZXlkb3duXCIsIG9wZXJhdGlvbihjbSwgb25LZXlEb3duKSk7XG4gICAgb24oaW5wLCBcImtleXByZXNzXCIsIG9wZXJhdGlvbihjbSwgb25LZXlQcmVzcykpO1xuICAgIG9uKGlucCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25Gb2N1cyhjbSwgZSk7IH0pO1xuICAgIG9uKGlucCwgXCJibHVyXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkJsdXIoY20sIGUpOyB9KTtcbiAgfVxuXG4gIHZhciBpbml0SG9va3MgPSBbXTtcbiAgQ29kZU1pcnJvci5kZWZpbmVJbml0SG9vayA9IGZ1bmN0aW9uIChmKSB7IHJldHVybiBpbml0SG9va3MucHVzaChmKTsgfTtcblxuICAvLyBJbmRlbnQgdGhlIGdpdmVuIGxpbmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSBcInNtYXJ0XCIsXG4gIC8vIFwiYWRkXCIvbnVsbCwgXCJzdWJ0cmFjdFwiLCBvciBcInByZXZcIi4gV2hlbiBhZ2dyZXNzaXZlIGlzIGZhbHNlXG4gIC8vICh0eXBpY2FsbHkgc2V0IHRvIHRydWUgZm9yIGZvcmNlZCBzaW5nbGUtbGluZSBpbmRlbnRzKSwgZW1wdHlcbiAgLy8gbGluZXMgYXJlIG5vdCBpbmRlbnRlZCwgYW5kIHBsYWNlcyB3aGVyZSB0aGUgbW9kZSByZXR1cm5zIFBhc3NcbiAgLy8gYXJlIGxlZnQgYWxvbmUuXG4gIGZ1bmN0aW9uIGluZGVudExpbmUoY20sIG4sIGhvdywgYWdncmVzc2l2ZSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIHN0YXRlO1xuICAgIGlmIChob3cgPT0gbnVsbCkgeyBob3cgPSBcImFkZFwiOyB9XG4gICAgaWYgKGhvdyA9PSBcInNtYXJ0XCIpIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBcInByZXZcIiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvblxuICAgICAgLy8gbWV0aG9kLlxuICAgICAgaWYgKCFkb2MubW9kZS5pbmRlbnQpIHsgaG93ID0gXCJwcmV2XCI7IH1cbiAgICAgIGVsc2UgeyBzdGF0ZSA9IGdldENvbnRleHRCZWZvcmUoY20sIG4pLnN0YXRlOyB9XG4gICAgfVxuXG4gICAgdmFyIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbiksIGN1clNwYWNlID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCB0YWJTaXplKTtcbiAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH1cbiAgICB2YXIgY3VyU3BhY2VTdHJpbmcgPSBsaW5lLnRleHQubWF0Y2goL15cXHMqLylbMF0sIGluZGVudGF0aW9uO1xuICAgIGlmICghYWdncmVzc2l2ZSAmJiAhL1xcUy8udGVzdChsaW5lLnRleHQpKSB7XG4gICAgICBpbmRlbnRhdGlvbiA9IDA7XG4gICAgICBob3cgPSBcIm5vdFwiO1xuICAgIH0gZWxzZSBpZiAoaG93ID09IFwic21hcnRcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBkb2MubW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpO1xuICAgICAgaWYgKGluZGVudGF0aW9uID09IFBhc3MgfHwgaW5kZW50YXRpb24gPiAxNTApIHtcbiAgICAgICAgaWYgKCFhZ2dyZXNzaXZlKSB7IHJldHVybiB9XG4gICAgICAgIGhvdyA9IFwicHJldlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaG93ID09IFwicHJldlwiKSB7XG4gICAgICBpZiAobiA+IGRvYy5maXJzdCkgeyBpbmRlbnRhdGlvbiA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBuLTEpLnRleHQsIG51bGwsIHRhYlNpemUpOyB9XG4gICAgICBlbHNlIHsgaW5kZW50YXRpb24gPSAwOyB9XG4gICAgfSBlbHNlIGlmIChob3cgPT0gXCJhZGRcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGNtLm9wdGlvbnMuaW5kZW50VW5pdDtcbiAgICB9IGVsc2UgaWYgKGhvdyA9PSBcInN1YnRyYWN0XCIpIHtcbiAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBjbS5vcHRpb25zLmluZGVudFVuaXQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaG93ID09IFwibnVtYmVyXCIpIHtcbiAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBob3c7XG4gICAgfVxuICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pO1xuXG4gICAgdmFyIGluZGVudFN0cmluZyA9IFwiXCIsIHBvcyA9IDA7XG4gICAgaWYgKGNtLm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpXG4gICAgICB7IGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gXCJcXHRcIjt9IH1cbiAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIHsgaW5kZW50U3RyaW5nICs9IHNwYWNlU3RyKGluZGVudGF0aW9uIC0gcG9zKTsgfVxuXG4gICAgaWYgKGluZGVudFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykge1xuICAgICAgcmVwbGFjZVJhbmdlKGRvYywgaW5kZW50U3RyaW5nLCBQb3MobiwgMCksIFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBcIitpbnB1dFwiKTtcbiAgICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbnN1cmUgdGhhdCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0XG4gICAgICAvLyBvZiB0aGUgbGluZSwgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNwYWNlLlxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpJDFdO1xuICAgICAgICBpZiAocmFuZ2UuaGVhZC5saW5lID09IG4gJiYgcmFuZ2UuaGVhZC5jaCA8IGN1clNwYWNlU3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBwb3MkMSA9IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpO1xuICAgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpJDEsIG5ldyBSYW5nZShwb3MkMSwgcG9zJDEpKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyB3aWxsIGJlIHNldCB0byBhIHtsaW5lV2lzZTogYm9vbCwgdGV4dDogW3N0cmluZ119IG9iamVjdCwgc29cbiAgLy8gdGhhdCwgd2hlbiBwYXN0aW5nLCB3ZSBrbm93IHdoYXQga2luZCBvZiBzZWxlY3Rpb25zIHRoZSBjb3BpZWRcbiAgLy8gdGV4dCB3YXMgbWFkZSBvdXQgb2YuXG4gIHZhciBsYXN0Q29waWVkID0gbnVsbDtcblxuICBmdW5jdGlvbiBzZXRMYXN0Q29waWVkKG5ld0xhc3RDb3BpZWQpIHtcbiAgICBsYXN0Q29waWVkID0gbmV3TGFzdENvcGllZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGV4dElucHV0KGNtLCBpbnNlcnRlZCwgZGVsZXRlZCwgc2VsLCBvcmlnaW4pIHtcbiAgICB2YXIgZG9jID0gY20uZG9jO1xuICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTtcbiAgICBpZiAoIXNlbCkgeyBzZWwgPSBkb2Muc2VsOyB9XG5cbiAgICB2YXIgcmVjZW50ID0gK25ldyBEYXRlIC0gMjAwO1xuICAgIHZhciBwYXN0ZSA9IG9yaWdpbiA9PSBcInBhc3RlXCIgfHwgY20uc3RhdGUucGFzdGVJbmNvbWluZyA+IHJlY2VudDtcbiAgICB2YXIgdGV4dExpbmVzID0gc3BsaXRMaW5lc0F1dG8oaW5zZXJ0ZWQpLCBtdWx0aVBhc3RlID0gbnVsbDtcbiAgICAvLyBXaGVuIHBhc3RpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5zZXJ0IG9uZSBsaW5lIHBlciBzZWxlY3Rpb25cbiAgICBpZiAocGFzdGUgJiYgc2VsLnJhbmdlcy5sZW5ndGggPiAxKSB7XG4gICAgICBpZiAobGFzdENvcGllZCAmJiBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKSA9PSBpbnNlcnRlZCkge1xuICAgICAgICBpZiAoc2VsLnJhbmdlcy5sZW5ndGggJSBsYXN0Q29waWVkLnRleHQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBtdWx0aVBhc3RlID0gW107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0Q29waWVkLnRleHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB7IG11bHRpUGFzdGUucHVzaChkb2Muc3BsaXRMaW5lcyhsYXN0Q29waWVkLnRleHRbaV0pKTsgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRleHRMaW5lcy5sZW5ndGggPT0gc2VsLnJhbmdlcy5sZW5ndGggJiYgY20ub3B0aW9ucy5wYXN0ZUxpbmVzUGVyU2VsZWN0aW9uKSB7XG4gICAgICAgIG11bHRpUGFzdGUgPSBtYXAodGV4dExpbmVzLCBmdW5jdGlvbiAobCkgeyByZXR1cm4gW2xdOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDtcbiAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvblxuICAgIGZvciAodmFyIGkkMSA9IHNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IGkkMS0tKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2kkMV07XG4gICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50bygpO1xuICAgICAgaWYgKHJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgaWYgKGRlbGV0ZWQgJiYgZGVsZXRlZCA+IDApIC8vIEhhbmRsZSBkZWxldGlvblxuICAgICAgICAgIHsgZnJvbSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSBkZWxldGVkKTsgfVxuICAgICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgIXBhc3RlKSAvLyBIYW5kbGUgb3ZlcndyaXRlXG4gICAgICAgICAgeyB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSkudGV4dC5sZW5ndGgsIHRvLmNoICsgbHN0KHRleHRMaW5lcykubGVuZ3RoKSk7IH1cbiAgICAgICAgZWxzZSBpZiAocGFzdGUgJiYgbGFzdENvcGllZCAmJiBsYXN0Q29waWVkLmxpbmVXaXNlICYmIGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpID09IGluc2VydGVkKVxuICAgICAgICAgIHsgZnJvbSA9IHRvID0gUG9zKGZyb20ubGluZSwgMCk7IH1cbiAgICAgIH1cbiAgICAgIHZhciBjaGFuZ2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IG11bHRpUGFzdGUgPyBtdWx0aVBhc3RlW2kkMSAlIG11bHRpUGFzdGUubGVuZ3RoXSA6IHRleHRMaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IG9yaWdpbiB8fCAocGFzdGUgPyBcInBhc3RlXCIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA+IHJlY2VudCA/IFwiY3V0XCIgOiBcIitpbnB1dFwiKX07XG4gICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlRXZlbnQpO1xuICAgICAgc2lnbmFsTGF0ZXIoY20sIFwiaW5wdXRSZWFkXCIsIGNtLCBjaGFuZ2VFdmVudCk7XG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCAmJiAhcGFzdGUpXG4gICAgICB7IHRyaWdnZXJFbGVjdHJpYyhjbSwgaW5zZXJ0ZWQpOyB9XG5cbiAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTtcbiAgICBpZiAoY20uY3VyT3AudXBkYXRlSW5wdXQgPCAyKSB7IGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7IH1cbiAgICBjbS5jdXJPcC50eXBpbmcgPSB0cnVlO1xuICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGFzdGUoZSwgY20pIHtcbiAgICB2YXIgcGFzdGVkID0gZS5jbGlwYm9hcmREYXRhICYmIGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKTtcbiAgICBpZiAocGFzdGVkKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoIWNtLmlzUmVhZE9ubHkoKSAmJiAhY20ub3B0aW9ucy5kaXNhYmxlSW5wdXQpXG4gICAgICAgIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwbHlUZXh0SW5wdXQoY20sIHBhc3RlZCwgMCwgbnVsbCwgXCJwYXN0ZVwiKTsgfSk7IH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCkge1xuICAgIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudFxuICAgIGlmICghY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzIHx8ICFjbS5vcHRpb25zLnNtYXJ0SW5kZW50KSB7IHJldHVybiB9XG4gICAgdmFyIHNlbCA9IGNtLmRvYy5zZWw7XG5cbiAgICBmb3IgKHZhciBpID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZS5oZWFkLmNoID4gMTAwIHx8IChpICYmIHNlbC5yYW5nZXNbaSAtIDFdLmhlYWQubGluZSA9PSByYW5nZS5oZWFkLmxpbmUpKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJhbmdlLmhlYWQpO1xuICAgICAgdmFyIGluZGVudGVkID0gZmFsc2U7XG4gICAgICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKVxuICAgICAgICAgIHsgaWYgKGluc2VydGVkLmluZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJzLmNoYXJBdChqKSkgPiAtMSkge1xuICAgICAgICAgICAgaW5kZW50ZWQgPSBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsIFwic21hcnRcIik7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH0gfVxuICAgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0cmljSW5wdXQpIHtcbiAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCwgcmFuZ2UuaGVhZC5jaCkpKVxuICAgICAgICAgIHsgaW5kZW50ZWQgPSBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsIFwic21hcnRcIik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChpbmRlbnRlZCkgeyBzaWduYWxMYXRlcihjbSwgXCJlbGVjdHJpY0lucHV0XCIsIGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29weWFibGVSYW5nZXMoY20pIHtcbiAgICB2YXIgdGV4dCA9IFtdLCByYW5nZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZSA9IGNtLmRvYy5zZWwucmFuZ2VzW2ldLmhlYWQubGluZTtcbiAgICAgIHZhciBsaW5lUmFuZ2UgPSB7YW5jaG9yOiBQb3MobGluZSwgMCksIGhlYWQ6IFBvcyhsaW5lICsgMSwgMCl9O1xuICAgICAgcmFuZ2VzLnB1c2gobGluZVJhbmdlKTtcbiAgICAgIHRleHQucHVzaChjbS5nZXRSYW5nZShsaW5lUmFuZ2UuYW5jaG9yLCBsaW5lUmFuZ2UuaGVhZCkpO1xuICAgIH1cbiAgICByZXR1cm4ge3RleHQ6IHRleHQsIHJhbmdlczogcmFuZ2VzfVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzYWJsZUJyb3dzZXJNYWdpYyhmaWVsZCwgc3BlbGxjaGVjaywgYXV0b2NvcnJlY3QsIGF1dG9jYXBpdGFsaXplKSB7XG4gICAgZmllbGQuc2V0QXR0cmlidXRlKFwiYXV0b2NvcnJlY3RcIiwgYXV0b2NvcnJlY3QgPyBcIlwiIDogXCJvZmZcIik7XG4gICAgZmllbGQuc2V0QXR0cmlidXRlKFwiYXV0b2NhcGl0YWxpemVcIiwgYXV0b2NhcGl0YWxpemUgPyBcIlwiIDogXCJvZmZcIik7XG4gICAgZmllbGQuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCAhIXNwZWxsY2hlY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gaGlkZGVuVGV4dGFyZWEoKSB7XG4gICAgdmFyIHRlID0gZWx0KFwidGV4dGFyZWFcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogLTFlbTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmVcIik7XG4gICAgdmFyIGRpdiA9IGVsdChcImRpdlwiLCBbdGVdLCBudWxsLCBcIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7XCIpO1xuICAgIC8vIFRoZSB0ZXh0YXJlYSBpcyBrZXB0IHBvc2l0aW9uZWQgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgdGhlXG4gICAgLy8gZmFjdCB0aGF0IGl0J2xsIGJlIHNjcm9sbGVkIGludG8gdmlldyBvbiBpbnB1dCBmcm9tIHNjcm9sbGluZ1xuICAgIC8vIG91ciBmYWtlIGN1cnNvciBvdXQgb2Ygdmlldy4gT24gd2Via2l0LCB3aGVuIHdyYXA9b2ZmLCBwYXN0ZSBpc1xuICAgIC8vIHZlcnkgc2xvdy4gU28gbWFrZSB0aGUgYXJlYSB3aWRlIGluc3RlYWQuXG4gICAgaWYgKHdlYmtpdCkgeyB0ZS5zdHlsZS53aWR0aCA9IFwiMTAwMHB4XCI7IH1cbiAgICBlbHNlIHsgdGUuc2V0QXR0cmlidXRlKFwid3JhcFwiLCBcIm9mZlwiKTsgfVxuICAgIC8vIElmIGJvcmRlcjogMDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KVxuICAgIGlmIChpb3MpIHsgdGUuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgYmxhY2tcIjsgfVxuICAgIGRpc2FibGVCcm93c2VyTWFnaWModGUpO1xuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1ldGhvZE9wKGYpIG1lYW5zXG4gIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInLlxuXG4gIC8vIFRoaXMgaXMgbm90IHRoZSBjb21wbGV0ZSBzZXQgb2YgZWRpdG9yIG1ldGhvZHMuIE1vc3Qgb2YgdGhlXG4gIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50b1xuICAvLyBDb2RlTWlycm9yLnByb3RvdHlwZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZFxuICAvLyBjb252ZW5pZW5jZS5cblxuICBmdW5jdGlvbiBhZGRFZGl0b3JNZXRob2RzKENvZGVNaXJyb3IpIHtcbiAgICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzO1xuXG4gICAgdmFyIGhlbHBlcnMgPSBDb2RlTWlycm9yLmhlbHBlcnMgPSB7fTtcblxuICAgIENvZGVNaXJyb3IucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IENvZGVNaXJyb3IsXG4gICAgICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgdGhpcy5kaXNwbGF5LmlucHV0LmZvY3VzKCk7fSxcblxuICAgICAgc2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLCBvbGQgPSBvcHRpb25zW29wdGlvbl07XG4gICAgICAgIGlmIChvcHRpb25zW29wdGlvbl0gPT0gdmFsdWUgJiYgb3B0aW9uICE9IFwibW9kZVwiKSB7IHJldHVybiB9XG4gICAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgICBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSlcbiAgICAgICAgICB7IG9wZXJhdGlvbih0aGlzLCBvcHRpb25IYW5kbGVyc1tvcHRpb25dKSh0aGlzLCB2YWx1ZSwgb2xkKTsgfVxuICAgICAgICBzaWduYWwodGhpcywgXCJvcHRpb25DaGFuZ2VcIiwgdGhpcywgb3B0aW9uKTtcbiAgICAgIH0sXG5cbiAgICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7cmV0dXJuIHRoaXMub3B0aW9uc1tvcHRpb25dfSxcbiAgICAgIGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9jfSxcblxuICAgICAgYWRkS2V5TWFwOiBmdW5jdGlvbihtYXAsIGJvdHRvbSkge1xuICAgICAgICB0aGlzLnN0YXRlLmtleU1hcHNbYm90dG9tID8gXCJwdXNoXCIgOiBcInVuc2hpZnRcIl0oZ2V0S2V5TWFwKG1hcCkpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUtleU1hcDogZnVuY3Rpb24obWFwKSB7XG4gICAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgeyBpZiAobWFwc1tpXSA9PSBtYXAgfHwgbWFwc1tpXS5uYW1lID09IG1hcCkge1xuICAgICAgICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0gfVxuICAgICAgfSxcblxuICAgICAgYWRkT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYywgb3B0aW9ucykge1xuICAgICAgICB2YXIgbW9kZSA9IHNwZWMudG9rZW4gPyBzcGVjIDogQ29kZU1pcnJvci5nZXRNb2RlKHRoaXMub3B0aW9ucywgc3BlYyk7XG4gICAgICAgIGlmIChtb2RlLnN0YXJ0U3RhdGUpIHsgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC5cIikgfVxuICAgICAgICBpbnNlcnRTb3J0ZWQodGhpcy5zdGF0ZS5vdmVybGF5cyxcbiAgICAgICAgICAgICAgICAgICAgIHttb2RlOiBtb2RlLCBtb2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlvbnMub3BhcXVlLFxuICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiAob3B0aW9ucyAmJiBvcHRpb25zLnByaW9yaXR5KSB8fCAwfSxcbiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvdmVybGF5KSB7IHJldHVybiBvdmVybGF5LnByaW9yaXR5OyB9KTtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7XG4gICAgICAgIHJlZ0NoYW5nZSh0aGlzKTtcbiAgICAgIH0pLFxuICAgICAgcmVtb3ZlT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYykge1xuICAgICAgICB2YXIgb3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIGN1ciA9IG92ZXJsYXlzW2ldLm1vZGVTcGVjO1xuICAgICAgICAgIGlmIChjdXIgPT0gc3BlYyB8fCB0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIGN1ci5uYW1lID09IHNwZWMpIHtcbiAgICAgICAgICAgIG92ZXJsYXlzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubW9kZUdlbisrO1xuICAgICAgICAgICAgcmVnQ2hhbmdlKHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcblxuICAgICAgaW5kZW50TGluZTogbWV0aG9kT3AoZnVuY3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGlyICE9IFwic3RyaW5nXCIgJiYgdHlwZW9mIGRpciAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKGRpciA9PSBudWxsKSB7IGRpciA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVudCA/IFwic21hcnRcIiA6IFwicHJldlwiOyB9XG4gICAgICAgICAgZWxzZSB7IGRpciA9IGRpciA/IFwiYWRkXCIgOiBcInN1YnRyYWN0XCI7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMaW5lKHRoaXMuZG9jLCBuKSkgeyBpbmRlbnRMaW5lKHRoaXMsIG4sIGRpciwgYWdncmVzc2l2ZSk7IH1cbiAgICAgIH0pLFxuICAgICAgaW5kZW50U2VsZWN0aW9uOiBtZXRob2RPcChmdW5jdGlvbihob3cpIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgICAgICBpZiAoIXJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgICAgIHZhciBmcm9tID0gcmFuZ2UuZnJvbSgpLCB0byA9IHJhbmdlLnRvKCk7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBNYXRoLm1heChlbmQsIGZyb20ubGluZSk7XG4gICAgICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksIHRvLmxpbmUgLSAodG8uY2ggPyAwIDogMSkpICsgMTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKVxuICAgICAgICAgICAgICB7IGluZGVudExpbmUodGhpcywgaiwgaG93KTsgfVxuICAgICAgICAgICAgdmFyIG5ld1JhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXM7XG4gICAgICAgICAgICBpZiAoZnJvbS5jaCA9PSAwICYmIHJhbmdlcy5sZW5ndGggPT0gbmV3UmFuZ2VzLmxlbmd0aCAmJiBuZXdSYW5nZXNbaV0uZnJvbSgpLmNoID4gMClcbiAgICAgICAgICAgICAgeyByZXBsYWNlT25lU2VsZWN0aW9uKHRoaXMuZG9jLCBpLCBuZXcgUmFuZ2UoZnJvbSwgbmV3UmFuZ2VzW2ldLnRvKCkpLCBzZWxfZG9udFNjcm9sbCk7IH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmhlYWQubGluZSA+IGVuZCkge1xuICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCByYW5nZS5oZWFkLmxpbmUsIGhvdywgdHJ1ZSk7XG4gICAgICAgICAgICBlbmQgPSByYW5nZS5oZWFkLmxpbmU7XG4gICAgICAgICAgICBpZiAoaSA9PSB0aGlzLmRvYy5zZWwucHJpbUluZGV4KSB7IGVuc3VyZUN1cnNvclZpc2libGUodGhpcyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrc1xuICAgICAgLy8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLlxuICAgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zLCBwcmVjaXNlKSB7XG4gICAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVjaXNlKVxuICAgICAgfSxcblxuICAgICAgZ2V0TGluZVRva2VuczogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkge1xuICAgICAgICByZXR1cm4gdGFrZVRva2VuKHRoaXMsIFBvcyhsaW5lKSwgcHJlY2lzZSwgdHJ1ZSlcbiAgICAgIH0sXG5cbiAgICAgIGdldFRva2VuVHlwZUF0OiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgcG9zKTtcbiAgICAgICAgdmFyIHN0eWxlcyA9IGdldExpbmVTdHlsZXModGhpcywgZ2V0TGluZSh0aGlzLmRvYywgcG9zLmxpbmUpKTtcbiAgICAgICAgdmFyIGJlZm9yZSA9IDAsIGFmdGVyID0gKHN0eWxlcy5sZW5ndGggLSAxKSAvIDIsIGNoID0gcG9zLmNoO1xuICAgICAgICB2YXIgdHlwZTtcbiAgICAgICAgaWYgKGNoID09IDApIHsgdHlwZSA9IHN0eWxlc1syXTsgfVxuICAgICAgICBlbHNlIHsgZm9yICg7Oykge1xuICAgICAgICAgIHZhciBtaWQgPSAoYmVmb3JlICsgYWZ0ZXIpID4+IDE7XG4gICAgICAgICAgaWYgKChtaWQgPyBzdHlsZXNbbWlkICogMiAtIDFdIDogMCkgPj0gY2gpIHsgYWZ0ZXIgPSBtaWQ7IH1cbiAgICAgICAgICBlbHNlIGlmIChzdHlsZXNbbWlkICogMiArIDFdIDwgY2gpIHsgYmVmb3JlID0gbWlkICsgMTsgfVxuICAgICAgICAgIGVsc2UgeyB0eXBlID0gc3R5bGVzW21pZCAqIDIgKyAyXTsgYnJlYWsgfVxuICAgICAgICB9IH1cbiAgICAgICAgdmFyIGN1dCA9IHR5cGUgPyB0eXBlLmluZGV4T2YoXCJvdmVybGF5IFwiKSA6IC0xO1xuICAgICAgICByZXR1cm4gY3V0IDwgMCA/IHR5cGUgOiBjdXQgPT0gMCA/IG51bGwgOiB0eXBlLnNsaWNlKDAsIGN1dCAtIDEpXG4gICAgICB9LFxuXG4gICAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB2YXIgbW9kZSA9IHRoaXMuZG9jLm1vZGU7XG4gICAgICAgIGlmICghbW9kZS5pbm5lck1vZGUpIHsgcmV0dXJuIG1vZGUgfVxuICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgdGhpcy5nZXRUb2tlbkF0KHBvcykuc3RhdGUpLm1vZGVcbiAgICAgIH0sXG5cbiAgICAgIGdldEhlbHBlcjogZnVuY3Rpb24ocG9zLCB0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhlbHBlcnMocG9zLCB0eXBlKVswXVxuICAgICAgfSxcblxuICAgICAgZ2V0SGVscGVyczogZnVuY3Rpb24ocG9zLCB0eXBlKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IFtdO1xuICAgICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHsgcmV0dXJuIGZvdW5kIH1cbiAgICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9zKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlW3R5cGVdID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoaGVscFttb2RlW3R5cGVdXSkgeyBmb3VuZC5wdXNoKGhlbHBbbW9kZVt0eXBlXV0pOyB9XG4gICAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVt0eXBlXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbCA9IGhlbHBbbW9kZVt0eXBlXVtpXV07XG4gICAgICAgICAgICBpZiAodmFsKSB7IGZvdW5kLnB1c2godmFsKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtb2RlLmhlbHBlclR5cGUgJiYgaGVscFttb2RlLmhlbHBlclR5cGVdKSB7XG4gICAgICAgICAgZm91bmQucHVzaChoZWxwW21vZGUuaGVscGVyVHlwZV0pO1xuICAgICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1lXSkge1xuICAgICAgICAgIGZvdW5kLnB1c2goaGVscFttb2RlLm5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBoZWxwLl9nbG9iYWwubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgIHZhciBjdXIgPSBoZWxwLl9nbG9iYWxbaSQxXTtcbiAgICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwgdGhpcykgJiYgaW5kZXhPZihmb3VuZCwgY3VyLnZhbCkgPT0gLTEpXG4gICAgICAgICAgICB7IGZvdW5kLnB1c2goY3VyLnZhbCk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgIH0sXG5cbiAgICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHtcbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jO1xuICAgICAgICBsaW5lID0gY2xpcExpbmUoZG9jLCBsaW5lID09IG51bGwgPyBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUpO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dEJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSkuc3RhdGVcbiAgICAgIH0sXG5cbiAgICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHtcbiAgICAgICAgdmFyIHBvcywgcmFuZ2UgPSB0aGlzLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgeyBwb3MgPSByYW5nZS5oZWFkOyB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzdGFydCA9PSBcIm9iamVjdFwiKSB7IHBvcyA9IGNsaXBQb3ModGhpcy5kb2MsIHN0YXJ0KTsgfVxuICAgICAgICBlbHNlIHsgcG9zID0gc3RhcnQgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOyB9XG4gICAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9zLCBtb2RlIHx8IFwicGFnZVwiKVxuICAgICAgfSxcblxuICAgICAgY2hhckNvb3JkczogZnVuY3Rpb24ocG9zLCBtb2RlKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKHRoaXMsIGNsaXBQb3ModGhpcy5kb2MsIHBvcyksIG1vZGUgfHwgXCJwYWdlXCIpXG4gICAgICB9LFxuXG4gICAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMsIG1vZGUpIHtcbiAgICAgICAgY29vcmRzID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIGNvb3JkcywgbW9kZSB8fCBcInBhZ2VcIik7XG4gICAgICAgIHJldHVybiBjb29yZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKVxuICAgICAgfSxcblxuICAgICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG1vZGUpIHtcbiAgICAgICAgaGVpZ2h0ID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIHt0b3A6IGhlaWdodCwgbGVmdDogMH0sIG1vZGUgfHwgXCJwYWdlXCIpLnRvcDtcbiAgICAgICAgcmV0dXJuIGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpXG4gICAgICB9LFxuICAgICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlLCBpbmNsdWRlV2lkZ2V0cykge1xuICAgICAgICB2YXIgZW5kID0gZmFsc2UsIGxpbmVPYmo7XG4gICAgICAgIGlmICh0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdmFyIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxO1xuICAgICAgICAgIGlmIChsaW5lIDwgdGhpcy5kb2MuZmlyc3QpIHsgbGluZSA9IHRoaXMuZG9jLmZpcnN0OyB9XG4gICAgICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH1cbiAgICAgICAgICBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZU9iaiA9IGxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbSh0aGlzLCBsaW5lT2JqLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCBcInBhZ2VcIiwgaW5jbHVkZVdpZGdldHMgfHwgZW5kKS50b3AgK1xuICAgICAgICAgIChlbmQgPyB0aGlzLmRvYy5oZWlnaHQgLSBoZWlnaHRBdExpbmUobGluZU9iaikgOiAwKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdFRleHRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpIH0sXG4gICAgICBkZWZhdWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkpIH0sXG5cbiAgICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkudmlld0Zyb20sIHRvOiB0aGlzLmRpc3BsYXkudmlld1RvfX0sXG5cbiAgICAgIGFkZFdpZGdldDogZnVuY3Rpb24ocG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7XG4gICAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5O1xuICAgICAgICBwb3MgPSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSk7XG4gICAgICAgIHZhciB0b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7XG4gICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7XG4gICAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICBpZiAodmVydCA9PSBcIm92ZXJcIikge1xuICAgICAgICAgIHRvcCA9IHBvcy50b3A7XG4gICAgICAgIH0gZWxzZSBpZiAodmVydCA9PSBcImFib3ZlXCIgfHwgdmVydCA9PSBcIm5lYXJcIikge1xuICAgICAgICAgIHZhciB2c3BhY2UgPSBNYXRoLm1heChkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB0aGlzLmRvYy5oZWlnaHQpLFxuICAgICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGgsIGRpc3BsYXkubGluZVNwYWNlLmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAvLyBEZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGFib3ZlIChpZiBzcGVjaWZpZWQgYW5kIHBvc3NpYmxlKTsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gcG9zaXRpb25pbmcgYmVsb3dcbiAgICAgICAgICBpZiAoKHZlcnQgPT0gJ2Fib3ZlJyB8fCBwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2UpICYmIHBvcy50b3AgPiBub2RlLm9mZnNldEhlaWdodClcbiAgICAgICAgICAgIHsgdG9wID0gcG9zLnRvcCAtIG5vZGUub2Zmc2V0SGVpZ2h0OyB9XG4gICAgICAgICAgZWxzZSBpZiAocG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0SGVpZ2h0IDw9IHZzcGFjZSlcbiAgICAgICAgICAgIHsgdG9wID0gcG9zLmJvdHRvbTsgfVxuICAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSlcbiAgICAgICAgICAgIHsgbGVmdCA9IGhzcGFjZSAtIG5vZGUub2Zmc2V0V2lkdGg7IH1cbiAgICAgICAgfVxuICAgICAgICBub2RlLnN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcbiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9IFwiXCI7XG4gICAgICAgIGlmIChob3JpeiA9PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICBsZWZ0ID0gZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9IFwiMHB4XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhvcml6ID09IFwibGVmdFwiKSB7IGxlZnQgPSAwOyB9XG4gICAgICAgICAgZWxzZSBpZiAoaG9yaXogPT0gXCJtaWRkbGVcIikgeyBsZWZ0ID0gKGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoKSAvIDI7IH1cbiAgICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGwpXG4gICAgICAgICAgeyBzY3JvbGxJbnRvVmlldyh0aGlzLCB7bGVmdDogbGVmdCwgdG9wOiB0b3AsIHJpZ2h0OiBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgYm90dG9tOiB0b3AgKyBub2RlLm9mZnNldEhlaWdodH0pOyB9XG4gICAgICB9LFxuXG4gICAgICB0cmlnZ2VyT25LZXlEb3duOiBtZXRob2RPcChvbktleURvd24pLFxuICAgICAgdHJpZ2dlck9uS2V5UHJlc3M6IG1ldGhvZE9wKG9uS2V5UHJlc3MpLFxuICAgICAgdHJpZ2dlck9uS2V5VXA6IG9uS2V5VXAsXG4gICAgICB0cmlnZ2VyT25Nb3VzZURvd246IG1ldGhvZE9wKG9uTW91c2VEb3duKSxcblxuICAgICAgZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCkge1xuICAgICAgICBpZiAoY29tbWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSlcbiAgICAgICAgICB7IHJldHVybiBjb21tYW5kc1tjbWRdLmNhbGwobnVsbCwgdGhpcykgfVxuICAgICAgfSxcblxuICAgICAgdHJpZ2dlckVsZWN0cmljOiBtZXRob2RPcChmdW5jdGlvbih0ZXh0KSB7IHRyaWdnZXJFbGVjdHJpYyh0aGlzLCB0ZXh0KTsgfSksXG5cbiAgICAgIGZpbmRQb3NIOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7XG4gICAgICAgIHZhciBkaXIgPSAxO1xuICAgICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfVxuICAgICAgICB2YXIgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHtcbiAgICAgICAgICBjdXIgPSBmaW5kUG9zSCh0aGlzLmRvYywgY3VyLCBkaXIsIHVuaXQsIHZpc3VhbGx5KTtcbiAgICAgICAgICBpZiAoY3VyLmhpdFNpZGUpIHsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJcbiAgICAgIH0sXG5cbiAgICAgIG1vdmVIOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMkMS5kaXNwbGF5LnNoaWZ0IHx8IHRoaXMkMS5kb2MuZXh0ZW5kIHx8IHJhbmdlLmVtcHR5KCkpXG4gICAgICAgICAgICB7IHJldHVybiBmaW5kUG9zSCh0aGlzJDEuZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIHRoaXMkMS5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSkgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHsgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpIH1cbiAgICAgICAgfSwgc2VsX21vdmUpO1xuICAgICAgfSksXG5cbiAgICAgIGRlbGV0ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYztcbiAgICAgICAgaWYgKHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpKVxuICAgICAgICAgIHsgZG9jLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCIrZGVsZXRlXCIpOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IGRlbGV0ZU5lYXJTZWxlY3Rpb24odGhpcywgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBmaW5kUG9zSChkb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyB7ZnJvbTogb3RoZXIsIHRvOiByYW5nZS5oZWFkfSA6IHtmcm9tOiByYW5nZS5oZWFkLCB0bzogb3RoZXJ9XG4gICAgICAgICAgfSk7IH1cbiAgICAgIH0pLFxuXG4gICAgICBmaW5kUG9zVjogZnVuY3Rpb24oZnJvbSwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7XG4gICAgICAgIHZhciBkaXIgPSAxLCB4ID0gZ29hbENvbHVtbjtcbiAgICAgICAgaWYgKGFtb3VudCA8IDApIHsgZGlyID0gLTE7IGFtb3VudCA9IC1hbW91bnQ7IH1cbiAgICAgICAgdmFyIGN1ciA9IGNsaXBQb3ModGhpcy5kb2MsIGZyb20pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgKytpKSB7XG4gICAgICAgICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjdXIsIFwiZGl2XCIpO1xuICAgICAgICAgIGlmICh4ID09IG51bGwpIHsgeCA9IGNvb3Jkcy5sZWZ0OyB9XG4gICAgICAgICAgZWxzZSB7IGNvb3Jkcy5sZWZ0ID0geDsgfVxuICAgICAgICAgIGN1ciA9IGZpbmRQb3NWKHRoaXMsIGNvb3JkcywgZGlyLCB1bml0KTtcbiAgICAgICAgICBpZiAoY3VyLmhpdFNpZGUpIHsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJcbiAgICAgIH0sXG5cbiAgICAgIG1vdmVWOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jLCBnb2FscyA9IFtdO1xuICAgICAgICB2YXIgY29sbGFwc2UgPSAhdGhpcy5kaXNwbGF5LnNoaWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTtcbiAgICAgICAgZG9jLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICBpZiAoY29sbGFwc2UpXG4gICAgICAgICAgICB7IHJldHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKSB9XG4gICAgICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHModGhpcyQxLCByYW5nZS5oZWFkLCBcImRpdlwiKTtcbiAgICAgICAgICBpZiAocmFuZ2UuZ29hbENvbHVtbiAhPSBudWxsKSB7IGhlYWRQb3MubGVmdCA9IHJhbmdlLmdvYWxDb2x1bW47IH1cbiAgICAgICAgICBnb2Fscy5wdXNoKGhlYWRQb3MubGVmdCk7XG4gICAgICAgICAgdmFyIHBvcyA9IGZpbmRQb3NWKHRoaXMkMSwgaGVhZFBvcywgZGlyLCB1bml0KTtcbiAgICAgICAgICBpZiAodW5pdCA9PSBcInBhZ2VcIiAmJiByYW5nZSA9PSBkb2Muc2VsLnByaW1hcnkoKSlcbiAgICAgICAgICAgIHsgYWRkVG9TY3JvbGxUb3AodGhpcyQxLCBjaGFyQ29vcmRzKHRoaXMkMSwgcG9zLCBcImRpdlwiKS50b3AgLSBoZWFkUG9zLnRvcCk7IH1cbiAgICAgICAgICByZXR1cm4gcG9zXG4gICAgICAgIH0sIHNlbF9tb3ZlKTtcbiAgICAgICAgaWYgKGdvYWxzLmxlbmd0aCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHsgZG9jLnNlbC5yYW5nZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ldOyB9IH1cbiAgICAgIH0pLFxuXG4gICAgICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuXG4gICAgICBmaW5kV29yZEF0OiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jLCBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0O1xuICAgICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDtcbiAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICB2YXIgaGVscGVyID0gdGhpcy5nZXRIZWxwZXIocG9zLCBcIndvcmRDaGFyc1wiKTtcbiAgICAgICAgICBpZiAoKHBvcy5zdGlja3kgPT0gXCJiZWZvcmVcIiB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSB7IC0tc3RhcnQ7IH0gZWxzZSB7ICsrZW5kOyB9XG4gICAgICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTtcbiAgICAgICAgICB2YXIgY2hlY2sgPSBpc1dvcmRDaGFyKHN0YXJ0Q2hhciwgaGVscGVyKVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIGlzV29yZENoYXIoY2gsIGhlbHBlcik7IH1cbiAgICAgICAgICAgIDogL1xccy8udGVzdChzdGFydENoYXIpID8gZnVuY3Rpb24gKGNoKSB7IHJldHVybiAvXFxzLy50ZXN0KGNoKTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuICghL1xccy8udGVzdChjaCkgJiYgIWlzV29yZENoYXIoY2gpKTsgfTtcbiAgICAgICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSB7IC0tc3RhcnQ7IH1cbiAgICAgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgY2hlY2sobGluZS5jaGFyQXQoZW5kKSkpIHsgKytlbmQ7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpXG4gICAgICB9LFxuXG4gICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09IHRoaXMuc3RhdGUub3ZlcndyaXRlKSB7IHJldHVybiB9XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSlcbiAgICAgICAgICB7IGFkZENsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIik7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgcm1DbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCBcIkNvZGVNaXJyb3Itb3ZlcndyaXRlXCIpOyB9XG5cbiAgICAgICAgc2lnbmFsKHRoaXMsIFwib3ZlcndyaXRlVG9nZ2xlXCIsIHRoaXMsIHRoaXMuc3RhdGUub3ZlcndyaXRlKTtcbiAgICAgIH0sXG4gICAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKSA9PSBhY3RpdmVFbHQoKSB9LFxuICAgICAgaXNSZWFkT25seTogZnVuY3Rpb24oKSB7IHJldHVybiAhISh0aGlzLm9wdGlvbnMucmVhZE9ubHkgfHwgdGhpcy5kb2MuY2FudEVkaXQpIH0sXG5cbiAgICAgIHNjcm9sbFRvOiBtZXRob2RPcChmdW5jdGlvbiAoeCwgeSkgeyBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCB4LCB5KTsgfSksXG4gICAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNjcm9sbGVyID0gdGhpcy5kaXNwbGF5LnNjcm9sbGVyO1xuICAgICAgICByZXR1cm4ge2xlZnQ6IHNjcm9sbGVyLnNjcm9sbExlZnQsIHRvcDogc2Nyb2xsZXIuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsR2FwKHRoaXMpIC0gdGhpcy5kaXNwbGF5LmJhckhlaWdodCxcbiAgICAgICAgICAgICAgICB3aWR0aDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBzY3JvbGxHYXAodGhpcykgLSB0aGlzLmRpc3BsYXkuYmFyV2lkdGgsXG4gICAgICAgICAgICAgICAgY2xpZW50SGVpZ2h0OiBkaXNwbGF5SGVpZ2h0KHRoaXMpLCBjbGllbnRXaWR0aDogZGlzcGxheVdpZHRoKHRoaXMpfVxuICAgICAgfSxcblxuICAgICAgc2Nyb2xsSW50b1ZpZXc6IG1ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4pIHtcbiAgICAgICAgaWYgKHJhbmdlID09IG51bGwpIHtcbiAgICAgICAgICByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwucHJpbWFyeSgpLmhlYWQsIHRvOiBudWxsfTtcbiAgICAgICAgICBpZiAobWFyZ2luID09IG51bGwpIHsgbWFyZ2luID0gdGhpcy5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbjsgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYW5nZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgcmFuZ2UgPSB7ZnJvbTogUG9zKHJhbmdlLCAwKSwgdG86IG51bGx9O1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmZyb20gPT0gbnVsbCkge1xuICAgICAgICAgIHJhbmdlID0ge2Zyb206IHJhbmdlLCB0bzogbnVsbH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYW5nZS50bykgeyByYW5nZS50byA9IHJhbmdlLmZyb207IH1cbiAgICAgICAgcmFuZ2UubWFyZ2luID0gbWFyZ2luIHx8IDA7XG5cbiAgICAgICAgaWYgKHJhbmdlLmZyb20ubGluZSAhPSBudWxsKSB7XG4gICAgICAgICAgc2Nyb2xsVG9SYW5nZSh0aGlzLCByYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsVG9Db29yZHNSYW5nZSh0aGlzLCByYW5nZS5mcm9tLCByYW5nZS50bywgcmFuZ2UubWFyZ2luKTtcbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgICAgIHNldFNpemU6IG1ldGhvZE9wKGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGludGVycHJldCA9IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIiB8fCAvXlxcZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArIFwicHhcIiA6IHZhbDsgfTtcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHsgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOyB9XG4gICAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgeyB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBpbnRlcnByZXQoaGVpZ2h0KTsgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOyB9XG4gICAgICAgIHZhciBsaW5lTm8gPSB0aGlzLmRpc3BsYXkudmlld0Zyb207XG4gICAgICAgIHRoaXMuZG9jLml0ZXIobGluZU5vLCB0aGlzLmRpc3BsYXkudmlld1RvLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB7IGlmIChsaW5lLndpZGdldHNbaV0ubm9IU2Nyb2xsKSB7IHJlZ0xpbmVDaGFuZ2UodGhpcyQxLCBsaW5lTm8sIFwid2lkZ2V0XCIpOyBicmVhayB9IH0gfVxuICAgICAgICAgICsrbGluZU5vO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHNpZ25hbCh0aGlzLCBcInJlZnJlc2hcIiwgdGhpcyk7XG4gICAgICB9KSxcblxuICAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKX0sXG4gICAgICBzdGFydE9wZXJhdGlvbjogZnVuY3Rpb24oKXtyZXR1cm4gc3RhcnRPcGVyYXRpb24odGhpcyl9LFxuICAgICAgZW5kT3BlcmF0aW9uOiBmdW5jdGlvbigpe3JldHVybiBlbmRPcGVyYXRpb24odGhpcyl9LFxuXG4gICAgICByZWZyZXNoOiBtZXRob2RPcChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9sZEhlaWdodCA9IHRoaXMuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0O1xuICAgICAgICByZWdDaGFuZ2UodGhpcyk7XG4gICAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICBjbGVhckNhY2hlcyh0aGlzKTtcbiAgICAgICAgc2Nyb2xsVG9Db29yZHModGhpcywgdGhpcy5kb2Muc2Nyb2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTtcbiAgICAgICAgdXBkYXRlR3V0dGVyU3BhY2UodGhpcy5kaXNwbGF5KTtcbiAgICAgICAgaWYgKG9sZEhlaWdodCA9PSBudWxsIHx8IE1hdGguYWJzKG9sZEhlaWdodCAtIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KSkgPiAuNSlcbiAgICAgICAgICB7IGVzdGltYXRlTGluZUhlaWdodHModGhpcyk7IH1cbiAgICAgICAgc2lnbmFsKHRoaXMsIFwicmVmcmVzaFwiLCB0aGlzKTtcbiAgICAgIH0pLFxuXG4gICAgICBzd2FwRG9jOiBtZXRob2RPcChmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgdmFyIG9sZCA9IHRoaXMuZG9jO1xuICAgICAgICBvbGQuY20gPSBudWxsO1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgdGV4dCBzZWxlY3Rpb24gaWYgYW55ICgjNTgyMSlcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dCkgeyB0aGlzLnN0YXRlLnNlbGVjdGluZ1RleHQoKTsgfVxuICAgICAgICBhdHRhY2hEb2ModGhpcywgZG9jKTtcbiAgICAgICAgY2xlYXJDYWNoZXModGhpcyk7XG4gICAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgICBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCBkb2Muc2Nyb2xsTGVmdCwgZG9jLnNjcm9sbFRvcCk7XG4gICAgICAgIHRoaXMuY3VyT3AuZm9yY2VTY3JvbGwgPSB0cnVlO1xuICAgICAgICBzaWduYWxMYXRlcih0aGlzLCBcInN3YXBEb2NcIiwgdGhpcywgb2xkKTtcbiAgICAgICAgcmV0dXJuIG9sZFxuICAgICAgfSksXG5cbiAgICAgIHBocmFzZTogZnVuY3Rpb24ocGhyYXNlVGV4dCkge1xuICAgICAgICB2YXIgcGhyYXNlcyA9IHRoaXMub3B0aW9ucy5waHJhc2VzO1xuICAgICAgICByZXR1cm4gcGhyYXNlcyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGhyYXNlcywgcGhyYXNlVGV4dCkgPyBwaHJhc2VzW3BocmFzZVRleHRdIDogcGhyYXNlVGV4dFxuICAgICAgfSxcblxuICAgICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCl9LFxuICAgICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyfSxcbiAgICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyfSxcbiAgICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzfVxuICAgIH07XG4gICAgZXZlbnRNaXhpbihDb2RlTWlycm9yKTtcblxuICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSB7IGhlbHBlcnNbdHlwZV0gPSBDb2RlTWlycm9yW3R5cGVdID0ge19nbG9iYWw6IFtdfTsgfVxuICAgICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlO1xuICAgIH07XG4gICAgQ29kZU1pcnJvci5yZWdpc3Rlckdsb2JhbEhlbHBlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHByZWRpY2F0ZSwgdmFsdWUpIHtcbiAgICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgaGVscGVyc1t0eXBlXS5fZ2xvYmFsLnB1c2goe3ByZWQ6IHByZWRpY2F0ZSwgdmFsOiB2YWx1ZX0pO1xuICAgIH07XG4gIH1cblxuICAvLyBVc2VkIGZvciBob3Jpem9udGFsIHJlbGF0aXZlIG1vdGlvbi4gRGlyIGlzIC0xIG9yIDEgKGxlZnQgb3JcbiAgLy8gcmlnaHQpLCB1bml0IGNhbiBiZSBcImNoYXJcIiwgXCJjb2x1bW5cIiAobGlrZSBjaGFyLCBidXQgZG9lc24ndFxuICAvLyBjcm9zcyBsaW5lIGJvdW5kYXJpZXMpLCBcIndvcmRcIiAoYWNyb3NzIG5leHQgd29yZCksIG9yIFwiZ3JvdXBcIiAodG9cbiAgLy8gdGhlIHN0YXJ0IG9mIG5leHQgZ3JvdXAgb2Ygd29yZCBvciBub24td29yZC1ub24td2hpdGVzcGFjZVxuICAvLyBjaGFycykuIFRoZSB2aXN1YWxseSBwYXJhbSBjb250cm9scyB3aGV0aGVyLCBpbiByaWdodC10by1sZWZ0XG4gIC8vIHRleHQsIGRpcmVjdGlvbiAxIG1lYW5zIHRvIG1vdmUgdG93YXJkcyB0aGUgbmV4dCBpbmRleCBpbiB0aGVcbiAgLy8gc3RyaW5nLCBvciB0b3dhcmRzIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50XG4gIC8vIHBvc2l0aW9uLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZVxuICAvLyBwcm9wZXJ0eSBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBmaW5kUG9zSChkb2MsIHBvcywgZGlyLCB1bml0LCB2aXN1YWxseSkge1xuICAgIHZhciBvbGRQb3MgPSBwb3M7XG4gICAgdmFyIG9yaWdEaXIgPSBkaXI7XG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpO1xuICAgIHZhciBsaW5lRGlyID0gdmlzdWFsbHkgJiYgZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiID8gLWRpciA6IGRpcjtcbiAgICBmdW5jdGlvbiBmaW5kTmV4dExpbmUoKSB7XG4gICAgICB2YXIgbCA9IHBvcy5saW5lICsgbGluZURpcjtcbiAgICAgIGlmIChsIDwgZG9jLmZpcnN0IHx8IGwgPj0gZG9jLmZpcnN0ICsgZG9jLnNpemUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHBvcyA9IG5ldyBQb3MobCwgcG9zLmNoLCBwb3Muc3RpY2t5KTtcbiAgICAgIHJldHVybiBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGwpXG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7XG4gICAgICB2YXIgbmV4dDtcbiAgICAgIGlmICh2aXN1YWxseSkge1xuICAgICAgICBuZXh0ID0gbW92ZVZpc3VhbGx5KGRvYy5jbSwgbGluZU9iaiwgcG9zLCBkaXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCA9IG1vdmVMb2dpY2FsbHkobGluZU9iaiwgcG9zLCBkaXIpO1xuICAgICAgfVxuICAgICAgaWYgKG5leHQgPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWJvdW5kVG9MaW5lICYmIGZpbmROZXh0TGluZSgpKVxuICAgICAgICAgIHsgcG9zID0gZW5kT2ZMaW5lKHZpc3VhbGx5LCBkb2MuY20sIGxpbmVPYmosIHBvcy5saW5lLCBsaW5lRGlyKTsgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zID0gbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHVuaXQgPT0gXCJjaGFyXCIpIHtcbiAgICAgIG1vdmVPbmNlKCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09IFwiY29sdW1uXCIpIHtcbiAgICAgIG1vdmVPbmNlKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PSBcIndvcmRcIiB8fCB1bml0ID09IFwiZ3JvdXBcIikge1xuICAgICAgdmFyIHNhd1R5cGUgPSBudWxsLCBncm91cCA9IHVuaXQgPT0gXCJncm91cFwiO1xuICAgICAgdmFyIGhlbHBlciA9IGRvYy5jbSAmJiBkb2MuY20uZ2V0SGVscGVyKHBvcywgXCJ3b3JkQ2hhcnNcIik7XG4gICAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkaXIgPCAwICYmICFtb3ZlT25jZSghZmlyc3QpKSB7IGJyZWFrIH1cbiAgICAgICAgdmFyIGN1ciA9IGxpbmVPYmoudGV4dC5jaGFyQXQocG9zLmNoKSB8fCBcIlxcblwiO1xuICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gXCJ3XCJcbiAgICAgICAgICA6IGdyb3VwICYmIGN1ciA9PSBcIlxcblwiID8gXCJuXCJcbiAgICAgICAgICA6ICFncm91cCB8fCAvXFxzLy50ZXN0KGN1cikgPyBudWxsXG4gICAgICAgICAgOiBcInBcIjtcbiAgICAgICAgaWYgKGdyb3VwICYmICFmaXJzdCAmJiAhdHlwZSkgeyB0eXBlID0gXCJzXCI7IH1cbiAgICAgICAgaWYgKHNhd1R5cGUgJiYgc2F3VHlwZSAhPSB0eXBlKSB7XG4gICAgICAgICAgaWYgKGRpciA8IDApIHtkaXIgPSAxOyBtb3ZlT25jZSgpOyBwb3Muc3RpY2t5ID0gXCJhZnRlclwiO31cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUpIHsgc2F3VHlwZSA9IHR5cGU7IH1cbiAgICAgICAgaWYgKGRpciA+IDAgJiYgIW1vdmVPbmNlKCFmaXJzdCkpIHsgYnJlYWsgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gc2tpcEF0b21pYyhkb2MsIHBvcywgb2xkUG9zLCBvcmlnRGlyLCB0cnVlKTtcbiAgICBpZiAoZXF1YWxDdXJzb3JQb3Mob2xkUG9zLCByZXN1bHQpKSB7IHJlc3VsdC5oaXRTaWRlID0gdHJ1ZTsgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIEZvciByZWxhdGl2ZSB2ZXJ0aWNhbCBtb3ZlbWVudC4gRGlyIG1heSBiZSAtMSBvciAxLiBVbml0IGNhbiBiZVxuICAvLyBcInBhZ2VcIiBvciBcImxpbmVcIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWVcbiAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0KSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5O1xuICAgIGlmICh1bml0ID09IFwicGFnZVwiKSB7XG4gICAgICB2YXIgcGFnZVNpemUgPSBNYXRoLm1pbihjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7XG4gICAgICB2YXIgbW92ZUFtb3VudCA9IE1hdGgubWF4KHBhZ2VTaXplIC0gLjUgKiB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCAzKTtcbiAgICAgIHkgPSAoZGlyID4gMCA/IHBvcy5ib3R0b20gOiBwb3MudG9wKSArIGRpciAqIG1vdmVBbW91bnQ7XG5cbiAgICB9IGVsc2UgaWYgKHVuaXQgPT0gXCJsaW5lXCIpIHtcbiAgICAgIHkgPSBkaXIgPiAwID8gcG9zLmJvdHRvbSArIDMgOiBwb3MudG9wIC0gMztcbiAgICB9XG4gICAgdmFyIHRhcmdldDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB0YXJnZXQgPSBjb29yZHNDaGFyKGNtLCB4LCB5KTtcbiAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIHsgYnJlYWsgfVxuICAgICAgaWYgKGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0LmhpdFNpZGUgPSB0cnVlOyBicmVhayB9XG4gICAgICB5ICs9IGRpciAqIDU7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRcbiAgfVxuXG4gIC8vIENPTlRFTlRFRElUQUJMRSBJTlBVVCBTVFlMRVxuXG4gIHZhciBDb250ZW50RWRpdGFibGVJbnB1dCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgdGhpcy5jbSA9IGNtO1xuICAgIHRoaXMubGFzdEFuY2hvck5vZGUgPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSB0aGlzLmxhc3RGb2N1c05vZGUgPSB0aGlzLmxhc3RGb2N1c09mZnNldCA9IG51bGw7XG4gICAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gICAgdGhpcy5ncmFjZVBlcmlvZCA9IGZhbHNlO1xuICAgIHRoaXMucmVhZERPTVRpbWVvdXQgPSBudWxsO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGRpc3BsYXkpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0ID0gdGhpcywgY20gPSBpbnB1dC5jbTtcbiAgICB2YXIgZGl2ID0gaW5wdXQuZGl2ID0gZGlzcGxheS5saW5lRGl2O1xuICAgIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2LCBjbS5vcHRpb25zLnNwZWxsY2hlY2ssIGNtLm9wdGlvbnMuYXV0b2NvcnJlY3QsIGNtLm9wdGlvbnMuYXV0b2NhcGl0YWxpemUpO1xuXG4gICAgb24oZGl2LCBcInBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGhhbmRsZVBhc3RlKGUsIGNtKSkgeyByZXR1cm4gfVxuICAgICAgLy8gSUUgZG9lc24ndCBmaXJlIGlucHV0IGV2ZW50cywgc28gd2Ugc2NoZWR1bGUgYSByZWFkIGZvciB0aGUgcGFzdGVkIGNvbnRlbnQgaW4gdGhpcyB3YXlcbiAgICAgIGlmIChpZV92ZXJzaW9uIDw9IDExKSB7IHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEudXBkYXRlRnJvbURPTSgpOyB9KSwgMjApOyB9XG4gICAgfSk7XG5cbiAgICBvbihkaXYsIFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdGhpcyQxLmNvbXBvc2luZyA9IHtkYXRhOiBlLmRhdGEsIGRvbmU6IGZhbHNlfTtcbiAgICB9KTtcbiAgICBvbihkaXYsIFwiY29tcG9zaXRpb251cGRhdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghdGhpcyQxLmNvbXBvc2luZykgeyB0aGlzJDEuY29tcG9zaW5nID0ge2RhdGE6IGUuZGF0YSwgZG9uZTogZmFsc2V9OyB9XG4gICAgfSk7XG4gICAgb24oZGl2LCBcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgICBpZiAoZS5kYXRhICE9IHRoaXMkMS5jb21wb3NpbmcuZGF0YSkgeyB0aGlzJDEucmVhZEZyb21ET01Tb29uKCk7IH1cbiAgICAgICAgdGhpcyQxLmNvbXBvc2luZy5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG9uKGRpdiwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlucHV0LmZvcmNlQ29tcG9zaXRpb25FbmQoKTsgfSk7XG5cbiAgICBvbihkaXYsIFwiaW5wdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCF0aGlzJDEuY29tcG9zaW5nKSB7IHRoaXMkMS5yZWFkRnJvbURPTVNvb24oKTsgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gb25Db3B5Q3V0KGUpIHtcbiAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiBmYWxzZSwgdGV4dDogY20uZ2V0U2VsZWN0aW9ucygpfSk7XG4gICAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikgeyBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpOyB9XG4gICAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiB0cnVlLCB0ZXh0OiByYW5nZXMudGV4dH0pO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY3V0XCIpIHtcbiAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCAwLCBzZWxfZG9udFNjcm9sbCk7XG4gICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XG4gICAgICAgIGUuY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKTtcbiAgICAgICAgLy8gaU9TIGV4cG9zZXMgdGhlIGNsaXBib2FyZCBBUEksIGJ1dCBzZWVtcyB0byBkaXNjYXJkIGNvbnRlbnQgaW5zZXJ0ZWQgaW50byBpdFxuICAgICAgICBlLmNsaXBib2FyZERhdGEuc2V0RGF0YShcIlRleHRcIiwgY29udGVudCk7XG4gICAgICAgIGlmIChlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcIlRleHRcIikgPT0gY29udGVudCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT2xkLWZhc2hpb25lZCBicmllZmx5LWZvY3VzLWEtdGV4dGFyZWEgaGFja1xuICAgICAgdmFyIGtsdWRnZSA9IGhpZGRlblRleHRhcmVhKCksIHRlID0ga2x1ZGdlLmZpcnN0Q2hpbGQ7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKTtcbiAgICAgIHRlLnZhbHVlID0gbGFzdENvcGllZC50ZXh0LmpvaW4oXCJcXG5cIik7XG4gICAgICB2YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgc2VsZWN0SW5wdXQodGUpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGtsdWRnZSk7XG4gICAgICAgIGhhZEZvY3VzLmZvY3VzKCk7XG4gICAgICAgIGlmIChoYWRGb2N1cyA9PSBkaXYpIHsgaW5wdXQuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsgfVxuICAgICAgfSwgNTApO1xuICAgIH1cbiAgICBvbihkaXYsIFwiY29weVwiLCBvbkNvcHlDdXQpO1xuICAgIG9uKGRpdiwgXCJjdXRcIiwgb25Db3B5Q3V0KTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucHJlcGFyZVNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbih0aGlzLmNtLCBmYWxzZSk7XG4gICAgcmVzdWx0LmZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSB0aGlzLmRpdjtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNob3dTZWxlY3Rpb24gPSBmdW5jdGlvbiAoaW5mbywgdGFrZUZvY3VzKSB7XG4gICAgaWYgKCFpbmZvIHx8ICF0aGlzLmNtLmRpc3BsYXkudmlldy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICBpZiAoaW5mby5mb2N1cyB8fCB0YWtlRm9jdXMpIHsgdGhpcy5zaG93UHJpbWFyeVNlbGVjdGlvbigpOyB9XG4gICAgdGhpcy5zaG93TXVsdGlwbGVTZWxlY3Rpb25zKGluZm8pO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY20uZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuZ2V0U2VsZWN0aW9uKClcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd1ByaW1hcnlTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksIGNtID0gdGhpcy5jbSwgcHJpbSA9IGNtLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgIHZhciBmcm9tID0gcHJpbS5mcm9tKCksIHRvID0gcHJpbS50bygpO1xuXG4gICAgaWYgKGNtLmRpc3BsYXkudmlld1RvID09IGNtLmRpc3BsYXkudmlld0Zyb20gfHwgZnJvbS5saW5lID49IGNtLmRpc3BsYXkudmlld1RvIHx8IHRvLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgY3VyQW5jaG9yID0gZG9tVG9Qb3MoY20sIHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTtcbiAgICB2YXIgY3VyRm9jdXMgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgICBpZiAoY3VyQW5jaG9yICYmICFjdXJBbmNob3IuYmFkICYmIGN1ckZvY3VzICYmICFjdXJGb2N1cy5iYWQgJiZcbiAgICAgICAgY21wKG1pblBvcyhjdXJBbmNob3IsIGN1ckZvY3VzKSwgZnJvbSkgPT0gMCAmJlxuICAgICAgICBjbXAobWF4UG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCB0bykgPT0gMClcbiAgICAgIHsgcmV0dXJuIH1cblxuICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS52aWV3O1xuICAgIHZhciBzdGFydCA9IChmcm9tLmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiBwb3NUb0RPTShjbSwgZnJvbSkpIHx8XG4gICAgICAgIHtub2RlOiB2aWV3WzBdLm1lYXN1cmUubWFwWzJdLCBvZmZzZXQ6IDB9O1xuICAgIHZhciBlbmQgPSB0by5saW5lIDwgY20uZGlzcGxheS52aWV3VG8gJiYgcG9zVG9ET00oY20sIHRvKTtcbiAgICBpZiAoIWVuZCkge1xuICAgICAgdmFyIG1lYXN1cmUgPSB2aWV3W3ZpZXcubGVuZ3RoIC0gMV0ubWVhc3VyZTtcbiAgICAgIHZhciBtYXAgPSBtZWFzdXJlLm1hcHMgPyBtZWFzdXJlLm1hcHNbbWVhc3VyZS5tYXBzLmxlbmd0aCAtIDFdIDogbWVhc3VyZS5tYXA7XG4gICAgICBlbmQgPSB7bm9kZTogbWFwW21hcC5sZW5ndGggLSAxXSwgb2Zmc2V0OiBtYXBbbWFwLmxlbmd0aCAtIDJdIC0gbWFwW21hcC5sZW5ndGggLSAzXX07XG4gICAgfVxuXG4gICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgb2xkID0gc2VsLnJhbmdlQ291bnQgJiYgc2VsLmdldFJhbmdlQXQoMCksIHJuZztcbiAgICB0cnkgeyBybmcgPSByYW5nZShzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQsIGVuZC5vZmZzZXQsIGVuZC5ub2RlKTsgfVxuICAgIGNhdGNoKGUpIHt9IC8vIE91ciBtb2RlbCBvZiB0aGUgRE9NIG1pZ2h0IGJlIG91dGRhdGVkLCBpbiB3aGljaCBjYXNlIHRoZSByYW5nZSB3ZSB0cnkgdG8gc2V0IGNhbiBiZSBpbXBvc3NpYmxlXG4gICAgaWYgKHJuZykge1xuICAgICAgaWYgKCFnZWNrbyAmJiBjbS5zdGF0ZS5mb2N1c2VkKSB7XG4gICAgICAgIHNlbC5jb2xsYXBzZShzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgICB9XG4gICAgICBpZiAob2xkICYmIHNlbC5hbmNob3JOb2RlID09IG51bGwpIHsgc2VsLmFkZFJhbmdlKG9sZCk7IH1cbiAgICAgIGVsc2UgaWYgKGdlY2tvKSB7IHRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpOyB9XG4gICAgfVxuICAgIHRoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc3RhcnRHcmFjZVBlcmlvZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZ3JhY2VQZXJpb2QpO1xuICAgIHRoaXMuZ3JhY2VQZXJpb2QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMkMS5ncmFjZVBlcmlvZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMkMS5zZWxlY3Rpb25DaGFuZ2VkKCkpXG4gICAgICAgIHsgdGhpcyQxLmNtLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7IH0pOyB9XG4gICAgfSwgMjApO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zaG93TXVsdGlwbGVTZWxlY3Rpb25zID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuY3Vyc29yRGl2LCBpbmZvLmN1cnNvcnMpO1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHRoaXMuY20uZGlzcGxheS5zZWxlY3Rpb25EaXYsIGluZm8uc2VsZWN0aW9uKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVtZW1iZXJTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHNlbC5hbmNob3JOb2RlOyB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgIHRoaXMubGFzdEZvY3VzTm9kZSA9IHNlbC5mb2N1c05vZGU7IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0O1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zZWxlY3Rpb25JbkVkaXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbC5yYW5nZUNvdW50KSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5vZGUgPSBzZWwuZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICByZXR1cm4gY29udGFpbnModGhpcy5kaXYsIG5vZGUpXG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gXCJub2N1cnNvclwiKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IHRoaXMuZGl2KVxuICAgICAgICB7IHRoaXMuc2hvd1NlbGVjdGlvbih0aGlzLnByZXBhcmVTZWxlY3Rpb24oKSwgdHJ1ZSk7IH1cbiAgICAgIHRoaXMuZGl2LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5kaXYuYmx1cigpOyB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZ2V0RmllbGQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRpdiB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZSB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dCA9IHRoaXM7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSlcbiAgICAgIHsgdGhpcy5wb2xsU2VsZWN0aW9uKCk7IH1cbiAgICBlbHNlXG4gICAgICB7IHJ1bkluT3AodGhpcy5jbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5wdXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7IH0pOyB9XG5cbiAgICBmdW5jdGlvbiBwb2xsKCkge1xuICAgICAgaWYgKGlucHV0LmNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICAgICAgaW5wdXQucG9sbFNlbGVjdGlvbigpO1xuICAgICAgICBpbnB1dC5wb2xsaW5nLnNldChpbnB1dC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNlbGVjdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHNlbC5hbmNob3JOb2RlICE9IHRoaXMubGFzdEFuY2hvck5vZGUgfHwgc2VsLmFuY2hvck9mZnNldCAhPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgfHxcbiAgICAgIHNlbC5mb2N1c05vZGUgIT0gdGhpcy5sYXN0Rm9jdXNOb2RlIHx8IHNlbC5mb2N1c09mZnNldCAhPSB0aGlzLmxhc3RGb2N1c09mZnNldFxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5wb2xsU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwgfHwgdGhpcy5ncmFjZVBlcmlvZCB8fCAhdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKCkpIHsgcmV0dXJuIH1cbiAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKSwgY20gPSB0aGlzLmNtO1xuICAgIC8vIE9uIEFuZHJvaWQgQ2hyb21lICh2ZXJzaW9uIDU2LCBhdCBsZWFzdCksIGJhY2tzcGFjaW5nIGludG8gYW5cbiAgICAvLyB1bmVkaXRhYmxlIGJsb2NrIGVsZW1lbnQgd2lsbCBwdXQgdGhlIGN1cnNvciBpbiB0aGF0IGVsZW1lbnQsXG4gICAgLy8gYW5kIHRoZW4sIGJlY2F1c2UgaXQncyBub3QgZWRpdGFibGUsIGhpZGUgdGhlIHZpcnR1YWwga2V5Ym9hcmQuXG4gICAgLy8gQmVjYXVzZSBBbmRyb2lkIGRvZXNuJ3QgYWxsb3cgdXMgdG8gYWN0dWFsbHkgZGV0ZWN0IGJhY2tzcGFjZVxuICAgIC8vIHByZXNzZXMgaW4gYSBzYW5lIHdheSwgdGhpcyBjb2RlIGNoZWNrcyBmb3Igd2hlbiB0aGF0IGhhcHBlbnNcbiAgICAvLyBhbmQgc2ltdWxhdGVzIGEgYmFja3NwYWNlIHByZXNzIGluIHRoaXMgY2FzZS5cbiAgICBpZiAoYW5kcm9pZCAmJiBjaHJvbWUgJiYgdGhpcy5jbS5kaXNwbGF5Lmd1dHRlclNwZWNzLmxlbmd0aCAmJiBpc0luR3V0dGVyKHNlbC5hbmNob3JOb2RlKSkge1xuICAgICAgdGhpcy5jbS50cmlnZ2VyT25LZXlEb3duKHt0eXBlOiBcImtleWRvd25cIiwga2V5Q29kZTogOCwgcHJldmVudERlZmF1bHQ6IE1hdGguYWJzfSk7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7XG4gICAgdmFyIGFuY2hvciA9IGRvbVRvUG9zKGNtLCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCk7XG4gICAgdmFyIGhlYWQgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgICBpZiAoYW5jaG9yICYmIGhlYWQpIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0U2VsZWN0aW9uKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCksIHNlbF9kb250U2Nyb2xsKTtcbiAgICAgIGlmIChhbmNob3IuYmFkIHx8IGhlYWQuYmFkKSB7IGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9XG4gICAgfSk7IH1cbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucG9sbENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpO1xuICAgICAgdGhpcy5yZWFkRE9NVGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNlbCA9IGNtLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgIHZhciBmcm9tID0gc2VsLmZyb20oKSwgdG8gPSBzZWwudG8oKTtcbiAgICBpZiAoZnJvbS5jaCA9PSAwICYmIGZyb20ubGluZSA+IGNtLmZpcnN0TGluZSgpKVxuICAgICAgeyBmcm9tID0gUG9zKGZyb20ubGluZSAtIDEsIGdldExpbmUoY20uZG9jLCBmcm9tLmxpbmUgLSAxKS5sZW5ndGgpOyB9XG4gICAgaWYgKHRvLmNoID09IGdldExpbmUoY20uZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCAmJiB0by5saW5lIDwgY20ubGFzdExpbmUoKSlcbiAgICAgIHsgdG8gPSBQb3ModG8ubGluZSArIDEsIDApOyB9XG4gICAgaWYgKGZyb20ubGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgdG8ubGluZSA+IGRpc3BsYXkudmlld1RvIC0gMSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgdmFyIGZyb21JbmRleCwgZnJvbUxpbmUsIGZyb21Ob2RlO1xuICAgIGlmIChmcm9tLmxpbmUgPT0gZGlzcGxheS52aWV3RnJvbSB8fCAoZnJvbUluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgZnJvbS5saW5lKSkgPT0gMCkge1xuICAgICAgZnJvbUxpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3WzBdLmxpbmUpO1xuICAgICAgZnJvbU5vZGUgPSBkaXNwbGF5LnZpZXdbMF0ubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbUxpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W2Zyb21JbmRleF0ubGluZSk7XG4gICAgICBmcm9tTm9kZSA9IGRpc3BsYXkudmlld1tmcm9tSW5kZXggLSAxXS5ub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICB2YXIgdG9JbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIHRvLmxpbmUpO1xuICAgIHZhciB0b0xpbmUsIHRvTm9kZTtcbiAgICBpZiAodG9JbmRleCA9PSBkaXNwbGF5LnZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgdG9MaW5lID0gZGlzcGxheS52aWV3VG8gLSAxO1xuICAgICAgdG9Ob2RlID0gZGlzcGxheS5saW5lRGl2Lmxhc3RDaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1t0b0luZGV4ICsgMV0ubGluZSkgLSAxO1xuICAgICAgdG9Ob2RlID0gZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5ub2RlLnByZXZpb3VzU2libGluZztcbiAgICB9XG5cbiAgICBpZiAoIWZyb21Ob2RlKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5ld1RleHQgPSBjbS5kb2Muc3BsaXRMaW5lcyhkb21UZXh0QmV0d2VlbihjbSwgZnJvbU5vZGUsIHRvTm9kZSwgZnJvbUxpbmUsIHRvTGluZSkpO1xuICAgIHZhciBvbGRUZXh0ID0gZ2V0QmV0d2VlbihjbS5kb2MsIFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUsIGdldExpbmUoY20uZG9jLCB0b0xpbmUpLnRleHQubGVuZ3RoKSk7XG4gICAgd2hpbGUgKG5ld1RleHQubGVuZ3RoID4gMSAmJiBvbGRUZXh0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChsc3QobmV3VGV4dCkgPT0gbHN0KG9sZFRleHQpKSB7IG5ld1RleHQucG9wKCk7IG9sZFRleHQucG9wKCk7IHRvTGluZS0tOyB9XG4gICAgICBlbHNlIGlmIChuZXdUZXh0WzBdID09IG9sZFRleHRbMF0pIHsgbmV3VGV4dC5zaGlmdCgpOyBvbGRUZXh0LnNoaWZ0KCk7IGZyb21MaW5lKys7IH1cbiAgICAgIGVsc2UgeyBicmVhayB9XG4gICAgfVxuXG4gICAgdmFyIGN1dEZyb250ID0gMCwgY3V0RW5kID0gMDtcbiAgICB2YXIgbmV3VG9wID0gbmV3VGV4dFswXSwgb2xkVG9wID0gb2xkVGV4dFswXSwgbWF4Q3V0RnJvbnQgPSBNYXRoLm1pbihuZXdUb3AubGVuZ3RoLCBvbGRUb3AubGVuZ3RoKTtcbiAgICB3aGlsZSAoY3V0RnJvbnQgPCBtYXhDdXRGcm9udCAmJiBuZXdUb3AuY2hhckNvZGVBdChjdXRGcm9udCkgPT0gb2xkVG9wLmNoYXJDb2RlQXQoY3V0RnJvbnQpKVxuICAgICAgeyArK2N1dEZyb250OyB9XG4gICAgdmFyIG5ld0JvdCA9IGxzdChuZXdUZXh0KSwgb2xkQm90ID0gbHN0KG9sZFRleHQpO1xuICAgIHZhciBtYXhDdXRFbmQgPSBNYXRoLm1pbihuZXdCb3QubGVuZ3RoIC0gKG5ld1RleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRCb3QubGVuZ3RoIC0gKG9sZFRleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApKTtcbiAgICB3aGlsZSAoY3V0RW5kIDwgbWF4Q3V0RW5kICYmXG4gICAgICAgICAgIG5ld0JvdC5jaGFyQ29kZUF0KG5ld0JvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSA9PSBvbGRCb3QuY2hhckNvZGVBdChvbGRCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkpXG4gICAgICB7ICsrY3V0RW5kOyB9XG4gICAgLy8gVHJ5IHRvIG1vdmUgc3RhcnQgb2YgY2hhbmdlIHRvIHN0YXJ0IG9mIHNlbGVjdGlvbiBpZiBhbWJpZ3VvdXNcbiAgICBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSAmJiBvbGRUZXh0Lmxlbmd0aCA9PSAxICYmIGZyb21MaW5lID09IGZyb20ubGluZSkge1xuICAgICAgd2hpbGUgKGN1dEZyb250ICYmIGN1dEZyb250ID4gZnJvbS5jaCAmJlxuICAgICAgICAgICAgIG5ld0JvdC5jaGFyQ29kZUF0KG5ld0JvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSA9PSBvbGRCb3QuY2hhckNvZGVBdChvbGRCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkpIHtcbiAgICAgICAgY3V0RnJvbnQtLTtcbiAgICAgICAgY3V0RW5kKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aCAtIDFdID0gbmV3Qm90LnNsaWNlKDAsIG5ld0JvdC5sZW5ndGggLSBjdXRFbmQpLnJlcGxhY2UoL15cXHUyMDBiKy8sIFwiXCIpO1xuICAgIG5ld1RleHRbMF0gPSBuZXdUZXh0WzBdLnNsaWNlKGN1dEZyb250KS5yZXBsYWNlKC9cXHUyMDBiKyQvLCBcIlwiKTtcblxuICAgIHZhciBjaEZyb20gPSBQb3MoZnJvbUxpbmUsIGN1dEZyb250KTtcbiAgICB2YXIgY2hUbyA9IFBvcyh0b0xpbmUsIG9sZFRleHQubGVuZ3RoID8gbHN0KG9sZFRleHQpLmxlbmd0aCAtIGN1dEVuZCA6IDApO1xuICAgIGlmIChuZXdUZXh0Lmxlbmd0aCA+IDEgfHwgbmV3VGV4dFswXSB8fCBjbXAoY2hGcm9tLCBjaFRvKSkge1xuICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgbmV3VGV4dCwgY2hGcm9tLCBjaFRvLCBcIitpbnB1dFwiKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5lbnN1cmVQb2xsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCk7XG4gIH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKTtcbiAgfTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmZvcmNlQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLmNvbXBvc2luZykgeyByZXR1cm4gfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlYWRET01UaW1lb3V0KTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVGcm9tRE9NKCk7XG4gICAgdGhpcy5kaXYuYmx1cigpO1xuICAgIHRoaXMuZGl2LmZvY3VzKCk7XG4gIH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWFkRnJvbURPTVNvb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwpIHsgcmV0dXJuIH1cbiAgICB0aGlzLnJlYWRET01UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEucmVhZERPTVRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcuZG9uZSkgeyB0aGlzJDEuY29tcG9zaW5nID0gbnVsbDsgfVxuICAgICAgICBlbHNlIHsgcmV0dXJuIH1cbiAgICAgIH1cbiAgICAgIHRoaXMkMS51cGRhdGVGcm9tRE9NKCk7XG4gICAgfSwgODApO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS51cGRhdGVGcm9tRE9NID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5jbS5pc1JlYWRPbmx5KCkgfHwgIXRoaXMucG9sbENvbnRlbnQoKSlcbiAgICAgIHsgcnVuSW5PcCh0aGlzLmNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWdDaGFuZ2UodGhpcyQxLmNtKTsgfSk7IH1cbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2V0VW5lZGl0YWJsZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgbm9kZS5jb250ZW50RWRpdGFibGUgPSBcImZhbHNlXCI7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLmNoYXJDb2RlID09IDAgfHwgdGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLmNtLmlzUmVhZE9ubHkoKSlcbiAgICAgIHsgb3BlcmF0aW9uKHRoaXMuY20sIGFwcGx5VGV4dElucHV0KSh0aGlzLmNtLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUgPT0gbnVsbCA/IGUua2V5Q29kZSA6IGUuY2hhckNvZGUpLCAwKTsgfVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdGhpcy5kaXYuY29udGVudEVkaXRhYmxlID0gU3RyaW5nKHZhbCAhPSBcIm5vY3Vyc29yXCIpO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24gKCkge307XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge307XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZSA9IHRydWU7XG5cbiAgZnVuY3Rpb24gcG9zVG9ET00oY20sIHBvcykge1xuICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBwb3MubGluZSk7XG4gICAgaWYgKCF2aWV3IHx8IHZpZXcuaGlkZGVuKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7XG4gICAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgcG9zLmxpbmUpO1xuXG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSwgY20uZG9jLmRpcmVjdGlvbiksIHNpZGUgPSBcImxlZnRcIjtcbiAgICBpZiAob3JkZXIpIHtcbiAgICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgcG9zLmNoKTtcbiAgICAgIHNpZGUgPSBwYXJ0UG9zICUgMiA/IFwicmlnaHRcIiA6IFwibGVmdFwiO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChpbmZvLm1hcCwgcG9zLmNoLCBzaWRlKTtcbiAgICByZXN1bHQub2Zmc2V0ID0gcmVzdWx0LmNvbGxhcHNlID09IFwicmlnaHRcIiA/IHJlc3VsdC5lbmQgOiByZXN1bHQuc3RhcnQ7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gaXNJbkd1dHRlcihub2RlKSB7XG4gICAgZm9yICh2YXIgc2NhbiA9IG5vZGU7IHNjYW47IHNjYW4gPSBzY2FuLnBhcmVudE5vZGUpXG4gICAgICB7IGlmICgvQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlci8udGVzdChzY2FuLmNsYXNzTmFtZSkpIHsgcmV0dXJuIHRydWUgfSB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBiYWRQb3MocG9zLCBiYWQpIHsgaWYgKGJhZCkgeyBwb3MuYmFkID0gdHJ1ZTsgfSByZXR1cm4gcG9zIH1cblxuICBmdW5jdGlvbiBkb21UZXh0QmV0d2VlbihjbSwgZnJvbSwgdG8sIGZyb21MaW5lLCB0b0xpbmUpIHtcbiAgICB2YXIgdGV4dCA9IFwiXCIsIGNsb3NpbmcgPSBmYWxzZSwgbGluZVNlcCA9IGNtLmRvYy5saW5lU2VwYXJhdG9yKCksIGV4dHJhTGluZWJyZWFrID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7IHJldHVybiBmdW5jdGlvbiAobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaWQgPT0gaWQ7IH0gfVxuICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgaWYgKGNsb3NpbmcpIHtcbiAgICAgICAgdGV4dCArPSBsaW5lU2VwO1xuICAgICAgICBpZiAoZXh0cmFMaW5lYnJlYWspIHsgdGV4dCArPSBsaW5lU2VwOyB9XG4gICAgICAgIGNsb3NpbmcgPSBleHRyYUxpbmVicmVhayA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUZXh0KHN0cikge1xuICAgICAgaWYgKHN0cikge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgICB0ZXh0ICs9IHN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fsayhub2RlKSB7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICAgIHZhciBjbVRleHQgPSBub2RlLmdldEF0dHJpYnV0ZShcImNtLXRleHRcIik7XG4gICAgICAgIGlmIChjbVRleHQpIHtcbiAgICAgICAgICBhZGRUZXh0KGNtVGV4dCk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1hcmtlcklEID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJjbS1tYXJrZXJcIiksIHJhbmdlO1xuICAgICAgICBpZiAobWFya2VySUQpIHtcbiAgICAgICAgICB2YXIgZm91bmQgPSBjbS5maW5kTWFya3MoUG9zKGZyb21MaW5lLCAwKSwgUG9zKHRvTGluZSArIDEsIDApLCByZWNvZ25pemVNYXJrZXIoK21hcmtlcklEKSk7XG4gICAgICAgICAgaWYgKGZvdW5kLmxlbmd0aCAmJiAocmFuZ2UgPSBmb3VuZFswXS5maW5kKDApKSlcbiAgICAgICAgICAgIHsgYWRkVGV4dChnZXRCZXR3ZWVuKGNtLmRvYywgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pLmpvaW4obGluZVNlcCkpOyB9XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpID09IFwiZmFsc2VcIikgeyByZXR1cm4gfVxuICAgICAgICB2YXIgaXNCbG9jayA9IC9eKHByZXxkaXZ8cHxsaXx0YWJsZXxicikkL2kudGVzdChub2RlLm5vZGVOYW1lKTtcbiAgICAgICAgaWYgKCEvXmJyJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkgJiYgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT0gMCkgeyByZXR1cm4gfVxuXG4gICAgICAgIGlmIChpc0Jsb2NrKSB7IGNsb3NlKCk7IH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyB3YWxrKG5vZGUuY2hpbGROb2Rlc1tpXSk7IH1cblxuICAgICAgICBpZiAoL14ocHJlfHApJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHsgZXh0cmFMaW5lYnJlYWsgPSB0cnVlOyB9XG4gICAgICAgIGlmIChpc0Jsb2NrKSB7IGNsb3NpbmcgPSB0cnVlOyB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykge1xuICAgICAgICBhZGRUZXh0KG5vZGUubm9kZVZhbHVlLnJlcGxhY2UoL1xcdTIwMGIvZywgXCJcIikucmVwbGFjZSgvXFx1MDBhMC9nLCBcIiBcIikpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDs7KSB7XG4gICAgICB3YWxrKGZyb20pO1xuICAgICAgaWYgKGZyb20gPT0gdG8pIHsgYnJlYWsgfVxuICAgICAgZnJvbSA9IGZyb20ubmV4dFNpYmxpbmc7XG4gICAgICBleHRyYUxpbmVicmVhayA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gZG9tVG9Qb3MoY20sIG5vZGUsIG9mZnNldCkge1xuICAgIHZhciBsaW5lTm9kZTtcbiAgICBpZiAobm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHtcbiAgICAgIGxpbmVOb2RlID0gY20uZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgIGlmICghbGluZU5vZGUpIHsgcmV0dXJuIGJhZFBvcyhjbS5jbGlwUG9zKFBvcyhjbS5kaXNwbGF5LnZpZXdUbyAtIDEpKSwgdHJ1ZSkgfVxuICAgICAgbm9kZSA9IG51bGw7IG9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGluZU5vZGUgPSBub2RlOzsgbGluZU5vZGUgPSBsaW5lTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGlmICghbGluZU5vZGUgfHwgbGluZU5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSB7IHJldHVybiBudWxsIH1cbiAgICAgICAgaWYgKGxpbmVOb2RlLnBhcmVudE5vZGUgJiYgbGluZU5vZGUucGFyZW50Tm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsgYnJlYWsgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpbmVWaWV3ID0gY20uZGlzcGxheS52aWV3W2ldO1xuICAgICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZU5vZGUpXG4gICAgICAgIHsgcmV0dXJuIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQpIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB7XG4gICAgdmFyIHdyYXBwZXIgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQsIGJhZCA9IGZhbHNlO1xuICAgIGlmICghbm9kZSB8fCAhY29udGFpbnMod3JhcHBlciwgbm9kZSkpIHsgcmV0dXJuIGJhZFBvcyhQb3MobGluZU5vKGxpbmVWaWV3LmxpbmUpLCAwKSwgdHJ1ZSkgfVxuICAgIGlmIChub2RlID09IHdyYXBwZXIpIHtcbiAgICAgIGJhZCA9IHRydWU7XG4gICAgICBub2RlID0gd3JhcHBlci5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgICBvZmZzZXQgPSAwO1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHZhciBsaW5lID0gbGluZVZpZXcucmVzdCA/IGxzdChsaW5lVmlldy5yZXN0KSA6IGxpbmVWaWV3LmxpbmU7XG4gICAgICAgIHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lKSwgbGluZS50ZXh0Lmxlbmd0aCksIGJhZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSBub2RlLm5vZGVUeXBlID09IDMgPyBub2RlIDogbnVsbCwgdG9wTm9kZSA9IG5vZGU7XG4gICAgaWYgKCF0ZXh0Tm9kZSAmJiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgJiYgbm9kZS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHtcbiAgICAgIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgaWYgKG9mZnNldCkgeyBvZmZzZXQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoOyB9XG4gICAgfVxuICAgIHdoaWxlICh0b3BOb2RlLnBhcmVudE5vZGUgIT0gd3JhcHBlcikgeyB0b3BOb2RlID0gdG9wTm9kZS5wYXJlbnROb2RlOyB9XG4gICAgdmFyIG1lYXN1cmUgPSBsaW5lVmlldy5tZWFzdXJlLCBtYXBzID0gbWVhc3VyZS5tYXBzO1xuXG4gICAgZnVuY3Rpb24gZmluZCh0ZXh0Tm9kZSwgdG9wTm9kZSwgb2Zmc2V0KSB7XG4gICAgICBmb3IgKHZhciBpID0gLTE7IGkgPCAobWFwcyA/IG1hcHMubGVuZ3RoIDogMCk7IGkrKykge1xuICAgICAgICB2YXIgbWFwID0gaSA8IDAgPyBtZWFzdXJlLm1hcCA6IG1hcHNbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFwLmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgdmFyIGN1ck5vZGUgPSBtYXBbaiArIDJdO1xuICAgICAgICAgIGlmIChjdXJOb2RlID09IHRleHROb2RlIHx8IGN1ck5vZGUgPT0gdG9wTm9kZSkge1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lTm8oaSA8IDAgPyBsaW5lVmlldy5saW5lIDogbGluZVZpZXcucmVzdFtpXSk7XG4gICAgICAgICAgICB2YXIgY2ggPSBtYXBbal0gKyBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjdXJOb2RlICE9IHRleHROb2RlKSB7IGNoID0gbWFwW2ogKyAob2Zmc2V0ID8gMSA6IDApXTsgfVxuICAgICAgICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGZvdW5kID0gZmluZCh0ZXh0Tm9kZSwgdG9wTm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoZm91bmQpIHsgcmV0dXJuIGJhZFBvcyhmb3VuZCwgYmFkKSB9XG5cbiAgICAvLyBGSVhNRSB0aGlzIGlzIGFsbCByZWFsbHkgc2hha3kuIG1pZ2h0IGhhbmRsZSB0aGUgZmV3IGNhc2VzIGl0IG5lZWRzIHRvIGhhbmRsZSwgYnV0IGxpa2VseSB0byBjYXVzZSBwcm9ibGVtc1xuICAgIGZvciAodmFyIGFmdGVyID0gdG9wTm9kZS5uZXh0U2libGluZywgZGlzdCA9IHRleHROb2RlID8gdGV4dE5vZGUubm9kZVZhbHVlLmxlbmd0aCAtIG9mZnNldCA6IDA7IGFmdGVyOyBhZnRlciA9IGFmdGVyLm5leHRTaWJsaW5nKSB7XG4gICAgICBmb3VuZCA9IGZpbmQoYWZ0ZXIsIGFmdGVyLmZpcnN0Q2hpbGQsIDApO1xuICAgICAgaWYgKGZvdW5kKVxuICAgICAgICB7IHJldHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoIC0gZGlzdCksIGJhZCkgfVxuICAgICAgZWxzZVxuICAgICAgICB7IGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOyB9XG4gICAgfVxuICAgIGZvciAodmFyIGJlZm9yZSA9IHRvcE5vZGUucHJldmlvdXNTaWJsaW5nLCBkaXN0JDEgPSBvZmZzZXQ7IGJlZm9yZTsgYmVmb3JlID0gYmVmb3JlLnByZXZpb3VzU2libGluZykge1xuICAgICAgZm91bmQgPSBmaW5kKGJlZm9yZSwgYmVmb3JlLmZpcnN0Q2hpbGQsIC0xKTtcbiAgICAgIGlmIChmb3VuZClcbiAgICAgICAgeyByZXR1cm4gYmFkUG9zKFBvcyhmb3VuZC5saW5lLCBmb3VuZC5jaCArIGRpc3QkMSksIGJhZCkgfVxuICAgICAgZWxzZVxuICAgICAgICB7IGRpc3QkMSArPSBiZWZvcmUudGV4dENvbnRlbnQubGVuZ3RoOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gVEVYVEFSRUEgSU5QVVQgU1RZTEVcblxuICB2YXIgVGV4dGFyZWFJbnB1dCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgdGhpcy5jbSA9IGNtO1xuICAgIC8vIFNlZSBpbnB1dC5wb2xsIGFuZCBpbnB1dC5yZXNldFxuICAgIHRoaXMucHJldklucHV0ID0gXCJcIjtcblxuICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBleHBlY3QgaW5wdXQgdG8gYXBwZWFyIHJlYWwgc29vblxuICAgIC8vIG5vdyAoYWZ0ZXIgc29tZSBldmVudCBsaWtlICdrZXlwcmVzcycgb3IgJ2lucHV0JykgYW5kIGFyZVxuICAgIC8vIHBvbGxpbmcgaW50ZW5zaXZlbHkuXG4gICAgdGhpcy5wb2xsaW5nRmFzdCA9IGZhbHNlO1xuICAgIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9yIHRoZSBwb2xsZXJcbiAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpO1xuICAgIC8vIFVzZWQgdG8gd29yayBhcm91bmQgSUUgaXNzdWUgd2l0aCBzZWxlY3Rpb24gYmVpbmcgZm9yZ290dGVuIHdoZW4gZm9jdXMgbW92ZXMgYXdheSBmcm9tIHRleHRhcmVhXG4gICAgdGhpcy5oYXNTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChkaXNwbGF5KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gdGhpcy5jbTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkKGRpc3BsYXkpO1xuICAgIHZhciB0ZSA9IHRoaXMudGV4dGFyZWE7XG5cbiAgICBkaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKHRoaXMud3JhcHBlciwgZGlzcGxheS53cmFwcGVyLmZpcnN0Q2hpbGQpO1xuXG4gICAgLy8gTmVlZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkgKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIGlPUyA4IGFueW1vcmUpXG4gICAgaWYgKGlvcykgeyB0ZS5zdHlsZS53aWR0aCA9IFwiMHB4XCI7IH1cblxuICAgIG9uKHRlLCBcImlucHV0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgdGhpcyQxLmhhc1NlbGVjdGlvbikgeyB0aGlzJDEuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgICAgaW5wdXQucG9sbCgpO1xuICAgIH0pO1xuXG4gICAgb24odGUsIFwicGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgaGFuZGxlUGFzdGUoZSwgY20pKSB7IHJldHVybiB9XG5cbiAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSArbmV3IERhdGU7XG4gICAgICBpbnB1dC5mYXN0UG9sbCgpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvcHlDdXQoZSkge1xuICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHtcbiAgICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IGZhbHNlLCB0ZXh0OiBjbS5nZXRTZWxlY3Rpb25zKCl9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2VzKGNtKTtcbiAgICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IHRydWUsIHRleHQ6IHJhbmdlcy50ZXh0fSk7XG4gICAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikge1xuICAgICAgICAgIGNtLnNldFNlbGVjdGlvbnMocmFuZ2VzLnJhbmdlcywgbnVsbCwgc2VsX2RvbnRTY3JvbGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0LnByZXZJbnB1dCA9IFwiXCI7XG4gICAgICAgICAgdGUudmFsdWUgPSByYW5nZXMudGV4dC5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgIHNlbGVjdElucHV0KHRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGUudHlwZSA9PSBcImN1dFwiKSB7IGNtLnN0YXRlLmN1dEluY29taW5nID0gK25ldyBEYXRlOyB9XG4gICAgfVxuICAgIG9uKHRlLCBcImN1dFwiLCBwcmVwYXJlQ29weUN1dCk7XG4gICAgb24odGUsIFwiY29weVwiLCBwcmVwYXJlQ29weUN1dCk7XG5cbiAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCBcInBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmICghdGUuZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gK25ldyBEYXRlO1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUGFzcyB0aGUgYHBhc3RlYCBldmVudCB0byB0aGUgdGV4dGFyZWEgc28gaXQncyBoYW5kbGVkIGJ5IGl0cyBldmVudCBsaXN0ZW5lci5cbiAgICAgIHZhciBldmVudCA9IG5ldyBFdmVudChcInBhc3RlXCIpO1xuICAgICAgZXZlbnQuY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YTtcbiAgICAgIHRlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gUHJldmVudCBub3JtYWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdlIGhhbmRsZSBvdXIgb3duKVxuICAgIG9uKGRpc3BsYXkubGluZVNwYWNlLCBcInNlbGVjdHN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsgZV9wcmV2ZW50RGVmYXVsdChlKTsgfVxuICAgIH0pO1xuXG4gICAgb24odGUsIFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhcnQgPSBjbS5nZXRDdXJzb3IoXCJmcm9tXCIpO1xuICAgICAgaWYgKGlucHV0LmNvbXBvc2luZykgeyBpbnB1dC5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKTsgfVxuICAgICAgaW5wdXQuY29tcG9zaW5nID0ge1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIHJhbmdlOiBjbS5tYXJrVGV4dChzdGFydCwgY20uZ2V0Q3Vyc29yKFwidG9cIiksIHtjbGFzc05hbWU6IFwiQ29kZU1pcnJvci1jb21wb3NpbmdcIn0pXG4gICAgICB9O1xuICAgIH0pO1xuICAgIG9uKHRlLCBcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHtcbiAgICAgICAgaW5wdXQucG9sbCgpO1xuICAgICAgICBpbnB1dC5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKTtcbiAgICAgICAgaW5wdXQuY29tcG9zaW5nID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5jcmVhdGVGaWVsZCA9IGZ1bmN0aW9uIChfZGlzcGxheSkge1xuICAgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYVxuICAgIHRoaXMud3JhcHBlciA9IGhpZGRlblRleHRhcmVhKCk7XG4gICAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpc1xuICAgIC8vIGZvY3VzZWQsIGFuZCByZWNlaXZlcyBpbnB1dC5cbiAgICB0aGlzLnRleHRhcmVhID0gdGhpcy53cmFwcGVyLmZpcnN0Q2hpbGQ7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucHJlcGFyZVNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBSZWRyYXcgdGhlIHNlbGVjdGlvbiBhbmQvb3IgY3Vyc29yXG4gICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgcmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbihjbSk7XG5cbiAgICAvLyBNb3ZlIHRoZSBoaWRkZW4gdGV4dGFyZWEgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgc2Nyb2xsaW5nIGFydGlmYWN0c1xuICAgIGlmIChjbS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3IpIHtcbiAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkLCBcImRpdlwiKTtcbiAgICAgIHZhciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmVzdWx0LnRlVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy50b3AgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSk7XG4gICAgICByZXN1bHQudGVMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnNob3dTZWxlY3Rpb24gPSBmdW5jdGlvbiAoZHJhd24pIHtcbiAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgZHJhd24uY3Vyc29ycyk7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYsIGRyYXduLnNlbGVjdGlvbik7XG4gICAgaWYgKGRyYXduLnRlVG9wICE9IG51bGwpIHtcbiAgICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSBkcmF3bi50ZVRvcCArIFwicHhcIjtcbiAgICAgIHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gZHJhd24udGVMZWZ0ICsgXCJweFwiO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXNldCB0aGUgaW5wdXQgdG8gY29ycmVzcG9uZCB0byB0aGUgc2VsZWN0aW9uIChvciB0byBiZSBlbXB0eSxcbiAgLy8gd2hlbiBub3QgdHlwaW5nIGFuZCBub3RoaW5nIGlzIHNlbGVjdGVkKVxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICh0eXBpbmcpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcgfHwgdGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICB2YXIgY20gPSB0aGlzLmNtO1xuICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnByZXZJbnB1dCA9IFwiXCI7XG4gICAgICB2YXIgY29udGVudCA9IGNtLmdldFNlbGVjdGlvbigpO1xuICAgICAgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7XG4gICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZWxlY3RJbnB1dCh0aGlzLnRleHRhcmVhKTsgfVxuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgeyB0aGlzLmhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7IH1cbiAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHtcbiAgICAgIHRoaXMucHJldklucHV0ID0gdGhpcy50ZXh0YXJlYS52YWx1ZSA9IFwiXCI7XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgIH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5nZXRGaWVsZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudGV4dGFyZWEgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2UgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9IFwibm9jdXJzb3JcIiAmJiAoIW1vYmlsZSB8fCBhY3RpdmVFbHQoKSAhPSB0aGlzLnRleHRhcmVhKSkge1xuICAgICAgdHJ5IHsgdGhpcy50ZXh0YXJlYS5mb2N1cygpOyB9XG4gICAgICBjYXRjaCAoZSkge30gLy8gSUU4IHdpbGwgdGhyb3cgaWYgdGhlIHRleHRhcmVhIGlzIGRpc3BsYXk6IG5vbmUgb3Igbm90IGluIERPTVxuICAgIH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24gKCkgeyB0aGlzLnRleHRhcmVhLmJsdXIoKTsgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IDA7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cyA9IGZ1bmN0aW9uICgpIHsgdGhpcy5zbG93UG9sbCgpOyB9O1xuXG4gIC8vIFBvbGwgZm9yIGlucHV0IGNoYW5nZXMsIHVzaW5nIHRoZSBub3JtYWwgcmF0ZSBvZiBwb2xsaW5nLiBUaGlzXG4gIC8vIHJ1bnMgYXMgbG9uZyBhcyB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnNsb3dQb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5wb2xsaW5nRmFzdCkgeyByZXR1cm4gfVxuICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxLnBvbGwoKTtcbiAgICAgIGlmICh0aGlzJDEuY20uc3RhdGUuZm9jdXNlZCkgeyB0aGlzJDEuc2xvd1BvbGwoKTsgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29tZSBpbiB0aGF0IGlzIGxpa2VseSB0byBhZGQgb3IgY2hhbmdlXG4gIC8vIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdFxuICAvLyB0aGUgY2hhbmdlIGFwcGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LlxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5mYXN0UG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWlzc2VkID0gZmFsc2UsIGlucHV0ID0gdGhpcztcbiAgICBpbnB1dC5wb2xsaW5nRmFzdCA9IHRydWU7XG4gICAgZnVuY3Rpb24gcCgpIHtcbiAgICAgIHZhciBjaGFuZ2VkID0gaW5wdXQucG9sbCgpO1xuICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBpbnB1dC5wb2xsaW5nLnNldCg2MCwgcCk7fVxuICAgICAgZWxzZSB7aW5wdXQucG9sbGluZ0Zhc3QgPSBmYWxzZTsgaW5wdXQuc2xvd1BvbGwoKTt9XG4gICAgfVxuICAgIGlucHV0LnBvbGxpbmcuc2V0KDIwLCBwKTtcbiAgfTtcblxuICAvLyBSZWFkIGlucHV0IGZyb20gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIHRoZSBkb2N1bWVudCB0byBtYXRjaC5cbiAgLy8gV2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQsIGl0IGlzIHByZXNlbnQgaW4gdGhlIHRleHRhcmVhLCBhbmRcbiAgLy8gc2VsZWN0ZWQgKHVubGVzcyBpdCBpcyBodWdlLCBpbiB3aGljaCBjYXNlIGEgcGxhY2Vob2xkZXIgaXNcbiAgLy8gdXNlZCkuIFdoZW4gbm90aGluZyBpcyBzZWxlY3RlZCwgdGhlIGN1cnNvciBzaXRzIGFmdGVyIHByZXZpb3VzbHlcbiAgLy8gc2VlbiB0ZXh0IChjYW4gYmUgZW1wdHkpLCB3aGljaCBpcyBzdG9yZWQgaW4gcHJldklucHV0ICh3ZSBtdXN0XG4gIC8vIG5vdCByZXNldCB0aGUgdGV4dGFyZWEgd2hlbiB0eXBpbmcsIGJlY2F1c2UgdGhhdCBicmVha3MgSU1FKS5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNtID0gdGhpcy5jbSwgaW5wdXQgPSB0aGlzLnRleHRhcmVhLCBwcmV2SW5wdXQgPSB0aGlzLnByZXZJbnB1dDtcbiAgICAvLyBTaW5jZSB0aGlzIGlzIGNhbGxlZCBhICpsb3QqLCB0cnkgdG8gYmFpbCBvdXQgYXMgY2hlYXBseSBhc1xuICAgIC8vIHBvc3NpYmxlIHdoZW4gaXQgaXMgY2xlYXIgdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBoYXNTZWxlY3Rpb25cbiAgICAvLyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgdGV4dCBpbiB0aGUgdGV4dGFyZWEsXG4gICAgLy8gaW4gd2hpY2ggY2FzZSByZWFkaW5nIGl0cyB2YWx1ZSB3b3VsZCBiZSBleHBlbnNpdmUuXG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8ICFjbS5zdGF0ZS5mb2N1c2VkIHx8XG4gICAgICAgIChoYXNTZWxlY3Rpb24oaW5wdXQpICYmICFwcmV2SW5wdXQgJiYgIXRoaXMuY29tcG9zaW5nKSB8fFxuICAgICAgICBjbS5pc1JlYWRPbmx5KCkgfHwgY20ub3B0aW9ucy5kaXNhYmxlSW5wdXQgfHwgY20uc3RhdGUua2V5U2VxKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTtcbiAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGJhaWwuXG4gICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAsIGFuZFxuICAgIC8vIGluZXhwbGljYWJsZSBhcHBlYXJhbmNlIG9mIHByaXZhdGUgYXJlYSB1bmljb2RlIGNoYXJhY3RlcnMgb25cbiAgICAvLyBzb21lIGtleSBjb21ib3MgaW4gTWFjICgjMjY4OSkuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlzLmhhc1NlbGVjdGlvbiA9PT0gdGV4dCB8fFxuICAgICAgICBtYWMgJiYgL1tcXHVmNzAwLVxcdWY3ZmZdLy50ZXN0KHRleHQpKSB7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY20uZG9jLnNlbCA9PSBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7XG4gICAgICB2YXIgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgICBpZiAoZmlyc3QgPT0gMHgyMDBiICYmICFwcmV2SW5wdXQpIHsgcHJldklucHV0ID0gXCJcXHUyMDBiXCI7IH1cbiAgICAgIGlmIChmaXJzdCA9PSAweDIxZGEpIHsgdGhpcy5yZXNldCgpOyByZXR1cm4gdGhpcy5jbS5leGVjQ29tbWFuZChcInVuZG9cIikgfVxuICAgIH1cbiAgICAvLyBGaW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGF0IGlzIGFjdHVhbGx5IG5ld1xuICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTtcbiAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2RlQXQoc2FtZSkgPT0gdGV4dC5jaGFyQ29kZUF0KHNhbWUpKSB7ICsrc2FtZTsgfVxuXG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHlUZXh0SW5wdXQoY20sIHRleHQuc2xpY2Uoc2FtZSksIHByZXZJbnB1dC5sZW5ndGggLSBzYW1lLFxuICAgICAgICAgICAgICAgICAgICAgbnVsbCwgdGhpcyQxLmNvbXBvc2luZyA/IFwiKmNvbXBvc2VcIiA6IG51bGwpO1xuXG4gICAgICAvLyBEb24ndCBsZWF2ZSBsb25nIHRleHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xvd1xuICAgICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCB8fCB0ZXh0LmluZGV4T2YoXCJcXG5cIikgPiAtMSkgeyBpbnB1dC52YWx1ZSA9IHRoaXMkMS5wcmV2SW5wdXQgPSBcIlwiOyB9XG4gICAgICBlbHNlIHsgdGhpcyQxLnByZXZJbnB1dCA9IHRleHQ7IH1cblxuICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcpIHtcbiAgICAgICAgdGhpcyQxLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpO1xuICAgICAgICB0aGlzJDEuY29tcG9zaW5nLnJhbmdlID0gY20ubWFya1RleHQodGhpcyQxLmNvbXBvc2luZy5zdGFydCwgY20uZ2V0Q3Vyc29yKFwidG9cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJDb2RlTWlycm9yLWNvbXBvc2luZ1wifSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5lbnN1cmVQb2xsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucG9sbGluZ0Zhc3QgJiYgdGhpcy5wb2xsKCkpIHsgdGhpcy5wb2xsaW5nRmFzdCA9IGZhbHNlOyB9XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgIHRoaXMuZmFzdFBvbGwoKTtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgdGUgPSBpbnB1dC50ZXh0YXJlYTtcbiAgICBpZiAoaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nKSB7IGlucHV0LmNvbnRleHRNZW51UGVuZGluZygpOyB9XG4gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wO1xuICAgIGlmICghcG9zIHx8IHByZXN0bykgeyByZXR1cm4gfSAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuXG5cbiAgICAvLyBSZXNldCB0aGUgY3VycmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25lIG91dHNpZGUgb2YgdGhlIHNlbGVjdGlvblxuICAgIC8vIGFuZCAncmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51JyBvcHRpb24gaXMgdHJ1ZS5cbiAgICB2YXIgcmVzZXQgPSBjbS5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTtcbiAgICBpZiAocmVzZXQgJiYgY20uZG9jLnNlbC5jb250YWlucyhwb3MpID09IC0xKVxuICAgICAgeyBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOyB9XG5cbiAgICB2YXIgb2xkQ1NTID0gdGUuc3R5bGUuY3NzVGV4dCwgb2xkV3JhcHBlckNTUyA9IGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dDtcbiAgICB2YXIgd3JhcHBlckJveCA9IGlucHV0LndyYXBwZXIub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IHN0YXRpY1wiO1xuICAgIHRlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDtcXG4gICAgICB0b3A6IFwiICsgKGUuY2xpZW50WSAtIHdyYXBwZXJCb3gudG9wIC0gNSkgKyBcInB4OyBsZWZ0OiBcIiArIChlLmNsaWVudFggLSB3cmFwcGVyQm94LmxlZnQgLSA1KSArIFwicHg7XFxuICAgICAgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogXCIgKyAoaWUgPyBcInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KVwiIDogXCJ0cmFuc3BhcmVudFwiKSArIFwiO1xcbiAgICAgIG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7XCI7XG4gICAgdmFyIG9sZFNjcm9sbFk7XG4gICAgaWYgKHdlYmtpdCkgeyBvbGRTY3JvbGxZID0gd2luZG93LnNjcm9sbFk7IH0gLy8gV29yayBhcm91bmQgQ2hyb21lIGlzc3VlICgjMjcxMilcbiAgICBkaXNwbGF5LmlucHV0LmZvY3VzKCk7XG4gICAgaWYgKHdlYmtpdCkgeyB3aW5kb3cuc2Nyb2xsVG8obnVsbCwgb2xkU2Nyb2xsWSk7IH1cbiAgICBkaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgLy8gQWRkcyBcIlNlbGVjdCBhbGxcIiB0byBjb250ZXh0IG1lbnUgaW4gRkZcbiAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgdGUudmFsdWUgPSBpbnB1dC5wcmV2SW5wdXQgPSBcIiBcIjsgfVxuICAgIGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IHJlaGlkZTtcbiAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDtcbiAgICBjbGVhclRpbWVvdXQoZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwpO1xuXG4gICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc29cbiAgICAvLyB0aGlzIGFkZHMgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGNoZWNrIHdoZXRoZXJcbiAgICAvLyBpdCBnb3Qgc2VsZWN0ZWQuXG4gICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7XG4gICAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5zb21ldGhpbmdTZWxlY3RlZCgpO1xuICAgICAgICB2YXIgZXh0dmFsID0gXCJcXHUyMDBiXCIgKyAoc2VsZWN0ZWQgPyB0ZS52YWx1ZSA6IFwiXCIpO1xuICAgICAgICB0ZS52YWx1ZSA9IFwiXFx1MjFkYVwiOyAvLyBVc2VkIHRvIGNhdGNoIGNvbnRleHQtbWVudSB1bmRvXG4gICAgICAgIHRlLnZhbHVlID0gZXh0dmFsO1xuICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSBzZWxlY3RlZCA/IFwiXCIgOiBcIlxcdTIwMGJcIjtcbiAgICAgICAgdGUuc2VsZWN0aW9uU3RhcnQgPSAxOyB0ZS5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoO1xuICAgICAgICAvLyBSZS1zZXQgdGhpcywgaW4gY2FzZSBzb21lIG90aGVyIGhhbmRsZXIgdG91Y2hlZCB0aGVcbiAgICAgICAgLy8gc2VsZWN0aW9uIGluIHRoZSBtZWFudGltZS5cbiAgICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IGNtLmRvYy5zZWw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHtcbiAgICAgIGlmIChpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgIT0gcmVoaWRlKSB7IHJldHVybiB9XG4gICAgICBpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dCA9IG9sZFdyYXBwZXJDU1M7XG4gICAgICB0ZS5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTO1xuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxQb3MpOyB9XG5cbiAgICAgIC8vIFRyeSB0byBkZXRlY3QgdGhlIHVzZXIgY2hvb3Npbmcgc2VsZWN0LWFsbFxuICAgICAgaWYgKHRlLnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFpZSB8fCAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpKSB7IHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7IH1cbiAgICAgICAgdmFyIGkgPSAwLCBwb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID09IGNtLmRvYy5zZWwgJiYgdGUuc2VsZWN0aW9uU3RhcnQgPT0gMCAmJlxuICAgICAgICAgICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSBcIlxcdTIwMGJcIikge1xuICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBzZWxlY3RBbGwpKGNtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkrKyA8IDEwKSB7XG4gICAgICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7XG4gICAgICAgICAgICBkaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgMjAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7IH1cbiAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHtcbiAgICAgIGVfc3RvcChlKTtcbiAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvZmYod2luZG93LCBcIm1vdXNldXBcIiwgbW91c2V1cCk7XG4gICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7XG4gICAgICB9O1xuICAgICAgb24od2luZG93LCBcIm1vdXNldXBcIiwgbW91c2V1cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQocmVoaWRlLCA1MCk7XG4gICAgfVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICBpZiAoIXZhbCkgeyB0aGlzLnJlc2V0KCk7IH1cbiAgICB0aGlzLnRleHRhcmVhLmRpc2FibGVkID0gdmFsID09IFwibm9jdXJzb3JcIjtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rpb24gKCkge307XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUubmVlZHNDb250ZW50QXR0cmlidXRlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZnJvbVRleHRBcmVhKHRleHRhcmVhLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMpIDoge307XG4gICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZhbHVlO1xuICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleClcbiAgICAgIHsgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYkluZGV4OyB9XG4gICAgaWYgKCFvcHRpb25zLnBsYWNlaG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKVxuICAgICAgeyBvcHRpb25zLnBsYWNlaG9sZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7IH1cbiAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYgdGhpcyB0ZXh0YXJlYSBpcyBmb2N1c2VkLCBvciBpZiBpdCBoYXNcbiAgICAvLyBhdXRvZm9jdXMgYW5kIG5vIG90aGVyIGVsZW1lbnQgaXMgZm9jdXNlZC5cbiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkge1xuICAgICAgdmFyIGhhc0ZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgICBvcHRpb25zLmF1dG9mb2N1cyA9IGhhc0ZvY3VzID09IHRleHRhcmVhIHx8XG4gICAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1ZSA9IGNtLmdldFZhbHVlKCk7fVxuXG4gICAgdmFyIHJlYWxTdWJtaXQ7XG4gICAgaWYgKHRleHRhcmVhLmZvcm0pIHtcbiAgICAgIG9uKHRleHRhcmVhLmZvcm0sIFwic3VibWl0XCIsIHNhdmUpO1xuICAgICAgLy8gRGVwbG9yYWJsZSBoYWNrIHRvIG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpIHtcbiAgICAgICAgdmFyIGZvcm0gPSB0ZXh0YXJlYS5mb3JtO1xuICAgICAgICByZWFsU3VibWl0ID0gZm9ybS5zdWJtaXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHdyYXBwZWRTdWJtaXQgPSBmb3JtLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhdmUoKTtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMuZmluaXNoSW5pdCA9IGZ1bmN0aW9uIChjbSkge1xuICAgICAgY20uc2F2ZSA9IHNhdmU7XG4gICAgICBjbS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRleHRhcmVhOyB9O1xuICAgICAgY20udG9UZXh0QXJlYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY20udG9UZXh0QXJlYSA9IGlzTmFOOyAvLyBQcmV2ZW50IHRoaXMgZnJvbSBiZWluZyByYW4gdHdpY2VcbiAgICAgICAgc2F2ZSgpO1xuICAgICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJFbGVtZW50KCkpO1xuICAgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHtcbiAgICAgICAgICBvZmYodGV4dGFyZWEuZm9ybSwgXCJzdWJtaXRcIiwgc2F2ZSk7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUgJiYgdHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHsgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OyB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB2YXIgY20gPSBDb2RlTWlycm9yKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiB0ZXh0YXJlYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7IH0sXG4gICAgICBvcHRpb25zKTtcbiAgICByZXR1cm4gY21cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExlZ2FjeVByb3BzKENvZGVNaXJyb3IpIHtcbiAgICBDb2RlTWlycm9yLm9mZiA9IG9mZjtcbiAgICBDb2RlTWlycm9yLm9uID0gb247XG4gICAgQ29kZU1pcnJvci53aGVlbEV2ZW50UGl4ZWxzID0gd2hlZWxFdmVudFBpeGVscztcbiAgICBDb2RlTWlycm9yLkRvYyA9IERvYztcbiAgICBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSBzcGxpdExpbmVzQXV0bztcbiAgICBDb2RlTWlycm9yLmNvdW50Q29sdW1uID0gY291bnRDb2x1bW47XG4gICAgQ29kZU1pcnJvci5maW5kQ29sdW1uID0gZmluZENvbHVtbjtcbiAgICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBpc1dvcmRDaGFyQmFzaWM7XG4gICAgQ29kZU1pcnJvci5QYXNzID0gUGFzcztcbiAgICBDb2RlTWlycm9yLnNpZ25hbCA9IHNpZ25hbDtcbiAgICBDb2RlTWlycm9yLkxpbmUgPSBMaW5lO1xuICAgIENvZGVNaXJyb3IuY2hhbmdlRW5kID0gY2hhbmdlRW5kO1xuICAgIENvZGVNaXJyb3Iuc2Nyb2xsYmFyTW9kZWwgPSBzY3JvbGxiYXJNb2RlbDtcbiAgICBDb2RlTWlycm9yLlBvcyA9IFBvcztcbiAgICBDb2RlTWlycm9yLmNtcFBvcyA9IGNtcDtcbiAgICBDb2RlTWlycm9yLm1vZGVzID0gbW9kZXM7XG4gICAgQ29kZU1pcnJvci5taW1lTW9kZXMgPSBtaW1lTW9kZXM7XG4gICAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IHJlc29sdmVNb2RlO1xuICAgIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGdldE1vZGU7XG4gICAgQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IG1vZGVFeHRlbnNpb25zO1xuICAgIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGV4dGVuZE1vZGU7XG4gICAgQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7XG4gICAgQ29kZU1pcnJvci5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTtcbiAgICBDb2RlTWlycm9yLmlubmVyTW9kZSA9IGlubmVyTW9kZTtcbiAgICBDb2RlTWlycm9yLmNvbW1hbmRzID0gY29tbWFuZHM7XG4gICAgQ29kZU1pcnJvci5rZXlNYXAgPSBrZXlNYXA7XG4gICAgQ29kZU1pcnJvci5rZXlOYW1lID0ga2V5TmFtZTtcbiAgICBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBpc01vZGlmaWVyS2V5O1xuICAgIENvZGVNaXJyb3IubG9va3VwS2V5ID0gbG9va3VwS2V5O1xuICAgIENvZGVNaXJyb3Iubm9ybWFsaXplS2V5TWFwID0gbm9ybWFsaXplS2V5TWFwO1xuICAgIENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuICAgIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRleHRNYXJrZXI7XG4gICAgQ29kZU1pcnJvci5UZXh0TWFya2VyID0gVGV4dE1hcmtlcjtcbiAgICBDb2RlTWlycm9yLkxpbmVXaWRnZXQgPSBMaW5lV2lkZ2V0O1xuICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGVfcHJldmVudERlZmF1bHQ7XG4gICAgQ29kZU1pcnJvci5lX3N0b3BQcm9wYWdhdGlvbiA9IGVfc3RvcFByb3BhZ2F0aW9uO1xuICAgIENvZGVNaXJyb3IuZV9zdG9wID0gZV9zdG9wO1xuICAgIENvZGVNaXJyb3IuYWRkQ2xhc3MgPSBhZGRDbGFzcztcbiAgICBDb2RlTWlycm9yLmNvbnRhaW5zID0gY29udGFpbnM7XG4gICAgQ29kZU1pcnJvci5ybUNsYXNzID0gcm1DbGFzcztcbiAgICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7XG4gIH1cblxuICAvLyBFRElUT1IgQ09OU1RSVUNUT1JcblxuICBkZWZpbmVPcHRpb25zKENvZGVNaXJyb3IpO1xuXG4gIGFkZEVkaXRvck1ldGhvZHMoQ29kZU1pcnJvcik7XG5cbiAgLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlwZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuXG4gIHZhciBkb250RGVsZWdhdGUgPSBcIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvclwiLnNwbGl0KFwiIFwiKTtcbiAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSB7IGlmIChEb2MucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGluZGV4T2YoZG9udERlbGVnYXRlLCBwcm9wKSA8IDApXG4gICAgeyBDb2RlTWlycm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpfVxuICAgIH0pKERvYy5wcm90b3R5cGVbcHJvcF0pOyB9IH1cblxuICBldmVudE1peGluKERvYyk7XG4gIENvZGVNaXJyb3IuaW5wdXRTdHlsZXMgPSB7XCJ0ZXh0YXJlYVwiOiBUZXh0YXJlYUlucHV0LCBcImNvbnRlbnRlZGl0YWJsZVwiOiBDb250ZW50RWRpdGFibGVJbnB1dH07XG5cbiAgLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzXG4gIC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHlcbiAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUvKiwgbW9kZSwg4oCmKi8pIHtcbiAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9IFwibnVsbFwiKSB7IENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7IH1cbiAgICBkZWZpbmVNb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FID0gZGVmaW5lTUlNRTtcblxuICAvLyBNaW5pbWFsIGRlZmF1bHQgbW9kZS5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibnVsbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoe3Rva2VuOiBmdW5jdGlvbiAoc3RyZWFtKSB7IHJldHVybiBzdHJlYW0uc2tpcFRvRW5kKCk7IH19KTsgfSk7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvcGxhaW5cIiwgXCJudWxsXCIpO1xuXG4gIC8vIEVYVEVOU0lPTlNcblxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jO1xuICB9O1xuICBDb2RlTWlycm9yLmRlZmluZURvY0V4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICAgRG9jLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmcm9tVGV4dEFyZWE7XG5cbiAgYWRkTGVnYWN5UHJvcHMoQ29kZU1pcnJvcik7XG5cbiAgQ29kZU1pcnJvci52ZXJzaW9uID0gXCI1LjUyLjJcIjtcblxuICByZXR1cm4gQ29kZU1pcnJvcjtcblxufSkpKTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVCdWZmZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XG5cdGlmICghb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImV4cG9ydHNcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiaW1wb3J0IFVUSUwgZnJvbSAnLi4vdXRpbC9VdGlsJztcclxuaW1wb3J0IENPTkZJRyBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCBDTSBmcm9tICcuL2NvZGVtaXJyb3InO1xyXG5cclxuY29uc3QgeyBpc01hYywgdG9nZ2xlQ2xhc3MsIGFkZENsYXNzLCByZW1vdmVDbGFzcyB9ID0gVVRJTDtcclxuY29uc3QgeyBnaXRHdWJVcmwgfSA9IENPTkZJRztcclxuY29uc3QgeyBnZXRTdGF0ZSB9ID0gQ007XHJcblxyXG5cclxubGV0IEVESVRPUiA9IG51bGw7XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiDlt6XlhbfmoI/lm77moIflip/og73lpITnkIblh73mlbAgXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcblxyXG4gLyoqIFxyXG4gICogQWN0aW9uIGZybyB0b2dnbGUgQm9sZC5cclxuICAqIGDliqDnspdgIOWbvuagh+WkhOeQhuWKn+iDvVxyXG4gICovXHJcbmNvbnN0IHRvZ2dsZUJvbGQgPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvd2wuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcbiAgY29uc3QgY20gPSBlZGl0b3IuJGNvZGVtaXJyb3I7XHJcblxyXG4gIC8vIOiOt+WPluW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGNvbnN0IHR5cGUgPSBzZWxmLmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJykgfHwgJ2JvbGQnO1xyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgYmxvY2tTdHlsZXMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmJsb2NrU3R5bGVzW3R5cGVdO1xyXG5cclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIC8vIOaPkuWFpeWGheWuuVxyXG4gIGxldCB0ZXh0O1xyXG4gIGxldCBzdGFydENoYXJzID0gYmxvY2tTdHlsZXM7XHJcbiAgbGV0IGVuZENoYXJzID0gYmxvY2tTdHlsZXM7XHJcblxyXG4gIGxldCBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xyXG4gIGxldCBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XHJcblxyXG4gIC8vIOW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGlmIChzdGF0W3R5cGVdKSB7XHJcbiAgICAvLyB0ZXh0ID0gY20uZ2V0TGluZShzdGFydFBvaW50LmxpbmUpO1xyXG4gICAgLy8gc3RhcnRDaGFycyA9IHRleHQuc2xpY2UoMCwgc3RhcnRQb2ludC5jaCk7XHJcbiAgICAvLyBlbmRDaGFycyA9IHRleHQuc2xpY2Uoc3RhcnRQb2ludC5jaCk7XHJcblxyXG4gICAgLy8gaWYodHlwZSA9PSBcImJvbGRcIikge1xyXG5cdFx0Ly8gXHRzdGFydENoYXJzID0gc3RhcnRDaGFycy5yZXBsYWNlKC8oXFwqXFwqfF9fKSg/IVtcXHNcXFNdKihcXCpcXCp8X18pKS8sIFwiXCIpO1xyXG5cdFx0Ly8gXHRlbmRDaGFycyA9IGVuZENoYXJzLnJlcGxhY2UoLyhcXCpcXCp8X18pLywgXCJcIik7XHJcblx0XHQvLyB9IGVsc2UgaWYodHlwZSA9PSBcIml0YWxpY1wiKSB7XHJcblx0XHQvLyBcdHN0YXJ0Q2hhcnMgPSBzdGFydENoYXJzLnJlcGxhY2UoLyhcXCp8XykoPyFbXFxzXFxTXSooXFwqfF8pKS8sIFwiXCIpO1xyXG5cdFx0Ly8gXHRlbmRDaGFycyA9IGVuZENoYXJzLnJlcGxhY2UoLyhcXCp8XykvLCBcIlwiKTtcclxuXHRcdC8vIH0gZWxzZSBpZih0eXBlID09IFwic3RyaWtldGhyb3VnaFwiKSB7XHJcblx0XHQvLyBcdHN0YXJ0Q2hhcnMgPSBzdGFydENoYXJzLnJlcGxhY2UoLyhcXCpcXCp8fn4pKD8hW1xcc1xcU10qKFxcKlxcKnx+fikpLywgXCJcIik7XHJcblx0XHQvLyBcdGVuZENoYXJzID0gZW5kQ2hhcnMucmVwbGFjZSgvKFxcKlxcKnx+fikvLCBcIlwiKTtcclxuICAgIC8vIH1cclxuICAgIFxyXG4gICAgLy8gY20ucmVwbGFjZVJhbmdlKHN0YXJ0Q2hhcnMgKyBlbmRDaGFycywge1xyXG4gICAgLy8gICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXHJcbiAgICAvLyAgIGNoOiAwXHJcbiAgICAvLyB9LCB7XHJcbiAgICAvLyAgIGxpbmU6IHN0YXJ0UG9pbnQubGluZSxcclxuICAgIC8vICAgY2g6IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAvLyB9KTtcclxuICB9IGVsc2UgeyAvLyDpnIDopoHmj5LlhaXnmoTlhoXlrrlcclxuICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBpZih0eXBlID09IFwiYm9sZFwiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiKipcIikuam9pbihcIlwiKTtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJfX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJpdGFsaWNcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIipcIikuam9pbihcIlwiKTtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJfXCIpLmpvaW4oXCJcIik7XHJcblx0XHR9IGVsc2UgaWYodHlwZSA9PSBcInN0cmlrZXRocm91Z2hcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIn5+XCIpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0Q2hhcnMgKyB0ZXh0ICsgZW5kQ2hhcnMpO1xyXG5cclxuICAgIHN0YXJ0UG9pbnQuY2ggKz0gc3RhcnRDaGFycy5sZW5ndGg7XHJcbiAgICBlbmRQb2ludC5jaCA9IHN0YXJ0UG9pbnQuY2ggKyB0ZXh0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqIFxyXG4gKiBBY3Rpb24gZnJvIHRvZ2dsZSBJdGFsaWMuXHJcbiAqIGDmlpzkvZNgIOWbvuagh+WkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlSXRhbGljID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdpdGFsaWMnO1xyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgYmxvY2tTdHlsZXMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmJsb2NrU3R5bGVzW3R5cGVdO1xyXG4gIGNvbnN0IHN0YXQgPSBnZXRTdGF0ZShjbSk7XHJcbiAgLy8g5o+S5YWl5YaF5a65XHJcbiAgbGV0IHRleHQ7XHJcbiAgbGV0IHN0YXJ0Q2hhcnMgPSBibG9ja1N0eWxlcztcclxuICBsZXQgZW5kQ2hhcnMgPSBibG9ja1N0eWxlcztcclxuXHJcbiAgbGV0IHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7XHJcbiAgbGV0IGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdlbmQnKTtcclxuXHJcbiAgLy8g5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgaWYgKHN0YXRbdHlwZV0pIHtcclxuICAgIFxyXG4gIH0gZWxzZSB7IC8vIOmcgOimgeaPkuWFpeeahOWGheWuuVxyXG4gICAgdGV4dCA9IGNtLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmKHR5cGUgPT0gXCJib2xkXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCIqKlwiKS5qb2luKFwiXCIpO1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIl9fXCIpLmpvaW4oXCJcIik7XHJcblx0XHR9IGVsc2UgaWYodHlwZSA9PSBcIml0YWxpY1wiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiKlwiKS5qb2luKFwiXCIpO1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIl9cIikuam9pbihcIlwiKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09IFwic3RyaWtldGhyb3VnaFwiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwifn5cIikuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oc3RhcnRDaGFycyArIHRleHQgKyBlbmRDaGFycyk7XHJcblxyXG4gICAgc3RhcnRQb2ludC5jaCArPSBzdGFydENoYXJzLmxlbmd0aDtcclxuICAgIGVuZFBvaW50LmNoID0gc3RhcnRQb2ludC5jaCArIHRleHQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgY20uc2V0U2VsZWN0aW9uKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcclxuICBjbS5mb2N1cygpO1xyXG59XHJcblxyXG4vLyA9PT09PT09PT09IOagh+mimOebuOWFsyA9PT09PT09PT09XHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIHRvZ2dsZSBIZWFkaW5nLlxyXG4gKiBg5qCH6aKYYCDlm77moIflpITnkIblip/og71cclxuICovXHJcbmNvbnN0IHRvZ2dsZUhlYWRpbmcgPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvd2wuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcbiAgY29uc3QgY20gPSBlZGl0b3IuJGNvZGVtaXJyb3I7XHJcblxyXG4gIC8vIOiOt+WPluW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGNvbnN0IHR5cGUgPSBzZWxmLmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJykgfHwgJ0hlYWRpbmcnO1xyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgYmxvY2tTdHlsZXMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmJsb2NrU3R5bGVzW3R5cGVdO1xyXG4gIGNvbnN0IHN0YXQgPSBnZXRTdGF0ZShjbSk7XHJcbiAgXHJcbiAgbGV0IHN0YXJ0Q2hhcnMgPSBibG9ja1N0eWxlcztcclxuICBsZXQgZW5kQ2hhcnMgPSBibG9ja1N0eWxlcztcclxuXHJcbiAgbGV0IHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7XHJcbiAgbGV0IGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdlbmQnKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IHN0YXJ0UG9pbnQubGluZTsgaSA8PSBlbmRQb2ludC5saW5lOyBpKyspIHtcclxuICAgIC8vIOaPkuWFpeWGheWuuVxyXG4gICAgbGV0IHRleHQgPSBjbS5nZXRMaW5lKGkpO1xyXG4gICAgY29uc3QgY3VyckhlYWRpbmdMZXZlbCA9IHRleHQuc2VhcmNoKC9bXiNdLyk7XHJcblxyXG4gICAgdGV4dCA9IFwiIyBcIiArIHRleHQuc3Vic3RyKGN1cnJIZWFkaW5nTGV2ZWwgKyAxKTtcclxuXHJcbiAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogMFxyXG4gICAgfSwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogOTk5OTk5OTk5OTk5OTlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xpbmcgaGVhZGluZyBzaXplOiBub3JtYWwgLT4gaDEgLT4gaDIgLT4gaDMgLT4gaDQgLT4gaDUgLT4gaDYgLT4gbm9ybWFsXHJcbiAqIGDlsI/moIfpophgIOWkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlSGVhZGluZ1NtYWxsZXIgPSAoZSkgPT4ge31cclxuXHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIHRvZ2dsaW5nIGhlYWRpbmcgc2l6ZTogbm9ybWFsIC0+IGg2IC0+IGg1IC0+IGg0IC0+IGgzIC0+IGgyIC0+IGgxIC0+IG5vcm1hbFxyXG4gKiBg5aSn5qCH6aKYYCDlpITnkIblip/og71cclxuICovXHJcbmNvbnN0IHRvZ2dsZUhlYWRpbmdCaWdnZXIgPSAoZSkgPT4ge31cclxuXHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciB0b2dnbGUgQmxvY2txdW90ZS5cclxuICogYOW8leWPt2Ag5aSE55CG5Yqf6IO9XHJcbiAqL1xyXG5jb25zdCB0b2dnbGVCbG9ja3F1b3RlID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xyXG4gIGxldCBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XHJcbiAgY29uc3QgcmVwbCA9IHtcclxuXHRcdFwicXVvdGVcIjogL14oXFxzKilcXD5cXHMrLyxcclxuXHRcdFwidW5vcmRlcmVkLWxpc3RcIjogL14oXFxzKikoXFwqfFxcLXxcXCspXFxzKy8sXHJcblx0XHRcIm9yZGVyZWQtbGlzdFwiOiAvXihcXHMqKVxcZCtcXC5cXHMrL1xyXG5cdH07XHJcblx0Y29uc3QgbWFwID0ge1xyXG5cdFx0XCJxdW90ZVwiOiBcIj4gXCIsXHJcblx0XHRcInVub3JkZXJlZC1saXN0XCI6IFwiKiBcIixcclxuXHRcdFwib3JkZXJlZC1saXN0XCI6IFwiMS4gXCJcclxuICB9O1xyXG4gIFxyXG4gIGZvciAobGV0IGkgPSBzdGFydFBvaW50LmxpbmU7IGkgPD0gZW5kUG9pbnQubGluZTsgaSsrKSB7XHJcbiAgICBsZXQgdGV4dCA9IGNtLmdldExpbmUoaSk7XHJcbiAgICBpZihzdGF0W3R5cGVdKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVwbFt0eXBlXSwgJyQxJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0ID0gbWFwW3R5cGVdICsgdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogMFxyXG4gICAgfSwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogOTk5OTk5OTk5OTk5OTlcclxuICAgIH0pO1xyXG4gIH1cclxuICBjbS5mb2N1cygpO1xyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIGNvZGUuXHJcbiAqIGDku6PnoIHlnZdgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IHRvZ2dsZUNvZGVCbG9jayA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAnY29kZSc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICAvLyDmj5LlhaXlhoXlrrlcclxuICBsZXQgdGV4dDtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG5cclxuICBsZXQgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcignc3RhcnQnKTtcclxuICBsZXQgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpO1xyXG5cclxuICAvLyDlvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBpZiAoc3RhdFt0eXBlXSkge1xyXG4gICAgXHJcbiAgfSBlbHNlIHsgLy8g6ZyA6KaB5o+S5YWl55qE5YaF5a65XHJcbiAgICB0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYodHlwZSA9PSBcImJvbGRcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIioqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX19cIikuam9pbihcIlwiKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09IFwiaXRhbGljXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCIqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJzdHJpa2V0aHJvdWdoXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJ+flwiKS5qb2luKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiY29kZVwiKSB7XHJcbiAgICAgIHRleHQgPSAnXFxuXFxuJztcclxuICAgIH1cclxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oc3RhcnRDaGFycyArIHRleHQgKyBlbmRDaGFycyk7XHJcblxyXG4gICAgc3RhcnRQb2ludC5jaCArPSBzdGFydENoYXJzLmxlbmd0aDtcclxuICAgIGVuZFBvaW50LmNoID0gc3RhcnRQb2ludC5jaCArIHRleHQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLy8gY20uc2V0U2VsZWN0aW9uKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcclxuICBjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgc3RhcnRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIFVub3JkZXJlZExpc3QuXHJcbiAqIGDml6Dluo/liJfooahgIOWkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlVW5vcmRlcmVkTGlzdCA9IChlKSA9PiB7XHJcbiAgdG9nZ2xlQmxvY2txdW90ZShlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlT3JkZXJlZExpc3QuXHJcbiAqIGDmnInluo/liJfooahgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IHRvZ2dsZU9yZGVyZWRMaXN0ID0gKGUpID0+IHtcclxuICB0b2dnbGVCbG9ja3F1b3RlKGUpO1xyXG59XHJcblxyXG4vKipcclxuICog5o+S5YWl5Zu+54mHLlxyXG4gKi9cclxuY29uc3QgZHJhd0ltYWdlID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcblxyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgaW5zZXJ0VGV4dHMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmluc2VydFRleHRzW3R5cGVdO1xyXG5cclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIGxldCB1cmwgPSAnJztcclxuICBcclxuICB1cmwgPSBwcm9tcHQoJ+ivt+i+k+WFpeWbvueJh+WcsOWdgCcsICcnKTtcclxuICBpZiAoIXVybCkgcmV0dXJuIGZhbHNlO1xyXG4gIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmltYWdlLCBpbnNlcnRUZXh0cywgdXJsKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOaPkuWFpemTvuaOpS5cclxuICovXHJcbmNvbnN0IGRyYXdMaW5rID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcblxyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgaW5zZXJ0VGV4dHMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmluc2VydFRleHRzW3R5cGVdO1xyXG5cclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIGxldCB1cmwgPSAnJztcclxuICBcclxuICAvLyB1cmwgPSBwcm9tcHQoJ+ivt+i+k+WFpemTvuaOpScsICcnKTtcclxuICAvLyBpZiAoIXVybCkgcmV0dXJuIGZhbHNlO1xyXG4gIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmxpbmssIGluc2VydFRleHRzLCB1cmwpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgQmFjay5cclxuICog6L+U5Zue5LiA5q2lKOaSpOmUgCkuIFxyXG4gKi9cclxuY29uc3Qgb25VbmRvID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcblxyXG4gIGlmICghRURJVE9SKSBFRElUT1IgPSBlZGl0b3I7XHJcblxyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG4gIGlmIChjbSkge1xyXG4gICAgY29uc3QgaGlzdG9yeSA9IGNtLmdldEhpc3RvcnkoKTtcclxuICAgIGNvbnNvbGUubG9nKCflm57pgIAnLCBoaXN0b3J5KTtcclxuICAgIGNtLnVuZG9TZWxlY3Rpb24oKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIEZyb250LlxyXG4gKiDliY3ov5vkuIDmraUo6YeN5YGaKS5cclxuICovXHJcbmNvbnN0IG9uUmVkbyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG5cclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuICBpZiAoY20pIHtcclxuICAgIGNvbnN0IGhpc3RvcnkgPSBjbS5nZXRIaXN0b3J5KCk7XHJcbiAgICBjb25zb2xlLmxvZygn5Y+W5raI5pKk6ZSAJywgaGlzdG9yeSk7XHJcbiAgICBjbS5yZWRvU2VsZWN0aW9uKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5LuF5pi+56S657yW6L6R6YOo5YiGXHJcbiAqL1xyXG5jb25zdCBvcGVuRWRpdCA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzT25seUVkaXQgPSBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddO1xyXG5cclxuICAvLyDlvZPliY3lj6rmmL7npLrnvJbovpHmlYjmnpxcclxuICBpZiAoaXNPbmx5RWRpdCkgcmV0dXJuO1xyXG5cclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gdHJ1ZTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddID0gIUVESVRPUi4kc3RhdHVzWydpc09ubHlFZGl0J107XHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzU2hvd0FsbCddID0gIUVESVRPUi4kc3RhdHVzWydpc09ubHlFZGl0J107XHJcblxyXG4gIHRvZ2dsZUNsYXNzKHNlbGYsICdhY3RpdmUnKTtcclxuXHJcbiAgLy8g6ZqQ6JePIGDpooTop4jlrrnlmahg77yM5pi+56S6IGDlhoXlrrnnvJbovpHlrrnlmahgLlxyXG4gIGNvbnN0IGVkaXRvckVsID0gRURJVE9SLl9vcHRpb25zLmVsO1xyXG4gIGNvbnN0IHByZXZpZXdFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItcHJldmlldycpO1xyXG4gIGNvbnN0IG1kRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgaWYgKG1kRWwpIHJlbW92ZUNsYXNzKG1kRWwsICdoaWRlJyk7XHJcbiAgaWYgKHByZXZpZXdFbCkgYWRkQ2xhc3MocHJldmlld0VsLCAnaGlkZScpO1xyXG5cclxuICAvLyBg5Y+q5pi+56S66aKE6KeI5Zu+5qCHYCDljrvmjonmv4DmtLvnirbmgIEuXHJcbiAgY29uc3QgdG9vbFByZXZpZXdFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1leWUnKTtcclxuICBjb25zdCB0b29sU2hvd0FsbEVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLWNvbHVtbnMnKTtcclxuICBpZiAodG9vbFByZXZpZXdFbCkgcmVtb3ZlQ2xhc3ModG9vbFByZXZpZXdFbCwgJ2FjdGl2ZScpO1xyXG4gIGlmICh0b29sU2hvd0FsbEVsKSByZW1vdmVDbGFzcyh0b29sU2hvd0FsbEVsLCAnYWN0aXZlJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmmL7npLrnvJbovpHlkozpooTop4guXHJcbiAqL1xyXG5jb25zdCBvcGVuQ29tcGFyZSA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzU2hvd0FsbCA9IEVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuXHJcbiAgLy8g5bey57uP5r+A5rS75YaN5qyh54K55Ye75LiN6L+b6KGM5aSE55CGLlxyXG4gIGlmIChpc1Nob3dBbGwpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzU2hvd0FsbCddID0gdHJ1ZTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddID0gIUVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gIUVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuXHJcbiAgdG9nZ2xlQ2xhc3Moc2VsZiwgJ2FjdGl2ZScpO1xyXG5cclxuICAvLyDmmL7npLogYOmihOiniOWuueWZqGDvvIzmmL7npLogYOWGheWuuee8lui+keWuueWZqGAuXHJcbiAgY29uc3QgZWRpdG9yRWwgPSBFRElUT1IuX29wdGlvbnMuZWw7XHJcbiAgY29uc3QgcHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3Jyk7XHJcbiAgY29uc3QgbWRFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItbWQnKTtcclxuICBpZiAobWRFbCkgcmVtb3ZlQ2xhc3MobWRFbCwgJ2hpZGUnKTtcclxuICBpZiAocHJldmlld0VsKSByZW1vdmVDbGFzcyhwcmV2aWV3RWwsICdoaWRlJyk7XHJcblxyXG4gIC8vIOWOu+aOiSBg57yW6L6RYCBg6aKE6KeIYCDmv4DmtLvmlYjmnpwuXHJcbiAgY29uc3QgdG9vbEVkaXRFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1wZW4nKTtcclxuICBjb25zdCB0b29sUHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLWV5ZScpO1xyXG4gIGlmICh0b29sRWRpdEVsKSByZW1vdmVDbGFzcyh0b29sRWRpdEVsLCAnYWN0aXZlJyk7XHJcbiAgaWYgKHRvb2xQcmV2aWV3RWwpIHJlbW92ZUNsYXNzKHRvb2xQcmV2aWV3RWwsICdhY3RpdmUnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOS7heaYvuekuumihOiniOmDqOWIhi4gXHJcbiAqL1xyXG5jb25zdCBvcGVuUHJldmlldyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzT25seVByZXZpZXcgPSBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG5cclxuICAvLyDlvZPliY3lj6rmmL7npLrpooTop4jop4blm74uXHJcbiAgaWYgKGlzT25seVByZXZpZXcpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seVByZXZpZXcnXSA9IHRydWU7XHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seUVkaXQnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG4gIEVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG5cclxuICB0b2dnbGVDbGFzcyhzZWxmLCAnYWN0aXZlJyk7XHJcblxyXG4gIC8vIOaYvuekuu+8miBg6aKE6KeI5a655ZmoYO+8jOmakOiXj++8mmDlhoXlrrnnvJbovpHlrrnlmahgLlxyXG4gIGNvbnN0IGVkaXRvckVsID0gRURJVE9SLl9vcHRpb25zLmVsO1xyXG4gIGNvbnN0IG1kRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgY29uc3QgcHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3Jyk7XHJcbiAgaWYgKG1kRWwpIGFkZENsYXNzKG1kRWwsICdoaWRlJyk7XHJcbiAgaWYgKHByZXZpZXdFbCkgcmVtb3ZlQ2xhc3MocHJldmlld0VsLCAnaGlkZScpO1xyXG5cclxuICAvLyBg5Y+q5pi+56S657yW6L6R5Zu+5qCHYCDljrvmjonmv4DmtLvnirbmgIFcclxuICBjb25zdCB0b29sRWRpdEVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLXBlbicpO1xyXG4gIGNvbnN0IHRvb2xTaG93QWxsRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXRvb2xzJykucXVlcnlTZWxlY3RvcignLmljb24tY29sdW1ucycpO1xyXG4gIGlmICh0b29sRWRpdEVsKSByZW1vdmVDbGFzcyh0b29sRWRpdEVsLCAnYWN0aXZlJyk7XHJcbiAgaWYgKHRvb2xTaG93QWxsRWwpIHJlbW92ZUNsYXNzKHRvb2xTaG93QWxsRWwsICdhY3RpdmUnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWFqOWxj+aMiemSrueCueWHu+WkhOeQhuWbnuiwgy4gXHJcbiAqL1xyXG5jb25zdCBvcGVuRnVsbFNjcmVlbiA9IChlKSA9PiB7XHJcbiAgY29tbW9uQWN0aW9uKGUpO1xyXG5cclxuICBjb25zdCBlZGl0b3JFbCA9IEVESVRPUi5fb3B0aW9ucy5lbDtcclxuXHJcbiAgdG9nZ2xlQ2xhc3MoZWRpdG9yRWwsICdmdWxsc2NyZWVuJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBg5YWz5LqOYCDngrnlh7vlpITnkIblm57osIMuXHJcbiAqL1xyXG5jb25zdCBhYm91dEVkaXRvciA9ICgpID0+IHtcclxuICB3aW5kb3cub3BlbihnaXRHdWJVcmwpO1xyXG59XHJcblxyXG4vKipcclxuICog5Zu+54mH5ZKM5Zyw5Z2A5o+S5YWl5YaF5a655aSE55CGLiBcclxuICovXHJcbmZ1bmN0aW9uIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBhY3RpdmUsIHN0YXJ0RW5kLCB1cmwpIHtcclxuXHR2YXIgdGV4dDtcclxuXHR2YXIgc3RhcnQgPSBzdGFydEVuZFswXTtcclxuXHR2YXIgZW5kID0gc3RhcnRFbmRbMV07XHJcblx0dmFyIHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoXCJzdGFydFwiKTtcclxuXHR2YXIgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoXCJlbmRcIik7XHJcblx0Ly8gaWYodXJsKSB7XHJcbiAgLy8gICBlbmQgPSBlbmQucmVwbGFjZShcIiN1cmwjXCIsIHVybCk7XHJcbiAgLy8gfVxyXG4gIGVuZCA9IGVuZC5yZXBsYWNlKFwiI3VybCNcIiwgdXJsKTtcclxuXHRpZihhY3RpdmUpIHtcclxuXHRcdHRleHQgPSBjbS5nZXRMaW5lKHN0YXJ0UG9pbnQubGluZSk7XHJcblx0XHRzdGFydCA9IHRleHQuc2xpY2UoMCwgc3RhcnRQb2ludC5jaCk7XHJcblx0XHRlbmQgPSB0ZXh0LnNsaWNlKHN0YXJ0UG9pbnQuY2gpO1xyXG5cdFx0Y20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XHJcblx0XHRcdGxpbmU6IHN0YXJ0UG9pbnQubGluZSxcclxuXHRcdFx0Y2g6IDBcclxuXHRcdH0pO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0ICsgdGV4dCArIGVuZCk7XHJcblxyXG5cdFx0c3RhcnRQb2ludC5jaCArPSBzdGFydC5sZW5ndGg7XHJcblx0XHRpZihzdGFydFBvaW50ICE9PSBlbmRQb2ludCkge1xyXG5cdFx0XHRlbmRQb2ludC5jaCArPSBzdGFydC5sZW5ndGg7XHJcblx0XHR9XHJcblx0fVxyXG5cdGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRvb2xzIOWbvuagh+eCueWHu+Wbnuiwg+WkhOeQhuWHveaVsOS4reebuOWQjOeahOWkhOeQhumDqOWIhi4gXHJcbiAqIFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZSDop6blj5Hlm77moIflr7nlupTlm57osIPnmoTkuovku7blr7nosaEuXHJcbiAqIEByZXR1cm4ge09iamVjdH0gZWRpdG9yIOe8lui+keWZqOWunuS+i+WvueixoS5cclxuICovXHJcbmZ1bmN0aW9uIGNvbW1vbkFjdGlvbiAoZSkge1xyXG4gIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuXHJcbiAgdG9nZ2xlQ2xhc3Moc2VsZiwgJ2FjdGl2ZScpO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG5cclxuICByZXR1cm4gZWRpdG9yO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICog5bel5YW35oyJ6ZKu5a6a5LmJ6ZuG5ZCILlxyXG4gKiBcclxuICogYGl0ZW0ubmFtZWAgICAgICAgICAgICAgICDmjInpkq7lkI1cclxuICogYGl0ZW0uYWN0aW9uYCAgICAgICAgICAgICDlpITnkIblh73mlbBcclxuICogYGl0ZW0uY2xhc3NOYW1lYCAgICAgICAgICDlm77moIflkI1cclxuICogYGl0ZW0udGl0bGVgICAgICAgICAgICAgICBob3ZlciDmoIfpophcclxuICogYGl0ZW0uZGVmYXVsdGAgICAgICAgICAgICDpu5jorqTlrprkuYnnmoRcclxuICogYGl0ZW0uaW5kZXhgICAgICAgICAgICAgICDmlL7nva7nmoTpobrluo/vvIzotorlsI/otorpnaDliY1cclxuICogYGl0ZW0uaXNFZGl0VG9vbHNgICAgICAgICDmmK/lkKbkuLrlhoXlrrnnvJbovpHlm77moIfjgIJcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICDlt6XlhbfmoI/lm77moIfliIbkuKTlpKfnsbs6IDEuIOWGheWuuee8lui+keW3peWFt+Wbvuagh++8jDIuIOmihOiniOWPiuW4g+WxgOiuvue9ruW3peWFt+Wbvuagh1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5jb25zdCB0b29sYmFyQnVpbHRJbkJ1dHRvbnMgPSB7XHJcbiAgJ2JvbGQnOiB7XHJcbiAgICBuYW1lOiAnYm9sZCcsXHJcbiAgICBhY3Rpb246IHRvZ2dsZUJvbGQsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWJvbGQnLFxyXG4gICAgdGl0bGU6ICdCb2xkJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMCxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnaXRhbGljJzoge1xyXG4gICAgbmFtZTogJ2l0YWxpYycsXHJcbiAgICBhY3Rpb246IHRvZ2dsZUl0YWxpYyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24taXRhbGljJyxcclxuICAgIHRpdGxlOiAnSXRhbGljJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMSxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnaGVhZGluZyc6IHtcclxuICAgIG5hbWU6ICdoZWFkaW5nJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlSGVhZGluZyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24taGVhZGluZycsXHJcbiAgICB0aXRsZTogJ0hlYWRpbmcnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAyLFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdxdW90ZSc6IHtcclxuICAgIG5hbWU6ICdxdW90ZScsXHJcbiAgICBhY3Rpb246IHRvZ2dsZUJsb2NrcXVvdGUsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLXF1b3RhdGlvbi1tYXJrcycsXHJcbiAgICB0aXRsZTogJ1F1b3RlJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMyxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnY29kZSc6IHtcclxuICAgIG5hbWU6ICdjb2RlJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlQ29kZUJsb2NrLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1jb2RlJyxcclxuICAgIHRpdGxlOiAnQ29kZScsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDQsXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3Vub3JkZXJlZC1saXN0Jzoge1xyXG4gICAgbmFtZTogJ3Vub3JkZXJlZC1saXN0JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tTGlzdG9maXNzdWVzJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlVW5vcmRlcmVkTGlzdCxcclxuICAgIHRpdGxlOiAnR2VuZXJpYyBMaXN0JyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNSxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnb3JkZXJlZC1saXN0Jzoge1xyXG4gICAgbmFtZTogJ29yZGVyZWQtbGlzdCcsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWxpc3QnLFxyXG4gICAgYWN0aW9uOiB0b2dnbGVPcmRlcmVkTGlzdCxcclxuICAgIHRpdGxlOiAnTnVtYmVyIExpc3QnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiA2LFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdsaW5rJzoge1xyXG4gICAgbmFtZTogJ2xpbmsnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1saW5rJyxcclxuICAgIGFjdGlvbjogZHJhd0xpbmssXHJcbiAgICB0aXRsZTogJ0luc2VydCBMaW5rJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNyxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnaW1hZ2UnOiB7XHJcbiAgICBuYW1lOiAnaW1hZ2UnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1pbWcnLFxyXG4gICAgYWN0aW9uOiBkcmF3SW1hZ2UsXHJcbiAgICB0aXRsZTogJ0luc2VydCBJbWFnZScsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDgsXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3VuZG8nOiB7XHJcbiAgICBuYW1lOiAndW5kbycsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWdvTGVmdCcsXHJcbiAgICBhY3Rpb246IG9uVW5kbyxcclxuICAgIHRpdGxlOiAnVW5kbycsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDksXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3JlZG8nOiB7XHJcbiAgICBuYW1lOiAncmVkbycsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWdvUmlnaHQnLFxyXG4gICAgYWN0aW9uOiBvblJlZG8sXHJcbiAgICB0aXRsZTogJ1JlZG8nLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAxMCxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnYWJvdXQnOiB7XHJcbiAgICBuYW1lOiAnYWJvdXQnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1xdWVzdGlvbicsXHJcbiAgICBhY3Rpb246IGFib3V0RWRpdG9yLFxyXG4gICAgdGl0bGU6ICdBYm91dCBFZGl0b3InLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAwLFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuICAnZWRpdCc6IHtcclxuICAgIG5hbWU6ICdlZGl0JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tcGVuJyxcclxuICAgIGFjdGlvbjogb3BlbkVkaXQsXHJcbiAgICB0aXRsZTogJ1RvZ2dsZSBFZGl0JyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMSxcclxuICAgIGlzRWRpdFRvb2xzOiBmYWxzZVxyXG4gIH0sXHJcbiAgJ2NvbXBhcmUnOiB7XHJcbiAgICBuYW1lOiAnY29tcGFyZScsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWNvbHVtbnMnICsgJyBhY3RpdmUnLFxyXG4gICAgYWN0aW9uOiBvcGVuQ29tcGFyZSxcclxuICAgIHRpdGxlOiAnVG9nZ2xlIENvbXBhcmUnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAyLFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuICAncHJldmlldyc6IHtcclxuICAgIG5hbWU6ICdwcmV2aWV3JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tZXllJyxcclxuICAgIGFjdGlvbjogb3BlblByZXZpZXcsXHJcbiAgICB0aXRsZTogJ1RvZ2dsZSBQcmV2aWV3JyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMyxcclxuICAgIGlzRWRpdFRvb2xzOiBmYWxzZVxyXG4gIH0sXHJcbiAgJ2Z1bGxzY3JlZW4nOiB7XHJcbiAgICBuYW1lOiAnZnVsbHNjcmVlbicsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWZ1bGwtc2NyZWVuJyxcclxuICAgIGFjdGlvbjogb3BlbkZ1bGxTY3JlZW4sXHJcbiAgICB0aXRsZTogJ1RvZ2dsZSBGdWxsc2NyZWVuJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNCxcclxuICAgIGlzRWRpdFRvb2xzOiBmYWxzZVxyXG4gIH0sXHJcblxyXG59XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBNYXJrZG93biDmoLzlvI/mqKHmnb8uXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcbmNvbnN0IGluc2VydFRleHRzID0ge1xyXG4gIGxpbms6IFtcIltcIiwgXCJdKCN1cmwjKVwiXSxcclxuXHRpbWFnZTogW1wiIVtdKFwiLCBcIiN1cmwjKVwiXSxcclxuXHR0YWJsZTogW1wiXCIsIFwiXFxuXFxufCBDb2x1bW4gMSB8IENvbHVtbiAyIHwgQ29sdW1uIDMgfFxcbnwgLS0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tIHxcXG58IFRleHQgICAgIHwgVGV4dCAgICAgfCBUZXh0ICAgICB8XFxuXFxuXCJdLFxyXG5cdGhvcml6b250YWxSdWxlOiBbXCJcIiwgXCJcXG5cXG4tLS0tLVxcblxcblwiXVxyXG59XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiDov5znqIvpu5jorqTnmoTmloflrZcuXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcbmNvbnN0IHByb21wdFRleHRzID0ge1xyXG5cdGxpbms6IFwiVVJMIGZvciB0aGUgbGluazpcIixcclxuXHRpbWFnZTogXCJVUkwgb2YgdGhlIGltYWdlOlwiXHJcbn1cclxuXHJcbi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIE1hcmtkb3duIOWdl+e6p+agvOW8j+aooeadvy5cclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuY29uc3QgYmxvY2tTdHlsZXMgPSB7XHJcbiAgXCJib2xkXCI6IFwiKipcIixcclxuXHRcImNvZGVcIjogXCJgYGBcIixcclxuXHRcIml0YWxpY1wiOiBcIipcIlxyXG59XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiDlv6vmjbfplK7mjInplK7or7TmmI7mloflrZcuXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcbmNvbnN0IHNob3J0Y3V0cyA9IHtcclxuICBcImJvbGRcIjogXCJDbWQtQlwiLFxyXG5cdFwiaXRhbGljXCI6IFwiQ21kLUlcIixcclxuXHRcImxpbmtcIjogXCJDbWQtS1wiLFxyXG4gIFwiaGVhZGluZ1wiOiBcIkNtZC1IXCIsXHJcbiAgXCJxdW90ZVwiOiBcIkNtZC0nXCIsXHJcblx0XCJ0b2dnbGVIZWFkaW5nQmlnZ2VyXCI6IFwiU2hpZnQtQ21kLUhcIixcclxuXHRcImNsZWFuQmxvY2tcIjogXCJDbWQtRVwiLFxyXG4gIFwiaW1hZ2VcIjogXCJDbWQtQWx0LUlcIixcclxuICBcImJhY2tcIjogXCJDbWQtWlwiLFxyXG4gIFwiZnJvbnRcIjogXCJDbWQtWVwiLFxyXG5cdFwidG9nZ2xlQmxvY2txdW90ZVwiOiBcIkNtZC0nXCIsXHJcblx0XCJvcmRlcmVkLWxpc3RcIjogXCJDbWQtQWx0LUxcIixcclxuXHRcInVub3JkZXJlZC1saXN0XCI6IFwiQ21kLUxcIixcclxuXHRcInRvZ2dsZUNvZGVCbG9ja1wiOiBcIkNtZC1BbHQtQ1wiLFxyXG5cdFwidG9nZ2xlUHJldmlld1wiOiBcIkNtZC1QXCIsXHJcblx0XCJ0b2dnbGVTaWRlQnlTaWRlXCI6IFwiRjlcIixcclxuXHRcInRvZ2dsZUZ1bGxTY3JlZW5cIjogXCJGMTFcIlxyXG59XHJcblxyXG4vKipcclxuICogd2luIOWSjCBNYWMg5b+r5o236ZSu5YW85a655aSE55CG5Yqf6IO95Ye95pWwXHJcbiAqIEBwYXJhbSB7b2JqZXR9IG5hbWUgXHJcbiAqIEBkZXNjIHdpbjogQ3RybDsgbWFjOiBDbWRcclxuICovXHJcbmNvbnN0IGZpeFNob3J0Y3V0ID0gKG5hbWUpID0+IHtcclxuICBpZiAoaXNNYWMpIHtcclxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJ0N0cmwnLCAnQ21kJyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJ0NtZCcsICdDdHJsJyk7XHJcbiAgfVxyXG4gIHJldHVybiBuYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgdG9vbGJhckJ1aWx0SW5CdXR0b25zLFxyXG5cclxuICBpbnNlcnRUZXh0cyxcclxuXHJcbiAgcHJvbXB0VGV4dHMsXHJcblxyXG4gIGJsb2NrU3R5bGVzLFxyXG5cclxuICBzaG9ydGN1dHMsXHJcblxyXG4gIGZpeFNob3J0Y3V0XHJcbn0iLCJjb25zdCBVdGlsID0ge1xyXG4gIC8qKlxyXG4gICAqIE1lcmdlIHRoZSBwcm9wZXJ0aWVzIG9mIG9uZSBvYmplY3QgaW50byBhbm90aGVyLlxyXG4gICAqIOWwhuS4gOS4quWvueixoeeahOWxnuaAp+WQiOW5tuWIsOWPpuS4gOS4quWvueixoeS4ii4gXHJcbiAgICogT2JqZWN0LmFzc2lnbih7fSwge3BlcnNvbjoge25hbWU6IDEsIGFnZTogMTZ9fSwge3BlcnNvbjoge25hbWU6MX19KVxyXG4gICAqIOS9v+eUqCBPYmplY3QuYXNzaWduIOmcgOimgeWkhOeQhuWkmuWxguaVsOaNruWJjeWPsOeahOmXrumimO+8jOi/memHjOWwseiHquihjOWwgeijheS6hi5cclxuICAgKi9cclxuICBfbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBzb3VyY2UpIHtcclxuICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBpZiAoc291cmNlW3Byb3BlcnR5XSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wZXJ0eV0gaW5zdGFuY2VvZiBBcnJheSA/IHRhcmdldFtwcm9wZXJ0eV0gOiBbXTtcclxuICAgICAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldLmNvbmNhdCh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdHlwZW9mIHNvdXJjZVtwcm9wZXJ0eV0gPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICBzb3VyY2VbcHJvcGVydHldLmNvbnN0cnVjdG9yID09PSBPYmplY3QgKSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0YXJnZXRbcHJvcGVydHldID0gdGhpcy5fbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldFtwcm9wZXJ0eV0gfHwge30sIHNvdXJjZVtwcm9wZXJ0eV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YXJnZXRbcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG4gIH0sXHJcbiAgXHJcbiAgLyoqIFxyXG4gICAqIE1lcmdlIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygb2JqZWN0cyBpbnQgb25lLlxyXG4gICAqIOWwhuS7u+aEj+aVsOmHj+eahOWvueixoeWQiOW5tuWIsOS4gOS4quWvueixoeS4ii5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge30gdGFyZ2V0IFxyXG4gICAqL1xyXG4gIGV4dGVuZCh0YXJnZXQpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRhcmdldCA9IHRoaXMuX21lcmdlUHJvcGVydGllcyh0YXJnZXQsIGFyZ3VtZW50c1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxuICB9LFxyXG5cclxuICBpc01hYzogL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFxyXG5cclxuICAvKipcclxuICAgKiDlhYPntKDmoLflvI/liIfmjaIuIFxyXG4gICAqL1xyXG4gIHRvZ2dsZUNsYXNzKGVsLCBjbGFzc05hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgZWwgIT09ICdvYmplY3QnKSByZXR1cm47XHJcbiAgICBjb25zdCBpc0V4aXN0ID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XHJcbiAgICBpZiAoaXNFeGlzdCkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICog5YWD57Sg5qC35byP5aKe5YqgLiBcclxuICAgKi9cclxuICBhZGRDbGFzcyhlbCwgY2xhc3NOYW1lKSB7XHJcbiAgICBpZiAodHlwZW9mIGVsICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNFeGlzdCA9IGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xyXG4gICAgaWYgKCFpc0V4aXN0KSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOWFg+e0oOagt+W8j+WIoOmZpC4gXHJcbiAgICovXHJcbiAgcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xyXG4gICAgaWYgKHR5cGVvZiBlbCAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuICAgIGNvbnN0IGlzRXhpc3QgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcclxuICAgIGlmIChpc0V4aXN0KSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiDlr7nosaHovazkuLrmlbDnu4QuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiDpnIDopoHovazmjaLnmoTlr7nosaEuIFxyXG4gICAqL1xyXG4gIG9iajJBcnIob2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgIGNvbnN0IGtleUFyciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XHJcbiAgICBpZiAoa2V5QXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICBrZXlBcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB2YWx1ZSA9IG9ialtpdGVtXTtcclxuICAgICAgICBhcnIucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiDliKTmlq3mmK/lkKbkuLrlh73mlbAuIFxyXG4gICAqL1xyXG4gIGlzRnVuY3Rpb24oZm4pIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlsOyIsImltcG9ydCBsYW5nIGZyb20gJy4vbGFuZy9lbic7XHJcblxyXG4vKiogPT09PT09PT09PSDnvJbovpHlmajpu5jorqTphY3nva7moLzlvI8gPT09PT09PT09PSAgKi9cclxuY29uc3QgY29uZmlnID0ge1xyXG4gIGJhc2VVcmw6ICdodHRwczovL3d3dy5naXRodWIuY29tJyxcclxuICAvKiog6Zi/6YeM5Zu+5qCH6L+e5o6lICovXHJcbiAgaWNvbkxpbms6ICcvL2F0LmFsaWNkbi5jb20vdC9mb250XzgyMzAzMF9neHZrZ2FocHg0OS5jc3MnLFxyXG4gIGdpdEd1YlVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9KZXNvbmh1L2Nvb2wtbWQtZWRpdG9yJyxcclxuICBlZGl0b3I6IHtcclxuICAgIC8qKiDmt7vliqDnu5lg57yW6L6R5ZmoYOmhtue6p+WuueWZqOeahOagt+W8j+exu+WQjSAqL1xyXG4gICAgY2xhc3NOYW1lOiB7XHJcbiAgICAgIC8qKiDpu5HoibLkuLvpopggKi9cclxuICAgICAgdGhlbWVEYXJrOiAnZWRpdG9yLXRoZW1lLWRhcmsnLFxyXG4gICAgICAvKiog5Lqu6Imy5Li76aKYICovXHJcbiAgICAgIHRoZW1lTGlnaHQ6ICdlZGl0b3ItdGhlbWUtbGlnaHQnLFxyXG4gICAgICAvKiog5YWo5bGPICovXHJcbiAgICAgIGZ1bGxzY3JlZW46ICdlZGl0b3Itc3RhdHVzX2Z1bGxzY3JlZW4nLFxyXG4gICAgICAvKiog5a+55q+U6aKE6KeIICovXHJcbiAgICAgIGNvbXBhcmU6ICdlZGl0b3Itc3RhdHVzX3Nob3ctYWxsJyxcclxuICAgICAgLyoqIOS7hee8lui+kSAqL1xyXG4gICAgICBlZGl0OiAnZWRpdG9yLXN0YXR1c19vbmx5LWVkaXQnLFxyXG4gICAgICAvKiog5LuF55yL6aKE6KeIICovXHJcbiAgICAgIHByZXZpZXc6ICdlZGl0b3Itc3RhdHVzX29ubHktcHJldmlldycsXHJcbiAgICB9LFxyXG4gICAgdGhlbWU6IHtcclxuICAgICAgZGFyazoge1xyXG4gICAgICAgIGNsYXNzTmFtZTogJ2VkaXRvci10aGVtZS1kYXJrJyxcclxuICAgICAgICBtb2RlOiAnYmFzZTE2LWRhcmsnXHJcbiAgICAgIH0sXHJcbiAgICAgIGxpZ2h0OiB7XHJcbiAgICAgICAgY2xhc3NOYW1lOiAnZWRpdG9yLXRoZW1lLWxpZ2h0JyxcclxuICAgICAgICBtb2RlOiAnYmFzZTE2LWxpZ2h0J1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbGFuZ3VhZ2U6IGxhbmdcclxuICB9LFxyXG4gIHNob3J0Y3V0czoge1xyXG4gICAgaXNPcGVuOiBmYWxzZSxcclxuICB9LFxyXG4gIFxyXG4gIC8vID09PT09IHFpbml1ID09PT09XHJcbiAgcWluaXU6IHtcclxuICAgIHRva2VuQXBpVXJsOiAnaHR0cDovLzEyNy4wLjAuMTozMDAxL2FwaS9xaW5pdS9ibG9nL2dldF90b2tlbicsXHJcbiAgICByZWdpb246ICd6MScsXHJcbiAgICBjb25maWc6IHt9LFxyXG4gICAgcHV0RXh0cmE6IHt9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWc7IiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gZWRpdG9yIGVuZ2xpc2ggbGFudWFnZS5cclxuLy9cclxuLy8gQHVwZGF0ZSAyMDE5LzAxLzIyXHJcbi8vIEBhdXRob3IgSmVzb25odShnaXRodWIpXHJcbi8vIEBlbWlhbCBqZXNvbmh1X3dlYkAxNjMuY29tXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgdG9vbGJhckl0ZW06IHtcclxuICAgICdib2xkJzogJ0JvbGQnLFxyXG4gICAgJ2l0YWxpYyc6ICdJdGFsaWMnLFxyXG4gICAgJ2hlYWRpbmcnOiAnSGVhZGluZycsXHJcbiAgICAncXVvdGUnOiAnUXVvdGUnLFxyXG4gICAgJ2NvZGUnOiAnQ29kZScsXHJcbiAgICAndW5vcmRlcmVkLWxpc3QnOiAnR2VuZXJpYyBMaXN0JyxcclxuICAgICdvcmRlcmVkLWxpc3QnOiAnTnVtYmVyIExpc3QnLFxyXG4gICAgJ2xpbmsnOiAnSW5zZXJ0IExpbmsnLFxyXG4gICAgJ2ltYWdlJzogJ0luc2VydCBJbWFnZScsXHJcbiAgICAndW5kbyc6ICdVbmRvJyxcclxuICAgICdyZWRvJzogJ1JlZG8nLFxyXG4gICAgJ2Fib3V0JzogJ0Fib3V0IEVkaXRvcicsXHJcbiAgICAnZWRpdCc6ICdUb2dnbGUgRWRpdCcsXHJcbiAgICAnY29tcGFyZSc6ICdUb2dnbGUgQ29tcGFyZScsXHJcbiAgICAncHJldmlldyc6ICdUb2dnbGUgUHJldmlldycsXHJcbiAgICAnZnVsbHNjcmVlbic6ICdUb2dnbGUgRnVsbHNjcmVlbidcclxuICB9LFxyXG4gIHN0YXR1c0Jhcjoge1xyXG4gICAgbGluZTogJ2xpbmUnLFxyXG4gICAgY29sdW1uczogJ2NvbHVtbnMnLFxyXG4gICAgbGVuZ3RoOiAnbGVuZ3RoJ1xyXG4gIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnosuIFxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7Y219IGNvZGVtaXJyb3Ig5a+56LGhLlxyXG4gICAqIEBwYXJhbSB7cG9zfSBwb3Mg5L2N572uLlxyXG4gICAqL1xyXG4gIGdldFN0YXRlKGNtLCBwb3MpIHtcclxuICAgIHBvcyA9IHBvcyB8fCBjbS5nZXRDdXJzb3IoXCJzdGFydFwiKTtcclxuICAgIHZhciBzdGF0ID0gY20uZ2V0VG9rZW5BdChwb3MpO1xyXG4gICAgaWYgKCFzdGF0LnR5cGUpIHJldHVybiB7fTtcclxuXHJcbiAgICB2YXIgdHlwZXMgPSBzdGF0LnR5cGUuc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgIHZhciByZXQgPSB7fSxcclxuICAgICAgZGF0YSwgdGV4dDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZGF0YSA9IHR5cGVzW2ldO1xyXG4gICAgICBpZiAoZGF0YSA9PT0gXCJzdHJvbmdcIikge1xyXG4gICAgICAgIHJldC5ib2xkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInZhcmlhYmxlLTJcIikge1xyXG4gICAgICAgIHRleHQgPSBjbS5nZXRMaW5lKHBvcy5saW5lKTtcclxuICAgICAgICBpZiAoL15cXHMqXFxkK1xcLlxccy8udGVzdCh0ZXh0KSkge1xyXG4gICAgICAgICAgcmV0W1wib3JkZXJlZC1saXN0XCJdID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0W1widW5vcmRlcmVkLWxpc3RcIl0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImF0b21cIikge1xyXG4gICAgICAgIHJldC5xdW90ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gXCJlbVwiKSB7XHJcbiAgICAgICAgcmV0Lml0YWxpYyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gXCJxdW90ZVwiKSB7XHJcbiAgICAgICAgcmV0LnF1b3RlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInN0cmlrZXRocm91Z2hcIikge1xyXG4gICAgICAgIHJldC5zdHJpa2V0aHJvdWdoID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImNvbW1lbnRcIikge1xyXG4gICAgICAgIHJldC5jb2RlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImxpbmtcIikge1xyXG4gICAgICAgIHJldC5saW5rID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInRhZ1wiKSB7XHJcbiAgICAgICAgcmV0LmltYWdlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLm1hdGNoKC9eaGVhZGVyKFxcLVsxLTZdKT8kLykpIHtcclxuICAgICAgICByZXRbZGF0YS5yZXBsYWNlKFwiaGVhZGVyXCIsIFwiaGVhZGluZ1wiKV0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxufSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi94bWwveG1sXCIpLCByZXF1aXJlKFwiLi4vbWV0YVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL3htbC94bWxcIiwgXCIuLi9tZXRhXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcIm1hcmtkb3duXCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSB7XG5cbiAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtQ2ZnLCBcInRleHQvaHRtbFwiKTtcbiAgdmFyIGh0bWxNb2RlTWlzc2luZyA9IGh0bWxNb2RlLm5hbWUgPT0gXCJudWxsXCJcblxuICBmdW5jdGlvbiBnZXRNb2RlKG5hbWUpIHtcbiAgICBpZiAoQ29kZU1pcnJvci5maW5kTW9kZUJ5TmFtZSkge1xuICAgICAgdmFyIGZvdW5kID0gQ29kZU1pcnJvci5maW5kTW9kZUJ5TmFtZShuYW1lKTtcbiAgICAgIGlmIChmb3VuZCkgbmFtZSA9IGZvdW5kLm1pbWUgfHwgZm91bmQubWltZXNbMF07XG4gICAgfVxuICAgIHZhciBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtQ2ZnLCBuYW1lKTtcbiAgICByZXR1cm4gbW9kZS5uYW1lID09IFwibnVsbFwiID8gbnVsbCA6IG1vZGU7XG4gIH1cblxuICAvLyBTaG91bGQgY2hhcmFjdGVycyB0aGF0IGFmZmVjdCBoaWdobGlnaHRpbmcgYmUgaGlnaGxpZ2h0ZWQgc2VwYXJhdGU/XG4gIC8vIERvZXMgbm90IGluY2x1ZGUgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgb3V0cHV0IChzdWNoIGFzIGAxLmAgYW5kIGAtYCBmb3IgbGlzdHMpXG4gIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcgPSBmYWxzZTtcblxuICAvLyBNYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgYmxvY2txdW90ZXMuIFNldCB0byAwIGZvciBpbmZpbml0ZSBuZXN0aW5nLlxuICAvLyBFeGNlc3MgYD5gIHdpbGwgZW1pdCBgZXJyb3JgIHRva2VuLlxuICBpZiAobW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA9IDA7XG5cbiAgLy8gVHVybiBvbiB0YXNrIGxpc3RzPyAoXCItIFsgXSBcIiBhbmQgXCItIFt4XSBcIilcbiAgaWYgKG1vZGVDZmcudGFza0xpc3RzID09PSB1bmRlZmluZWQpIG1vZGVDZmcudGFza0xpc3RzID0gZmFsc2U7XG5cbiAgLy8gVHVybiBvbiBzdHJpa2V0aHJvdWdoIHN5bnRheFxuICBpZiAobW9kZUNmZy5zdHJpa2V0aHJvdWdoID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG5cbiAgaWYgKG1vZGVDZmcuZW1vamkgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLmVtb2ppID0gZmFsc2U7XG5cbiAgaWYgKG1vZGVDZmcuZmVuY2VkQ29kZUJsb2NrSGlnaGxpZ2h0aW5nID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5mZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmcgPSB0cnVlO1xuXG4gIGlmIChtb2RlQ2ZnLnhtbCA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcueG1sID0gdHJ1ZTtcblxuICAvLyBBbGxvdyB0b2tlbiB0eXBlcyB0byBiZSBvdmVycmlkZGVuIGJ5IHVzZXItcHJvdmlkZWQgdG9rZW4gdHlwZXMuXG4gIGlmIChtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlcyA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcudG9rZW5UeXBlT3ZlcnJpZGVzID0ge307XG5cbiAgdmFyIHRva2VuVHlwZXMgPSB7XG4gICAgaGVhZGVyOiBcImhlYWRlclwiLFxuICAgIGNvZGU6IFwiY29tbWVudFwiLFxuICAgIHF1b3RlOiBcInF1b3RlXCIsXG4gICAgbGlzdDE6IFwidmFyaWFibGUtMlwiLFxuICAgIGxpc3QyOiBcInZhcmlhYmxlLTNcIixcbiAgICBsaXN0MzogXCJrZXl3b3JkXCIsXG4gICAgaHI6IFwiaHJcIixcbiAgICBpbWFnZTogXCJpbWFnZVwiLFxuICAgIGltYWdlQWx0VGV4dDogXCJpbWFnZS1hbHQtdGV4dFwiLFxuICAgIGltYWdlTWFya2VyOiBcImltYWdlLW1hcmtlclwiLFxuICAgIGZvcm1hdHRpbmc6IFwiZm9ybWF0dGluZ1wiLFxuICAgIGxpbmtJbmxpbmU6IFwibGlua1wiLFxuICAgIGxpbmtFbWFpbDogXCJsaW5rXCIsXG4gICAgbGlua1RleHQ6IFwibGlua1wiLFxuICAgIGxpbmtIcmVmOiBcInN0cmluZ1wiLFxuICAgIGVtOiBcImVtXCIsXG4gICAgc3Ryb25nOiBcInN0cm9uZ1wiLFxuICAgIHN0cmlrZXRocm91Z2g6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGVtb2ppOiBcImJ1aWx0aW5cIlxuICB9O1xuXG4gIGZvciAodmFyIHRva2VuVHlwZSBpbiB0b2tlblR5cGVzKSB7XG4gICAgaWYgKHRva2VuVHlwZXMuaGFzT3duUHJvcGVydHkodG9rZW5UeXBlKSAmJiBtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlc1t0b2tlblR5cGVdKSB7XG4gICAgICB0b2tlblR5cGVzW3Rva2VuVHlwZV0gPSBtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlc1t0b2tlblR5cGVdO1xuICAgIH1cbiAgfVxuXG4gIHZhciBoclJFID0gL14oWypcXC1fXSkoPzpcXHMqXFwxKXsyLH1cXHMqJC9cbiAgLCAgIGxpc3RSRSA9IC9eKD86WypcXC0rXXxeWzAtOV0rKFsuKV0pKVxccysvXG4gICwgICB0YXNrTGlzdFJFID0gL15cXFsoeHwgKVxcXSg/PVxccykvaSAvLyBNdXN0IGZvbGxvdyBsaXN0UkVcbiAgLCAgIGF0eEhlYWRlclJFID0gbW9kZUNmZy5hbGxvd0F0eEhlYWRlcldpdGhvdXRTcGFjZSA/IC9eKCMrKS8gOiAvXigjKykoPzogfCQpL1xuICAsICAgc2V0ZXh0SGVhZGVyUkUgPSAvXiB7MCwzfSg/OlxcPXsxLH18LXsyLH0pXFxzKiQvXG4gICwgICB0ZXh0UkUgPSAvXlteIyFcXFtcXF0qX1xcXFw8PmAgXCInKH46XSsvXG4gICwgICBmZW5jZWRDb2RlUkUgPSAvXih+fn4rfGBgYCspWyBcXHRdKihbXFx3KyMtXSopW15cXG5gXSokL1xuICAsICAgbGlua0RlZlJFID0gL15cXHMqXFxbW15cXF1dKz9cXF06LiokLyAvLyBuYWl2ZSBsaW5rLWRlZmluaXRpb25cbiAgLCAgIHB1bmN0dWF0aW9uID0gL1shXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0vXG4gICwgICBleHBhbmRlZFRhYiA9IFwiICAgIFwiIC8vIENvbW1vbk1hcmsgc3BlY2lmaWVzIHRhYiBhcyA0IHNwYWNlc1xuXG4gIGZ1bmN0aW9uIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGY7XG4gICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gZjtcbiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVJc0VtcHR5KGxpbmUpIHtcbiAgICByZXR1cm4gIWxpbmUgfHwgIS9cXFMvLnRlc3QobGluZS5zdHJpbmcpXG4gIH1cblxuICAvLyBCbG9ja3NcblxuICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHtcbiAgICAvLyBSZXNldCBsaW5rVGl0bGUgc3RhdGVcbiAgICBzdGF0ZS5saW5rVGl0bGUgPSBmYWxzZTtcbiAgICBzdGF0ZS5saW5rSHJlZiA9IGZhbHNlO1xuICAgIHN0YXRlLmxpbmtUZXh0ID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgRU0gc3RhdGVcbiAgICBzdGF0ZS5lbSA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IFNUUk9ORyBzdGF0ZVxuICAgIHN0YXRlLnN0cm9uZyA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IHN0cmlrZXRocm91Z2ggc3RhdGVcbiAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgc3RhdGUucXVvdGVcbiAgICBzdGF0ZS5xdW90ZSA9IDA7XG4gICAgLy8gUmVzZXQgc3RhdGUuaW5kZW50ZWRDb2RlXG4gICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlLmYgPT0gaHRtbEJsb2NrKSB7XG4gICAgICB2YXIgZXhpdCA9IGh0bWxNb2RlTWlzc2luZ1xuICAgICAgaWYgKCFleGl0KSB7XG4gICAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpXG4gICAgICAgIGV4aXQgPSBpbm5lci5tb2RlLm5hbWUgPT0gXCJ4bWxcIiAmJiBpbm5lci5zdGF0ZS50YWdTdGFydCA9PT0gbnVsbCAmJlxuICAgICAgICAgICghaW5uZXIuc3RhdGUuY29udGV4dCAmJiBpbm5lci5zdGF0ZS50b2tlbml6ZS5pc0luVGV4dClcbiAgICAgIH1cbiAgICAgIGlmIChleGl0KSB7XG4gICAgICAgIHN0YXRlLmYgPSBpbmxpbmVOb3JtYWw7XG4gICAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2VcbiAgICBzdGF0ZS50cmFpbGluZ1NwYWNlID0gMDtcbiAgICBzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSA9IGZhbHNlO1xuICAgIC8vIE1hcmsgdGhpcyBsaW5lIGFzIGJsYW5rXG4gICAgc3RhdGUucHJldkxpbmUgPSBzdGF0ZS50aGlzTGluZVxuICAgIHN0YXRlLnRoaXNMaW5lID0ge3N0cmVhbTogbnVsbH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJsb2NrTm9ybWFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgZmlyc3RUb2tlbk9uTGluZSA9IHN0cmVhbS5jb2x1bW4oKSA9PT0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgdmFyIHByZXZMaW5lTGluZUlzRW1wdHkgPSBsaW5lSXNFbXB0eShzdGF0ZS5wcmV2TGluZS5zdHJlYW0pO1xuICAgIHZhciBwcmV2TGluZUlzSW5kZW50ZWRDb2RlID0gc3RhdGUuaW5kZW50ZWRDb2RlO1xuICAgIHZhciBwcmV2TGluZUlzSHIgPSBzdGF0ZS5wcmV2TGluZS5ocjtcbiAgICB2YXIgcHJldkxpbmVJc0xpc3QgPSBzdGF0ZS5saXN0ICE9PSBmYWxzZTtcbiAgICB2YXIgbWF4Tm9uQ29kZUluZGVudGF0aW9uID0gKHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV0gfHwgMCkgKyAzO1xuXG4gICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gZmFsc2U7XG5cbiAgICB2YXIgbGluZUluZGVudGF0aW9uID0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgLy8gY29tcHV0ZSBvbmNlIHBlciBsaW5lIChvbiBmaXJzdCB0b2tlbilcbiAgICBpZiAoc3RhdGUuaW5kZW50YXRpb25EaWZmID09PSBudWxsKSB7XG4gICAgICBzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPSBzdGF0ZS5pbmRlbnRhdGlvbjtcbiAgICAgIGlmIChwcmV2TGluZUlzTGlzdCkge1xuICAgICAgICBzdGF0ZS5saXN0ID0gbnVsbDtcbiAgICAgICAgLy8gV2hpbGUgdGhpcyBsaXN0IGl0ZW0ncyBtYXJrZXIncyBpbmRlbnRhdGlvbiBpcyBsZXNzIHRoYW4gdGhlIGRlZXBlc3RcbiAgICAgICAgLy8gIGxpc3QgaXRlbSdzIGNvbnRlbnQncyBpbmRlbnRhdGlvbixwb3AgdGhlIGRlZXBlc3QgbGlzdCBpdGVtXG4gICAgICAgIC8vICBpbmRlbnRhdGlvbiBvZmYgdGhlIHN0YWNrLCBhbmQgdXBkYXRlIGJsb2NrIGluZGVudGF0aW9uIHN0YXRlXG4gICAgICAgIHdoaWxlIChsaW5lSW5kZW50YXRpb24gPCBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgc3RhdGUubGlzdFN0YWNrLnBvcCgpO1xuICAgICAgICAgIGlmIChzdGF0ZS5saXN0U3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBmaXJzdCBsaXN0J3MgaW5kZW50IC0+IHRoZSBsaW5lIGlzIG5vIGxvbmdlciBhIGxpc3RcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUubGlzdCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUubGlzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPSBsaW5lSW5kZW50YXRpb24gLSBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBub3QgY29tcHJlaGVuc2l2ZSAoY3VycmVudGx5IG9ubHkgZm9yIHNldGV4dCBkZXRlY3Rpb24gcHVycG9zZXMpXG4gICAgdmFyIGFsbG93c0lubGluZUNvbnRpbnVhdGlvbiA9IChcbiAgICAgICAgIXByZXZMaW5lTGluZUlzRW1wdHkgJiYgIXByZXZMaW5lSXNIciAmJiAhc3RhdGUucHJldkxpbmUuaGVhZGVyICYmXG4gICAgICAgICghcHJldkxpbmVJc0xpc3QgfHwgIXByZXZMaW5lSXNJbmRlbnRlZENvZGUpICYmXG4gICAgICAgICFzdGF0ZS5wcmV2TGluZS5mZW5jZWRDb2RlRW5kXG4gICAgKTtcblxuICAgIHZhciBpc0hyID0gKHN0YXRlLmxpc3QgPT09IGZhbHNlIHx8IHByZXZMaW5lSXNIciB8fCBwcmV2TGluZUxpbmVJc0VtcHR5KSAmJlxuICAgICAgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIHN0cmVhbS5tYXRjaChoclJFKTtcblxuICAgIHZhciBtYXRjaCA9IG51bGw7XG4gICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA+PSA0ICYmIChwcmV2TGluZUlzSW5kZW50ZWRDb2RlIHx8IHN0YXRlLnByZXZMaW5lLmZlbmNlZENvZGVFbmQgfHxcbiAgICAgICAgIHN0YXRlLnByZXZMaW5lLmhlYWRlciB8fCBwcmV2TGluZUxpbmVJc0VtcHR5KSkge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblR5cGVzLmNvZGU7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChmaXJzdFRva2VuT25MaW5lICYmIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goYXR4SGVhZGVyUkUpKSAmJiBtYXRjaFsxXS5sZW5ndGggPD0gNikge1xuICAgICAgc3RhdGUucXVvdGUgPSAwO1xuICAgICAgc3RhdGUuaGVhZGVyID0gbWF0Y2hbMV0ubGVuZ3RoO1xuICAgICAgc3RhdGUudGhpc0xpbmUuaGVhZGVyID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImhlYWRlclwiO1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiBzdHJlYW0uZWF0KCc+JykpIHtcbiAgICAgIHN0YXRlLnF1b3RlID0gZmlyc3RUb2tlbk9uTGluZSA/IDEgOiBzdGF0ZS5xdW90ZSArIDE7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJxdW90ZVwiO1xuICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfSBlbHNlIGlmICghaXNIciAmJiAhc3RhdGUuc2V0ZXh0ICYmIGZpcnN0VG9rZW5PbkxpbmUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIChtYXRjaCA9IHN0cmVhbS5tYXRjaChsaXN0UkUpKSkge1xuICAgICAgdmFyIGxpc3RUeXBlID0gbWF0Y2hbMV0gPyBcIm9sXCIgOiBcInVsXCI7XG5cbiAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gbGluZUluZGVudGF0aW9uICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGg7XG4gICAgICBzdGF0ZS5saXN0ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnF1b3RlID0gMDtcblxuICAgICAgLy8gQWRkIHRoaXMgbGlzdCBpdGVtJ3MgY29udGVudCdzIGluZGVudGF0aW9uIHRvIHRoZSBzdGFja1xuICAgICAgc3RhdGUubGlzdFN0YWNrLnB1c2goc3RhdGUuaW5kZW50YXRpb24pO1xuICAgICAgLy8gUmVzZXQgaW5saW5lIHN0eWxlcyB3aGljaCBzaG91bGRuJ3QgcHJvcGFnYXRlIGFyb3NzIGxpc3QgaXRlbXNcbiAgICAgIHN0YXRlLmVtID0gZmFsc2U7XG4gICAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmNvZGUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnN0cmlrZXRocm91Z2ggPSBmYWxzZTtcblxuICAgICAgaWYgKG1vZGVDZmcudGFza0xpc3RzICYmIHN0cmVhbS5tYXRjaCh0YXNrTGlzdFJFLCBmYWxzZSkpIHtcbiAgICAgICAgc3RhdGUudGFza0xpc3QgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBbXCJsaXN0XCIsIFwibGlzdC1cIiArIGxpc3RUeXBlXTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGZpcnN0VG9rZW5PbkxpbmUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIChtYXRjaCA9IHN0cmVhbS5tYXRjaChmZW5jZWRDb2RlUkUsIHRydWUpKSkge1xuICAgICAgc3RhdGUucXVvdGUgPSAwO1xuICAgICAgc3RhdGUuZmVuY2VkRW5kUkUgPSBuZXcgUmVnRXhwKG1hdGNoWzFdICsgXCIrICokXCIpO1xuICAgICAgLy8gdHJ5IHN3aXRjaGluZyBtb2RlXG4gICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBtb2RlQ2ZnLmZlbmNlZENvZGVCbG9ja0hpZ2hsaWdodGluZyAmJiBnZXRNb2RlKG1hdGNoWzJdKTtcbiAgICAgIGlmIChzdGF0ZS5sb2NhbE1vZGUpIHN0YXRlLmxvY2FsU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoc3RhdGUubG9jYWxNb2RlKTtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGxvY2FsO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiY29kZS1ibG9ja1wiO1xuICAgICAgc3RhdGUuY29kZSA9IC0xXG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgLy8gU0VURVhUIGhhcyBsb3dlc3QgYmxvY2stc2NvcGUgcHJlY2VkZW5jZSBhZnRlciBIUiwgc28gY2hlY2sgaXQgYWZ0ZXJcbiAgICAvLyAgdGhlIG90aGVycyAoY29kZSwgYmxvY2txdW90ZSwgbGlzdC4uLilcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gaWYgc2V0ZXh0IHNldCwgaW5kaWNhdGVzIGxpbmUgYWZ0ZXIgLS0tLz09PVxuICAgICAgc3RhdGUuc2V0ZXh0IHx8IChcbiAgICAgICAgLy8gbGluZSBiZWZvcmUgLS0tLz09PVxuICAgICAgICAoIWFsbG93c0lubGluZUNvbnRpbnVhdGlvbiB8fCAhcHJldkxpbmVJc0xpc3QpICYmICFzdGF0ZS5xdW90ZSAmJiBzdGF0ZS5saXN0ID09PSBmYWxzZSAmJlxuICAgICAgICAhc3RhdGUuY29kZSAmJiAhaXNIciAmJiAhbGlua0RlZlJFLnRlc3Qoc3RyZWFtLnN0cmluZykgJiZcbiAgICAgICAgKG1hdGNoID0gc3RyZWFtLmxvb2tBaGVhZCgxKSkgJiYgKG1hdGNoID0gbWF0Y2gubWF0Y2goc2V0ZXh0SGVhZGVyUkUpKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKCAhc3RhdGUuc2V0ZXh0ICkge1xuICAgICAgICBzdGF0ZS5oZWFkZXIgPSBtYXRjaFswXS5jaGFyQXQoMCkgPT0gJz0nID8gMSA6IDI7XG4gICAgICAgIHN0YXRlLnNldGV4dCA9IHN0YXRlLmhlYWRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmhlYWRlciA9IHN0YXRlLnNldGV4dDtcbiAgICAgICAgLy8gaGFzIG5vIGVmZmVjdCBvbiB0eXBlIHNvIHdlIGNhbiByZXNldCBpdCBub3dcbiAgICAgICAgc3RhdGUuc2V0ZXh0ID0gMDtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnRoaXNMaW5lLmhlYWRlciA9IHRydWU7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoaXNIcikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgc3RhdGUuaHIgPSB0cnVlO1xuICAgICAgc3RhdGUudGhpc0xpbmUuaHIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRva2VuVHlwZXMuaHI7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09PSAnWycpIHtcbiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZm9vdG5vdGVMaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7XG4gIH1cblxuICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTtcbiAgICBpZiAoIWh0bWxNb2RlTWlzc2luZykge1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSlcbiAgICAgIGlmICgoaW5uZXIubW9kZS5uYW1lID09IFwieG1sXCIgJiYgaW5uZXIuc3RhdGUudGFnU3RhcnQgPT09IG51bGwgJiZcbiAgICAgICAgICAgKCFpbm5lci5zdGF0ZS5jb250ZXh0ICYmIGlubmVyLnN0YXRlLnRva2VuaXplLmlzSW5UZXh0KSkgfHxcbiAgICAgICAgICAoc3RhdGUubWRfaW5zaWRlICYmIHN0cmVhbS5jdXJyZW50KCkuaW5kZXhPZihcIj5cIikgPiAtMSkpIHtcbiAgICAgICAgc3RhdGUuZiA9IGlubGluZU5vcm1hbDtcbiAgICAgICAgc3RhdGUuYmxvY2sgPSBibG9ja05vcm1hbDtcbiAgICAgICAgc3RhdGUuaHRtbFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjdXJyTGlzdEluZCA9IHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV0gfHwgMDtcbiAgICB2YXIgaGFzRXhpdGVkTGlzdCA9IHN0YXRlLmluZGVudGF0aW9uIDwgY3Vyckxpc3RJbmQ7XG4gICAgdmFyIG1heEZlbmNlZEVuZEluZCA9IGN1cnJMaXN0SW5kICsgMztcbiAgICBpZiAoc3RhdGUuZmVuY2VkRW5kUkUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4RmVuY2VkRW5kSW5kICYmIChoYXNFeGl0ZWRMaXN0IHx8IHN0cmVhbS5tYXRjaChzdGF0ZS5mZW5jZWRFbmRSRSkpKSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJjb2RlLWJsb2NrXCI7XG4gICAgICB2YXIgcmV0dXJuVHlwZTtcbiAgICAgIGlmICghaGFzRXhpdGVkTGlzdCkgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpXG4gICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDtcbiAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsO1xuICAgICAgc3RhdGUuZmVuY2VkRW5kUkUgPSBudWxsO1xuICAgICAgc3RhdGUuY29kZSA9IDBcbiAgICAgIHN0YXRlLnRoaXNMaW5lLmZlbmNlZENvZGVFbmQgPSB0cnVlO1xuICAgICAgaWYgKGhhc0V4aXRlZExpc3QpIHJldHVybiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBzdGF0ZS5ibG9jayk7XG4gICAgICByZXR1cm4gcmV0dXJuVHlwZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxvY2FsTW9kZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gdG9rZW5UeXBlcy5jb2RlO1xuICAgIH1cbiAgfVxuXG4gIC8vIElubGluZVxuICBmdW5jdGlvbiBnZXRUeXBlKHN0YXRlKSB7XG4gICAgdmFyIHN0eWxlcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLmZvcm1hdHRpbmcpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyk7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3RhdGUuZm9ybWF0dGluZyA9PT0gXCJzdHJpbmdcIikgc3RhdGUuZm9ybWF0dGluZyA9IFtzdGF0ZS5mb3JtYXR0aW5nXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5mb3JtYXR0aW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyArIFwiLVwiICsgc3RhdGUuZm9ybWF0dGluZ1tpXSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmZvcm1hdHRpbmdbaV0gPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyBcIi1cIiArIHN0YXRlLmhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgYGZvcm1hdHRpbmctcXVvdGVgIGFuZCBgZm9ybWF0dGluZy1xdW90ZS0jYCBmb3IgYmxvY2txdW90ZXNcbiAgICAgICAgLy8gQWRkIGBlcnJvcmAgaW5zdGVhZCBpZiB0aGUgbWF4aW11bSBibG9ja3F1b3RlIG5lc3RpbmcgZGVwdGggaXMgcGFzc2VkXG4gICAgICAgIGlmIChzdGF0ZS5mb3JtYXR0aW5nW2ldID09PSBcInF1b3RlXCIpIHtcbiAgICAgICAgICBpZiAoIW1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoIHx8IG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID49IHN0YXRlLnF1b3RlKSB7XG4gICAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyBcIi1cIiArIHN0YXRlLnF1b3RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVzLnB1c2goXCJlcnJvclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFza09wZW4pIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibWV0YVwiKTtcbiAgICAgIHJldHVybiBzdHlsZXMubGVuZ3RoID8gc3R5bGVzLmpvaW4oJyAnKSA6IG51bGw7XG4gICAgfVxuICAgIGlmIChzdGF0ZS50YXNrQ2xvc2VkKSB7XG4gICAgICBzdHlsZXMucHVzaChcInByb3BlcnR5XCIpO1xuICAgICAgcmV0dXJuIHN0eWxlcy5sZW5ndGggPyBzdHlsZXMuam9pbignICcpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUubGlua0hyZWYpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlua0hyZWYsIFwidXJsXCIpO1xuICAgIH0gZWxzZSB7IC8vIE9ubHkgYXBwbHkgaW5saW5lIHN0eWxlcyB0byBub24tdXJsIHRleHRcbiAgICAgIGlmIChzdGF0ZS5zdHJvbmcpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5zdHJvbmcpOyB9XG4gICAgICBpZiAoc3RhdGUuZW0pIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5lbSk7IH1cbiAgICAgIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuc3RyaWtldGhyb3VnaCk7IH1cbiAgICAgIGlmIChzdGF0ZS5lbW9qaSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmVtb2ppKTsgfVxuICAgICAgaWYgKHN0YXRlLmxpbmtUZXh0KSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlua1RleHQpOyB9XG4gICAgICBpZiAoc3RhdGUuY29kZSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmNvZGUpOyB9XG4gICAgICBpZiAoc3RhdGUuaW1hZ2UpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5pbWFnZSk7IH1cbiAgICAgIGlmIChzdGF0ZS5pbWFnZUFsdFRleHQpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5pbWFnZUFsdFRleHQsIFwibGlua1wiKTsgfVxuICAgICAgaWYgKHN0YXRlLmltYWdlTWFya2VyKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuaW1hZ2VNYXJrZXIpOyB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmhlYWRlcikgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmhlYWRlciwgdG9rZW5UeXBlcy5oZWFkZXIgKyBcIi1cIiArIHN0YXRlLmhlYWRlcik7IH1cblxuICAgIGlmIChzdGF0ZS5xdW90ZSkge1xuICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5xdW90ZSk7XG5cbiAgICAgIC8vIEFkZCBgcXVvdGUtI2Agd2hlcmUgdGhlIG1heGltdW0gZm9yIGAjYCBpcyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aFxuICAgICAgaWYgKCFtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCB8fCBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA+PSBzdGF0ZS5xdW90ZSkge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgXCItXCIgKyBzdGF0ZS5xdW90ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgXCItXCIgKyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpc3QgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgbGlzdE1vZCA9IChzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMSkgJSAzO1xuICAgICAgaWYgKCFsaXN0TW9kKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDEpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0TW9kID09PSAxKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5saXN0Myk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2VOZXdMaW5lKSB7XG4gICAgICBzdHlsZXMucHVzaChcInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lXCIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUudHJhaWxpbmdTcGFjZSkge1xuICAgICAgc3R5bGVzLnB1c2goXCJ0cmFpbGluZy1zcGFjZS1cIiArIChzdGF0ZS50cmFpbGluZ1NwYWNlICUgMiA/IFwiYVwiIDogXCJiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/IHN0eWxlcy5qb2luKCcgJykgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXh0UkUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVOb3JtYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnRleHQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGVvZiBzdHlsZSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICByZXR1cm4gc3R5bGU7XG5cbiAgICBpZiAoc3RhdGUubGlzdCkgeyAvLyBMaXN0IG1hcmtlciAoKiwgKywgLSwgMS4sIGV0YylcbiAgICAgIHN0YXRlLmxpc3QgPSBudWxsO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50YXNrTGlzdCkge1xuICAgICAgdmFyIHRhc2tPcGVuID0gc3RyZWFtLm1hdGNoKHRhc2tMaXN0UkUsIHRydWUpWzFdID09PSBcIiBcIjtcbiAgICAgIGlmICh0YXNrT3Blbikgc3RhdGUudGFza09wZW4gPSB0cnVlO1xuICAgICAgZWxzZSBzdGF0ZS50YXNrQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcInRhc2tcIjtcbiAgICAgIHN0YXRlLnRhc2tMaXN0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUudGFza09wZW4gPSBmYWxzZTtcbiAgICBzdGF0ZS50YXNrQ2xvc2VkID0gZmFsc2U7XG5cbiAgICBpZiAoc3RhdGUuaGVhZGVyICYmIHN0cmVhbS5tYXRjaCgvXiMrJC8sIHRydWUpKSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgLy8gTWF0Y2hlcyBsaW5rIHRpdGxlcyBwcmVzZW50IG9uIG5leHQgbGluZVxuICAgIGlmIChzdGF0ZS5saW5rVGl0bGUpIHtcbiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IGZhbHNlO1xuICAgICAgdmFyIG1hdGNoQ2ggPSBjaDtcbiAgICAgIGlmIChjaCA9PT0gJygnKSB7XG4gICAgICAgIG1hdGNoQ2ggPSAnKSc7XG4gICAgICB9XG4gICAgICBtYXRjaENoID0gKG1hdGNoQ2grJycpLnJlcGxhY2UoLyhbLj8qK15cXFtcXF1cXFxcKCl7fXwtXSkvZywgXCJcXFxcJDFcIik7XG4gICAgICB2YXIgcmVnZXggPSAnXlxcXFxzKig/OlteJyArIG1hdGNoQ2ggKyAnXFxcXFxcXFxdK3xcXFxcXFxcXFxcXFxcXFxcfFxcXFxcXFxcLiknICsgbWF0Y2hDaDtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gobmV3IFJlZ0V4cChyZWdleCksIHRydWUpKSB7XG4gICAgICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtIcmVmO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgYmxvY2sgaXMgY2hhbmdlZCwgaXQgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpbiBHRk0gbW9kZVxuICAgIGlmIChjaCA9PT0gJ2AnKSB7XG4gICAgICB2YXIgcHJldmlvdXNGb3JtYXR0aW5nID0gc3RhdGUuZm9ybWF0dGluZztcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImNvZGVcIjtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgnYCcpO1xuICAgICAgdmFyIGNvdW50ID0gc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGhcbiAgICAgIGlmIChzdGF0ZS5jb2RlID09IDAgJiYgKCFzdGF0ZS5xdW90ZSB8fCBjb3VudCA9PSAxKSkge1xuICAgICAgICBzdGF0ZS5jb2RlID0gY291bnRcbiAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpXG4gICAgICB9IGVsc2UgaWYgKGNvdW50ID09IHN0YXRlLmNvZGUpIHsgLy8gTXVzdCBiZSBleGFjdFxuICAgICAgICB2YXIgdCA9IGdldFR5cGUoc3RhdGUpXG4gICAgICAgIHN0YXRlLmNvZGUgPSAwXG4gICAgICAgIHJldHVybiB0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5mb3JtYXR0aW5nID0gcHJldmlvdXNGb3JtYXR0aW5nXG4gICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuY29kZSkge1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB2YXIgZm9ybWF0dGluZ0VzY2FwZSA9IHRva2VuVHlwZXMuZm9ybWF0dGluZyArIFwiLWVzY2FwZVwiO1xuICAgICAgICByZXR1cm4gdHlwZSA/IHR5cGUgKyBcIiBcIiArIGZvcm1hdHRpbmdFc2NhcGUgOiBmb3JtYXR0aW5nRXNjYXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJyEnICYmIHN0cmVhbS5tYXRjaCgvXFxbW15cXF1dKlxcXSA/KD86XFwofFxcWykvLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmltYWdlTWFya2VyID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmltYWdlID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImltYWdlXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnWycgJiYgc3RhdGUuaW1hZ2VNYXJrZXIgJiYgc3RyZWFtLm1hdGNoKC9bXlxcXV0qXFxdKFxcKC4qP1xcKXwgP1xcWy4qP1xcXSkvLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmltYWdlTWFya2VyID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbWFnZUFsdFRleHQgPSB0cnVlXG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJpbWFnZVwiO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ10nICYmIHN0YXRlLmltYWdlQWx0VGV4dCkge1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiaW1hZ2VcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5pbWFnZUFsdFRleHQgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmltYWdlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbGlua0hyZWY7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdbJyAmJiAhc3RhdGUuaW1hZ2UpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5rVGV4dCAmJiBzdHJlYW0ubWF0Y2goL14uKj9cXF0vKSkgcmV0dXJuIGdldFR5cGUoc3RhdGUpXG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnXScgJiYgc3RhdGUubGlua1RleHQpIHtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IGZhbHNlO1xuICAgICAgc3RhdGUuaW5saW5lID0gc3RhdGUuZiA9IHN0cmVhbS5tYXRjaCgvXFwoLio/XFwpfCA/XFxbLio/XFxdLywgZmFsc2UpID8gbGlua0hyZWYgOiBpbmxpbmVOb3JtYWxcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlxcL1xcLyg/OlteXFxcXD5dfFxcXFwuKSs+LywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gbGlua0lubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBpZiAodHlwZSl7XG4gICAgICAgIHR5cGUgKz0gXCIgXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlICsgdG9rZW5UeXBlcy5saW5rSW5saW5lO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXltePiBcXFxcXStAKD86W15cXFxcPl18XFxcXC4pKz4vLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBsaW5rSW5saW5lO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIGlmICh0eXBlKXtcbiAgICAgICAgdHlwZSArPSBcIiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtFbWFpbDtcbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy54bWwgJiYgY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL14oIS0tfFxcP3whXFxbQ0RBVEFcXFt8W2Etel1bYS16MC05LV0qKD86XFxzK1thLXpfOi5cXC1dKyg/Olxccyo9XFxzKltePl0rKT8pKlxccyooPzo+fCQpKS9pLCBmYWxzZSkpIHtcbiAgICAgIHZhciBlbmQgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoXCI+XCIsIHN0cmVhbS5wb3MpO1xuICAgICAgaWYgKGVuZCAhPSAtMSkge1xuICAgICAgICB2YXIgYXR0cyA9IHN0cmVhbS5zdHJpbmcuc3Vic3RyaW5nKHN0cmVhbS5zdGFydCwgZW5kKTtcbiAgICAgICAgaWYgKC9tYXJrZG93blxccyo9XFxzKignfFwiKXswLDF9MSgnfFwiKXswLDF9Ly50ZXN0KGF0dHMpKSBzdGF0ZS5tZF9pbnNpZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShodG1sTW9kZSk7XG4gICAgICByZXR1cm4gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgaHRtbEJsb2NrKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy54bWwgJiYgY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL15cXC9cXHcqPz4vKSkge1xuICAgICAgc3RhdGUubWRfaW5zaWRlID0gZmFsc2U7XG4gICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIipcIiB8fCBjaCA9PT0gXCJfXCIpIHtcbiAgICAgIHZhciBsZW4gPSAxLCBiZWZvcmUgPSBzdHJlYW0ucG9zID09IDEgPyBcIiBcIiA6IHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5wb3MgLSAyKVxuICAgICAgd2hpbGUgKGxlbiA8IDMgJiYgc3RyZWFtLmVhdChjaCkpIGxlbisrXG4gICAgICB2YXIgYWZ0ZXIgPSBzdHJlYW0ucGVlaygpIHx8IFwiIFwiXG4gICAgICAvLyBTZWUgaHR0cDovL3NwZWMuY29tbW9ubWFyay5vcmcvMC4yNy8jZW1waGFzaXMtYW5kLXN0cm9uZy1lbXBoYXNpc1xuICAgICAgdmFyIGxlZnRGbGFua2luZyA9ICEvXFxzLy50ZXN0KGFmdGVyKSAmJiAoIXB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpIHx8IC9cXHMvLnRlc3QoYmVmb3JlKSB8fCBwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkpXG4gICAgICB2YXIgcmlnaHRGbGFua2luZyA9ICEvXFxzLy50ZXN0KGJlZm9yZSkgJiYgKCFwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkgfHwgL1xccy8udGVzdChhZnRlcikgfHwgcHVuY3R1YXRpb24udGVzdChhZnRlcikpXG4gICAgICB2YXIgc2V0RW0gPSBudWxsLCBzZXRTdHJvbmcgPSBudWxsXG4gICAgICBpZiAobGVuICUgMikgeyAvLyBFbVxuICAgICAgICBpZiAoIXN0YXRlLmVtICYmIGxlZnRGbGFua2luZyAmJiAoY2ggPT09IFwiKlwiIHx8ICFyaWdodEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYmVmb3JlKSkpXG4gICAgICAgICAgc2V0RW0gPSB0cnVlXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLmVtID09IGNoICYmIHJpZ2h0RmxhbmtpbmcgJiYgKGNoID09PSBcIipcIiB8fCAhbGVmdEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpKSlcbiAgICAgICAgICBzZXRFbSA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAobGVuID4gMSkgeyAvLyBTdHJvbmdcbiAgICAgICAgaWYgKCFzdGF0ZS5zdHJvbmcgJiYgbGVmdEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIXJpZ2h0RmxhbmtpbmcgfHwgcHVuY3R1YXRpb24udGVzdChiZWZvcmUpKSlcbiAgICAgICAgICBzZXRTdHJvbmcgPSB0cnVlXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9uZyA9PSBjaCAmJiByaWdodEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIWxlZnRGbGFua2luZyB8fCBwdW5jdHVhdGlvbi50ZXN0KGFmdGVyKSkpXG4gICAgICAgICAgc2V0U3Ryb25nID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmIChzZXRTdHJvbmcgIT0gbnVsbCB8fCBzZXRFbSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBzZXRFbSA9PSBudWxsID8gXCJzdHJvbmdcIiA6IHNldFN0cm9uZyA9PSBudWxsID8gXCJlbVwiIDogXCJzdHJvbmcgZW1cIlxuICAgICAgICBpZiAoc2V0RW0gPT09IHRydWUpIHN0YXRlLmVtID0gY2hcbiAgICAgICAgaWYgKHNldFN0cm9uZyA9PT0gdHJ1ZSkgc3RhdGUuc3Ryb25nID0gY2hcbiAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKVxuICAgICAgICBpZiAoc2V0RW0gPT09IGZhbHNlKSBzdGF0ZS5lbSA9IGZhbHNlXG4gICAgICAgIGlmIChzZXRTdHJvbmcgPT09IGZhbHNlKSBzdGF0ZS5zdHJvbmcgPSBmYWxzZVxuICAgICAgICByZXR1cm4gdFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcgJykge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJyonKSB8fCBzdHJlYW0uZWF0KCdfJykpIHsgLy8gUHJvYmFibHkgc3Vycm91bmRlZCBieSBzcGFjZXNcbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcgJykgeyAvLyBTdXJyb3VuZGVkIGJ5IHNwYWNlcywgaWdub3JlXG4gICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB9IGVsc2UgeyAvLyBOb3Qgc3Vycm91bmRlZCBieSBzcGFjZXMsIGJhY2sgdXAgcG9pbnRlclxuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy5zdHJpa2V0aHJvdWdoKSB7XG4gICAgICBpZiAoY2ggPT09ICd+JyAmJiBzdHJlYW0uZWF0V2hpbGUoY2gpKSB7XG4gICAgICAgIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSB7Ly8gUmVtb3ZlIHN0cmlrZXRocm91Z2hcbiAgICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXHNdLywgZmFsc2UpKSB7Ly8gQWRkIHN0cmlrZXRocm91Z2hcbiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAnICcpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXn5+LywgdHJ1ZSkpIHsgLy8gUHJvYmFibHkgc3Vycm91bmRlZCBieSBzcGFjZVxuICAgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnICcpIHsgLy8gU3Vycm91bmRlZCBieSBzcGFjZXMsIGlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIE5vdCBzdXJyb3VuZGVkIGJ5IHNwYWNlcywgYmFjayB1cCBwb2ludGVyXG4gICAgICAgICAgICBzdHJlYW0uYmFja1VwKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlQ2ZnLmVtb2ppICYmIGNoID09PSBcIjpcIiAmJiBzdHJlYW0ubWF0Y2goL14oPzpbYS16X1xcZCtdW2Etel9cXGQrLV0qfFxcLVthLXpfXFxkK11bYS16X1xcZCstXSopOi8pKSB7XG4gICAgICBzdGF0ZS5lbW9qaSA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJlbW9qaVwiO1xuICAgICAgdmFyIHJldFR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIHN0YXRlLmVtb2ppID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0VHlwZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICcgJykge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiArJC8sIGZhbHNlKSkge1xuICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlKys7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2UpIHtcbiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmtJbmxpbmUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICBpZiAoY2ggPT09IFwiPlwiKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gaW5saW5lTm9ybWFsO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIGlmICh0eXBlKXtcbiAgICAgICAgdHlwZSArPSBcIiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtJbmxpbmU7XG4gICAgfVxuXG4gICAgc3RyZWFtLm1hdGNoKC9eW14+XSsvLCB0cnVlKTtcblxuICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtJbmxpbmU7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rSHJlZihzdHJlYW0sIHN0YXRlKSB7XG4gICAgLy8gQ2hlY2sgaWYgc3BhY2UsIGFuZCByZXR1cm4gTlVMTCBpZiBzbyAodG8gYXZvaWQgbWFya2luZyB0aGUgc3BhY2UpXG4gICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09PSAnKCcgfHwgY2ggPT09ICdbJykge1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGdldExpbmtIcmVmSW5zaWRlKGNoID09PSBcIihcIiA/IFwiKVwiIDogXCJdXCIpO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGluay1zdHJpbmdcIjtcbiAgICAgIHN0YXRlLmxpbmtIcmVmID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuICdlcnJvcic7XG4gIH1cblxuICB2YXIgbGlua1JFID0ge1xuICAgIFwiKVwiOiAvXig/OlteXFxcXFxcKFxcKV18XFxcXC58XFwoKD86W15cXFxcXFwoXFwpXXxcXFxcLikqXFwpKSo/KD89XFwpKS8sXG4gICAgXCJdXCI6IC9eKD86W15cXFxcXFxbXFxdXXxcXFxcLnxcXFsoPzpbXlxcXFxcXFtcXF1dfFxcXFwuKSpcXF0pKj8oPz1cXF0pL1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGlua0hyZWZJbnNpZGUoZW5kQ2hhcikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgICBpZiAoY2ggPT09IGVuZENoYXIpIHtcbiAgICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDtcbiAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGluay1zdHJpbmdcIjtcbiAgICAgICAgdmFyIHJldHVyblN0YXRlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmxpbmtIcmVmID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXR1cm5TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLm1hdGNoKGxpbmtSRVtlbmRDaGFyXSlcbiAgICAgIHN0YXRlLmxpbmtIcmVmID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9vdG5vdGVMaW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKFteXFxdXFxcXF18XFxcXC4pKlxcXTovLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmYgPSBmb290bm90ZUxpbmtJbnNpZGU7XG4gICAgICBzdHJlYW0ubmV4dCgpOyAvLyBDb25zdW1lIFtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHN0YXRlLmxpbmtUZXh0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBpbmxpbmVOb3JtYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9vdG5vdGVMaW5rSW5zaWRlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxdOi8sIHRydWUpKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gZm9vdG5vdGVVcmw7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICB2YXIgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgc3RhdGUubGlua1RleHQgPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXR1cm5UeXBlO1xuICAgIH1cblxuICAgIHN0cmVhbS5tYXRjaCgvXihbXlxcXVxcXFxdfFxcXFwuKSsvLCB0cnVlKTtcblxuICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtUZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9vdG5vdGVVcmwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIC8vIENoZWNrIGlmIHNwYWNlLCBhbmQgcmV0dXJuIE5VTEwgaWYgc28gKHRvIGF2b2lkIG1hcmtpbmcgdGhlIHNwYWNlKVxuICAgIGlmKHN0cmVhbS5lYXRTcGFjZSgpKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBNYXRjaCBVUkxcbiAgICBzdHJlYW0ubWF0Y2goL15bXlxcc10rLywgdHJ1ZSk7XG4gICAgLy8gQ2hlY2sgZm9yIGxpbmsgdGl0bGVcbiAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gdW5kZWZpbmVkKSB7IC8vIEVuZCBvZiBsaW5lLCBzZXQgZmxhZyB0byBjaGVjayBuZXh0IGxpbmVcbiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IHRydWU7XG4gICAgfSBlbHNlIHsgLy8gTW9yZSBjb250ZW50IG9uIGxpbmUsIGNoZWNrIGlmIGxpbmsgdGl0bGVcbiAgICAgIHN0cmVhbS5tYXRjaCgvXig/OlxccysoPzpcIig/OlteXCJcXFxcXXxcXFxcXFxcXHxcXFxcLikrXCJ8Jyg/OlteJ1xcXFxdfFxcXFxcXFxcfFxcXFwuKSsnfFxcKCg/OlteKVxcXFxdfFxcXFxcXFxcfFxcXFwuKStcXCkpKT8vLCB0cnVlKTtcbiAgICB9XG4gICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDtcbiAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rSHJlZiArIFwiIHVybFwiO1xuICB9XG5cbiAgdmFyIG1vZGUgPSB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmOiBibG9ja05vcm1hbCxcblxuICAgICAgICBwcmV2TGluZToge3N0cmVhbTogbnVsbH0sXG4gICAgICAgIHRoaXNMaW5lOiB7c3RyZWFtOiBudWxsfSxcblxuICAgICAgICBibG9jazogYmxvY2tOb3JtYWwsXG4gICAgICAgIGh0bWxTdGF0ZTogbnVsbCxcbiAgICAgICAgaW5kZW50YXRpb246IDAsXG5cbiAgICAgICAgaW5saW5lOiBpbmxpbmVOb3JtYWwsXG4gICAgICAgIHRleHQ6IGhhbmRsZVRleHQsXG5cbiAgICAgICAgZm9ybWF0dGluZzogZmFsc2UsXG4gICAgICAgIGxpbmtUZXh0OiBmYWxzZSxcbiAgICAgICAgbGlua0hyZWY6IGZhbHNlLFxuICAgICAgICBsaW5rVGl0bGU6IGZhbHNlLFxuICAgICAgICBjb2RlOiAwLFxuICAgICAgICBlbTogZmFsc2UsXG4gICAgICAgIHN0cm9uZzogZmFsc2UsXG4gICAgICAgIGhlYWRlcjogMCxcbiAgICAgICAgc2V0ZXh0OiAwLFxuICAgICAgICBocjogZmFsc2UsXG4gICAgICAgIHRhc2tMaXN0OiBmYWxzZSxcbiAgICAgICAgbGlzdDogZmFsc2UsXG4gICAgICAgIGxpc3RTdGFjazogW10sXG4gICAgICAgIHF1b3RlOiAwLFxuICAgICAgICB0cmFpbGluZ1NwYWNlOiAwLFxuICAgICAgICB0cmFpbGluZ1NwYWNlTmV3TGluZTogZmFsc2UsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6IGZhbHNlLFxuICAgICAgICBlbW9qaTogZmFsc2UsXG4gICAgICAgIGZlbmNlZEVuZFJFOiBudWxsXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGY6IHMuZixcblxuICAgICAgICBwcmV2TGluZTogcy5wcmV2TGluZSxcbiAgICAgICAgdGhpc0xpbmU6IHMudGhpc0xpbmUsXG5cbiAgICAgICAgYmxvY2s6IHMuYmxvY2ssXG4gICAgICAgIGh0bWxTdGF0ZTogcy5odG1sU3RhdGUgJiYgQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIHMuaHRtbFN0YXRlKSxcbiAgICAgICAgaW5kZW50YXRpb246IHMuaW5kZW50YXRpb24sXG5cbiAgICAgICAgbG9jYWxNb2RlOiBzLmxvY2FsTW9kZSxcbiAgICAgICAgbG9jYWxTdGF0ZTogcy5sb2NhbE1vZGUgPyBDb2RlTWlycm9yLmNvcHlTdGF0ZShzLmxvY2FsTW9kZSwgcy5sb2NhbFN0YXRlKSA6IG51bGwsXG5cbiAgICAgICAgaW5saW5lOiBzLmlubGluZSxcbiAgICAgICAgdGV4dDogcy50ZXh0LFxuICAgICAgICBmb3JtYXR0aW5nOiBmYWxzZSxcbiAgICAgICAgbGlua1RleHQ6IHMubGlua1RleHQsXG4gICAgICAgIGxpbmtUaXRsZTogcy5saW5rVGl0bGUsXG4gICAgICAgIGxpbmtIcmVmOiBzLmxpbmtIcmVmLFxuICAgICAgICBjb2RlOiBzLmNvZGUsXG4gICAgICAgIGVtOiBzLmVtLFxuICAgICAgICBzdHJvbmc6IHMuc3Ryb25nLFxuICAgICAgICBzdHJpa2V0aHJvdWdoOiBzLnN0cmlrZXRocm91Z2gsXG4gICAgICAgIGVtb2ppOiBzLmVtb2ppLFxuICAgICAgICBoZWFkZXI6IHMuaGVhZGVyLFxuICAgICAgICBzZXRleHQ6IHMuc2V0ZXh0LFxuICAgICAgICBocjogcy5ocixcbiAgICAgICAgdGFza0xpc3Q6IHMudGFza0xpc3QsXG4gICAgICAgIGxpc3Q6IHMubGlzdCxcbiAgICAgICAgbGlzdFN0YWNrOiBzLmxpc3RTdGFjay5zbGljZSgwKSxcbiAgICAgICAgcXVvdGU6IHMucXVvdGUsXG4gICAgICAgIGluZGVudGVkQ29kZTogcy5pbmRlbnRlZENvZGUsXG4gICAgICAgIHRyYWlsaW5nU3BhY2U6IHMudHJhaWxpbmdTcGFjZSxcbiAgICAgICAgdHJhaWxpbmdTcGFjZU5ld0xpbmU6IHMudHJhaWxpbmdTcGFjZU5ld0xpbmUsXG4gICAgICAgIG1kX2luc2lkZTogcy5tZF9pbnNpZGUsXG4gICAgICAgIGZlbmNlZEVuZFJFOiBzLmZlbmNlZEVuZFJFXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuXG4gICAgICAvLyBSZXNldCBzdGF0ZS5mb3JtYXR0aW5nXG4gICAgICBzdGF0ZS5mb3JtYXR0aW5nID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdHJlYW0gIT0gc3RhdGUudGhpc0xpbmUuc3RyZWFtKSB7XG4gICAgICAgIHN0YXRlLmhlYWRlciA9IDA7XG4gICAgICAgIHN0YXRlLmhyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxccyokLywgdHJ1ZSkpIHtcbiAgICAgICAgICBibGFua0xpbmUoc3RhdGUpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucHJldkxpbmUgPSBzdGF0ZS50aGlzTGluZVxuICAgICAgICBzdGF0ZS50aGlzTGluZSA9IHtzdHJlYW06IHN0cmVhbX1cblxuICAgICAgICAvLyBSZXNldCBzdGF0ZS50YXNrTGlzdFxuICAgICAgICBzdGF0ZS50YXNrTGlzdCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2VcbiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZSA9IDA7XG4gICAgICAgIHN0YXRlLnRyYWlsaW5nU3BhY2VOZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sb2NhbFN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrO1xuICAgICAgICAgIGlmIChzdGF0ZS5mICE9IGh0bWxCbG9jaykge1xuICAgICAgICAgICAgdmFyIGluZGVudGF0aW9uID0gc3RyZWFtLm1hdGNoKC9eXFxzKi8sIHRydWUpWzBdLnJlcGxhY2UoL1xcdC9nLCBleHBhbmRlZFRhYikubGVuZ3RoO1xuICAgICAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uRGlmZiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaW5kZW50YXRpb24gPiAwKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBpbm5lck1vZGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuYmxvY2sgPT0gaHRtbEJsb2NrKSByZXR1cm4ge3N0YXRlOiBzdGF0ZS5odG1sU3RhdGUsIG1vZGU6IGh0bWxNb2RlfTtcbiAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKSByZXR1cm4ge3N0YXRlOiBzdGF0ZS5sb2NhbFN0YXRlLCBtb2RlOiBzdGF0ZS5sb2NhbE1vZGV9O1xuICAgICAgcmV0dXJuIHtzdGF0ZTogc3RhdGUsIG1vZGU6IG1vZGV9O1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpIHtcbiAgICAgIGlmIChzdGF0ZS5ibG9jayA9PSBodG1sQmxvY2sgJiYgaHRtbE1vZGUuaW5kZW50KSByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKVxuICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUgJiYgc3RhdGUubG9jYWxNb2RlLmluZGVudCkgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS5pbmRlbnQoc3RhdGUubG9jYWxTdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKVxuICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzc1xuICAgIH0sXG5cbiAgICBibGFua0xpbmU6IGJsYW5rTGluZSxcblxuICAgIGdldFR5cGU6IGdldFR5cGUsXG5cbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCI8IS0tXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIi0tPlwiLFxuICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCIsXG4gICAgZm9sZDogXCJtYXJrZG93blwiXG4gIH07XG4gIHJldHVybiBtb2RlO1xufSwgXCJ4bWxcIik7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvbWFya2Rvd25cIiwgXCJtYXJrZG93blwiKTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LW1hcmtkb3duXCIsIFwibWFya2Rvd25cIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW5cbi8vIGFzIHRoZSBiYXNlIGFyZ3VtZW50IHRha2VzIGNhcmUgb2YgbW9zdCBvZiB0aGUgbm9ybWFsIG1vZGVcbi8vIGZ1bmN0aW9uYWxpdHksIGJ1dCBhIHNlY29uZCAodHlwaWNhbGx5IHNpbXBsZSkgbW9kZSBpcyB1c2VkLCB3aGljaFxuLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlXG4vLyB0ZXh0LCBidXQgd2hlbiBib3RoIGFzc2lnbiBhIG5vbi1udWxsIHN0eWxlIHRvIGEgcGllY2Ugb2YgY29kZSwgdGhlXG4vLyBvdmVybGF5IHdpbnMsIHVubGVzcyB0aGUgY29tYmluZSBhcmd1bWVudCB3YXMgdHJ1ZSBhbmQgbm90IG92ZXJyaWRkZW4sXG4vLyBvciBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UgdGhlIHN0eWxlcyBhcmVcbi8vIGNvbWJpbmVkLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3Iub3ZlcmxheU1vZGUgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoYmFzZSksXG4gICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShvdmVybGF5KSxcbiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCxcbiAgICAgICAgb3ZlcmxheVBvczogMCwgb3ZlcmxheUN1cjogbnVsbCxcbiAgICAgICAgc3RyZWFtU2VlbjogbnVsbFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLFxuICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLmNvcHlTdGF0ZShvdmVybGF5LCBzdGF0ZS5vdmVybGF5KSxcbiAgICAgICAgYmFzZVBvczogc3RhdGUuYmFzZVBvcywgYmFzZUN1cjogbnVsbCxcbiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0gIT0gc3RhdGUuc3RyZWFtU2VlbiB8fFxuICAgICAgICAgIE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpIDwgc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgIHN0YXRlLnN0cmVhbVNlZW4gPSBzdHJlYW07XG4gICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHtcbiAgICAgICAgc3RhdGUuYmFzZUN1ciA9IGJhc2UudG9rZW4oc3RyZWFtLCBzdGF0ZS5iYXNlKTtcbiAgICAgICAgc3RhdGUuYmFzZVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLm92ZXJsYXlQb3MpIHtcbiAgICAgICAgc3RyZWFtLnBvcyA9IHN0cmVhbS5zdGFydDtcbiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTtcbiAgICAgICAgc3RhdGUub3ZlcmxheVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICB9XG4gICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7XG5cbiAgICAgIC8vIHN0YXRlLm92ZXJsYXkuY29tYmluZVRva2VucyBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGNvbWJpbmUsXG4gICAgICAvLyB1bmxlc3Mgc2V0IHRvIG51bGxcbiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyO1xuICAgICAgZWxzZSBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmXG4gICAgICAgICAgICAgICBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgfHxcbiAgICAgICAgICAgICAgIGNvbWJpbmUgJiYgc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zID09IG51bGwpXG4gICAgICAgIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgXCIgXCIgKyBzdGF0ZS5vdmVybGF5Q3VyO1xuICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBiYXNlLmluZGVudCAmJiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKSB7XG4gICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyLCBsaW5lKTtcbiAgICB9LFxuICAgIGVsZWN0cmljQ2hhcnM6IGJhc2UuZWxlY3RyaWNDaGFycyxcblxuICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsgcmV0dXJuIHtzdGF0ZTogc3RhdGUuYmFzZSwgbW9kZTogYmFzZX07IH0sXG5cbiAgICBibGFua0xpbmU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICB2YXIgYmFzZVRva2VuLCBvdmVybGF5VG9rZW47XG4gICAgICBpZiAoYmFzZS5ibGFua0xpbmUpIGJhc2VUb2tlbiA9IGJhc2UuYmxhbmtMaW5lKHN0YXRlLmJhc2UpO1xuICAgICAgaWYgKG92ZXJsYXkuYmxhbmtMaW5lKSBvdmVybGF5VG9rZW4gPSBvdmVybGF5LmJsYW5rTGluZShzdGF0ZS5vdmVybGF5KTtcblxuICAgICAgcmV0dXJuIG92ZXJsYXlUb2tlbiA9PSBudWxsID9cbiAgICAgICAgYmFzZVRva2VuIDpcbiAgICAgICAgKGNvbWJpbmUgJiYgYmFzZVRva2VuICE9IG51bGwgPyBiYXNlVG9rZW4gKyBcIiBcIiArIG92ZXJsYXlUb2tlbiA6IG92ZXJsYXlUb2tlbik7XG4gICAgfVxuICB9O1xufTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7XG4gIGZ1bmN0aW9uIGNtcChhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2g7IH1cblxuICB2YXIgbmFtZVN0YXJ0Q2hhciA9IFwiQS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4gIHZhciBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyBcIlxcLVxcOlxcLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXCI7XG4gIHZhciB4bWxUYWdTdGFydCA9IG5ldyBSZWdFeHAoXCI8KC8/KShbXCIgKyBuYW1lU3RhcnRDaGFyICsgXCJdW1wiICsgbmFtZUNoYXIgKyBcIl0qKVwiLCBcImdcIik7XG5cbiAgZnVuY3Rpb24gSXRlcihjbSwgbGluZSwgY2gsIHJhbmdlKSB7XG4gICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9IGNoO1xuICAgIHRoaXMuY20gPSBjbTsgdGhpcy50ZXh0ID0gY20uZ2V0TGluZShsaW5lKTtcbiAgICB0aGlzLm1pbiA9IHJhbmdlID8gTWF0aC5tYXgocmFuZ2UuZnJvbSwgY20uZmlyc3RMaW5lKCkpIDogY20uZmlyc3RMaW5lKCk7XG4gICAgdGhpcy5tYXggPSByYW5nZSA/IE1hdGgubWluKHJhbmdlLnRvIC0gMSwgY20ubGFzdExpbmUoKSkgOiBjbS5sYXN0TGluZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnQXQoaXRlciwgY2gpIHtcbiAgICB2YXIgdHlwZSA9IGl0ZXIuY20uZ2V0VG9rZW5UeXBlQXQoUG9zKGl0ZXIubGluZSwgY2gpKTtcbiAgICByZXR1cm4gdHlwZSAmJiAvXFxidGFnXFxiLy50ZXN0KHR5cGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dExpbmUoaXRlcikge1xuICAgIGlmIChpdGVyLmxpbmUgPj0gaXRlci5tYXgpIHJldHVybjtcbiAgICBpdGVyLmNoID0gMDtcbiAgICBpdGVyLnRleHQgPSBpdGVyLmNtLmdldExpbmUoKytpdGVyLmxpbmUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIHByZXZMaW5lKGl0ZXIpIHtcbiAgICBpZiAoaXRlci5saW5lIDw9IGl0ZXIubWluKSByZXR1cm47XG4gICAgaXRlci50ZXh0ID0gaXRlci5jbS5nZXRMaW5lKC0taXRlci5saW5lKTtcbiAgICBpdGVyLmNoID0gaXRlci50ZXh0Lmxlbmd0aDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvVGFnRW5kKGl0ZXIpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZ3QgPSBpdGVyLnRleHQuaW5kZXhPZihcIj5cIiwgaXRlci5jaCk7XG4gICAgICBpZiAoZ3QgPT0gLTEpIHsgaWYgKG5leHRMaW5lKGl0ZXIpKSBjb250aW51ZTsgZWxzZSByZXR1cm47IH1cbiAgICAgIGlmICghdGFnQXQoaXRlciwgZ3QgKyAxKSkgeyBpdGVyLmNoID0gZ3QgKyAxOyBjb250aW51ZTsgfVxuICAgICAgdmFyIGxhc3RTbGFzaCA9IGl0ZXIudGV4dC5sYXN0SW5kZXhPZihcIi9cIiwgZ3QpO1xuICAgICAgdmFyIHNlbGZDbG9zZSA9IGxhc3RTbGFzaCA+IC0xICYmICEvXFxTLy50ZXN0KGl0ZXIudGV4dC5zbGljZShsYXN0U2xhc2ggKyAxLCBndCkpO1xuICAgICAgaXRlci5jaCA9IGd0ICsgMTtcbiAgICAgIHJldHVybiBzZWxmQ2xvc2UgPyBcInNlbGZDbG9zZVwiIDogXCJyZWd1bGFyXCI7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHRvVGFnU3RhcnQoaXRlcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBsdCA9IGl0ZXIuY2ggPyBpdGVyLnRleHQubGFzdEluZGV4T2YoXCI8XCIsIGl0ZXIuY2ggLSAxKSA6IC0xO1xuICAgICAgaWYgKGx0ID09IC0xKSB7IGlmIChwcmV2TGluZShpdGVyKSkgY29udGludWU7IGVsc2UgcmV0dXJuOyB9XG4gICAgICBpZiAoIXRhZ0F0KGl0ZXIsIGx0ICsgMSkpIHsgaXRlci5jaCA9IGx0OyBjb250aW51ZTsgfVxuICAgICAgeG1sVGFnU3RhcnQubGFzdEluZGV4ID0gbHQ7XG4gICAgICBpdGVyLmNoID0gbHQ7XG4gICAgICB2YXIgbWF0Y2ggPSB4bWxUYWdTdGFydC5leGVjKGl0ZXIudGV4dCk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPT0gbHQpIHJldHVybiBtYXRjaDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b05leHRUYWcoaXRlcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHhtbFRhZ1N0YXJ0Lmxhc3RJbmRleCA9IGl0ZXIuY2g7XG4gICAgICB2YXIgZm91bmQgPSB4bWxUYWdTdGFydC5leGVjKGl0ZXIudGV4dCk7XG4gICAgICBpZiAoIWZvdW5kKSB7IGlmIChuZXh0TGluZShpdGVyKSkgY29udGludWU7IGVsc2UgcmV0dXJuOyB9XG4gICAgICBpZiAoIXRhZ0F0KGl0ZXIsIGZvdW5kLmluZGV4ICsgMSkpIHsgaXRlci5jaCA9IGZvdW5kLmluZGV4ICsgMTsgY29udGludWU7IH1cbiAgICAgIGl0ZXIuY2ggPSBmb3VuZC5pbmRleCArIGZvdW5kWzBdLmxlbmd0aDtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdG9QcmV2VGFnKGl0ZXIpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZ3QgPSBpdGVyLmNoID8gaXRlci50ZXh0Lmxhc3RJbmRleE9mKFwiPlwiLCBpdGVyLmNoIC0gMSkgOiAtMTtcbiAgICAgIGlmIChndCA9PSAtMSkgeyBpZiAocHJldkxpbmUoaXRlcikpIGNvbnRpbnVlOyBlbHNlIHJldHVybjsgfVxuICAgICAgaWYgKCF0YWdBdChpdGVyLCBndCArIDEpKSB7IGl0ZXIuY2ggPSBndDsgY29udGludWU7IH1cbiAgICAgIHZhciBsYXN0U2xhc2ggPSBpdGVyLnRleHQubGFzdEluZGV4T2YoXCIvXCIsIGd0KTtcbiAgICAgIHZhciBzZWxmQ2xvc2UgPSBsYXN0U2xhc2ggPiAtMSAmJiAhL1xcUy8udGVzdChpdGVyLnRleHQuc2xpY2UobGFzdFNsYXNoICsgMSwgZ3QpKTtcbiAgICAgIGl0ZXIuY2ggPSBndCArIDE7XG4gICAgICByZXR1cm4gc2VsZkNsb3NlID8gXCJzZWxmQ2xvc2VcIiA6IFwicmVndWxhclwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ0Nsb3NlKGl0ZXIsIHRhZykge1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBuZXh0ID0gdG9OZXh0VGFnKGl0ZXIpLCBlbmQsIHN0YXJ0TGluZSA9IGl0ZXIubGluZSwgc3RhcnRDaCA9IGl0ZXIuY2ggLSAobmV4dCA/IG5leHRbMF0ubGVuZ3RoIDogMCk7XG4gICAgICBpZiAoIW5leHQgfHwgIShlbmQgPSB0b1RhZ0VuZChpdGVyKSkpIHJldHVybjtcbiAgICAgIGlmIChlbmQgPT0gXCJzZWxmQ2xvc2VcIikgY29udGludWU7XG4gICAgICBpZiAobmV4dFsxXSkgeyAvLyBjbG9zaW5nIHRhZ1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIGlmIChzdGFja1tpXSA9PSBuZXh0WzJdKSB7XG4gICAgICAgICAgc3RhY2subGVuZ3RoID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IDAgJiYgKCF0YWcgfHwgdGFnID09IG5leHRbMl0pKSByZXR1cm4ge1xuICAgICAgICAgIHRhZzogbmV4dFsyXSxcbiAgICAgICAgICBmcm9tOiBQb3Moc3RhcnRMaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogUG9zKGl0ZXIubGluZSwgaXRlci5jaClcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7IC8vIG9wZW5pbmcgdGFnXG4gICAgICAgIHN0YWNrLnB1c2gobmV4dFsyXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ09wZW4oaXRlciwgdGFnKSB7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIHByZXYgPSB0b1ByZXZUYWcoaXRlcik7XG4gICAgICBpZiAoIXByZXYpIHJldHVybjtcbiAgICAgIGlmIChwcmV2ID09IFwic2VsZkNsb3NlXCIpIHsgdG9UYWdTdGFydChpdGVyKTsgY29udGludWU7IH1cbiAgICAgIHZhciBlbmRMaW5lID0gaXRlci5saW5lLCBlbmRDaCA9IGl0ZXIuY2g7XG4gICAgICB2YXIgc3RhcnQgPSB0b1RhZ1N0YXJ0KGl0ZXIpO1xuICAgICAgaWYgKCFzdGFydCkgcmV0dXJuO1xuICAgICAgaWYgKHN0YXJ0WzFdKSB7IC8vIGNsb3NpbmcgdGFnXG4gICAgICAgIHN0YWNrLnB1c2goc3RhcnRbMl0pO1xuICAgICAgfSBlbHNlIHsgLy8gb3BlbmluZyB0YWdcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBpZiAoc3RhY2tbaV0gPT0gc3RhcnRbMl0pIHtcbiAgICAgICAgICBzdGFjay5sZW5ndGggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpIDwgMCAmJiAoIXRhZyB8fCB0YWcgPT0gc3RhcnRbMl0pKSByZXR1cm4ge1xuICAgICAgICAgIHRhZzogc3RhcnRbMl0sXG4gICAgICAgICAgZnJvbTogUG9zKGl0ZXIubGluZSwgaXRlci5jaCksXG4gICAgICAgICAgdG86IFBvcyhlbmRMaW5lLCBlbmRDaClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcInhtbFwiLCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBJdGVyKGNtLCBzdGFydC5saW5lLCAwKTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgb3BlblRhZyA9IHRvTmV4dFRhZyhpdGVyKVxuICAgICAgaWYgKCFvcGVuVGFnIHx8IGl0ZXIubGluZSAhPSBzdGFydC5saW5lKSByZXR1cm5cbiAgICAgIHZhciBlbmQgPSB0b1RhZ0VuZChpdGVyKVxuICAgICAgaWYgKCFlbmQpIHJldHVyblxuICAgICAgaWYgKCFvcGVuVGFnWzFdICYmIGVuZCAhPSBcInNlbGZDbG9zZVwiKSB7XG4gICAgICAgIHZhciBzdGFydFBvcyA9IFBvcyhpdGVyLmxpbmUsIGl0ZXIuY2gpO1xuICAgICAgICB2YXIgZW5kUG9zID0gZmluZE1hdGNoaW5nQ2xvc2UoaXRlciwgb3BlblRhZ1syXSk7XG4gICAgICAgIHJldHVybiBlbmRQb3MgJiYgY21wKGVuZFBvcy5mcm9tLCBzdGFydFBvcykgPiAwID8ge2Zyb206IHN0YXJ0UG9zLCB0bzogZW5kUG9zLmZyb219IDogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIENvZGVNaXJyb3IuZmluZE1hdGNoaW5nVGFnID0gZnVuY3Rpb24oY20sIHBvcywgcmFuZ2UpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBJdGVyKGNtLCBwb3MubGluZSwgcG9zLmNoLCByYW5nZSk7XG4gICAgaWYgKGl0ZXIudGV4dC5pbmRleE9mKFwiPlwiKSA9PSAtMSAmJiBpdGVyLnRleHQuaW5kZXhPZihcIjxcIikgPT0gLTEpIHJldHVybjtcbiAgICB2YXIgZW5kID0gdG9UYWdFbmQoaXRlciksIHRvID0gZW5kICYmIFBvcyhpdGVyLmxpbmUsIGl0ZXIuY2gpO1xuICAgIHZhciBzdGFydCA9IGVuZCAmJiB0b1RhZ1N0YXJ0KGl0ZXIpO1xuICAgIGlmICghZW5kIHx8ICFzdGFydCB8fCBjbXAoaXRlciwgcG9zKSA+IDApIHJldHVybjtcbiAgICB2YXIgaGVyZSA9IHtmcm9tOiBQb3MoaXRlci5saW5lLCBpdGVyLmNoKSwgdG86IHRvLCB0YWc6IHN0YXJ0WzJdfTtcbiAgICBpZiAoZW5kID09IFwic2VsZkNsb3NlXCIpIHJldHVybiB7b3BlbjogaGVyZSwgY2xvc2U6IG51bGwsIGF0OiBcIm9wZW5cIn07XG5cbiAgICBpZiAoc3RhcnRbMV0pIHsgLy8gY2xvc2luZyB0YWdcbiAgICAgIHJldHVybiB7b3BlbjogZmluZE1hdGNoaW5nT3BlbihpdGVyLCBzdGFydFsyXSksIGNsb3NlOiBoZXJlLCBhdDogXCJjbG9zZVwifTtcbiAgICB9IGVsc2UgeyAvLyBvcGVuaW5nIHRhZ1xuICAgICAgaXRlciA9IG5ldyBJdGVyKGNtLCB0by5saW5lLCB0by5jaCwgcmFuZ2UpO1xuICAgICAgcmV0dXJuIHtvcGVuOiBoZXJlLCBjbG9zZTogZmluZE1hdGNoaW5nQ2xvc2UoaXRlciwgc3RhcnRbMl0pLCBhdDogXCJvcGVuXCJ9O1xuICAgIH1cbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRFbmNsb3NpbmdUYWcgPSBmdW5jdGlvbihjbSwgcG9zLCByYW5nZSwgdGFnKSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgSXRlcihjbSwgcG9zLmxpbmUsIHBvcy5jaCwgcmFuZ2UpO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBvcGVuID0gZmluZE1hdGNoaW5nT3BlbihpdGVyLCB0YWcpO1xuICAgICAgaWYgKCFvcGVuKSBicmVhaztcbiAgICAgIHZhciBmb3J3YXJkID0gbmV3IEl0ZXIoY20sIHBvcy5saW5lLCBwb3MuY2gsIHJhbmdlKTtcbiAgICAgIHZhciBjbG9zZSA9IGZpbmRNYXRjaGluZ0Nsb3NlKGZvcndhcmQsIG9wZW4udGFnKTtcbiAgICAgIGlmIChjbG9zZSkgcmV0dXJuIHtvcGVuOiBvcGVuLCBjbG9zZTogY2xvc2V9O1xuICAgIH1cbiAgfTtcblxuICAvLyBVc2VkIGJ5IGFkZG9uL2VkaXQvY2xvc2V0YWcuanNcbiAgQ29kZU1pcnJvci5zY2FuRm9yQ2xvc2luZ1RhZyA9IGZ1bmN0aW9uKGNtLCBwb3MsIG5hbWUsIGVuZCkge1xuICAgIHZhciBpdGVyID0gbmV3IEl0ZXIoY20sIHBvcy5saW5lLCBwb3MuY2gsIGVuZCA/IHtmcm9tOiAwLCB0bzogZW5kfSA6IG51bGwpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hpbmdDbG9zZShpdGVyLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgZnVuY3Rpb24gZG9Gb2xkKGNtLCBwb3MsIG9wdGlvbnMsIGZvcmNlKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jYWxsKSB7XG4gICAgICB2YXIgZmluZGVyID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmluZGVyID0gZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcInJhbmdlRmluZGVyXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBvcyA9PSBcIm51bWJlclwiKSBwb3MgPSBDb2RlTWlycm9yLlBvcyhwb3MsIDApO1xuICAgIHZhciBtaW5TaXplID0gZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcIm1pbkZvbGRTaXplXCIpO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmFuZ2UoYWxsb3dGb2xkZWQpIHtcbiAgICAgIHZhciByYW5nZSA9IGZpbmRlcihjbSwgcG9zKTtcbiAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UudG8ubGluZSAtIHJhbmdlLmZyb20ubGluZSA8IG1pblNpemUpIHJldHVybiBudWxsO1xuICAgICAgdmFyIG1hcmtzID0gY20uZmluZE1hcmtzQXQocmFuZ2UuZnJvbSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChtYXJrc1tpXS5fX2lzRm9sZCAmJiBmb3JjZSAhPT0gXCJmb2xkXCIpIHtcbiAgICAgICAgICBpZiAoIWFsbG93Rm9sZGVkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICByYW5nZS5jbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgICBtYXJrc1tpXS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZ2V0UmFuZ2UodHJ1ZSk7XG4gICAgaWYgKGdldE9wdGlvbihjbSwgb3B0aW9ucywgXCJzY2FuVXBcIikpIHdoaWxlICghcmFuZ2UgJiYgcG9zLmxpbmUgPiBjbS5maXJzdExpbmUoKSkge1xuICAgICAgcG9zID0gQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUgLSAxLCAwKTtcbiAgICAgIHJhbmdlID0gZ2V0UmFuZ2UoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNsZWFyZWQgfHwgZm9yY2UgPT09IFwidW5mb2xkXCIpIHJldHVybjtcblxuICAgIHZhciBteVdpZGdldCA9IG1ha2VXaWRnZXQoY20sIG9wdGlvbnMsIHJhbmdlKTtcbiAgICBDb2RlTWlycm9yLm9uKG15V2lkZ2V0LCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbihlKSB7XG4gICAgICBteVJhbmdlLmNsZWFyKCk7XG4gICAgICBDb2RlTWlycm9yLmVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgfSk7XG4gICAgdmFyIG15UmFuZ2UgPSBjbS5tYXJrVGV4dChyYW5nZS5mcm9tLCByYW5nZS50bywge1xuICAgICAgcmVwbGFjZWRXaXRoOiBteVdpZGdldCxcbiAgICAgIGNsZWFyT25FbnRlcjogZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcImNsZWFyT25FbnRlclwiKSxcbiAgICAgIF9faXNGb2xkOiB0cnVlXG4gICAgfSk7XG4gICAgbXlSYW5nZS5vbihcImNsZWFyXCIsIGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gICAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgXCJ1bmZvbGRcIiwgY20sIGZyb20sIHRvKTtcbiAgICB9KTtcbiAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgXCJmb2xkXCIsIGNtLCByYW5nZS5mcm9tLCByYW5nZS50byk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlV2lkZ2V0KGNtLCBvcHRpb25zLCByYW5nZSkge1xuICAgIHZhciB3aWRnZXQgPSBnZXRPcHRpb24oY20sIG9wdGlvbnMsIFwid2lkZ2V0XCIpO1xuXG4gICAgaWYgKHR5cGVvZiB3aWRnZXQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB3aWRnZXQgPSB3aWRnZXQocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkZ2V0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2lkZ2V0KTtcbiAgICAgIHdpZGdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgd2lkZ2V0LmFwcGVuZENoaWxkKHRleHQpO1xuICAgICAgd2lkZ2V0LmNsYXNzTmFtZSA9IFwiQ29kZU1pcnJvci1mb2xkbWFya2VyXCI7XG4gICAgfSBlbHNlIGlmICh3aWRnZXQpIHtcbiAgICAgIHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpZGdldDtcbiAgfVxuXG4gIC8vIENsdW1zeSBiYWNrd2FyZHMtY29tcGF0aWJsZSBpbnRlcmZhY2VcbiAgQ29kZU1pcnJvci5uZXdGb2xkRnVuY3Rpb24gPSBmdW5jdGlvbihyYW5nZUZpbmRlciwgd2lkZ2V0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNtLCBwb3MpIHsgZG9Gb2xkKGNtLCBwb3MsIHtyYW5nZUZpbmRlcjogcmFuZ2VGaW5kZXIsIHdpZGdldDogd2lkZ2V0fSk7IH07XG4gIH07XG5cbiAgLy8gTmV3LXN0eWxlIGludGVyZmFjZVxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbihcImZvbGRDb2RlXCIsIGZ1bmN0aW9uKHBvcywgb3B0aW9ucywgZm9yY2UpIHtcbiAgICBkb0ZvbGQodGhpcywgcG9zLCBvcHRpb25zLCBmb3JjZSk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKFwiaXNGb2xkZWRcIiwgZnVuY3Rpb24ocG9zKSB7XG4gICAgdmFyIG1hcmtzID0gdGhpcy5maW5kTWFya3NBdChwb3MpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyArK2kpXG4gICAgICBpZiAobWFya3NbaV0uX19pc0ZvbGQpIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBDb2RlTWlycm9yLmNvbW1hbmRzLnRvZ2dsZUZvbGQgPSBmdW5jdGlvbihjbSkge1xuICAgIGNtLmZvbGRDb2RlKGNtLmdldEN1cnNvcigpKTtcbiAgfTtcbiAgQ29kZU1pcnJvci5jb21tYW5kcy5mb2xkID0gZnVuY3Rpb24oY20pIHtcbiAgICBjbS5mb2xkQ29kZShjbS5nZXRDdXJzb3IoKSwgbnVsbCwgXCJmb2xkXCIpO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZm9sZCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgY20uZm9sZENvZGUoY20uZ2V0Q3Vyc29yKCksIG51bGwsIFwidW5mb2xkXCIpO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLmZvbGRBbGwgPSBmdW5jdGlvbihjbSkge1xuICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIGkgPSBjbS5maXJzdExpbmUoKSwgZSA9IGNtLmxhc3RMaW5lKCk7IGkgPD0gZTsgaSsrKVxuICAgICAgICBjbS5mb2xkQ29kZShDb2RlTWlycm9yLlBvcyhpLCAwKSwgbnVsbCwgXCJmb2xkXCIpO1xuICAgIH0pO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZm9sZEFsbCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgaSA9IGNtLmZpcnN0TGluZSgpLCBlID0gY20ubGFzdExpbmUoKTsgaSA8PSBlOyBpKyspXG4gICAgICAgIGNtLmZvbGRDb2RlKENvZGVNaXJyb3IuUG9zKGksIDApLCBudWxsLCBcInVuZm9sZFwiKTtcbiAgICB9KTtcbiAgfTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcImNvbWJpbmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZ1bmNzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IGZ1bmNzW2ldKGNtLCBzdGFydCk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiYXV0b1wiLCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgICB2YXIgaGVscGVycyA9IGNtLmdldEhlbHBlcnMoc3RhcnQsIFwiZm9sZFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlbHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXIgPSBoZWxwZXJzW2ldKGNtLCBzdGFydCk7XG4gICAgICBpZiAoY3VyKSByZXR1cm4gY3VyO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHJhbmdlRmluZGVyOiBDb2RlTWlycm9yLmZvbGQuYXV0byxcbiAgICB3aWRnZXQ6IFwiXFx1MjE5NFwiLFxuICAgIG1pbkZvbGRTaXplOiAwLFxuICAgIHNjYW5VcDogZmFsc2UsXG4gICAgY2xlYXJPbkVudGVyOiB0cnVlXG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJmb2xkT3B0aW9uc1wiLCBudWxsKTtcblxuICBmdW5jdGlvbiBnZXRPcHRpb24oY20sIG9wdGlvbnMsIG5hbWUpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zW25hbWVdICE9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gb3B0aW9uc1tuYW1lXTtcbiAgICB2YXIgZWRpdG9yT3B0aW9ucyA9IGNtLm9wdGlvbnMuZm9sZE9wdGlvbnM7XG4gICAgaWYgKGVkaXRvck9wdGlvbnMgJiYgZWRpdG9yT3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGVkaXRvck9wdGlvbnNbbmFtZV07XG4gICAgcmV0dXJuIGRlZmF1bHRPcHRpb25zW25hbWVdO1xuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oXCJmb2xkT3B0aW9uXCIsIGZ1bmN0aW9uKG9wdGlvbnMsIG5hbWUpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9uKHRoaXMsIG9wdGlvbnMsIG5hbWUpO1xuICB9KTtcbn0pO1xuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsIi8vIOWwgeijhVxyXG5pbXBvcnQgZG9tUmVuZGVyIGZyb20gJy4vZWRpdG9yL2NyZWF0ZUVsZW1lbnQnO1xyXG5pbXBvcnQgQ09ORklHIGZyb20gJy4vZWRpdG9yL2NvbmZpZyc7XHJcbmltcG9ydCBjb2RlbWlyb3JUb29scyBmcm9tICcuL2VkaXRvci9jb2RlbWlycm9yJztcclxuY29uc3QgeyBnZXRTdGF0ZSB9ID0gY29kZW1pcm9yVG9vbHM7XHJcblxyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmNvbnN0IElOUFVUX0VWRU5UX0RFQk9VTkNFX1dBSVQgPSAzMDA7XHJcblxyXG4vLyDlt6Xlhbflm77moIflip/og71cclxuaW1wb3J0ICcuL3N0eWxlL2luZGV4Lmxlc3MnO1xyXG5cclxuaW1wb3J0ICR0b29scyBmcm9tICcuL2VkaXRvci90b29sYmFySGFuZGxlJztcclxuXHJcbi8qKiDlt6Xlhbfpm4blkIjlr7nosaEuICAqL1xyXG5pbXBvcnQgVVRJTCBmcm9tICcuL3V0aWwvVXRpbCc7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmajor63oqIAgPT09PT09PT09PT09PT09PT09PT1cclxuaW1wb3J0IGxhbmdFbiBmcm9tICcuL2VkaXRvci9sYW5nL2VuJztcclxuaW1wb3J0IGxhbmdaaCBmcm9tICcuL2VkaXRvci9sYW5nL3poJztcclxuXHJcbmNvbnN0IGxhbmdNYXAgPSB7XHJcbiAgJ2VuJzogbGFuZ0VuLFxyXG4gICd6aCc6IGxhbmdaaFxyXG59XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBjb2RlbWlycm9yID09PT09PT09PT09PT09PT09PT09XHJcbmltcG9ydCBDb2RlbWlycm9yIGZyb20gJ2NvZGVtaXJyb3InO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9tYXJrZG93bi9tYXJrZG93bic7XHJcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL2dmbS9nZm0nO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vbW9kZS9vdmVybGF5JztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL2VkaXQvY2xvc2V0YWcnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jbG9zZWJyYWNrZXRzJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL3Njcm9sbC9hbm5vdGF0ZXNjcm9sbGJhcic7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vYWN0aXZlLWxpbmUnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGNvZGUnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC94bWwtZm9sZCc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRndXR0ZXInO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9jb21tZW50LWZvbGQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9pbmRlbnQtZm9sZCc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2JyYWNlLWZvbGQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9tYXJrZG93bi1mb2xkJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2xpYi9jb2RlbWlycm9yLmNzcyc7XHJcbi8vIGltcG9ydCAnY29kZW1pcnJvci90aGVtZS9iYXNlMTYtbGlnaHQuY3NzJ1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9mb2xkZ3V0dGVyLmNzcyc7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBtYXJrZWQgPT09PT09PT09PT09PT09PT09PT1cclxuaW1wb3J0IG1hcmtlZCBmcm9tICdtYXJrZWQnO1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0gaGlnaGxpZ2h0LmpzID09PT09PT09PT09PT09PT09PT09XHJcbmltcG9ydCBobGpzIGZyb20gJ2hpZ2hsaWdodC5qcyc7XHJcbmltcG9ydCAnaGlnaGxpZ2h0LmpzL3N0eWxlcy9tb25va2FpLXN1YmxpbWUuY3NzJztcclxuXHJcbi8vIEBzZWUgW2NvbmZpZy1zZWVdKVtodHRwczovL2dpdGh1Yi5jb20vaGFja21kaW8vY29kaW1kL2Jsb2IvbWFzdGVyL3B1YmxpYy9qcy9saWIvZWRpdG9yL2luZGV4LmpzXVxyXG5cclxuY29uc3QgY29kZW1pcnJvciA9IHtcclxuICAvKiogQ29kZW1pcnJvciDorr7nva4uICovXHJcbiAgY29uZmlnOiB7XHJcbiAgICBtb2RlOiB7XHJcbiAgICAgIG5hbWU6ICdnZm0nLFxyXG4gICAgICB0b2tlblR5cGVPdmVycmlkZXM6IHtcclxuICAgICAgICBlbW9qaTogJ2Vtb2ppJ1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqIOaYvuekuuihjOWPtyAqL1xyXG4gICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAvLyDoh6rliqjpqozor4HplJnor69cclxuICAgIG1hdGNoQnJhY2tldHM6IHRydWUsXHJcbiAgICAvLyDnvKnov5tcclxuICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAvLyDmmK/lkKbmjaLooYxcclxuICAgIGxpbmVXcmFwcGluZzogZmFsc2UsXHJcbiAgICAvLyDngrnlh7vpq5jkuq7mraPooYxcclxuICAgIHN0eWxlQWN0aXZlTGluZTogdHJ1ZSxcclxuICAgIC8vIOmFjeiJsijkuLvpopgpXHJcbiAgICB0aGVtZTogJ2Jhc2UxNi1kYXJrJyxcclxuICAgIC8vIOiHquWKqOihpeWFqOaLrOWPt1xyXG4gICAgYXV0b0Nsb3NlQnJhY2tldHM6IHRydWUsXHJcbiAgICAvLyDoh6rliqjpl63lkIjmoIfnrb5cclxuICAgIGF1dG9DbG9zZVRhZ3M6IHRydWUsXHJcbiAgICAvLyDlsZXlvIDmipjlj6BcclxuICAgIGZvbGRHdXR0ZXI6IHRydWUsXHJcbiAgICBndXR0ZXJzOiBbJ0NvZGVNaXJyb3ItbGluZW51bWJlcnMnLCAnYXV0aG9yc2hpcC1ndXR0ZXJzJywgJ0NvZGVNaXJyb3ItZm9sZGd1dHRlciddLFxyXG4gICAgcGxhY2Vob2xkZXI6IFwi4oaQIFN0YXJ0IGJ5IGVudGVyaW5nIGEgdGl0bGUgaGVyZVxcbj09PVxcblZpc2l0IC9mZWF0dXJlcyBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvLlxcbkhhcHB5IGhhY2tpbmcgOilcIlxyXG4gIH1cclxufVxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0g5LiD54mb5LiK5LygID09PT09PT09PT09PT09PT09PT09XHJcbmltcG9ydCBRaW5pdVVwbGFvZCBmcm9tICcuL2VkaXRvci9xaW5pdS1zZGstdXBsb2FkJztcclxubGV0IHFpbml1VXBsb2FkID0gbnVsbDtcclxuXHJcblxyXG5jbGFzcyBDTWRFZGl0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIG9wdGlvbnMuZWRpdG9yID0gdGhpcztcclxuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIneWni+WMli4gXHJcbiAgICovXHJcbiAgaW5pdChvcHRpb25zKSB7XHJcbiAgICB0aGlzLmluaXREYXRhKG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmluaXRWaWV3KHRoaXMuX29wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOiuvue9riBjb25maWdcclxuICBzZXQgb3B0aW9ucyhvcHRpb24pIHtcclxuICAgIC8vIOWQjOWAvOWvueixoeWAvOimhuebllxyXG4gIH1cclxuXHJcbiAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIneWni+WMlue8lui+keWZqOaVsOaNri4gXHJcbiAgICovXHJcbiAgLy8gaW5pdERhdGEob3B0aW9ucykge1xyXG4gIC8vICAgLy8gRmluZCB0aGUgZWxlbWVudCBhdHRyXHJcbiAgLy8gICBpZiAob3B0aW9ucy5lbGVtZW50KSB7XHJcbiAgLy8gICAgIHRoaXMuZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudDtcclxuICAvLyAgICAgdGhpcy50ZXh0QXJlYUVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHRhcmVhJylbMF07XHJcbiAgLy8gICB9IGVsc2UgaWYgKG9wdGlvbnMuZWxlbWVudCA9PT0gbnVsbCkge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZygnTURFZGl0b3I6IEVycm9yLiBObyBlbGVtZW50IHdhcyBmb3VuZC4nKTtcclxuICAvLyAgICAgcmV0dXJuO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIEhhbmRsZSB0b29sYmFyXHJcbiAgLy8gICBpZiAob3B0aW9ucy50b29sYmFyID09PSB1bmRlZmluZWQpIHtcclxuICAvLyAgICAgb3B0aW9ucy50b29sYmFyID0gW107XHJcblxyXG4gIC8vICAgICAvLyBMb29wIG92ZXIgdGhlIGJ1aWx0IGluIGJ1dHRvbnMsIHRvIGdldCB0aGUgcHJlZmVycmVkIG9yZGVyXHJcbiAgLy8gICAgIGZvciAobGV0IGtleSBpbiB0b29sYmFyQnVpbHRJbkJ1dHRvbnMpIHtcclxuICAvLyAgICAgICBpZiAodG9vbGJhckJ1aWx0SW5CdXR0b25zLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHJcbiAgLy8gICAgICAgICAvLyDliIbpmpTnrKblip/og71cclxuICAvLyAgICAgICAgIGlmIChrZXkuaW5kZXhPZignc2VwYXJhdG9yLScpICE9IC0xKSB7XHJcbiAgLy8gICAgICAgICAgIG9wdGlvbnMudG9vbGJhci5wdXNoKCd8JylcclxuICAvLyAgICAgICAgIH1cclxuXHJcbiAgLy8gICAgICAgICAvLyBcclxuICAvLyAgICAgICAgIGlmICh0b29sYmFyQnVpbHRJbkJ1dHRvbnNba2V5XS5kZWZhdWx0ID09PSB0cnVlIHx8IFxyXG4gIC8vICAgICAgICAgICAgKG9wdGlvbnMuc2hvd0ljb25zICYmIFxyXG4gIC8vICAgICAgICAgICAgIG9wdGlvbnMuc2hvd0ljb25zLmNvbnN0cnV0b3IgPT09IEFycmF5ICYmIFxyXG4gIC8vICAgICAgICAgICAgIG9wdGlvbnMuc2hvd0ljb25zLmluZGV4T2Yoa2V5KSAhPSAtMSkpIHtcclxuICAvLyAgICAgICAgICAgb3B0aW9ucy50b29sYmFyLnB1c2goa2V5KTsgICAgXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgLy8gSGFuZGxlIHN0YXR1cyBiYXJcclxuICAvLyAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc3RhdHVzJykpIHtcclxuICAvLyAgICAgb3B0aW9ucy5zdGF0dXMgPSBbJ2F1dG9zYXZlJywgJ2xpbmVzJywgJ3dvcmRzJywgJ2N1cnNvciddO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIEFkZCBkZWZhdWx0IHByZXZpZXcgcmVuZGVyaW5nIGZ1bmN0aW9uXHJcbiAgLy8gICBpZiAoIW9wdGlvbnMucHJldmlld1JlbmRlcikge1xyXG4gIC8vICAgICBvcHRpb25zLnByZXZpZXdSZW5kZXIgPSBmdW5jdGlvbihwbGFpblRleHQpIHtcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IubWFya2Rvd24ocGxhaW5UZXh0KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIFNldCBkZWZhdWx0IG9wdGlvbnMgZm9yIHBhcnNpbmcgY29uZmlnXHJcbiAgLy8gICBvcHRpb25zLnBhcnNpbmdDb25maWcgPSBleHRlbmQoXHJcbiAgLy8gICAgIHsgaGlnaGxpZ2h0Rm9ybWF0dGluZzogdHJ1ZSB9LFxyXG4gIC8vICAgICBvcHRpb25zLnBhcnNpbmdDb25maWcgfHwge31cclxuICAvLyAgICk7XHJcblxyXG4gIC8vICAgLy8gTWVyZ2luZyB0aGUgaW5zZXJ0VGV4dHMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnNcclxuICAvLyAgIG9wdGlvbnMuaW5zZXJ0VGV4dHMgPSBleHRlbmQoe30sIGluc2VydFRleHRzLCBvcHRpb25zLmluc2VydFRleHRzIHx8IHt9KTtcclxuXHJcbiAgLy8gICAvLyBNZXJnaW5nIHRoZSBwcm9tcHRUZXh0cywgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cclxuICAvLyAgIG9wdGlvbnMucHJvbXB0VGV4dHMgPSBwcm9tcHRUZXh0cztcclxuXHJcbiAgLy8gICAvLyBNZXJnaW5nIHRoZSBibG9ja1N0eWxlcywgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cclxuICAvLyAgIG9wdGlvbnMuYmxvY2tTdHlsZXMgPSBleHRlbmQoe30sIGJsb2NrU3R5bGVzLCBvcHRpb25zLmJsb2NrU3R5bGVzIHx8IHt9KTtcclxuXHJcbiAgLy8gICAvLyBNZXJnaW50IHRoZSBzaG9ydGN1dHMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXHJcbiAgLy8gICAvLyDlv6vmjbfplK7phY3nva7orr7nva5cclxuICAvLyAgIG9wdGlvbnMuc2hvcnRjdXRzID0gZXh0ZW5kKHt9LCBzaG9ydGN1dHMsIG9wdGlvbnMuc2hvcnRjdXRzIHx8IHt9KTtcclxuXHJcbiAgLy8gICAvLyBVcGRhdGUgdGhpcyBvcHRpb25zXHJcbiAgLy8gICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG5cclxuICAvLyAgIC8vIFRoZSBjb2RlbWlycm9yIGNvbW1wb25lbnQgaXMgb25seSBhdmFsaWFibGUgYWZ0ZXIgcmVuZGVyZWQuXHJcbiAgLy8gICAvLyBzbyBzZXR0ZXIgZm9yIHRoZSBpbml0aWFsVmFsdWUgY2FuIG9ubHkgcnVuIGFmdGVyXHJcbiAgLy8gICAvLyB0aGUgZWxlbWVudCBoYXMgYmVuIHJlbmVyZWRcclxuICAvLyAgIGlmIChvcHRpb25zLmluaXRpYWxWYWx1ZSAmJiAoIXRoaXMub3B0aW9ucy5hdXRvc2F2ZSB8fCB0aGlzLm9wdGlvbnMuYXV0b3NhdmUuZm91bmRTYXZlVmFsdWUgIT09IHRydWUpKSB7XHJcbiAgLy8gICAgIHRoaXMudmFsdWUob3B0aW9ucy5pbml0aWFsVmFsdWUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBpbml0RGF0YShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRPcHRpb24ob3B0aW9ucyk7XHJcbiAgICAgIHRoaXMuaW5pdEVkaXRvclN0YXR1cygpO1xyXG4gICAgICB0aGlzLmluaXRRaW5pdSh0aGlzLl9vcHRpb25zLnFpbml1KTtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7IFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yid5aeL57yW6L6R5Zmo5YyW6KeG5Zu+5pi+56S6LiBcclxuICAgKi9cclxuICBpbml0VmlldyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIHRoaXMuY3JlYXRlSWNvbkxpbmsoKTtcclxuICAgIHRoaXMuY3JlYXRlRWxlbWVudChvcHRpb25zKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgc2VsZi5pbml0RXZlbnQoKTtcclxuICAgICAgICBzZWxmLmluaXRDb2RlTWlycm9yRGF0YSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdE1hcmtkb3duRGF0YSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdERlZmF1bHRDb250ZW50KCk7XHJcbiAgICAgICAgc2VsZi5saWZlY3ljbGVNb3VudGVkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yid5aeL5YyWYOe8lui+keWZqGDkuovku7blpITnkIYuIFxyXG4gICAqL1xyXG4gIGluaXRFdmVudCgpIHtcclxuICAgIHRoaXMuaW5pdFN0YXR1c0V2ZW50KCk7XHJcbiAgICB0aGlzLmluaXRUb29sc0V2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBpbml0T3B0aW9uKG9wdGlvbnMpIHtcclxuICAgIC8vIFRvZG86IOWPguaVsOaLt+i0neWSjOimhuebluWKn+iDvemcgOimgeS8mOWMli5cclxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gICAgICAvLyA9PT09PT09PT09IOW/q+aNt+mUriA9PT09PT09PT09XHJcbiAgICAgIHNob3J0Y3V0czoge1xyXG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgLy8gPT09PT09PT09PSDor63oqIAgPT09PT09PT09PVxyXG4gICAgICBsYW5nOiAnemgnLFxyXG4gICAgICAvLyA9PT09PT09PT09IOS4g+eJmyA9PT09PT09PT09XHJcbiAgICAgIHFpbml1OiB7XHJcbiAgICAgICAgdG9rZW5BcGlVcmw6ICdodHRwOi8vMTI3LjAuMC4xOjMwMDEvYXBpL3Fpbml1L3Rlc3QvZ2V0X3Rva2VuJyxcclxuICAgICAgICByZWdpb246ICd6MScsXHJcbiAgICAgICAgY29uZmlnOiB7fSxcclxuICAgICAgICBwdXRFeHRyYToge31cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgICAvLyB0aGlzLl9vcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gVVRJTC5leHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcclxuICAgIHRoaXMuX29wdGlvbnMuJHRvb2xzID0gJHRvb2xzO1xyXG4gICAgY29uc3QgX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5fb3B0aW9ucyk7XHJcblxyXG4gICAgLy8g6buY6K6k6K+t6KiA5aSE55CGLlxyXG4gICAgaWYgKHR5cGVvZiBfb3B0aW9ucy5sYW5nID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBsYW5nS2V5ID0gX29wdGlvbnMubGFuZztcclxuICAgICAgdGhpcy5fb3B0aW9ucy5sYW5nID0gbGFuZ01hcFtsYW5nS2V5XSB8fCBDT05GSUcuZWRpdG9yLmxhbmd1YWdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g6Ieq5bex6YWN572u6K+t6KiALlxyXG4gICAgICB0aGlzLl9vcHRpb25zLmxhbmcgPSBPYmplY3QuYXNzaWduKHt9LCBDT05GSUcuZWRpdG9yLmxhbmd1YWdlLCBvcHRpb25zLmxhbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gID09PT09PT09PT09PT09PT09PT09IOe8lui+keWZqOeUn+WRveWRqOacnyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIC8qKiDnvJbovpHlmajmiYDmnInpg73lh4blpIflpb3kuoYgKi9cclxuICBsaWZlY3ljbGVNb3VudGVkKCkge1xyXG4gICAgdGhpcy5hZGRFZGl0Q29udGFpbmVyUGFzZUltZygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5Yib5bu657yW6L6R5Zmo5YWD57SgID09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog57yW6L6R5ZmoIGDlm77moIdjc3Ppk77mjqVgIOWFg+e0oOWIm+W7ui5cclxuICAgKi9cclxuICBjcmVhdGVJY29uTGluaygpIHtcclxuICAgIGNvbnN0IGlzQ3JlYXRlZEljb25MaW5rID0gdGhpcy5pc0NyZWF0ZWRJY29uTGluaygpO1xyXG4gICAgaWYgKGlzQ3JlYXRlZEljb25MaW5rKSByZXR1cm47XHJcblxyXG4gICAgLy8gQHNlZSBodHRwOi8vd3d3LnJ1bm9vYi5jb20vanNyZWYvbWV0LWRvY3VtZW50LWNyZWF0ZWVsZW1lbnQuaHRtbFxyXG4gICAgY29uc3Qgb2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICBvbGluay5zZXRBdHRyaWJ1dGUoJ2RhdGEtZWRpdG9yJywgdHJ1ZSk7XHJcbiAgICBvbGluay5yZWwgPSBcInN0eWxlc2hlZXRcIjtcclxuICAgIG9saW5rLmhyZWYgPSBDT05GSUcuaWNvbkxpbms7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQob2xpbmspO1xyXG4gIH1cclxuICAvKipcclxuICAgKiDmo4DmtYvmmK/lkKblt7Lnu4/liJvlu7rkuobnvJbovpHlmajlm77moIfmoLflvI/pk77mjqUuIFxyXG4gICAqL1xyXG4gIGlzQ3JlYXRlZEljb25MaW5rKCkge1xyXG4gICAgY29uc3Qgb0xpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibGlua1tkYXRhLWVkaXRvcl1cIik7XHJcbiAgICBjb25zdCByZXN1bHQgPSBvTGluayA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliJvlu7rnvJbovpHlmaggYOaYvuekuuWuueWZqGAuIFxyXG4gICAqL1xyXG4gIGNyZWF0ZUVsZW1lbnQob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZG9tUmVuZGVyLmluaXQob3B0aW9ucykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g57yW6L6R5ZmoIGBUb29sc2Ag55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog5Zu+5qCH5re75Yqg54K55Ye75LqL5Lu255uR5ZCsLiBcclxuICAgKi9cclxuICBpbml0VG9vbHNFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgdG9vbHNPYmogPSB0aGlzLl9vcHRpb25zLiR0b29scztcclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IHsgdG9vbGJhckJ1aWx0SW5CdXR0b25zIH0gPSB0b29sc09iajtcclxuICAgIGNvbnN0IHRvb2xzQXJyID0gVVRJTC5vYmoyQXJyKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcblxyXG4gICAgaWYgKHRvb2xzQXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgdG9vbHNBcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAvLyBjbGFzTmFtZSDmnInlpJrkuKrnsbvlkI3ml7blj5bnrKzkuIDkuKouXHJcbiAgICAgICAgaWYgKGl0ZW1bJ2NsYXNzTmFtZSddLmluZGV4T2YoJyAnKSA+IDApIHtcclxuICAgICAgICAgIGl0ZW1bJ2NsYXNzTmFtZSddID0gaXRlbVsnY2xhc3NOYW1lJ10uc3BsaXQoJyAnKVswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICcuJyArIGl0ZW1bJ2NsYXNzTmFtZSddO1xyXG4gICAgICAgIGNvbnN0IGNhbGxCYWNrID0gaXRlbVsnYWN0aW9uJ107XHJcbiAgICAgICAgY29uc3QgaXNGdW5jdGlvbiA9IFVUSUwuaXNGdW5jdGlvbihjYWxsQmFjayk7XHJcblxyXG4gICAgICAgIGlmIChjbGFzc05hbWUgIT09ICcnICYmIGlzRnVuY3Rpb24pIHtcclxuICAgICAgICAgIGNvbnN0IHRvb2xFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICBpZiAodG9vbEVsKSB7XHJcbiAgICAgICAgICAgIC8vIOm7mOiupOaYvuekuiBjb21wYXJlIOW4g+WxgFxyXG4gICAgICAgICAgICBzZWxmLiRzdGF0dXNcclxuICAgICAgICAgICAgdG9vbEVsLiRlZGl0b3IgPSBzZWxmO1xyXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyXHJcbiAgICAgICAgICAgIHRvb2xFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGxCYWNrLCBmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOe8lui+keWZqCBgQ29kZU1pcnJvcmAg55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog5Yib5bu6IENvZGVtaXJyb3Ig5a655ZmoLiBcclxuICAgKi9cclxuICBjcmVhdGVDb2RlTWlycm9yRWxlbWVudChlbCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gQ29kZW1pcnJvci5mcm9tVGV4dEFyZWEoZWwsIGNvbmZpZyk7XHJcbiAgfVxyXG4gIFxyXG4gIGluaXRDb2RlTWlycm9yRGF0YSgpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xyXG4gICAgbGV0IG1vZGU7XHJcbiAgICBsZXQgYmFja2Ryb3A7XHJcbiAgICBsZXQgdGV4dEFyZWFFbGVtZW50ID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcjYXJlYScpO1xyXG4gICAgXHJcbiAgICAvLyBpZiAob3B0aW9ucy5zcGVsbENoZWNrZGVyICE9PSBmYWxzZSkge1xyXG4gICAgLy8gICBtb2RlID0gJ3NwZWxsLWNoZWNrZXInO1xyXG4gICAgLy8gICBiYWNrZHJvcCA9IG9wdGlvbnMucGFyc2luZ0NvbmZpZztcclxuICAgIC8vICAgYmFja2Ryb3AubmFtZSA9ICdnZm0nO1xyXG4gICAgLy8gICBiYWNrZHJvcC5naXRIdWJTcGljZSA9IGZhbHNlO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgbW9kZSA9IG9wdGlvbnMucGFyc2luZ0NvbmZpZztcclxuICAgIC8vICAgbW9kZS5uYW1lID0gJ2dmbSc7XHJcbiAgICAvLyAgIG1vZGUuZ2l0SHViU3BpY2UgPSBmYWxzZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBDb2RlTWlycm9yIOiHquWumuS5ieiuvue9rlxyXG4gICAgY29uc3QgY21EaXlDb25maWcgPSB7XHJcbiAgICAgIG1vZGU6IHtcclxuICAgICAgICBuYW1lOiBcImdmbVwiLFxyXG4gICAgICAgIHRva2VuVHlwZU92ZXJyaWRlczoge1xyXG4gICAgICAgICAgZW1vamk6IFwiZW1vamlcIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLyoqIOaYvuekuuihjOWPtyAqL1xyXG4gICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgLy8g6Ieq5Yqo6aqM6K+B6ZSZ6K+vXHJcbiAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsXHJcbiAgICAgIC8vIOe8qei/m1xyXG4gICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAvLyDmmK/lkKbmjaLooYxcclxuICAgICAgbGluZVdyYXBwaW5nOiB0cnVlLFxyXG4gICAgICAvLyDngrnlh7vpq5jkuq7mraPooYxcclxuICAgICAgc3R5bGVBY3RpdmVMaW5lOiB0cnVlLFxyXG4gICAgICAvLyDphY3oibIo5Li76aKYKVxyXG4gICAgICB0aGVtZTogXCJiYXNlMTYtZGFya1wiLFxyXG4gICAgICAvLyDoh6rliqjooaXlhajmi6zlj7dcclxuICAgICAgYXV0b0Nsb3NlQnJhY2tldHM6IHRydWUsXHJcbiAgICAgIC8vIOiHquWKqOmXreWQiOagh+etvlxyXG4gICAgICBhdXRvQ2xvc2VUYWdzOiB0cnVlLFxyXG4gICAgICAvLyDlsZXlvIDmipjlj6BcclxuICAgICAgZm9sZEd1dHRlcjogdHJ1ZSxcclxuICAgICAgZ3V0dGVyczogW1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiLCBcIkNvZGVNaXJyb3ItZm9sZGd1dHRlclwiXVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOe8lui+keWZqOm7mOiupOiuvue9rlxyXG4gICAgLy8g5a6e5L6L5YyW57yW6L6R5Zmo5pe26buY6K6k55qE5Lyg5Y+CXHJcbiAgICAvLyBjb25zdCBlZGl0b3JEZWZhdWx0Q29uZmlnID0ge1xyXG4gICAgLy8gICBtb2RlOiBtb2RlLFxyXG4gICAgLy8gICBiYWNrZHJvcDogYmFja2Ryb3AsXHJcbiAgICAvLyAgIHRoZW1lOiBcInBhcGVyXCIsXHJcbiAgICAvLyAgIHRhYlNpemU6IChvcHRpb25zLnRhYlNpemUgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMudGFiU2l6ZSA6IDIsXHJcbiAgICAvLyAgIGluZGVudFVuaXQ6IChvcHRpb25zLnRhYlNpemUgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMudGFiU2l6ZSA6IDIsXHJcbiAgICAvLyAgIGluZGVudFdpdGhUYWJzOiAob3B0aW9ucy5pbmRlbnRXaXRoVGFicyA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgLy8gICBsaW5lTnVtYmVyczogZmFsc2UsXHJcbiAgICAvLyAgIGF1dG9mb2N1czogKG9wdGlvbnMuYXV0b2ZvY3VzID09PSB0cnVlKSA/IHRydWUgOiBmYWxzZSxcclxuICAgIC8vICAgZXh0cmFLZXlzOiBrZXlNYXBzLFxyXG4gICAgLy8gICBsaW5lV3JhcHBpbmc6IChvcHRpb25zLmxpbmVXcmFwcGluZyA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgLy8gICBhbGxvd0Ryb3BGaWxlVHlwZXM6IFtcInRleHQvcGxhaW5cIl0sXHJcbiAgICAvLyAgIHBsYWNlaG9sZGVyOiBvcHRpb25zLnBsYWNlaG9sZGVyIHx8IHRleHRBcmVhRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSB8fCBcIlwiLFxyXG4gICAgLy8gICBzdHlsZVNlbGVjdGVkVGV4dDogKG9wdGlvbnMuc3R5bGVTZWxlY3RlZFRleHQgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMuc3R5bGVTZWxlY3RlZFRleHQgOiB0cnVlXHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8g5Y+C5pWw5re35ZCIXHJcbiAgICAvLyBPYmplY3QuYXNzaWduKHt9LCBjbURpeUNvbmZpZyk7XHJcbiAgICAvLyB0aGlzLiRjb2RlbWlycm9yID0gQ29kZW1pcnJvci5mcm9tVGV4dEFyZWEodGV4dEFyZWFFbGVtZW50LCBjbURpeUNvbmZpZyk7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yID0gdGhpcy5jcmVhdGVDb2RlTWlycm9yRWxlbWVudCh0ZXh0QXJlYUVsZW1lbnQsIGNtRGl5Q29uZmlnKTtcclxuICAgIFxyXG4gICAgLy8gY29kZW1pcnJvciDmt7vliqDorr/pl67nvJbovpHlmajlv6vmjbfmlrnlvI9cclxuICAgIHRoaXMuJGNvZGVtaXJyb3IuJGVkaXRvciA9IHRoaXM7XHJcblxyXG4gICAgdGhpcy5pbml0Q29kZU1pcnJvckV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBpbml0Q29kZU1pcnJvckV2ZW50KCkge1xyXG4gICAgdGhpcy5hZGRfQ01fY2hhbmdlX2V2ZW50SGFuZGxlKCk7XHJcbiAgICB0aGlzLmFkZF9DTV9jdXJzb3JBY3Rpdml0eV9ldmVudEhhbmRsZSgpO1xyXG4gICAgdGhpcy5hZGRTY3JvbGxTeW5jKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBgQ29kZU1pcnJvcmAg5YaF5a655Y+Y5YyW5LqL5Lu255uR5ZCsLlxyXG4gICAqL1xyXG4gIGFkZF9DTV9jaGFuZ2VfZXZlbnRIYW5kbGUoKSB7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yLm9uKCdjaGFuZ2VzJywgZGVib3VuY2UodGhpcy5vbkNvZGVNaXJyb3JDaGFuZ2UsIElOUFVUX0VWRU5UX0RFQk9VTkNFX1dBSVQpKTtcclxuICB9XHJcblxyXG4gIG9uQ29kZU1pcnJvckNoYW5nZShjbSkge1xyXG4gICAgLy8g57yW6L6R5Zmo5a6e5L6LLlxyXG4gICAgY29uc3QgZWRpdG9yID0gY20uJGVkaXRvcjtcclxuICAgIGVkaXRvci5jb21tb25Db2RlTWlycm9yRXZlbnRIYW5kbGUoY20pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYENvZGVNaXJyb3JgIOWFieagh+enu+WKqOS6i+S7tuebkeWQrC5cclxuICAgKi9cclxuICBhZGRfQ01fY3Vyc29yQWN0aXZpdHlfZXZlbnRIYW5kbGUoKSB7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yLm9uKCdjdXJzb3JBY3Rpdml0eScsIHRoaXMub25Db2RlTWlycm9yQ3Vyc29yQWN0aXZpdHkpO1xyXG4gIH1cclxuXHJcbiAgb25Db2RlTWlycm9yQ3Vyc29yQWN0aXZpdHkoY20pIHtcclxuICAgIC8vIOe8lui+keWZqOWunuS+iy5cclxuICAgIGNvbnN0IGVkaXRvciA9IGNtLiRlZGl0b3I7XHJcbiAgICBlZGl0b3IuY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGBDb2RlTWlycm9yYCDkuovku7blm57osIPkuK3pg73pnIDopoHlpITnkIbnmoTlhoXlrrkuIFxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7Q29kZU1pcnJvcn0gY20gQ29kZU1pcnJvciDlr7nosaEuXHJcbiAgICovXHJcbiAgY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gY20uZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IGVkaXRvciA9IGNtLiRlZGl0b3I7XHJcbiAgICBlZGl0b3Iuc2V0SHRtbFZhbHVlKGNvbnRlbnQpO1xyXG4gICAgZWRpdG9yLnVwZGF0ZVN0YXR1c0JhcihlZGl0b3IpO1xyXG4gIH1cclxuICBcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g57yW6L6R5ZmoIGBtYXJrZG93bmAg55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgaW5pdE1hcmtkb3duRGF0YSh0ZXh0KSB7XHJcbiAgICBpZiAobWFya2VkKSB7XHJcbiAgICAgIGNvbnN0IG1hcmtlZE9wdGlvbnMgPSB7XHJcbiAgICAgICAgZ2ZtOiB0cnVlLFxyXG4gICAgICAgIHRhYmxlczogdHJ1ZSxcclxuICAgICAgICBicmVha3M6IGZhbHNlLFxyXG4gICAgICAgIHBlZGFudGljOiBmYWxzZSxcclxuICAgICAgICBzYW5pdGl6ZTogZmFsc2UsXHJcbiAgICAgICAgc21hcnRMaXN0czogdHJ1ZSxcclxuICAgICAgICBzbWFydHlwYW50czogZmFsc2UsXHJcbiAgICAgICAgaGlnaGxpZ2h0OiBmdW5jdGlvbihjb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGxqcy5oaWdobGlnaHRBdXRvKGNvZGUpLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLiRtYXJrZWQgPSBtYXJrZWQ7XHJcbiAgICAgIC8vIFNldCBvcHRpb25zXHJcbiAgICAgIHRoaXMuJG1hcmtlZC5zZXRPcHRpb25zKG1hcmtlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdE1hcmtkb3duRXZlbnQoKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXJrZG93biDlhoXlrrnmmL7npLrorr7nva4uXHJcbiAgICovXHJcbiAgaW5pdERlZmF1bHRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZGVmYXVsdENvbiA9IHRoaXMuX29wdGlvbnMuZGVmYXVsdENvbjtcclxuICAgIGlmIChkZWZhdWx0Q29uKSB7XHJcbiAgICAgIGNvbnN0IGNtID0gdGhpcy4kY29kZW1pcnJvcjtcclxuICAgICAgY20uc2V0VmFsdWUoZGVmYXVsdENvbik7XHJcbiAgICAgIHRoaXMuY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiDojrflj5YgYENvZGVNaXJyb3JgIOeahOWAvC5cclxuICAgKi9cclxuICBnZXRNRFZhbHVlKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG4gICAgcmV0dXJuIGNtLmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva4gYENvZGVNaXJyb3JgIOeahOWAvC4gXHJcbiAgICovXHJcbiAgc2V0SHRtbFZhbHVlKG1kVmFsdWUpIHtcclxuICAgIGNvbnN0IGh0bWxTdHIgPSB0aGlzLiRtYXJrZWQobWRWYWx1ZSk7XHJcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHRoaXMuX29wdGlvbnMuZWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3JykucXVlcnlTZWxlY3RvcignLnByZXZpZXctYmQnKTtcclxuICAgIGh0bWxFbGVtZW50LmlubmVySFRNTCA9IGh0bWxTdHI7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmaggYHByZXZpZXdgIOWuueWZqOebuOWFsyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmaggYOa7muWKqOadoWAgPT09PT09PT09PT09PT09PT09PT1cclxuICAvKipcclxuICAgKiDmu5rliqjlhoXlrrnlkIzmraUuIFxyXG4gICAqL1xyXG4gIGFkZFNjcm9sbFN5bmMoKSB7XHJcbiAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXByZXZpZXcnKTtcclxuXHJcbiAgICBsZXQgY1Njcm9sbCA9IGZhbHNlO1xyXG4gICAgbGV0IHBTY3JvbGwgPSBmYWxzZTtcclxuICAgIC8vIFN5bmNzIHNjcm9sbCAgZWRpdG9yIC0+IHByZXZpZXdcclxuICAgIGNtLm9uKFwic2Nyb2xsXCIsIGZ1bmN0aW9uKHYpIHtcclxuICAgICAgaWYoY1Njcm9sbCkge1xyXG4gICAgICAgIGNTY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcFNjcm9sbCA9IHRydWU7XHJcbiAgICAgIHZhciBoZWlnaHQgPSB2LmdldFNjcm9sbEluZm8oKS5oZWlnaHQgLSB2LmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHZhciByYXRpbyA9IHBhcnNlRmxvYXQodi5nZXRTY3JvbGxJbmZvKCkudG9wKSAvIGhlaWdodDtcclxuICAgICAgdmFyIG1vdmUgPSAocHJldmlldy5zY3JvbGxIZWlnaHQgLSBwcmV2aWV3LmNsaWVudEhlaWdodCkgKiByYXRpbztcclxuICAgICAgcHJldmlldy5zY3JvbGxUb3AgPSBtb3ZlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU3luY3Mgc2Nyb2xsICBwcmV2aWV3IC0+IGVkaXRvclxyXG4gICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgaWYocFNjcm9sbCkge1xyXG4gICAgICAgIHBTY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY1Njcm9sbCA9IHRydWU7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBwcmV2aWV3LnNjcm9sbEhlaWdodCAtIHByZXZpZXcuY2xpZW50SGVpZ2h0O1xyXG4gICAgICB2YXIgcmF0aW8gPSBwYXJzZUZsb2F0KHByZXZpZXcuc2Nyb2xsVG9wKSAvIGhlaWdodDtcclxuICAgICAgdmFyIG1vdmUgPSAoY20uZ2V0U2Nyb2xsSW5mbygpLmhlaWdodCAtIGNtLmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQpICogcmF0aW87XHJcbiAgICAgIGNtLnNjcm9sbFRvKDAsIG1vdmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmaggYHN0YXR1c2Ag55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgdXBkYXRlU3RhdHVzQmFyKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG5cclxuICAgIGNvbnN0IGNvbkxlbiA9IGNtLmdldFZhbHVlKCkubGVuZ3RoO1xyXG4gICAgdGhpcy5yZW5kZXJFZGl0b3JDb250ZW50UG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVuZGVyRWRpdENvbnRlbnRMZW5ndGgoY29uTGVuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaYvuekuui+k+WFpeWGheWuueaAu+mVv+W6pi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IGxlbiDplb/luqZcclxuICAgKi9cclxuICByZW5kZXJFZGl0Q29udGVudExlbmd0aChsZW4pIHtcclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IGxlbkVsZW1lbnQgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXN0YXR1cycpLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3Itc3RhdHVzLWxlbmd0aCcpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLl9vcHRpb25zLmxhbmc7XHJcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG5cclxuICAgIGxlbkVsZW1lbnQuaW5uZXJIVE1MID0gYCR7bGVuZ3RofSAke2xlbn1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pi+56S65b2T5YmN5YWJ5qCH5omA5Zyo55qEIGDooYzmlbBg44CBYOWIl+aVsGAuIGDmgLvliJfmlbBg44CBYOaAu+mVv+W6pmAuXHJcbiAgICovXHJcbiAgcmVuZGVyRWRpdG9yQ29udGVudFBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG4gICAgLy8gQHNlZSBbY29kZW1pcnJvci1hcGldKGh0dHBzOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI2FwaSlcclxuICAgIC8vIEBzZWUgW+iOt+WPluWFieagh+aJgOWcqOeahOS9jee9rl1odHRwczovL2dpdGh1Yi5jb20vaGFja21kaW8vY29kaW1kL2Jsb2IvZGI2OTk4M2E2MjI2OTM5NjJhMGZkNDJiMmYwOTFiM2YzYjZmNjkwNi9wdWJsaWMvanMvbGliL2VkaXRvci9pbmRleC5qc1xyXG4gICAgY29uc3QgbGluZUNvdW50ID0gY20ubGluZUNvdW50KCk7XHJcbiAgICBjb25zdCBjbUN1cnNvciA9IGNtLmdldEN1cnNvcigpO1xyXG4gICAgY29uc3QgY3VyckNvbCA9IGNtQ3Vyc29yLmNoICsgMTtcclxuICAgIGNvbnN0IGN1cnJMaW5lID0gY21DdXJzb3IubGluZSArIDE7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuX29wdGlvbnMubGFuZztcclxuICAgIGNvbnN0IHsgbGluZSwgY29sdW1ucyB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG5cclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXN0YXR1cy1wb3NpdG9uJykucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgc3RhdHVzQmFyRWwuaW5uZXJIVE1MID0gYCR7bGluZX0gJHtjdXJyTGluZX0sJHtjb2x1bW5zfSAke2N1cnJDb2x9IOS4gCAke2xpbmVDb3VudH0gJHtsaW5lfWA7XHJcbiAgfVxyXG4gIFxyXG4gIGluaXRFZGl0b3JTdGF0dXMob3B0aW9ucykge1xyXG4gICAgLy8g5Li76aKY6K6+572uLlxyXG4gICAgdGhpcy4kc3RhdHVzID0ge307XHJcbiAgICB0aGlzLiRzdGF0dXNbJ2lzVGhlbWVMaWdodCddID0gdHJ1ZTtcclxuICAgIHRoaXMuJHN0YXR1c1snaXNGdWxsc2NyZWVuJ10gPSBmYWxzZTtcclxuICAgIC8qKiDpu5jorqTmmL7npLrnvJbovpHluIPlsYAgKi9cclxuICAgIHRoaXMuJHN0YXR1c1snaXNTaG93QWxsJ10gPSB0cnVlO1xyXG4gICAgdGhpcy4kc3RhdHVzWydpc09ubHlQcmV2aWV3J10gPSBmYWxzZTtcclxuICAgIHRoaXMuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmajkuovku7blpITnkIYgPT09PT09PT09PT09PT09PT09PT1cclxuICAvKipcclxuICAgKiDnirbmgIHmnaHvvIzmjaLnmq7ogqQuIFxyXG4gICAqL1xyXG4gIGluaXRTdGF0dXNFdmVudCgpIHtcclxuICAgIHRoaXMuaW5pdEV2ZW50VG9nZ2xlVGhlbWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaNouiCpOWKn+iDvea3u+WKoC4gXHJcbiAgICovXHJcbiAgaW5pdEV2ZW50VG9nZ2xlVGhlbWUob3B0aW9ucywgY2xhc3NOYW1lID0gJy5pY29uLXRoZW1lJykge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBvVGhlbWVFbCA9IHRoaXMuX29wdGlvbnMuZWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKGNsYXNzTmFtZSk7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX29wdGlvbnMuZWw7XHJcbiAgICBjb25zdCB7IGFkZENsYXNzLCByZW1vdmVDbGFzcyB9ID0gVVRJTDtcclxuXHJcbiAgICBpZiAob1RoZW1lRWwpIHtcclxuICAgICAgbGV0IGlzVGhlbWVMaWdodDtcclxuICAgICAgb1RoZW1lRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgaXNUaGVtZUxpZ2h0ID0gc2VsZi4kc3RhdHVzWydpc1RoZW1lTGlnaHQnXTtcclxuICAgICAgICAvLyDlvZPliY0gYOWco+WFieagt+W8j2AgPT0+IOWIh+aNouWIsCBg5pqX6buR5qC35byPYFxyXG4gICAgICAgIGlmIChpc1RoZW1lTGlnaHQpIHtcclxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWRhcmsnKTtcclxuICAgICAgICAgIHJlbW92ZUNsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWxpZ2h0Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWxpZ2h0Jyk7XHJcbiAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgJ2VkaXRvci10aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuJHN0YXR1c1snaXNUaGVtZUxpZ2h0J10gPSAhc2VsZi4kc3RhdHVzWydpc1RoZW1lTGlnaHQnXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0RXZlbnRUb2dnbGVGdWxsc2NyZWVuKG9wdGlvbnMpIHtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOe8lui+keWZqOaJqeWxleWKn+iDvSA9PT09PT09PT09PT09PT09PT09PVxyXG4gIC8vIOeymOi0tOWbvueJh++8jOW5tuS4iuS8oOiHs+S4g+eJm+S6kVxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICBpbml0UWluaXUob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBxaW5pdVVwbG9hZCA9IG5ldyBRaW5pdVVwbGFvZChvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLyoqIOe8lui+keWZqOWGheWuue+8jOeymOi0tOWbvueJh+WkhOeQhuWKn+iDvSAqL1xyXG4gIGFkZEVkaXRDb250YWluZXJQYXNlSW1nKCkge1xyXG4gICAgY29uc3Qgb0VsID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcblxyXG4gICAgb0VsLmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgaWYgKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgZXZlbnQub3JpZ2luYWxFdmVudCkge1xyXG4gICAgICAgIHZhciBjbGlwYm9hcmREYXRhID0gKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgZXZlbnQub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICBpZihjbGlwYm9hcmREYXRhLml0ZW1zKXtcclxuICAgICAgICAgICAgdmFyICBibG9iO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zW2ldLnR5cGUuaW5kZXhPZihcImltYWdlXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJsb2IgPSBjbGlwYm9hcmREYXRhLml0ZW1zW2ldLmdldEFzRmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOWPquWkhOeQhueymOi0tOeahOexu+Wei+S4uuWbvueJhy5cclxuICAgICAgICAgICAgaWYgKCFibG9iKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVuZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldnQpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZUltYWdlVXBsb2FkKGV2dC50YXJnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbmRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKiDlm77niYfkuIrkvKDlpITnkIYgKi9cclxuICAgIGNvbnN0IGhhbmRsZUltYWdlVXBsb2FkID0gKHRhcmdldCkgPT4ge1xyXG4gICAgICAvLyDnvJbovpHlmajkuK3mj5LlhaXlhoXlrrlcclxuICAgICAgY29uc3QgaW5zZXJ0VGV4dHMgPSBbXCIhW10oXCIsIFwiI3VybCMpXCJdO1xyXG4gICAgICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gICAgICAvLyBiYXNlNjTnvJbnoIFcclxuICAgICAgY29uc3QgaW1nVXJsID0gdGFyZ2V0LnJlc3VsdDtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ+eymOi0tOWbvueJh+WkhOeQhicsIHRhcmdldCk7XHJcbiAgICAgIHFpbml1VXBsb2FkLnB1dGI2NChpbWdVcmwpXHJcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcy5kb21haW4gKyAnLycgKyByZXMuaGFzaDtcclxuICAgICAgICAgIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmltYWdlLCBpbnNlcnRUZXh0cywgdXJsKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBfcmVwbGFjZVNlbGVjdGlvbiA9IChjbSwgYWN0aXZlLCBzdGFydEVuZCwgdXJsKSA9PiB7XHJcbiAgICAgIHZhciB0ZXh0O1xyXG4gICAgICB2YXIgc3RhcnQgPSBzdGFydEVuZFswXTtcclxuICAgICAgdmFyIGVuZCA9IHN0YXJ0RW5kWzFdO1xyXG4gICAgICB2YXIgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcihcInN0YXJ0XCIpO1xyXG4gICAgICB2YXIgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoXCJlbmRcIik7XHJcbiAgICAgIC8vIGlmKHVybCkge1xyXG4gICAgICAvLyAgIGVuZCA9IGVuZC5yZXBsYWNlKFwiI3VybCNcIiwgdXJsKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBlbmQgPSBlbmQucmVwbGFjZShcIiN1cmwjXCIsIHVybCk7XHJcbiAgICAgIGlmKGFjdGl2ZSkge1xyXG4gICAgICAgIHRleHQgPSBjbS5nZXRMaW5lKHN0YXJ0UG9pbnQubGluZSk7XHJcbiAgICAgICAgc3RhcnQgPSB0ZXh0LnNsaWNlKDAsIHN0YXJ0UG9pbnQuY2gpO1xyXG4gICAgICAgIGVuZCA9IHRleHQuc2xpY2Uoc3RhcnRQb2ludC5jaCk7XHJcbiAgICAgICAgY20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XHJcbiAgICAgICAgICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXHJcbiAgICAgICAgICBjaDogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0ICsgdGV4dCArIGVuZCk7XHJcbiAgICBcclxuICAgICAgICBzdGFydFBvaW50LmNoICs9IHN0YXJ0Lmxlbmd0aDtcclxuICAgICAgICBpZihzdGFydFBvaW50ICE9PSBlbmRQb2ludCkge1xyXG4gICAgICAgICAgZW5kUG9pbnQuY2ggKz0gc3RhcnQubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xyXG4gICAgICBjbS5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZW5kZXIgZWRpdG9yIHRvIHRoZSBnaXZlbiBlbGVtZW50LlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgXHJcbiAgICovXHJcbiAgcmVuZGVyKGVsKSB7XHJcbiAgICBpZiAoIWVsKSB7XHJcbiAgICAgIGVsID0gdGhpcy50ZXh0QXJlYUVsZW1lbnQgfHwgdGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzO1xyXG4gICAgY29uc3Qga2V5TWFwcyA9IHt9O1xyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBvcHRpb25zLnNob3J0Y3V0cykge1xyXG4gICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNba2V5XSAhPT0gbnVsbCAmJiBiaW5kaW5nc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAga2V5TWFwc1tmaXhTaG9ydGN1dChvcHRpb25zLnNob3J0Y3V0c1trZXldKV0gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGJpbmRpbmdzW2tleV0oZWRpdG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KShrZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aKe5Yqg5pON5L2c5b+r5o236ZSuXHJcbiAgICBrZXlNYXBzWydFbnRlciddID0gJ25ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCc7XHJcbiAgICBrZXlNYXBzWydUYWInXSA9ICd0YWJBbmRJbmRlbnRNYXJrZG93bkxpc3QnO1xyXG4gICAga2V5TWFwc1snRXNjJ10gPSAoY20pID0+IHtcclxuICAgICAgaWYgKGNtLmdldE9wdGlvbnMoJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xyXG4gICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICAgICAgaWYgKGVkaXRvci5jb2RlbWlycm9yLmdldE9wdGlvbnMoJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSk7XHJcblxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09IHVtZCDmqKHlnZflr7zlh7ogPT09PT09PT09PT09PT09PT09PT1cclxuaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcclxuICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXHJcbiAgZGVmaW5lKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIENNZEVkaXRvcjtcclxuICB9KTtcclxufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gIG1vZHVsZS5leHBvcnRzID0gQ01kRWRpdG9yO1xyXG59IGVsc2Uge1xyXG4gIHdpbmRvdy5DTWRFZGl0b3IgPSBDTWRFZGl0b3I7XHJcbn1cclxuXHJcblxyXG4iLCJpbXBvcnQgVE9PTFMgZnJvbSAnLi90b29sYmFySGFuZGxlJztcclxuY29uc3QgeyBzaG9ydGN1dHMsIGZpeFNob3J0Y3V0IH0gPSBUT09MUztcclxuXHJcbmNvbnN0IGRvbVJlbmRlciA9IHtcclxuICBpbml0KG9wdGlvbnMpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdkb21SZW5kZXIgb3B0aW9uczogJW8nLCBvcHRpb25zKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdkb21SZW5kZXIgdGhpczogJW8nLCB0aGlzKTtcclxuICAgIHRoaXMuaW5pdERhdGEob3B0aW9ucyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlclRvb2xzKG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckNvZGUob3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlclByaXZpZXcob3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlclN0YXR1cyhvcHRpb25zKTtcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVycm9yID0+IGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGJldHRlciB3YXkgYnV0IG11c3QgdGhpbmsgYnJvd3NlciBzdXBwb3J0XHJcbiAgICAvLyBhd2FpdCB0aGlzLnJlbmRlclRvb2xzKHBhcmVudCk7XHJcbiAgICAvLyBhd2FpdCB0aGlzLnJlbmRlckNvZGUocGFyZW50KTtcclxuICAgIC8vIGF3YWl0IHRoaXMucmVuZGVyUHJpdmlldyhwYXJlbnQpO1xyXG4gICAgLy8gYXdhaXQgdGhpcy5yZW5kZXJTdGF0dXMocGFyZW50KTtcclxuICB9LFxyXG5cclxuICBpbml0RGF0YShvcHRpb25zKSB7XHJcbiAgICB0aGlzLiRlZGl0b3IgPSB7fTtcclxuICAgIHRoaXMuJGVkaXRvci5vcHRpb25zID0gb3B0aW9ucztcclxuICB9LFxyXG5cclxuICAvLyDliJvlu7ogRWRpdCBUb29scyBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyVG9vbHMob3B0aW9ucykge1xyXG4gICAgY29uc3QgZWwgPSBvcHRpb25zLmVsO1xyXG4gICAgY29uc3QgeyB0b29sYmFyQnVpbHRJbkJ1dHRvbnMgfSA9IG9wdGlvbnMuJHRvb2xzO1xyXG4gICAgY29uc3QgdG9vbHNNYWluSHRtbFN0ciA9IHRoaXMuY3JlYXRlVG9vbHNNYWluKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcbiAgICBjb25zdCB0b29sc0hhbmRsZUh0bWxTdHIgPSB0aGlzLmNyZWF0ZVRvb2xzSGFuZGxlKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBlbC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItdG9vbHNcIj4ke3Rvb2xzTWFpbkh0bWxTdHJ9JHt0b29sc0hhbmRsZUh0bWxTdHJ9PC9kaXY+XHJcbiAgICAgIGA7XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcbiAgXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65bel5YW35p2hIGDnvJbovpHlt6Xlhbflm77moIdgLiBcclxuICAgKi9cclxuICBjcmVhdGVUb29sc01haW4oaWNvbnMpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgdG9vbHNFZGl0ID0gdGhpcy5nZXRUb29sc0VkaXQoaWNvbnMpO1xyXG4gICAgbGV0IGh0bWxTdHIgPSAnPGRpdiBjbGFzcz1cImVkaXRvci10b29scy1tYWluXCI+JztcclxuXHJcbiAgICAvLyDlvqrnjq/liJvlu7rlm77moIdcclxuICAgIGlmICh0b29sc0VkaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKiDmmK/lkKbmmK8z55qE5YCN5pWwICovXHJcbiAgICAgIGxldCBpc1RocmVlO1xyXG5cclxuICAgICAgY29uc3QgdG9vbHNFZGl0TGVuID0gdG9vbHNFZGl0Lmxlbmd0aDtcclxuICAgICAgdG9vbHNFZGl0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaXNUaHJlZSA9IGluZGV4ID4gMCAmJiAoKGluZGV4ICsgMSkgJSAzID09PSAwKTtcclxuICAgICAgICBpZiAoaXNUaHJlZSkge1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAodG9vbHNFZGl0TGVuIC0gMSkpIHtcclxuICAgICAgICAgICAgaHRtbFN0ciA9IGh0bWxTdHIgKyBzZWxmLmNyZWF0ZVRvb2xzSXRlbShpdGVtKSArICc8c3BhbiBjbGFzcz1cImVkaXRvci10b29scy1kaXZpc2lvblwiPnw8L3NwYW4+JztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGh0bWxTdHIgKz0gc2VsZi5jcmVhdGVUb29sc0l0ZW0oaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGh0bWxTdHIgKz0gc2VsZi5jcmVhdGVUb29sc0l0ZW0oaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIGh0bWxTdHIgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgcmV0dXJuIGh0bWxTdHI7XHJcbiAgfSxcclxuICAvKipcclxuICAgKiDojrflj5YgYOW3peWFt+adoe+8mue8lui+keWbvuagh2AuIFxyXG4gICAqIFxyXG4gICAqIEBkZXNjIOW3peWFt+adoeWbvuagh+aMieeFp+e8lui+keWKn+iDveWIhuS4uu+8mmDnvJbovpHlm77moIdg44CBYOinhuWbvuWbvuagh2Ag6YCa6L+HIGBpc0VkaXRUb29sc2DmmK/lkKbkuLogYHRydWVgIOagh+iusFxyXG4gICAqL1xyXG4gIGdldFRvb2xzRWRpdChpY29uc09wdGlvbikge1xyXG4gICAgaWYgKHR5cGVvZiBpY29uc09wdGlvbiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZXN1bHRPYmogPSB7fTtcclxuICAgIGxldCBfb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWNvbnNPcHRpb24pKTtcclxuICAgIGZvciAobGV0IGtleSBpbiBfb3B0aW9ucykge1xyXG4gICAgICBpZiAoX29wdGlvbnNba2V5XVsnaXNFZGl0VG9vbHMnXSkge1xyXG4gICAgICAgIHJlc3VsdE9ialtrZXldID0gX29wdGlvbnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydEVkaXRUb29sc0FyciA9IHRoaXMuc29ydFRvb2xzSWNvbihyZXN1bHRPYmosICdpbmRleCcpO1xyXG5cclxuICAgIHJldHVybiBzb3J0RWRpdFRvb2xzQXJyO1xyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65bel5YW35p2hIGDop4blm77mk43kvZzlm77moIdgLiBcclxuICAgKi9cclxuICBjcmVhdGVUb29sc0hhbmRsZShpY29ucykge1xyXG4gICAgY29uc3QgX2ljb25zID0gdGhpcy5nZXRUb29sc0hhbmRsZShpY29ucyk7XHJcbiAgICBsZXQgaHRtbFN0ciA9ICc8ZGl2IGNsYXNzPVwiZWRpdG9yLXRvb2xzLWhhbmRsZVwiPic7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyDlvqrnjq/nlJ/miJAgaWNvbnNcclxuICAgIF9pY29ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBodG1sU3RyICs9IHNlbGYuY3JlYXRlVG9vbHNJdGVtKGl0ZW0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaHRtbFN0ciArPSAnPC9kaXY+JztcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOiOt+WPliBg5bel5YW35p2h77ya6KeG5Zu+5Zu+5qCHYC4gXHJcbiAgICogXHJcbiAgICogQGRlc2Mg5bel5YW35p2h5Zu+5qCH5oyJ54Wn57yW6L6R5Yqf6IO95YiG5Li677yaYOe8lui+keWbvuagh2DjgIFg6KeG5Zu+5Zu+5qCHYCDpgJrov4cgYGlzRWRpdFRvb2xzYOaYr+WQpuS4uiBgdHJ1ZWAg5qCH6K6wXHJcbiAgICovXHJcbiAgZ2V0VG9vbHNIYW5kbGUoaWNvbnNPcHRpb24pIHtcclxuICAgIGlmICh0eXBlb2YgaWNvbnNPcHRpb24gIT09ICdvYmplY3QnKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVzdWx0T2JqID0ge307XHJcbiAgICBsZXQgX29wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGljb25zT3B0aW9uKSk7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gX29wdGlvbnMpIHtcclxuICAgICAgaWYgKCEoX29wdGlvbnNba2V5XVsnaXNFZGl0VG9vbHMnXSkpIHtcclxuICAgICAgICByZXN1bHRPYmpba2V5XSA9IF9vcHRpb25zW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRFZGl0VG9vbHNBcnIgPSB0aGlzLnNvcnRUb29sc0ljb24ocmVzdWx0T2JqLCAnaW5kZXgnKTtcclxuXHJcbiAgICByZXR1cm4gc29ydEVkaXRUb29sc0FycjtcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOWbvuagh+aOkuW6jy4gXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiDpnIDopoHmjpLluo/nmoTlr7nosaEuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHIg5o6S5bqP5Y+C54Wn5bGe5oCnLlxyXG4gICAqL1xyXG4gIHNvcnRUb29sc0ljb24ob2JqLCBhdHRyKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcbiAgICBsZXQgYXJyID0gW107XHJcbiAgICBsZXQgc29ydEFyciA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICBhcnIucHVzaChvYmpba2V5XSlcclxuICAgIH1cclxuXHJcbiAgICBzb3J0QXJyID0gYXJyLnNvcnQoKG9iajEsIG9iajIpID0+IHtcclxuICAgICAgcmV0dXJuIG9iajFbJ2luZGV4J10gLSBvYmoyWydpbmRleCddO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNvcnRBcnI7XHJcbiAgfSxcclxuICBjcmVhdGVUb29sc0l0ZW0oY29uZmlnKSB7XHJcbiAgICBjb25zdCBjdXJyU2hvcnRjdXRzSXRlbSA9IHNob3J0Y3V0c1tjb25maWcubmFtZV07XHJcbiAgICBsZXQgY3VyclBsYXRTaG9ydGN1dHNJdGVtO1xyXG4gICAgXHJcbiAgICBpZihjdXJyU2hvcnRjdXRzSXRlbSkge1xyXG4gICAgICBjdXJyUGxhdFNob3J0Y3V0c0l0ZW0gPSBmaXhTaG9ydGN1dChjdXJyU2hvcnRjdXRzSXRlbSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN1cnJQbGF0U2hvcnRjdXRzSXRlbSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1UaXRsZSA9IHRoaXMuZ2V0VG9vbEl0ZW1UaXRsZVRleHQoY29uZmlnLm5hbWUpO1xyXG5cclxuICAgIC8vIOW8gOWQr+S6huW/q+aNt+mUruaPkOekui5cclxuICAgIGlmICh0aGlzLiRlZGl0b3Iub3B0aW9ucy5maXhTaG9ydGN1dCAmJiB0aGlzLiRlZGl0b3Iub3B0aW9ucy5maXhTaG9ydGN1dC5pc09wZW4pIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7Y29uZmlnLmNsYXNzTmFtZX1cIiB0aXRsZT1cIiR7aXRlbVRpdGxlfSAoJHtjdXJyUGxhdFNob3J0Y3V0c0l0ZW19KVwiIGRhdGEtbmFtZT1cIiR7Y29uZmlnLm5hbWV9XCI+PC9zcGFuPmA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtjb25maWcuY2xhc3NOYW1lfVwiIHRpdGxlPVwiJHtpdGVtVGl0bGV9XCIgZGF0YS1uYW1lPVwiJHtjb25maWcubmFtZX1cIj48L3NwYW4+YDtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvKiogXHJcbiAgICog6I635Y+W6I+c5Y2V5oyJ6ZKu55qEIHRpdGxlIOaWh+Wtly4gXHJcbiAgICog5qC55o2u57yW6L6R5Zmo55qE6K+t6KiA6L+U5Zue5a+55bqU55qE5YaF5a65LlxyXG4gICAqL1xyXG4gIGdldFRvb2xJdGVtVGl0bGVUZXh0KGl0ZW1OYW1lKSB7XHJcbiAgICBjb25zdCB1c2VMYW5nSXRlbSA9IHRoaXMuJGVkaXRvci5vcHRpb25zLmxhbmcudG9vbGJhckl0ZW07XHJcbiAgICBjb25zdCBrZXkgPSBpdGVtTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHVzZUxhbmdJdGVtW2tleV07XHJcbiAgfSxcclxuXHJcbiAgLy8g5Yib5bu6IEVkaXQgVG9vbHMgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g5Yib5bu6IEVkaXQg57yW6L6R5a655ZmoIHN0YXJ0ID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICByZW5kZXJDb2RlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGVsID0gb3B0aW9ucy5lbDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGVsLmlubmVySFRNTCArPSBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1tZFwiPlxyXG4gICAgICAgIDxmb3JtPlxyXG4gICAgICAgICAgPHRleHRBcmVhIGlkPVwiYXJlYVwiPjwvdGV4dEFyZWE+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgYDtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSlcclxuICAgIFxyXG4gIH0sXHJcbiAgLy8g5Yib5bu6IEVkaXQg57yW6L6R5a655ZmoIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOWIm+W7uiBFZGl0IOmihOiniChodG1sKeWuueWZqCBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyUHJpdmlldyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBlbCA9IG9wdGlvbnMuZWw7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBlbC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXByZXZpZXdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iZCBtYXJrZG93bi1ib2R5XCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBgO1xyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9LFxyXG4gIC8vIOWIm+W7uiBFZGl0IOmihOiniChodG1sKeWuueWZqCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDliJvlu7ogRWRpdCBTdGF0dXMgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIHJlbmRlclN0YXR1cyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBlbCA9IG9wdGlvbnMuZWw7XHJcblxyXG4gICAgY29uc3QgcG9zaXRvbkh0bWxTdHIgPSB0aGlzLmNyZWF0ZVN0YXR1c1Bvc2l0aW9uKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgbGVuZ3RoSHRtbFN0ciA9IHRoaXMuY3JlYXRlU3RhdHVzTGVucygpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZWwuaW5uZXJIVE1MICs9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXNcIj4ke3Bvc2l0b25IdG1sU3RyfSR7bGVuZ3RoSHRtbFN0cn08L2Rpdj5gO1xyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgY3JlYXRlU3RhdHVzUG9zaXRpb24ob3B0aW9ucykge1xyXG4gICAgY29uc3QgdG9nZ2xlVGhlbWVIdG1sU3RyID0gdGhpcy5jcmVhdGVTdGF0dXNUb2dnbGVUaGVtZSgpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLiRlZGl0b3Iub3B0aW9ucy5sYW5nO1xyXG4gICAgY29uc3QgeyBsaW5lLCAgY29sdW1ucyB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG4gICAgbGV0IGh0bWxTdHIgPSBgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXMtcG9zaXRvblwiPjxzcGFuPiR7bGluZX0gLCR7Y29sdW1uc30gIOS4gCAgJHtsaW5lfTwvc3Bhbj4ke3RvZ2dsZVRoZW1lSHRtbFN0cn08L2Rpdj5gO1xyXG5cclxuICAgIHJldHVybiBodG1sU3RyO1xyXG4gIH0sXHJcbiAgY3JlYXRlU3RhdHVzVG9nZ2xlVGhlbWUoKSB7XHJcbiAgICBsZXQgaHRtbFN0ciA9ICc8c3BhbiBjbGFzcz1cImljb24tdGhlbWVcIj48L3NwYW4+JztcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9LFxyXG4gIGNyZWF0ZVN0YXR1c0xlbnMoKSB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuJGVkaXRvci5vcHRpb25zLmxhbmc7XHJcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG4gICAgbGV0IGh0bWxTdHIgPSBgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXMtbGVuZ3RoXCI+JHtsZW5ndGh9PC9kaXY+YDtcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9XHJcbiAgLy8g5Yib5bu6IEVkaXQgU3RhdHVzIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRvbVJlbmRlcjsiLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyDkuK3mlofnlYzpnaLmloflrZfmmL7npLouXHJcbi8vXHJcbi8vIEB1cGRhdGUgMjAxOS8wMS8yMlxyXG4vLyBAYXV0aG9yIEplc29uaHUoZ2l0aHViKVxyXG4vLyBAZW1pYWwgamVzb25odV93ZWJAMTYzLmNvbVxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHRvb2xiYXJJdGVtOiB7XHJcbiAgICAnYm9sZCc6ICfliqDnspcnLFxyXG4gICAgJ2l0YWxpYyc6ICfmlpzkvZMnLFxyXG4gICAgJ2hlYWRpbmcnOiAn5qCH6aKYJyxcclxuICAgICdxdW90ZSc6ICflvJXnlKgnLFxyXG4gICAgJ2NvZGUnOiAn5Luj56CB5Z2XJyxcclxuICAgICd1bm9yZGVyZWQtbGlzdCc6ICfml6Dluo/liJfooagnLFxyXG4gICAgJ29yZGVyZWQtbGlzdCc6ICfmnInluo/liJfooagnLFxyXG4gICAgJ2xpbmsnOiAn5o+S5YWl6ZO+5o6lJyxcclxuICAgICdpbWFnZSc6ICfmj5LlhaXlm77niYcnLFxyXG4gICAgJ3VuZG8nOiAn5pKk5raIJyxcclxuICAgICdyZWRvJzogJ+mHjeWBmicsXHJcbiAgICAnYWJvdXQnOiAn5YWz5LqO57yW6L6R5ZmoJyxcclxuICAgICdlZGl0JzogJ+e8lui+keaooeW8jycsXHJcbiAgICAnY29tcGFyZSc6ICfluLjop4TmqKHlvI8nLFxyXG4gICAgJ3ByZXZpZXcnOiAn6aKE6KeI5qih5byPJyxcclxuICAgICdmdWxsc2NyZWVuJzogJ+WIh+aNouWFqOWxjydcclxuICB9LFxyXG4gIHN0YXR1c0Jhcjoge1xyXG4gICAgbGluZTogJ+ihjCcsXHJcbiAgICBjb2x1bW5zOiAn5YiXJyxcclxuICAgIGxlbmd0aDogJ+aAu+mVv+W6pidcclxuICB9XHJcbn1cclxuXHJcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGh0bWxDb25maWcgPSB7XG4gIGF1dG9TZWxmQ2xvc2VyczogeydhcmVhJzogdHJ1ZSwgJ2Jhc2UnOiB0cnVlLCAnYnInOiB0cnVlLCAnY29sJzogdHJ1ZSwgJ2NvbW1hbmQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnZW1iZWQnOiB0cnVlLCAnZnJhbWUnOiB0cnVlLCAnaHInOiB0cnVlLCAnaW1nJzogdHJ1ZSwgJ2lucHV0JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVlLCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYWNrJzogdHJ1ZSwgJ3dicic6IHRydWUsICdtZW51aXRlbSc6IHRydWV9LFxuICBpbXBsaWNpdGx5Q2xvc2VkOiB7J2RkJzogdHJ1ZSwgJ2xpJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZSwgJ29wdGlvbic6IHRydWUsICdwJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICdycCc6IHRydWUsICdydCc6IHRydWUsICd0Ym9keSc6IHRydWUsICd0ZCc6IHRydWUsICd0Zm9vdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAndGgnOiB0cnVlLCAndHInOiB0cnVlfSxcbiAgY29udGV4dEdyYWJiZXJzOiB7XG4gICAgJ2RkJzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LFxuICAgICdkdCc6IHsnZGQnOiB0cnVlLCAnZHQnOiB0cnVlfSxcbiAgICAnbGknOiB7J2xpJzogdHJ1ZX0sXG4gICAgJ29wdGlvbic6IHsnb3B0aW9uJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZX0sXG4gICAgJ29wdGdyb3VwJzogeydvcHRncm91cCc6IHRydWV9LFxuICAgICdwJzogeydhZGRyZXNzJzogdHJ1ZSwgJ2FydGljbGUnOiB0cnVlLCAnYXNpZGUnOiB0cnVlLCAnYmxvY2txdW90ZSc6IHRydWUsICdkaXInOiB0cnVlLFxuICAgICAgICAgICdkaXYnOiB0cnVlLCAnZGwnOiB0cnVlLCAnZmllbGRzZXQnOiB0cnVlLCAnZm9vdGVyJzogdHJ1ZSwgJ2Zvcm0nOiB0cnVlLFxuICAgICAgICAgICdoMSc6IHRydWUsICdoMic6IHRydWUsICdoMyc6IHRydWUsICdoNCc6IHRydWUsICdoNSc6IHRydWUsICdoNic6IHRydWUsXG4gICAgICAgICAgJ2hlYWRlcic6IHRydWUsICdoZ3JvdXAnOiB0cnVlLCAnaHInOiB0cnVlLCAnbWVudSc6IHRydWUsICduYXYnOiB0cnVlLCAnb2wnOiB0cnVlLFxuICAgICAgICAgICdwJzogdHJ1ZSwgJ3ByZSc6IHRydWUsICdzZWN0aW9uJzogdHJ1ZSwgJ3RhYmxlJzogdHJ1ZSwgJ3VsJzogdHJ1ZX0sXG4gICAgJ3JwJzogeydycCc6IHRydWUsICdydCc6IHRydWV9LFxuICAgICdydCc6IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSxcbiAgICAndGJvZHknOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sXG4gICAgJ3RkJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LFxuICAgICd0Zm9vdCc6IHsndGJvZHknOiB0cnVlfSxcbiAgICAndGgnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sXG4gICAgJ3RoZWFkJzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6IHRydWV9LFxuICAgICd0cic6IHsndHInOiB0cnVlfVxuICB9LFxuICBkb05vdEluZGVudDoge1wicHJlXCI6IHRydWV9LFxuICBhbGxvd1VucXVvdGVkOiB0cnVlLFxuICBhbGxvd01pc3Npbmc6IHRydWUsXG4gIGNhc2VGb2xkOiB0cnVlXG59XG5cbnZhciB4bWxDb25maWcgPSB7XG4gIGF1dG9TZWxmQ2xvc2Vyczoge30sXG4gIGltcGxpY2l0bHlDbG9zZWQ6IHt9LFxuICBjb250ZXh0R3JhYmJlcnM6IHt9LFxuICBkb05vdEluZGVudDoge30sXG4gIGFsbG93VW5xdW90ZWQ6IGZhbHNlLFxuICBhbGxvd01pc3Npbmc6IGZhbHNlLFxuICBhbGxvd01pc3NpbmdUYWdOYW1lOiBmYWxzZSxcbiAgY2FzZUZvbGQ6IGZhbHNlXG59XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInhtbFwiLCBmdW5jdGlvbihlZGl0b3JDb25mLCBjb25maWdfKSB7XG4gIHZhciBpbmRlbnRVbml0ID0gZWRpdG9yQ29uZi5pbmRlbnRVbml0XG4gIHZhciBjb25maWcgPSB7fVxuICB2YXIgZGVmYXVsdHMgPSBjb25maWdfLmh0bWxNb2RlID8gaHRtbENvbmZpZyA6IHhtbENvbmZpZ1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSBjb25maWdbcHJvcF0gPSBkZWZhdWx0c1twcm9wXVxuICBmb3IgKHZhciBwcm9wIGluIGNvbmZpZ18pIGNvbmZpZ1twcm9wXSA9IGNvbmZpZ19bcHJvcF1cblxuICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzXG4gIHZhciB0eXBlLCBzZXRTdHlsZTtcblxuICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGZ1bmN0aW9uIGNoYWluKHBhcnNlcikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7XG4gICAgICByZXR1cm4gcGFyc2VyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIiFcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCJbXCIpKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcIkNEQVRBW1wiKSkgcmV0dXJuIGNoYWluKGluQmxvY2soXCJhdG9tXCIsIFwiXV0+XCIpKTtcbiAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIi0tXCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYWluKGluQmxvY2soXCJjb21tZW50XCIsIFwiLS0+XCIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goXCJET0NUWVBFXCIsIHRydWUsIHRydWUpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuX1xcLV0vKTtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oZG9jdHlwZSgxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIj9cIikpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuX1xcLV0vKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkJsb2NrKFwibWV0YVwiLCBcIj8+XCIpO1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gc3RyZWFtLmVhdChcIi9cIikgPyBcImNsb3NlVGFnXCIgOiBcIm9wZW5UYWdcIjtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZztcbiAgICAgICAgcmV0dXJuIFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09IFwiJlwiKSB7XG4gICAgICB2YXIgb2s7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIiNcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCJ4XCIpKSB7XG4gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1thLWZBLUZcXGRdLykgJiYgc3RyZWFtLmVhdChcIjtcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcXGRdLykgJiYgc3RyZWFtLmVhdChcIjtcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9rID0gc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuXFwtOl0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvayA/IFwiYXRvbVwiIDogXCJlcnJvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgaW5UZXh0LmlzSW5UZXh0ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBpblRhZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCI+XCIgfHwgKGNoID09IFwiL1wiICYmIHN0cmVhbS5lYXQoXCI+XCIpKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7XG4gICAgICB0eXBlID0gY2ggPT0gXCI+XCIgPyBcImVuZFRhZ1wiIDogXCJzZWxmY2xvc2VUYWdcIjtcbiAgICAgIHJldHVybiBcInRhZyBicmFja2V0XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIj1cIikge1xuICAgICAgdHlwZSA9IFwiZXF1YWxzXCI7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgIHN0YXRlLnN0YXRlID0gYmFzZVN0YXRlO1xuICAgICAgc3RhdGUudGFnTmFtZSA9IHN0YXRlLnRhZ1N0YXJ0ID0gbnVsbDtcbiAgICAgIHZhciBuZXh0ID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICByZXR1cm4gbmV4dCA/IG5leHQgKyBcIiB0YWcgZXJyb3JcIiA6IFwidGFnIGVycm9yXCI7XG4gICAgfSBlbHNlIGlmICgvW1xcJ1xcXCJdLy50ZXN0KGNoKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7XG4gICAgICBzdGF0ZS5zdHJpbmdTdGFydENvbCA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eW15cXHNcXHUwMGEwPTw+XFxcIlxcJ10qW15cXHNcXHUwMGEwPTw+XFxcIlxcJ1xcL10vKTtcbiAgICAgIHJldHVybiBcIndvcmRcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkge1xuICAgIHZhciBjbG9zdXJlID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICAgIGNsb3N1cmUuaXNJbkF0dHJpYnV0ZSA9IHRydWU7XG4gICAgcmV0dXJuIGNsb3N1cmU7XG4gIH1cblxuICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoICsgMSk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiPlwiKSB7XG4gICAgICAgICAgaWYgKGRlcHRoID09IDEpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gZG9jdHlwZShkZXB0aCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHN0YXRlLCB0YWdOYW1lLCBzdGFydE9mTGluZSkge1xuICAgIHRoaXMucHJldiA9IHN0YXRlLmNvbnRleHQ7XG4gICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTtcbiAgICB0aGlzLmluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgIHRoaXMuc3RhcnRPZkxpbmUgPSBzdGFydE9mTGluZTtcbiAgICBpZiAoY29uZmlnLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQubm9JbmRlbnQpKVxuICAgICAgdGhpcy5ub0luZGVudCA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlUG9wQ29udGV4dChzdGF0ZSwgbmV4dFRhZ05hbWUpIHtcbiAgICB2YXIgcGFyZW50VGFnTmFtZTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCFzdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBhcmVudFRhZ05hbWUgPSBzdGF0ZS5jb250ZXh0LnRhZ05hbWU7XG4gICAgICBpZiAoIWNvbmZpZy5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJvcGVydHkocGFyZW50VGFnTmFtZSkgfHxcbiAgICAgICAgICAhY29uZmlnLmNvbnRleHRHcmFiYmVyc1twYXJlbnRUYWdOYW1lXS5oYXNPd25Qcm9wZXJ0eShuZXh0VGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmFzZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIm9wZW5UYWdcIikge1xuICAgICAgc3RhdGUudGFnU3RhcnQgPSBzdHJlYW0uY29sdW1uKCk7XG4gICAgICByZXR1cm4gdGFnTmFtZVN0YXRlO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImNsb3NlVGFnXCIpIHtcbiAgICAgIHJldHVybiBjbG9zZVRhZ05hbWVTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdGFnTmFtZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgc3RhdGUudGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnXCI7XG4gICAgICByZXR1cm4gYXR0clN0YXRlO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93TWlzc2luZ1RhZ05hbWUgJiYgdHlwZSA9PSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIHJldHVybiBhdHRyU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFN0eWxlID0gXCJlcnJvclwiO1xuICAgICAgcmV0dXJuIHRhZ05hbWVTdGF0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VUYWdOYW1lU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSAmJlxuICAgICAgICAgIGNvbmZpZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KHN0YXRlLmNvbnRleHQudGFnTmFtZSkpXG4gICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgaWYgKChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSA9PSB0YWdOYW1lKSB8fCBjb25maWcubWF0Y2hDbG9zaW5nID09PSBmYWxzZSkge1xuICAgICAgICBzZXRTdHlsZSA9IFwidGFnXCI7XG4gICAgICAgIHJldHVybiBjbG9zZVN0YXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U3R5bGUgPSBcInRhZyBlcnJvclwiO1xuICAgICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5hbGxvd01pc3NpbmdUYWdOYW1lICYmIHR5cGUgPT0gXCJlbmRUYWdcIikge1xuICAgICAgc2V0U3R5bGUgPSBcInRhZyBicmFja2V0XCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0YXRlKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJlbmRUYWdcIikge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZTtcbiAgICB9XG4gICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBjbG9zZVN0YXRlRXJyKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJTdGF0ZSh0eXBlLCBfc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwiYXR0cmlidXRlXCI7XG4gICAgICByZXR1cm4gYXR0ckVxU3RhdGU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZW5kVGFnXCIgfHwgdHlwZSA9PSBcInNlbGZjbG9zZVRhZ1wiKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLnRhZ05hbWUsIHRhZ1N0YXJ0ID0gc3RhdGUudGFnU3RhcnQ7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsO1xuICAgICAgaWYgKHR5cGUgPT0gXCJzZWxmY2xvc2VUYWdcIiB8fFxuICAgICAgICAgIGNvbmZpZy5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkpIHtcbiAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heWJlUG9wQ29udGV4dChzdGF0ZSwgdGFnTmFtZSk7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZSwgdGFnTmFtZSwgdGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgICB9XG4gICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyRXFTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJlcXVhbHNcIikgcmV0dXJuIGF0dHJWYWx1ZVN0YXRlO1xuICAgIGlmICghY29uZmlnLmFsbG93TWlzc2luZykgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyVmFsdWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGF0dHJDb250aW51ZWRTdGF0ZTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIiAmJiBjb25maWcuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gXCJzdHJpbmdcIjsgcmV0dXJuIGF0dHJTdGF0ZTt9XG4gICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyQ29udGludWVkU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIpIHJldHVybiBhdHRyQ29udGludWVkU3RhdGU7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZUluZGVudCkge1xuICAgICAgdmFyIHN0YXRlID0ge3Rva2VuaXplOiBpblRleHQsXG4gICAgICAgICAgICAgICAgICAgc3RhdGU6IGJhc2VTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICBpbmRlbnRlZDogYmFzZUluZGVudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6IG51bGwsIHRhZ1N0YXJ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IG51bGx9XG4gICAgICBpZiAoYmFzZUluZGVudCAhPSBudWxsKSBzdGF0ZS5iYXNlSW5kZW50ID0gYmFzZUluZGVudFxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoIXN0YXRlLnRhZ05hbWUgJiYgc3RyZWFtLnNvbCgpKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuXG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdHlwZSA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgc2V0U3R5bGUgPSBudWxsO1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLnN0YXRlKHR5cGUgfHwgc3R5bGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc2V0U3R5bGUpXG4gICAgICAgICAgc3R5bGUgPSBzZXRTdHlsZSA9PSBcImVycm9yXCIgPyBzdHlsZSArIFwiIGVycm9yXCIgOiBzZXRTdHlsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBmdWxsTGluZSkge1xuICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgLy8gSW5kZW50IG11bHRpLWxpbmUgc3RyaW5ncyAoZS5nLiBjc3MpLlxuICAgICAgaWYgKHN0YXRlLnRva2VuaXplLmlzSW5BdHRyaWJ1dGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRhZ1N0YXJ0ID09IHN0YXRlLmluZGVudGVkKVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHJpbmdTdGFydENvbCArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50ZWQgKyBpbmRlbnRVbml0O1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5ub0luZGVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpXG4gICAgICAgIHJldHVybiBmdWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxccyopLylbMF0ubGVuZ3RoIDogMDtcbiAgICAgIC8vIEluZGVudCB0aGUgc3RhcnRzIG9mIGF0dHJpYnV0ZSBuYW1lcy5cbiAgICAgIGlmIChzdGF0ZS50YWdOYW1lKSB7XG4gICAgICAgIGlmIChjb25maWcubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZyAhPT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsgc3RhdGUudGFnTmFtZS5sZW5ndGggKyAyO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsgaW5kZW50VW5pdCAqIChjb25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yIHx8IDEpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5hbGlnbkNEQVRBICYmIC88IVxcW0NEQVRBXFxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwO1xuICAgICAgdmFyIHRhZ0FmdGVyID0gdGV4dEFmdGVyICYmIC9ePChcXC8pPyhbXFx3XzpcXC4tXSopLy5leGVjKHRleHRBZnRlcik7XG4gICAgICBpZiAodGFnQWZ0ZXIgJiYgdGFnQWZ0ZXJbMV0pIHsgLy8gQ2xvc2luZyB0YWcgc3BvdHRlZFxuICAgICAgICB3aGlsZSAoY29udGV4dCkge1xuICAgICAgICAgIGlmIChjb250ZXh0LnRhZ05hbWUgPT0gdGFnQWZ0ZXJbMl0pIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KGNvbnRleHQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWdBZnRlcikgeyAvLyBPcGVuaW5nIHRhZyBzcG90dGVkXG4gICAgICAgIHdoaWxlIChjb250ZXh0KSB7XG4gICAgICAgICAgdmFyIGdyYWJiZXJzID0gY29uZmlnLmNvbnRleHRHcmFiYmVyc1tjb250ZXh0LnRhZ05hbWVdO1xuICAgICAgICAgIGlmIChncmFiYmVycyAmJiBncmFiYmVycy5oYXNPd25Qcm9wZXJ0eSh0YWdBZnRlclsyXSkpXG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2O1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoY29udGV4dCAmJiBjb250ZXh0LnByZXYgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICBpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLmJhc2VJbmRlbnQgfHwgMDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogLzxcXC9bXFxzXFx3Ol0rPiQvLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIjwhLS1cIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiLS0+XCIsXG5cbiAgICBjb25maWd1cmF0aW9uOiBjb25maWcuaHRtbE1vZGUgPyBcImh0bWxcIiA6IFwieG1sXCIsXG4gICAgaGVscGVyVHlwZTogY29uZmlnLmh0bWxNb2RlID8gXCJodG1sXCIgOiBcInhtbFwiLFxuXG4gICAgc2tpcEF0dHJpYnV0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PSBhdHRyVmFsdWVTdGF0ZSlcbiAgICAgICAgc3RhdGUuc3RhdGUgPSBhdHRyU3RhdGVcbiAgICB9LFxuXG4gICAgeG1sQ3VycmVudFRhZzogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS50YWdOYW1lID8ge25hbWU6IHN0YXRlLnRhZ05hbWUsIGNsb3NlOiBzdGF0ZS50eXBlID09IFwiY2xvc2VUYWdcIn0gOiBudWxsXG4gICAgfSxcblxuICAgIHhtbEN1cnJlbnRDb250ZXh0OiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgdmFyIGNvbnRleHQgPSBbXVxuICAgICAgZm9yICh2YXIgY3ggPSBzdGF0ZS5jb250ZXh0OyBjeDsgY3ggPSBjeC5wcmV2KVxuICAgICAgICBpZiAoY3gudGFnTmFtZSkgY29udGV4dC5wdXNoKGN4LnRhZ05hbWUpXG4gICAgICByZXR1cm4gY29udGV4dC5yZXZlcnNlKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94bWxcIiwgXCJ4bWxcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJ4bWxcIik7XG5pZiAoIUNvZGVNaXJyb3IubWltZU1vZGVzLmhhc093blByb3BlcnR5KFwidGV4dC9odG1sXCIpKVxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2h0bWxcIiwge25hbWU6IFwieG1sXCIsIGh0bWxNb2RlOiB0cnVlfSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5tb2RlSW5mbyA9IFtcbiAgICB7bmFtZTogXCJBUExcIiwgbWltZTogXCJ0ZXh0L2FwbFwiLCBtb2RlOiBcImFwbFwiLCBleHQ6IFtcImR5YWxvZ1wiLCBcImFwbFwiXX0sXG4gICAge25hbWU6IFwiUEdQXCIsIG1pbWVzOiBbXCJhcHBsaWNhdGlvbi9wZ3BcIiwgXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCIsIFwiYXBwbGljYXRpb24vcGdwLWtleXNcIiwgXCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlXCJdLCBtb2RlOiBcImFzY2lpYXJtb3JcIiwgZXh0OiBbXCJhc2NcIiwgXCJwZ3BcIiwgXCJzaWdcIl19LFxuICAgIHtuYW1lOiBcIkFTTi4xXCIsIG1pbWU6IFwidGV4dC94LXR0Y24tYXNuXCIsIG1vZGU6IFwiYXNuLjFcIiwgZXh0OiBbXCJhc25cIiwgXCJhc24xXCJdfSxcbiAgICB7bmFtZTogXCJBc3Rlcmlza1wiLCBtaW1lOiBcInRleHQveC1hc3Rlcmlza1wiLCBtb2RlOiBcImFzdGVyaXNrXCIsIGZpbGU6IC9eZXh0ZW5zaW9uc1xcLmNvbmYkL2l9LFxuICAgIHtuYW1lOiBcIkJyYWluZnVja1wiLCBtaW1lOiBcInRleHQveC1icmFpbmZ1Y2tcIiwgbW9kZTogXCJicmFpbmZ1Y2tcIiwgZXh0OiBbXCJiXCIsIFwiYmZcIl19LFxuICAgIHtuYW1lOiBcIkNcIiwgbWltZTogXCJ0ZXh0L3gtY3NyY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiY1wiLCBcImhcIiwgXCJpbm9cIl19LFxuICAgIHtuYW1lOiBcIkMrK1wiLCBtaW1lOiBcInRleHQveC1jKytzcmNcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImNwcFwiLCBcImMrK1wiLCBcImNjXCIsIFwiY3h4XCIsIFwiaHBwXCIsIFwiaCsrXCIsIFwiaGhcIiwgXCJoeHhcIl0sIGFsaWFzOiBbXCJjcHBcIl19LFxuICAgIHtuYW1lOiBcIkNvYm9sXCIsIG1pbWU6IFwidGV4dC94LWNvYm9sXCIsIG1vZGU6IFwiY29ib2xcIiwgZXh0OiBbXCJjb2JcIiwgXCJjcHlcIl19LFxuICAgIHtuYW1lOiBcIkMjXCIsIG1pbWU6IFwidGV4dC94LWNzaGFycFwiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiY3NcIl0sIGFsaWFzOiBbXCJjc2hhcnBcIiwgXCJjc1wiXX0sXG4gICAge25hbWU6IFwiQ2xvanVyZVwiLCBtaW1lOiBcInRleHQveC1jbG9qdXJlXCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImNsalwiLCBcImNsamNcIiwgXCJjbGp4XCJdfSxcbiAgICB7bmFtZTogXCJDbG9qdXJlU2NyaXB0XCIsIG1pbWU6IFwidGV4dC94LWNsb2p1cmVzY3JpcHRcIiwgbW9kZTogXCJjbG9qdXJlXCIsIGV4dDogW1wiY2xqc1wiXX0sXG4gICAge25hbWU6IFwiQ2xvc3VyZSBTdHlsZXNoZWV0cyAoR1NTKVwiLCBtaW1lOiBcInRleHQveC1nc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJnc3NcIl19LFxuICAgIHtuYW1lOiBcIkNNYWtlXCIsIG1pbWU6IFwidGV4dC94LWNtYWtlXCIsIG1vZGU6IFwiY21ha2VcIiwgZXh0OiBbXCJjbWFrZVwiLCBcImNtYWtlLmluXCJdLCBmaWxlOiAvXkNNYWtlTGlzdHMudHh0JC99LFxuICAgIHtuYW1lOiBcIkNvZmZlZVNjcmlwdFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vdm5kLmNvZmZlZXNjcmlwdFwiLCBcInRleHQvY29mZmVlc2NyaXB0XCIsIFwidGV4dC94LWNvZmZlZXNjcmlwdFwiXSwgbW9kZTogXCJjb2ZmZWVzY3JpcHRcIiwgZXh0OiBbXCJjb2ZmZWVcIl0sIGFsaWFzOiBbXCJjb2ZmZWVcIiwgXCJjb2ZmZWUtc2NyaXB0XCJdfSxcbiAgICB7bmFtZTogXCJDb21tb24gTGlzcFwiLCBtaW1lOiBcInRleHQveC1jb21tb24tbGlzcFwiLCBtb2RlOiBcImNvbW1vbmxpc3BcIiwgZXh0OiBbXCJjbFwiLCBcImxpc3BcIiwgXCJlbFwiXSwgYWxpYXM6IFtcImxpc3BcIl19LFxuICAgIHtuYW1lOiBcIkN5cGhlclwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtY3lwaGVyLXF1ZXJ5XCIsIG1vZGU6IFwiY3lwaGVyXCIsIGV4dDogW1wiY3lwXCIsIFwiY3lwaGVyXCJdfSxcbiAgICB7bmFtZTogXCJDeXRob25cIiwgbWltZTogXCJ0ZXh0L3gtY3l0aG9uXCIsIG1vZGU6IFwicHl0aG9uXCIsIGV4dDogW1wicHl4XCIsIFwicHhkXCIsIFwicHhpXCJdfSxcbiAgICB7bmFtZTogXCJDcnlzdGFsXCIsIG1pbWU6IFwidGV4dC94LWNyeXN0YWxcIiwgbW9kZTogXCJjcnlzdGFsXCIsIGV4dDogW1wiY3JcIl19LFxuICAgIHtuYW1lOiBcIkNTU1wiLCBtaW1lOiBcInRleHQvY3NzXCIsIG1vZGU6IFwiY3NzXCIsIGV4dDogW1wiY3NzXCJdfSxcbiAgICB7bmFtZTogXCJDUUxcIiwgbWltZTogXCJ0ZXh0L3gtY2Fzc2FuZHJhXCIsIG1vZGU6IFwic3FsXCIsIGV4dDogW1wiY3FsXCJdfSxcbiAgICB7bmFtZTogXCJEXCIsIG1pbWU6IFwidGV4dC94LWRcIiwgbW9kZTogXCJkXCIsIGV4dDogW1wiZFwiXX0sXG4gICAge25hbWU6IFwiRGFydFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vZGFydFwiLCBcInRleHQveC1kYXJ0XCJdLCBtb2RlOiBcImRhcnRcIiwgZXh0OiBbXCJkYXJ0XCJdfSxcbiAgICB7bmFtZTogXCJkaWZmXCIsIG1pbWU6IFwidGV4dC94LWRpZmZcIiwgbW9kZTogXCJkaWZmXCIsIGV4dDogW1wiZGlmZlwiLCBcInBhdGNoXCJdfSxcbiAgICB7bmFtZTogXCJEamFuZ29cIiwgbWltZTogXCJ0ZXh0L3gtZGphbmdvXCIsIG1vZGU6IFwiZGphbmdvXCJ9LFxuICAgIHtuYW1lOiBcIkRvY2tlcmZpbGVcIiwgbWltZTogXCJ0ZXh0L3gtZG9ja2VyZmlsZVwiLCBtb2RlOiBcImRvY2tlcmZpbGVcIiwgZmlsZTogL15Eb2NrZXJmaWxlJC99LFxuICAgIHtuYW1lOiBcIkRURFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3htbC1kdGRcIiwgbW9kZTogXCJkdGRcIiwgZXh0OiBbXCJkdGRcIl19LFxuICAgIHtuYW1lOiBcIkR5bGFuXCIsIG1pbWU6IFwidGV4dC94LWR5bGFuXCIsIG1vZGU6IFwiZHlsYW5cIiwgZXh0OiBbXCJkeWxhblwiLCBcImR5bFwiLCBcImludHJcIl19LFxuICAgIHtuYW1lOiBcIkVCTkZcIiwgbWltZTogXCJ0ZXh0L3gtZWJuZlwiLCBtb2RlOiBcImVibmZcIn0sXG4gICAge25hbWU6IFwiRUNMXCIsIG1pbWU6IFwidGV4dC94LWVjbFwiLCBtb2RlOiBcImVjbFwiLCBleHQ6IFtcImVjbFwiXX0sXG4gICAge25hbWU6IFwiZWRuXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vZWRuXCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImVkblwiXX0sXG4gICAge25hbWU6IFwiRWlmZmVsXCIsIG1pbWU6IFwidGV4dC94LWVpZmZlbFwiLCBtb2RlOiBcImVpZmZlbFwiLCBleHQ6IFtcImVcIl19LFxuICAgIHtuYW1lOiBcIkVsbVwiLCBtaW1lOiBcInRleHQveC1lbG1cIiwgbW9kZTogXCJlbG1cIiwgZXh0OiBbXCJlbG1cIl19LFxuICAgIHtuYW1lOiBcIkVtYmVkZGVkIEphdmFzY3JpcHRcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWVqc1wiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImVqc1wiXX0sXG4gICAge25hbWU6IFwiRW1iZWRkZWQgUnVieVwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtZXJiXCIsIG1vZGU6IFwiaHRtbGVtYmVkZGVkXCIsIGV4dDogW1wiZXJiXCJdfSxcbiAgICB7bmFtZTogXCJFcmxhbmdcIiwgbWltZTogXCJ0ZXh0L3gtZXJsYW5nXCIsIG1vZGU6IFwiZXJsYW5nXCIsIGV4dDogW1wiZXJsXCJdfSxcbiAgICB7bmFtZTogXCJFc3BlclwiLCBtaW1lOiBcInRleHQveC1lc3BlclwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJGYWN0b3JcIiwgbWltZTogXCJ0ZXh0L3gtZmFjdG9yXCIsIG1vZGU6IFwiZmFjdG9yXCIsIGV4dDogW1wiZmFjdG9yXCJdfSxcbiAgICB7bmFtZTogXCJGQ0xcIiwgbWltZTogXCJ0ZXh0L3gtZmNsXCIsIG1vZGU6IFwiZmNsXCJ9LFxuICAgIHtuYW1lOiBcIkZvcnRoXCIsIG1pbWU6IFwidGV4dC94LWZvcnRoXCIsIG1vZGU6IFwiZm9ydGhcIiwgZXh0OiBbXCJmb3J0aFwiLCBcImZ0aFwiLCBcIjR0aFwiXX0sXG4gICAge25hbWU6IFwiRm9ydHJhblwiLCBtaW1lOiBcInRleHQveC1mb3J0cmFuXCIsIG1vZGU6IFwiZm9ydHJhblwiLCBleHQ6IFtcImZcIiwgXCJmb3JcIiwgXCJmNzdcIiwgXCJmOTBcIiwgXCJmOTVcIl19LFxuICAgIHtuYW1lOiBcIkYjXCIsIG1pbWU6IFwidGV4dC94LWZzaGFycFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcImZzXCJdLCBhbGlhczogW1wiZnNoYXJwXCJdfSxcbiAgICB7bmFtZTogXCJHYXNcIiwgbWltZTogXCJ0ZXh0L3gtZ2FzXCIsIG1vZGU6IFwiZ2FzXCIsIGV4dDogW1wic1wiXX0sXG4gICAge25hbWU6IFwiR2hlcmtpblwiLCBtaW1lOiBcInRleHQveC1mZWF0dXJlXCIsIG1vZGU6IFwiZ2hlcmtpblwiLCBleHQ6IFtcImZlYXR1cmVcIl19LFxuICAgIHtuYW1lOiBcIkdpdEh1YiBGbGF2b3JlZCBNYXJrZG93blwiLCBtaW1lOiBcInRleHQveC1nZm1cIiwgbW9kZTogXCJnZm1cIiwgZmlsZTogL14ocmVhZG1lfGNvbnRyaWJ1dGluZ3xoaXN0b3J5KS5tZCQvaX0sXG4gICAge25hbWU6IFwiR29cIiwgbWltZTogXCJ0ZXh0L3gtZ29cIiwgbW9kZTogXCJnb1wiLCBleHQ6IFtcImdvXCJdfSxcbiAgICB7bmFtZTogXCJHcm9vdnlcIiwgbWltZTogXCJ0ZXh0L3gtZ3Jvb3Z5XCIsIG1vZGU6IFwiZ3Jvb3Z5XCIsIGV4dDogW1wiZ3Jvb3Z5XCIsIFwiZ3JhZGxlXCJdLCBmaWxlOiAvXkplbmtpbnNmaWxlJC99LFxuICAgIHtuYW1lOiBcIkhBTUxcIiwgbWltZTogXCJ0ZXh0L3gtaGFtbFwiLCBtb2RlOiBcImhhbWxcIiwgZXh0OiBbXCJoYW1sXCJdfSxcbiAgICB7bmFtZTogXCJIYXNrZWxsXCIsIG1pbWU6IFwidGV4dC94LWhhc2tlbGxcIiwgbW9kZTogXCJoYXNrZWxsXCIsIGV4dDogW1wiaHNcIl19LFxuICAgIHtuYW1lOiBcIkhhc2tlbGwgKExpdGVyYXRlKVwiLCBtaW1lOiBcInRleHQveC1saXRlcmF0ZS1oYXNrZWxsXCIsIG1vZGU6IFwiaGFza2VsbC1saXRlcmF0ZVwiLCBleHQ6IFtcImxoc1wiXX0sXG4gICAge25hbWU6IFwiSGF4ZVwiLCBtaW1lOiBcInRleHQveC1oYXhlXCIsIG1vZGU6IFwiaGF4ZVwiLCBleHQ6IFtcImh4XCJdfSxcbiAgICB7bmFtZTogXCJIWE1MXCIsIG1pbWU6IFwidGV4dC94LWh4bWxcIiwgbW9kZTogXCJoYXhlXCIsIGV4dDogW1wiaHhtbFwiXX0sXG4gICAge25hbWU6IFwiQVNQLk5FVFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtYXNweFwiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImFzcHhcIl0sIGFsaWFzOiBbXCJhc3BcIiwgXCJhc3B4XCJdfSxcbiAgICB7bmFtZTogXCJIVE1MXCIsIG1pbWU6IFwidGV4dC9odG1sXCIsIG1vZGU6IFwiaHRtbG1peGVkXCIsIGV4dDogW1wiaHRtbFwiLCBcImh0bVwiLCBcImhhbmRsZWJhcnNcIiwgXCJoYnNcIl0sIGFsaWFzOiBbXCJ4aHRtbFwiXX0sXG4gICAge25hbWU6IFwiSFRUUFwiLCBtaW1lOiBcIm1lc3NhZ2UvaHR0cFwiLCBtb2RlOiBcImh0dHBcIn0sXG4gICAge25hbWU6IFwiSURMXCIsIG1pbWU6IFwidGV4dC94LWlkbFwiLCBtb2RlOiBcImlkbFwiLCBleHQ6IFtcInByb1wiXX0sXG4gICAge25hbWU6IFwiUHVnXCIsIG1pbWU6IFwidGV4dC94LXB1Z1wiLCBtb2RlOiBcInB1Z1wiLCBleHQ6IFtcImphZGVcIiwgXCJwdWdcIl0sIGFsaWFzOiBbXCJqYWRlXCJdfSxcbiAgICB7bmFtZTogXCJKYXZhXCIsIG1pbWU6IFwidGV4dC94LWphdmFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImphdmFcIl19LFxuICAgIHtuYW1lOiBcIkphdmEgU2VydmVyIFBhZ2VzXCIsIG1pbWU6IFwiYXBwbGljYXRpb24veC1qc3BcIiwgbW9kZTogXCJodG1sZW1iZWRkZWRcIiwgZXh0OiBbXCJqc3BcIl0sIGFsaWFzOiBbXCJqc3BcIl19LFxuICAgIHtuYW1lOiBcIkphdmFTY3JpcHRcIiwgbWltZXM6IFtcInRleHQvamF2YXNjcmlwdFwiLCBcInRleHQvZWNtYXNjcmlwdFwiLCBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCJdLFxuICAgICBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJqc1wiXSwgYWxpYXM6IFtcImVjbWFzY3JpcHRcIiwgXCJqc1wiLCBcIm5vZGVcIl19LFxuICAgIHtuYW1lOiBcIkpTT05cIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJhcHBsaWNhdGlvbi94LWpzb25cIl0sIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcImpzb25cIiwgXCJtYXBcIl0sIGFsaWFzOiBbXCJqc29uNVwiXX0sXG4gICAge25hbWU6IFwiSlNPTi1MRFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwgbW9kZTogXCJqYXZhc2NyaXB0XCIsIGV4dDogW1wianNvbmxkXCJdLCBhbGlhczogW1wianNvbmxkXCJdfSxcbiAgICB7bmFtZTogXCJKU1hcIiwgbWltZTogXCJ0ZXh0L2pzeFwiLCBtb2RlOiBcImpzeFwiLCBleHQ6IFtcImpzeFwiXX0sXG4gICAge25hbWU6IFwiSmluamEyXCIsIG1pbWU6IFwidGV4dC9qaW5qYTJcIiwgbW9kZTogXCJqaW5qYTJcIiwgZXh0OiBbXCJqMlwiLCBcImppbmphXCIsIFwiamluamEyXCJdfSxcbiAgICB7bmFtZTogXCJKdWxpYVwiLCBtaW1lOiBcInRleHQveC1qdWxpYVwiLCBtb2RlOiBcImp1bGlhXCIsIGV4dDogW1wiamxcIl19LFxuICAgIHtuYW1lOiBcIktvdGxpblwiLCBtaW1lOiBcInRleHQveC1rb3RsaW5cIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImt0XCJdfSxcbiAgICB7bmFtZTogXCJMRVNTXCIsIG1pbWU6IFwidGV4dC94LWxlc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJsZXNzXCJdfSxcbiAgICB7bmFtZTogXCJMaXZlU2NyaXB0XCIsIG1pbWU6IFwidGV4dC94LWxpdmVzY3JpcHRcIiwgbW9kZTogXCJsaXZlc2NyaXB0XCIsIGV4dDogW1wibHNcIl0sIGFsaWFzOiBbXCJsc1wiXX0sXG4gICAge25hbWU6IFwiTHVhXCIsIG1pbWU6IFwidGV4dC94LWx1YVwiLCBtb2RlOiBcImx1YVwiLCBleHQ6IFtcImx1YVwiXX0sXG4gICAge25hbWU6IFwiTWFya2Rvd25cIiwgbWltZTogXCJ0ZXh0L3gtbWFya2Rvd25cIiwgbW9kZTogXCJtYXJrZG93blwiLCBleHQ6IFtcIm1hcmtkb3duXCIsIFwibWRcIiwgXCJta2RcIl19LFxuICAgIHtuYW1lOiBcIm1JUkNcIiwgbWltZTogXCJ0ZXh0L21pcmNcIiwgbW9kZTogXCJtaXJjXCJ9LFxuICAgIHtuYW1lOiBcIk1hcmlhREIgU1FMXCIsIG1pbWU6IFwidGV4dC94LW1hcmlhZGJcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiTWF0aGVtYXRpY2FcIiwgbWltZTogXCJ0ZXh0L3gtbWF0aGVtYXRpY2FcIiwgbW9kZTogXCJtYXRoZW1hdGljYVwiLCBleHQ6IFtcIm1cIiwgXCJuYlwiLCBcIndsXCIsIFwid2xzXCJdfSxcbiAgICB7bmFtZTogXCJNb2RlbGljYVwiLCBtaW1lOiBcInRleHQveC1tb2RlbGljYVwiLCBtb2RlOiBcIm1vZGVsaWNhXCIsIGV4dDogW1wibW9cIl19LFxuICAgIHtuYW1lOiBcIk1VTVBTXCIsIG1pbWU6IFwidGV4dC94LW11bXBzXCIsIG1vZGU6IFwibXVtcHNcIiwgZXh0OiBbXCJtcHNcIl19LFxuICAgIHtuYW1lOiBcIk1TIFNRTFwiLCBtaW1lOiBcInRleHQveC1tc3NxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJtYm94XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vbWJveFwiLCBtb2RlOiBcIm1ib3hcIiwgZXh0OiBbXCJtYm94XCJdfSxcbiAgICB7bmFtZTogXCJNeVNRTFwiLCBtaW1lOiBcInRleHQveC1teXNxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJOZ2lueFwiLCBtaW1lOiBcInRleHQveC1uZ2lueC1jb25mXCIsIG1vZGU6IFwibmdpbnhcIiwgZmlsZTogL25naW54LipcXC5jb25mJC9pfSxcbiAgICB7bmFtZTogXCJOU0lTXCIsIG1pbWU6IFwidGV4dC94LW5zaXNcIiwgbW9kZTogXCJuc2lzXCIsIGV4dDogW1wibnNoXCIsIFwibnNpXCJdfSxcbiAgICB7bmFtZTogXCJOVHJpcGxlc1wiLCBtaW1lczogW1wiYXBwbGljYXRpb24vbi10cmlwbGVzXCIsIFwiYXBwbGljYXRpb24vbi1xdWFkc1wiLCBcInRleHQvbi10cmlwbGVzXCJdLFxuICAgICBtb2RlOiBcIm50cmlwbGVzXCIsIGV4dDogW1wibnRcIiwgXCJucVwiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUNcIiwgbWltZTogXCJ0ZXh0L3gtb2JqZWN0aXZlY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wibVwiXSwgYWxpYXM6IFtcIm9iamVjdGl2ZS1jXCIsIFwib2JqY1wiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUMrK1wiLCBtaW1lOiBcInRleHQveC1vYmplY3RpdmVjKytcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm1tXCJdLCBhbGlhczogW1wib2JqZWN0aXZlLWMrK1wiLCBcIm9iamMrK1wiXX0sXG4gICAge25hbWU6IFwiT0NhbWxcIiwgbWltZTogXCJ0ZXh0L3gtb2NhbWxcIiwgbW9kZTogXCJtbGxpa2VcIiwgZXh0OiBbXCJtbFwiLCBcIm1saVwiLCBcIm1sbFwiLCBcIm1seVwiXX0sXG4gICAge25hbWU6IFwiT2N0YXZlXCIsIG1pbWU6IFwidGV4dC94LW9jdGF2ZVwiLCBtb2RlOiBcIm9jdGF2ZVwiLCBleHQ6IFtcIm1cIl19LFxuICAgIHtuYW1lOiBcIk96XCIsIG1pbWU6IFwidGV4dC94LW96XCIsIG1vZGU6IFwib3pcIiwgZXh0OiBbXCJvelwiXX0sXG4gICAge25hbWU6IFwiUGFzY2FsXCIsIG1pbWU6IFwidGV4dC94LXBhc2NhbFwiLCBtb2RlOiBcInBhc2NhbFwiLCBleHQ6IFtcInBcIiwgXCJwYXNcIl19LFxuICAgIHtuYW1lOiBcIlBFRy5qc1wiLCBtaW1lOiBcIm51bGxcIiwgbW9kZTogXCJwZWdqc1wiLCBleHQ6IFtcImpzb25sZFwiXX0sXG4gICAge25hbWU6IFwiUGVybFwiLCBtaW1lOiBcInRleHQveC1wZXJsXCIsIG1vZGU6IFwicGVybFwiLCBleHQ6IFtcInBsXCIsIFwicG1cIl19LFxuICAgIHtuYW1lOiBcIlBIUFwiLCBtaW1lczogW1widGV4dC94LXBocFwiLCBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCIsIFwiYXBwbGljYXRpb24veC1odHRwZC1waHAtb3BlblwiXSwgbW9kZTogXCJwaHBcIiwgZXh0OiBbXCJwaHBcIiwgXCJwaHAzXCIsIFwicGhwNFwiLCBcInBocDVcIiwgXCJwaHA3XCIsIFwicGh0bWxcIl19LFxuICAgIHtuYW1lOiBcIlBpZ1wiLCBtaW1lOiBcInRleHQveC1waWdcIiwgbW9kZTogXCJwaWdcIiwgZXh0OiBbXCJwaWdcIl19LFxuICAgIHtuYW1lOiBcIlBsYWluIFRleHRcIiwgbWltZTogXCJ0ZXh0L3BsYWluXCIsIG1vZGU6IFwibnVsbFwiLCBleHQ6IFtcInR4dFwiLCBcInRleHRcIiwgXCJjb25mXCIsIFwiZGVmXCIsIFwibGlzdFwiLCBcImxvZ1wiXX0sXG4gICAge25hbWU6IFwiUExTUUxcIiwgbWltZTogXCJ0ZXh0L3gtcGxzcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJwbHNcIl19LFxuICAgIHtuYW1lOiBcIlBvc3RncmVTUUxcIiwgbWltZTogXCJ0ZXh0L3gtcGdzcWxcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiUG93ZXJTaGVsbFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtcG93ZXJzaGVsbFwiLCBtb2RlOiBcInBvd2Vyc2hlbGxcIiwgZXh0OiBbXCJwczFcIiwgXCJwc2QxXCIsIFwicHNtMVwiXX0sXG4gICAge25hbWU6IFwiUHJvcGVydGllcyBmaWxlc1wiLCBtaW1lOiBcInRleHQveC1wcm9wZXJ0aWVzXCIsIG1vZGU6IFwicHJvcGVydGllc1wiLCBleHQ6IFtcInByb3BlcnRpZXNcIiwgXCJpbmlcIiwgXCJpblwiXSwgYWxpYXM6IFtcImluaVwiLCBcInByb3BlcnRpZXNcIl19LFxuICAgIHtuYW1lOiBcIlByb3RvQnVmXCIsIG1pbWU6IFwidGV4dC94LXByb3RvYnVmXCIsIG1vZGU6IFwicHJvdG9idWZcIiwgZXh0OiBbXCJwcm90b1wiXX0sXG4gICAge25hbWU6IFwiUHl0aG9uXCIsIG1pbWU6IFwidGV4dC94LXB5dGhvblwiLCBtb2RlOiBcInB5dGhvblwiLCBleHQ6IFtcIkJVSUxEXCIsIFwiYnpsXCIsIFwicHlcIiwgXCJweXdcIl0sIGZpbGU6IC9eKEJVQ0t8QlVJTEQpJC99LFxuICAgIHtuYW1lOiBcIlB1cHBldFwiLCBtaW1lOiBcInRleHQveC1wdXBwZXRcIiwgbW9kZTogXCJwdXBwZXRcIiwgZXh0OiBbXCJwcFwiXX0sXG4gICAge25hbWU6IFwiUVwiLCBtaW1lOiBcInRleHQveC1xXCIsIG1vZGU6IFwicVwiLCBleHQ6IFtcInFcIl19LFxuICAgIHtuYW1lOiBcIlJcIiwgbWltZTogXCJ0ZXh0L3gtcnNyY1wiLCBtb2RlOiBcInJcIiwgZXh0OiBbXCJyXCIsIFwiUlwiXSwgYWxpYXM6IFtcInJzY3JpcHRcIl19LFxuICAgIHtuYW1lOiBcInJlU3RydWN0dXJlZFRleHRcIiwgbWltZTogXCJ0ZXh0L3gtcnN0XCIsIG1vZGU6IFwicnN0XCIsIGV4dDogW1wicnN0XCJdLCBhbGlhczogW1wicnN0XCJdfSxcbiAgICB7bmFtZTogXCJSUE0gQ2hhbmdlc1wiLCBtaW1lOiBcInRleHQveC1ycG0tY2hhbmdlc1wiLCBtb2RlOiBcInJwbVwifSxcbiAgICB7bmFtZTogXCJSUE0gU3BlY1wiLCBtaW1lOiBcInRleHQveC1ycG0tc3BlY1wiLCBtb2RlOiBcInJwbVwiLCBleHQ6IFtcInNwZWNcIl19LFxuICAgIHtuYW1lOiBcIlJ1YnlcIiwgbWltZTogXCJ0ZXh0L3gtcnVieVwiLCBtb2RlOiBcInJ1YnlcIiwgZXh0OiBbXCJyYlwiXSwgYWxpYXM6IFtcImpydWJ5XCIsIFwibWFjcnVieVwiLCBcInJha2VcIiwgXCJyYlwiLCBcInJieFwiXX0sXG4gICAge25hbWU6IFwiUnVzdFwiLCBtaW1lOiBcInRleHQveC1ydXN0c3JjXCIsIG1vZGU6IFwicnVzdFwiLCBleHQ6IFtcInJzXCJdfSxcbiAgICB7bmFtZTogXCJTQVNcIiwgbWltZTogXCJ0ZXh0L3gtc2FzXCIsIG1vZGU6IFwic2FzXCIsIGV4dDogW1wic2FzXCJdfSxcbiAgICB7bmFtZTogXCJTYXNzXCIsIG1pbWU6IFwidGV4dC94LXNhc3NcIiwgbW9kZTogXCJzYXNzXCIsIGV4dDogW1wic2Fzc1wiXX0sXG4gICAge25hbWU6IFwiU2NhbGFcIiwgbWltZTogXCJ0ZXh0L3gtc2NhbGFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcInNjYWxhXCJdfSxcbiAgICB7bmFtZTogXCJTY2hlbWVcIiwgbWltZTogXCJ0ZXh0L3gtc2NoZW1lXCIsIG1vZGU6IFwic2NoZW1lXCIsIGV4dDogW1wic2NtXCIsIFwic3NcIl19LFxuICAgIHtuYW1lOiBcIlNDU1NcIiwgbWltZTogXCJ0ZXh0L3gtc2Nzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcInNjc3NcIl19LFxuICAgIHtuYW1lOiBcIlNoZWxsXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2hcIiwgXCJhcHBsaWNhdGlvbi94LXNoXCJdLCBtb2RlOiBcInNoZWxsXCIsIGV4dDogW1wic2hcIiwgXCJrc2hcIiwgXCJiYXNoXCJdLCBhbGlhczogW1wiYmFzaFwiLCBcInNoXCIsIFwienNoXCJdLCBmaWxlOiAvXlBLR0JVSUxEJC99LFxuICAgIHtuYW1lOiBcIlNpZXZlXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vc2lldmVcIiwgbW9kZTogXCJzaWV2ZVwiLCBleHQ6IFtcInNpdlwiLCBcInNpZXZlXCJdfSxcbiAgICB7bmFtZTogXCJTbGltXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2xpbVwiLCBcImFwcGxpY2F0aW9uL3gtc2xpbVwiXSwgbW9kZTogXCJzbGltXCIsIGV4dDogW1wic2xpbVwiXX0sXG4gICAge25hbWU6IFwiU21hbGx0YWxrXCIsIG1pbWU6IFwidGV4dC94LXN0c3JjXCIsIG1vZGU6IFwic21hbGx0YWxrXCIsIGV4dDogW1wic3RcIl19LFxuICAgIHtuYW1lOiBcIlNtYXJ0eVwiLCBtaW1lOiBcInRleHQveC1zbWFydHlcIiwgbW9kZTogXCJzbWFydHlcIiwgZXh0OiBbXCJ0cGxcIl19LFxuICAgIHtuYW1lOiBcIlNvbHJcIiwgbWltZTogXCJ0ZXh0L3gtc29sclwiLCBtb2RlOiBcInNvbHJcIn0sXG4gICAge25hbWU6IFwiU01MXCIsIG1pbWU6IFwidGV4dC94LXNtbFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcInNtbFwiLCBcInNpZ1wiLCBcImZ1blwiLCBcInNtYWNrc3BlY1wiXX0sXG4gICAge25hbWU6IFwiU295XCIsIG1pbWU6IFwidGV4dC94LXNveVwiLCBtb2RlOiBcInNveVwiLCBleHQ6IFtcInNveVwiXSwgYWxpYXM6IFtcImNsb3N1cmUgdGVtcGxhdGVcIl19LFxuICAgIHtuYW1lOiBcIlNQQVJRTFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiLCBtb2RlOiBcInNwYXJxbFwiLCBleHQ6IFtcInJxXCIsIFwic3BhcnFsXCJdLCBhbGlhczogW1wic3BhcnVsXCJdfSxcbiAgICB7bmFtZTogXCJTcHJlYWRzaGVldFwiLCBtaW1lOiBcInRleHQveC1zcHJlYWRzaGVldFwiLCBtb2RlOiBcInNwcmVhZHNoZWV0XCIsIGFsaWFzOiBbXCJleGNlbFwiLCBcImZvcm11bGFcIl19LFxuICAgIHtuYW1lOiBcIlNRTFwiLCBtaW1lOiBcInRleHQveC1zcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJzcWxcIl19LFxuICAgIHtuYW1lOiBcIlNRTGl0ZVwiLCBtaW1lOiBcInRleHQveC1zcWxpdGVcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiU3F1aXJyZWxcIiwgbWltZTogXCJ0ZXh0L3gtc3F1aXJyZWxcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm51dFwiXX0sXG4gICAge25hbWU6IFwiU3R5bHVzXCIsIG1pbWU6IFwidGV4dC94LXN0eWxcIiwgbW9kZTogXCJzdHlsdXNcIiwgZXh0OiBbXCJzdHlsXCJdfSxcbiAgICB7bmFtZTogXCJTd2lmdFwiLCBtaW1lOiBcInRleHQveC1zd2lmdFwiLCBtb2RlOiBcInN3aWZ0XCIsIGV4dDogW1wic3dpZnRcIl19LFxuICAgIHtuYW1lOiBcInNUZVhcIiwgbWltZTogXCJ0ZXh0L3gtc3RleFwiLCBtb2RlOiBcInN0ZXhcIn0sXG4gICAge25hbWU6IFwiTGFUZVhcIiwgbWltZTogXCJ0ZXh0L3gtbGF0ZXhcIiwgbW9kZTogXCJzdGV4XCIsIGV4dDogW1widGV4dFwiLCBcImx0eFwiLCBcInRleFwiXSwgYWxpYXM6IFtcInRleFwiXX0sXG4gICAge25hbWU6IFwiU3lzdGVtVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC1zeXN0ZW12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIiwgXCJzdlwiLCBcInN2aFwiXX0sXG4gICAge25hbWU6IFwiVGNsXCIsIG1pbWU6IFwidGV4dC94LXRjbFwiLCBtb2RlOiBcInRjbFwiLCBleHQ6IFtcInRjbFwiXX0sXG4gICAge25hbWU6IFwiVGV4dGlsZVwiLCBtaW1lOiBcInRleHQveC10ZXh0aWxlXCIsIG1vZGU6IFwidGV4dGlsZVwiLCBleHQ6IFtcInRleHRpbGVcIl19LFxuICAgIHtuYW1lOiBcIlRpZGRseVdpa2kgXCIsIG1pbWU6IFwidGV4dC94LXRpZGRseXdpa2lcIiwgbW9kZTogXCJ0aWRkbHl3aWtpXCJ9LFxuICAgIHtuYW1lOiBcIlRpa2kgd2lraVwiLCBtaW1lOiBcInRleHQvdGlraVwiLCBtb2RlOiBcInRpa2lcIn0sXG4gICAge25hbWU6IFwiVE9NTFwiLCBtaW1lOiBcInRleHQveC10b21sXCIsIG1vZGU6IFwidG9tbFwiLCBleHQ6IFtcInRvbWxcIl19LFxuICAgIHtuYW1lOiBcIlRvcm5hZG9cIiwgbWltZTogXCJ0ZXh0L3gtdG9ybmFkb1wiLCBtb2RlOiBcInRvcm5hZG9cIn0sXG4gICAge25hbWU6IFwidHJvZmZcIiwgbWltZTogXCJ0ZXh0L3Ryb2ZmXCIsIG1vZGU6IFwidHJvZmZcIiwgZXh0OiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl19LFxuICAgIHtuYW1lOiBcIlRUQ05cIiwgbWltZTogXCJ0ZXh0L3gtdHRjblwiLCBtb2RlOiBcInR0Y25cIiwgZXh0OiBbXCJ0dGNuXCIsIFwidHRjbjNcIiwgXCJ0dGNucHBcIl19LFxuICAgIHtuYW1lOiBcIlRUQ05fQ0ZHXCIsIG1pbWU6IFwidGV4dC94LXR0Y24tY2ZnXCIsIG1vZGU6IFwidHRjbi1jZmdcIiwgZXh0OiBbXCJjZmdcIl19LFxuICAgIHtuYW1lOiBcIlR1cnRsZVwiLCBtaW1lOiBcInRleHQvdHVydGxlXCIsIG1vZGU6IFwidHVydGxlXCIsIGV4dDogW1widHRsXCJdfSxcbiAgICB7bmFtZTogXCJUeXBlU2NyaXB0XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJ0c1wiXSwgYWxpYXM6IFtcInRzXCJdfSxcbiAgICB7bmFtZTogXCJUeXBlU2NyaXB0LUpTWFwiLCBtaW1lOiBcInRleHQvdHlwZXNjcmlwdC1qc3hcIiwgbW9kZTogXCJqc3hcIiwgZXh0OiBbXCJ0c3hcIl0sIGFsaWFzOiBbXCJ0c3hcIl19LFxuICAgIHtuYW1lOiBcIlR3aWdcIiwgbWltZTogXCJ0ZXh0L3gtdHdpZ1wiLCBtb2RlOiBcInR3aWdcIn0sXG4gICAge25hbWU6IFwiV2ViIElETFwiLCBtaW1lOiBcInRleHQveC13ZWJpZGxcIiwgbW9kZTogXCJ3ZWJpZGxcIiwgZXh0OiBbXCJ3ZWJpZGxcIl19LFxuICAgIHtuYW1lOiBcIlZCLk5FVFwiLCBtaW1lOiBcInRleHQveC12YlwiLCBtb2RlOiBcInZiXCIsIGV4dDogW1widmJcIl19LFxuICAgIHtuYW1lOiBcIlZCU2NyaXB0XCIsIG1pbWU6IFwidGV4dC92YnNjcmlwdFwiLCBtb2RlOiBcInZic2NyaXB0XCIsIGV4dDogW1widmJzXCJdfSxcbiAgICB7bmFtZTogXCJWZWxvY2l0eVwiLCBtaW1lOiBcInRleHQvdmVsb2NpdHlcIiwgbW9kZTogXCJ2ZWxvY2l0eVwiLCBleHQ6IFtcInZ0bFwiXX0sXG4gICAge25hbWU6IFwiVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIl19LFxuICAgIHtuYW1lOiBcIlZIRExcIiwgbWltZTogXCJ0ZXh0L3gtdmhkbFwiLCBtb2RlOiBcInZoZGxcIiwgZXh0OiBbXCJ2aGRcIiwgXCJ2aGRsXCJdfSxcbiAgICB7bmFtZTogXCJWdWUuanMgQ29tcG9uZW50XCIsIG1pbWVzOiBbXCJzY3JpcHQveC12dWVcIiwgXCJ0ZXh0L3gtdnVlXCJdLCBtb2RlOiBcInZ1ZVwiLCBleHQ6IFtcInZ1ZVwiXX0sXG4gICAge25hbWU6IFwiWE1MXCIsIG1pbWVzOiBbXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJ0ZXh0L3htbFwiXSwgbW9kZTogXCJ4bWxcIiwgZXh0OiBbXCJ4bWxcIiwgXCJ4c2xcIiwgXCJ4c2RcIiwgXCJzdmdcIl0sIGFsaWFzOiBbXCJyc3NcIiwgXCJ3c2RsXCIsIFwieHNkXCJdfSxcbiAgICB7bmFtZTogXCJYUXVlcnlcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94cXVlcnlcIiwgbW9kZTogXCJ4cXVlcnlcIiwgZXh0OiBbXCJ4eVwiLCBcInhxdWVyeVwiXX0sXG4gICAge25hbWU6IFwiWWFjYXNcIiwgbWltZTogXCJ0ZXh0L3gteWFjYXNcIiwgbW9kZTogXCJ5YWNhc1wiLCBleHQ6IFtcInlzXCJdfSxcbiAgICB7bmFtZTogXCJZQU1MXCIsIG1pbWVzOiBbXCJ0ZXh0L3gteWFtbFwiLCBcInRleHQveWFtbFwiXSwgbW9kZTogXCJ5YW1sXCIsIGV4dDogW1wieWFtbFwiLCBcInltbFwiXSwgYWxpYXM6IFtcInltbFwiXX0sXG4gICAge25hbWU6IFwiWjgwXCIsIG1pbWU6IFwidGV4dC94LXo4MFwiLCBtb2RlOiBcIno4MFwiLCBleHQ6IFtcIno4MFwiXX0sXG4gICAge25hbWU6IFwibXNjZ2VuXCIsIG1pbWU6IFwidGV4dC94LW1zY2dlblwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcIm1zY2dlblwiLCBcIm1zY2luXCIsIFwibXNjXCJdfSxcbiAgICB7bmFtZTogXCJ4dVwiLCBtaW1lOiBcInRleHQveC14dVwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcInh1XCJdfSxcbiAgICB7bmFtZTogXCJtc2dlbm55XCIsIG1pbWU6IFwidGV4dC94LW1zZ2VubnlcIiwgbW9kZTogXCJtc2NnZW5cIiwgZXh0OiBbXCJtc2dlbm55XCJdfVxuICBdO1xuICAvLyBFbnN1cmUgYWxsIG1vZGVzIGhhdmUgYSBtaW1lIHByb3BlcnR5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgaWYgKGluZm8ubWltZXMpIGluZm8ubWltZSA9IGluZm8ubWltZXNbMF07XG4gIH1cblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlNSU1FID0gZnVuY3Rpb24obWltZSkge1xuICAgIG1pbWUgPSBtaW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5taW1lID09IG1pbWUpIHJldHVybiBpbmZvO1xuICAgICAgaWYgKGluZm8ubWltZXMpIGZvciAodmFyIGogPSAwOyBqIDwgaW5mby5taW1lcy5sZW5ndGg7IGorKylcbiAgICAgICAgaWYgKGluZm8ubWltZXNbal0gPT0gbWltZSkgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIGlmICgvXFwreG1sJC8udGVzdChtaW1lKSkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeU1JTUUoXCJhcHBsaWNhdGlvbi94bWxcIilcbiAgICBpZiAoL1xcK2pzb24kLy50ZXN0KG1pbWUpKSByZXR1cm4gQ29kZU1pcnJvci5maW5kTW9kZUJ5TUlNRShcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlFeHRlbnNpb24gPSBmdW5jdGlvbihleHQpIHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLmV4dCkgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLmV4dC5sZW5ndGg7IGorKylcbiAgICAgICAgaWYgKGluZm8uZXh0W2pdID09IGV4dCkgcmV0dXJuIGluZm87XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZE1vZGVCeUZpbGVOYW1lID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLmZpbGUgJiYgaW5mby5maWxlLnRlc3QoZmlsZW5hbWUpKSByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgdmFyIGRvdCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICB2YXIgZXh0ID0gZG90ID4gLTEgJiYgZmlsZW5hbWUuc3Vic3RyaW5nKGRvdCArIDEsIGZpbGVuYW1lLmxlbmd0aCk7XG4gICAgaWYgKGV4dCkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeUV4dGVuc2lvbihleHQpO1xuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLm5hbWUudG9Mb3dlckNhc2UoKSA9PSBuYW1lKSByZXR1cm4gaW5mbztcbiAgICAgIGlmIChpbmZvLmFsaWFzKSBmb3IgKHZhciBqID0gMDsgaiA8IGluZm8uYWxpYXMubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLmFsaWFzW2pdLnRvTG93ZXJDYXNlKCkgPT0gbmFtZSkgcmV0dXJuIGluZm87XG4gICAgfVxuICB9O1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vbWFya2Rvd24vbWFya2Rvd25cIiksIHJlcXVpcmUoXCIuLi8uLi9hZGRvbi9tb2RlL292ZXJsYXlcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9tYXJrZG93bi9tYXJrZG93blwiLCBcIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgdXJsUkUgPSAvXigoPzooPzphYWFzP3xhYm91dHxhY2FwfGFkaXVteHRyYXxhZltwc118YWltfGFwdHxhdHRhY2htZW50fGF3fGJlc2hhcmV8Yml0Y29pbnxib2xvfGNhbGx0b3xjYXB8Y2hyb21lKD86LWV4dGVuc2lvbik/fGNpZHxjb2FwfGNvbS1ldmVudGJyaXRlLWF0dGVuZGVlfGNvbnRlbnR8Y3JpZHxjdnN8ZGF0YXxkYXZ8ZGljdHxkbG5hLSg/OnBsYXljb250YWluZXJ8cGxheXNpbmdsZSl8ZG5zfGRvaXxkdG58ZHZifGVkMmt8ZmFjZXRpbWV8ZmVlZHxmaWxlfGZpbmdlcnxmaXNofGZ0cHxnZW98Z2d8Z2l0fGdpem1vcHJvamVjdHxnb3xnb3BoZXJ8Z3RhbGt8aDMyM3xoY3B8aHR0cHM/fGlheHxpY2FwfGljb258aW18aW1hcHxpbmZvfGlwbnxpcHB8aXJjWzZzXT98aXJpcyg/OlxcLmJlZXB8XFwubHd6fFxcLnhwY3xcXC54cGNzKT98aXRtc3xqYXJ8amF2YXNjcmlwdHxqbXN8a2V5cGFyY3xsYXN0Zm18bGRhcHM/fG1hZ25ldHxtYWlsdG98bWFwc3xtYXJrZXR8bWVzc2FnZXxtaWR8bW1zfG1zLWhlbHB8bXNuaW18bXNycHM/fG10cXB8bXVtYmxlfG11cGRhdGV8bXZufG5ld3N8bmZzfG5paD98bm50cHxub3Rlc3xvaWR8b3BhcXVlbG9ja3Rva2VufHBhbG18cGFwYXJhenppfHBsYXRmb3JtfHBvcHxwcmVzfHByb3h5fHBzeWN8cXVlcnl8cmVzKD86b3VyY2UpP3xybWl8cnN5bmN8cnRtcHxydHNwfHNlY29uZGxpZmV8c2VydmljZXxzZXNzaW9ufHNmdHB8c2dufHNodHRwfHNpZXZlfHNpcHM/fHNreXBlfHNtW2JzXXxzbm1wfHNvYXBcXC5iZWVwcz98c29sZGF0fHNwb3RpZnl8c3NofHN0ZWFtfHN2bnx0YWd8dGVhbXNwZWFrfHRlbCg/Om5ldCk/fHRmdHB8dGhpbmdzfHRoaXNtZXNzYWdlfHRpcHx0bjMyNzB8dHZ8dWRwfHVucmVhbHx1cm58dXQyMDA0fHZlbW1pfHZlbnRyaWxvfHZpZXctc291cmNlfHdlYmNhbHx3c3M/fHd0YWl8d3ljaXd5Z3x4Y29uKD86LXVzZXJpZCk/fHhmaXJlfHhtbHJwY1xcLmJlZXBzP3x4bXBwfHhyaXx5bXNncnx6MzlcXC41MFtyc10/KTooPzpcXC97MSwzfXxbYS16MC05JV0pfHd3d1xcZHswLDN9Wy5dfFthLXowLTkuXFwtXStbLl1bYS16XXsyLDR9XFwvKSg/OlteXFxzKCk8Pl18XFwoW15cXHMoKTw+XSpcXCkpKyg/OlxcKFteXFxzKCk8Pl0qXFwpfFteXFxzYCohKClcXFtcXF17fTs6J1wiLiw8Pj/Cq8K74oCc4oCd4oCY4oCZXSkpL2lcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZ2ZtXCIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykge1xuICB2YXIgY29kZURlcHRoID0gMDtcbiAgZnVuY3Rpb24gYmxhbmtMaW5lKHN0YXRlKSB7XG4gICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBnZm1PdmVybGF5ID0ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogZmFsc2UsXG4gICAgICAgIGNvZGVCbG9jazogZmFsc2UsXG4gICAgICAgIGF0ZVNwYWNlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogcy5jb2RlLFxuICAgICAgICBjb2RlQmxvY2s6IHMuY29kZUJsb2NrLFxuICAgICAgICBhdGVTcGFjZTogcy5hdGVTcGFjZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gbnVsbDtcblxuICAgICAgLy8gSGFjayB0byBwcmV2ZW50IGZvcm1hdHRpbmcgb3ZlcnJpZGUgaW5zaWRlIGNvZGUgYmxvY2tzIChibG9jayBhbmQgaW5saW5lKVxuICAgICAgaWYgKHN0YXRlLmNvZGVCbG9jaykge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eYGBgKy8pKSB7XG4gICAgICAgICAgc3RhdGUuY29kZUJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goL15gYGArLykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBzdGF0ZS5jb2RlQmxvY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgYmxvY2sgaXMgY2hhbmdlZCwgaXQgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpbiBNYXJrZG93biBtb2RlXG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ2AnKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHZhciBiZWZvcmUgPSBzdHJlYW0ucG9zO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoJ2AnKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAxICsgc3RyZWFtLnBvcyAtIGJlZm9yZTtcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlKSB7XG4gICAgICAgICAgY29kZURlcHRoID0gZGlmZmVyZW5jZTtcbiAgICAgICAgICBzdGF0ZS5jb2RlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gY29kZURlcHRoKSB7IC8vIE11c3QgYmUgZXhhY3RcbiAgICAgICAgICAgIHN0YXRlLmNvZGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmNvZGUpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBzcGFjZS4gSWYgc28sIGxpbmtzIGNhbiBiZSBmb3JtYXR0ZWQgbGF0ZXIgb25cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICBzdGF0ZS5hdGVTcGFjZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSB8fCBzdGF0ZS5hdGVTcGFjZSkge1xuICAgICAgICBzdGF0ZS5hdGVTcGFjZSA9IGZhbHNlO1xuICAgICAgICBpZiAobW9kZUNvbmZpZy5naXRIdWJTcGljZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goL14oPzpbYS16QS1aMC05XFwtX10rXFwvKT8oPzpbYS16QS1aMC05XFwtX10rQCk/KD89LnswLDZ9XFxkKSg/OlthLWYwLTldezcsNDB9XFxiKS8pKSB7XG4gICAgICAgICAgICAvLyBVc2VyL1Byb2plY3RAU0hBXG4gICAgICAgICAgICAvLyBVc2VyQFNIQVxuICAgICAgICAgICAgLy8gU0hBXG4gICAgICAgICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXig/OlthLXpBLVowLTlcXC1fXStcXC8pPyg/OlthLXpBLVowLTlcXC1fXSspPyNbMC05XStcXGIvKSkge1xuICAgICAgICAgICAgLy8gVXNlci9Qcm9qZWN0I051bVxuICAgICAgICAgICAgLy8gVXNlciNOdW1cbiAgICAgICAgICAgIC8vICNOdW1cbiAgICAgICAgICAgIHN0YXRlLmNvbWJpbmVUb2tlbnMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIFwibGlua1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCh1cmxSRSkgJiZcbiAgICAgICAgICBzdHJlYW0uc3RyaW5nLnNsaWNlKHN0cmVhbS5zdGFydCAtIDIsIHN0cmVhbS5zdGFydCkgIT0gXCJdKFwiICYmXG4gICAgICAgICAgKHN0cmVhbS5zdGFydCA9PSAwIHx8IC9cXFcvLnRlc3Qoc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnN0YXJ0IC0gMSkpKSkge1xuICAgICAgICAvLyBVUkxzXG4gICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC8yMDEwLzA3L2ltcHJvdmVkX3JlZ2V4X2Zvcl9tYXRjaGluZ191cmxzXG4gICAgICAgIC8vIEFuZCB0aGVuIChpc3N1ZSAjMTE2MCkgc2ltcGxpZmllZCB0byBtYWtlIGl0IG5vdCBjcmFzaCB0aGUgQ2hyb21lIFJlZ2V4cCBlbmdpbmVcbiAgICAgICAgLy8gQW5kIHRoZW4gbGltaXRlZCB1cmwgc2NoZW1lcyB0byB0aGUgQ29tbW9uTWFyayBsaXN0LCBzbyBmb286YmFyIGlzbid0IG1hdGNoZWQgYXMgYSBVUkxcbiAgICAgICAgc3RhdGUuY29tYmluZVRva2VucyA9IHRydWU7XG4gICAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGJsYW5rTGluZTogYmxhbmtMaW5lXG4gIH07XG5cbiAgdmFyIG1hcmtkb3duQ29uZmlnID0ge1xuICAgIHRhc2tMaXN0czogdHJ1ZSxcbiAgICBzdHJpa2V0aHJvdWdoOiB0cnVlLFxuICAgIGVtb2ppOiB0cnVlXG4gIH07XG4gIGZvciAodmFyIGF0dHIgaW4gbW9kZUNvbmZpZykge1xuICAgIG1hcmtkb3duQ29uZmlnW2F0dHJdID0gbW9kZUNvbmZpZ1thdHRyXTtcbiAgfVxuICBtYXJrZG93bkNvbmZpZy5uYW1lID0gXCJtYXJrZG93blwiO1xuICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5TW9kZShDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtYXJrZG93bkNvbmZpZyksIGdmbU92ZXJsYXkpO1xuXG59LCBcIm1hcmtkb3duXCIpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1nZm1cIiwgXCJnZm1cIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiamF2YXNjcmlwdFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuICB2YXIgc3RhdGVtZW50SW5kZW50ID0gcGFyc2VyQ29uZmlnLnN0YXRlbWVudEluZGVudDtcbiAgdmFyIGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkO1xuICB2YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlO1xuICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0O1xuICB2YXIgd29yZFJFID0gcGFyc2VyQ29uZmlnLndvcmRDaGFyYWN0ZXJzIHx8IC9bXFx3JFxceGExLVxcdWZmZmZdLztcblxuICAvLyBUb2tlbml6ZXJcblxuICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpe1xuICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiBcImtleXdvcmRcIn07fVxuICAgIHZhciBBID0ga3coXCJrZXl3b3JkIGFcIiksIEIgPSBrdyhcImtleXdvcmQgYlwiKSwgQyA9IGt3KFwia2V5d29yZCBjXCIpLCBEID0ga3coXCJrZXl3b3JkIGRcIik7XG4gICAgdmFyIG9wZXJhdG9yID0ga3coXCJvcGVyYXRvclwiKSwgYXRvbSA9IHt0eXBlOiBcImF0b21cIiwgc3R5bGU6IFwiYXRvbVwifTtcblxuICAgIHJldHVybiB7XG4gICAgICBcImlmXCI6IGt3KFwiaWZcIiksIFwid2hpbGVcIjogQSwgXCJ3aXRoXCI6IEEsIFwiZWxzZVwiOiBCLCBcImRvXCI6IEIsIFwidHJ5XCI6IEIsIFwiZmluYWxseVwiOiBCLFxuICAgICAgXCJyZXR1cm5cIjogRCwgXCJicmVha1wiOiBELCBcImNvbnRpbnVlXCI6IEQsIFwibmV3XCI6IGt3KFwibmV3XCIpLCBcImRlbGV0ZVwiOiBDLCBcInZvaWRcIjogQywgXCJ0aHJvd1wiOiBDLFxuICAgICAgXCJkZWJ1Z2dlclwiOiBrdyhcImRlYnVnZ2VyXCIpLCBcInZhclwiOiBrdyhcInZhclwiKSwgXCJjb25zdFwiOiBrdyhcInZhclwiKSwgXCJsZXRcIjoga3coXCJ2YXJcIiksXG4gICAgICBcImZ1bmN0aW9uXCI6IGt3KFwiZnVuY3Rpb25cIiksIFwiY2F0Y2hcIjoga3coXCJjYXRjaFwiKSxcbiAgICAgIFwiZm9yXCI6IGt3KFwiZm9yXCIpLCBcInN3aXRjaFwiOiBrdyhcInN3aXRjaFwiKSwgXCJjYXNlXCI6IGt3KFwiY2FzZVwiKSwgXCJkZWZhdWx0XCI6IGt3KFwiZGVmYXVsdFwiKSxcbiAgICAgIFwiaW5cIjogb3BlcmF0b3IsIFwidHlwZW9mXCI6IG9wZXJhdG9yLCBcImluc3RhbmNlb2ZcIjogb3BlcmF0b3IsXG4gICAgICBcInRydWVcIjogYXRvbSwgXCJmYWxzZVwiOiBhdG9tLCBcIm51bGxcIjogYXRvbSwgXCJ1bmRlZmluZWRcIjogYXRvbSwgXCJOYU5cIjogYXRvbSwgXCJJbmZpbml0eVwiOiBhdG9tLFxuICAgICAgXCJ0aGlzXCI6IGt3KFwidGhpc1wiKSwgXCJjbGFzc1wiOiBrdyhcImNsYXNzXCIpLCBcInN1cGVyXCI6IGt3KFwiYXRvbVwiKSxcbiAgICAgIFwieWllbGRcIjogQywgXCJleHBvcnRcIjoga3coXCJleHBvcnRcIiksIFwiaW1wb3J0XCI6IGt3KFwiaW1wb3J0XCIpLCBcImV4dGVuZHNcIjogQyxcbiAgICAgIFwiYXdhaXRcIjogQ1xuICAgIH07XG4gIH0oKTtcblxuICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcXC0qJiU9PD4hP3x+XkBdLztcbiAgdmFyIGlzSnNvbmxkS2V5d29yZCA9IC9eQChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5cGV8Y29udGFpbmVyfGxpc3R8c2V0fHJldmVyc2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaClcIi87XG5cbiAgZnVuY3Rpb24gcmVhZFJlZ2V4cChzdHJlYW0pIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBpblNldCA9IGZhbHNlO1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICBpZiAobmV4dCA9PSBcIi9cIiAmJiAhaW5TZXQpIHJldHVybjtcbiAgICAgICAgaWYgKG5leHQgPT0gXCJbXCIpIGluU2V0ID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoaW5TZXQgJiYgbmV4dCA9PSBcIl1cIikgaW5TZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXRcbiAgLy8gY29uc2luZyB1cCB0b25zIG9mIG9iamVjdHMuXG4gIHZhciB0eXBlLCBjb250ZW50O1xuICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7XG4gICAgdHlwZSA9IHRwOyBjb250ZW50ID0gY29udDtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiICYmIHN0cmVhbS5tYXRjaCgvXlxcZFtcXGRfXSooPzpbZUVdWytcXC1dP1tcXGRfXSspPy8pKSB7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKFwiLi5cIikpIHtcbiAgICAgIHJldHVybiByZXQoXCJzcHJlYWRcIiwgXCJtZXRhXCIpO1xuICAgIH0gZWxzZSBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFw6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIHJldHVybiByZXQoY2gpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI9XCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgIHJldHVybiByZXQoXCI9PlwiLCBcIm9wZXJhdG9yXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIwXCIgJiYgc3RyZWFtLm1hdGNoKC9eKD86eFtcXGRBLUZhLWZfXSt8b1swLTdfXSt8YlswMV9dKyluPy8pKSB7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXltcXGRfXSooPzpufCg/OlxcLltcXGRfXSopPyg/OltlRV1bK1xcLV0/W1xcZF9dKyk/KT8vKTtcbiAgICAgIHJldHVybiByZXQoXCJudW1iZXJcIiwgXCJudW1iZXJcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbkFsbG93ZWQoc3RyZWFtLCBzdGF0ZSwgMSkpIHtcbiAgICAgICAgcmVhZFJlZ2V4cChzdHJlYW0pO1xuICAgICAgICBzdHJlYW0ubWF0Y2goL15cXGIoKFtnaW15dXNdKSg/IVtnaW15dXNdKlxcMikpK1xcYi8pO1xuICAgICAgICByZXR1cm4gcmV0KFwicmVnZXhwXCIsIFwic3RyaW5nLTJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uZWF0KFwiPVwiKTtcbiAgICAgICAgcmV0dXJuIHJldChcIm9wZXJhdG9yXCIsIFwib3BlcmF0b3JcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcImBcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpO1xuICAgICAgcmV0dXJuIHRva2VuUXVhc2koc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIHJldChcImVycm9yXCIsIFwiZXJyb3JcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0ubWF0Y2goXCIhLS1cIikgfHwgY2ggPT0gXCItXCIgJiYgc3RyZWFtLm1hdGNoKFwiLT5cIikpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKVxuICAgICAgcmV0dXJuIHJldChcImNvbW1lbnRcIiwgXCJjb21tZW50XCIpXG4gICAgfSBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgaWYgKGNoICE9IFwiPlwiIHx8ICFzdGF0ZS5sZXhpY2FsIHx8IHN0YXRlLmxleGljYWwudHlwZSAhPSBcIj5cIikge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIj1cIikpIHtcbiAgICAgICAgICBpZiAoY2ggPT0gXCIhXCIgfHwgY2ggPT0gXCI9XCIpIHN0cmVhbS5lYXQoXCI9XCIpXG4gICAgICAgIH0gZWxzZSBpZiAoL1s8PiorXFwtXS8udGVzdChjaCkpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0KGNoKVxuICAgICAgICAgIGlmIChjaCA9PSBcIj5cIikgc3RyZWFtLmVhdChjaClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcIm9wZXJhdG9yXCIsIFwib3BlcmF0b3JcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgfSBlbHNlIGlmICh3b3JkUkUudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSh3b3JkUkUpO1xuICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpXG4gICAgICBpZiAoc3RhdGUubGFzdFR5cGUgIT0gXCIuXCIpIHtcbiAgICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7XG4gICAgICAgICAgdmFyIGt3ID0ga2V5d29yZHNbd29yZF1cbiAgICAgICAgICByZXR1cm4gcmV0KGt3LnR5cGUsIGt3LnN0eWxlLCB3b3JkKVxuICAgICAgICB9XG4gICAgICAgIGlmICh3b3JkID09IFwiYXN5bmNcIiAmJiBzdHJlYW0ubWF0Y2goL14oXFxzfFxcL1xcKi4qP1xcKlxcLykqW1xcW1xcKFxcd10vLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIHJldChcImFzeW5jXCIsIFwia2V5d29yZFwiLCB3b3JkKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlXCIsIFwidmFyaWFibGVcIiwgd29yZClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgICAgaWYgKGpzb25sZE1vZGUgJiYgc3RyZWFtLnBlZWsoKSA9PSBcIkBcIiAmJiBzdHJlYW0ubWF0Y2goaXNKc29ubGRLZXl3b3JkKSl7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gcmV0KFwianNvbmxkLWtleXdvcmRcIiwgXCJtZXRhXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgYnJlYWs7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiByZXQoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuUXVhc2koc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7XG4gICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKCFlc2NhcGVkICYmIChuZXh0ID09IFwiYFwiIHx8IG5leHQgPT0gXCIkXCIgJiYgc3RyZWFtLmVhdChcIntcIikpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwicXVhc2lcIiwgXCJzdHJpbmctMlwiLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgfVxuXG4gIHZhciBicmFja2V0cyA9IFwiKFt7fV0pXCI7XG4gIC8vIFRoaXMgaXMgYSBjcnVkZSBsb29rYWhlYWQgdHJpY2sgdG8gdHJ5IGFuZCBub3RpY2UgdGhhdCB3ZSdyZVxuICAvLyBwYXJzaW5nIHRoZSBhcmd1bWVudCBwYXR0ZXJucyBmb3IgYSBmYXQtYXJyb3cgZnVuY3Rpb24gYmVmb3JlIHdlXG4gIC8vIGFjdHVhbGx5IGhpdCB0aGUgYXJyb3cgdG9rZW4uIEl0IG9ubHkgd29ya3MgaWYgdGhlIGFycm93IGlzIG9uXG4gIC8vIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFyZ3VtZW50cyBhbmQgdGhlcmUncyBubyBzdHJhbmdlIG5vaXNlXG4gIC8vIChjb21tZW50cykgaW4gYmV0d2Vlbi4gRmFsbGJhY2sgaXMgdG8gb25seSBub3RpY2Ugd2hlbiB3ZSBoaXQgdGhlXG4gIC8vIGFycm93LCBhbmQgbm90IGRlY2xhcmUgdGhlIGFyZ3VtZW50cyBhcyBsb2NhbHMgZm9yIHRoZSBhcnJvd1xuICAvLyBib2R5LlxuICBmdW5jdGlvbiBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5mYXRBcnJvd0F0KSBzdGF0ZS5mYXRBcnJvd0F0ID0gbnVsbDtcbiAgICB2YXIgYXJyb3cgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoXCI9PlwiLCBzdHJlYW0uc3RhcnQpO1xuICAgIGlmIChhcnJvdyA8IDApIHJldHVybjtcblxuICAgIGlmIChpc1RTKSB7IC8vIFRyeSB0byBza2lwIFR5cGVTY3JpcHQgcmV0dXJuIHR5cGUgZGVjbGFyYXRpb25zIGFmdGVyIHRoZSBhcmd1bWVudHNcbiAgICAgIHZhciBtID0gLzpcXHMqKD86XFx3Kyg/OjxbXj5dKj58XFxbXFxdKT98XFx7W159XSpcXH0pXFxzKiQvLmV4ZWMoc3RyZWFtLnN0cmluZy5zbGljZShzdHJlYW0uc3RhcnQsIGFycm93KSlcbiAgICAgIGlmIChtKSBhcnJvdyA9IG0uaW5kZXhcbiAgICB9XG5cbiAgICB2YXIgZGVwdGggPSAwLCBzYXdTb21ldGhpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBwb3MgPSBhcnJvdyAtIDE7IHBvcyA+PSAwOyAtLXBvcykge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zKTtcbiAgICAgIHZhciBicmFja2V0ID0gYnJhY2tldHMuaW5kZXhPZihjaCk7XG4gICAgICBpZiAoYnJhY2tldCA+PSAwICYmIGJyYWNrZXQgPCAzKSB7XG4gICAgICAgIGlmICghZGVwdGgpIHsgKytwb3M7IGJyZWFrOyB9XG4gICAgICAgIGlmICgtLWRlcHRoID09IDApIHsgaWYgKGNoID09IFwiKFwiKSBzYXdTb21ldGhpbmcgPSB0cnVlOyBicmVhazsgfVxuICAgICAgfSBlbHNlIGlmIChicmFja2V0ID49IDMgJiYgYnJhY2tldCA8IDYpIHtcbiAgICAgICAgKytkZXB0aDtcbiAgICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7XG4gICAgICAgIHNhd1NvbWV0aGluZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKC9bXCInXFwvYF0vLnRlc3QoY2gpKSB7XG4gICAgICAgIGZvciAoOzsgLS1wb3MpIHtcbiAgICAgICAgICBpZiAocG9zID09IDApIHJldHVyblxuICAgICAgICAgIHZhciBuZXh0ID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zIC0gMSlcbiAgICAgICAgICBpZiAobmV4dCA9PSBjaCAmJiBzdHJlYW0uc3RyaW5nLmNoYXJBdChwb3MgLSAyKSAhPSBcIlxcXFxcIikgeyBwb3MtLTsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNhd1NvbWV0aGluZyAmJiAhZGVwdGgpIHtcbiAgICAgICAgKytwb3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2F3U29tZXRoaW5nICYmICFkZXB0aCkgc3RhdGUuZmF0QXJyb3dBdCA9IHBvcztcbiAgfVxuXG4gIC8vIFBhcnNlclxuXG4gIHZhciBhdG9taWNUeXBlcyA9IHtcImF0b21cIjogdHJ1ZSwgXCJudW1iZXJcIjogdHJ1ZSwgXCJ2YXJpYWJsZVwiOiB0cnVlLCBcInN0cmluZ1wiOiB0cnVlLCBcInJlZ2V4cFwiOiB0cnVlLCBcInRoaXNcIjogdHJ1ZSwgXCJqc29ubGQta2V5d29yZFwiOiB0cnVlfTtcblxuICBmdW5jdGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8pIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHtcbiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBjeCA9IHN0YXRlLmNvbnRleHQ7IGN4OyBjeCA9IGN4LnByZXYpIHtcbiAgICAgIGZvciAodmFyIHYgPSBjeC52YXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pIHtcbiAgICB2YXIgY2MgPSBzdGF0ZS5jYztcbiAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuXG4gICAgLy8gKExlc3Mgd2FzdGVmdWwgdGhhbiBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9zdXJlcyBvbiBldmVyeSBjYWxsLilcbiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7IGN4LnN0eWxlID0gc3R5bGU7XG5cbiAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKSlcbiAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSB0cnVlO1xuXG4gICAgd2hpbGUodHJ1ZSkge1xuICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDtcbiAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7XG4gICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpXG4gICAgICAgICAgY2MucG9wKCkoKTtcbiAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21iaW5hdG9yIHV0aWxzXG5cbiAgdmFyIGN4ID0ge3N0YXRlOiBudWxsLCBjb2x1bW46IG51bGwsIG1hcmtlZDogbnVsbCwgY2M6IG51bGx9O1xuICBmdW5jdGlvbiBwYXNzKCkge1xuICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgfVxuICBmdW5jdGlvbiBjb250KCkge1xuICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBpbkxpc3QobmFtZSwgbGlzdCkge1xuICAgIGZvciAodmFyIHYgPSBsaXN0OyB2OyB2ID0gdi5uZXh0KSBpZiAodi5uYW1lID09IG5hbWUpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhcm5hbWUpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBjeC5tYXJrZWQgPSBcImRlZlwiO1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC5pbmZvID09IFwidmFyXCIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LmJsb2NrKSB7XG4gICAgICAgIC8vIEZJWE1FIGZ1bmN0aW9uIGRlY2xzIGFyZSBhbHNvIG5vdCBibG9jayBzY29wZWRcbiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSByZWdpc3RlclZhclNjb3BlZCh2YXJuYW1lLCBzdGF0ZS5jb250ZXh0KVxuICAgICAgICBpZiAobmV3Q29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ld0NvbnRleHRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5MaXN0KHZhcm5hbWUsIHN0YXRlLmxvY2FsVmFycykpIHtcbiAgICAgICAgc3RhdGUubG9jYWxWYXJzID0gbmV3IFZhcih2YXJuYW1lLCBzdGF0ZS5sb2NhbFZhcnMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsIHRocm91Z2ggbWVhbnMgdGhpcyBpcyBnbG9iYWxcbiAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgJiYgIWluTGlzdCh2YXJuYW1lLCBzdGF0ZS5nbG9iYWxWYXJzKSlcbiAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBuZXcgVmFyKHZhcm5hbWUsIHN0YXRlLmdsb2JhbFZhcnMpXG4gIH1cbiAgZnVuY3Rpb24gcmVnaXN0ZXJWYXJTY29wZWQodmFybmFtZSwgY29udGV4dCkge1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQuYmxvY2spIHtcbiAgICAgIHZhciBpbm5lciA9IHJlZ2lzdGVyVmFyU2NvcGVkKHZhcm5hbWUsIGNvbnRleHQucHJldilcbiAgICAgIGlmICghaW5uZXIpIHJldHVybiBudWxsXG4gICAgICBpZiAoaW5uZXIgPT0gY29udGV4dC5wcmV2KSByZXR1cm4gY29udGV4dFxuICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KGlubmVyLCBjb250ZXh0LnZhcnMsIHRydWUpXG4gICAgfSBlbHNlIGlmIChpbkxpc3QodmFybmFtZSwgY29udGV4dC52YXJzKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KGNvbnRleHQucHJldiwgbmV3IFZhcih2YXJuYW1lLCBjb250ZXh0LnZhcnMpLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc01vZGlmaWVyKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSA9PSBcInB1YmxpY1wiIHx8IG5hbWUgPT0gXCJwcml2YXRlXCIgfHwgbmFtZSA9PSBcInByb3RlY3RlZFwiIHx8IG5hbWUgPT0gXCJhYnN0cmFjdFwiIHx8IG5hbWUgPT0gXCJyZWFkb25seVwiXG4gIH1cblxuICAvLyBDb21iaW5hdG9yc1xuXG4gIGZ1bmN0aW9uIENvbnRleHQocHJldiwgdmFycywgYmxvY2spIHsgdGhpcy5wcmV2ID0gcHJldjsgdGhpcy52YXJzID0gdmFyczsgdGhpcy5ibG9jayA9IGJsb2NrIH1cbiAgZnVuY3Rpb24gVmFyKG5hbWUsIG5leHQpIHsgdGhpcy5uYW1lID0gbmFtZTsgdGhpcy5uZXh0ID0gbmV4dCB9XG5cbiAgdmFyIGRlZmF1bHRWYXJzID0gbmV3IFZhcihcInRoaXNcIiwgbmV3IFZhcihcImFyZ3VtZW50c1wiLCBudWxsKSlcbiAgZnVuY3Rpb24gcHVzaGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGN4LnN0YXRlLmNvbnRleHQsIGN4LnN0YXRlLmxvY2FsVmFycywgZmFsc2UpXG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnNcbiAgfVxuICBmdW5jdGlvbiBwdXNoYmxvY2tjb250ZXh0KCkge1xuICAgIGN4LnN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChjeC5zdGF0ZS5jb250ZXh0LCBjeC5zdGF0ZS5sb2NhbFZhcnMsIHRydWUpXG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gbnVsbFxuICB9XG4gIGZ1bmN0aW9uIHBvcGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gY3guc3RhdGUuY29udGV4dC52YXJzXG4gICAgY3guc3RhdGUuY29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHQucHJldlxuICB9XG4gIHBvcGNvbnRleHQubGV4ID0gdHJ1ZVxuICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHtcbiAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZSwgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwic3RhdFwiKSBpbmRlbnQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkO1xuICAgICAgZWxzZSBmb3IgKHZhciBvdXRlciA9IHN0YXRlLmxleGljYWw7IG91dGVyICYmIG91dGVyLnR5cGUgPT0gXCIpXCIgJiYgb3V0ZXIuYWxpZ247IG91dGVyID0gb3V0ZXIucHJldilcbiAgICAgICAgaW5kZW50ID0gb3V0ZXIuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChpbmRlbnQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbyk7XG4gICAgfTtcbiAgICByZXN1bHQubGV4ID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGZ1bmN0aW9uIHBvcGxleCgpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBpZiAoc3RhdGUubGV4aWNhbC5wcmV2KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwiKVwiKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2O1xuICAgIH1cbiAgfVxuICBwb3BsZXgubGV4ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7XG4gICAgZnVuY3Rpb24gZXhwKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTtcbiAgICAgIGVsc2UgaWYgKHdhbnRlZCA9PSBcIjtcIiB8fCB0eXBlID09IFwifVwiIHx8IHR5cGUgPT0gXCIpXCIgfHwgdHlwZSA9PSBcIl1cIikgcmV0dXJuIHBhc3MoKTtcbiAgICAgIGVsc2UgcmV0dXJuIGNvbnQoZXhwKTtcbiAgICB9O1xuICAgIHJldHVybiBleHA7XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZW1lbnQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhclwiKSByZXR1cm4gY29udChwdXNobGV4KFwidmFyZGVmXCIsIHZhbHVlKSwgdmFyZGVmLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBhXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXJlbkV4cHIsIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgYlwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBkXCIpIHJldHVybiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqJC8sIGZhbHNlKSA/IGNvbnQoKSA6IGNvbnQocHVzaGxleChcInN0YXRcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImRlYnVnZ2VyXCIpIHJldHVybiBjb250KGV4cGVjdChcIjtcIikpO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgcHVzaGJsb2NrY29udGV4dCwgYmxvY2ssIHBvcGxleCwgcG9wY29udGV4dCk7XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHR5cGUgPT0gXCJpZlwiKSB7XG4gICAgICBpZiAoY3guc3RhdGUubGV4aWNhbC5pbmZvID09IFwiZWxzZVwiICYmIGN4LnN0YXRlLmNjW2N4LnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IHBvcGxleClcbiAgICAgICAgY3guc3RhdGUuY2MucG9wKCkoKTtcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXJlbkV4cHIsIHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTtcbiAgICBpZiAodHlwZSA9PSBcImZvclwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgZm9yc3BlYywgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwiY2xhc3NcIiB8fCAoaXNUUyAmJiB2YWx1ZSA9PSBcImludGVyZmFjZVwiKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIsIHR5cGUgPT0gXCJjbGFzc1wiID8gdHlwZSA6IHZhbHVlKSwgY2xhc3NOYW1lLCBwb3BsZXgpXG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJkZWNsYXJlXCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgICAgfSBlbHNlIGlmIChpc1RTICYmICh2YWx1ZSA9PSBcIm1vZHVsZVwiIHx8IHZhbHVlID09IFwiZW51bVwiIHx8IHZhbHVlID09IFwidHlwZVwiKSAmJiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqXFx3LywgZmFsc2UpKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcImVudW1cIikgcmV0dXJuIGNvbnQoZW51bWRlZik7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwidHlwZVwiKSByZXR1cm4gY29udCh0eXBlbmFtZSwgZXhwZWN0KFwib3BlcmF0b3JcIiksIHR5cGVleHByLCBleHBlY3QoXCI7XCIpKTtcbiAgICAgICAgZWxzZSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGF0dGVybiwgZXhwZWN0KFwie1wiKSwgcHVzaGxleChcIn1cIiksIGJsb2NrLCBwb3BsZXgsIHBvcGxleClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIm5hbWVzcGFjZVwiKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcImFic3RyYWN0XCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcInN0YXRcIiksIG1heWJlbGFiZWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInN3aXRjaFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGFyZW5FeHByLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiLCBcInN3aXRjaFwiKSwgcHVzaGJsb2NrY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcImNhc2VcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiOlwiKSk7XG4gICAgaWYgKHR5cGUgPT0gXCJkZWZhdWx0XCIpIHJldHVybiBjb250KGV4cGVjdChcIjpcIikpO1xuICAgIGlmICh0eXBlID09IFwiY2F0Y2hcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHB1c2hjb250ZXh0LCBtYXliZUNhdGNoQmluZGluZywgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpO1xuICAgIGlmICh0eXBlID09IFwiZXhwb3J0XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBhZnRlckV4cG9ydCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImltcG9ydFwiKSByZXR1cm4gY29udChwdXNobGV4KFwic3RhdFwiKSwgYWZ0ZXJJbXBvcnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiKSByZXR1cm4gY29udChzdGF0ZW1lbnQpXG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBzdGF0ZW1lbnQpXG4gICAgcmV0dXJuIHBhc3MocHVzaGxleChcInN0YXRcIiksIGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVDYXRjaEJpbmRpbmcodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChmdW5hcmcsIGV4cGVjdChcIilcIikpXG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlLCB2YWx1ZSkge1xuICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxuICBmdW5jdGlvbiBleHByZXNzaW9uTm9Db21tYSh0eXBlLCB2YWx1ZSkge1xuICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIHRydWUpO1xuICB9XG4gIGZ1bmN0aW9uIHBhcmVuRXhwcih0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCIoXCIpIHJldHVybiBwYXNzKClcbiAgICByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCIpXCIpLCBwb3BsZXgpXG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCBub0NvbW1hKSB7XG4gICAgaWYgKGN4LnN0YXRlLmZhdEFycm93QXQgPT0gY3guc3RyZWFtLnN0YXJ0KSB7XG4gICAgICB2YXIgYm9keSA9IG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5O1xuICAgICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KFwiKVwiKSwgY29tbWFzZXAoZnVuYXJnLCBcIilcIiksIHBvcGxleCwgZXhwZWN0KFwiPT5cIiksIGJvZHksIHBvcGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBwYXNzKHB1c2hjb250ZXh0LCBwYXR0ZXJuLCBleHBlY3QoXCI9PlwiKSwgYm9keSwgcG9wY29udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIG1heWJlb3AgPSBub0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEgOiBtYXliZW9wZXJhdG9yQ29tbWE7XG4gICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcImNsYXNzXCIgfHwgKGlzVFMgJiYgdmFsdWUgPT0gXCJpbnRlcmZhY2VcIikpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBjbGFzc0V4cHJlc3Npb24sIHBvcGxleCk7IH1cbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgY1wiIHx8IHR5cGUgPT0gXCJhc3luY1wiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiKVwiKSwgcG9wbGV4LCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgdHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnRDb21tYXNlcChvYmpwcm9wLCBcIn1cIiwgbnVsbCwgbWF5YmVvcCk7XG4gICAgaWYgKHR5cGUgPT0gXCJxdWFzaVwiKSByZXR1cm4gcGFzcyhxdWFzaSwgbWF5YmVvcCk7XG4gICAgaWYgKHR5cGUgPT0gXCJuZXdcIikgcmV0dXJuIGNvbnQobWF5YmVUYXJnZXQobm9Db21tYSkpO1xuICAgIGlmICh0eXBlID09IFwiaW1wb3J0XCIpIHJldHVybiBjb250KGV4cHJlc3Npb24pO1xuICAgIHJldHVybiBjb250KCk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHtcbiAgICBpZiAodHlwZS5tYXRjaCgvWztcXH1cXClcXF0sXS8pKSByZXR1cm4gcGFzcygpO1xuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG1heWJlb3BlcmF0b3JOb0NvbW1hKHR5cGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHtcbiAgICB2YXIgbWUgPSBub0NvbW1hID09IGZhbHNlID8gbWF5YmVvcGVyYXRvckNvbW1hIDogbWF5YmVvcGVyYXRvck5vQ29tbWE7XG4gICAgdmFyIGV4cHIgPSBub0NvbW1hID09IGZhbHNlID8gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25Ob0NvbW1hO1xuICAgIGlmICh0eXBlID09IFwiPT5cIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIpIHtcbiAgICAgIGlmICgvXFwrXFwrfC0tLy50ZXN0KHZhbHVlKSB8fCBpc1RTICYmIHZhbHVlID09IFwiIVwiKSByZXR1cm4gY29udChtZSk7XG4gICAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIiAmJiBjeC5zdHJlYW0ubWF0Y2goL14oW14+XXw8Lio/PikqPlxccypcXCgvLCBmYWxzZSkpXG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIG1lKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiOlwiKSwgZXhwcik7XG4gICAgICByZXR1cm4gY29udChleHByKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJxdWFzaVwiKSB7IHJldHVybiBwYXNzKHF1YXNpLCBtZSk7IH1cbiAgICBpZiAodHlwZSA9PSBcIjtcIikgcmV0dXJuO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udENvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCBcIilcIiwgXCJjYWxsXCIsIG1lKTtcbiAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1lKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiXVwiKSwgcG9wbGV4LCBtZSk7XG4gICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udCh0eXBlZXhwciwgbWUpIH1cbiAgICBpZiAodHlwZSA9PSBcInJlZ2V4cFwiKSB7XG4gICAgICBjeC5zdGF0ZS5sYXN0VHlwZSA9IGN4Lm1hcmtlZCA9IFwib3BlcmF0b3JcIlxuICAgICAgY3guc3RyZWFtLmJhY2tVcChjeC5zdHJlYW0ucG9zIC0gY3guc3RyZWFtLnN0YXJ0IC0gMSlcbiAgICAgIHJldHVybiBjb250KGV4cHIpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHF1YXNpKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJxdWFzaVwiKSByZXR1cm4gcGFzcygpO1xuICAgIGlmICh2YWx1ZS5zbGljZSh2YWx1ZS5sZW5ndGggLSAyKSAhPSBcIiR7XCIpIHJldHVybiBjb250KHF1YXNpKTtcbiAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBjb250aW51ZVF1YXNpKTtcbiAgfVxuICBmdW5jdGlvbiBjb250aW51ZVF1YXNpKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikge1xuICAgICAgY3gubWFya2VkID0gXCJzdHJpbmctMlwiO1xuICAgICAgY3guc3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpO1xuICAgICAgcmV0dXJuIGNvbnQocXVhc2kpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcnJvd0JvZHkodHlwZSkge1xuICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTtcbiAgICByZXR1cm4gcGFzcyh0eXBlID09IFwie1wiID8gc3RhdGVtZW50IDogZXhwcmVzc2lvbik7XG4gIH1cbiAgZnVuY3Rpb24gYXJyb3dCb2R5Tm9Db21tYSh0eXBlKSB7XG4gICAgZmluZEZhdEFycm93KGN4LnN0cmVhbSwgY3guc3RhdGUpO1xuICAgIHJldHVybiBwYXNzKHR5cGUgPT0gXCJ7XCIgPyBzdGF0ZW1lbnQgOiBleHByZXNzaW9uTm9Db21tYSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUYXJnZXQobm9Db21tYSkge1xuICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IHRhcmdldE5vQ29tbWEgOiB0YXJnZXQpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgaXNUUykgcmV0dXJuIGNvbnQobWF5YmVUeXBlQXJncywgbm9Db21tYSA/IG1heWJlb3BlcmF0b3JOb0NvbW1hIDogbWF5YmVvcGVyYXRvckNvbW1hKVxuICAgICAgZWxzZSByZXR1cm4gcGFzcyhub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHRhcmdldChfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcInRhcmdldFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZW9wZXJhdG9yQ29tbWEpOyB9XG4gIH1cbiAgZnVuY3Rpb24gdGFyZ2V0Tm9Db21tYShfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcInRhcmdldFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZW9wZXJhdG9yTm9Db21tYSk7IH1cbiAgfVxuICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpO1xuICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3JDb21tYSwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7Y3gubWFya2VkID0gXCJwcm9wZXJ0eVwiOyByZXR1cm4gY29udCgpO31cbiAgfVxuICBmdW5jdGlvbiBvYmpwcm9wKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICByZXR1cm4gY29udChvYmpwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IGN4LnN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICBpZiAodmFsdWUgPT0gXCJnZXRcIiB8fCB2YWx1ZSA9PSBcInNldFwiKSByZXR1cm4gY29udChnZXR0ZXJTZXR0ZXIpO1xuICAgICAgdmFyIG0gLy8gV29yayBhcm91bmQgZmF0LWFycm93LWRldGVjdGlvbiBjb21wbGljYXRpb24gZm9yIGRldGVjdGluZyB0eXBlc2NyaXB0IHR5cGVkIGFycm93IHBhcmFtc1xuICAgICAgaWYgKGlzVFMgJiYgY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQgJiYgKG0gPSBjeC5zdHJlYW0ubWF0Y2goL15cXHMqOlxccyovLCBmYWxzZSkpKVxuICAgICAgICBjeC5zdGF0ZS5mYXRBcnJvd0F0ID0gY3guc3RyZWFtLnBvcyArIG1bMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/IFwicHJvcGVydHlcIiA6IChjeC5zdHlsZSArIFwiIHByb3BlcnR5XCIpO1xuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJqc29ubGQta2V5d29yZFwiKSB7XG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KG9ianByb3ApXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiW1wiKSB7XG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBtYXliZXR5cGUsIGV4cGVjdChcIl1cIiksIGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHtcbiAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hLCBhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCIqXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQob2JqcHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiOlwiKSB7XG4gICAgICByZXR1cm4gcGFzcyhhZnRlcnByb3ApXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldHRlclNldHRlcih0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gcGFzcyhhZnRlcnByb3ApO1xuICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICByZXR1cm4gY29udChmdW5jdGlvbmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJwcm9wKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcGFzcyhmdW5jdGlvbmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gY29tbWFzZXAod2hhdCwgZW5kLCBzZXApIHtcbiAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAoc2VwID8gc2VwLmluZGV4T2YodHlwZSkgPiAtMSA6IHR5cGUgPT0gXCIsXCIpIHtcbiAgICAgICAgdmFyIGxleCA9IGN4LnN0YXRlLmxleGljYWw7XG4gICAgICAgIGlmIChsZXguaW5mbyA9PSBcImNhbGxcIikgbGV4LnBvcyA9IChsZXgucG9zIHx8IDApICsgMTtcbiAgICAgICAgcmV0dXJuIGNvbnQoZnVuY3Rpb24odHlwZSwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gcGFzcygpXG4gICAgICAgICAgcmV0dXJuIHBhc3Mod2hhdClcbiAgICAgICAgfSwgcHJvY2VlZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgaWYgKHNlcCAmJiBzZXAuaW5kZXhPZihcIjtcIikgPiAtMSkgcmV0dXJuIHBhc3Mod2hhdClcbiAgICAgIHJldHVybiBjb250KGV4cGVjdChlbmQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgcmV0dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjb250Q29tbWFzZXAod2hhdCwgZW5kLCBpbmZvKSB7XG4gICAgZm9yICh2YXIgaSA9IDM7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgcmV0dXJuIGNvbnQocHVzaGxleChlbmQsIGluZm8pLCBjb21tYXNlcCh3aGF0LCBlbmQpLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQsIGJsb2NrKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZXR5cGUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoaXNUUykge1xuICAgICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBjb250KHR5cGVleHByKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQobWF5YmV0eXBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmV0eXBlT3JJbih0eXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1RTICYmICh0eXBlID09IFwiOlwiIHx8IHZhbHVlID09IFwiaW5cIikpIHJldHVybiBjb250KHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlcmV0dHlwZSh0eXBlKSB7XG4gICAgaWYgKGlzVFMgJiYgdHlwZSA9PSBcIjpcIikge1xuICAgICAgaWYgKGN4LnN0cmVhbS5tYXRjaCgvXlxccypcXHcrXFxzK2lzXFxiLywgZmFsc2UpKSByZXR1cm4gY29udChleHByZXNzaW9uLCBpc0tXLCB0eXBlZXhwcilcbiAgICAgIGVsc2UgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGlzS1coXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJpc1wiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgcmV0dXJuIGNvbnQoKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0eXBlZXhwcih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImtleW9mXCIgfHwgdmFsdWUgPT0gXCJ0eXBlb2ZcIiB8fCB2YWx1ZSA9PSBcImluZmVyXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICByZXR1cm4gY29udCh2YWx1ZSA9PSBcInR5cGVvZlwiID8gZXhwcmVzc2lvbk5vQ29tbWEgOiB0eXBlZXhwcilcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IHZhbHVlID09IFwidm9pZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInR5cGVcIlxuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJUeXBlKVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdmFsdWUgPT0gXCImXCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIgfHwgdHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJhdG9tXCIpIHJldHVybiBjb250KGFmdGVyVHlwZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJdXCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCJdXCIsIFwiLFwiKSwgcG9wbGV4LCBhZnRlclR5cGUpXG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBjb21tYXNlcCh0eXBlcHJvcCwgXCJ9XCIsIFwiLDtcIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChjb21tYXNlcCh0eXBlYXJnLCBcIilcIiksIG1heWJlUmV0dXJuVHlwZSwgYWZ0ZXJUeXBlKVxuICAgIGlmICh0eXBlID09IFwiPFwiKSByZXR1cm4gY29udChjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCB0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBtYXliZVJldHVyblR5cGUodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiPT5cIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gdHlwZXByb3AodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgY3guc3R5bGUgPT0gXCJrZXl3b3JkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIlxuICAgICAgcmV0dXJuIGNvbnQodHlwZXByb3ApXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIj9cIiB8fCB0eXBlID09IFwibnVtYmVyXCIgfHwgdHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gY29udCh0eXBlcHJvcClcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIltcIikge1xuICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KFwidmFyaWFibGVcIiksIG1heWJldHlwZU9ySW4sIGV4cGVjdChcIl1cIiksIHR5cGVwcm9wKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIihcIikge1xuICAgICAgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWNsLCB0eXBlcHJvcClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdHlwZWFyZyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiAmJiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqWz86XS8sIGZhbHNlKSB8fCB2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQodHlwZWFyZylcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikgcmV0dXJuIGNvbnQodHlwZWFyZylcbiAgICByZXR1cm4gcGFzcyh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBhZnRlclR5cGUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdHlwZSA9PSBcIi5cIiB8fCB2YWx1ZSA9PSBcIiZcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KHR5cGVleHByLCBleHBlY3QoXCJdXCIpLCBhZnRlclR5cGUpXG4gICAgaWYgKHZhbHVlID09IFwiZXh0ZW5kc1wiIHx8IHZhbHVlID09IFwiaW1wbGVtZW50c1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udCh0eXBlZXhwcikgfVxuICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIGV4cGVjdChcIjpcIiksIHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlVHlwZUFyZ3MoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgfVxuICBmdW5jdGlvbiB0eXBlcGFyYW0oKSB7XG4gICAgcmV0dXJuIHBhc3ModHlwZWV4cHIsIG1heWJlVHlwZURlZmF1bHQpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUeXBlRGVmYXVsdChfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gdmFyZGVmKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiZW51bVwiKSB7Y3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGVudW1kZWYpfVxuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVBc3NpZ24sIHZhcmRlZkNvbnQpO1xuICB9XG4gIGZ1bmN0aW9uIHBhdHRlcm4odHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQocGF0dGVybikgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgeyByZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KCk7IH1cbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChwYXR0ZXJuKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnRDb21tYXNlcChlbHRwYXR0ZXJuLCBcIl1cIik7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250Q29tbWFzZXAocHJvcHBhdHRlcm4sIFwifVwiKTtcbiAgfVxuICBmdW5jdGlvbiBwcm9wcGF0dGVybih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiAmJiAhY3guc3RyZWFtLm1hdGNoKC9eXFxzKjovLCBmYWxzZSkpIHtcbiAgICAgIHJlZ2lzdGVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBjb250KG1heWJlQXNzaWduKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikgcmV0dXJuIGNvbnQocGF0dGVybik7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBwYXNzKCk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgnXScpLCBleHBlY3QoJzonKSwgcHJvcHBhdHRlcm4pO1xuICAgIHJldHVybiBjb250KGV4cGVjdChcIjpcIiksIHBhdHRlcm4sIG1heWJlQXNzaWduKTtcbiAgfVxuICBmdW5jdGlvbiBlbHRwYXR0ZXJuKCkge1xuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJlQXNzaWduKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlQXNzaWduKF90eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpO1xuICB9XG4gIGZ1bmN0aW9uIHZhcmRlZkNvbnQodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiLFwiKSByZXR1cm4gY29udCh2YXJkZWYpO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlZWxzZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBiXCIgJiYgdmFsdWUgPT0gXCJlbHNlXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIsIFwiZWxzZVwiKSwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGZvcnNwZWModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJhd2FpdFwiKSByZXR1cm4gY29udChmb3JzcGVjKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIGZvcnNwZWMxLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGZvcnNwZWMxKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhclwiKSByZXR1cm4gY29udCh2YXJkZWYsIGZvcnNwZWMyKTtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjb250KGZvcnNwZWMyKTtcbiAgICByZXR1cm4gcGFzcyhmb3JzcGVjMilcbiAgfVxuICBmdW5jdGlvbiBmb3JzcGVjMih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwiKVwiKSByZXR1cm4gY29udCgpXG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBjb250KGZvcnNwZWMyKVxuICAgIGlmICh2YWx1ZSA9PSBcImluXCIgfHwgdmFsdWUgPT0gXCJvZlwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBmb3JzcGVjMikgfVxuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24sIGZvcnNwZWMyKVxuICB9XG4gIGZ1bmN0aW9uIGZ1bmN0aW9uZGVmKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSB7Y3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgcHVzaGxleChcIilcIiksIGNvbW1hc2VwKGZ1bmFyZywgXCIpXCIpLCBwb3BsZXgsIG1heWJlcmV0dHlwZSwgc3RhdGVtZW50LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVwYXJhbSwgXCI+XCIpLCBwb3BsZXgsIGZ1bmN0aW9uZGVmKVxuICB9XG4gIGZ1bmN0aW9uIGZ1bmN0aW9uZGVjbCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikge2N4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChmdW5jdGlvbmRlY2wpO31cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVjbCk7fVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgcHVzaGxleChcIilcIiksIGNvbW1hc2VwKGZ1bmFyZywgXCIpXCIpLCBwb3BsZXgsIG1heWJlcmV0dHlwZSwgcG9wY29udGV4dCk7XG4gICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlcGFyYW0sIFwiPlwiKSwgcG9wbGV4LCBmdW5jdGlvbmRlY2wpXG4gIH1cbiAgZnVuY3Rpb24gdHlwZW5hbWUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmRcIiB8fCB0eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgY3gubWFya2VkID0gXCJ0eXBlXCJcbiAgICAgIHJldHVybiBjb250KHR5cGVuYW1lKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCI8XCIpIHtcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlcGFyYW0sIFwiPlwiKSwgcG9wbGV4KVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBmdW5hcmcodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJAXCIpIGNvbnQoZXhwcmVzc2lvbiwgZnVuYXJnKVxuICAgIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KGZ1bmFyZyk7XG4gICAgaWYgKGlzVFMgJiYgaXNNb2RpZmllcih2YWx1ZSkpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGZ1bmFyZyk7IH1cbiAgICBpZiAoaXNUUyAmJiB0eXBlID09IFwidGhpc1wiKSByZXR1cm4gY29udChtYXliZXR5cGUsIG1heWJlQXNzaWduKVxuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVBc3NpZ24pO1xuICB9XG4gIGZ1bmN0aW9uIGNsYXNzRXhwcmVzc2lvbih0eXBlLCB2YWx1ZSkge1xuICAgIC8vIENsYXNzIGV4cHJlc3Npb25zIG1heSBoYXZlIGFuIG9wdGlvbmFsIG5hbWUuXG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gY2xhc3NOYW1lKHR5cGUsIHZhbHVlKTtcbiAgICByZXR1cm4gY2xhc3NOYW1lQWZ0ZXIodHlwZSwgdmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIGNsYXNzTmFtZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoY2xhc3NOYW1lQWZ0ZXIpO31cbiAgfVxuICBmdW5jdGlvbiBjbGFzc05hbWVBZnRlcih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVwYXJhbSwgXCI+XCIpLCBwb3BsZXgsIGNsYXNzTmFtZUFmdGVyKVxuICAgIGlmICh2YWx1ZSA9PSBcImV4dGVuZHNcIiB8fCB2YWx1ZSA9PSBcImltcGxlbWVudHNcIiB8fCAoaXNUUyAmJiB0eXBlID09IFwiLFwiKSkge1xuICAgICAgaWYgKHZhbHVlID09IFwiaW1wbGVtZW50c1wiKSBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KGlzVFMgPyB0eXBlZXhwciA6IGV4cHJlc3Npb24sIGNsYXNzTmFtZUFmdGVyKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBjbGFzc0JvZHksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NCb2R5KHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiIHx8XG4gICAgICAgICh0eXBlID09IFwidmFyaWFibGVcIiAmJlxuICAgICAgICAgKHZhbHVlID09IFwic3RhdGljXCIgfHwgdmFsdWUgPT0gXCJnZXRcIiB8fCB2YWx1ZSA9PSBcInNldFwiIHx8IChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSkgJiZcbiAgICAgICAgIGN4LnN0cmVhbS5tYXRjaCgvXlxccytbXFx3JFxceGExLVxcdWZmZmZdLywgZmFsc2UpKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgICByZXR1cm4gY29udChjbGFzc0JvZHkpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgY3guc3R5bGUgPT0gXCJrZXl3b3JkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICAgIHJldHVybiBjb250KGlzVFMgPyBjbGFzc2ZpZWxkIDogZnVuY3Rpb25kZWYsIGNsYXNzQm9keSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwibnVtYmVyXCIgfHwgdHlwZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gY29udChpc1RTID8gY2xhc3NmaWVsZCA6IGZ1bmN0aW9uZGVmLCBjbGFzc0JvZHkpO1xuICAgIGlmICh0eXBlID09IFwiW1wiKVxuICAgICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgbWF5YmV0eXBlLCBleHBlY3QoXCJdXCIpLCBpc1RTID8gY2xhc3NmaWVsZCA6IGZ1bmN0aW9uZGVmLCBjbGFzc0JvZHkpXG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgfVxuICAgIGlmIChpc1RTICYmIHR5cGUgPT0gXCIoXCIpIHJldHVybiBwYXNzKGZ1bmN0aW9uZGVjbCwgY2xhc3NCb2R5KVxuICAgIGlmICh0eXBlID09IFwiO1wiIHx8IHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBjbGFzc0JvZHkpXG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NmaWVsZCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQoY2xhc3NmaWVsZClcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIG1heWJlQXNzaWduKVxuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpXG4gICAgdmFyIGNvbnRleHQgPSBjeC5zdGF0ZS5sZXhpY2FsLnByZXYsIGlzSW50ZXJmYWNlID0gY29udGV4dCAmJiBjb250ZXh0LmluZm8gPT0gXCJpbnRlcmZhY2VcIlxuICAgIHJldHVybiBwYXNzKGlzSW50ZXJmYWNlID8gZnVuY3Rpb25kZWNsIDogZnVuY3Rpb25kZWYpXG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJFeHBvcnQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KG1heWJlRnJvbSwgZXhwZWN0KFwiO1wiKSk7IH1cbiAgICBpZiAodmFsdWUgPT0gXCJkZWZhdWx0XCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIikpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4cG9ydEZpZWxkLCBcIn1cIiksIG1heWJlRnJvbSwgZXhwZWN0KFwiO1wiKSk7XG4gICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50KTtcbiAgfVxuICBmdW5jdGlvbiBleHBvcnRGaWVsZCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImFzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cGVjdChcInZhcmlhYmxlXCIpKTsgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEsIGV4cG9ydEZpZWxkKTtcbiAgfVxuICBmdW5jdGlvbiBhZnRlckltcG9ydCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIHBhc3MoaW1wb3J0U3BlYywgbWF5YmVNb3JlSW1wb3J0cywgbWF5YmVGcm9tKTtcbiAgfVxuICBmdW5jdGlvbiBpbXBvcnRTcGVjKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250Q29tbWFzZXAoaW1wb3J0U3BlYywgXCJ9XCIpO1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmVnaXN0ZXIodmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgcmV0dXJuIGNvbnQobWF5YmVBcyk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVNb3JlSW1wb3J0cyh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KGltcG9ydFNwZWMsIG1heWJlTW9yZUltcG9ydHMpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVBcyhfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChpbXBvcnRTcGVjKTsgfVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJmcm9tXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24pOyB9XG4gIH1cbiAgZnVuY3Rpb24gYXJyYXlMaXRlcmFsKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIl1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgXCJdXCIpKTtcbiAgfVxuICBmdW5jdGlvbiBlbnVtZGVmKCkge1xuICAgIHJldHVybiBwYXNzKHB1c2hsZXgoXCJmb3JtXCIpLCBwYXR0ZXJuLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiKSwgY29tbWFzZXAoZW51bW1lbWJlciwgXCJ9XCIpLCBwb3BsZXgsIHBvcGxleClcbiAgfVxuICBmdW5jdGlvbiBlbnVtbWVtYmVyKCkge1xuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJlQXNzaWduKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiIHx8XG4gICAgICBpc09wZXJhdG9yQ2hhci50ZXN0KHRleHRBZnRlci5jaGFyQXQoMCkpIHx8XG4gICAgICAvWywuXS8udGVzdCh0ZXh0QWZ0ZXIuY2hhckF0KDApKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIGJhY2tVcCkge1xuICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkJhc2UgJiZcbiAgICAgIC9eKD86b3BlcmF0b3J8c29mfGtleXdvcmQgW2JjZF18Y2FzZXxuZXd8ZXhwb3J0fGRlZmF1bHR8c3ByZWFkfFtcXFt7fVxcKCw7Ol18PT4pJC8udGVzdChzdGF0ZS5sYXN0VHlwZSkgfHxcbiAgICAgIChzdGF0ZS5sYXN0VHlwZSA9PSBcInF1YXNpXCIgJiYgL1xce1xccyokLy50ZXN0KHN0cmVhbS5zdHJpbmcuc2xpY2UoMCwgc3RyZWFtLnBvcyAtIChiYWNrVXAgfHwgMCkpKSlcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICBsYXN0VHlwZTogXCJzb2ZcIixcbiAgICAgICAgY2M6IFtdLFxuICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2FsKChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJibG9ja1wiLCBmYWxzZSksXG4gICAgICAgIGxvY2FsVmFyczogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyxcbiAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiBuZXcgQ29udGV4dChudWxsLCBudWxsLCBmYWxzZSksXG4gICAgICAgIGluZGVudGVkOiBiYXNlY29sdW1uIHx8IDBcbiAgICAgIH07XG4gICAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgJiYgdHlwZW9mIHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzID09IFwib2JqZWN0XCIpXG4gICAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBwYXJzZXJDb25maWcuZ2xvYmFsVmFycztcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIikpXG4gICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5Db21tZW50ICYmIHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHR5cGUgPT0gXCJjb21tZW50XCIpIHJldHVybiBzdHlsZTtcbiAgICAgIHN0YXRlLmxhc3RUeXBlID0gdHlwZSA9PSBcIm9wZXJhdG9yXCIgJiYgKGNvbnRlbnQgPT0gXCIrK1wiIHx8IGNvbnRlbnQgPT0gXCItLVwiKSA/IFwiaW5jZGVjXCIgOiB0eXBlO1xuICAgICAgcmV0dXJuIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsIHRvcFxuICAgICAgLy8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNlJyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2NvcGUgcG9wc1xuICAgICAgaWYgKCEvXlxccyplbHNlXFxiLy50ZXN0KHRleHRBZnRlcikpIGZvciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgYyA9IHN0YXRlLmNjW2ldO1xuICAgICAgICBpZiAoYyA9PSBwb3BsZXgpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7XG4gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNlKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHdoaWxlICgobGV4aWNhbC50eXBlID09IFwic3RhdFwiIHx8IGxleGljYWwudHlwZSA9PSBcImZvcm1cIikgJiZcbiAgICAgICAgICAgICAoZmlyc3RDaGFyID09IFwifVwiIHx8ICgodG9wID0gc3RhdGUuY2Nbc3RhdGUuY2MubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3AgPT0gbWF5YmVvcGVyYXRvckNvbW1hIHx8IHRvcCA9PSBtYXliZW9wZXJhdG9yTm9Db21tYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9eWyxcXC49K1xcLSo6P1tcXChdLy50ZXN0KHRleHRBZnRlcikpKSlcbiAgICAgICAgbGV4aWNhbCA9IGxleGljYWwucHJldjtcbiAgICAgIGlmIChzdGF0ZW1lbnRJbmRlbnQgJiYgbGV4aWNhbC50eXBlID09IFwiKVwiICYmIGxleGljYWwucHJldi50eXBlID09IFwic3RhdFwiKVxuICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2O1xuICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTtcblxuICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJkZWZcIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiID8gbGV4aWNhbC5pbmZvLmxlbmd0aCArIDEgOiAwKTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIgJiYgZmlyc3RDaGFyID09IFwie1wiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJzdGF0XCIpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSBcInN3aXRjaFwiICYmICFjbG9zaW5nICYmIHBhcnNlckNvbmZpZy5kb3VibGVJbmRlbnRTd2l0Y2ggIT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooPzpjYXNlIC4qPzp8ZGVmYXVsdDp8XFx7fFxcfSkkLyxcbiAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDoganNvbk1vZGUgPyBudWxsIDogXCIqL1wiLFxuICAgIGJsb2NrQ29tbWVudENvbnRpbnVlOiBqc29uTW9kZSA/IG51bGwgOiBcIiAqIFwiLFxuICAgIGxpbmVDb21tZW50OiBqc29uTW9kZSA/IG51bGwgOiBcIi8vXCIsXG4gICAgZm9sZDogXCJicmFjZVwiLFxuICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCIsXG5cbiAgICBoZWxwZXJUeXBlOiBqc29uTW9kZSA/IFwianNvblwiIDogXCJqYXZhc2NyaXB0XCIsXG4gICAganNvbmxkTW9kZToganNvbmxkTW9kZSxcbiAgICBqc29uTW9kZToganNvbk1vZGUsXG5cbiAgICBleHByZXNzaW9uQWxsb3dlZDogZXhwcmVzc2lvbkFsbG93ZWQsXG5cbiAgICBza2lwRXhwcmVzc2lvbjogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHZhciB0b3AgPSBzdGF0ZS5jY1tzdGF0ZS5jYy5sZW5ndGggLSAxXVxuICAgICAgaWYgKHRvcCA9PSBleHByZXNzaW9uIHx8IHRvcCA9PSBleHByZXNzaW9uTm9Db21tYSkgc3RhdGUuY2MucG9wKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcIndvcmRDaGFyc1wiLCBcImphdmFzY3JpcHRcIiwgL1tcXHckXS8pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9lY21hc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29ubGQ6IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8qKlxuICogVGFnLWNsb3NlciBleHRlbnNpb24gZm9yIENvZGVNaXJyb3IuXG4gKlxuICogVGhpcyBleHRlbnNpb24gYWRkcyBhbiBcImF1dG9DbG9zZVRhZ3NcIiBvcHRpb24gdGhhdCBjYW4gYmUgc2V0IHRvXG4gKiBlaXRoZXIgdHJ1ZSB0byBnZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIG9yIGFuIG9iamVjdCB0byBmdXJ0aGVyXG4gKiBjb25maWd1cmUgaXRzIGJlaGF2aW9yLlxuICpcbiAqIFRoZXNlIGFyZSBzdXBwb3J0ZWQgb3B0aW9uczpcbiAqXG4gKiBgd2hlbkNsb3NpbmdgIChkZWZhdWx0IHRydWUpXG4gKiAgIFdoZXRoZXIgdG8gYXV0b2Nsb3NlIHdoZW4gdGhlICcvJyBvZiBhIGNsb3NpbmcgdGFnIGlzIHR5cGVkLlxuICogYHdoZW5PcGVuaW5nYCAoZGVmYXVsdCB0cnVlKVxuICogICBXaGV0aGVyIHRvIGF1dG9jbG9zZSB0aGUgdGFnIHdoZW4gdGhlIGZpbmFsICc+JyBvZiBhbiBvcGVuaW5nXG4gKiAgIHRhZyBpcyB0eXBlZC5cbiAqIGBkb250Q2xvc2VUYWdzYCAoZGVmYXVsdCBpcyBlbXB0eSB0YWdzIGZvciBIVE1MLCBub25lIGZvciBYTUwpXG4gKiAgIEFuIGFycmF5IG9mIHRhZyBuYW1lcyB0aGF0IHNob3VsZCBub3QgYmUgYXV0b2Nsb3NlZC5cbiAqIGBpbmRlbnRUYWdzYCAoZGVmYXVsdCBpcyBibG9jayB0YWdzIGZvciBIVE1MLCBub25lIGZvciBYTUwpXG4gKiAgIEFuIGFycmF5IG9mIHRhZyBuYW1lcyB0aGF0IHNob3VsZCwgd2hlbiBvcGVuZWQsIGNhdXNlIGFcbiAqICAgYmxhbmsgbGluZSB0byBiZSBhZGRlZCBpbnNpZGUgdGhlIHRhZywgYW5kIHRoZSBibGFuayBsaW5lIGFuZFxuICogICBjbG9zaW5nIGxpbmUgdG8gYmUgaW5kZW50ZWQuXG4gKiBgZW1wdHlUYWdzYCAoZGVmYXVsdCBpcyBub25lKVxuICogICBBbiBhcnJheSBvZiBYTUwgdGFnIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGF1dG9jbG9zZWQgd2l0aCAnLz4nLlxuICpcbiAqIFNlZSBkZW1vcy9jbG9zZXRhZy5odG1sIGZvciBhIHVzYWdlIGV4YW1wbGUuXG4gKi9cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL2ZvbGQveG1sLWZvbGRcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9mb2xkL3htbC1mb2xkXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge1xuICAgIGlmIChvbGQgIT0gQ29kZU1pcnJvci5Jbml0ICYmIG9sZClcbiAgICAgIGNtLnJlbW92ZUtleU1hcChcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICB2YXIgbWFwID0ge25hbWU6IFwiYXV0b0Nsb3NlVGFnc1wifTtcbiAgICBpZiAodHlwZW9mIHZhbCAhPSBcIm9iamVjdFwiIHx8IHZhbC53aGVuQ2xvc2luZylcbiAgICAgIG1hcFtcIicvJ1wiXSA9IGZ1bmN0aW9uKGNtKSB7IHJldHVybiBhdXRvQ2xvc2VTbGFzaChjbSk7IH07XG4gICAgaWYgKHR5cGVvZiB2YWwgIT0gXCJvYmplY3RcIiB8fCB2YWwud2hlbk9wZW5pbmcpXG4gICAgICBtYXBbXCInPidcIl0gPSBmdW5jdGlvbihjbSkgeyByZXR1cm4gYXV0b0Nsb3NlR1QoY20pOyB9O1xuICAgIGNtLmFkZEtleU1hcChtYXApO1xuICB9KTtcblxuICB2YXIgaHRtbERvbnRDbG9zZSA9IFtcImFyZWFcIiwgXCJiYXNlXCIsIFwiYnJcIiwgXCJjb2xcIiwgXCJjb21tYW5kXCIsIFwiZW1iZWRcIiwgXCJoclwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwia2V5Z2VuXCIsIFwibGlua1wiLCBcIm1ldGFcIiwgXCJwYXJhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICBcInNvdXJjZVwiLCBcInRyYWNrXCIsIFwid2JyXCJdO1xuICB2YXIgaHRtbEluZGVudCA9IFtcImFwcGxldFwiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnV0dG9uXCIsIFwiZGl2XCIsIFwiZGxcIiwgXCJmaWVsZHNldFwiLCBcImZvcm1cIiwgXCJmcmFtZXNldFwiLCBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJodG1sXCIsIFwiaWZyYW1lXCIsIFwibGF5ZXJcIiwgXCJsZWdlbmRcIiwgXCJvYmplY3RcIiwgXCJvbFwiLCBcInBcIiwgXCJzZWxlY3RcIiwgXCJ0YWJsZVwiLCBcInVsXCJdO1xuXG4gIGZ1bmN0aW9uIGF1dG9DbG9zZUdUKGNtKSB7XG4gICAgaWYgKGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwgcmVwbGFjZW1lbnRzID0gW107XG4gICAgdmFyIG9wdCA9IGNtLmdldE9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmhlYWQsIHRvayA9IGNtLmdldFRva2VuQXQocG9zKTtcbiAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGNtLmdldE1vZGUoKSwgdG9rLnN0YXRlKSwgc3RhdGUgPSBpbm5lci5zdGF0ZTtcbiAgICAgIHZhciB0YWdJbmZvID0gaW5uZXIubW9kZS54bWxDdXJyZW50VGFnICYmIGlubmVyLm1vZGUueG1sQ3VycmVudFRhZyhzdGF0ZSlcbiAgICAgIHZhciB0YWdOYW1lID0gdGFnSW5mbyAmJiB0YWdJbmZvLm5hbWVcbiAgICAgIGlmICghdGFnTmFtZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzc1xuXG4gICAgICB2YXIgaHRtbCA9IGlubmVyLm1vZGUuY29uZmlndXJhdGlvbiA9PSBcImh0bWxcIjtcbiAgICAgIHZhciBkb250Q2xvc2VUYWdzID0gKHR5cGVvZiBvcHQgPT0gXCJvYmplY3RcIiAmJiBvcHQuZG9udENsb3NlVGFncykgfHwgKGh0bWwgJiYgaHRtbERvbnRDbG9zZSk7XG4gICAgICB2YXIgaW5kZW50VGFncyA9ICh0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmluZGVudFRhZ3MpIHx8IChodG1sICYmIGh0bWxJbmRlbnQpO1xuXG4gICAgICBpZiAodG9rLmVuZCA+IHBvcy5jaCkgdGFnTmFtZSA9IHRhZ05hbWUuc2xpY2UoMCwgdGFnTmFtZS5sZW5ndGggLSB0b2suZW5kICsgcG9zLmNoKTtcbiAgICAgIHZhciBsb3dlclRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAvLyBEb24ndCBwcm9jZXNzIHRoZSAnPicgYXQgdGhlIGVuZCBvZiBhbiBlbmQtdGFnIG9yIHNlbGYtY2xvc2luZyB0YWdcbiAgICAgIGlmICghdGFnTmFtZSB8fFxuICAgICAgICAgIHRvay50eXBlID09IFwic3RyaW5nXCIgJiYgKHRvay5lbmQgIT0gcG9zLmNoIHx8ICEvW1xcXCJcXCddLy50ZXN0KHRvay5zdHJpbmcuY2hhckF0KHRvay5zdHJpbmcubGVuZ3RoIC0gMSkpIHx8IHRvay5zdHJpbmcubGVuZ3RoID09IDEpIHx8XG4gICAgICAgICAgdG9rLnR5cGUgPT0gXCJ0YWdcIiAmJiB0YWdJbmZvLmNsb3NlIHx8XG4gICAgICAgICAgdG9rLnN0cmluZy5pbmRleE9mKFwiL1wiKSA9PSAocG9zLmNoIC0gdG9rLnN0YXJ0IC0gMSkgfHwgLy8gbWF0Y2ggc29tZXRoaW5nIGxpa2UgPHNvbWVUYWdOYW1lIC8+XG4gICAgICAgICAgZG9udENsb3NlVGFncyAmJiBpbmRleE9mKGRvbnRDbG9zZVRhZ3MsIGxvd2VyVGFnTmFtZSkgPiAtMSB8fFxuICAgICAgICAgIGNsb3NpbmdUYWdFeGlzdHMoY20sIGlubmVyLm1vZGUueG1sQ3VycmVudENvbnRleHQgJiYgaW5uZXIubW9kZS54bWxDdXJyZW50Q29udGV4dChzdGF0ZSkgfHwgW10sIHRhZ05hbWUsIHBvcywgdHJ1ZSkpXG4gICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG5cbiAgICAgIHZhciBlbXB0eVRhZ3MgPSB0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmVtcHR5VGFncztcbiAgICAgIGlmIChlbXB0eVRhZ3MgJiYgaW5kZXhPZihlbXB0eVRhZ3MsIHRhZ05hbWUpID4gLTEpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0geyB0ZXh0OiBcIi8+XCIsIG5ld1BvczogQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUsIHBvcy5jaCArIDIpIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZW50ID0gaW5kZW50VGFncyAmJiBpbmRleE9mKGluZGVudFRhZ3MsIGxvd2VyVGFnTmFtZSkgPiAtMTtcbiAgICAgIHJlcGxhY2VtZW50c1tpXSA9IHtpbmRlbnQ6IGluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIj5cIiArIChpbmRlbnQgPyBcIlxcblxcblwiIDogXCJcIikgKyBcIjwvXCIgKyB0YWdOYW1lICsgXCI+XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zOiBpbmRlbnQgPyBDb2RlTWlycm9yLlBvcyhwb3MubGluZSArIDEsIDApIDogQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpfTtcbiAgICB9XG5cbiAgICB2YXIgZG9udEluZGVudE9uQXV0b0Nsb3NlID0gKHR5cGVvZiBvcHQgPT0gXCJvYmplY3RcIiAmJiBvcHQuZG9udEluZGVudE9uQXV0b0Nsb3NlKTtcbiAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgaW5mbyA9IHJlcGxhY2VtZW50c1tpXTtcbiAgICAgIGNtLnJlcGxhY2VSYW5nZShpbmZvLnRleHQsIHJhbmdlc1tpXS5oZWFkLCByYW5nZXNbaV0uYW5jaG9yLCBcIitpbnNlcnRcIik7XG4gICAgICB2YXIgc2VsID0gY20ubGlzdFNlbGVjdGlvbnMoKS5zbGljZSgwKTtcbiAgICAgIHNlbFtpXSA9IHtoZWFkOiBpbmZvLm5ld1BvcywgYW5jaG9yOiBpbmZvLm5ld1Bvc307XG4gICAgICBjbS5zZXRTZWxlY3Rpb25zKHNlbCk7XG4gICAgICBpZiAoIWRvbnRJbmRlbnRPbkF1dG9DbG9zZSAmJiBpbmZvLmluZGVudCkge1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGluZm8ubmV3UG9zLmxpbmUsIG51bGwsIHRydWUpO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGluZm8ubmV3UG9zLmxpbmUgKyAxLCBudWxsLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvQ2xvc2VDdXJyZW50KGNtLCB0eXBpbmdTbGFzaCkge1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICB2YXIgaGVhZCA9IHR5cGluZ1NsYXNoID8gXCIvXCIgOiBcIjwvXCI7XG4gICAgdmFyIG9wdCA9IGNtLmdldE9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgdmFyIGRvbnRJbmRlbnRPbkF1dG9DbG9zZSA9ICh0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmRvbnRJbmRlbnRPblNsYXNoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBwb3MgPSByYW5nZXNbaV0uaGVhZCwgdG9rID0gY20uZ2V0VG9rZW5BdChwb3MpO1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoY20uZ2V0TW9kZSgpLCB0b2suc3RhdGUpLCBzdGF0ZSA9IGlubmVyLnN0YXRlO1xuICAgICAgaWYgKHR5cGluZ1NsYXNoICYmICh0b2sudHlwZSA9PSBcInN0cmluZ1wiIHx8IHRvay5zdHJpbmcuY2hhckF0KDApICE9IFwiPFwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvay5zdGFydCAhPSBwb3MuY2ggLSAxKSlcbiAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIC8vIEtsdWRnZSB0byBnZXQgYXJvdW5kIHRoZSBmYWN0IHRoYXQgd2UgYXJlIG5vdCBpbiBYTUwgbW9kZVxuICAgICAgLy8gd2hlbiBjb21wbGV0aW5nIGluIEpTL0NTUyBzbmlwcGV0IGluIGh0bWxtaXhlZCBtb2RlLiBEb2VzIG5vdFxuICAgICAgLy8gd29yayBmb3Igb3RoZXIgWE1MIGVtYmVkZGVkIGxhbmd1YWdlcyAodGhlcmUgaXMgbm8gZ2VuZXJhbFxuICAgICAgLy8gd2F5IHRvIGdvIGZyb20gYSBtaXhlZCBtb2RlIHRvIGl0cyBjdXJyZW50IFhNTCBzdGF0ZSkuXG4gICAgICB2YXIgcmVwbGFjZW1lbnQsIG1peGVkID0gaW5uZXIubW9kZS5uYW1lICE9IFwieG1sXCIgJiYgY20uZ2V0TW9kZSgpLm5hbWUgPT0gXCJodG1sbWl4ZWRcIlxuICAgICAgaWYgKG1peGVkICYmIGlubmVyLm1vZGUubmFtZSA9PSBcImphdmFzY3JpcHRcIikge1xuICAgICAgICByZXBsYWNlbWVudCA9IGhlYWQgKyBcInNjcmlwdFwiO1xuICAgICAgfSBlbHNlIGlmIChtaXhlZCAmJiBpbm5lci5tb2RlLm5hbWUgPT0gXCJjc3NcIikge1xuICAgICAgICByZXBsYWNlbWVudCA9IGhlYWQgKyBcInN0eWxlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY29udGV4dCA9IGlubmVyLm1vZGUueG1sQ3VycmVudENvbnRleHQgJiYgaW5uZXIubW9kZS54bWxDdXJyZW50Q29udGV4dChzdGF0ZSlcbiAgICAgICAgaWYgKCFjb250ZXh0IHx8IChjb250ZXh0Lmxlbmd0aCAmJiBjbG9zaW5nVGFnRXhpc3RzKGNtLCBjb250ZXh0LCBjb250ZXh0W2NvbnRleHQubGVuZ3RoIC0gMV0sIHBvcykpKVxuICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICAgIHJlcGxhY2VtZW50ID0gaGVhZCArIGNvbnRleHRbY29udGV4dC5sZW5ndGggLSAxXVxuICAgICAgfVxuICAgICAgaWYgKGNtLmdldExpbmUocG9zLmxpbmUpLmNoYXJBdCh0b2suZW5kKSAhPSBcIj5cIikgcmVwbGFjZW1lbnQgKz0gXCI+XCI7XG4gICAgICByZXBsYWNlbWVudHNbaV0gPSByZXBsYWNlbWVudDtcbiAgICB9XG4gICAgY20ucmVwbGFjZVNlbGVjdGlvbnMocmVwbGFjZW1lbnRzKTtcbiAgICByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIGlmICghZG9udEluZGVudE9uQXV0b0Nsb3NlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKGkgPT0gcmFuZ2VzLmxlbmd0aCAtIDEgfHwgcmFuZ2VzW2ldLmhlYWQubGluZSA8IHJhbmdlc1tpICsgMV0uaGVhZC5saW5lKVxuICAgICAgICAgICAgICAgIGNtLmluZGVudExpbmUocmFuZ2VzW2ldLmhlYWQubGluZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXV0b0Nsb3NlU2xhc2goY20pIHtcbiAgICBpZiAoY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIHJldHVybiBhdXRvQ2xvc2VDdXJyZW50KGNtLCB0cnVlKTtcbiAgfVxuXG4gIENvZGVNaXJyb3IuY29tbWFuZHMuY2xvc2VUYWcgPSBmdW5jdGlvbihjbSkgeyByZXR1cm4gYXV0b0Nsb3NlQ3VycmVudChjbSk7IH07XG5cbiAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbHQpIHtcbiAgICBpZiAoY29sbGVjdGlvbi5pbmRleE9mKSByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsdCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGU7ICsraSlcbiAgICAgIGlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gSWYgeG1sLWZvbGQgaXMgbG9hZGVkLCB3ZSB1c2UgaXRzIGZ1bmN0aW9uYWxpdHkgdG8gdHJ5IGFuZCB2ZXJpZnlcbiAgLy8gd2hldGhlciBhIGdpdmVuIHRhZyBpcyBhY3R1YWxseSB1bmNsb3NlZC5cbiAgZnVuY3Rpb24gY2xvc2luZ1RhZ0V4aXN0cyhjbSwgY29udGV4dCwgdGFnTmFtZSwgcG9zLCBuZXdUYWcpIHtcbiAgICBpZiAoIUNvZGVNaXJyb3Iuc2NhbkZvckNsb3NpbmdUYWcpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgZW5kID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSArIDEsIHBvcy5saW5lICsgNTAwKTtcbiAgICB2YXIgbmV4dENsb3NlID0gQ29kZU1pcnJvci5zY2FuRm9yQ2xvc2luZ1RhZyhjbSwgcG9zLCBudWxsLCBlbmQpO1xuICAgIGlmICghbmV4dENsb3NlIHx8IG5leHRDbG9zZS50YWcgIT0gdGFnTmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIElmIHRoZSBpbW1lZGlhdGUgd3JhcHBpbmcgY29udGV4dCBjb250YWlucyBvbkN4IGluc3RhbmNlcyBvZlxuICAgIC8vIHRoZSBzYW1lIHRhZywgYSBjbG9zaW5nIHRhZyBvbmx5IGV4aXN0cyBpZiB0aGVyZSBhcmUgYXQgbGVhc3RcbiAgICAvLyB0aGF0IG1hbnkgY2xvc2luZyB0YWdzIG9mIHRoYXQgdHlwZSBmb2xsb3dpbmcuXG4gICAgdmFyIG9uQ3ggPSBuZXdUYWcgPyAxIDogMFxuICAgIGZvciAodmFyIGkgPSBjb250ZXh0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29udGV4dFtpXSA9PSB0YWdOYW1lKSArK29uQ3hcbiAgICAgIGVsc2UgYnJlYWtcbiAgICB9XG4gICAgcG9zID0gbmV4dENsb3NlLnRvO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb25DeDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IENvZGVNaXJyb3Iuc2NhbkZvckNsb3NpbmdUYWcoY20sIHBvcywgbnVsbCwgZW5kKTtcbiAgICAgIGlmICghbmV4dCB8fCBuZXh0LnRhZyAhPSB0YWdOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICBwb3MgPSBuZXh0LnRvO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgbGlzdFJFID0gL14oXFxzKikoPls+IF0qfFsqKy1dIFxcW1t4IF1cXF1cXHN8WyorLV1cXHN8KFxcZCspKFsuKV0pKShcXHMqKS8sXG4gICAgICBlbXB0eUxpc3RSRSA9IC9eKFxccyopKD5bPiBdKnxbKistXSBcXFtbeCBdXFxdfFsqKy1dfChcXGQrKVsuKV0pKFxccyopJC8sXG4gICAgICB1bm9yZGVyZWRMaXN0UkUgPSAvWyorLV1cXHMvO1xuXG4gIENvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0ID0gZnVuY3Rpb24oY20pIHtcbiAgICBpZiAoY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5oZWFkO1xuXG4gICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gTWFya2Rvd24gbW9kZSwgZmFsbCBiYWNrIHRvIG5vcm1hbCBuZXdsaW5lQW5kSW5kZW50XG4gICAgICB2YXIgZW9sU3RhdGUgPSBjbS5nZXRTdGF0ZUFmdGVyKHBvcy5saW5lKTtcbiAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGNtLmdldE1vZGUoKSwgZW9sU3RhdGUpO1xuICAgICAgaWYgKGlubmVyLm1vZGUubmFtZSAhPT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwibmV3bGluZUFuZEluZGVudFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW9sU3RhdGUgPSBpbm5lci5zdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluTGlzdCA9IGVvbFN0YXRlLmxpc3QgIT09IGZhbHNlO1xuICAgICAgdmFyIGluUXVvdGUgPSBlb2xTdGF0ZS5xdW90ZSAhPT0gMDtcblxuICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKHBvcy5saW5lKSwgbWF0Y2ggPSBsaXN0UkUuZXhlYyhsaW5lKTtcbiAgICAgIHZhciBjdXJzb3JCZWZvcmVCdWxsZXQgPSAvXlxccyokLy50ZXN0KGxpbmUuc2xpY2UoMCwgcG9zLmNoKSk7XG4gICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpIHx8ICghaW5MaXN0ICYmICFpblF1b3RlKSB8fCAhbWF0Y2ggfHwgY3Vyc29yQmVmb3JlQnVsbGV0KSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwibmV3bGluZUFuZEluZGVudFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVtcHR5TGlzdFJFLnRlc3QobGluZSkpIHtcbiAgICAgICAgdmFyIGVuZE9mUXVvdGUgPSBpblF1b3RlICYmIC8+XFxzKiQvLnRlc3QobGluZSlcbiAgICAgICAgdmFyIGVuZE9mTGlzdCA9ICEvPlxccyokLy50ZXN0KGxpbmUpXG4gICAgICAgIGlmIChlbmRPZlF1b3RlIHx8IGVuZE9mTGlzdCkgY20ucmVwbGFjZVJhbmdlKFwiXCIsIHtcbiAgICAgICAgICBsaW5lOiBwb3MubGluZSwgY2g6IDBcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxpbmU6IHBvcy5saW5lLCBjaDogcG9zLmNoICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbmRlbnQgPSBtYXRjaFsxXSwgYWZ0ZXIgPSBtYXRjaFs1XTtcbiAgICAgICAgdmFyIG51bWJlcmVkID0gISh1bm9yZGVyZWRMaXN0UkUudGVzdChtYXRjaFsyXSkgfHwgbWF0Y2hbMl0uaW5kZXhPZihcIj5cIikgPj0gMCk7XG4gICAgICAgIHZhciBidWxsZXQgPSBudW1iZXJlZCA/IChwYXJzZUludChtYXRjaFszXSwgMTApICsgMSkgKyBtYXRjaFs0XSA6IG1hdGNoWzJdLnJlcGxhY2UoXCJ4XCIsIFwiIFwiKTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIiArIGluZGVudCArIGJ1bGxldCArIGFmdGVyO1xuXG4gICAgICAgIGlmIChudW1iZXJlZCkgaW5jcmVtZW50UmVtYWluaW5nTWFya2Rvd25MaXN0TnVtYmVycyhjbSwgcG9zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhyZXBsYWNlbWVudHMpO1xuICB9O1xuXG4gIC8vIEF1dG8tdXBkYXRpbmcgTWFya2Rvd24gbGlzdCBudW1iZXJzIHdoZW4gYSBuZXcgaXRlbSBpcyBhZGRlZCB0byB0aGVcbiAgLy8gbWlkZGxlIG9mIGEgbGlzdFxuICBmdW5jdGlvbiBpbmNyZW1lbnRSZW1haW5pbmdNYXJrZG93bkxpc3ROdW1iZXJzKGNtLCBwb3MpIHtcbiAgICB2YXIgc3RhcnRMaW5lID0gcG9zLmxpbmUsIGxvb2tBaGVhZCA9IDAsIHNraXBDb3VudCA9IDA7XG4gICAgdmFyIHN0YXJ0SXRlbSA9IGxpc3RSRS5leGVjKGNtLmdldExpbmUoc3RhcnRMaW5lKSksIHN0YXJ0SW5kZW50ID0gc3RhcnRJdGVtWzFdO1xuXG4gICAgZG8ge1xuICAgICAgbG9va0FoZWFkICs9IDE7XG4gICAgICB2YXIgbmV4dExpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsb29rQWhlYWQ7XG4gICAgICB2YXIgbmV4dExpbmUgPSBjbS5nZXRMaW5lKG5leHRMaW5lTnVtYmVyKSwgbmV4dEl0ZW0gPSBsaXN0UkUuZXhlYyhuZXh0TGluZSk7XG5cbiAgICAgIGlmIChuZXh0SXRlbSkge1xuICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHRJdGVtWzFdO1xuICAgICAgICB2YXIgbmV3TnVtYmVyID0gKHBhcnNlSW50KHN0YXJ0SXRlbVszXSwgMTApICsgbG9va0FoZWFkIC0gc2tpcENvdW50KTtcbiAgICAgICAgdmFyIG5leHROdW1iZXIgPSAocGFyc2VJbnQobmV4dEl0ZW1bM10sIDEwKSksIGl0ZW1OdW1iZXIgPSBuZXh0TnVtYmVyO1xuXG4gICAgICAgIGlmIChzdGFydEluZGVudCA9PT0gbmV4dEluZGVudCAmJiAhaXNOYU4obmV4dE51bWJlcikpIHtcbiAgICAgICAgICBpZiAobmV3TnVtYmVyID09PSBuZXh0TnVtYmVyKSBpdGVtTnVtYmVyID0gbmV4dE51bWJlciArIDE7XG4gICAgICAgICAgaWYgKG5ld051bWJlciA+IG5leHROdW1iZXIpIGl0ZW1OdW1iZXIgPSBuZXdOdW1iZXIgKyAxO1xuICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShcbiAgICAgICAgICAgIG5leHRMaW5lLnJlcGxhY2UobGlzdFJFLCBuZXh0SW5kZW50ICsgaXRlbU51bWJlciArIG5leHRJdGVtWzRdICsgbmV4dEl0ZW1bNV0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogMFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogbmV4dExpbmUubGVuZ3RoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0YXJ0SW5kZW50Lmxlbmd0aCA+IG5leHRJbmRlbnQubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHJ1biBpZiB0aGUgbmV4dCBsaW5lIGltbWVkaWF0bGV5IGluZGVudHMsIGFzIGl0IGlzXG4gICAgICAgICAgLy8gbm90IGNsZWFyIG9mIHRoZSB1c2VycyBpbnRlbnRpb24gKG5ldyBpbmRlbnRlZCBpdGVtIG9yIHNhbWUgbGV2ZWwpXG4gICAgICAgICAgaWYgKChzdGFydEluZGVudC5sZW5ndGggPCBuZXh0SW5kZW50Lmxlbmd0aCkgJiYgKGxvb2tBaGVhZCA9PT0gMSkpIHJldHVybjtcbiAgICAgICAgICBza2lwQ291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRJdGVtKTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgcGFpcnM6IFwiKClbXXt9JydcXFwiXFxcIlwiLFxuICAgIGNsb3NlQmVmb3JlOiBcIildfSdcXFwiOjs+XCIsXG4gICAgdHJpcGxlczogXCJcIixcbiAgICBleHBsb2RlOiBcIltde31cIlxuICB9O1xuXG4gIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvcztcblxuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcImF1dG9DbG9zZUJyYWNrZXRzXCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtcbiAgICBpZiAob2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQpIHtcbiAgICAgIGNtLnJlbW92ZUtleU1hcChrZXlNYXApO1xuICAgICAgY20uc3RhdGUuY2xvc2VCcmFja2V0cyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2YWwpIHtcbiAgICAgIGVuc3VyZUJvdW5kKGdldE9wdGlvbih2YWwsIFwicGFpcnNcIikpXG4gICAgICBjbS5zdGF0ZS5jbG9zZUJyYWNrZXRzID0gdmFsO1xuICAgICAgY20uYWRkS2V5TWFwKGtleU1hcCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRPcHRpb24oY29uZiwgbmFtZSkge1xuICAgIGlmIChuYW1lID09IFwicGFpcnNcIiAmJiB0eXBlb2YgY29uZiA9PSBcInN0cmluZ1wiKSByZXR1cm4gY29uZjtcbiAgICBpZiAodHlwZW9mIGNvbmYgPT0gXCJvYmplY3RcIiAmJiBjb25mW25hbWVdICE9IG51bGwpIHJldHVybiBjb25mW25hbWVdO1xuICAgIHJldHVybiBkZWZhdWx0c1tuYW1lXTtcbiAgfVxuXG4gIHZhciBrZXlNYXAgPSB7QmFja3NwYWNlOiBoYW5kbGVCYWNrc3BhY2UsIEVudGVyOiBoYW5kbGVFbnRlcn07XG4gIGZ1bmN0aW9uIGVuc3VyZUJvdW5kKGNoYXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoID0gY2hhcnMuY2hhckF0KGkpLCBrZXkgPSBcIidcIiArIGNoICsgXCInXCJcbiAgICAgIGlmICgha2V5TWFwW2tleV0pIGtleU1hcFtrZXldID0gaGFuZGxlcihjaClcbiAgICB9XG4gIH1cbiAgZW5zdXJlQm91bmQoZGVmYXVsdHMucGFpcnMgKyBcImBcIilcblxuICBmdW5jdGlvbiBoYW5kbGVyKGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7IHJldHVybiBoYW5kbGVDaGFyKGNtLCBjaCk7IH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb25maWcoY20pIHtcbiAgICB2YXIgZGVmbHQgPSBjbS5zdGF0ZS5jbG9zZUJyYWNrZXRzO1xuICAgIGlmICghZGVmbHQgfHwgZGVmbHQub3ZlcnJpZGUpIHJldHVybiBkZWZsdDtcbiAgICB2YXIgbW9kZSA9IGNtLmdldE1vZGVBdChjbS5nZXRDdXJzb3IoKSk7XG4gICAgcmV0dXJuIG1vZGUuY2xvc2VCcmFja2V0cyB8fCBkZWZsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUJhY2tzcGFjZShjbSkge1xuICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTtcbiAgICBpZiAoIWNvbmYgfHwgY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgdmFyIHBhaXJzID0gZ2V0T3B0aW9uKGNvbmYsIFwicGFpcnNcIik7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB2YXIgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIHJhbmdlc1tpXS5oZWFkKTtcbiAgICAgIGlmICghYXJvdW5kIHx8IHBhaXJzLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkO1xuICAgICAgY20ucmVwbGFjZVJhbmdlKFwiXCIsIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSksIFwiK2RlbGV0ZVwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFbnRlcihjbSkge1xuICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTtcbiAgICB2YXIgZXhwbG9kZSA9IGNvbmYgJiYgZ2V0T3B0aW9uKGNvbmYsIFwiZXhwbG9kZVwiKTtcbiAgICBpZiAoIWV4cGxvZGUgfHwgY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB2YXIgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIHJhbmdlc1tpXS5oZWFkKTtcbiAgICAgIGlmICghYXJvdW5kIHx8IGV4cGxvZGUuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIH1cbiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZXNlcCA9IGNtLmxpbmVTZXBhcmF0b3IoKSB8fCBcIlxcblwiO1xuICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsaW5lc2VwICsgbGluZXNlcCwgbnVsbCk7XG4gICAgICBjbS5leGVjQ29tbWFuZChcImdvQ2hhckxlZnRcIik7XG4gICAgICByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSByYW5nZXNbaV0uaGVhZC5saW5lO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGxpbmUsIG51bGwsIHRydWUpO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGxpbmUgKyAxLCBudWxsLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRyYWN0U2VsZWN0aW9uKHNlbCkge1xuICAgIHZhciBpbnZlcnRlZCA9IENvZGVNaXJyb3IuY21wUG9zKHNlbC5hbmNob3IsIHNlbC5oZWFkKSA+IDA7XG4gICAgcmV0dXJuIHthbmNob3I6IG5ldyBQb3Moc2VsLmFuY2hvci5saW5lLCBzZWwuYW5jaG9yLmNoICsgKGludmVydGVkID8gLTEgOiAxKSksXG4gICAgICAgICAgICBoZWFkOiBuZXcgUG9zKHNlbC5oZWFkLmxpbmUsIHNlbC5oZWFkLmNoICsgKGludmVydGVkID8gMSA6IC0xKSl9O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhcihjbSwgY2gpIHtcbiAgICB2YXIgY29uZiA9IGdldENvbmZpZyhjbSk7XG4gICAgaWYgKCFjb25mIHx8IGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgIHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCBcInBhaXJzXCIpO1xuICAgIHZhciBwb3MgPSBwYWlycy5pbmRleE9mKGNoKTtcbiAgICBpZiAocG9zID09IC0xKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgdmFyIGNsb3NlQmVmb3JlID0gZ2V0T3B0aW9uKGNvbmYsXCJjbG9zZUJlZm9yZVwiKTtcblxuICAgIHZhciB0cmlwbGVzID0gZ2V0T3B0aW9uKGNvbmYsIFwidHJpcGxlc1wiKTtcblxuICAgIHZhciBpZGVudGljYWwgPSBwYWlycy5jaGFyQXQocG9zICsgMSkgPT0gY2g7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgdmFyIG9wZW5pbmcgPSBwb3MgJSAyID09IDA7XG5cbiAgICB2YXIgdHlwZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldLCBjdXIgPSByYW5nZS5oZWFkLCBjdXJUeXBlO1xuICAgICAgdmFyIG5leHQgPSBjbS5nZXRSYW5nZShjdXIsIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpO1xuICAgICAgaWYgKG9wZW5pbmcgJiYgIXJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgY3VyVHlwZSA9IFwic3Vycm91bmRcIjtcbiAgICAgIH0gZWxzZSBpZiAoKGlkZW50aWNhbCB8fCAhb3BlbmluZykgJiYgbmV4dCA9PSBjaCkge1xuICAgICAgICBpZiAoaWRlbnRpY2FsICYmIHN0cmluZ1N0YXJ0c0FmdGVyKGNtLCBjdXIpKVxuICAgICAgICAgIGN1clR5cGUgPSBcImJvdGhcIjtcbiAgICAgICAgZWxzZSBpZiAodHJpcGxlcy5pbmRleE9mKGNoKSA+PSAwICYmIGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAzKSkgPT0gY2ggKyBjaCArIGNoKVxuICAgICAgICAgIGN1clR5cGUgPSBcInNraXBUaHJlZVwiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY3VyVHlwZSA9IFwic2tpcFwiO1xuICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwgJiYgY3VyLmNoID4gMSAmJiB0cmlwbGVzLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgY20uZ2V0UmFuZ2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyKSA9PSBjaCArIGNoKSB7XG4gICAgICAgIGlmIChjdXIuY2ggPiAyICYmIC9cXGJzdHJpbmcvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSkpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgICBjdXJUeXBlID0gXCJhZGRGb3VyXCI7XG4gICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCkge1xuICAgICAgICB2YXIgcHJldiA9IGN1ci5jaCA9PSAwID8gXCIgXCIgOiBjbS5nZXRSYW5nZShQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBjdXIpXG4gICAgICAgIGlmICghQ29kZU1pcnJvci5pc1dvcmRDaGFyKG5leHQpICYmIHByZXYgIT0gY2ggJiYgIUNvZGVNaXJyb3IuaXNXb3JkQ2hhcihwcmV2KSkgY3VyVHlwZSA9IFwiYm90aFwiO1xuICAgICAgICBlbHNlIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB9IGVsc2UgaWYgKG9wZW5pbmcgJiYgKG5leHQubGVuZ3RoID09PSAwIHx8IC9cXHMvLnRlc3QobmV4dCkgfHwgY2xvc2VCZWZvcmUuaW5kZXhPZihuZXh0KSA+IC0xKSkge1xuICAgICAgICBjdXJUeXBlID0gXCJib3RoXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgfVxuICAgICAgaWYgKCF0eXBlKSB0eXBlID0gY3VyVHlwZTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgIT0gY3VyVHlwZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB9XG5cbiAgICB2YXIgbGVmdCA9IHBvcyAlIDIgPyBwYWlycy5jaGFyQXQocG9zIC0gMSkgOiBjaDtcbiAgICB2YXIgcmlnaHQgPSBwb3MgJSAyID8gY2ggOiBwYWlycy5jaGFyQXQocG9zICsgMSk7XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHR5cGUgPT0gXCJza2lwXCIpIHtcbiAgICAgICAgY20uZXhlY0NvbW1hbmQoXCJnb0NoYXJSaWdodFwiKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInNraXBUaHJlZVwiKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKVxuICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKFwiZ29DaGFyUmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzdXJyb3VuZFwiKSB7XG4gICAgICAgIHZhciBzZWxzID0gY20uZ2V0U2VsZWN0aW9ucygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ldICsgcmlnaHQ7XG4gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMsIFwiYXJvdW5kXCIpO1xuICAgICAgICBzZWxzID0gY20ubGlzdFNlbGVjdGlvbnMoKS5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgc2Vsc1tpXSA9IGNvbnRyYWN0U2VsZWN0aW9uKHNlbHNbaV0pO1xuICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHNlbHMpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYm90aFwiKSB7XG4gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIHJpZ2h0LCBudWxsKTtcbiAgICAgICAgY20udHJpZ2dlckVsZWN0cmljKGxlZnQgKyByaWdodCk7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwiZ29DaGFyTGVmdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFkZEZvdXJcIikge1xuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGxlZnQgKyBsZWZ0ICsgbGVmdCArIGxlZnQsIFwiYmVmb3JlXCIpO1xuICAgICAgICBjbS5leGVjQ29tbWFuZChcImdvQ2hhclJpZ2h0XCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhcnNBcm91bmQoY20sIHBvcykge1xuICAgIHZhciBzdHIgPSBjbS5nZXRSYW5nZShQb3MocG9zLmxpbmUsIHBvcy5jaCAtIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpKTtcbiAgICByZXR1cm4gc3RyLmxlbmd0aCA9PSAyID8gc3RyIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ1N0YXJ0c0FmdGVyKGNtLCBwb3MpIHtcbiAgICB2YXIgdG9rZW4gPSBjbS5nZXRUb2tlbkF0KFBvcyhwb3MubGluZSwgcG9zLmNoICsgMSkpXG4gICAgcmV0dXJuIC9cXGJzdHJpbmcvLnRlc3QodG9rZW4udHlwZSkgJiYgdG9rZW4uc3RhcnQgPT0gcG9zLmNoICYmXG4gICAgICAocG9zLmNoID09IDAgfHwgIS9cXGJzdHJpbmcvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQocG9zKSkpXG4gIH1cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oXCJhbm5vdGF0ZVNjcm9sbGJhclwiLCBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwic3RyaW5nXCIpIG9wdGlvbnMgPSB7Y2xhc3NOYW1lOiBvcHRpb25zfTtcbiAgICByZXR1cm4gbmV3IEFubm90YXRpb24odGhpcywgb3B0aW9ucyk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwic2Nyb2xsQnV0dG9uSGVpZ2h0XCIsIDApO1xuXG4gIGZ1bmN0aW9uIEFubm90YXRpb24oY20sIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmJ1dHRvbkhlaWdodCA9IG9wdGlvbnMuc2Nyb2xsQnV0dG9uSGVpZ2h0IHx8IGNtLmdldE9wdGlvbihcInNjcm9sbEJ1dHRvbkhlaWdodFwiKTtcbiAgICB0aGlzLmFubm90YXRpb25zID0gW107XG4gICAgdGhpcy5kb1JlZHJhdyA9IHRoaXMuZG9VcGRhdGUgPSBudWxsO1xuICAgIHRoaXMuZGl2ID0gY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICB0aGlzLmRpdi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAwOyB0b3A6IDA7IHotaW5kZXg6IDc7IHBvaW50ZXItZXZlbnRzOiBub25lXCI7XG4gICAgdGhpcy5jb21wdXRlU2NhbGUoKTtcblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmVkcmF3KGRlbGF5KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5kb1JlZHJhdyk7XG4gICAgICBzZWxmLmRvUmVkcmF3ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5yZWRyYXcoKTsgfSwgZGVsYXkpO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBjbS5vbihcInJlZnJlc2hcIiwgdGhpcy5yZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5kb1VwZGF0ZSk7XG4gICAgICBzZWxmLmRvVXBkYXRlID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHNlbGYuY29tcHV0ZVNjYWxlKCkpIHNjaGVkdWxlUmVkcmF3KDIwKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gICAgY20ub24oXCJtYXJrZXJBZGRlZFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgIGNtLm9uKFwibWFya2VyQ2xlYXJlZFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgIGlmIChvcHRpb25zLmxpc3RlbkZvckNoYW5nZXMgIT09IGZhbHNlKVxuICAgICAgY20ub24oXCJjaGFuZ2VzXCIsIHRoaXMuY2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzY2hlZHVsZVJlZHJhdygyNTApO1xuICAgICAgfSk7XG4gIH1cblxuICBBbm5vdGF0aW9uLnByb3RvdHlwZS5jb21wdXRlU2NhbGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY20gPSB0aGlzLmNtO1xuICAgIHZhciBoU2NhbGUgPSAoY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5jbGllbnRIZWlnaHQgLSBjbS5kaXNwbGF5LmJhckhlaWdodCAtIHRoaXMuYnV0dG9uSGVpZ2h0ICogMikgL1xuICAgICAgY20uZ2V0U2Nyb2xsZXJFbGVtZW50KCkuc2Nyb2xsSGVpZ2h0XG4gICAgaWYgKGhTY2FsZSAhPSB0aGlzLmhTY2FsZSkge1xuICAgICAgdGhpcy5oU2NhbGUgPSBoU2NhbGU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgQW5ub3RhdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHtcbiAgICB0aGlzLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfTtcblxuICBBbm5vdGF0aW9uLnByb3RvdHlwZS5yZWRyYXcgPSBmdW5jdGlvbihjb21wdXRlKSB7XG4gICAgaWYgKGNvbXB1dGUgIT09IGZhbHNlKSB0aGlzLmNvbXB1dGVTY2FsZSgpO1xuICAgIHZhciBjbSA9IHRoaXMuY20sIGhTY2FsZSA9IHRoaXMuaFNjYWxlO1xuXG4gICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGFubnMgPSB0aGlzLmFubm90YXRpb25zO1xuXG4gICAgdmFyIHdyYXBwaW5nID0gY20uZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpO1xuICAgIHZhciBzaW5nbGVMaW5lSCA9IHdyYXBwaW5nICYmIGNtLmRlZmF1bHRUZXh0SGVpZ2h0KCkgKiAxLjU7XG4gICAgdmFyIGN1ckxpbmUgPSBudWxsLCBjdXJMaW5lT2JqID0gbnVsbDtcbiAgICBmdW5jdGlvbiBnZXRZKHBvcywgdG9wKSB7XG4gICAgICBpZiAoY3VyTGluZSAhPSBwb3MubGluZSkge1xuICAgICAgICBjdXJMaW5lID0gcG9zLmxpbmU7XG4gICAgICAgIGN1ckxpbmVPYmogPSBjbS5nZXRMaW5lSGFuZGxlKGN1ckxpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKChjdXJMaW5lT2JqLndpZGdldHMgJiYgY3VyTGluZU9iai53aWRnZXRzLmxlbmd0aCkgfHxcbiAgICAgICAgICAod3JhcHBpbmcgJiYgY3VyTGluZU9iai5oZWlnaHQgPiBzaW5nbGVMaW5lSCkpXG4gICAgICAgIHJldHVybiBjbS5jaGFyQ29vcmRzKHBvcywgXCJsb2NhbFwiKVt0b3AgPyBcInRvcFwiIDogXCJib3R0b21cIl07XG4gICAgICB2YXIgdG9wWSA9IGNtLmhlaWdodEF0TGluZShjdXJMaW5lT2JqLCBcImxvY2FsXCIpO1xuICAgICAgcmV0dXJuIHRvcFkgKyAodG9wID8gMCA6IGN1ckxpbmVPYmouaGVpZ2h0KTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdExpbmUgPSBjbS5sYXN0TGluZSgpXG4gICAgaWYgKGNtLmRpc3BsYXkuYmFyV2lkdGgpIGZvciAodmFyIGkgPSAwLCBuZXh0VG9wOyBpIDwgYW5ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGFubiA9IGFubnNbaV07XG4gICAgICBpZiAoYW5uLnRvLmxpbmUgPiBsYXN0TGluZSkgY29udGludWU7XG4gICAgICB2YXIgdG9wID0gbmV4dFRvcCB8fCBnZXRZKGFubi5mcm9tLCB0cnVlKSAqIGhTY2FsZTtcbiAgICAgIHZhciBib3R0b20gPSBnZXRZKGFubi50bywgZmFsc2UpICogaFNjYWxlO1xuICAgICAgd2hpbGUgKGkgPCBhbm5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKGFubnNbaSArIDFdLnRvLmxpbmUgPiBsYXN0TGluZSkgYnJlYWs7XG4gICAgICAgIG5leHRUb3AgPSBnZXRZKGFubnNbaSArIDFdLmZyb20sIHRydWUpICogaFNjYWxlO1xuICAgICAgICBpZiAobmV4dFRvcCA+IGJvdHRvbSArIC45KSBicmVhaztcbiAgICAgICAgYW5uID0gYW5uc1srK2ldO1xuICAgICAgICBib3R0b20gPSBnZXRZKGFubi50bywgZmFsc2UpICogaFNjYWxlO1xuICAgICAgfVxuICAgICAgaWYgKGJvdHRvbSA9PSB0b3ApIGNvbnRpbnVlO1xuICAgICAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMyk7XG5cbiAgICAgIHZhciBlbHQgPSBmcmFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgZWx0LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDBweDsgd2lkdGg6IFwiICsgTWF0aC5tYXgoY20uZGlzcGxheS5iYXJXaWR0aCAtIDEsIDIpICsgXCJweDsgdG9wOiBcIlxuICAgICAgICArICh0b3AgKyB0aGlzLmJ1dHRvbkhlaWdodCkgKyBcInB4OyBoZWlnaHQ6IFwiICsgaGVpZ2h0ICsgXCJweFwiO1xuICAgICAgZWx0LmNsYXNzTmFtZSA9IHRoaXMub3B0aW9ucy5jbGFzc05hbWU7XG4gICAgICBpZiAoYW5uLmlkKSB7XG4gICAgICAgIGVsdC5zZXRBdHRyaWJ1dGUoXCJhbm5vdGF0aW9uLWlkXCIsIGFubi5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGl2LnRleHRDb250ZW50ID0gXCJcIjtcbiAgICB0aGlzLmRpdi5hcHBlbmRDaGlsZChmcmFnKTtcbiAgfTtcblxuICBBbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY20ub2ZmKFwicmVmcmVzaFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgIHRoaXMuY20ub2ZmKFwibWFya2VyQWRkZWRcIiwgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICB0aGlzLmNtLm9mZihcIm1hcmtlckNsZWFyZWRcIiwgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5jaGFuZ2VIYW5kbGVyKSB0aGlzLmNtLm9mZihcImNoYW5nZXNcIiwgdGhpcy5jaGFuZ2VIYW5kbGVyKTtcbiAgICB0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcbiAgfTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBXUkFQX0NMQVNTID0gXCJDb2RlTWlycm9yLWFjdGl2ZWxpbmVcIjtcbiAgdmFyIEJBQ0tfQ0xBU1MgPSBcIkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kXCI7XG4gIHZhciBHVVRUX0NMQVNTID0gXCJDb2RlTWlycm9yLWFjdGl2ZWxpbmUtZ3V0dGVyXCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJzdHlsZUFjdGl2ZUxpbmVcIiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge1xuICAgIHZhciBwcmV2ID0gb2xkID09IENvZGVNaXJyb3IuSW5pdCA/IGZhbHNlIDogb2xkO1xuICAgIGlmICh2YWwgPT0gcHJldikgcmV0dXJuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGNtLm9mZihcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBzZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgY2xlYXJBY3RpdmVMaW5lcyhjbSk7XG4gICAgICBkZWxldGUgY20uc3RhdGUuYWN0aXZlTGluZXM7XG4gICAgfVxuICAgIGlmICh2YWwpIHtcbiAgICAgIGNtLnN0YXRlLmFjdGl2ZUxpbmVzID0gW107XG4gICAgICB1cGRhdGVBY3RpdmVMaW5lcyhjbSwgY20ubGlzdFNlbGVjdGlvbnMoKSk7XG4gICAgICBjbS5vbihcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBzZWxlY3Rpb25DaGFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2xlYXJBY3RpdmVMaW5lcyhjbSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uc3RhdGUuYWN0aXZlTGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNtLnJlbW92ZUxpbmVDbGFzcyhjbS5zdGF0ZS5hY3RpdmVMaW5lc1tpXSwgXCJ3cmFwXCIsIFdSQVBfQ0xBU1MpO1xuICAgICAgY20ucmVtb3ZlTGluZUNsYXNzKGNtLnN0YXRlLmFjdGl2ZUxpbmVzW2ldLCBcImJhY2tncm91bmRcIiwgQkFDS19DTEFTUyk7XG4gICAgICBjbS5yZW1vdmVMaW5lQ2xhc3MoY20uc3RhdGUuYWN0aXZlTGluZXNbaV0sIFwiZ3V0dGVyXCIsIEdVVFRfQ0xBU1MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhbWVBcnJheShhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZlTGluZXMoY20sIHJhbmdlcykge1xuICAgIHZhciBhY3RpdmUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgdmFyIG9wdGlvbiA9IGNtLmdldE9wdGlvbihcInN0eWxlQWN0aXZlTGluZVwiKTtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09IFwib2JqZWN0XCIgJiYgb3B0aW9uLm5vbkVtcHR5ID8gcmFuZ2UuYW5jaG9yLmxpbmUgIT0gcmFuZ2UuaGVhZC5saW5lIDogIXJhbmdlLmVtcHR5KCkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB2YXIgbGluZSA9IGNtLmdldExpbmVIYW5kbGVWaXN1YWxTdGFydChyYW5nZS5oZWFkLmxpbmUpO1xuICAgICAgaWYgKGFjdGl2ZVthY3RpdmUubGVuZ3RoIC0gMV0gIT0gbGluZSkgYWN0aXZlLnB1c2gobGluZSk7XG4gICAgfVxuICAgIGlmIChzYW1lQXJyYXkoY20uc3RhdGUuYWN0aXZlTGluZXMsIGFjdGl2ZSkpIHJldHVybjtcbiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhckFjdGl2ZUxpbmVzKGNtKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aXZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNtLmFkZExpbmVDbGFzcyhhY3RpdmVbaV0sIFwid3JhcFwiLCBXUkFQX0NMQVNTKTtcbiAgICAgICAgY20uYWRkTGluZUNsYXNzKGFjdGl2ZVtpXSwgXCJiYWNrZ3JvdW5kXCIsIEJBQ0tfQ0xBU1MpO1xuICAgICAgICBjbS5hZGRMaW5lQ2xhc3MoYWN0aXZlW2ldLCBcImd1dHRlclwiLCBHVVRUX0NMQVNTKTtcbiAgICAgIH1cbiAgICAgIGNtLnN0YXRlLmFjdGl2ZUxpbmVzID0gYWN0aXZlO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uQ2hhbmdlKGNtLCBzZWwpIHtcbiAgICB1cGRhdGVBY3RpdmVMaW5lcyhjbSwgc2VsLnJhbmdlcyk7XG4gIH1cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gQmVjYXVzZSBzb21ldGltZXMgeW91IG5lZWQgdG8gbWFyayB0aGUgc2VsZWN0ZWQgKnRleHQqLlxuLy9cbi8vIEFkZHMgYW4gb3B0aW9uICdzdHlsZVNlbGVjdGVkVGV4dCcgd2hpY2gsIHdoZW4gZW5hYmxlZCwgZ2l2ZXNcbi8vIHNlbGVjdGVkIHRleHQgdGhlIENTUyBjbGFzcyBnaXZlbiBhcyBvcHRpb24gdmFsdWUsIG9yXG4vLyBcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCIgd2hlbiB0aGUgdmFsdWUgaXMgbm90IGEgc3RyaW5nLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcInN0eWxlU2VsZWN0ZWRUZXh0XCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtcbiAgICB2YXIgcHJldiA9IG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0O1xuICAgIGlmICh2YWwgJiYgIXByZXYpIHtcbiAgICAgIGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbiA9IFtdO1xuICAgICAgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGUgPSB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgPyB2YWwgOiBcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCI7XG4gICAgICByZXNldChjbSk7XG4gICAgICBjbS5vbihcImN1cnNvckFjdGl2aXR5XCIsIG9uQ3Vyc29yQWN0aXZpdHkpO1xuICAgICAgY20ub24oXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgIH0gZWxzZSBpZiAoIXZhbCAmJiBwcmV2KSB7XG4gICAgICBjbS5vZmYoXCJjdXJzb3JBY3Rpdml0eVwiLCBvbkN1cnNvckFjdGl2aXR5KTtcbiAgICAgIGNtLm9mZihcImNoYW5nZVwiLCBvbkNoYW5nZSk7XG4gICAgICBjbGVhcihjbSk7XG4gICAgICBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb25TdHlsZSA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBvbkN1cnNvckFjdGl2aXR5KGNtKSB7XG4gICAgaWYgKGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbilcbiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgdXBkYXRlKGNtKTsgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShjbSkge1xuICAgIGlmIChjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gJiYgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uLmxlbmd0aClcbiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgY2xlYXIoY20pOyB9KTtcbiAgfVxuXG4gIHZhciBDSFVOS19TSVpFID0gODtcbiAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zO1xuICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3M7XG5cbiAgZnVuY3Rpb24gY292ZXJSYW5nZShjbSwgZnJvbSwgdG8sIGFkZEF0KSB7XG4gICAgaWYgKGNtcChmcm9tLCB0bykgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBhcnJheSA9IGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtcbiAgICB2YXIgY2xzID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGU7XG4gICAgZm9yICh2YXIgbGluZSA9IGZyb20ubGluZTs7KSB7XG4gICAgICB2YXIgc3RhcnQgPSBsaW5lID09IGZyb20ubGluZSA/IGZyb20gOiBQb3MobGluZSwgMCk7XG4gICAgICB2YXIgZW5kTGluZSA9IGxpbmUgKyBDSFVOS19TSVpFLCBhdEVuZCA9IGVuZExpbmUgPj0gdG8ubGluZTtcbiAgICAgIHZhciBlbmQgPSBhdEVuZCA/IHRvIDogUG9zKGVuZExpbmUsIDApO1xuICAgICAgdmFyIG1hcmsgPSBjbS5tYXJrVGV4dChzdGFydCwgZW5kLCB7Y2xhc3NOYW1lOiBjbHN9KTtcbiAgICAgIGlmIChhZGRBdCA9PSBudWxsKSBhcnJheS5wdXNoKG1hcmspO1xuICAgICAgZWxzZSBhcnJheS5zcGxpY2UoYWRkQXQrKywgMCwgbWFyayk7XG4gICAgICBpZiAoYXRFbmQpIGJyZWFrO1xuICAgICAgbGluZSA9IGVuZExpbmU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoY20pIHtcbiAgICB2YXIgYXJyYXkgPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb247XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgYXJyYXlbaV0uY2xlYXIoKTtcbiAgICBhcnJheS5sZW5ndGggPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoY20pIHtcbiAgICBjbGVhcihjbSk7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICBjb3ZlclJhbmdlKGNtLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoY20pIHtcbiAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBjbGVhcihjbSk7XG4gICAgaWYgKGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoID4gMSkgcmV0dXJuIHJlc2V0KGNtKTtcblxuICAgIHZhciBmcm9tID0gY20uZ2V0Q3Vyc29yKFwic3RhcnRcIiksIHRvID0gY20uZ2V0Q3Vyc29yKFwiZW5kXCIpO1xuXG4gICAgdmFyIGFycmF5ID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uO1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSByZXR1cm4gY292ZXJSYW5nZShjbSwgZnJvbSwgdG8pO1xuXG4gICAgdmFyIGNvdmVyU3RhcnQgPSBhcnJheVswXS5maW5kKCksIGNvdmVyRW5kID0gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0uZmluZCgpO1xuICAgIGlmICghY292ZXJTdGFydCB8fCAhY292ZXJFbmQgfHwgdG8ubGluZSAtIGZyb20ubGluZSA8PSBDSFVOS19TSVpFIHx8XG4gICAgICAgIGNtcChmcm9tLCBjb3ZlckVuZC50bykgPj0gMCB8fCBjbXAodG8sIGNvdmVyU3RhcnQuZnJvbSkgPD0gMClcbiAgICAgIHJldHVybiByZXNldChjbSk7XG5cbiAgICB3aGlsZSAoY21wKGZyb20sIGNvdmVyU3RhcnQuZnJvbSkgPiAwKSB7XG4gICAgICBhcnJheS5zaGlmdCgpLmNsZWFyKCk7XG4gICAgICBjb3ZlclN0YXJ0ID0gYXJyYXlbMF0uZmluZCgpO1xuICAgIH1cbiAgICBpZiAoY21wKGZyb20sIGNvdmVyU3RhcnQuZnJvbSkgPCAwKSB7XG4gICAgICBpZiAoY292ZXJTdGFydC50by5saW5lIC0gZnJvbS5saW5lIDwgQ0hVTktfU0laRSkge1xuICAgICAgICBhcnJheS5zaGlmdCgpLmNsZWFyKCk7XG4gICAgICAgIGNvdmVyUmFuZ2UoY20sIGZyb20sIGNvdmVyU3RhcnQudG8sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY292ZXJSYW5nZShjbSwgZnJvbSwgY292ZXJTdGFydC5mcm9tLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAoY21wKHRvLCBjb3ZlckVuZC50bykgPCAwKSB7XG4gICAgICBhcnJheS5wb3AoKS5jbGVhcigpO1xuICAgICAgY292ZXJFbmQgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXS5maW5kKCk7XG4gICAgfVxuICAgIGlmIChjbXAodG8sIGNvdmVyRW5kLnRvKSA+IDApIHtcbiAgICAgIGlmICh0by5saW5lIC0gY292ZXJFbmQuZnJvbS5saW5lIDwgQ0hVTktfU0laRSkge1xuICAgICAgICBhcnJheS5wb3AoKS5jbGVhcigpO1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBjb3ZlckVuZC5mcm9tLCB0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBjb3ZlckVuZC50bywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi9mb2xkY29kZVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4vZm9sZGNvZGVcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwiZm9sZEd1dHRlclwiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgaWYgKG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0KSB7XG4gICAgICBjbS5jbGVhckd1dHRlcihjbS5zdGF0ZS5mb2xkR3V0dGVyLm9wdGlvbnMuZ3V0dGVyKTtcbiAgICAgIGNtLnN0YXRlLmZvbGRHdXR0ZXIgPSBudWxsO1xuICAgICAgY20ub2ZmKFwiZ3V0dGVyQ2xpY2tcIiwgb25HdXR0ZXJDbGljayk7XG4gICAgICBjbS5vZmYoXCJjaGFuZ2VzXCIsIG9uQ2hhbmdlKTtcbiAgICAgIGNtLm9mZihcInZpZXdwb3J0Q2hhbmdlXCIsIG9uVmlld3BvcnRDaGFuZ2UpO1xuICAgICAgY20ub2ZmKFwiZm9sZFwiLCBvbkZvbGQpO1xuICAgICAgY20ub2ZmKFwidW5mb2xkXCIsIG9uRm9sZCk7XG4gICAgICBjbS5vZmYoXCJzd2FwRG9jXCIsIG9uQ2hhbmdlKTtcbiAgICB9XG4gICAgaWYgKHZhbCkge1xuICAgICAgY20uc3RhdGUuZm9sZEd1dHRlciA9IG5ldyBTdGF0ZShwYXJzZU9wdGlvbnModmFsKSk7XG4gICAgICB1cGRhdGVJblZpZXdwb3J0KGNtKTtcbiAgICAgIGNtLm9uKFwiZ3V0dGVyQ2xpY2tcIiwgb25HdXR0ZXJDbGljayk7XG4gICAgICBjbS5vbihcImNoYW5nZXNcIiwgb25DaGFuZ2UpO1xuICAgICAgY20ub24oXCJ2aWV3cG9ydENoYW5nZVwiLCBvblZpZXdwb3J0Q2hhbmdlKTtcbiAgICAgIGNtLm9uKFwiZm9sZFwiLCBvbkZvbGQpO1xuICAgICAgY20ub24oXCJ1bmZvbGRcIiwgb25Gb2xkKTtcbiAgICAgIGNtLm9uKFwic3dhcERvY1wiLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7XG5cbiAgZnVuY3Rpb24gU3RhdGUob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5mcm9tID0gdGhpcy50byA9IDA7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmIChvcHRzID09PSB0cnVlKSBvcHRzID0ge307XG4gICAgaWYgKG9wdHMuZ3V0dGVyID09IG51bGwpIG9wdHMuZ3V0dGVyID0gXCJDb2RlTWlycm9yLWZvbGRndXR0ZXJcIjtcbiAgICBpZiAob3B0cy5pbmRpY2F0b3JPcGVuID09IG51bGwpIG9wdHMuaW5kaWNhdG9yT3BlbiA9IFwiQ29kZU1pcnJvci1mb2xkZ3V0dGVyLW9wZW5cIjtcbiAgICBpZiAob3B0cy5pbmRpY2F0b3JGb2xkZWQgPT0gbnVsbCkgb3B0cy5pbmRpY2F0b3JGb2xkZWQgPSBcIkNvZGVNaXJyb3ItZm9sZGd1dHRlci1mb2xkZWRcIjtcbiAgICByZXR1cm4gb3B0cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRm9sZGVkKGNtLCBsaW5lKSB7XG4gICAgdmFyIG1hcmtzID0gY20uZmluZE1hcmtzKFBvcyhsaW5lLCAwKSwgUG9zKGxpbmUgKyAxLCAwKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG1hcmtzW2ldLl9faXNGb2xkKSB7XG4gICAgICAgIHZhciBmcm9tUG9zID0gbWFya3NbaV0uZmluZCgtMSk7XG4gICAgICAgIGlmIChmcm9tUG9zICYmIGZyb21Qb3MubGluZSA9PT0gbGluZSlcbiAgICAgICAgICByZXR1cm4gbWFya3NbaV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya2VyKHNwZWMpIHtcbiAgICBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIGVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBlbHQuY2xhc3NOYW1lID0gc3BlYyArIFwiIENvZGVNaXJyb3ItZ3V0dGVybWFya2VyLXN1YnRsZVwiO1xuICAgICAgcmV0dXJuIGVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNwZWMuY2xvbmVOb2RlKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZvbGRJbmZvKGNtLCBmcm9tLCB0bykge1xuICAgIHZhciBvcHRzID0gY20uc3RhdGUuZm9sZEd1dHRlci5vcHRpb25zLCBjdXIgPSBmcm9tIC0gMTtcbiAgICB2YXIgbWluU2l6ZSA9IGNtLmZvbGRPcHRpb24ob3B0cywgXCJtaW5Gb2xkU2l6ZVwiKTtcbiAgICB2YXIgZnVuYyA9IGNtLmZvbGRPcHRpb24ob3B0cywgXCJyYW5nZUZpbmRlclwiKTtcbiAgICAvLyB3ZSBjYW4gcmV1c2UgdGhlIGJ1aWx0LWluIGluZGljYXRvciBlbGVtZW50IGlmIGl0cyBjbGFzc05hbWUgbWF0Y2hlcyB0aGUgbmV3IHN0YXRlXG4gICAgdmFyIGNsc0ZvbGRlZCA9IHR5cGVvZiBvcHRzLmluZGljYXRvckZvbGRlZCA9PSBcInN0cmluZ1wiICYmIGNsYXNzVGVzdChvcHRzLmluZGljYXRvckZvbGRlZCk7XG4gICAgdmFyIGNsc09wZW4gPSB0eXBlb2Ygb3B0cy5pbmRpY2F0b3JPcGVuID09IFwic3RyaW5nXCIgJiYgY2xhc3NUZXN0KG9wdHMuaW5kaWNhdG9yT3Blbik7XG4gICAgY20uZWFjaExpbmUoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICsrY3VyO1xuICAgICAgdmFyIG1hcmsgPSBudWxsO1xuICAgICAgdmFyIG9sZCA9IGxpbmUuZ3V0dGVyTWFya2VycztcbiAgICAgIGlmIChvbGQpIG9sZCA9IG9sZFtvcHRzLmd1dHRlcl07XG4gICAgICBpZiAoaXNGb2xkZWQoY20sIGN1cikpIHtcbiAgICAgICAgaWYgKGNsc0ZvbGRlZCAmJiBvbGQgJiYgY2xzRm9sZGVkLnRlc3Qob2xkLmNsYXNzTmFtZSkpIHJldHVybjtcbiAgICAgICAgbWFyayA9IG1hcmtlcihvcHRzLmluZGljYXRvckZvbGRlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcG9zID0gUG9zKGN1ciwgMCk7XG4gICAgICAgIHZhciByYW5nZSA9IGZ1bmMgJiYgZnVuYyhjbSwgcG9zKTtcbiAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLnRvLmxpbmUgLSByYW5nZS5mcm9tLmxpbmUgPj0gbWluU2l6ZSkge1xuICAgICAgICAgIGlmIChjbHNPcGVuICYmIG9sZCAmJiBjbHNPcGVuLnRlc3Qob2xkLmNsYXNzTmFtZSkpIHJldHVybjtcbiAgICAgICAgICBtYXJrID0gbWFya2VyKG9wdHMuaW5kaWNhdG9yT3Blbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbWFyayAmJiAhb2xkKSByZXR1cm47XG4gICAgICBjbS5zZXRHdXR0ZXJNYXJrZXIobGluZSwgb3B0cy5ndXR0ZXIsIG1hcmspO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY29waWVkIGZyb20gQ29kZU1pcnJvci9zcmMvdXRpbC9kb20uanNcbiAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xzICsgXCIoPzokfFxcXFxzKVxcXFxzKlwiKSB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlSW5WaWV3cG9ydChjbSkge1xuICAgIHZhciB2cCA9IGNtLmdldFZpZXdwb3J0KCksIHN0YXRlID0gY20uc3RhdGUuZm9sZEd1dHRlcjtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgdXBkYXRlRm9sZEluZm8oY20sIHZwLmZyb20sIHZwLnRvKTtcbiAgICB9KTtcbiAgICBzdGF0ZS5mcm9tID0gdnAuZnJvbTsgc3RhdGUudG8gPSB2cC50bztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR3V0dGVyQ2xpY2soY20sIGxpbmUsIGd1dHRlcikge1xuICAgIHZhciBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHZhciBvcHRzID0gc3RhdGUub3B0aW9ucztcbiAgICBpZiAoZ3V0dGVyICE9IG9wdHMuZ3V0dGVyKSByZXR1cm47XG4gICAgdmFyIGZvbGRlZCA9IGlzRm9sZGVkKGNtLCBsaW5lKTtcbiAgICBpZiAoZm9sZGVkKSBmb2xkZWQuY2xlYXIoKTtcbiAgICBlbHNlIGNtLmZvbGRDb2RlKFBvcyhsaW5lLCAwKSwgb3B0cyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShjbSkge1xuICAgIHZhciBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHZhciBvcHRzID0gc3RhdGUub3B0aW9ucztcbiAgICBzdGF0ZS5mcm9tID0gc3RhdGUudG8gPSAwO1xuICAgIGNsZWFyVGltZW91dChzdGF0ZS5jaGFuZ2VVcGRhdGUpO1xuICAgIHN0YXRlLmNoYW5nZVVwZGF0ZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVwZGF0ZUluVmlld3BvcnQoY20pOyB9LCBvcHRzLmZvbGRPbkNoYW5nZVRpbWVTcGFuIHx8IDYwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBvblZpZXdwb3J0Q2hhbmdlKGNtKSB7XG4gICAgdmFyIHN0YXRlID0gY20uc3RhdGUuZm9sZEd1dHRlcjtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgdmFyIG9wdHMgPSBzdGF0ZS5vcHRpb25zO1xuICAgIGNsZWFyVGltZW91dChzdGF0ZS5jaGFuZ2VVcGRhdGUpO1xuICAgIHN0YXRlLmNoYW5nZVVwZGF0ZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdnAgPSBjbS5nZXRWaWV3cG9ydCgpO1xuICAgICAgaWYgKHN0YXRlLmZyb20gPT0gc3RhdGUudG8gfHwgdnAuZnJvbSAtIHN0YXRlLnRvID4gMjAgfHwgc3RhdGUuZnJvbSAtIHZwLnRvID4gMjApIHtcbiAgICAgICAgdXBkYXRlSW5WaWV3cG9ydChjbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHZwLmZyb20gPCBzdGF0ZS5mcm9tKSB7XG4gICAgICAgICAgICB1cGRhdGVGb2xkSW5mbyhjbSwgdnAuZnJvbSwgc3RhdGUuZnJvbSk7XG4gICAgICAgICAgICBzdGF0ZS5mcm9tID0gdnAuZnJvbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZwLnRvID4gc3RhdGUudG8pIHtcbiAgICAgICAgICAgIHVwZGF0ZUZvbGRJbmZvKGNtLCBzdGF0ZS50bywgdnAudG8pO1xuICAgICAgICAgICAgc3RhdGUudG8gPSB2cC50bztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIG9wdHMudXBkYXRlVmlld3BvcnRUaW1lU3BhbiB8fCA0MDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Gb2xkKGNtLCBmcm9tKSB7XG4gICAgdmFyIHN0YXRlID0gY20uc3RhdGUuZm9sZEd1dHRlcjtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgdmFyIGxpbmUgPSBmcm9tLmxpbmU7XG4gICAgaWYgKGxpbmUgPj0gc3RhdGUuZnJvbSAmJiBsaW5lIDwgc3RhdGUudG8pXG4gICAgICB1cGRhdGVGb2xkSW5mbyhjbSwgbGluZSwgbGluZSArIDEpO1xuICB9XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5yZWdpc3Rlckdsb2JhbEhlbHBlcihcImZvbGRcIiwgXCJjb21tZW50XCIsIGZ1bmN0aW9uKG1vZGUpIHtcbiAgcmV0dXJuIG1vZGUuYmxvY2tDb21tZW50U3RhcnQgJiYgbW9kZS5ibG9ja0NvbW1lbnRFbmQ7XG59LCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQoc3RhcnQpLCBzdGFydFRva2VuID0gbW9kZS5ibG9ja0NvbW1lbnRTdGFydCwgZW5kVG9rZW4gPSBtb2RlLmJsb2NrQ29tbWVudEVuZDtcbiAgaWYgKCFzdGFydFRva2VuIHx8ICFlbmRUb2tlbikgcmV0dXJuO1xuICB2YXIgbGluZSA9IHN0YXJ0LmxpbmUsIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKTtcblxuICB2YXIgc3RhcnRDaDtcbiAgZm9yICh2YXIgYXQgPSBzdGFydC5jaCwgcGFzcyA9IDA7Oykge1xuICAgIHZhciBmb3VuZCA9IGF0IDw9IDAgPyAtMSA6IGxpbmVUZXh0Lmxhc3RJbmRleE9mKHN0YXJ0VG9rZW4sIGF0IC0gMSk7XG4gICAgaWYgKGZvdW5kID09IC0xKSB7XG4gICAgICBpZiAocGFzcyA9PSAxKSByZXR1cm47XG4gICAgICBwYXNzID0gMTtcbiAgICAgIGF0ID0gbGluZVRleHQubGVuZ3RoO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwYXNzID09IDEgJiYgZm91bmQgPCBzdGFydC5jaCkgcmV0dXJuO1xuICAgIGlmICgvY29tbWVudC8udGVzdChjbS5nZXRUb2tlblR5cGVBdChDb2RlTWlycm9yLlBvcyhsaW5lLCBmb3VuZCArIDEpKSkgJiZcbiAgICAgICAgKGZvdW5kID09IDAgfHwgbGluZVRleHQuc2xpY2UoZm91bmQgLSBlbmRUb2tlbi5sZW5ndGgsIGZvdW5kKSA9PSBlbmRUb2tlbiB8fFxuICAgICAgICAgIS9jb21tZW50Ly50ZXN0KGNtLmdldFRva2VuVHlwZUF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIGZvdW5kKSkpKSkge1xuICAgICAgc3RhcnRDaCA9IGZvdW5kICsgc3RhcnRUb2tlbi5sZW5ndGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgYXQgPSBmb3VuZCAtIDE7XG4gIH1cblxuICB2YXIgZGVwdGggPSAxLCBsYXN0TGluZSA9IGNtLmxhc3RMaW5lKCksIGVuZCwgZW5kQ2g7XG4gIG91dGVyOiBmb3IgKHZhciBpID0gbGluZTsgaSA8PSBsYXN0TGluZTsgKytpKSB7XG4gICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGkpLCBwb3MgPSBpID09IGxpbmUgPyBzdGFydENoIDogMDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgbmV4dE9wZW4gPSB0ZXh0LmluZGV4T2Yoc3RhcnRUb2tlbiwgcG9zKSwgbmV4dENsb3NlID0gdGV4dC5pbmRleE9mKGVuZFRva2VuLCBwb3MpO1xuICAgICAgaWYgKG5leHRPcGVuIDwgMCkgbmV4dE9wZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGlmIChuZXh0Q2xvc2UgPCAwKSBuZXh0Q2xvc2UgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIHBvcyA9IE1hdGgubWluKG5leHRPcGVuLCBuZXh0Q2xvc2UpO1xuICAgICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCkgYnJlYWs7XG4gICAgICBpZiAocG9zID09IG5leHRPcGVuKSArK2RlcHRoO1xuICAgICAgZWxzZSBpZiAoIS0tZGVwdGgpIHsgZW5kID0gaTsgZW5kQ2ggPSBwb3M7IGJyZWFrIG91dGVyOyB9XG4gICAgICArK3BvcztcbiAgICB9XG4gIH1cbiAgaWYgKGVuZCA9PSBudWxsIHx8IGxpbmUgPT0gZW5kICYmIGVuZENoID09IHN0YXJ0Q2gpIHJldHVybjtcbiAgcmV0dXJuIHtmcm9tOiBDb2RlTWlycm9yLlBvcyhsaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogQ29kZU1pcnJvci5Qb3MoZW5kLCBlbmRDaCl9O1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBsaW5lSW5kZW50KGNtLCBsaW5lTm8pIHtcbiAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGxpbmVObylcbiAgdmFyIHNwYWNlVG8gPSB0ZXh0LnNlYXJjaCgvXFxTLylcbiAgaWYgKHNwYWNlVG8gPT0gLTEgfHwgL1xcYmNvbW1lbnRcXGIvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZU5vLCBzcGFjZVRvICsgMSkpKSlcbiAgICByZXR1cm4gLTFcbiAgcmV0dXJuIENvZGVNaXJyb3IuY291bnRDb2x1bW4odGV4dCwgbnVsbCwgY20uZ2V0T3B0aW9uKFwidGFiU2l6ZVwiKSlcbn1cblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImZvbGRcIiwgXCJpbmRlbnRcIiwgZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gIHZhciBteUluZGVudCA9IGxpbmVJbmRlbnQoY20sIHN0YXJ0LmxpbmUpXG4gIGlmIChteUluZGVudCA8IDApIHJldHVyblxuICB2YXIgbGFzdExpbmVJbkZvbGQgPSBudWxsXG5cbiAgLy8gR28gdGhyb3VnaCBsaW5lcyB1bnRpbCB3ZSBmaW5kIGEgbGluZSB0aGF0IGRlZmluaXRlbHkgZG9lc24ndCBiZWxvbmcgaW5cbiAgLy8gdGhlIGJsb2NrIHdlJ3JlIGZvbGRpbmcsIG9yIHRvIHRoZSBlbmQuXG4gIGZvciAodmFyIGkgPSBzdGFydC5saW5lICsgMSwgZW5kID0gY20ubGFzdExpbmUoKTsgaSA8PSBlbmQ7ICsraSkge1xuICAgIHZhciBpbmRlbnQgPSBsaW5lSW5kZW50KGNtLCBpKVxuICAgIGlmIChpbmRlbnQgPT0gLTEpIHtcbiAgICB9IGVsc2UgaWYgKGluZGVudCA+IG15SW5kZW50KSB7XG4gICAgICAvLyBMaW5lcyB3aXRoIGEgZ3JlYXRlciBpbmRlbnQgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgYmxvY2suXG4gICAgICBsYXN0TGluZUluRm9sZCA9IGk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoaXMgbGluZSBoYXMgbm9uLXNwYWNlLCBub24tY29tbWVudCBjb250ZW50LCBhbmQgaXNcbiAgICAgIC8vIGluZGVudGVkIGxlc3Mgb3IgZXF1YWwgdG8gdGhlIHN0YXJ0IGxpbmUsIGl0IGlzIHRoZSBzdGFydCBvZlxuICAgICAgLy8gYW5vdGhlciBibG9jay5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAobGFzdExpbmVJbkZvbGQpIHJldHVybiB7XG4gICAgZnJvbTogQ29kZU1pcnJvci5Qb3Moc3RhcnQubGluZSwgY20uZ2V0TGluZShzdGFydC5saW5lKS5sZW5ndGgpLFxuICAgIHRvOiBDb2RlTWlycm9yLlBvcyhsYXN0TGluZUluRm9sZCwgY20uZ2V0TGluZShsYXN0TGluZUluRm9sZCkubGVuZ3RoKVxuICB9O1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcImJyYWNlXCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICB2YXIgbGluZSA9IHN0YXJ0LmxpbmUsIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKTtcbiAgdmFyIHRva2VuVHlwZTtcblxuICBmdW5jdGlvbiBmaW5kT3BlbmluZyhvcGVuQ2gpIHtcbiAgICBmb3IgKHZhciBhdCA9IHN0YXJ0LmNoLCBwYXNzID0gMDs7KSB7XG4gICAgICB2YXIgZm91bmQgPSBhdCA8PSAwID8gLTEgOiBsaW5lVGV4dC5sYXN0SW5kZXhPZihvcGVuQ2gsIGF0IC0gMSk7XG4gICAgICBpZiAoZm91bmQgPT0gLTEpIHtcbiAgICAgICAgaWYgKHBhc3MgPT0gMSkgYnJlYWs7XG4gICAgICAgIHBhc3MgPSAxO1xuICAgICAgICBhdCA9IGxpbmVUZXh0Lmxlbmd0aDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocGFzcyA9PSAxICYmIGZvdW5kIDwgc3RhcnQuY2gpIGJyZWFrO1xuICAgICAgdG9rZW5UeXBlID0gY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgZm91bmQgKyAxKSk7XG4gICAgICBpZiAoIS9eKGNvbW1lbnR8c3RyaW5nKS8udGVzdCh0b2tlblR5cGUpKSByZXR1cm4gZm91bmQgKyAxO1xuICAgICAgYXQgPSBmb3VuZCAtIDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXJ0VG9rZW4gPSBcIntcIiwgZW5kVG9rZW4gPSBcIn1cIiwgc3RhcnRDaCA9IGZpbmRPcGVuaW5nKFwie1wiKTtcbiAgaWYgKHN0YXJ0Q2ggPT0gbnVsbCkge1xuICAgIHN0YXJ0VG9rZW4gPSBcIltcIiwgZW5kVG9rZW4gPSBcIl1cIjtcbiAgICBzdGFydENoID0gZmluZE9wZW5pbmcoXCJbXCIpO1xuICB9XG5cbiAgaWYgKHN0YXJ0Q2ggPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgY291bnQgPSAxLCBsYXN0TGluZSA9IGNtLmxhc3RMaW5lKCksIGVuZCwgZW5kQ2g7XG4gIG91dGVyOiBmb3IgKHZhciBpID0gbGluZTsgaSA8PSBsYXN0TGluZTsgKytpKSB7XG4gICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGkpLCBwb3MgPSBpID09IGxpbmUgPyBzdGFydENoIDogMDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgbmV4dE9wZW4gPSB0ZXh0LmluZGV4T2Yoc3RhcnRUb2tlbiwgcG9zKSwgbmV4dENsb3NlID0gdGV4dC5pbmRleE9mKGVuZFRva2VuLCBwb3MpO1xuICAgICAgaWYgKG5leHRPcGVuIDwgMCkgbmV4dE9wZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGlmIChuZXh0Q2xvc2UgPCAwKSBuZXh0Q2xvc2UgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIHBvcyA9IE1hdGgubWluKG5leHRPcGVuLCBuZXh0Q2xvc2UpO1xuICAgICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCkgYnJlYWs7XG4gICAgICBpZiAoY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MoaSwgcG9zICsgMSkpID09IHRva2VuVHlwZSkge1xuICAgICAgICBpZiAocG9zID09IG5leHRPcGVuKSArK2NvdW50O1xuICAgICAgICBlbHNlIGlmICghLS1jb3VudCkgeyBlbmQgPSBpOyBlbmRDaCA9IHBvczsgYnJlYWsgb3V0ZXI7IH1cbiAgICAgIH1cbiAgICAgICsrcG9zO1xuICAgIH1cbiAgfVxuICBpZiAoZW5kID09IG51bGwgfHwgbGluZSA9PSBlbmQpIHJldHVybjtcbiAgcmV0dXJuIHtmcm9tOiBDb2RlTWlycm9yLlBvcyhsaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogQ29kZU1pcnJvci5Qb3MoZW5kLCBlbmRDaCl9O1xufSk7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiaW1wb3J0XCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICBmdW5jdGlvbiBoYXNJbXBvcnQobGluZSkge1xuICAgIGlmIChsaW5lIDwgY20uZmlyc3RMaW5lKCkgfHwgbGluZSA+IGNtLmxhc3RMaW5lKCkpIHJldHVybiBudWxsO1xuICAgIHZhciBzdGFydCA9IGNtLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgMSkpO1xuICAgIGlmICghL1xcUy8udGVzdChzdGFydC5zdHJpbmcpKSBzdGFydCA9IGNtLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgc3RhcnQuZW5kICsgMSkpO1xuICAgIGlmIChzdGFydC50eXBlICE9IFwia2V5d29yZFwiIHx8IHN0YXJ0LnN0cmluZyAhPSBcImltcG9ydFwiKSByZXR1cm4gbnVsbDtcbiAgICAvLyBOb3cgZmluZCBjbG9zaW5nIHNlbWljb2xvbiwgcmV0dXJuIGl0cyBwb3NpdGlvblxuICAgIGZvciAodmFyIGkgPSBsaW5lLCBlID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgbGluZSArIDEwKTsgaSA8PSBlOyArK2kpIHtcbiAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKSwgc2VtaSA9IHRleHQuaW5kZXhPZihcIjtcIik7XG4gICAgICBpZiAoc2VtaSAhPSAtMSkgcmV0dXJuIHtzdGFydENoOiBzdGFydC5lbmQsIGVuZDogQ29kZU1pcnJvci5Qb3MoaSwgc2VtaSl9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGFydExpbmUgPSBzdGFydC5saW5lLCBoYXMgPSBoYXNJbXBvcnQoc3RhcnRMaW5lKSwgcHJldjtcbiAgaWYgKCFoYXMgfHwgaGFzSW1wb3J0KHN0YXJ0TGluZSAtIDEpIHx8ICgocHJldiA9IGhhc0ltcG9ydChzdGFydExpbmUgLSAyKSkgJiYgcHJldi5lbmQubGluZSA9PSBzdGFydExpbmUgLSAxKSlcbiAgICByZXR1cm4gbnVsbDtcbiAgZm9yICh2YXIgZW5kID0gaGFzLmVuZDs7KSB7XG4gICAgdmFyIG5leHQgPSBoYXNJbXBvcnQoZW5kLmxpbmUgKyAxKTtcbiAgICBpZiAobmV4dCA9PSBudWxsKSBicmVhaztcbiAgICBlbmQgPSBuZXh0LmVuZDtcbiAgfVxuICByZXR1cm4ge2Zyb206IGNtLmNsaXBQb3MoQ29kZU1pcnJvci5Qb3Moc3RhcnRMaW5lLCBoYXMuc3RhcnRDaCArIDEpKSwgdG86IGVuZH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImZvbGRcIiwgXCJpbmNsdWRlXCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICBmdW5jdGlvbiBoYXNJbmNsdWRlKGxpbmUpIHtcbiAgICBpZiAobGluZSA8IGNtLmZpcnN0TGluZSgpIHx8IGxpbmUgPiBjbS5sYXN0TGluZSgpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgc3RhcnQgPSBjbS5nZXRUb2tlbkF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIDEpKTtcbiAgICBpZiAoIS9cXFMvLnRlc3Qoc3RhcnQuc3RyaW5nKSkgc3RhcnQgPSBjbS5nZXRUb2tlbkF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIHN0YXJ0LmVuZCArIDEpKTtcbiAgICBpZiAoc3RhcnQudHlwZSA9PSBcIm1ldGFcIiAmJiBzdGFydC5zdHJpbmcuc2xpY2UoMCwgOCkgPT0gXCIjaW5jbHVkZVwiKSByZXR1cm4gc3RhcnQuc3RhcnQgKyA4O1xuICB9XG5cbiAgdmFyIHN0YXJ0TGluZSA9IHN0YXJ0LmxpbmUsIGhhcyA9IGhhc0luY2x1ZGUoc3RhcnRMaW5lKTtcbiAgaWYgKGhhcyA9PSBudWxsIHx8IGhhc0luY2x1ZGUoc3RhcnRMaW5lIC0gMSkgIT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGZvciAodmFyIGVuZCA9IHN0YXJ0TGluZTs7KSB7XG4gICAgdmFyIG5leHQgPSBoYXNJbmNsdWRlKGVuZCArIDEpO1xuICAgIGlmIChuZXh0ID09IG51bGwpIGJyZWFrO1xuICAgICsrZW5kO1xuICB9XG4gIHJldHVybiB7ZnJvbTogQ29kZU1pcnJvci5Qb3Moc3RhcnRMaW5lLCBoYXMgKyAxKSxcbiAgICAgICAgICB0bzogY20uY2xpcFBvcyhDb2RlTWlycm9yLlBvcyhlbmQpKX07XG59KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwibWFya2Rvd25cIiwgZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gIHZhciBtYXhEZXB0aCA9IDEwMDtcblxuICBmdW5jdGlvbiBpc0hlYWRlcihsaW5lTm8pIHtcbiAgICB2YXIgdG9rZW50eXBlID0gY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZU5vLCAwKSk7XG4gICAgcmV0dXJuIHRva2VudHlwZSAmJiAvXFxiaGVhZGVyXFxiLy50ZXN0KHRva2VudHlwZSk7XG4gIH1cblxuICBmdW5jdGlvbiBoZWFkZXJMZXZlbChsaW5lTm8sIGxpbmUsIG5leHRMaW5lKSB7XG4gICAgdmFyIG1hdGNoID0gbGluZSAmJiBsaW5lLm1hdGNoKC9eIysvKTtcbiAgICBpZiAobWF0Y2ggJiYgaXNIZWFkZXIobGluZU5vKSkgcmV0dXJuIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBtYXRjaCA9IG5leHRMaW5lICYmIG5leHRMaW5lLm1hdGNoKC9eWz1cXC1dK1xccyokLyk7XG4gICAgaWYgKG1hdGNoICYmIGlzSGVhZGVyKGxpbmVObyArIDEpKSByZXR1cm4gbmV4dExpbmVbMF0gPT0gXCI9XCIgPyAxIDogMjtcbiAgICByZXR1cm4gbWF4RGVwdGg7XG4gIH1cblxuICB2YXIgZmlyc3RMaW5lID0gY20uZ2V0TGluZShzdGFydC5saW5lKSwgbmV4dExpbmUgPSBjbS5nZXRMaW5lKHN0YXJ0LmxpbmUgKyAxKTtcbiAgdmFyIGxldmVsID0gaGVhZGVyTGV2ZWwoc3RhcnQubGluZSwgZmlyc3RMaW5lLCBuZXh0TGluZSk7XG4gIGlmIChsZXZlbCA9PT0gbWF4RGVwdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgdmFyIGxhc3RMaW5lTm8gPSBjbS5sYXN0TGluZSgpO1xuICB2YXIgZW5kID0gc3RhcnQubGluZSwgbmV4dE5leHRMaW5lID0gY20uZ2V0TGluZShlbmQgKyAyKTtcbiAgd2hpbGUgKGVuZCA8IGxhc3RMaW5lTm8pIHtcbiAgICBpZiAoaGVhZGVyTGV2ZWwoZW5kICsgMSwgbmV4dExpbmUsIG5leHROZXh0TGluZSkgPD0gbGV2ZWwpIGJyZWFrO1xuICAgICsrZW5kO1xuICAgIG5leHRMaW5lID0gbmV4dE5leHRMaW5lO1xuICAgIG5leHROZXh0TGluZSA9IGNtLmdldExpbmUoZW5kICsgMik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZyb206IENvZGVNaXJyb3IuUG9zKHN0YXJ0LmxpbmUsIGZpcnN0TGluZS5sZW5ndGgpLFxuICAgIHRvOiBDb2RlTWlycm9yLlBvcyhlbmQsIGNtLmdldExpbmUoZW5kKS5sZW5ndGgpXG4gIH07XG59KTtcblxufSk7XG4iLCIvKipcbiAqIG1hcmtlZCAtIGEgbWFya2Rvd24gcGFyc2VyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxOCwgQ2hyaXN0b3BoZXIgSmVmZnJleS4gKE1JVCBMaWNlbnNlZClcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWRcbiAqL1xuXG47KGZ1bmN0aW9uKHJvb3QpIHtcbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBCbG9jay1MZXZlbCBHcmFtbWFyXG4gKi9cblxudmFyIGJsb2NrID0ge1xuICBuZXdsaW5lOiAvXlxcbisvLFxuICBjb2RlOiAvXiggezR9W15cXG5dK1xcbiopKy8sXG4gIGZlbmNlczogbm9vcCxcbiAgaHI6IC9eIHswLDN9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKS8sXG4gIGhlYWRpbmc6IC9eICooI3sxLDZ9KSAqKFteXFxuXSs/KSAqKD86IysgKik/KD86XFxuK3wkKS8sXG4gIG5wdGFibGU6IG5vb3AsXG4gIGJsb2NrcXVvdGU6IC9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cXG5dKikoPzpcXG58JCkpKy8sXG4gIGxpc3Q6IC9eKCAqKShidWxsKSBbXFxzXFxTXSs/KD86aHJ8ZGVmfFxcbnsyLH0oPyEgKSg/IVxcMWJ1bGwgKVxcbip8XFxzKiQpLyxcbiAgaHRtbDogJ14gezAsM30oPzonIC8vIG9wdGlvbmFsIGluZGVudGF0aW9uXG4gICAgKyAnPChzY3JpcHR8cHJlfHN0eWxlKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4gICAgKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbiAgICArICd8PFxcXFw/W1xcXFxzXFxcXFNdKj9cXFxcPz5cXFxcbionIC8vICgzKVxuICAgICsgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8+XFxcXG4qJyAvLyAoNClcbiAgICArICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qP1xcXFxdXFxcXF0+XFxcXG4qJyAvLyAoNSlcbiAgICArICd8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzpcXFxcbnsyLH18JCknIC8vICg2KVxuICAgICsgJ3w8KD8hc2NyaXB0fHByZXxzdHlsZSkoW2Etel1bXFxcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1cXFxcaCpcXFxcbilbXFxcXHNcXFxcU10qPyg/OlxcXFxuezIsfXwkKScgLy8gKDcpIG9wZW4gdGFnXG4gICAgKyAnfDwvKD8hc2NyaXB0fHByZXxzdHlsZSlbYS16XVtcXFxcdy1dKlxcXFxzKj4oPz1cXFxcaCpcXFxcbilbXFxcXHNcXFxcU10qPyg/OlxcXFxuezIsfXwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4gICAgKyAnKScsXG4gIGRlZjogL14gezAsM31cXFsobGFiZWwpXFxdOiAqXFxuPyAqPD8oW15cXHM+XSspPj8oPzooPzogK1xcbj8gKnwgKlxcbiAqKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8sXG4gIHRhYmxlOiBub29wLFxuICBsaGVhZGluZzogL14oW15cXG5dKylcXG4gKig9fC0pezIsfSAqKD86XFxuK3wkKS8sXG4gIHBhcmFncmFwaDogL14oW15cXG5dKyg/Olxcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8IHswLDN9Pnw8XFwvPyg/OnRhZykoPzogK3xcXG58XFwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfCEtLSkpW15cXG5dKykqKS8sXG4gIHRleHQ6IC9eW15cXG5dKy9cbn07XG5cbmJsb2NrLl9sYWJlbCA9IC8oPyFcXHMqXFxdKSg/OlxcXFxbXFxbXFxdXXxbXlxcW1xcXV0pKy87XG5ibG9jay5fdGl0bGUgPSAvKD86XCIoPzpcXFxcXCI/fFteXCJcXFxcXSkqXCJ8J1teJ1xcbl0qKD86XFxuW14nXFxuXSspKlxcbj8nfFxcKFteKCldKlxcKSkvO1xuYmxvY2suZGVmID0gZWRpdChibG9jay5kZWYpXG4gIC5yZXBsYWNlKCdsYWJlbCcsIGJsb2NrLl9sYWJlbClcbiAgLnJlcGxhY2UoJ3RpdGxlJywgYmxvY2suX3RpdGxlKVxuICAuZ2V0UmVnZXgoKTtcblxuYmxvY2suYnVsbGV0ID0gLyg/OlsqKy1dfFxcZCtcXC4pLztcbmJsb2NrLml0ZW0gPSAvXiggKikoYnVsbCkgW15cXG5dKig/Olxcbig/IVxcMWJ1bGwgKVteXFxuXSopKi87XG5ibG9jay5pdGVtID0gZWRpdChibG9jay5pdGVtLCAnZ20nKVxuICAucmVwbGFjZSgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5saXN0ID0gZWRpdChibG9jay5saXN0KVxuICAucmVwbGFjZSgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gIC5yZXBsYWNlKCdocicsICdcXFxcbisoPz1cXFxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXFxcKiAqKXszLH0pKD86XFxcXG4rfCQpKScpXG4gIC5yZXBsYWNlKCdkZWYnLCAnXFxcXG4rKD89JyArIGJsb2NrLmRlZi5zb3VyY2UgKyAnKScpXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5fdGFnID0gJ2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9uJ1xuICArICd8Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb24nXG4gICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICArICd8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbidcbiAgKyAnfHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cidcbiAgKyAnfHRyYWNrfHVsJztcbmJsb2NrLl9jb21tZW50ID0gLzwhLS0oPyEtPz4pW1xcc1xcU10qPy0tPi87XG5ibG9jay5odG1sID0gZWRpdChibG9jay5odG1sLCAnaScpXG4gIC5yZXBsYWNlKCdjb21tZW50JywgYmxvY2suX2NvbW1lbnQpXG4gIC5yZXBsYWNlKCd0YWcnLCBibG9jay5fdGFnKVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgLyArW2EtekEtWjpfXVtcXHcuOi1dKig/OiAqPSAqXCJbXlwiXFxuXSpcInwgKj0gKidbXidcXG5dKid8ICo9ICpbXlxcc1wiJz08PmBdKyk/LylcbiAgLmdldFJlZ2V4KCk7XG5cbmJsb2NrLnBhcmFncmFwaCA9IGVkaXQoYmxvY2sucGFyYWdyYXBoKVxuICAucmVwbGFjZSgnaHInLCBibG9jay5ocilcbiAgLnJlcGxhY2UoJ2hlYWRpbmcnLCBibG9jay5oZWFkaW5nKVxuICAucmVwbGFjZSgnbGhlYWRpbmcnLCBibG9jay5saGVhZGluZylcbiAgLnJlcGxhY2UoJ3RhZycsIGJsb2NrLl90YWcpIC8vIHBhcnMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5ibG9ja3F1b3RlID0gZWRpdChibG9jay5ibG9ja3F1b3RlKVxuICAucmVwbGFjZSgncGFyYWdyYXBoJywgYmxvY2sucGFyYWdyYXBoKVxuICAuZ2V0UmVnZXgoKTtcblxuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5cbmJsb2NrLm5vcm1hbCA9IG1lcmdlKHt9LCBibG9jayk7XG5cbi8qKlxuICogR0ZNIEJsb2NrIEdyYW1tYXJcbiAqL1xuXG5ibG9jay5nZm0gPSBtZXJnZSh7fSwgYmxvY2subm9ybWFsLCB7XG4gIGZlbmNlczogL14gKihgezMsfXx+ezMsfSlbIFxcLl0qKFxcUyspPyAqXFxuKFtcXHNcXFNdKj8pXFxuPyAqXFwxICooPzpcXG4rfCQpLyxcbiAgcGFyYWdyYXBoOiAvXi8sXG4gIGhlYWRpbmc6IC9eICooI3sxLDZ9KSArKFteXFxuXSs/KSAqIyogKig/Olxcbit8JCkvXG59KTtcblxuYmxvY2suZ2ZtLnBhcmFncmFwaCA9IGVkaXQoYmxvY2sucGFyYWdyYXBoKVxuICAucmVwbGFjZSgnKD8hJywgJyg/ISdcbiAgICArIGJsb2NrLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoJ1xcXFwxJywgJ1xcXFwyJykgKyAnfCdcbiAgICArIGJsb2NrLmxpc3Quc291cmNlLnJlcGxhY2UoJ1xcXFwxJywgJ1xcXFwzJykgKyAnfCcpXG4gIC5nZXRSZWdleCgpO1xuXG4vKipcbiAqIEdGTSArIFRhYmxlcyBCbG9jayBHcmFtbWFyXG4gKi9cblxuYmxvY2sudGFibGVzID0gbWVyZ2Uoe30sIGJsb2NrLmdmbSwge1xuICBucHRhYmxlOiAvXiAqKFtefFxcbiBdLipcXHwuKilcXG4gKihbLTpdKyAqXFx8Wy18IDpdKikoPzpcXG4oKD86LipbXj5cXG4gXS4qKD86XFxufCQpKSopXFxuKnwkKS8sXG4gIHRhYmxlOiAvXiAqXFx8KC4rKVxcbiAqXFx8PyggKlstOl0rWy18IDpdKikoPzpcXG4oKD86ICpbXj5cXG4gXS4qKD86XFxufCQpKSopXFxuKnwkKS9cbn0pO1xuXG4vKipcbiAqIFBlZGFudGljIGdyYW1tYXJcbiAqL1xuXG5ibG9jay5wZWRhbnRpYyA9IG1lcmdlKHt9LCBibG9jay5ub3JtYWwsIHtcbiAgaHRtbDogZWRpdChcbiAgICAnXiAqKD86Y29tbWVudCAqKD86XFxcXG58XFxcXHMqJCknXG4gICAgKyAnfDwodGFnKVtcXFxcc1xcXFxTXSs/PC9cXFxcMT4gKig/OlxcXFxuezIsfXxcXFxccyokKScgLy8gY2xvc2VkIHRhZ1xuICAgICsgJ3w8dGFnKD86XCJbXlwiXSpcInxcXCdbXlxcJ10qXFwnfFxcXFxzW15cXCdcIi8+XFxcXHNdKikqPy8/PiAqKD86XFxcXG57Mix9fFxcXFxzKiQpKScpXG4gICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBibG9jay5fY29tbWVudClcbiAgICAucmVwbGFjZSgvdGFnL2csICcoPyEoPzonXG4gICAgICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3ViJ1xuICAgICAgKyAnfHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZyknXG4gICAgICArICdcXFxcYilcXFxcdysoPyE6fFteXFxcXHdcXFxcc0BdKkApXFxcXGInKVxuICAgIC5nZXRSZWdleCgpLFxuICBkZWY6IC9eICpcXFsoW15cXF1dKylcXF06ICo8PyhbXlxccz5dKyk+Pyg/OiArKFtcIihdW15cXG5dK1tcIildKSk/ICooPzpcXG4rfCQpL1xufSk7XG5cbi8qKlxuICogQmxvY2sgTGV4ZXJcbiAqL1xuXG5mdW5jdGlvbiBMZXhlcihvcHRpb25zKSB7XG4gIHRoaXMudG9rZW5zID0gW107XG4gIHRoaXMudG9rZW5zLmxpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBtYXJrZWQuZGVmYXVsdHM7XG4gIHRoaXMucnVsZXMgPSBibG9jay5ub3JtYWw7XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgIHRoaXMucnVsZXMgPSBibG9jay5wZWRhbnRpYztcbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2ZtKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50YWJsZXMpIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay50YWJsZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay5nZm07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRXhwb3NlIEJsb2NrIFJ1bGVzXG4gKi9cblxuTGV4ZXIucnVsZXMgPSBibG9jaztcblxuLyoqXG4gKiBTdGF0aWMgTGV4IE1ldGhvZFxuICovXG5cbkxleGVyLmxleCA9IGZ1bmN0aW9uKHNyYywgb3B0aW9ucykge1xuICB2YXIgbGV4ZXIgPSBuZXcgTGV4ZXIob3B0aW9ucyk7XG4gIHJldHVybiBsZXhlci5sZXgoc3JjKTtcbn07XG5cbi8qKlxuICogUHJlcHJvY2Vzc2luZ1xuICovXG5cbkxleGVyLnByb3RvdHlwZS5sZXggPSBmdW5jdGlvbihzcmMpIHtcbiAgc3JjID0gc3JjXG4gICAgLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoL1xcdC9nLCAnICAgICcpXG4gICAgLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKVxuICAgIC5yZXBsYWNlKC9cXHUyNDI0L2csICdcXG4nKTtcblxuICByZXR1cm4gdGhpcy50b2tlbihzcmMsIHRydWUpO1xufTtcblxuLyoqXG4gKiBMZXhpbmdcbiAqL1xuXG5MZXhlci5wcm90b3R5cGUudG9rZW4gPSBmdW5jdGlvbihzcmMsIHRvcCkge1xuICBzcmMgPSBzcmMucmVwbGFjZSgvXiArJC9nbSwgJycpO1xuICB2YXIgbmV4dCxcbiAgICAgIGxvb3NlLFxuICAgICAgY2FwLFxuICAgICAgYnVsbCxcbiAgICAgIGIsXG4gICAgICBpdGVtLFxuICAgICAgbGlzdFN0YXJ0LFxuICAgICAgbGlzdEl0ZW1zLFxuICAgICAgdCxcbiAgICAgIHNwYWNlLFxuICAgICAgaSxcbiAgICAgIHRhZyxcbiAgICAgIGwsXG4gICAgICBpc29yZGVyZWQsXG4gICAgICBpc3Rhc2ssXG4gICAgICBpc2NoZWNrZWQ7XG5cbiAgd2hpbGUgKHNyYykge1xuICAgIC8vIG5ld2xpbmVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGlmIChjYXBbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3BhY2UnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvZGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5jb2RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eIHs0fS9nbSwgJycpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgdGV4dDogIXRoaXMub3B0aW9ucy5wZWRhbnRpY1xuICAgICAgICAgID8gcnRyaW0oY2FwLCAnXFxuJylcbiAgICAgICAgICA6IGNhcFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBmZW5jZXMgKGdmbSlcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgbGFuZzogY2FwWzJdLFxuICAgICAgICB0ZXh0OiBjYXBbM10gfHwgJydcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaGVhZGluZ1xuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IGNhcFsyXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSBubyBsZWFkaW5nIHBpcGUgKGdmbSlcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLm5wdGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBzcGxpdENlbGxzKGNhcFsxXS5yZXBsYWNlKC9eICp8ICpcXHwgKiQvZywgJycpKSxcbiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBjZWxsczogY2FwWzNdID8gY2FwWzNdLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW11cbiAgICAgIH07XG5cbiAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpdGVtLmNlbGxzW2ldID0gc3BsaXRDZWxscyhpdGVtLmNlbGxzW2ldLCBpdGVtLmhlYWRlci5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaChpdGVtKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoclxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhyLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnaHInXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGJsb2NrcXVvdGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdibG9ja3F1b3RlX3N0YXJ0J1xuICAgICAgfSk7XG5cbiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eICo+ID8vZ20sICcnKTtcblxuICAgICAgLy8gUGFzcyBgdG9wYCB0byBrZWVwIHRoZSBjdXJyZW50XG4gICAgICAvLyBcInRvcGxldmVsXCIgc3RhdGUuIFRoaXMgaXMgZXhhY3RseVxuICAgICAgLy8gaG93IG1hcmtkb3duLnBsIHdvcmtzLlxuICAgICAgdGhpcy50b2tlbihjYXAsIHRvcCk7XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnYmxvY2txdW90ZV9lbmQnXG4gICAgICB9KTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbGlzdFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmxpc3QuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgYnVsbCA9IGNhcFsyXTtcbiAgICAgIGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcblxuICAgICAgbGlzdFN0YXJ0ID0ge1xuICAgICAgICB0eXBlOiAnbGlzdF9zdGFydCcsXG4gICAgICAgIG9yZGVyZWQ6IGlzb3JkZXJlZCxcbiAgICAgICAgc3RhcnQ6IGlzb3JkZXJlZCA/ICtidWxsIDogJycsXG4gICAgICAgIGxvb3NlOiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaChsaXN0U3RhcnQpO1xuXG4gICAgICAvLyBHZXQgZWFjaCB0b3AtbGV2ZWwgaXRlbS5cbiAgICAgIGNhcCA9IGNhcFswXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pO1xuXG4gICAgICBsaXN0SXRlbXMgPSBbXTtcbiAgICAgIG5leHQgPSBmYWxzZTtcbiAgICAgIGwgPSBjYXAubGVuZ3RoO1xuICAgICAgaSA9IDA7XG5cbiAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBjYXBbaV07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBsaXN0IGl0ZW0ncyBidWxsZXRcbiAgICAgICAgLy8gc28gaXQgaXMgc2VlbiBhcyB0aGUgbmV4dCB0b2tlbi5cbiAgICAgICAgc3BhY2UgPSBpdGVtLmxlbmd0aDtcbiAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXiAqKFsqKy1dfFxcZCtcXC4pICsvLCAnJyk7XG5cbiAgICAgICAgLy8gT3V0ZGVudCB3aGF0ZXZlciB0aGVcbiAgICAgICAgLy8gbGlzdCBpdGVtIGNvbnRhaW5zLiBIYWNreS5cbiAgICAgICAgaWYgKH5pdGVtLmluZGV4T2YoJ1xcbiAnKSkge1xuICAgICAgICAgIHNwYWNlIC09IGl0ZW0ubGVuZ3RoO1xuICAgICAgICAgIGl0ZW0gPSAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgICAgICA/IGl0ZW0ucmVwbGFjZShuZXcgUmVnRXhwKCdeIHsxLCcgKyBzcGFjZSArICd9JywgJ2dtJyksICcnKVxuICAgICAgICAgICAgOiBpdGVtLnJlcGxhY2UoL14gezEsNH0vZ20sICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRoZSBuZXh0IGxpc3QgaXRlbSBiZWxvbmdzIGhlcmUuXG4gICAgICAgIC8vIEJhY2twZWRhbCBpZiBpdCBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBsaXN0LlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMgJiYgaSAhPT0gbCAtIDEpIHtcbiAgICAgICAgICBiID0gYmxvY2suYnVsbGV0LmV4ZWMoY2FwW2kgKyAxXSlbMF07XG4gICAgICAgICAgaWYgKGJ1bGwgIT09IGIgJiYgIShidWxsLmxlbmd0aCA+IDEgJiYgYi5sZW5ndGggPiAxKSkge1xuICAgICAgICAgICAgc3JjID0gY2FwLnNsaWNlKGkgKyAxKS5qb2luKCdcXG4nKSArIHNyYztcbiAgICAgICAgICAgIGkgPSBsIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBpdGVtIGlzIGxvb3NlIG9yIG5vdC5cbiAgICAgICAgLy8gVXNlOiAvKF58XFxuKSg/ISApW15cXG5dK1xcblxcbig/IVxccyokKS9cbiAgICAgICAgLy8gZm9yIGRpc2NvdW50IGJlaGF2aW9yLlxuICAgICAgICBsb29zZSA9IG5leHQgfHwgL1xcblxcbig/IVxccyokKS8udGVzdChpdGVtKTtcbiAgICAgICAgaWYgKGkgIT09IGwgLSAxKSB7XG4gICAgICAgICAgbmV4dCA9IGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09ICdcXG4nO1xuICAgICAgICAgIGlmICghbG9vc2UpIGxvb3NlID0gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29zZSkge1xuICAgICAgICAgIGxpc3RTdGFydC5sb29zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgdGFzayBsaXN0IGl0ZW1zXG4gICAgICAgIGlzdGFzayA9IC9eXFxbWyB4WF1cXF0gLy50ZXN0KGl0ZW0pO1xuICAgICAgICBpc2NoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpc3Rhc2spIHtcbiAgICAgICAgICBpc2NoZWNrZWQgPSBpdGVtWzFdICE9PSAnICc7XG4gICAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXlxcW1sgeFhdXFxdICsvLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0ID0ge1xuICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW1fc3RhcnQnLFxuICAgICAgICAgIHRhc2s6IGlzdGFzayxcbiAgICAgICAgICBjaGVja2VkOiBpc2NoZWNrZWQsXG4gICAgICAgICAgbG9vc2U6IGxvb3NlXG4gICAgICAgIH07XG5cbiAgICAgICAgbGlzdEl0ZW1zLnB1c2godCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2godCk7XG5cbiAgICAgICAgLy8gUmVjdXJzZS5cbiAgICAgICAgdGhpcy50b2tlbihpdGVtLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbV9lbmQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdFN0YXJ0Lmxvb3NlKSB7XG4gICAgICAgIGwgPSBsaXN0SXRlbXMubGVuZ3RoO1xuICAgICAgICBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBsaXN0SXRlbXNbaV0ubG9vc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnbGlzdF9lbmQnXG4gICAgICB9KTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaHRtbFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmh0bWwuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5zYW5pdGl6ZVxuICAgICAgICAgID8gJ3BhcmFncmFwaCdcbiAgICAgICAgICA6ICdodG1sJyxcbiAgICAgICAgcHJlOiAhdGhpcy5vcHRpb25zLnNhbml0aXplclxuICAgICAgICAgICYmIChjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnKSxcbiAgICAgICAgdGV4dDogY2FwWzBdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGRlZlxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMuZGVmLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBpZiAoY2FwWzNdKSBjYXBbM10gPSBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKTtcbiAgICAgIHRhZyA9IGNhcFsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubGlua3NbdGFnXSkge1xuICAgICAgICB0aGlzLnRva2Vucy5saW5rc1t0YWddID0ge1xuICAgICAgICAgIGhyZWY6IGNhcFsyXSxcbiAgICAgICAgICB0aXRsZTogY2FwWzNdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSAoZ2ZtKVxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMudGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBzcGxpdENlbGxzKGNhcFsxXS5yZXBsYWNlKC9eICp8ICpcXHwgKiQvZywgJycpKSxcbiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBjZWxsczogY2FwWzNdID8gY2FwWzNdLnJlcGxhY2UoLyg/OiAqXFx8ICopP1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW11cbiAgICAgIH07XG5cbiAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpdGVtLmNlbGxzW2ldID0gc3BsaXRDZWxscyhcbiAgICAgICAgICAgIGl0ZW0uY2VsbHNbaV0ucmVwbGFjZSgvXiAqXFx8ICp8ICpcXHwgKiQvZywgJycpLFxuICAgICAgICAgICAgaXRlbS5oZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goaXRlbSk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbGhlYWRpbmdcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saGVhZGluZy5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICBkZXB0aDogY2FwWzJdID09PSAnPScgPyAxIDogMixcbiAgICAgICAgdGV4dDogY2FwWzFdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHRvcC1sZXZlbCBwYXJhZ3JhcGhcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKHNyYykpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICB0ZXh0OiBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICA6IGNhcFsxXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXh0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGV4dC5leGVjKHNyYykpIHtcbiAgICAgIC8vIFRvcC1sZXZlbCBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS5cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB0ZXh0OiBjYXBbMF1cbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMudG9rZW5zO1xufTtcblxuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5cbnZhciBpbmxpbmUgPSB7XG4gIGVzY2FwZTogL15cXFxcKFshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXFxdXFxcXF5fYHt8fX5dKS8sXG4gIGF1dG9saW5rOiAvXjwoc2NoZW1lOlteXFxzXFx4MDAtXFx4MWY8Pl0qfGVtYWlsKT4vLFxuICB1cmw6IG5vb3AsXG4gIHRhZzogJ15jb21tZW50J1xuICAgICsgJ3xePC9bYS16QS1aXVtcXFxcdzotXSpcXFxccyo+JyAvLyBzZWxmLWNsb3NpbmcgdGFnXG4gICAgKyAnfF48W2EtekEtWl1bXFxcXHctXSooPzphdHRyaWJ1dGUpKj9cXFxccyovPz4nIC8vIG9wZW4gdGFnXG4gICAgKyAnfF48XFxcXD9bXFxcXHNcXFxcU10qP1xcXFw/PicgLy8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgZS5nLiA8P3BocCA/PlxuICAgICsgJ3xePCFbYS16QS1aXStcXFxcc1tcXFxcc1xcXFxTXSo/PicgLy8gZGVjbGFyYXRpb24sIGUuZy4gPCFET0NUWVBFIGh0bWw+XG4gICAgKyAnfF48IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/XFxcXF1cXFxcXT4nLCAvLyBDREFUQSBzZWN0aW9uXG4gIGxpbms6IC9eIT9cXFsobGFiZWwpXFxdXFwoaHJlZig/OlxccysodGl0bGUpKT9cXHMqXFwpLyxcbiAgcmVmbGluazogL14hP1xcWyhsYWJlbClcXF1cXFsoPyFcXHMqXFxdKSgoPzpcXFxcW1xcW1xcXV0/fFteXFxbXFxdXFxcXF0pKylcXF0vLFxuICBub2xpbms6IC9eIT9cXFsoPyFcXHMqXFxdKSgoPzpcXFtbXlxcW1xcXV0qXFxdfFxcXFxbXFxbXFxdXXxbXlxcW1xcXV0pKilcXF0oPzpcXFtcXF0pPy8sXG4gIHN0cm9uZzogL15fXyhbXlxcc10pX18oPyFfKXxeXFwqXFwqKFteXFxzXSlcXCpcXCooPyFcXCopfF5fXyhbXlxcc11bXFxzXFxTXSo/W15cXHNdKV9fKD8hXyl8XlxcKlxcKihbXlxcc11bXFxzXFxTXSo/W15cXHNdKVxcKlxcKig/IVxcKikvLFxuICBlbTogL15fKFteXFxzX10pXyg/IV8pfF5cXCooW15cXHMqXCI8XFxbXSlcXCooPyFcXCopfF5fKFteXFxzXVtcXHNcXFNdKj9bXlxcc19dKV8oPyFffFteXFxzLl0pfF5fKFteXFxzX11bXFxzXFxTXSo/W15cXHNdKV8oPyFffFteXFxzLl0pfF5cXCooW15cXHNcIjxcXFtdW1xcc1xcU10qP1teXFxzKl0pXFwqKD8hXFwqKXxeXFwqKFteXFxzKlwiPFxcW11bXFxzXFxTXSo/W15cXHNdKVxcKig/IVxcKikvLFxuICBjb2RlOiAvXihgKykoW15gXXxbXmBdW1xcc1xcU10qP1teYF0pXFwxKD8hYCkvLFxuICBicjogL14oIHsyLH18XFxcXClcXG4oPyFcXHMqJCkvLFxuICBkZWw6IG5vb3AsXG4gIHRleHQ6IC9eKGArfFteYF0pW1xcc1xcU10qPyg/PVtcXFxcPCFcXFtgKl18XFxiX3wgezIsfVxcbnwkKS9cbn07XG5cbmlubGluZS5fZXNjYXBlcyA9IC9cXFxcKFshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXFxdXFxcXF5fYHt8fX5dKS9nO1xuXG5pbmxpbmUuX3NjaGVtZSA9IC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LztcbmlubGluZS5fZW1haWwgPSAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLztcbmlubGluZS5hdXRvbGluayA9IGVkaXQoaW5saW5lLmF1dG9saW5rKVxuICAucmVwbGFjZSgnc2NoZW1lJywgaW5saW5lLl9zY2hlbWUpXG4gIC5yZXBsYWNlKCdlbWFpbCcsIGlubGluZS5fZW1haWwpXG4gIC5nZXRSZWdleCgpO1xuXG5pbmxpbmUuX2F0dHJpYnV0ZSA9IC9cXHMrW2EtekEtWjpfXVtcXHcuOi1dKig/Olxccyo9XFxzKlwiW15cIl0qXCJ8XFxzKj1cXHMqJ1teJ10qJ3xcXHMqPVxccypbXlxcc1wiJz08PmBdKyk/LztcblxuaW5saW5lLnRhZyA9IGVkaXQoaW5saW5lLnRhZylcbiAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBibG9jay5fY29tbWVudClcbiAgLnJlcGxhY2UoJ2F0dHJpYnV0ZScsIGlubGluZS5fYXR0cmlidXRlKVxuICAuZ2V0UmVnZXgoKTtcblxuaW5saW5lLl9sYWJlbCA9IC8oPzpcXFtbXlxcW1xcXV0qXFxdfFxcXFxbXFxbXFxdXT98YFteYF0qYHxbXlxcW1xcXVxcXFxdKSo/LztcbmlubGluZS5faHJlZiA9IC9cXHMqKDwoPzpcXFxcWzw+XT98W15cXHM8PlxcXFxdKSo+fCg/OlxcXFxbKCldP3xcXChbXlxcc1xceDAwLVxceDFmXFxcXF0qXFwpfFteXFxzXFx4MDAtXFx4MWYoKVxcXFxdKSo/KS87XG5pbmxpbmUuX3RpdGxlID0gL1wiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCcoPzpcXFxcJz98W14nXFxcXF0pKid8XFwoKD86XFxcXFxcKT98W14pXFxcXF0pKlxcKS87XG5cbmlubGluZS5saW5rID0gZWRpdChpbmxpbmUubGluaylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgLnJlcGxhY2UoJ2hyZWYnLCBpbmxpbmUuX2hyZWYpXG4gIC5yZXBsYWNlKCd0aXRsZScsIGlubGluZS5fdGl0bGUpXG4gIC5nZXRSZWdleCgpO1xuXG5pbmxpbmUucmVmbGluayA9IGVkaXQoaW5saW5lLnJlZmxpbmspXG4gIC5yZXBsYWNlKCdsYWJlbCcsIGlubGluZS5fbGFiZWwpXG4gIC5nZXRSZWdleCgpO1xuXG4vKipcbiAqIE5vcm1hbCBJbmxpbmUgR3JhbW1hclxuICovXG5cbmlubGluZS5ub3JtYWwgPSBtZXJnZSh7fSwgaW5saW5lKTtcblxuLyoqXG4gKiBQZWRhbnRpYyBJbmxpbmUgR3JhbW1hclxuICovXG5cbmlubGluZS5wZWRhbnRpYyA9IG1lcmdlKHt9LCBpbmxpbmUubm9ybWFsLCB7XG4gIHN0cm9uZzogL15fXyg/PVxcUykoW1xcc1xcU10qP1xcUylfXyg/IV8pfF5cXCpcXCooPz1cXFMpKFtcXHNcXFNdKj9cXFMpXFwqXFwqKD8hXFwqKS8sXG4gIGVtOiAvXl8oPz1cXFMpKFtcXHNcXFNdKj9cXFMpXyg/IV8pfF5cXCooPz1cXFMpKFtcXHNcXFNdKj9cXFMpXFwqKD8hXFwqKS8sXG4gIGxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXCgoLio/KVxcKS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgICAuZ2V0UmVnZXgoKSxcbiAgcmVmbGluazogZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxccypcXFsoW15cXF1dKilcXF0vKVxuICAgIC5yZXBsYWNlKCdsYWJlbCcsIGlubGluZS5fbGFiZWwpXG4gICAgLmdldFJlZ2V4KClcbn0pO1xuXG4vKipcbiAqIEdGTSBJbmxpbmUgR3JhbW1hclxuICovXG5cbmlubGluZS5nZm0gPSBtZXJnZSh7fSwgaW5saW5lLm5vcm1hbCwge1xuICBlc2NhcGU6IGVkaXQoaW5saW5lLmVzY2FwZSkucmVwbGFjZSgnXSknLCAnfnxdKScpLmdldFJlZ2V4KCksXG4gIF9leHRlbmRlZF9lbWFpbDogL1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlxcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyxcbiAgdXJsOiAvXigoPzpmdHB8aHR0cHM/KTpcXC9cXC98d3d3XFwuKSg/OlthLXpBLVowLTlcXC1dK1xcLj8pK1teXFxzPF0qfF5lbWFpbC8sXG4gIF9iYWNrcGVkYWw6IC8oPzpbXj8hLiw6OypffigpJl0rfFxcKFteKV0qXFwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypffildKyg/ISQpKSsvLFxuICBkZWw6IC9efisoPz1cXFMpKFtcXHNcXFNdKj9cXFMpfisvLFxuICB0ZXh0OiBlZGl0KGlubGluZS50ZXh0KVxuICAgIC5yZXBsYWNlKCddfCcsICd+XXwnKVxuICAgIC5yZXBsYWNlKCd8JCcsICd8aHR0cHM/Oi8vfGZ0cDovL3x3d3dcXFxcLnxbYS16QS1aMC05LiEjJCUmXFwnKisvPT9eX2B7XFxcXHx9fi1dK0B8JCcpXG4gICAgLmdldFJlZ2V4KClcbn0pO1xuXG5pbmxpbmUuZ2ZtLnVybCA9IGVkaXQoaW5saW5lLmdmbS51cmwpXG4gIC5yZXBsYWNlKCdlbWFpbCcsIGlubGluZS5nZm0uX2V4dGVuZGVkX2VtYWlsKVxuICAuZ2V0UmVnZXgoKTtcbi8qKlxuICogR0ZNICsgTGluZSBCcmVha3MgSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5pbmxpbmUuYnJlYWtzID0gbWVyZ2Uoe30sIGlubGluZS5nZm0sIHtcbiAgYnI6IGVkaXQoaW5saW5lLmJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICB0ZXh0OiBlZGl0KGlubGluZS5nZm0udGV4dCkucmVwbGFjZSgnezIsfScsICcqJykuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogSW5saW5lIExleGVyICYgQ29tcGlsZXJcbiAqL1xuXG5mdW5jdGlvbiBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbiAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICB0aGlzLnJ1bGVzID0gaW5saW5lLm5vcm1hbDtcbiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgUmVuZGVyZXIoKTtcbiAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIGlmICghdGhpcy5saW5rcykge1xuICAgIHRocm93IG5ldyBFcnJvcignVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4nKTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICB0aGlzLnJ1bGVzID0gaW5saW5lLnBlZGFudGljO1xuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrcykge1xuICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5icmVha3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBpbmxpbmUuZ2ZtO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEV4cG9zZSBJbmxpbmUgUnVsZXNcbiAqL1xuXG5JbmxpbmVMZXhlci5ydWxlcyA9IGlubGluZTtcblxuLyoqXG4gKiBTdGF0aWMgTGV4aW5nL0NvbXBpbGluZyBNZXRob2RcbiAqL1xuXG5JbmxpbmVMZXhlci5vdXRwdXQgPSBmdW5jdGlvbihzcmMsIGxpbmtzLCBvcHRpb25zKSB7XG4gIHZhciBpbmxpbmUgPSBuZXcgSW5saW5lTGV4ZXIobGlua3MsIG9wdGlvbnMpO1xuICByZXR1cm4gaW5saW5lLm91dHB1dChzcmMpO1xufTtcblxuLyoqXG4gKiBMZXhpbmcvQ29tcGlsaW5nXG4gKi9cblxuSW5saW5lTGV4ZXIucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uKHNyYykge1xuICB2YXIgb3V0ID0gJycsXG4gICAgICBsaW5rLFxuICAgICAgdGV4dCxcbiAgICAgIGhyZWYsXG4gICAgICB0aXRsZSxcbiAgICAgIGNhcCxcbiAgICAgIHByZXZDYXBaZXJvO1xuXG4gIHdoaWxlIChzcmMpIHtcbiAgICAvLyBlc2NhcGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5lc2NhcGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IGNhcFsxXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGF1dG9saW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBlc2NhcGUodGhpcy5tYW5nbGUoY2FwWzFdKSk7XG4gICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMV0pO1xuICAgICAgICBocmVmID0gdGV4dDtcbiAgICAgIH1cbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB1cmwgKGdmbSlcbiAgICBpZiAoIXRoaXMuaW5MaW5rICYmIChjYXAgPSB0aGlzLnJ1bGVzLnVybC5leGVjKHNyYykpKSB7XG4gICAgICBpZiAoY2FwWzJdID09PSAnQCcpIHtcbiAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMF0pO1xuICAgICAgICBocmVmID0gJ21haWx0bzonICsgdGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvIGV4dGVuZGVkIGF1dG9saW5rIHBhdGggdmFsaWRhdGlvblxuICAgICAgICBkbyB7XG4gICAgICAgICAgcHJldkNhcFplcm8gPSBjYXBbMF07XG4gICAgICAgICAgY2FwWzBdID0gdGhpcy5ydWxlcy5fYmFja3BlZGFsLmV4ZWMoY2FwWzBdKVswXTtcbiAgICAgICAgfSB3aGlsZSAocHJldkNhcFplcm8gIT09IGNhcFswXSk7XG4gICAgICAgIHRleHQgPSBlc2NhcGUoY2FwWzBdKTtcbiAgICAgICAgaWYgKGNhcFsxXSA9PT0gJ3d3dy4nKSB7XG4gICAgICAgICAgaHJlZiA9ICdodHRwOi8vJyArIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHJlZiA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5saW5rKGhyZWYsIG51bGwsIHRleHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gdGFnXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGFnLmV4ZWMoc3JjKSkge1xuICAgICAgaWYgKCF0aGlzLmluTGluayAmJiAvXjxhIC9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5MaW5rICYmIC9ePFxcL2E+L2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaW5SYXdCbG9jayAmJiAvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXFxzfD4pL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5SYXdCbG9jayAmJiAvXjxcXC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXFxzfD4pL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5SYXdCbG9jayA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMub3B0aW9ucy5zYW5pdGl6ZVxuICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXJcbiAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXIoY2FwWzBdKVxuICAgICAgICAgIDogZXNjYXBlKGNhcFswXSlcbiAgICAgICAgOiBjYXBbMF07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsaW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubGluay5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICBocmVmID0gY2FwWzJdO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICBsaW5rID0gL14oW14nXCJdKlteXFxzXSlcXHMrKFsnXCJdKSguKilcXDIvLmV4ZWMoaHJlZik7XG5cbiAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICBocmVmID0gbGlua1sxXTtcbiAgICAgICAgICB0aXRsZSA9IGxpbmtbM107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc2xpY2UoMSwgLTEpIDogJyc7XG4gICAgICB9XG4gICAgICBocmVmID0gaHJlZi50cmltKCkucmVwbGFjZSgvXjwoW1xcc1xcU10qKT4kLywgJyQxJyk7XG4gICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwge1xuICAgICAgICBocmVmOiBJbmxpbmVMZXhlci5lc2NhcGVzKGhyZWYpLFxuICAgICAgICB0aXRsZTogSW5saW5lTGV4ZXIuZXNjYXBlcyh0aXRsZSlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbkxpbmsgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHJlZmxpbmssIG5vbGlua1xuICAgIGlmICgoY2FwID0gdGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoc3JjKSlcbiAgICAgICAgfHwgKGNhcCA9IHRoaXMucnVsZXMubm9saW5rLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBsaW5rID0gKGNhcFsyXSB8fCBjYXBbMV0pLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgIGxpbmsgPSB0aGlzLmxpbmtzW2xpbmsudG9Mb3dlckNhc2UoKV07XG4gICAgICBpZiAoIWxpbmsgfHwgIWxpbmsuaHJlZikge1xuICAgICAgICBvdXQgKz0gY2FwWzBdLmNoYXJBdCgwKTtcbiAgICAgICAgc3JjID0gY2FwWzBdLnN1YnN0cmluZygxKSArIHNyYztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwgbGluayk7XG4gICAgICB0aGlzLmluTGluayA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc3Ryb25nXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnN0cm9uZyh0aGlzLm91dHB1dChjYXBbNF0gfHwgY2FwWzNdIHx8IGNhcFsyXSB8fCBjYXBbMV0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGVtXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZW0uZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoY2FwWzZdIHx8IGNhcFs1XSB8fCBjYXBbNF0gfHwgY2FwWzNdIHx8IGNhcFsyXSB8fCBjYXBbMV0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGNvZGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5jb2RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmNvZGVzcGFuKGVzY2FwZShjYXBbMl0udHJpbSgpLCB0cnVlKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBiclxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmJyLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmJyKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBkZWwgKGdmbSlcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5kZWwuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGNhcFsxXSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gdGV4dFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLnRleHQuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKHRoaXMuaW5SYXdCbG9jaykge1xuICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50ZXh0KGNhcFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50ZXh0KGVzY2FwZSh0aGlzLnNtYXJ0eXBhbnRzKGNhcFswXSkpKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5JbmxpbmVMZXhlci5lc2NhcGVzID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gdGV4dCA/IHRleHQucmVwbGFjZShJbmxpbmVMZXhlci5ydWxlcy5fZXNjYXBlcywgJyQxJykgOiB0ZXh0O1xufTtcblxuLyoqXG4gKiBDb21waWxlIExpbmtcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUub3V0cHV0TGluayA9IGZ1bmN0aW9uKGNhcCwgbGluaykge1xuICB2YXIgaHJlZiA9IGxpbmsuaHJlZixcbiAgICAgIHRpdGxlID0gbGluay50aXRsZSA/IGVzY2FwZShsaW5rLnRpdGxlKSA6IG51bGw7XG5cbiAgcmV0dXJuIGNhcFswXS5jaGFyQXQoMCkgIT09ICchJ1xuICAgID8gdGhpcy5yZW5kZXJlci5saW5rKGhyZWYsIHRpdGxlLCB0aGlzLm91dHB1dChjYXBbMV0pKVxuICAgIDogdGhpcy5yZW5kZXJlci5pbWFnZShocmVmLCB0aXRsZSwgZXNjYXBlKGNhcFsxXSkpO1xufTtcblxuLyoqXG4gKiBTbWFydHlwYW50cyBUcmFuc2Zvcm1hdGlvbnNcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUuc21hcnR5cGFudHMgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIGlmICghdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIHRleHRcbiAgICAvLyBlbS1kYXNoZXNcbiAgICAucmVwbGFjZSgvLS0tL2csICdcXHUyMDE0JylcbiAgICAvLyBlbi1kYXNoZXNcbiAgICAucmVwbGFjZSgvLS0vZywgJ1xcdTIwMTMnKVxuICAgIC8vIG9wZW5pbmcgc2luZ2xlc1xuICAgIC5yZXBsYWNlKC8oXnxbLVxcdTIwMTQvKFxcW3tcIlxcc10pJy9nLCAnJDFcXHUyMDE4JylcbiAgICAvLyBjbG9zaW5nIHNpbmdsZXMgJiBhcG9zdHJvcGhlc1xuICAgIC5yZXBsYWNlKC8nL2csICdcXHUyMDE5JylcbiAgICAvLyBvcGVuaW5nIGRvdWJsZXNcbiAgICAucmVwbGFjZSgvKF58Wy1cXHUyMDE0LyhcXFt7XFx1MjAxOFxcc10pXCIvZywgJyQxXFx1MjAxYycpXG4gICAgLy8gY2xvc2luZyBkb3VibGVzXG4gICAgLnJlcGxhY2UoL1wiL2csICdcXHUyMDFkJylcbiAgICAvLyBlbGxpcHNlc1xuICAgIC5yZXBsYWNlKC9cXC57M30vZywgJ1xcdTIwMjYnKTtcbn07XG5cbi8qKlxuICogTWFuZ2xlIExpbmtzXG4gKi9cblxuSW5saW5lTGV4ZXIucHJvdG90eXBlLm1hbmdsZSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgaWYgKCF0aGlzLm9wdGlvbnMubWFuZ2xlKSByZXR1cm4gdGV4dDtcbiAgdmFyIG91dCA9ICcnLFxuICAgICAgbCA9IHRleHQubGVuZ3RoLFxuICAgICAgaSA9IDAsXG4gICAgICBjaDtcblxuICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgIGNoID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC41KSB7XG4gICAgICBjaCA9ICd4JyArIGNoLnRvU3RyaW5nKDE2KTtcbiAgICB9XG4gICAgb3V0ICs9ICcmIycgKyBjaCArICc7JztcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcmVyXG4gKi9cblxuZnVuY3Rpb24gUmVuZGVyZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbn1cblxuUmVuZGVyZXIucHJvdG90eXBlLmNvZGUgPSBmdW5jdGlvbihjb2RlLCBsYW5nLCBlc2NhcGVkKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KSB7XG4gICAgdmFyIG91dCA9IHRoaXMub3B0aW9ucy5oaWdobGlnaHQoY29kZSwgbGFuZyk7XG4gICAgaWYgKG91dCAhPSBudWxsICYmIG91dCAhPT0gY29kZSkge1xuICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICBjb2RlID0gb3V0O1xuICAgIH1cbiAgfVxuXG4gIGlmICghbGFuZykge1xuICAgIHJldHVybiAnPHByZT48Y29kZT4nXG4gICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICAgICsgJzwvY29kZT48L3ByZT4nO1xuICB9XG5cbiAgcmV0dXJuICc8cHJlPjxjb2RlIGNsYXNzPVwiJ1xuICAgICsgdGhpcy5vcHRpb25zLmxhbmdQcmVmaXhcbiAgICArIGVzY2FwZShsYW5nLCB0cnVlKVxuICAgICsgJ1wiPidcbiAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICArICc8L2NvZGU+PC9wcmU+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5ibG9ja3F1b3RlID0gZnVuY3Rpb24ocXVvdGUpIHtcbiAgcmV0dXJuICc8YmxvY2txdW90ZT5cXG4nICsgcXVvdGUgKyAnPC9ibG9ja3F1b3RlPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgcmV0dXJuIGh0bWw7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaGVhZGluZyA9IGZ1bmN0aW9uKHRleHQsIGxldmVsLCByYXcpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJJZHMpIHtcbiAgICByZXR1cm4gJzxoJ1xuICAgICAgKyBsZXZlbFxuICAgICAgKyAnIGlkPVwiJ1xuICAgICAgKyB0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4XG4gICAgICArIHJhdy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXFx3XSsvZywgJy0nKVxuICAgICAgKyAnXCI+J1xuICAgICAgKyB0ZXh0XG4gICAgICArICc8L2gnXG4gICAgICArIGxldmVsXG4gICAgICArICc+XFxuJztcbiAgfVxuICAvLyBpZ25vcmUgSURzXG4gIHJldHVybiAnPGgnICsgbGV2ZWwgKyAnPicgKyB0ZXh0ICsgJzwvaCcgKyBsZXZlbCArICc+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5ociA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sID8gJzxoci8+XFxuJyA6ICc8aHI+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saXN0ID0gZnVuY3Rpb24oYm9keSwgb3JkZXJlZCwgc3RhcnQpIHtcbiAgdmFyIHR5cGUgPSBvcmRlcmVkID8gJ29sJyA6ICd1bCcsXG4gICAgICBzdGFydGF0dCA9IChvcmRlcmVkICYmIHN0YXJ0ICE9PSAxKSA/ICgnIHN0YXJ0PVwiJyArIHN0YXJ0ICsgJ1wiJykgOiAnJztcbiAgcmV0dXJuICc8JyArIHR5cGUgKyBzdGFydGF0dCArICc+XFxuJyArIGJvZHkgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saXN0aXRlbSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuICc8bGk+JyArIHRleHQgKyAnPC9saT5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmNoZWNrYm94ID0gZnVuY3Rpb24oY2hlY2tlZCkge1xuICByZXR1cm4gJzxpbnB1dCAnXG4gICAgKyAoY2hlY2tlZCA/ICdjaGVja2VkPVwiXCIgJyA6ICcnKVxuICAgICsgJ2Rpc2FibGVkPVwiXCIgdHlwZT1cImNoZWNrYm94XCInXG4gICAgKyAodGhpcy5vcHRpb25zLnhodG1sID8gJyAvJyA6ICcnKVxuICAgICsgJz4gJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5wYXJhZ3JhcGggPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPHA+JyArIHRleHQgKyAnPC9wPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUudGFibGUgPSBmdW5jdGlvbihoZWFkZXIsIGJvZHkpIHtcbiAgaWYgKGJvZHkpIGJvZHkgPSAnPHRib2R5PicgKyBib2R5ICsgJzwvdGJvZHk+JztcblxuICByZXR1cm4gJzx0YWJsZT5cXG4nXG4gICAgKyAnPHRoZWFkPlxcbidcbiAgICArIGhlYWRlclxuICAgICsgJzwvdGhlYWQ+XFxuJ1xuICAgICsgYm9keVxuICAgICsgJzwvdGFibGU+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS50YWJsZXJvdyA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgcmV0dXJuICc8dHI+XFxuJyArIGNvbnRlbnQgKyAnPC90cj5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnRhYmxlY2VsbCA9IGZ1bmN0aW9uKGNvbnRlbnQsIGZsYWdzKSB7XG4gIHZhciB0eXBlID0gZmxhZ3MuaGVhZGVyID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciB0YWcgPSBmbGFncy5hbGlnblxuICAgID8gJzwnICsgdHlwZSArICcgYWxpZ249XCInICsgZmxhZ3MuYWxpZ24gKyAnXCI+J1xuICAgIDogJzwnICsgdHlwZSArICc+JztcbiAgcmV0dXJuIHRhZyArIGNvbnRlbnQgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbn07XG5cbi8vIHNwYW4gbGV2ZWwgcmVuZGVyZXJcblJlbmRlcmVyLnByb3RvdHlwZS5zdHJvbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPHN0cm9uZz4nICsgdGV4dCArICc8L3N0cm9uZz4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmVtID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxlbT4nICsgdGV4dCArICc8L2VtPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuY29kZXNwYW4gPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPGNvZGU+JyArIHRleHQgKyAnPC9jb2RlPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuYnIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbCA/ICc8YnIvPicgOiAnPGJyPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxkZWw+JyArIHRleHQgKyAnPC9kZWw+Jztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgaHJlZiA9IGNsZWFuVXJsKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSwgdGhpcy5vcHRpb25zLmJhc2VVcmwsIGhyZWYpO1xuICBpZiAoaHJlZiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHZhciBvdXQgPSAnPGEgaHJlZj1cIicgKyBlc2NhcGUoaHJlZikgKyAnXCInO1xuICBpZiAodGl0bGUpIHtcbiAgICBvdXQgKz0gJyB0aXRsZT1cIicgKyB0aXRsZSArICdcIic7XG4gIH1cbiAgb3V0ICs9ICc+JyArIHRleHQgKyAnPC9hPic7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaW1hZ2UgPSBmdW5jdGlvbihocmVmLCB0aXRsZSwgdGV4dCkge1xuICBocmVmID0gY2xlYW5VcmwodGhpcy5vcHRpb25zLnNhbml0aXplLCB0aGlzLm9wdGlvbnMuYmFzZVVybCwgaHJlZik7XG4gIGlmIChocmVmID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB2YXIgb3V0ID0gJzxpbWcgc3JjPVwiJyArIGhyZWYgKyAnXCIgYWx0PVwiJyArIHRleHQgKyAnXCInO1xuICBpZiAodGl0bGUpIHtcbiAgICBvdXQgKz0gJyB0aXRsZT1cIicgKyB0aXRsZSArICdcIic7XG4gIH1cbiAgb3V0ICs9IHRoaXMub3B0aW9ucy54aHRtbCA/ICcvPicgOiAnPic7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQ7XG59O1xuXG4vKipcbiAqIFRleHRSZW5kZXJlclxuICogcmV0dXJucyBvbmx5IHRoZSB0ZXh0dWFsIHBhcnQgb2YgdGhlIHRva2VuXG4gKi9cblxuZnVuY3Rpb24gVGV4dFJlbmRlcmVyKCkge31cblxuLy8gbm8gbmVlZCBmb3IgYmxvY2sgbGV2ZWwgcmVuZGVyZXJzXG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUuc3Ryb25nID1cblRleHRSZW5kZXJlci5wcm90b3R5cGUuZW0gPVxuVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5jb2Rlc3BhbiA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLmRlbCA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICByZXR1cm4gdGV4dDtcbn07XG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUubGluayA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLmltYWdlID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgcmV0dXJuICcnICsgdGV4dDtcbn07XG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUuYnIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBQYXJzaW5nICYgQ29tcGlsaW5nXG4gKi9cblxuZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMpIHtcbiAgdGhpcy50b2tlbnMgPSBbXTtcbiAgdGhpcy50b2tlbiA9IG51bGw7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgbWFya2VkLmRlZmF1bHRzO1xuICB0aGlzLm9wdGlvbnMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXIgfHwgbmV3IFJlbmRlcmVyKCk7XG4gIHRoaXMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXI7XG4gIHRoaXMucmVuZGVyZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbn1cblxuLyoqXG4gKiBTdGF0aWMgUGFyc2UgTWV0aG9kXG4gKi9cblxuUGFyc2VyLnBhcnNlID0gZnVuY3Rpb24oc3JjLCBvcHRpb25zKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICByZXR1cm4gcGFyc2VyLnBhcnNlKHNyYyk7XG59O1xuXG4vKipcbiAqIFBhcnNlIExvb3BcbiAqL1xuXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oc3JjKSB7XG4gIHRoaXMuaW5saW5lID0gbmV3IElubGluZUxleGVyKHNyYy5saW5rcywgdGhpcy5vcHRpb25zKTtcbiAgLy8gdXNlIGFuIElubGluZUxleGVyIHdpdGggYSBUZXh0UmVuZGVyZXIgdG8gZXh0cmFjdCBwdXJlIHRleHRcbiAgdGhpcy5pbmxpbmVUZXh0ID0gbmV3IElubGluZUxleGVyKFxuICAgIHNyYy5saW5rcyxcbiAgICBtZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7cmVuZGVyZXI6IG5ldyBUZXh0UmVuZGVyZXIoKX0pXG4gICk7XG4gIHRoaXMudG9rZW5zID0gc3JjLnJldmVyc2UoKTtcblxuICB2YXIgb3V0ID0gJyc7XG4gIHdoaWxlICh0aGlzLm5leHQoKSkge1xuICAgIG91dCArPSB0aGlzLnRvaygpO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogTmV4dCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b2tlbiA9IHRoaXMudG9rZW5zLnBvcCgpO1xufTtcblxuLyoqXG4gKiBQcmV2aWV3IE5leHQgVG9rZW5cbiAqL1xuXG5QYXJzZXIucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdIHx8IDA7XG59O1xuXG4vKipcbiAqIFBhcnNlIFRleHQgVG9rZW5zXG4gKi9cblxuUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRleHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGJvZHkgPSB0aGlzLnRva2VuLnRleHQ7XG5cbiAgd2hpbGUgKHRoaXMucGVlaygpLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGJvZHkgKz0gJ1xcbicgKyB0aGlzLm5leHQoKS50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuaW5saW5lLm91dHB1dChib2R5KTtcbn07XG5cbi8qKlxuICogUGFyc2UgQ3VycmVudCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUudG9rID0gZnVuY3Rpb24oKSB7XG4gIHN3aXRjaCAodGhpcy50b2tlbi50eXBlKSB7XG4gICAgY2FzZSAnc3BhY2UnOiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNhc2UgJ2hyJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuaHIoKTtcbiAgICB9XG4gICAgY2FzZSAnaGVhZGluZyc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmhlYWRpbmcoXG4gICAgICAgIHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLFxuICAgICAgICB0aGlzLnRva2VuLmRlcHRoLFxuICAgICAgICB1bmVzY2FwZSh0aGlzLmlubGluZVRleHQub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpKTtcbiAgICB9XG4gICAgY2FzZSAnY29kZSc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmNvZGUodGhpcy50b2tlbi50ZXh0LFxuICAgICAgICB0aGlzLnRva2VuLmxhbmcsXG4gICAgICAgIHRoaXMudG9rZW4uZXNjYXBlZCk7XG4gICAgfVxuICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgdmFyIGhlYWRlciA9ICcnLFxuICAgICAgICAgIGJvZHkgPSAnJyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjZWxsLFxuICAgICAgICAgIGo7XG5cbiAgICAgIC8vIGhlYWRlclxuICAgICAgY2VsbCA9ICcnO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNlbGwgKz0gdGhpcy5yZW5kZXJlci50YWJsZWNlbGwoXG4gICAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2ldKSxcbiAgICAgICAgICB7IGhlYWRlcjogdHJ1ZSwgYWxpZ246IHRoaXMudG9rZW4uYWxpZ25baV0gfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaGVhZGVyICs9IHRoaXMucmVuZGVyZXIudGFibGVyb3coY2VsbCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJvdyA9IHRoaXMudG9rZW4uY2VsbHNbaV07XG5cbiAgICAgICAgY2VsbCA9ICcnO1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY2VsbCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlY2VsbChcbiAgICAgICAgICAgIHRoaXMuaW5saW5lLm91dHB1dChyb3dbal0pLFxuICAgICAgICAgICAgeyBoZWFkZXI6IGZhbHNlLCBhbGlnbjogdGhpcy50b2tlbi5hbGlnbltqXSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgKz0gdGhpcy5yZW5kZXJlci50YWJsZXJvdyhjZWxsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGhlYWRlciwgYm9keSk7XG4gICAgfVxuICAgIGNhc2UgJ2Jsb2NrcXVvdGVfc3RhcnQnOiB7XG4gICAgICBib2R5ID0gJyc7XG5cbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKS50eXBlICE9PSAnYmxvY2txdW90ZV9lbmQnKSB7XG4gICAgICAgIGJvZHkgKz0gdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShib2R5KTtcbiAgICB9XG4gICAgY2FzZSAnbGlzdF9zdGFydCc6IHtcbiAgICAgIGJvZHkgPSAnJztcbiAgICAgIHZhciBvcmRlcmVkID0gdGhpcy50b2tlbi5vcmRlcmVkLFxuICAgICAgICAgIHN0YXJ0ID0gdGhpcy50b2tlbi5zdGFydDtcblxuICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdsaXN0X2VuZCcpIHtcbiAgICAgICAgYm9keSArPSB0aGlzLnRvaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGJvZHksIG9yZGVyZWQsIHN0YXJ0KTtcbiAgICB9XG4gICAgY2FzZSAnbGlzdF9pdGVtX3N0YXJ0Jzoge1xuICAgICAgYm9keSA9ICcnO1xuICAgICAgdmFyIGxvb3NlID0gdGhpcy50b2tlbi5sb29zZTtcblxuICAgICAgaWYgKHRoaXMudG9rZW4udGFzaykge1xuICAgICAgICBib2R5ICs9IHRoaXMucmVuZGVyZXIuY2hlY2tib3godGhpcy50b2tlbi5jaGVja2VkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdsaXN0X2l0ZW1fZW5kJykge1xuICAgICAgICBib2R5ICs9ICFsb29zZSAmJiB0aGlzLnRva2VuLnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgID8gdGhpcy5wYXJzZVRleHQoKVxuICAgICAgICAgIDogdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0oYm9keSk7XG4gICAgfVxuICAgIGNhc2UgJ2h0bWwnOiB7XG4gICAgICAvLyBUT0RPIHBhcnNlIGlubGluZSBjb250ZW50IGlmIHBhcmFtZXRlciBtYXJrZG93bj0xXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKHRoaXMudG9rZW4udGV4dCk7XG4gICAgfVxuICAgIGNhc2UgJ3BhcmFncmFwaCc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7XG4gICAgfVxuICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlcnNcbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoaHRtbCwgZW5jb2RlKSB7XG4gIGlmIChlbmNvZGUpIHtcbiAgICBpZiAoZXNjYXBlLmVzY2FwZVRlc3QudGVzdChodG1sKSkge1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlc2NhcGUuZXNjYXBlUmVwbGFjZSwgZnVuY3Rpb24gKGNoKSB7IHJldHVybiBlc2NhcGUucmVwbGFjZW1lbnRzW2NoXTsgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChlc2NhcGUuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoaHRtbCkpIHtcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoZXNjYXBlLmVzY2FwZVJlcGxhY2VOb0VuY29kZSwgZnVuY3Rpb24gKGNoKSB7IHJldHVybiBlc2NhcGUucmVwbGFjZW1lbnRzW2NoXTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWw7XG59XG5cbmVzY2FwZS5lc2NhcGVUZXN0ID0gL1smPD5cIiddLztcbmVzY2FwZS5lc2NhcGVSZXBsYWNlID0gL1smPD5cIiddL2c7XG5lc2NhcGUucmVwbGFjZW1lbnRzID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnXG59O1xuXG5lc2NhcGUuZXNjYXBlVGVzdE5vRW5jb2RlID0gL1s8PlwiJ118Jig/ISM/XFx3KzspLztcbmVzY2FwZS5lc2NhcGVSZXBsYWNlTm9FbmNvZGUgPSAvWzw+XCInXXwmKD8hIz9cXHcrOykvZztcblxuZnVuY3Rpb24gdW5lc2NhcGUoaHRtbCkge1xuICAvLyBleHBsaWNpdGx5IG1hdGNoIGRlY2ltYWwsIGhleCwgYW5kIG5hbWVkIEhUTUwgZW50aXRpZXNcbiAgcmV0dXJuIGh0bWwucmVwbGFjZSgvJigjKD86XFxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/OlxcdyspKTs/L2lnLCBmdW5jdGlvbihfLCBuKSB7XG4gICAgbiA9IG4udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobiA9PT0gJ2NvbG9uJykgcmV0dXJuICc6JztcbiAgICBpZiAobi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgcmV0dXJuIG4uY2hhckF0KDEpID09PSAneCdcbiAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLCAxNikpXG4gICAgICAgIDogU3RyaW5nLmZyb21DaGFyQ29kZSgrbi5zdWJzdHJpbmcoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZGl0KHJlZ2V4LCBvcHQpIHtcbiAgcmVnZXggPSByZWdleC5zb3VyY2UgfHwgcmVnZXg7XG4gIG9wdCA9IG9wdCB8fCAnJztcbiAgcmV0dXJuIHtcbiAgICByZXBsYWNlOiBmdW5jdGlvbihuYW1lLCB2YWwpIHtcbiAgICAgIHZhbCA9IHZhbC5zb3VyY2UgfHwgdmFsO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLyhefFteXFxbXSlcXF4vZywgJyQxJyk7XG4gICAgICByZWdleCA9IHJlZ2V4LnJlcGxhY2UobmFtZSwgdmFsKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZ2V0UmVnZXg6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsIG9wdCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGVhblVybChzYW5pdGl6ZSwgYmFzZSwgaHJlZikge1xuICBpZiAoc2FuaXRpemUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHByb3QgPSBkZWNvZGVVUklDb21wb25lbnQodW5lc2NhcGUoaHJlZikpXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcdzpdL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHByb3QuaW5kZXhPZignamF2YXNjcmlwdDonKSA9PT0gMCB8fCBwcm90LmluZGV4T2YoJ3Zic2NyaXB0OicpID09PSAwIHx8IHByb3QuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGlmIChiYXNlICYmICFvcmlnaW5JbmRlcGVuZGVudFVybC50ZXN0KGhyZWYpKSB7XG4gICAgaHJlZiA9IHJlc29sdmVVcmwoYmFzZSwgaHJlZik7XG4gIH1cbiAgdHJ5IHtcbiAgICBocmVmID0gZW5jb2RlVVJJKGhyZWYpLnJlcGxhY2UoLyUyNS9nLCAnJScpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGhyZWY7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVVcmwoYmFzZSwgaHJlZikge1xuICBpZiAoIWJhc2VVcmxzWycgJyArIGJhc2VdKSB7XG4gICAgLy8gd2UgY2FuIGlnbm9yZSBldmVyeXRoaW5nIGluIGJhc2UgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2ggb2YgaXRzIHBhdGggY29tcG9uZW50LFxuICAgIC8vIGJ1dCB3ZSBtaWdodCBuZWVkIHRvIGFkZCBfdGhhdF9cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTNcbiAgICBpZiAoL15bXjpdKzpcXC8qW14vXSokLy50ZXN0KGJhc2UpKSB7XG4gICAgICBiYXNlVXJsc1snICcgKyBiYXNlXSA9IGJhc2UgKyAnLyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VVcmxzWycgJyArIGJhc2VdID0gcnRyaW0oYmFzZSwgJy8nLCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgYmFzZSA9IGJhc2VVcmxzWycgJyArIGJhc2VdO1xuXG4gIGlmIChocmVmLnNsaWNlKDAsIDIpID09PSAnLy8nKSB7XG4gICAgcmV0dXJuIGJhc2UucmVwbGFjZSgvOltcXHNcXFNdKi8sICc6JykgKyBocmVmO1xuICB9IGVsc2UgaWYgKGhyZWYuY2hhckF0KDApID09PSAnLycpIHtcbiAgICByZXR1cm4gYmFzZS5yZXBsYWNlKC8oOlxcLypbXi9dKilbXFxzXFxTXSovLCAnJDEnKSArIGhyZWY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2UgKyBocmVmO1xuICB9XG59XG52YXIgYmFzZVVybHMgPSB7fTtcbnZhciBvcmlnaW5JbmRlcGVuZGVudFVybCA9IC9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxubm9vcC5leGVjID0gbm9vcDtcblxuZnVuY3Rpb24gbWVyZ2Uob2JqKSB7XG4gIHZhciBpID0gMSxcbiAgICAgIHRhcmdldCxcbiAgICAgIGtleTtcblxuICBmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHRhcmdldCA9IGFyZ3VtZW50c1tpXTtcbiAgICBmb3IgKGtleSBpbiB0YXJnZXQpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gc3BsaXRDZWxscyh0YWJsZVJvdywgY291bnQpIHtcbiAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgY2VsbC1kZWxpbWl0aW5nIHBpcGUgaGFzIGEgc3BhY2VcbiAgLy8gYmVmb3JlIGl0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYW4gZXNjYXBlZCBwaXBlXG4gIHZhciByb3cgPSB0YWJsZVJvdy5yZXBsYWNlKC9cXHwvZywgZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cikge1xuICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLFxuICAgICAgICAgICAgY3VyciA9IG9mZnNldDtcbiAgICAgICAgd2hpbGUgKC0tY3VyciA+PSAwICYmIHN0cltjdXJyXSA9PT0gJ1xcXFwnKSBlc2NhcGVkID0gIWVzY2FwZWQ7XG4gICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgLy8gb2RkIG51bWJlciBvZiBzbGFzaGVzIG1lYW5zIHwgaXMgZXNjYXBlZFxuICAgICAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IGFsb25lXG4gICAgICAgICAgcmV0dXJuICd8JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhZGQgc3BhY2UgYmVmb3JlIHVuZXNjYXBlZCB8XG4gICAgICAgICAgcmV0dXJuICcgfCc7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2VsbHMgPSByb3cuc3BsaXQoLyBcXHwvKSxcbiAgICAgIGkgPSAwO1xuXG4gIGlmIChjZWxscy5sZW5ndGggPiBjb3VudCkge1xuICAgIGNlbGxzLnNwbGljZShjb3VudCk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGNlbGxzLmxlbmd0aCA8IGNvdW50KSBjZWxscy5wdXNoKCcnKTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBwZXIgdGhlIGdmbSBzcGVjXG4gICAgY2VsbHNbaV0gPSBjZWxsc1tpXS50cmltKCkucmVwbGFjZSgvXFxcXFxcfC9nLCAnfCcpO1xuICB9XG4gIHJldHVybiBjZWxscztcbn1cblxuLy8gUmVtb3ZlIHRyYWlsaW5nICdjJ3MuIEVxdWl2YWxlbnQgdG8gc3RyLnJlcGxhY2UoL2MqJC8sICcnKS5cbi8vIC9jKiQvIGlzIHZ1bG5lcmFibGUgdG8gUkVET1MuXG4vLyBpbnZlcnQ6IFJlbW92ZSBzdWZmaXggb2Ygbm9uLWMgY2hhcnMgaW5zdGVhZC4gRGVmYXVsdCBmYWxzZXkuXG5mdW5jdGlvbiBydHJpbShzdHIsIGMsIGludmVydCkge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIExlbmd0aCBvZiBzdWZmaXggbWF0Y2hpbmcgdGhlIGludmVydCBjb25kaXRpb24uXG4gIHZhciBzdWZmTGVuID0gMDtcblxuICAvLyBTdGVwIGxlZnQgdW50aWwgd2UgZmFpbCB0byBtYXRjaCB0aGUgaW52ZXJ0IGNvbmRpdGlvbi5cbiAgd2hpbGUgKHN1ZmZMZW4gPCBzdHIubGVuZ3RoKSB7XG4gICAgdmFyIGN1cnJDaGFyID0gc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gc3VmZkxlbiAtIDEpO1xuICAgIGlmIChjdXJyQ2hhciA9PT0gYyAmJiAhaW52ZXJ0KSB7XG4gICAgICBzdWZmTGVuKys7XG4gICAgfSBlbHNlIGlmIChjdXJyQ2hhciAhPT0gYyAmJiBpbnZlcnQpIHtcbiAgICAgIHN1ZmZMZW4rKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHIoMCwgc3RyLmxlbmd0aCAtIHN1ZmZMZW4pO1xufVxuXG4vKipcbiAqIE1hcmtlZFxuICovXG5cbmZ1bmN0aW9uIG1hcmtlZChzcmMsIG9wdCwgY2FsbGJhY2spIHtcbiAgLy8gdGhyb3cgZXJyb3IgaW4gY2FzZSBvZiBub24gc3RyaW5nIGlucHV0XG4gIGlmICh0eXBlb2Ygc3JjID09PSAndW5kZWZpbmVkJyB8fCBzcmMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgfVxuICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAnXG4gICAgICArIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzcmMpICsgJywgc3RyaW5nIGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoY2FsbGJhY2sgfHwgdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0O1xuICAgICAgb3B0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBvcHQgPSBtZXJnZSh7fSwgbWFya2VkLmRlZmF1bHRzLCBvcHQgfHwge30pO1xuXG4gICAgdmFyIGhpZ2hsaWdodCA9IG9wdC5oaWdobGlnaHQsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgcGVuZGluZyxcbiAgICAgICAgaSA9IDA7XG5cbiAgICB0cnkge1xuICAgICAgdG9rZW5zID0gTGV4ZXIubGV4KHNyYywgb3B0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgfVxuXG4gICAgcGVuZGluZyA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBvcHQuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG91dDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgb3V0ID0gUGFyc2VyLnBhcnNlKHRva2Vucywgb3B0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyID0gZTtcbiAgICAgIH1cblxuICAgICAgb3B0LmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcblxuICAgICAgcmV0dXJuIGVyclxuICAgICAgICA/IGNhbGxiYWNrKGVycilcbiAgICAgICAgOiBjYWxsYmFjayhudWxsLCBvdXQpO1xuICAgIH07XG5cbiAgICBpZiAoIWhpZ2hsaWdodCB8fCBoaWdobGlnaHQubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgb3B0LmhpZ2hsaWdodDtcblxuICAgIGlmICghcGVuZGluZykgcmV0dXJuIGRvbmUoKTtcblxuICAgIGZvciAoOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09ICdjb2RlJykge1xuICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQodG9rZW4udGV4dCwgdG9rZW4ubGFuZywgZnVuY3Rpb24oZXJyLCBjb2RlKSB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IHRva2VuLnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbi50ZXh0ID0gY29kZTtcbiAgICAgICAgICB0b2tlbi5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKHRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdCkgb3B0ID0gbWVyZ2Uoe30sIG1hcmtlZC5kZWZhdWx0cywgb3B0KTtcbiAgICByZXR1cm4gUGFyc2VyLnBhcnNlKExleGVyLmxleChzcmMsIG9wdCksIG9wdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlLm1lc3NhZ2UgKz0gJ1xcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLic7XG4gICAgaWYgKChvcHQgfHwgbWFya2VkLmRlZmF1bHRzKS5zaWxlbnQpIHtcbiAgICAgIHJldHVybiAnPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+J1xuICAgICAgICArIGVzY2FwZShlLm1lc3NhZ2UgKyAnJywgdHJ1ZSlcbiAgICAgICAgKyAnPC9wcmU+JztcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnNcbiAqL1xuXG5tYXJrZWQub3B0aW9ucyA9XG5tYXJrZWQuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdCkge1xuICBtZXJnZShtYXJrZWQuZGVmYXVsdHMsIG9wdCk7XG4gIHJldHVybiBtYXJrZWQ7XG59O1xuXG5tYXJrZWQuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZVVybDogbnVsbCxcbiAgICBicmVha3M6IGZhbHNlLFxuICAgIGdmbTogdHJ1ZSxcbiAgICBoZWFkZXJJZHM6IHRydWUsXG4gICAgaGVhZGVyUHJlZml4OiAnJyxcbiAgICBoaWdobGlnaHQ6IG51bGwsXG4gICAgbGFuZ1ByZWZpeDogJ2xhbmd1YWdlLScsXG4gICAgbWFuZ2xlOiB0cnVlLFxuICAgIHBlZGFudGljOiBmYWxzZSxcbiAgICByZW5kZXJlcjogbmV3IFJlbmRlcmVyKCksXG4gICAgc2FuaXRpemU6IGZhbHNlLFxuICAgIHNhbml0aXplcjogbnVsbCxcbiAgICBzaWxlbnQ6IGZhbHNlLFxuICAgIHNtYXJ0TGlzdHM6IGZhbHNlLFxuICAgIHNtYXJ0eXBhbnRzOiBmYWxzZSxcbiAgICB0YWJsZXM6IHRydWUsXG4gICAgeGh0bWw6IGZhbHNlXG4gIH07XG59O1xuXG5tYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWQuZ2V0RGVmYXVsdHMoKTtcblxuLyoqXG4gKiBFeHBvc2VcbiAqL1xuXG5tYXJrZWQuUGFyc2VyID0gUGFyc2VyO1xubWFya2VkLnBhcnNlciA9IFBhcnNlci5wYXJzZTtcblxubWFya2VkLlJlbmRlcmVyID0gUmVuZGVyZXI7XG5tYXJrZWQuVGV4dFJlbmRlcmVyID0gVGV4dFJlbmRlcmVyO1xuXG5tYXJrZWQuTGV4ZXIgPSBMZXhlcjtcbm1hcmtlZC5sZXhlciA9IExleGVyLmxleDtcblxubWFya2VkLklubGluZUxleGVyID0gSW5saW5lTGV4ZXI7XG5tYXJrZWQuaW5saW5lTGV4ZXIgPSBJbmxpbmVMZXhlci5vdXRwdXQ7XG5cbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICBtb2R1bGUuZXhwb3J0cyA9IG1hcmtlZDtcbn0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIG1hcmtlZDsgfSk7XG59IGVsc2Uge1xuICByb290Lm1hcmtlZCA9IG1hcmtlZDtcbn1cbn0pKHRoaXMgfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKSk7XG4iLCJ2YXIgaGxqcyA9IHJlcXVpcmUoJy4vaGlnaGxpZ2h0Jyk7XG5cbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnMWMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy8xYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWJuZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FjY2Vzc2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FjY2Vzc2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWN0aW9uc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhZGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hZGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FuZ2Vsc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYW5nZWxzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FwYWNoZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FwYWNoZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXBwbGVzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcHBsZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXJjYWRlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJjYWRlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjcHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jcHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FyZHVpbm8nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcmR1aW5vJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhcm1hc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcm1hc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3htbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3htbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXNjaWlkb2MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hc2NpaWRvYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXNwZWN0aicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FzcGVjdGonKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2F1dG9ob3RrZXknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hdXRvaG90a2V5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhdXRvaXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hdXRvaXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2F2cmFzbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2F2cmFzbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXdrJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXdrJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdheGFwdGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9heGFwdGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Jhc2gnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9iYXNoJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdiYXNpYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2Jhc2ljJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdibmYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2JyYWluZnVjaycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2JyYWluZnVjaycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2FsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY2FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjYXBucHJvdG8nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jYXBucHJvdG8nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NleWxvbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NleWxvbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2xlYW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbGVhbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2xvanVyZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2Nsb2p1cmUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Nsb2p1cmUtcmVwbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2Nsb2p1cmUtcmVwbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY21ha2UnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbWFrZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY29mZmVlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY29mZmVlc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjb3EnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jb3EnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NvcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NvcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3Jtc2gnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jcm1zaCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3J5c3RhbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NyeXN0YWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NzcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3NzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWFya2Rvd24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXJrZG93bicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGFydCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RhcnQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RlbHBoaScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RlbHBoaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGlmZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RpZmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RqYW5nbycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RqYW5nbycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZG5zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZG5zJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkb2NrZXJmaWxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZG9ja2VyZmlsZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZG9zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZG9zJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkc2NvbmZpZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RzY29uZmlnJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkdHMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kdHMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2R1c3QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kdXN0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlYm5mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZWJuZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZWxpeGlyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZWxpeGlyJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlbG0nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lbG0nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1YnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydWJ5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlcmInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lcmInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VybGFuZy1yZXBsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZXJsYW5nLXJlcGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VybGFuZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VybGFuZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZXhjZWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9leGNlbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZml4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZml4JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdmbGl4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZmxpeCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZm9ydHJhbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2ZvcnRyYW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2ZzaGFycCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2ZzaGFycCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ2FtcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dhbXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dhdXNzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2F1c3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2djb2RlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2NvZGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2doZXJraW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9naGVya2luJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnbHNsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2xzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ21sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ21sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnbycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnb2xvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ29sbycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ3JhZGxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ3JhZGxlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdncm9vdnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ncm9vdnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oYW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoYW5kbGViYXJzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaGFuZGxlYmFycycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaGFza2VsbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hhc2tlbGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hheGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oYXhlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoc3AnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oc3AnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2h0bWxiYXJzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaHRtbGJhcnMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2h0dHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9odHRwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoeScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2h5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdpbmZvcm03JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaW5mb3JtNycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaW5pJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaW5pJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdpcnBmOTAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pcnBmOTAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2lzYmwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pc2JsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqYXZhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvamF2YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnamF2YXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2phdmFzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2pib3NzLWNsaScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2pib3NzLWNsaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnanNvbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2pzb24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2p1bGlhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvanVsaWEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2p1bGlhLXJlcGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qdWxpYS1yZXBsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdrb3RsaW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9rb3RsaW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xhc3NvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGFzc28nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xkaWYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sZGlmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsZWFmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGVhZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGVzcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xlc3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xpc3AnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9saXNwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsaXZlY29kZXNlcnZlcicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xpdmVjb2Rlc2VydmVyJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsaXZlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGl2ZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGx2bScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xsdm0nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xzbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbHVhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbHVhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYWtlZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21ha2VmaWxlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYXRoZW1hdGljYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21hdGhlbWF0aWNhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYXRsYWInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXRsYWInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21heGltYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21heGltYScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWVsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWVsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtZXJjdXJ5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWVyY3VyeScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWlwc2FzbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21pcHNhc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21pemFyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWl6YXInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BlcmwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wZXJsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtb2pvbGljaW91cycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21vam9saWNpb3VzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtb25rZXknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tb25rZXknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21vb25zY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tb29uc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduMXFsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbjFxbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbmdpbngnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uZ2lueCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbmltcm9kJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbmltcm9kJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduaXgnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uaXgnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ25zaXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uc2lzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdvYmplY3RpdmVjJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb2JqZWN0aXZlYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb2NhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9vY2FtbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb3BlbnNjYWQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9vcGVuc2NhZCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb3h5Z2VuZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL294eWdlbmUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BhcnNlcjMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wYXJzZXIzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwZ3NxbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Bnc3FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwaHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9waHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BsYWludGV4dCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BsYWludGV4dCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncG9ueScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BvbnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Bvd2Vyc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wb3dlcnNoZWxsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwcm9jZXNzaW5nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvY2Vzc2luZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb2ZpbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvcGVydGllcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb3BlcnRpZXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb3RvYnVmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvdG9idWYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3B1cHBldCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3B1cHBldCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHVyZWJhc2ljJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHVyZWJhc2ljJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdweXRob24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9weXRob24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3EnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9xJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdxbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9xbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3InLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyZWFzb25tbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JlYXNvbm1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyaWInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yaWInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JvYm9jb25mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcm9ib2NvbmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JvdXRlcm9zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcm91dGVyb3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JzbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncnVsZXNsYW5ndWFnZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3J1bGVzbGFuZ3VhZ2UnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1c3QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydXN0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzYXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zYXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NjYWxhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NhbGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NjaGVtZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NjaGVtZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2NpbGFiJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NpbGFiJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzY3NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zaGVsbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc21hbGknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWFsaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc21hbGx0YWxrJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc21hbGx0YWxrJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NxZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NxZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3FsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdGFuJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3RhbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3RhdGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdGF0YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3RlcDIxJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3RlcDIxJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdHlsdXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdHlsdXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N1YnVuaXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdWJ1bml0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzd2lmdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N3aWZ0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0YWdnZXJzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90YWdnZXJzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3lhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy95YW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0YXAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90YXAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RjbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RjbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndGV4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdGV4JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0aHJpZnQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90aHJpZnQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3R3aWcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90d2lnJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0eXBlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdHlwZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmFsYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZhbGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZibmV0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmJuZXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Zic2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmJzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Zic2NyaXB0LWh0bWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92YnNjcmlwdC1odG1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2ZXJpbG9nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmVyaWxvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmhkbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZoZGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZpbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZpbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgneDg2YXNtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMveDg2YXNtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4bCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3hsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4cXVlcnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94cXVlcnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3plcGhpcicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3plcGhpcicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBobGpzOyIsIi8qXG5TeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggbGFuZ3VhZ2UgYXV0b2RldGVjdGlvbi5cbmh0dHBzOi8vaGlnaGxpZ2h0anMub3JnL1xuKi9cblxuKGZ1bmN0aW9uKGZhY3RvcnkpIHtcblxuICAvLyBGaW5kIHRoZSBnbG9iYWwgb2JqZWN0IGZvciBleHBvcnQgdG8gYm90aCB0aGUgYnJvd3NlciBhbmQgd2ViIHdvcmtlcnMuXG4gIHZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmO1xuXG4gIC8vIFNldHVwIGhpZ2hsaWdodC5qcyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50cy4gRmlyc3QgaXMgTm9kZS5qcyBvclxuICAvLyBDb21tb25KUy5cbiAgLy8gYG5vZGVUeXBlYCBpcyBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IGBleHBvcnRzYCBpcyBub3QgYSBIVE1MIGVsZW1lbnQuXG4gIGlmKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyAmJiAhZXhwb3J0cy5ub2RlVHlwZSkge1xuICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gIH0gZWxzZSBpZihnbG9iYWxPYmplY3QpIHtcbiAgICAvLyBFeHBvcnQgaGxqcyBnbG9iYWxseSBldmVuIHdoZW4gdXNpbmcgQU1EIGZvciBjYXNlcyB3aGVuIHRoaXMgc2NyaXB0XG4gICAgLy8gaXMgbG9hZGVkIHdpdGggb3RoZXJzIHRoYXQgbWF5IHN0aWxsIGV4cGVjdCBhIGdsb2JhbCBobGpzLlxuICAgIGdsb2JhbE9iamVjdC5obGpzID0gZmFjdG9yeSh7fSk7XG5cbiAgICAvLyBGaW5hbGx5IHJlZ2lzdGVyIHRoZSBnbG9iYWwgaGxqcyB3aXRoIEFNRC5cbiAgICBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QuaGxqcztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59KGZ1bmN0aW9uKGhsanMpIHtcbiAgLy8gQ29udmVuaWVuY2UgdmFyaWFibGVzIGZvciBidWlsZC1pbiBvYmplY3RzXG4gIHZhciBBcnJheVByb3RvID0gW10sXG4gICAgICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XG5cbiAgLy8gR2xvYmFsIGludGVybmFsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgaGlnaGxpZ2h0LmpzIGxpYnJhcnkuXG4gIHZhciBsYW5ndWFnZXMgPSB7fSxcbiAgICAgIGFsaWFzZXMgICA9IHt9O1xuXG4gIC8vIHNhZmUvcHJvZHVjdGlvbiBtb2RlIC0gc3dhbGxvd3MgbW9yZSBlcnJvcnMsIHRyaWVzIHRvIGtlZXAgcnVubmluZ1xuICAvLyBldmVuIGlmIGEgc2luZ2xlIHN5bnRheCBvciBwYXJzZSBoaXRzIGEgZmF0YWwgZXJyb3JcbiAgdmFyIFNBRkVfTU9ERSA9IHRydWU7XG5cbiAgLy8gUmVndWxhciBleHByZXNzaW9ucyB1c2VkIHRocm91Z2hvdXQgdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICB2YXIgbm9IaWdobGlnaHRSZSAgICA9IC9eKG5vLT9oaWdobGlnaHR8cGxhaW58dGV4dCkkL2ksXG4gICAgICBsYW5ndWFnZVByZWZpeFJlID0gL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2ksXG4gICAgICBmaXhNYXJrdXBSZSAgICAgID0gLygoXig8W14+XSs+fFxcdHwpK3woPzpcXG4pKSkvZ207XG5cbiAgLy8gVGhlIG9iamVjdCB3aWxsIGJlIGFzc2lnbmVkIGJ5IHRoZSBidWlsZCB0b29sLiBJdCB1c2VkIHRvIHN5bmNocm9uaXplIEFQSVxuICAvLyBvZiBleHRlcm5hbCBsYW5ndWFnZSBmaWxlcyB3aXRoIG1pbmlmaWVkIHZlcnNpb24gb2YgdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICB2YXIgQVBJX1JFUExBQ0VTO1xuXG4gIHZhciBzcGFuRW5kVGFnID0gJzwvc3Bhbj4nO1xuICB2YXIgTEFOR1VBR0VfTk9UX0ZPVU5EID0gXCJDb3VsZCBub3QgZmluZCB0aGUgbGFuZ3VhZ2UgJ3t9JywgZGlkIHlvdSBmb3JnZXQgdG8gbG9hZC9pbmNsdWRlIGEgbGFuZ3VhZ2UgbW9kdWxlP1wiO1xuXG4gIC8vIEdsb2JhbCBvcHRpb25zIHVzZWQgd2hlbiB3aXRoaW4gZXh0ZXJuYWwgQVBJcy4gVGhpcyBpcyBtb2RpZmllZCB3aGVuXG4gIC8vIGNhbGxpbmcgdGhlIGBobGpzLmNvbmZpZ3VyZWAgZnVuY3Rpb24uXG4gIHZhciBvcHRpb25zID0ge1xuICAgIGNsYXNzUHJlZml4OiAnaGxqcy0nLFxuICAgIHRhYlJlcGxhY2U6IG51bGwsXG4gICAgdXNlQlI6IGZhbHNlLFxuICAgIGxhbmd1YWdlczogdW5kZWZpbmVkXG4gIH07XG5cbiAgLy8ga2V5d29yZHMgdGhhdCBzaG91bGQgaGF2ZSBubyBkZWZhdWx0IHJlbGV2YW5jZSB2YWx1ZVxuICB2YXIgQ09NTU9OX0tFWVdPUkRTID0gJ29mIGFuZCBmb3IgaW4gbm90IG9yIGlmIHRoZW4nLnNwbGl0KCcgJyk7XG5cblxuICAvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqL1xuXG4gIGZ1bmN0aW9uIGVzY2FwZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIH1cblxuICBmdW5jdGlvbiB0YWcobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXN0UmUocmUsIGxleGVtZSkge1xuICAgIHZhciBtYXRjaCA9IHJlICYmIHJlLmV4ZWMobGV4ZW1lKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IDA7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vdEhpZ2hsaWdodGVkKGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIG5vSGlnaGxpZ2h0UmUudGVzdChsYW5ndWFnZSk7XG4gIH1cblxuICBmdW5jdGlvbiBibG9ja0xhbmd1YWdlKGJsb2NrKSB7XG4gICAgdmFyIGksIG1hdGNoLCBsZW5ndGgsIF9jbGFzcztcbiAgICB2YXIgY2xhc3NlcyA9IGJsb2NrLmNsYXNzTmFtZSArICcgJztcblxuICAgIGNsYXNzZXMgKz0gYmxvY2sucGFyZW50Tm9kZSA/IGJsb2NrLnBhcmVudE5vZGUuY2xhc3NOYW1lIDogJyc7XG5cbiAgICAvLyBsYW5ndWFnZS0qIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBub24tcHJlZml4ZWQgY2xhc3MgbmFtZXMuXG4gICAgbWF0Y2ggPSBsYW5ndWFnZVByZWZpeFJlLmV4ZWMoY2xhc3Nlcyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShtYXRjaFsxXSk7XG4gICAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIG1hdGNoWzFdKSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkZhbGxpbmcgYmFjayB0byBuby1oaWdobGlnaHQgbW9kZSBmb3IgdGhpcyBibG9jay5cIiwgYmxvY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhbmd1YWdlID8gbWF0Y2hbMV0gOiAnbm8taGlnaGxpZ2h0JztcbiAgICB9XG5cbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5zcGxpdCgvXFxzKy8pO1xuXG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgX2NsYXNzID0gY2xhc3Nlc1tpXTtcblxuICAgICAgaWYgKGlzTm90SGlnaGxpZ2h0ZWQoX2NsYXNzKSB8fCBnZXRMYW5ndWFnZShfY2xhc3MpKSB7XG4gICAgICAgIHJldHVybiBfY2xhc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHBlcmZvcm1zIGEgc2hhbGxvdyBtZXJnZSBvZiBtdWx0aXBsZSBvYmplY3RzIGludG8gb25lXG4gICAqXG4gICAqIEBhcmd1bWVudHMgbGlzdCBvZiBvYmplY3RzIHdpdGggcHJvcGVydGllcyB0byBtZXJnZVxuICAgKiBAcmV0dXJucyBhIHNpbmdsZSBuZXcgb2JqZWN0XG4gICAqL1xuICBmdW5jdGlvbiBpbmhlcml0KHBhcmVudCkgeyAgLy8gaW5oZXJpdChwYXJlbnQsIG92ZXJyaWRlX29iaiwgb3ZlcnJpZGVfb2JqLCAuLi4pXG4gICAgdmFyIGtleTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIG9iamVjdHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgZm9yIChrZXkgaW4gcGFyZW50KVxuICAgICAgcmVzdWx0W2tleV0gPSBwYXJlbnRba2V5XTtcbiAgICBvYmplY3RzLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgICBmb3IgKGtleSBpbiBvYmopXG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qIFN0cmVhbSBtZXJnaW5nICovXG5cbiAgZnVuY3Rpb24gbm9kZVN0cmVhbShub2RlKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIChmdW5jdGlvbiBfbm9kZVN0cmVhbShub2RlLCBvZmZzZXQpIHtcbiAgICAgIGZvciAodmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZykge1xuICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDMpXG4gICAgICAgICAgb2Zmc2V0ICs9IGNoaWxkLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6ICdzdGFydCcsXG4gICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgIG5vZGU6IGNoaWxkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2Zmc2V0ID0gX25vZGVTdHJlYW0oY2hpbGQsIG9mZnNldCk7XG4gICAgICAgICAgLy8gUHJldmVudCB2b2lkIGVsZW1lbnRzIGZyb20gaGF2aW5nIGFuIGVuZCB0YWcgdGhhdCB3b3VsZCBhY3R1YWxseVxuICAgICAgICAgIC8vIGRvdWJsZSB0aGVtIGluIHRoZSBvdXRwdXQuIFRoZXJlIGFyZSBtb3JlIHZvaWQgZWxlbWVudHMgaW4gSFRNTFxuICAgICAgICAgIC8vIGJ1dCB3ZSBsaXN0IG9ubHkgdGhvc2UgcmVhbGlzdGljYWxseSBleHBlY3RlZCBpbiBjb2RlIGRpc3BsYXkuXG4gICAgICAgICAgaWYgKCF0YWcoY2hpbGQpLm1hdGNoKC9icnxocnxpbWd8aW5wdXQvKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICBldmVudDogJ3N0b3AnLFxuICAgICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgICAgbm9kZTogY2hpbGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9KShub2RlLCAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VTdHJlYW1zKG9yaWdpbmFsLCBoaWdobGlnaHRlZCwgdmFsdWUpIHtcbiAgICB2YXIgcHJvY2Vzc2VkID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIG5vZGVTdGFjayA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2VsZWN0U3RyZWFtKCkge1xuICAgICAgaWYgKCFvcmlnaW5hbC5sZW5ndGggfHwgIWhpZ2hsaWdodGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwubGVuZ3RoID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcmlnaW5hbFswXS5vZmZzZXQgIT09IGhpZ2hsaWdodGVkWzBdLm9mZnNldCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsWzBdLm9mZnNldCA8IGhpZ2hsaWdodGVkWzBdLm9mZnNldCkgPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgVG8gYXZvaWQgc3RhcnRpbmcgdGhlIHN0cmVhbSBqdXN0IGJlZm9yZSBpdCBzaG91bGQgc3RvcCB0aGUgb3JkZXIgaXNcbiAgICAgIGVuc3VyZWQgdGhhdCBvcmlnaW5hbCBhbHdheXMgc3RhcnRzIGZpcnN0IGFuZCBjbG9zZXMgbGFzdDpcblxuICAgICAgaWYgKGV2ZW50MSA9PSAnc3RhcnQnICYmIGV2ZW50MiA9PSAnc3RhcnQnKVxuICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICBpZiAoZXZlbnQxID09ICdzdGFydCcgJiYgZXZlbnQyID09ICdzdG9wJylcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodGVkO1xuICAgICAgaWYgKGV2ZW50MSA9PSAnc3RvcCcgJiYgZXZlbnQyID09ICdzdGFydCcpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICAgIGlmIChldmVudDEgPT0gJ3N0b3AnICYmIGV2ZW50MiA9PSAnc3RvcCcpXG4gICAgICAgIHJldHVybiBoaWdobGlnaHRlZDtcblxuICAgICAgLi4uIHdoaWNoIGlzIGNvbGxhcHNlZCB0bzpcbiAgICAgICovXG4gICAgICByZXR1cm4gaGlnaGxpZ2h0ZWRbMF0uZXZlbnQgPT09ICdzdGFydCcgPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW4obm9kZSkge1xuICAgICAgZnVuY3Rpb24gYXR0cl9zdHIoYSkge1xuICAgICAgICByZXR1cm4gJyAnICsgYS5ub2RlTmFtZSArICc9XCInICsgZXNjYXBlKGEudmFsdWUpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKSArICdcIic7XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gJzwnICsgdGFnKG5vZGUpICsgQXJyYXlQcm90by5tYXAuY2FsbChub2RlLmF0dHJpYnV0ZXMsIGF0dHJfc3RyKS5qb2luKCcnKSArICc+JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZShub2RlKSB7XG4gICAgICByZXN1bHQgKz0gJzwvJyArIHRhZyhub2RlKSArICc+JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXIoZXZlbnQpIHtcbiAgICAgIChldmVudC5ldmVudCA9PT0gJ3N0YXJ0JyA/IG9wZW4gOiBjbG9zZSkoZXZlbnQubm9kZSk7XG4gICAgfVxuXG4gICAgd2hpbGUgKG9yaWdpbmFsLmxlbmd0aCB8fCBoaWdobGlnaHRlZC5sZW5ndGgpIHtcbiAgICAgIHZhciBzdHJlYW0gPSBzZWxlY3RTdHJlYW0oKTtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGUodmFsdWUuc3Vic3RyaW5nKHByb2Nlc3NlZCwgc3RyZWFtWzBdLm9mZnNldCkpO1xuICAgICAgcHJvY2Vzc2VkID0gc3RyZWFtWzBdLm9mZnNldDtcbiAgICAgIGlmIChzdHJlYW0gPT09IG9yaWdpbmFsKSB7XG4gICAgICAgIC8qXG4gICAgICAgIE9uIGFueSBvcGVuaW5nIG9yIGNsb3NpbmcgdGFnIG9mIHRoZSBvcmlnaW5hbCBtYXJrdXAgd2UgZmlyc3QgY2xvc2VcbiAgICAgICAgdGhlIGVudGlyZSBoaWdobGlnaHRlZCBub2RlIHN0YWNrLCB0aGVuIHJlbmRlciB0aGUgb3JpZ2luYWwgdGFnIGFsb25nXG4gICAgICAgIHdpdGggYWxsIHRoZSBmb2xsb3dpbmcgb3JpZ2luYWwgdGFncyBhdCB0aGUgc2FtZSBvZmZzZXQgYW5kIHRoZW5cbiAgICAgICAgcmVvcGVuIGFsbCB0aGUgdGFncyBvbiB0aGUgaGlnaGxpZ2h0ZWQgc3RhY2suXG4gICAgICAgICovXG4gICAgICAgIG5vZGVTdGFjay5yZXZlcnNlKCkuZm9yRWFjaChjbG9zZSk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICAgICAgc3RyZWFtID0gc2VsZWN0U3RyZWFtKCk7XG4gICAgICAgIH0gd2hpbGUgKHN0cmVhbSA9PT0gb3JpZ2luYWwgJiYgc3RyZWFtLmxlbmd0aCAmJiBzdHJlYW1bMF0ub2Zmc2V0ID09PSBwcm9jZXNzZWQpO1xuICAgICAgICBub2RlU3RhY2sucmV2ZXJzZSgpLmZvckVhY2gob3Blbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RyZWFtWzBdLmV2ZW50ID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgbm9kZVN0YWNrLnB1c2goc3RyZWFtWzBdLm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgKyBlc2NhcGUodmFsdWUuc3Vic3RyKHByb2Nlc3NlZCkpO1xuICB9XG5cbiAgLyogSW5pdGlhbGl6YXRpb24gKi9cblxuICBmdW5jdGlvbiBkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkge1xuICAgIGlmICghbW9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIG1vZGUuZW5kc1dpdGhQYXJlbnQgfHwgZGVwZW5kZW5jeU9uUGFyZW50KG1vZGUuc3RhcnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGFuZF9vcl9jbG9uZV9tb2RlKG1vZGUpIHtcbiAgICBpZiAobW9kZS52YXJpYW50cyAmJiAhbW9kZS5jYWNoZWRfdmFyaWFudHMpIHtcbiAgICAgIG1vZGUuY2FjaGVkX3ZhcmlhbnRzID0gbW9kZS52YXJpYW50cy5tYXAoZnVuY3Rpb24odmFyaWFudCkge1xuICAgICAgICByZXR1cm4gaW5oZXJpdChtb2RlLCB7dmFyaWFudHM6IG51bGx9LCB2YXJpYW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEVYUEFORFxuICAgIC8vIGlmIHdlIGhhdmUgdmFyaWFudHMgdGhlbiBlc3NlbnRpYWxseSBcInJlcGxhY2VcIiB0aGUgbW9kZSB3aXRoIHRoZSB2YXJpYW50c1xuICAgIC8vIHRoaXMgaGFwcGVucyBpbiBjb21waWxlTW9kZSwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuICAgIGlmIChtb2RlLmNhY2hlZF92YXJpYW50cylcbiAgICAgIHJldHVybiBtb2RlLmNhY2hlZF92YXJpYW50cztcblxuICAgIC8vIENMT05FXG4gICAgLy8gaWYgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgb24gcGFyZW50cyB0aGVuIHdlIG5lZWQgYSB1bmlxdWVcbiAgICAvLyBpbnN0YW5jZSBvZiBvdXJzZWx2ZXMsIHNvIHdlIGNhbiBiZSByZXVzZWQgd2l0aCBtYW55XG4gICAgLy8gZGlmZmVyZW50IHBhcmVudHMgd2l0aG91dCBpc3N1ZVxuICAgIGlmIChkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkpXG4gICAgICByZXR1cm4gW2luaGVyaXQobW9kZSwgeyBzdGFydHM6IG1vZGUuc3RhcnRzID8gaW5oZXJpdChtb2RlLnN0YXJ0cykgOiBudWxsIH0pXTtcblxuICAgIGlmIChPYmplY3QuaXNGcm96ZW4obW9kZSkpXG4gICAgICByZXR1cm4gW2luaGVyaXQobW9kZSldO1xuXG4gICAgLy8gbm8gc3BlY2lhbCBkZXBlbmRlbmN5IGlzc3VlcywganVzdCByZXR1cm4gb3Vyc2VsdmVzXG4gICAgcmV0dXJuIFttb2RlXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVMYW5ndWFnZUFwaShvYmopIHtcbiAgICBpZihBUElfUkVQTEFDRVMgJiYgIW9iai5sYW5nQXBpUmVzdG9yZWQpIHtcbiAgICAgIG9iai5sYW5nQXBpUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgZm9yKHZhciBrZXkgaW4gQVBJX1JFUExBQ0VTKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgIG9ialtBUElfUkVQTEFDRVNba2V5XV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKG9iai5jb250YWlucyB8fCBbXSkuY29uY2F0KG9iai52YXJpYW50cyB8fCBbXSkuZm9yRWFjaChyZXN0b3JlTGFuZ3VhZ2VBcGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBpbGVLZXl3b3JkcyhyYXdLZXl3b3JkcywgY2FzZV9pbnNlbnNpdGl2ZSkge1xuICAgICAgdmFyIGNvbXBpbGVkX2tleXdvcmRzID0ge307XG5cbiAgICAgIGlmICh0eXBlb2YgcmF3S2V5d29yZHMgPT09ICdzdHJpbmcnKSB7IC8vIHN0cmluZ1xuICAgICAgICBzcGxpdEFuZENvbXBpbGUoJ2tleXdvcmQnLCByYXdLZXl3b3Jkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlzKHJhd0tleXdvcmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICBzcGxpdEFuZENvbXBpbGUoY2xhc3NOYW1lLCByYXdLZXl3b3Jkc1tjbGFzc05hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkX2tleXdvcmRzO1xuXG4gICAgLy8gLS0tXG5cbiAgICBmdW5jdGlvbiBzcGxpdEFuZENvbXBpbGUoY2xhc3NOYW1lLCBzdHIpIHtcbiAgICAgIGlmIChjYXNlX2luc2Vuc2l0aXZlKSB7XG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgc3RyLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICAgIHZhciBwYWlyID0ga2V5d29yZC5zcGxpdCgnfCcpO1xuICAgICAgICBjb21waWxlZF9rZXl3b3Jkc1twYWlyWzBdXSA9IFtjbGFzc05hbWUsIHNjb3JlRm9yS2V5d29yZChwYWlyWzBdLCBwYWlyWzFdKV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY29yZUZvcktleXdvcmQoa2V5d29yZCwgcHJvdmlkZWRTY29yZSkge1xuICAgIC8vIG1hbnVhbCBzY29yZXMgYWx3YXlzIHdpbiBvdmVyIGNvbW1vbiBrZXl3b3Jkc1xuICAgIC8vIHNvIHlvdSBjYW4gZm9yY2UgYSBzY29yZSBvZiAxIGlmIHlvdSByZWFsbHkgaW5zaXN0XG4gICAgaWYgKHByb3ZpZGVkU2NvcmUpXG4gICAgICByZXR1cm4gTnVtYmVyKHByb3ZpZGVkU2NvcmUpO1xuXG4gICAgcmV0dXJuIGNvbW1vbktleXdvcmQoa2V5d29yZCkgPyAwIDogMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbW1vbktleXdvcmQod29yZCkge1xuICAgIHJldHVybiBDT01NT05fS0VZV09SRFMuaW5kZXhPZih3b3JkLnRvTG93ZXJDYXNlKCkpICE9IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZUxhbmd1YWdlKGxhbmd1YWdlKSB7XG5cbiAgICBmdW5jdGlvbiByZVN0cihyZSkge1xuICAgICAgICByZXR1cm4gKHJlICYmIHJlLnNvdXJjZSkgfHwgcmU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGFuZ1JlKHZhbHVlLCBnbG9iYWwpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICByZVN0cih2YWx1ZSksXG4gICAgICAgICdtJyArIChsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gJ2knIDogJycpICsgKGdsb2JhbCA/ICdnJyA6ICcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZUNvdW50TWF0Y2hHcm91cHMocmUpIHtcbiAgICAgIHJldHVybiAobmV3IFJlZ0V4cChyZS50b1N0cmluZygpICsgJ3wnKSkuZXhlYygnJykubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICAvLyBqb2luUmUgbG9naWNhbGx5IGNvbXB1dGVzIHJlZ2V4cHMuam9pbihzZXBhcmF0b3IpLCBidXQgZml4ZXMgdGhlXG4gICAgLy8gYmFja3JlZmVyZW5jZXMgc28gdGhleSBjb250aW51ZSB0byBtYXRjaC5cbiAgICAvLyBpdCBhbHNvIHBsYWNlcyBlYWNoIGluZGl2aWR1YWwgcmVndWxhciBleHByZXNzaW9uIGludG8gaXQncyBvd25cbiAgICAvLyBtYXRjaCBncm91cCwga2VlcGluZyB0cmFjayBvZiB0aGUgc2VxdWVuY2luZyBvZiB0aG9zZSBtYXRjaCBncm91cHNcbiAgICAvLyBpcyBjdXJyZW50bHkgYW4gZXhlcmNpc2UgZm9yIHRoZSBjYWxsZXIuIDotKVxuICAgIGZ1bmN0aW9uIGpvaW5SZShyZWdleHBzLCBzZXBhcmF0b3IpIHtcbiAgICAgIC8vIGJhY2tyZWZlcmVuY2VSZSBtYXRjaGVzIGFuIG9wZW4gcGFyZW50aGVzaXMgb3IgYmFja3JlZmVyZW5jZS4gVG8gYXZvaWRcbiAgICAgIC8vIGFuIGluY29ycmVjdCBwYXJzZSwgaXQgYWRkaXRpb25hbGx5IG1hdGNoZXMgdGhlIGZvbGxvd2luZzpcbiAgICAgIC8vIC0gWy4uLl0gZWxlbWVudHMsIHdoZXJlIHRoZSBtZWFuaW5nIG9mIHBhcmVudGhlc2VzIGFuZCBlc2NhcGVzIGNoYW5nZVxuICAgICAgLy8gLSBvdGhlciBlc2NhcGUgc2VxdWVuY2VzLCBzbyB3ZSBkbyBub3QgbWlzcGFyc2UgZXNjYXBlIHNlcXVlbmNlcyBhc1xuICAgICAgLy8gICBpbnRlcmVzdGluZyBlbGVtZW50c1xuICAgICAgLy8gLSBub24tbWF0Y2hpbmcgb3IgbG9va2FoZWFkIHBhcmVudGhlc2VzLCB3aGljaCBkbyBub3QgY2FwdHVyZS4gVGhlc2VcbiAgICAgIC8vICAgZm9sbG93IHRoZSAnKCcgd2l0aCBhICc/Jy5cbiAgICAgIHZhciBiYWNrcmVmZXJlbmNlUmUgPSAvXFxbKD86W15cXFxcXFxdXXxcXFxcLikqXFxdfFxcKFxcPz98XFxcXChbMS05XVswLTldKil8XFxcXC4vO1xuICAgICAgdmFyIG51bUNhcHR1cmVzID0gMDtcbiAgICAgIHZhciByZXQgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnZXhwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBudW1DYXB0dXJlcyArPSAxO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gbnVtQ2FwdHVyZXM7XG4gICAgICAgIHZhciByZSA9IHJlU3RyKHJlZ2V4cHNbaV0pO1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICByZXQgKz0gc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldCArPSBcIihcIjtcbiAgICAgICAgd2hpbGUgKHJlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBiYWNrcmVmZXJlbmNlUmUuZXhlYyhyZSk7XG4gICAgICAgICAgaWYgKG1hdGNoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldCArPSByZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXQgKz0gcmUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICByZSA9IHJlLnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgaWYgKG1hdGNoWzBdWzBdID09ICdcXFxcJyAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBiYWNrcmVmZXJlbmNlLlxuICAgICAgICAgICAgcmV0ICs9ICdcXFxcJyArIFN0cmluZyhOdW1iZXIobWF0Y2hbMV0pICsgb2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0ICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09ICcoJykge1xuICAgICAgICAgICAgICBudW1DYXB0dXJlcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXQgKz0gXCIpXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTW9kZVJlZ2V4KG1vZGUpIHtcblxuICAgICAgdmFyIG1hdGNoSW5kZXhlcyA9IHt9O1xuICAgICAgdmFyIG1hdGNoZXJSZTtcbiAgICAgIHZhciByZWdleGVzID0gW107XG4gICAgICB2YXIgbWF0Y2hlciA9IHt9O1xuICAgICAgdmFyIG1hdGNoQXQgPSAxO1xuXG4gICAgICBmdW5jdGlvbiBhZGRSdWxlKHJ1bGUsIHJlZ2V4KSB7XG4gICAgICAgIG1hdGNoSW5kZXhlc1ttYXRjaEF0XSA9IHJ1bGU7XG4gICAgICAgIHJlZ2V4ZXMucHVzaChbcnVsZSwgcmVnZXhdKTtcbiAgICAgICAgbWF0Y2hBdCArPSByZUNvdW50TWF0Y2hHcm91cHMocmVnZXgpICsgMTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRlcm07XG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBtb2RlLmNvbnRhaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZTtcbiAgICAgICAgdGVybSA9IG1vZGUuY29udGFpbnNbaV07XG4gICAgICAgIGlmICh0ZXJtLmJlZ2luS2V5d29yZHMpIHtcbiAgICAgICAgICByZSA9ICdcXFxcLj8oPzonICsgdGVybS5iZWdpbiArICcpXFxcXC4/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZSA9IHRlcm0uYmVnaW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkUnVsZSh0ZXJtLCByZSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZS50ZXJtaW5hdG9yX2VuZClcbiAgICAgICAgYWRkUnVsZShcImVuZFwiLCBtb2RlLnRlcm1pbmF0b3JfZW5kKTtcbiAgICAgIGlmIChtb2RlLmlsbGVnYWwpXG4gICAgICAgIGFkZFJ1bGUoXCJpbGxlZ2FsXCIsIG1vZGUuaWxsZWdhbCk7XG5cbiAgICAgIHZhciB0ZXJtaW5hdG9ycyA9IHJlZ2V4ZXMubWFwKGZ1bmN0aW9uKGVsKSB7IHJldHVybiBlbFsxXTsgfSk7XG4gICAgICBtYXRjaGVyUmUgPSBsYW5nUmUoam9pblJlKHRlcm1pbmF0b3JzLCAnfCcpLCB0cnVlKTtcblxuICAgICAgbWF0Y2hlci5sYXN0SW5kZXggPSAwO1xuICAgICAgbWF0Y2hlci5leGVjID0gZnVuY3Rpb24ocykge1xuICAgICAgICB2YXIgcnVsZTtcblxuICAgICAgICBpZiggcmVnZXhlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgIG1hdGNoZXJSZS5sYXN0SW5kZXggPSBtYXRjaGVyLmxhc3RJbmRleDtcbiAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hlclJlLmV4ZWMocyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpPG1hdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG1hdGNoW2ldICE9IHVuZGVmaW5lZCAmJiBtYXRjaEluZGV4ZXNbXCJcIiAraV0gIT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgcnVsZSA9IG1hdGNoSW5kZXhlc1tcIlwiK2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWxsZWdhbCBvciBlbmQgbWF0Y2hcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWF0Y2gudHlwZSA9IHJ1bGU7XG4gICAgICAgICAgbWF0Y2guZXh0cmEgPSBbbW9kZS5pbGxlZ2FsLCBtb2RlLnRlcm1pbmF0b3JfZW5kXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaC50eXBlID0gXCJiZWdpblwiO1xuICAgICAgICAgIG1hdGNoLnJ1bGUgPSBydWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBtYXRjaGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBpbGVNb2RlKG1vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKG1vZGUuY29tcGlsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIG1vZGUuY29tcGlsZWQgPSB0cnVlO1xuXG4gICAgICBtb2RlLmtleXdvcmRzID0gbW9kZS5rZXl3b3JkcyB8fCBtb2RlLmJlZ2luS2V5d29yZHM7XG4gICAgICBpZiAobW9kZS5rZXl3b3JkcylcbiAgICAgICAgbW9kZS5rZXl3b3JkcyA9IGNvbXBpbGVLZXl3b3Jkcyhtb2RlLmtleXdvcmRzLCBsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlKTtcblxuICAgICAgbW9kZS5sZXhlbWVzUmUgPSBsYW5nUmUobW9kZS5sZXhlbWVzIHx8IC9cXHcrLywgdHJ1ZSk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKG1vZGUuYmVnaW5LZXl3b3Jkcykge1xuICAgICAgICAgIG1vZGUuYmVnaW4gPSAnXFxcXGIoJyArIG1vZGUuYmVnaW5LZXl3b3Jkcy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpXFxcXGInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9kZS5iZWdpbilcbiAgICAgICAgICBtb2RlLmJlZ2luID0gL1xcQnxcXGIvO1xuICAgICAgICBtb2RlLmJlZ2luUmUgPSBsYW5nUmUobW9kZS5iZWdpbik7XG4gICAgICAgIGlmIChtb2RlLmVuZFNhbWVBc0JlZ2luKVxuICAgICAgICAgIG1vZGUuZW5kID0gbW9kZS5iZWdpbjtcbiAgICAgICAgaWYgKCFtb2RlLmVuZCAmJiAhbW9kZS5lbmRzV2l0aFBhcmVudClcbiAgICAgICAgICBtb2RlLmVuZCA9IC9cXEJ8XFxiLztcbiAgICAgICAgaWYgKG1vZGUuZW5kKVxuICAgICAgICAgIG1vZGUuZW5kUmUgPSBsYW5nUmUobW9kZS5lbmQpO1xuICAgICAgICBtb2RlLnRlcm1pbmF0b3JfZW5kID0gcmVTdHIobW9kZS5lbmQpIHx8ICcnO1xuICAgICAgICBpZiAobW9kZS5lbmRzV2l0aFBhcmVudCAmJiBwYXJlbnQudGVybWluYXRvcl9lbmQpXG4gICAgICAgICAgbW9kZS50ZXJtaW5hdG9yX2VuZCArPSAobW9kZS5lbmQgPyAnfCcgOiAnJykgKyBwYXJlbnQudGVybWluYXRvcl9lbmQ7XG4gICAgICB9XG4gICAgICBpZiAobW9kZS5pbGxlZ2FsKVxuICAgICAgICBtb2RlLmlsbGVnYWxSZSA9IGxhbmdSZShtb2RlLmlsbGVnYWwpO1xuICAgICAgaWYgKG1vZGUucmVsZXZhbmNlID09IG51bGwpXG4gICAgICAgIG1vZGUucmVsZXZhbmNlID0gMTtcbiAgICAgIGlmICghbW9kZS5jb250YWlucykge1xuICAgICAgICBtb2RlLmNvbnRhaW5zID0gW107XG4gICAgICB9XG4gICAgICBtb2RlLmNvbnRhaW5zID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgbW9kZS5jb250YWlucy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gZXhwYW5kX29yX2Nsb25lX21vZGUoYyA9PT0gJ3NlbGYnID8gbW9kZSA6IGMpO1xuICAgICAgfSkpO1xuICAgICAgbW9kZS5jb250YWlucy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtjb21waWxlTW9kZShjLCBtb2RlKTt9KTtcblxuICAgICAgaWYgKG1vZGUuc3RhcnRzKSB7XG4gICAgICAgIGNvbXBpbGVNb2RlKG1vZGUuc3RhcnRzLCBwYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICBtb2RlLnRlcm1pbmF0b3JzID0gYnVpbGRNb2RlUmVnZXgobW9kZSk7XG4gICAgfVxuXG4gICAgLy8gc2VsZiBpcyBub3QgdmFsaWQgYXQgdGhlIHRvcC1sZXZlbFxuICAgIGlmIChsYW5ndWFnZS5jb250YWlucyAmJiBsYW5ndWFnZS5jb250YWlucy5pbmRleE9mKCdzZWxmJykgIT0gLTEpIHtcbiAgICAgIGlmICghU0FGRV9NT0RFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVSUjogY29udGFpbnMgYHNlbGZgIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGxhbmd1YWdlLiAgU2VlIGRvY3VtZW50YXRpb24uXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaWxlbnRseSByZW1vdmUgdGhlIGJyb2tlbiBydWxlIChlZmZlY3RpdmVseSBpZ25vcmluZyBpdCksIHRoaXMgaGFzIGhpc3RvcmljYWxseVxuICAgICAgICAvLyBiZWVuIHRoZSBiZWhhdmlvciBpbiB0aGUgcGFzdCwgc28gdGhpcyByZW1vdmFsIHByZXNlcnZlcyBjb21wYXRpYmlsaXR5IHdpdGggYnJva2VuXG4gICAgICAgIC8vIGdyYW1tYXJzIHdoZW4gcnVubmluZyBpbiBTYWZlIE1vZGVcbiAgICAgICAgbGFuZ3VhZ2UuY29udGFpbnMgPSBsYW5ndWFnZS5jb250YWlucy5maWx0ZXIoZnVuY3Rpb24obW9kZSkgeyByZXR1cm4gbW9kZSAhPSAnc2VsZic7IH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb21waWxlTW9kZShsYW5ndWFnZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDb3JlIGhpZ2hsaWdodGluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZSAtIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGhpZ2hsaWdodGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIHRoZSBjb2RlIHRvIGhpZ2hsaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZV9pbGxlZ2FscyAtIHdoZXRoZXIgdG8gaWdub3JlIGlsbGVnYWwgbWF0Y2hlcywgZGVmYXVsdCBpcyB0byBiYWlsXG4gICAqIEBwYXJhbSB7YXJyYXk8bW9kZT59IGNvbnRpbnVhdGlvbiAtIGFycmF5IG9mIGNvbnRpbnVhdGlvbiBtb2Rlc1xuICAgKlxuICAgKiBAcmV0dXJucyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlIC0gdGhlIGxhbmd1YWdlIG5hbWVcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHJlbGV2YW5jZSAtIHRoZSByZWxldmFuY2Ugc2NvcmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdGhlIGhpZ2hsaWdodGVkIEhUTUwgY29kZVxuICAgKiBAcHJvcGVydHkge21vZGV9IHRvcCAtIHRvcCBvZiB0aGUgY3VycmVudCBtb2RlIHN0YWNrXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaWxsZWdhbCAtIGluZGljYXRlcyB3aGV0aGVyIGFueSBpbGxlZ2FsIG1hdGNoZXMgd2VyZSBmb3VuZFxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHQobGFuZ3VhZ2VOYW1lLCBjb2RlLCBpZ25vcmVfaWxsZWdhbHMsIGNvbnRpbnVhdGlvbikge1xuICAgIHZhciBjb2RlVG9IaWdobGlnaHQgPSBjb2RlO1xuXG4gICAgZnVuY3Rpb24gZXNjYXBlUmUodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKHZhbHVlLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpLCAnbScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mTW9kZShtb2RlLCBsZXhlbWUpIHtcbiAgICAgIGlmICh0ZXN0UmUobW9kZS5lbmRSZSwgbGV4ZW1lKSkge1xuICAgICAgICB3aGlsZSAobW9kZS5lbmRzUGFyZW50ICYmIG1vZGUucGFyZW50KSB7XG4gICAgICAgICAgbW9kZSA9IG1vZGUucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2RlO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGVuZE9mTW9kZShtb2RlLnBhcmVudCwgbGV4ZW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl3b3JkTWF0Y2gobW9kZSwgbWF0Y2gpIHtcbiAgICAgIHZhciBtYXRjaF9zdHIgPSBsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKSA6IG1hdGNoWzBdO1xuICAgICAgcmV0dXJuIG1vZGUua2V5d29yZHMuaGFzT3duUHJvcGVydHkobWF0Y2hfc3RyKSAmJiBtb2RlLmtleXdvcmRzW21hdGNoX3N0cl07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcGFuKGNsYXNzTmFtZSwgaW5zaWRlU3BhbiwgbGVhdmVPcGVuLCBub1ByZWZpeCkge1xuICAgICAgaWYgKCFsZWF2ZU9wZW4gJiYgaW5zaWRlU3BhbiA9PT0gJycpIHJldHVybiAnJztcbiAgICAgIGlmICghY2xhc3NOYW1lKSByZXR1cm4gaW5zaWRlU3BhbjtcblxuICAgICAgdmFyIGNsYXNzUHJlZml4ID0gbm9QcmVmaXggPyAnJyA6IG9wdGlvbnMuY2xhc3NQcmVmaXgsXG4gICAgICAgICAgb3BlblNwYW4gICAgPSAnPHNwYW4gY2xhc3M9XCInICsgY2xhc3NQcmVmaXgsXG4gICAgICAgICAgY2xvc2VTcGFuICAgPSBsZWF2ZU9wZW4gPyAnJyA6IHNwYW5FbmRUYWc7XG5cbiAgICAgIG9wZW5TcGFuICs9IGNsYXNzTmFtZSArICdcIj4nO1xuXG4gICAgICByZXR1cm4gb3BlblNwYW4gKyBpbnNpZGVTcGFuICsgY2xvc2VTcGFuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NLZXl3b3JkcygpIHtcbiAgICAgIHZhciBrZXl3b3JkX21hdGNoLCBsYXN0X2luZGV4LCBtYXRjaCwgcmVzdWx0O1xuXG4gICAgICBpZiAoIXRvcC5rZXl3b3JkcylcbiAgICAgICAgcmV0dXJuIGVzY2FwZShtb2RlX2J1ZmZlcik7XG5cbiAgICAgIHJlc3VsdCA9ICcnO1xuICAgICAgbGFzdF9pbmRleCA9IDA7XG4gICAgICB0b3AubGV4ZW1lc1JlLmxhc3RJbmRleCA9IDA7XG4gICAgICBtYXRjaCA9IHRvcC5sZXhlbWVzUmUuZXhlYyhtb2RlX2J1ZmZlcik7XG5cbiAgICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICByZXN1bHQgKz0gZXNjYXBlKG1vZGVfYnVmZmVyLnN1YnN0cmluZyhsYXN0X2luZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICBrZXl3b3JkX21hdGNoID0ga2V5d29yZE1hdGNoKHRvcCwgbWF0Y2gpO1xuICAgICAgICBpZiAoa2V5d29yZF9tYXRjaCkge1xuICAgICAgICAgIHJlbGV2YW5jZSArPSBrZXl3b3JkX21hdGNoWzFdO1xuICAgICAgICAgIHJlc3VsdCArPSBidWlsZFNwYW4oa2V5d29yZF9tYXRjaFswXSwgZXNjYXBlKG1hdGNoWzBdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZShtYXRjaFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdF9pbmRleCA9IHRvcC5sZXhlbWVzUmUubGFzdEluZGV4O1xuICAgICAgICBtYXRjaCA9IHRvcC5sZXhlbWVzUmUuZXhlYyhtb2RlX2J1ZmZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgZXNjYXBlKG1vZGVfYnVmZmVyLnN1YnN0cihsYXN0X2luZGV4KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1N1Ykxhbmd1YWdlKCkge1xuICAgICAgdmFyIGV4cGxpY2l0ID0gdHlwZW9mIHRvcC5zdWJMYW5ndWFnZSA9PT0gJ3N0cmluZyc7XG4gICAgICBpZiAoZXhwbGljaXQgJiYgIWxhbmd1YWdlc1t0b3Auc3ViTGFuZ3VhZ2VdKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUobW9kZV9idWZmZXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gZXhwbGljaXQgP1xuICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodCh0b3Auc3ViTGFuZ3VhZ2UsIG1vZGVfYnVmZmVyLCB0cnVlLCBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0pIDpcbiAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRBdXRvKG1vZGVfYnVmZmVyLCB0b3Auc3ViTGFuZ3VhZ2UubGVuZ3RoID8gdG9wLnN1Ykxhbmd1YWdlIDogdW5kZWZpbmVkKTtcblxuICAgICAgLy8gQ291bnRpbmcgZW1iZWRkZWQgbGFuZ3VhZ2Ugc2NvcmUgdG93YXJkcyB0aGUgaG9zdCBsYW5ndWFnZSBtYXkgYmUgZGlzYWJsZWRcbiAgICAgIC8vIHdpdGggemVyb2luZyB0aGUgY29udGFpbmluZyBtb2RlIHJlbGV2YW5jZS4gVXNlIGNhc2UgaW4gcG9pbnQgaXMgTWFya2Rvd24gdGhhdFxuICAgICAgLy8gYWxsb3dzIFhNTCBldmVyeXdoZXJlIGFuZCBtYWtlcyBldmVyeSBYTUwgc25pcHBldCB0byBoYXZlIGEgbXVjaCBsYXJnZXIgTWFya2Rvd25cbiAgICAgIC8vIHNjb3JlLlxuICAgICAgaWYgKHRvcC5yZWxldmFuY2UgPiAwKSB7XG4gICAgICAgIHJlbGV2YW5jZSArPSByZXN1bHQucmVsZXZhbmNlO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSA9IHJlc3VsdC50b3A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVpbGRTcGFuKHJlc3VsdC5sYW5ndWFnZSwgcmVzdWx0LnZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0J1ZmZlcigpIHtcbiAgICAgIHJlc3VsdCArPSAodG9wLnN1Ykxhbmd1YWdlICE9IG51bGwgPyBwcm9jZXNzU3ViTGFuZ3VhZ2UoKSA6IHByb2Nlc3NLZXl3b3JkcygpKTtcbiAgICAgIG1vZGVfYnVmZmVyID0gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnROZXdNb2RlKG1vZGUpIHtcbiAgICAgIHJlc3VsdCArPSBtb2RlLmNsYXNzTmFtZT8gYnVpbGRTcGFuKG1vZGUuY2xhc3NOYW1lLCAnJywgdHJ1ZSk6ICcnO1xuICAgICAgdG9wID0gT2JqZWN0LmNyZWF0ZShtb2RlLCB7cGFyZW50OiB7dmFsdWU6IHRvcH19KTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvQmVnaW5NYXRjaChtYXRjaCkge1xuICAgICAgdmFyIGxleGVtZSA9IG1hdGNoWzBdO1xuICAgICAgdmFyIG5ld19tb2RlID0gbWF0Y2gucnVsZTtcblxuICAgICAgaWYgKG5ld19tb2RlICYmIG5ld19tb2RlLmVuZFNhbWVBc0JlZ2luKSB7XG4gICAgICAgIG5ld19tb2RlLmVuZFJlID0gZXNjYXBlUmUoIGxleGVtZSApO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3X21vZGUuc2tpcCkge1xuICAgICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3X21vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgaWYgKCFuZXdfbW9kZS5yZXR1cm5CZWdpbiAmJiAhbmV3X21vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXJ0TmV3TW9kZShuZXdfbW9kZSk7XG4gICAgICByZXR1cm4gbmV3X21vZGUucmV0dXJuQmVnaW4gPyAwIDogbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkb0VuZE1hdGNoKG1hdGNoKSB7XG4gICAgICB2YXIgbGV4ZW1lID0gbWF0Y2hbMF07XG4gICAgICB2YXIgbWF0Y2hQbHVzUmVtYWluZGVyID0gY29kZVRvSGlnaGxpZ2h0LnN1YnN0cihtYXRjaC5pbmRleCk7XG4gICAgICB2YXIgZW5kX21vZGUgPSBlbmRPZk1vZGUodG9wLCBtYXRjaFBsdXNSZW1haW5kZXIpO1xuICAgICAgaWYgKCFlbmRfbW9kZSkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIG9yaWdpbiA9IHRvcDtcbiAgICAgIGlmIChvcmlnaW4uc2tpcCkge1xuICAgICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIShvcmlnaW4ucmV0dXJuRW5kIHx8IG9yaWdpbi5leGNsdWRlRW5kKSkge1xuICAgICAgICAgIG1vZGVfYnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGlmIChvcmlnaW4uZXhjbHVkZUVuZCkge1xuICAgICAgICAgIG1vZGVfYnVmZmVyID0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0b3AuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHNwYW5FbmRUYWc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0b3Auc2tpcCAmJiAhdG9wLnN1Ykxhbmd1YWdlKSB7XG4gICAgICAgICAgcmVsZXZhbmNlICs9IHRvcC5yZWxldmFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgdG9wID0gdG9wLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKHRvcCAhPT0gZW5kX21vZGUucGFyZW50KTtcbiAgICAgIGlmIChlbmRfbW9kZS5zdGFydHMpIHtcbiAgICAgICAgaWYgKGVuZF9tb2RlLmVuZFNhbWVBc0JlZ2luKSB7XG4gICAgICAgICAgZW5kX21vZGUuc3RhcnRzLmVuZFJlID0gZW5kX21vZGUuZW5kUmU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnROZXdNb2RlKGVuZF9tb2RlLnN0YXJ0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luLnJldHVybkVuZCA/IDAgOiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBsYXN0TWF0Y2ggPSB7fTtcbiAgICBmdW5jdGlvbiBwcm9jZXNzTGV4ZW1lKHRleHRfYmVmb3JlX21hdGNoLCBtYXRjaCkge1xuXG4gICAgICB2YXIgbGV4ZW1lID0gbWF0Y2ggJiYgbWF0Y2hbMF07XG5cbiAgICAgIC8vIGFkZCBub24tbWF0Y2hlZCB0ZXh0IHRvIHRoZSBjdXJyZW50IG1vZGUgYnVmZmVyXG4gICAgICBtb2RlX2J1ZmZlciArPSB0ZXh0X2JlZm9yZV9tYXRjaDtcblxuICAgICAgaWYgKGxleGVtZSA9PSBudWxsKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIC8vIHdlJ3ZlIGZvdW5kIGEgMCB3aWR0aCBtYXRjaCBhbmQgd2UncmUgc3R1Y2ssIHNvIHdlIG5lZWQgdG8gYWR2YW5jZVxuICAgICAgLy8gdGhpcyBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBiYWRseSBiZWhhdmVkIHJ1bGVzIHRoYXQgaGF2ZSBvcHRpb25hbCBtYXRjaGVycyB0byB0aGUgZGVncmVlIHRoYXRcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGV5IGNhbiBlbmQgdXAgbWF0Y2hpbmcgbm90aGluZyBhdCBhbGxcbiAgICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjE0MFxuICAgICAgaWYgKGxhc3RNYXRjaC50eXBlPT1cImJlZ2luXCIgJiYgbWF0Y2gudHlwZT09XCJlbmRcIiAmJiBsYXN0TWF0Y2guaW5kZXggPT0gbWF0Y2guaW5kZXggJiYgbGV4ZW1lID09PSBcIlwiKSB7XG4gICAgICAgIC8vIHNwaXQgdGhlIFwic2tpcHBlZFwiIGNoYXJhY3RlciB0aGF0IG91ciByZWdleCBjaG9rZWQgb24gYmFjayBpbnRvIHRoZSBvdXRwdXQgc2VxdWVuY2VcbiAgICAgICAgbW9kZV9idWZmZXIgKz0gY29kZVRvSGlnaGxpZ2h0LnNsaWNlKG1hdGNoLmluZGV4LCBtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RNYXRjaCA9IG1hdGNoO1xuXG4gICAgICBpZiAobWF0Y2gudHlwZT09PVwiYmVnaW5cIikge1xuICAgICAgICByZXR1cm4gZG9CZWdpbk1hdGNoKG1hdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2gudHlwZT09PVwiaWxsZWdhbFwiICYmICFpZ25vcmVfaWxsZWdhbHMpIHtcbiAgICAgICAgLy8gaWxsZWdhbCBtYXRjaCwgd2UgZG8gbm90IGNvbnRpbnVlIHByb2Nlc3NpbmdcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtZSBcIicgKyBsZXhlbWUgKyAnXCIgZm9yIG1vZGUgXCInICsgKHRvcC5jbGFzc05hbWUgfHwgJzx1bm5hbWVkPicpICsgJ1wiJyk7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoLnR5cGU9PT1cImVuZFwiKSB7XG4gICAgICAgIHZhciBwcm9jZXNzZWQgPSBkb0VuZE1hdGNoKG1hdGNoKTtcbiAgICAgICAgaWYgKHByb2Nlc3NlZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIFdoeSBtaWdodCBiZSBmaW5kIG91cnNlbHZlcyBoZXJlPyAgT25seSBvbmUgb2NjYXNpb24gbm93LiAgQW4gZW5kIG1hdGNoIHRoYXQgd2FzXG4gICAgICB0cmlnZ2VyZWQgYnV0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQuICBXaGVuIG1pZ2h0IHRoaXMgaGFwcGVuPyAgV2hlbiBhbiBgZW5kU2FtZWFzQmVnaW5gXG4gICAgICBydWxlIHNldHMgdGhlIGVuZCBydWxlIHRvIGEgc3BlY2lmaWMgbWF0Y2guICBTaW5jZSB0aGUgb3ZlcmFsbCBtb2RlIHRlcm1pbmF0aW9uIHJ1bGUgdGhhdCdzXG4gICAgICBiZWluZyB1c2VkIHRvIHNjYW4gdGhlIHRleHQgaXNuJ3QgcmVjb21waWxlZCB0aGF0IG1lYW5zIHRoYXQgYW55IG1hdGNoIHRoYXQgTE9PS1MgbGlrZVxuICAgICAgdGhlIGVuZCAoYnV0IGlzIG5vdCwgYmVjYXVzZSBpdCBpcyBub3QgYW4gZXhhY3QgbWF0Y2ggdG8gdGhlIGJlZ2lubmluZykgd2lsbFxuICAgICAgZW5kIHVwIGhlcmUuICBBIGRlZmluaXRlIGVuZCBtYXRjaCwgYnV0IHdoZW4gYGRvRW5kTWF0Y2hgIHRyaWVzIHRvIFwicmVhcHBseVwiXG4gICAgICB0aGUgZW5kIHJ1bGUgYW5kIGZhaWxzIHRvIG1hdGNoLCB3ZSB3aW5kIHVwIGhlcmUsIGFuZCBqdXN0IHNpbGVudGx5IGlnbm9yZSB0aGUgZW5kLlxuXG4gICAgICBUaGlzIGNhdXNlcyBubyByZWFsIGhhcm0gb3RoZXIgdGhhbiBzdG9wcGluZyBhIGZldyB0aW1lcyB0b28gbWFueS5cbiAgICAgICovXG5cbiAgICAgIG1vZGVfYnVmZmVyICs9IGxleGVtZTtcbiAgICAgIHJldHVybiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGxhbmd1YWdlTmFtZSk7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIGxhbmd1YWdlTmFtZSkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiBcIicgKyBsYW5ndWFnZU5hbWUgKyAnXCInKTtcbiAgICB9XG5cbiAgICBjb21waWxlTGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuICAgIHZhciB0b3AgPSBjb250aW51YXRpb24gfHwgbGFuZ3VhZ2U7XG4gICAgdmFyIGNvbnRpbnVhdGlvbnMgPSB7fTsgLy8ga2VlcCBjb250aW51YXRpb25zIGZvciBzdWItbGFuZ3VhZ2VzXG4gICAgdmFyIHJlc3VsdCA9ICcnLCBjdXJyZW50O1xuICAgIGZvcihjdXJyZW50ID0gdG9wOyBjdXJyZW50ICE9PSBsYW5ndWFnZTsgY3VycmVudCA9IGN1cnJlbnQucGFyZW50KSB7XG4gICAgICBpZiAoY3VycmVudC5jbGFzc05hbWUpIHtcbiAgICAgICAgcmVzdWx0ID0gYnVpbGRTcGFuKGN1cnJlbnQuY2xhc3NOYW1lLCAnJywgdHJ1ZSkgKyByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBtb2RlX2J1ZmZlciA9ICcnO1xuICAgIHZhciByZWxldmFuY2UgPSAwO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbWF0Y2gsIGNvdW50LCBpbmRleCA9IDA7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB0b3AudGVybWluYXRvcnMubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIG1hdGNoID0gdG9wLnRlcm1pbmF0b3JzLmV4ZWMoY29kZVRvSGlnaGxpZ2h0KTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY291bnQgPSBwcm9jZXNzTGV4ZW1lKGNvZGVUb0hpZ2hsaWdodC5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KSwgbWF0Y2gpO1xuICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4ICsgY291bnQ7XG4gICAgICB9XG4gICAgICBwcm9jZXNzTGV4ZW1lKGNvZGVUb0hpZ2hsaWdodC5zdWJzdHIoaW5kZXgpKTtcbiAgICAgIGZvcihjdXJyZW50ID0gdG9wOyBjdXJyZW50LnBhcmVudDsgY3VycmVudCA9IGN1cnJlbnQucGFyZW50KSB7IC8vIGNsb3NlIGRhbmdsaW5nIG1vZGVzXG4gICAgICAgIGlmIChjdXJyZW50LmNsYXNzTmFtZSkge1xuICAgICAgICAgIHJlc3VsdCArPSBzcGFuRW5kVGFnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWxldmFuY2U6IHJlbGV2YW5jZSxcbiAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgaWxsZWdhbDpmYWxzZSxcbiAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSxcbiAgICAgICAgdG9wOiB0b3BcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignSWxsZWdhbCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlsbGVnYWw6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIHZhbHVlOiBlc2NhcGUoY29kZVRvSGlnaGxpZ2h0KVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChTQUZFX01PREUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgdmFsdWU6IGVzY2FwZShjb2RlVG9IaWdobGlnaHQpLFxuICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgICAgZXJyb3JSYWlzZWQ6IGVyclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qXG4gIEhpZ2hsaWdodGluZyB3aXRoIGxhbmd1YWdlIGRldGVjdGlvbi4gQWNjZXB0cyBhIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvXG4gIGhpZ2hsaWdodC4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG5cbiAgLSBsYW5ndWFnZSAoZGV0ZWN0ZWQgbGFuZ3VhZ2UpXG4gIC0gcmVsZXZhbmNlIChpbnQpXG4gIC0gdmFsdWUgKGFuIEhUTUwgc3RyaW5nIHdpdGggaGlnaGxpZ2h0aW5nIG1hcmt1cClcbiAgLSBzZWNvbmRfYmVzdCAob2JqZWN0IHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGZvciBzZWNvbmQtYmVzdCBoZXVyaXN0aWNhbGx5XG4gICAgZGV0ZWN0ZWQgbGFuZ3VhZ2UsIG1heSBiZSBhYnNlbnQpXG5cbiAgKi9cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0QXV0byhjb2RlLCBsYW5ndWFnZVN1YnNldCkge1xuICAgIGxhbmd1YWdlU3Vic2V0ID0gbGFuZ3VhZ2VTdWJzZXQgfHwgb3B0aW9ucy5sYW5ndWFnZXMgfHwgb2JqZWN0S2V5cyhsYW5ndWFnZXMpO1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICB2YWx1ZTogZXNjYXBlKGNvZGUpXG4gICAgfTtcbiAgICB2YXIgc2Vjb25kX2Jlc3QgPSByZXN1bHQ7XG4gICAgbGFuZ3VhZ2VTdWJzZXQuZmlsdGVyKGdldExhbmd1YWdlKS5maWx0ZXIoYXV0b0RldGVjdGlvbikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGhpZ2hsaWdodChuYW1lLCBjb2RlLCBmYWxzZSk7XG4gICAgICBjdXJyZW50Lmxhbmd1YWdlID0gbmFtZTtcbiAgICAgIGlmIChjdXJyZW50LnJlbGV2YW5jZSA+IHNlY29uZF9iZXN0LnJlbGV2YW5jZSkge1xuICAgICAgICBzZWNvbmRfYmVzdCA9IGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudC5yZWxldmFuY2UgPiByZXN1bHQucmVsZXZhbmNlKSB7XG4gICAgICAgIHNlY29uZF9iZXN0ID0gcmVzdWx0O1xuICAgICAgICByZXN1bHQgPSBjdXJyZW50O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzZWNvbmRfYmVzdC5sYW5ndWFnZSkge1xuICAgICAgcmVzdWx0LnNlY29uZF9iZXN0ID0gc2Vjb25kX2Jlc3Q7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKlxuICBQb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGhpZ2hsaWdodGVkIG1hcmt1cDpcblxuICAtIHJlcGxhY2UgVEFCcyB3aXRoIHNvbWV0aGluZyBtb3JlIHVzZWZ1bFxuICAtIHJlcGxhY2UgcmVhbCBsaW5lLWJyZWFrcyB3aXRoICc8YnI+JyBmb3Igbm9uLXByZSBjb250YWluZXJzXG5cbiAgKi9cbiAgZnVuY3Rpb24gZml4TWFya3VwKHZhbHVlKSB7XG4gICAgaWYgKCEob3B0aW9ucy50YWJSZXBsYWNlIHx8IG9wdGlvbnMudXNlQlIpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoZml4TWFya3VwUmUsIGZ1bmN0aW9uKG1hdGNoLCBwMSkge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VCUiAmJiBtYXRjaCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICByZXR1cm4gJzxicj4nO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudGFiUmVwbGFjZSkge1xuICAgICAgICAgIHJldHVybiBwMS5yZXBsYWNlKC9cXHQvZywgb3B0aW9ucy50YWJSZXBsYWNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENsYXNzTmFtZShwcmV2Q2xhc3NOYW1lLCBjdXJyZW50TGFuZywgcmVzdWx0TGFuZykge1xuICAgIHZhciBsYW5ndWFnZSA9IGN1cnJlbnRMYW5nID8gYWxpYXNlc1tjdXJyZW50TGFuZ10gOiByZXN1bHRMYW5nLFxuICAgICAgICByZXN1bHQgICA9IFtwcmV2Q2xhc3NOYW1lLnRyaW0oKV07XG5cbiAgICBpZiAoIXByZXZDbGFzc05hbWUubWF0Y2goL1xcYmhsanNcXGIvKSkge1xuICAgICAgcmVzdWx0LnB1c2goJ2hsanMnKTtcbiAgICB9XG5cbiAgICBpZiAocHJldkNsYXNzTmFtZS5pbmRleE9mKGxhbmd1YWdlKSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGxhbmd1YWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKS50cmltKCk7XG4gIH1cblxuICAvKlxuICBBcHBsaWVzIGhpZ2hsaWdodGluZyB0byBhIERPTSBub2RlIGNvbnRhaW5pbmcgY29kZS4gQWNjZXB0cyBhIERPTSBub2RlIGFuZFxuICB0d28gb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZml4TWFya3VwLlxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRCbG9jayhibG9jaykge1xuICAgIHZhciBub2RlLCBvcmlnaW5hbFN0cmVhbSwgcmVzdWx0LCByZXN1bHROb2RlLCB0ZXh0O1xuICAgIHZhciBsYW5ndWFnZSA9IGJsb2NrTGFuZ3VhZ2UoYmxvY2spO1xuXG4gICAgaWYgKGlzTm90SGlnaGxpZ2h0ZWQobGFuZ3VhZ2UpKVxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAob3B0aW9ucy51c2VCUikge1xuICAgICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbm9kZS5pbm5lckhUTUwgPSBibG9jay5pbm5lckhUTUwucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC88YnJbIFxcL10qPi9nLCAnXFxuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBibG9jaztcbiAgICB9XG4gICAgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgcmVzdWx0ID0gbGFuZ3VhZ2UgPyBoaWdobGlnaHQobGFuZ3VhZ2UsIHRleHQsIHRydWUpIDogaGlnaGxpZ2h0QXV0byh0ZXh0KTtcblxuICAgIG9yaWdpbmFsU3RyZWFtID0gbm9kZVN0cmVhbShub2RlKTtcbiAgICBpZiAob3JpZ2luYWxTdHJlYW0ubGVuZ3RoKSB7XG4gICAgICByZXN1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXN1bHROb2RlLmlubmVySFRNTCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IG1lcmdlU3RyZWFtcyhvcmlnaW5hbFN0cmVhbSwgbm9kZVN0cmVhbShyZXN1bHROb2RlKSwgdGV4dCk7XG4gICAgfVxuICAgIHJlc3VsdC52YWx1ZSA9IGZpeE1hcmt1cChyZXN1bHQudmFsdWUpO1xuXG4gICAgYmxvY2suaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlO1xuICAgIGJsb2NrLmNsYXNzTmFtZSA9IGJ1aWxkQ2xhc3NOYW1lKGJsb2NrLmNsYXNzTmFtZSwgbGFuZ3VhZ2UsIHJlc3VsdC5sYW5ndWFnZSk7XG4gICAgYmxvY2sucmVzdWx0ID0ge1xuICAgICAgbGFuZ3VhZ2U6IHJlc3VsdC5sYW5ndWFnZSxcbiAgICAgIHJlOiByZXN1bHQucmVsZXZhbmNlXG4gICAgfTtcbiAgICBpZiAocmVzdWx0LnNlY29uZF9iZXN0KSB7XG4gICAgICBibG9jay5zZWNvbmRfYmVzdCA9IHtcbiAgICAgICAgbGFuZ3VhZ2U6IHJlc3VsdC5zZWNvbmRfYmVzdC5sYW5ndWFnZSxcbiAgICAgICAgcmU6IHJlc3VsdC5zZWNvbmRfYmVzdC5yZWxldmFuY2VcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLypcbiAgVXBkYXRlcyBoaWdobGlnaHQuanMgZ2xvYmFsIG9wdGlvbnMgd2l0aCB2YWx1ZXMgcGFzc2VkIGluIHRoZSBmb3JtIG9mIGFuIG9iamVjdC5cbiAgKi9cbiAgZnVuY3Rpb24gY29uZmlndXJlKHVzZXJfb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBpbmhlcml0KG9wdGlvbnMsIHVzZXJfb3B0aW9ucyk7XG4gIH1cblxuICAvKlxuICBBcHBsaWVzIGhpZ2hsaWdodGluZyB0byBhbGwgPHByZT48Y29kZT4uLjwvY29kZT48L3ByZT4gYmxvY2tzIG9uIGEgcGFnZS5cbiAgKi9cbiAgZnVuY3Rpb24gaW5pdEhpZ2hsaWdodGluZygpIHtcbiAgICBpZiAoaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQpXG4gICAgICByZXR1cm47XG4gICAgaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQgPSB0cnVlO1xuXG4gICAgdmFyIGJsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZSBjb2RlJyk7XG4gICAgQXJyYXlQcm90by5mb3JFYWNoLmNhbGwoYmxvY2tzLCBoaWdobGlnaHRCbG9jayk7XG4gIH1cblxuICAvKlxuICBBdHRhY2hlcyBoaWdobGlnaHRpbmcgdG8gdGhlIHBhZ2UgbG9hZCBldmVudC5cbiAgKi9cbiAgZnVuY3Rpb24gaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXRIaWdobGlnaHRpbmcsIGZhbHNlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGluaXRIaWdobGlnaHRpbmcsIGZhbHNlKTtcbiAgfVxuXG4gIHZhciBQTEFJTlRFWFRfTEFOR1VBR0UgPSB7IGRpc2FibGVBdXRvZGV0ZWN0OiB0cnVlIH07XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMYW5ndWFnZShuYW1lLCBsYW5ndWFnZSkge1xuICAgIHZhciBsYW5nO1xuICAgIHRyeSB7IGxhbmcgPSBsYW5ndWFnZShobGpzKTsgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkxhbmd1YWdlIGRlZmluaXRpb24gZm9yICd7fScgY291bGQgbm90IGJlIHJlZ2lzdGVyZWQuXCIucmVwbGFjZShcInt9XCIsIG5hbWUpKTtcbiAgICAgIC8vIGhhcmQgb3Igc29mdCBlcnJvclxuICAgICAgaWYgKCFTQUZFX01PREUpIHsgdGhyb3cgZXJyb3I7IH0gZWxzZSB7IGNvbnNvbGUuZXJyb3IoZXJyb3IpOyB9XG4gICAgICAvLyBsYW5ndWFnZXMgdGhhdCBoYXZlIHNlcmlvdXMgZXJyb3JzIGFyZSByZXBsYWNlZCB3aXRoIGVzc2VudGlhbGx5IGFcbiAgICAgIC8vIFwicGxhaW50ZXh0XCIgc3RhbmQtaW4gc28gdGhhdCB0aGUgY29kZSBibG9ja3Mgd2lsbCBzdGlsbCBnZXQgbm9ybWFsXG4gICAgICAvLyBjc3MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZW0gLSBhbmQgb25lIGJhZCBsYW5ndWFnZSB3b24ndCBicmVhayB0aGVcbiAgICAgIC8vIGVudGlyZSBoaWdobGlnaHRlclxuICAgICAgbGFuZyA9IFBMQUlOVEVYVF9MQU5HVUFHRTtcbiAgICB9XG4gICAgbGFuZ3VhZ2VzW25hbWVdID0gbGFuZztcbiAgICByZXN0b3JlTGFuZ3VhZ2VBcGkobGFuZyk7XG4gICAgbGFuZy5yYXdEZWZpbml0aW9uID0gbGFuZ3VhZ2UuYmluZChudWxsLGhsanMpO1xuXG4gICAgaWYgKGxhbmcuYWxpYXNlcykge1xuICAgICAgbGFuZy5hbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHthbGlhc2VzW2FsaWFzXSA9IG5hbWU7fSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGlzdExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gb2JqZWN0S2V5cyhsYW5ndWFnZXMpO1xuICB9XG5cbiAgLypcbiAgICBpbnRlbmRlZCB1c2FnZTogV2hlbiBvbmUgbGFuZ3VhZ2UgdHJ1bHkgcmVxdWlyZXMgYW5vdGhlclxuXG4gICAgVW5saWtlIGBnZXRMYW5ndWFnZWAsIHRoaXMgd2lsbCB0aHJvdyB3aGVuIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2VcbiAgICBpcyBub3QgYXZhaWxhYmxlLlxuICAqL1xuICBmdW5jdGlvbiByZXF1aXJlTGFuZ3VhZ2UobmFtZSkge1xuICAgIHZhciBsYW5nID0gZ2V0TGFuZ3VhZ2UobmFtZSk7XG4gICAgaWYgKGxhbmcpIHsgcmV0dXJuIGxhbmc7IH1cblxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1RoZSBcXCd7fVxcJyBsYW5ndWFnZSBpcyByZXF1aXJlZCwgYnV0IG5vdCBsb2FkZWQuJy5yZXBsYWNlKCd7fScsbmFtZSkpO1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhbmd1YWdlKG5hbWUpIHtcbiAgICBuYW1lID0gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxhbmd1YWdlc1tuYW1lXSB8fCBsYW5ndWFnZXNbYWxpYXNlc1tuYW1lXV07XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvRGV0ZWN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbGFuZyA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIHJldHVybiBsYW5nICYmICFsYW5nLmRpc2FibGVBdXRvZGV0ZWN0O1xuICB9XG5cbiAgLyogSW50ZXJmYWNlIGRlZmluaXRpb24gKi9cblxuICBobGpzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgaGxqcy5oaWdobGlnaHRBdXRvID0gaGlnaGxpZ2h0QXV0bztcbiAgaGxqcy5maXhNYXJrdXAgPSBmaXhNYXJrdXA7XG4gIGhsanMuaGlnaGxpZ2h0QmxvY2sgPSBoaWdobGlnaHRCbG9jaztcbiAgaGxqcy5jb25maWd1cmUgPSBjb25maWd1cmU7XG4gIGhsanMuaW5pdEhpZ2hsaWdodGluZyA9IGluaXRIaWdobGlnaHRpbmc7XG4gIGhsanMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZCA9IGluaXRIaWdobGlnaHRpbmdPbkxvYWQ7XG4gIGhsanMucmVnaXN0ZXJMYW5ndWFnZSA9IHJlZ2lzdGVyTGFuZ3VhZ2U7XG4gIGhsanMubGlzdExhbmd1YWdlcyA9IGxpc3RMYW5ndWFnZXM7XG4gIGhsanMuZ2V0TGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZTtcbiAgaGxqcy5yZXF1aXJlTGFuZ3VhZ2UgPSByZXF1aXJlTGFuZ3VhZ2U7XG4gIGhsanMuYXV0b0RldGVjdGlvbiA9IGF1dG9EZXRlY3Rpb247XG4gIGhsanMuaW5oZXJpdCA9IGluaGVyaXQ7XG4gIGhsanMuZGVidWdNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IGZhbHNlOyB9XG5cbiAgLy8gQ29tbW9uIHJlZ2V4cHNcbiAgaGxqcy5JREVOVF9SRSA9ICdbYS16QS1aXVxcXFx3Kic7XG4gIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdyonO1xuICBobGpzLk5VTUJFUl9SRSA9ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/JztcbiAgaGxqcy5DX05VTUJFUl9SRSA9ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KSc7IC8vIDB4Li4uLCAwLi4uLCBkZWNpbWFsLCBmbG9hdFxuICBobGpzLkJJTkFSWV9OVU1CRVJfUkUgPSAnXFxcXGIoMGJbMDFdKyknOyAvLyAwYi4uLlxuICBobGpzLlJFX1NUQVJURVJTX1JFID0gJyF8IT18IT09fCV8JT18JnwmJnwmPXxcXFxcKnxcXFxcKj18XFxcXCt8XFxcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXFxcP3xcXFxcW3xcXFxce3xcXFxcKHxcXFxcXnxcXFxcXj18XFxcXHx8XFxcXHw9fFxcXFx8XFxcXHx8fic7XG5cbiAgLy8gQ29tbW9uIG1vZGVzXG4gIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ1xcXFxcXFxcW1xcXFxzXFxcXFNdJywgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuQVBPU19TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBobGpzLlFVT1RFX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSA9IHtcbiAgICBiZWdpbjogL1xcYihhfGFufHRoZXxhcmV8SSdtfGlzbid0fGRvbid0fGRvZXNuJ3R8d29uJ3R8YnV0fGp1c3R8c2hvdWxkfHByZXR0eXxzaW1wbHl8ZW5vdWdofGdvbm5hfGdvaW5nfHd0Znxzb3xzdWNofHdpbGx8eW91fHlvdXJ8dGhleXxsaWtlfG1vcmUpXFxiL1xuICB9O1xuICBobGpzLkNPTU1FTlQgPSBmdW5jdGlvbiAoYmVnaW4sIGVuZCwgaW5oZXJpdHMpIHtcbiAgICB2YXIgbW9kZSA9IGhsanMuaW5oZXJpdChcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiBiZWdpbiwgZW5kOiBlbmQsXG4gICAgICAgIGNvbnRhaW5zOiBbXVxuICAgICAgfSxcbiAgICAgIGluaGVyaXRzIHx8IHt9XG4gICAgKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5QSFJBU0FMX1dPUkRTX01PREUpO1xuICAgIG1vZGUuY29udGFpbnMucHVzaCh7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46ICcoPzpUT0RPfEZJWE1FfE5PVEV8QlVHfFhYWCk6JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlO1xuICB9O1xuICBobGpzLkNfTElORV9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy8vJywgJyQnKTtcbiAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnL1xcXFwqJywgJ1xcXFwqLycpO1xuICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcjJywgJyQnKTtcbiAgaGxqcy5OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5DX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuQklOQVJZX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuQklOQVJZX05VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5DU1NfTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCcgK1xuICAgICAgJyV8ZW18ZXh8Y2h8cmVtJyAgK1xuICAgICAgJ3x2d3x2aHx2bWlufHZtYXgnICtcbiAgICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAgICd8ZGVnfGdyYWR8cmFkfHR1cm4nICtcbiAgICAgICd8c3xtcycgK1xuICAgICAgJ3xIenxrSHonICtcbiAgICAgICd8ZHBpfGRwY218ZHBweCcgK1xuICAgICAgJyk/JyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5SRUdFWFBfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGJlZ2luOiAvXFwvLywgZW5kOiAvXFwvW2dpbXV5XSovLFxuICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGhsanMuVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBobGpzLk1FVEhPRF9HVUFSRCA9IHtcbiAgICAvLyBleGNsdWRlcyBtZXRob2QgbmFtZXMgZnJvbSBrZXl3b3JkIHByb2Nlc3NpbmdcbiAgICBiZWdpbjogJ1xcXFwuXFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgY29uc3RhbnRzID0gW1xuICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSxcbiAgICBobGpzLkNPTU1FTlQsXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICBobGpzLk1FVEhPRF9HVUFSRFxuICBdXG4gIGNvbnN0YW50cy5mb3JFYWNoKGZ1bmN0aW9uKG9iaikgeyBkZWVwRnJlZXplKG9iaik7IH0pO1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9kZWVwLWZyZWV6ZS9ibG9iL21hc3Rlci9pbmRleC5qc1xuICBmdW5jdGlvbiBkZWVwRnJlZXplIChvKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShvKTtcblxuICAgIHZhciBvYmpJc0Z1bmN0aW9uID0gdHlwZW9mIG8gPT09ICdmdW5jdGlvbic7XG5cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShwcm9wKVxuICAgICAgJiYgb1twcm9wXSAhPT0gbnVsbFxuICAgICAgJiYgKHR5cGVvZiBvW3Byb3BdID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAvLyBJRTExIGZpeDogaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjMxOFxuICAgICAgLy8gVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmVcbiAgICAgICYmIChvYmpJc0Z1bmN0aW9uID8gcHJvcCAhPT0gJ2NhbGxlcicgJiYgcHJvcCAhPT0gJ2NhbGxlZScgJiYgcHJvcCAhPT0gJ2FyZ3VtZW50cycgOiB0cnVlKVxuICAgICAgJiYgIU9iamVjdC5pc0Zyb3plbihvW3Byb3BdKSkge1xuICAgICAgICBkZWVwRnJlZXplKG9bcHJvcF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG87XG4gIH07XG5cblxuICByZXR1cm4gaGxqcztcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcyl7XG5cbiAgLy8g0L7QsdGJ0LjQuSDQv9Cw0YLRgtC10YDQvSDQtNC70Y8g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC+0LJcbiAgdmFyIFVOREVSU0NPUkVfSURFTlRfUkUgPSAnW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSsnO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4ga2V5d29yZFxuICB2YXIgdjdfa2V5d29yZHMgPVxuICAn0LTQsNC70LXQtSAnO1xuXG4gIC8vIHY4INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCA9PT4ga2V5d29yZFxuICB2YXIgdjhfa2V5d29yZHMgPVxuICAn0LLQvtC30LLRgNCw0YIg0LLRi9C30LLQsNGC0YzQuNGB0LrQu9GO0YfQtdC90LjQtSDQstGL0L/QvtC70L3QuNGC0Ywg0LTQu9GPINC10YHQu9C4INC4INC40Lcg0LjQu9C4INC40L3QsNGH0LUg0LjQvdCw0YfQtdC10YHQu9C4INC40YHQutC70Y7Rh9C10L3QuNC1INC60LDQttC00L7Qs9C+INC60L7QvdC10YbQtdGB0LvQuCAnICtcbiAgJ9C60L7QvdC10YbQv9C+0L/Ri9GC0LrQuCDQutC+0L3QtdGG0YbQuNC60LvQsCDQvdC1INC90L7QstGL0Lkg0L/QtdGA0LXQudGC0Lgg0L/QtdGA0LXQvCDQv9C+INC/0L7QutCwINC/0L7Qv9GL0YLQutCwINC/0YDQtdGA0LLQsNGC0Ywg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0YLQvtCz0LTQsCDRhtC40LrQuyDRjdC60YHQv9C+0YDRgiAnO1xuXG4gIC8vIGtleXdvcmQgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LBcbiAgdmFyIEtFWVdPUkQgPSB2N19rZXl3b3JkcyArIHY4X2tleXdvcmRzO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LTQuNGA0LXQutGC0LjQstGLLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4gbWV0YS1rZXl3b3JkXG4gIHZhciB2N19tZXRhX2tleXdvcmRzID1cbiAgJ9C30LDQs9GA0YPQt9C40YLRjNC40LfRhNCw0LnQu9CwICc7XG5cbiAgLy8gdjgg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINCyINC40L3RgdGC0YDRg9C60YbQuNGP0YUg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLQsNGFINC60L7QvNC/0LjQu9GP0YbQuNC4LCDQsNC90L3QvtGC0LDRhtC40Y/RhSA9PT4gbWV0YS1rZXl3b3JkXG4gIHZhciB2OF9tZXRhX2tleXdvcmRzID1cbiAgJ9Cy0LXQsdC60LvQuNC10L3RgiDQstC80LXRgdGC0L4g0LLQvdC10YjQvdC10LXRgdC+0LXQtNC40L3QtdC90LjQtSDQutC70LjQtdC90YIg0LrQvtC90LXRhtC+0LHQu9Cw0YHRgtC4INC80L7QsdC40LvRjNC90L7QtdC/0YDQuNC70L7QttC10L3QuNC10LrQu9C40LXQvdGCINC80L7QsdC40LvRjNC90L7QtdC/0YDQuNC70L7QttC10L3QuNC10YHQtdGA0LLQtdGAICcgK1xuICAn0L3QsNC60LvQuNC10L3RgtC1INC90LDQutC70LjQtdC90YLQtdC90LDRgdC10YDQstC10YDQtSDQvdCw0LrQu9C40LXQvdGC0LXQvdCw0YHQtdGA0LLQtdGA0LXQsdC10LfQutC+0L3RgtC10LrRgdGC0LAg0L3QsNGB0LXRgNCy0LXRgNC1INC90LDRgdC10YDQstC10YDQtdCx0LXQt9C60L7QvdGC0LXQutGB0YLQsCDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC0ICcgK1xuICAn0L/QvtGB0LvQtSDRgdC10YDQstC10YAg0YLQvtC70YHRgtGL0LnQutC70LjQtdC90YLQvtCx0YvRh9C90L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0L7Qu9GB0YLRi9C50LrQu9C40LXQvdGC0YPQv9GA0LDQstC70Y/QtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0L7QvdC60LjQudC60LvQuNC10L3RgiAnO1xuXG4gIC8vIG1ldGEta2V5d29yZCA6INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCDQsiDQuNC90YHRgtGA0YPQutGG0LjRj9GFINC/0YDQtdC/0YDQvtGG0LXRgdGB0L7RgNCwLCDQtNC40YDQtdC60YLQuNCy0LDRhSDQutC+0LzQv9C40LvRj9GG0LjQuCwg0LDQvdC90L7RgtCw0YbQuNGP0YVcbiAgdmFyIE1FVEFLRVlXT1JEID0gdjdfbWV0YV9rZXl3b3JkcyArIHY4X21ldGFfa2V5d29yZHM7XG5cbiAgLy8gdjcg0YHQuNGB0YLQtdC80L3Ri9C1INC60L7QvdGB0YLQsNC90YLRiyA9PT4gYnVpbHRfaW5cbiAgdmFyIHY3X3N5c3RlbV9jb25zdGFudHMgPVxuICAn0YDQsNC30LTQtdC70LjRgtC10LvRjNGB0YLRgNCw0L3QuNGGINGA0LDQt9C00LXQu9C40YLQtdC70YzRgdGC0YDQvtC6INGB0LjQvNCy0L7Qu9GC0LDQsdGD0LvRj9GG0LjQuCAnO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4gYnVpbHRfaW5cbiAgdmFyIHY3X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgPVxuICAnYW5zaXRvb2VtIG9lbXRvYW5zaSDQstCy0LXRgdGC0LjQstC40LTRgdGD0LHQutC+0L3RgtC+INCy0LLQtdGB0YLQuNC/0LXRgNC10YfQuNGB0LvQtdC90LjQtSDQstCy0LXRgdGC0LjQv9C10YDQuNC+0LQg0LLQstC10YHRgtC40L/Qu9Cw0L3RgdGH0LXRgtC+0LIg0LLRi9Cx0YDQsNC90L3Ri9C50L/Qu9Cw0L3RgdGH0LXRgtC+0LIgJyArXG4gICfQtNCw0YLQsNCz0L7QtCDQtNCw0YLQsNC80LXRgdGP0YYg0LTQsNGC0LDRh9C40YHQu9C+INC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC30L3QsNGH0LXQvdC40LXQstGB0YLRgNC+0LrRgyDQt9C90LDRh9C10L3QuNC10LjQt9GB0YLRgNC+0LrQuCDQutCw0YLQsNC70L7Qs9C40LEg0LrQsNGC0LDQu9C+0LPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQutC+0LTRgdC40LzQsiDQutC+0L3Qs9C+0LTQsCDQutC+0L3QtdGG0L/QtdGA0LjQvtC00LDQsdC4INC60L7QvdC10YbRgNCw0YHRgdGH0LjRgtCw0L3QvdC+0LPQvtC/0LXRgNC40L7QtNCw0LHQuCDQutC+0L3QtdGG0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0LjQvdGC0LXRgNCy0LDQu9CwINC60L7QvdC60LLQsNGA0YLQsNC70LAg0LrQvtC90LzQtdGB0Y/RhtCwICcgK1xuICAn0LrQvtC90L3QtdC00LXQu9C4INC70L7QsyDQu9C+0LMxMCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LXQutC+0LvQuNGH0LXRgdGC0LLQvtGB0YPQsdC60L7QvdGC0L4g0L3QsNC30LLQsNC90LjQtdC40L3RgtC10YDRhNC10LnRgdCwINC90LDQt9Cy0LDQvdC40LXQvdCw0LHQvtGA0LDQv9GA0LDQsiDQvdCw0LfQvdCw0YfQuNGC0YzQstC40LQgJyArXG4gICfQvdCw0LfQvdCw0YfQuNGC0YzRgdGH0LXRgiDQvdCw0LnRgtC40YHRgdGL0LvQutC4INC90LDRh9Cw0LvQvtC/0LXRgNC40L7QtNCw0LHQuCDQvdCw0YfQsNC70L7RgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0LLQsNC70LAg0L3QsNGH0LPQvtC00LAg0L3QsNGH0LrQstCw0YDRgtCw0LvQsCDQvdCw0YfQvNC10YHRj9GG0LAgJyArXG4gICfQvdCw0YfQvdC10LTQtdC70Lgg0L3QvtC80LXRgNC00L3Rj9Cz0L7QtNCwINC90L7QvNC10YDQtNC90Y/QvdC10LTQtdC70Lgg0L3QvtC80LXRgNC90LXQtNC10LvQuNCz0L7QtNCwINC+0LHRgNCw0LHQvtGC0LrQsNC+0LbQuNC00LDQvdC40Y8g0L7RgdC90L7QstC90L7QudC20YPRgNC90LDQu9GA0LDRgdGH0LXRgtC+0LIgJyArXG4gICfQvtGB0L3QvtCy0L3QvtC50L/Qu9Cw0L3RgdGH0LXRgtC+0LIg0L7RgdC90L7QstC90L7QudGP0LfRi9C6INC+0YfQuNGB0YLQuNGC0YzQvtC60L3QvtGB0L7QvtCx0YnQtdC90LjQuSDQv9C10YDQuNC+0LTRgdGC0YAg0L/QvtC70YPRh9C40YLRjNCy0YDQtdC80Y/RgtCwINC/0L7Qu9GD0YfQuNGC0YzQtNCw0YLRg9GC0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC60YPQvNC10L3RgtGC0LAg0L/QvtC70YPRh9C40YLRjNC30L3QsNGH0LXQvdC40Y/QvtGC0LHQvtGA0LAg0L/QvtC70YPRh9C40YLRjNC/0L7Qt9C40YbQuNGO0YLQsCDQv9C+0LvRg9GH0LjRgtGM0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDQv9C+0LvRg9GH0LjRgtGM0YLQsCAnICtcbiAgJ9C/0YDQtdGE0LjQutGB0LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40Lgg0L/RgNC+0L/QuNGB0Ywg0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDRgNCw0LfQvCDRgNCw0LfQvtCx0YDQsNGC0YzQv9C+0LfQuNGG0LjRjtC00L7QutGD0LzQtdC90YLQsCDRgNCw0YHRgdGH0LjRgtCw0YLRjNGA0LXQs9C40YHRgtGA0YvQvdCwICcgK1xuICAn0YDQsNGB0YHRh9C40YLQsNGC0YzRgNC10LPQuNGB0YLRgNGL0L/QviDRgdC40LzQsiDRgdC+0LfQtNCw0YLRjNC+0LHRitC10LrRgiDRgdGC0LDRgtGD0YHQstC+0LfQstGA0LDRgtCwINGB0YLRgNC60L7Qu9C40YfQtdGB0YLQstC+0YHRgtGA0L7QuiDRgdGE0L7RgNC80LjRgNC+0LLQsNGC0YzQv9C+0LfQuNGG0LjRjtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GB0YfQtdGC0L/QvtC60L7QtNGDINGC0LXQutGD0YnQtdC10LLRgNC10LzRjyDRgtC40L/Qt9C90LDRh9C10L3QuNGPINGC0LjQv9C30L3QsNGH0LXQvdC40Y/RgdGC0YAg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgtCw0L3QsCDRg9GB0YLQsNC90L7QstC40YLRjNGC0LDQv9C+INGE0LjQutGB0YjQsNCx0LvQvtC9INGI0LDQsdC70L7QvSAnO1xuICBcbiAgLy8gdjgg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyA9XG4gICdhY29zIGFzaW4gYXRhbiBiYXNlNjTQt9C90LDRh9C10L3QuNC1IGJhc2U2NNGB0YLRgNC+0LrQsCBjb3MgZXhwIGxvZyBsb2cxMCBwb3cgc2luIHNxcnQgdGFuIHhtbNC30L3QsNGH0LXQvdC40LUgeG1s0YHRgtGA0L7QutCwICcgK1xuICAneG1s0YLQuNC/IHhtbNGC0LjQv9C30L3RhyDQsNC60YLQuNCy0L3QvtC10L7QutC90L4g0LHQtdC30L7Qv9Cw0YHQvdGL0LnRgNC10LbQuNC8INCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINCx0YPQu9C10LLQviDQstCy0LXRgdGC0LjQtNCw0YLRgyDQstCy0LXRgdGC0LjQt9C90LDRh9C10L3QuNC1ICcgK1xuICAn0LLQstC10YHRgtC40YHRgtGA0L7QutGDINCy0LLQtdGB0YLQuNGH0LjRgdC70L4g0LLQvtC30LzQvtC20L3QvtGB0YLRjNGH0YLQtdC90LjRj3htbCDQstC+0L/RgNC+0YEg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGM0LfQvdCw0YfQtdC90LjQtSDQstGA0LXQsyDQstGL0LPRgNGD0LfQuNGC0YzQttGD0YDQvdCw0LvRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0LLRi9C/0L7Qu9C90LjRgtGM0L7QsdGA0LDQsdC+0YLQutGD0L7Qv9C+0LLQtdGJ0LXQvdC40Y8g0LLRi9C/0L7Qu9C90LjRgtGM0L/RgNC+0LLQtdGA0LrRg9C/0YDQsNCy0LTQvtGB0YLRg9C/0LAg0LLRi9GH0LjRgdC70LjRgtGMINCz0L7QtCDQtNCw0L3QvdGL0LXRhNC+0YDQvNGL0LLQt9C90LDRh9C10L3QuNC1INC00LDRgtCwINC00LXQvdGMINC00LXQvdGM0LPQvtC00LAgJyArXG4gICfQtNC10L3RjNC90LXQtNC10LvQuCDQtNC+0LHQsNCy0LjRgtGM0LzQtdGB0Y/RhiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0YzRgNCw0LHQvtGC0YPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LfQsNCy0LXRgNGI0LjRgtGM0YDQsNCx0L7RgtGD0YHQuNGB0YLQtdC80YsgJyArXG4gICfQt9Cw0LPRgNGD0LfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDINC30LDQutGA0YvRgtGM0YHQv9GA0LDQstC60YMg0LfQsNC/0LjRgdCw0YLRjGpzb24g0LfQsNC/0LjRgdCw0YLRjHhtbCDQt9Cw0L/QuNGB0LDRgtGM0LTQsNGC0YNqc29uINC30LDQv9C40YHRjNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C30LDQv9C+0LvQvdC40YLRjNC30L3QsNGH0LXQvdC40Y/RgdCy0L7QudGB0YLQsiDQt9Cw0L/RgNC+0YHQuNGC0YzRgNCw0LfRgNC10YjQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQt9Cw0L/Rg9GB0YLQuNGC0YzQv9GA0LjQu9C+0LbQtdC90LjQtSDQt9Cw0L/Rg9GB0YLQuNGC0YzRgdC40YHRgtC10LzRgyDQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOICcgK1xuICAn0LfQvdCw0YfQtdC90LjQtdCy0LTQsNC90L3Ri9C10YTQvtGA0LzRiyDQt9C90LDRh9C10L3QuNC10LLRgdGC0YDQvtC60YPQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQstGE0LDQudC7INC30L3QsNGH0LXQvdC40LXQt9Cw0L/QvtC70L3QtdC90L4g0LfQvdCw0YfQtdC90LjQtdC40LfRgdGC0YDQvtC60LjQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQuNC30YTQsNC50LvQsCAnICtcbiAgJ9C40Ld4bWzRgtC40L/QsCDQuNC80L/QvtGA0YLQvNC+0LTQtdC70Lh4ZHRvINC40LzRj9C60L7QvNC/0YzRjtGC0LXRgNCwINC40LzRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjNC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9C10LTQsNC90L3Ri9C1INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC+0YjQuNCx0LrQtSAnICtcbiAgJ9C60LDRgtCw0LvQvtCz0LHQuNCx0LvQuNC+0YLQtdC60LjQvNC+0LHQuNC70YzQvdC+0LPQvtGD0YHRgtGA0L7QudGB0YLQstCwINC60LDRgtCw0LvQvtCz0LLRgNC10LzQtdC90L3Ri9GF0YTQsNC50LvQvtCyINC60LDRgtCw0LvQvtCz0LTQvtC60YPQvNC10L3RgtC+0LIg0LrQsNGC0LDQu9C+0LPQv9GA0L7Qs9GA0LDQvNC80Ysg0LrQvtC00LjRgNC+0LLQsNGC0YzRgdGC0YDQvtC60YMgJyArXG4gICfQutC+0LTQu9C+0LrQsNC70LjQt9Cw0YbQuNC40LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC60L7QtNGB0LjQvNCy0L7Qu9CwINC60L7QvNCw0L3QtNCw0YHQuNGB0YLQtdC80Ysg0LrQvtC90LXRhtCz0L7QtNCwINC60L7QvdC10YbQtNC90Y8g0LrQvtC90LXRhtC60LLQsNGA0YLQsNC70LAg0LrQvtC90LXRhtC80LXRgdGP0YbQsCDQutC+0L3QtdGG0LzQuNC90YPRgtGLICcgK1xuICAn0LrQvtC90LXRhtC90LXQtNC10LvQuCDQutC+0L3QtdGG0YfQsNGB0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGP0LHQsNC30YvQtNCw0L3QvdGL0YXQuNC30LzQtdC90LXQvdCw0LTQuNC90LDQvNC40YfQtdGB0LrQuCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y/QuNC30LzQtdC90LXQvdCwINC60L7Qv9C40YDQvtCy0LDRgtGM0LTQsNC90L3Ri9C10YTQvtGA0LzRiyAnICtcbiAgJ9C60L7Qv9C40YDQvtCy0LDRgtGM0YTQsNC50Lsg0LrRgNCw0YLQutC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCDQu9C10LIg0LzQsNC60YEg0LzQtdGB0YLQvdC+0LXQstGA0LXQvNGPINC80LXRgdGP0YYg0LzQuNC9INC80LjQvdGD0YLQsCDQvNC+0L3QvtC/0L7Qu9GM0L3Ri9C50YDQtdC20LjQvCDQvdCw0LnRgtC4ICcgK1xuICAn0L3QsNC50YLQuNC90LXQtNC+0L/Rg9GB0YLQuNC80YvQtdGB0LjQvNCy0L7Qu9GLeG1sINC90LDQudGC0LjQvtC60L3QvtC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQvdCw0LnRgtC40L/QvtC80LXRh9C10L3QvdGL0LXQvdCw0YPQtNCw0LvQtdC90LjQtSDQvdCw0LnRgtC40L/QvtGB0YHRi9C70LrQsNC8INC90LDQudGC0LjRhNCw0LnQu9GLICcgK1xuICAn0L3QsNGH0LDQu9C+0LPQvtC00LAg0L3QsNGH0LDQu9C+0LTQvdGPINC90LDRh9Cw0LvQvtC60LLQsNGA0YLQsNC70LAg0L3QsNGH0LDQu9C+0LzQtdGB0Y/RhtCwINC90LDRh9Cw0LvQvtC80LjQvdGD0YLRiyDQvdCw0YfQsNC70L7QvdC10LTQtdC70Lgg0L3QsNGH0LDQu9C+0YfQsNGB0LAg0L3QsNGH0LDRgtGM0LfQsNC/0YDQvtGB0YDQsNC30YDQtdGI0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQt9Cw0L/Rg9GB0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0YfQsNGC0YzQutC+0L/QuNGA0L7QstCw0L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C10YDQtdC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LTQutC70Y7Rh9C10L3QuNC10LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyAnICtcbiAgJ9C90LDRh9Cw0YLRjNC/0L7QtNC60LvRjtGH0LXQvdC40LXRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10Lkg0L3QsNGH0LDRgtGM0L/QvtC00LrQu9GO0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQvdCw0YfQsNGC0YzQv9C+0LjRgdC60YTQsNC50LvQvtCyICcgK1xuICAn0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10LrQsNGC0LDQu9C+0LPQsNCy0YDQtdC80LXQvdC90YvRhdGE0LDQudC70L7QsiDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXQutCw0YLQsNC70L7Qs9Cw0LTQvtC60YPQvNC10L3RgtC+0LIg0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10YDQsNCx0L7Rh9C10LPQvtC60LDRgtCw0LvQvtCz0LDQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0L/QvtC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LzQtdGJ0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YHQvtC30LTQsNC90LjQtdC00LLQvtC40YfQvdGL0YXQtNCw0L3QvdGL0YXQuNC30YTQsNC50LvQsCDQvdCw0YfQsNGC0YzRgdC+0LfQtNCw0L3QuNC10LrQsNGC0LDQu9C+0LPQsCAnICtcbiAgJ9C90LDRh9Cw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOINC90LDRh9Cw0YLRjNGD0LTQsNC70LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YPRgdGC0LDQvdC+0LLQutGD0LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyDQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10LkgJyArXG4gICfQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0L3QtdC00LXQu9GP0LPQvtC00LAg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0YzQt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L7QtdC00LjQvdC10L3QuNGPINC90L7QvNC10YDRgdC10LDQvdGB0LDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfQvdC+0LzQtdGA0YHQvtC10LTQuNC90LXQvdC40Y/QuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L3RgNC10LMg0L3RgdGC0YAg0L7QsdC90L7QstC40YLRjNC40L3RgtC10YDRhNC10LnRgSDQvtCx0L3QvtCy0LjRgtGM0L3Rg9C80LXRgNCw0YbQuNGO0L7QsdGK0LXQutGC0L7QsiDQvtCx0L3QvtCy0LjRgtGM0L/QvtCy0YLQvtGA0L3QvtC40YHQv9C+0LvRjNC30YPQtdC80YvQtdC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQvtCx0YDQsNCx0L7RgtC60LDQv9GA0LXRgNGL0LLQsNC90LjRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvtCx0YrQtdC00LjQvdC40YLRjNGE0LDQudC70Ysg0L7QutGAINC+0L/QuNGB0LDQvdC40LXQvtGI0LjQsdC60Lgg0L7Qv9C+0LLQtdGB0YLQuNGC0Ywg0L7Qv9C+0LLQtdGB0YLQuNGC0YzQvtCx0LjQt9C80LXQvdC10L3QuNC4ICcgK1xuICAn0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQt9Cw0L/RgNC+0YHQsNC90LDRgdGC0YDQvtC10LrQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQvtC20LjQtNCw0L3QuNGPINC+0YLQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQvtGC0LrRgNGL0YLRjNC30L3QsNGH0LXQvdC40LUg0L7RgtC60YDRi9GC0YzQuNC90LTQtdC60YHRgdC/0YDQsNCy0LrQuCDQvtGC0LrRgNGL0YLRjNGB0L7QtNC10YDQttCw0L3QuNC10YHQv9GA0LDQstC60Lgg0L7RgtC60YDRi9GC0YzRgdC/0YDQsNCy0LrRgyDQvtGC0LrRgNGL0YLRjNGE0L7RgNC80YMg0L7RgtC60YDRi9GC0YzRhNC+0YDQvNGD0LzQvtC00LDQu9GM0L3QviAnICtcbiAgJ9C+0YLQvNC10L3QuNGC0YzRgtGA0LDQvdC30LDQutGG0LjRjiDQvtGH0LjRgdGC0LjRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQvtGH0LjRgdGC0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC+0YfQuNGB0YLQuNGC0YzRgdC+0L7QsdGJ0LXQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNGL0LTQvtGB0YLRg9C/0LAgJyArXG4gICfQv9C10YDQtdC50YLQuNC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQv9C10YDQtdC80LXRgdGC0LjRgtGM0YTQsNC50Lsg0L/QvtC00LrQu9GO0YfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDICcgK1xuICAn0L/QvtC00LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC30LDQv9GA0L7RgdCw0L3QsNGB0YLRgNC+0LXQutC60LvQuNC10L3RgtCw0LvQuNGG0LXQvdC30LjRgNC+0LLQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7QttC40LTQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHQutGA0LjQv9GC0L7Qs9GA0LDRhNC40LXQuSDQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQv9C+0LTRgNC+0LHQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC00LDRgtGLINC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC30L3QsNGH0LXQvdC40Y8g0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00YHRgtGA0L7QutC4INC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNGH0LjRgdC70LAg0L/QvtC60LDQt9Cw0YLRjNCy0L7Qv9GA0L7RgSDQv9C+0LrQsNC30LDRgtGM0LfQvdCw0YfQtdC90LjQtSAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQuNC90YTQvtGA0LzQsNGG0LjRjtC+0LHQvtGI0LjQsdC60LUg0L/QvtC60LDQt9Cw0YLRjNC90LDQutCw0YDRgtC1INC/0L7QutCw0LfQsNGC0YzQvtC/0L7QstC10YnQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+0LrQsNC30LDRgtGM0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQv9C+0LvQvdC+0LXQuNC80Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGMY29t0L7QsdGK0LXQutGCINC/0L7Qu9GD0YfQuNGC0Yx4bWzRgtC40L8g0L/QvtC70YPRh9C40YLRjNCw0LTRgNC10YHQv9C+0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjiDQv9C+0LvRg9GH0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDQstC10YDRiNC10L3QuNGP0YHQv9GP0YnQtdCz0L7RgdC10LDQvdGB0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINC/0L7Qu9GD0YfQuNGC0YzQstGA0LXQvNGP0L7QttC40LTQsNC90LjRj9Cx0LvQvtC60LjRgNC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQtNCw0L3QvdGL0LXQstGL0LHQvtGA0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQudC/0LDRgNCw0LzQtdGC0YDQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC00L7Qv9GD0YHRgtC40LzRi9C10LrQvtC00YvQu9C+0LrQsNC70LjQt9Cw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQtNC+0L/Rg9GB0YLQuNC80YvQtdGH0LDRgdC+0LLRi9C10L/QvtGP0YHQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQt9Cw0LPQvtC70L7QstC+0LrQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC/0L7Qu9GD0YfQuNGC0YzQt9C90LDRh9C10L3QuNGP0L7RgtCx0L7RgNCw0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQuNC30LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAg0L/QvtC70YPRh9C40YLRjNC40LzRj9Cy0YDQtdC80LXQvdC90L7Qs9C+0YTQsNC50LvQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQuNC80Y/QutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC40L3RhNC+0YDQvNCw0YbQuNGO0Y3QutGA0LDQvdC+0LLQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40LggJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0LvRg9GH0LjRgtGM0LrRgNCw0YLQutC40LnQt9Cw0LPQvtC70L7QstC+0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQv9C+0LvRg9GH0LjRgtGM0LzQsNC60LXRgtC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC80LDRgdC60YPQstGB0LXRhNCw0LnQu9GLINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9C60LvQuNC10L3RgtCwINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9GB0LXRgNCy0LXRgNCwINC/0L7Qu9GD0YfQuNGC0YzQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10L/QvtCw0LTRgNC10YHRgyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvNC40L3QuNC80LDQu9GM0L3Rg9GO0LTQu9C40L3Rg9C/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNC90LDQstC40LPQsNGG0LjQvtC90L3Rg9GO0YHRgdGL0LvQutGDINC/0L7Qu9GD0YfQuNGC0YzQvdCw0LLQuNCz0LDRhtC40L7QvdC90YPRjtGB0YHRi9C70LrRg9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuNCx0LDQt9GL0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzQvtCx0YnQuNC50LzQsNC60LXRgiAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0YnRg9GO0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0L7QutC90LAg0L/QvtC70YPRh9C40YLRjNC+0L/QtdGA0LDRgtC40LLQvdGD0Y7QvtGC0LzQtdGC0LrRg9Cy0YDQtdC80LXQvdC4INC/0L7Qu9GD0YfQuNGC0YzQvtGC0LrQu9GO0YfQtdC90LjQtdCx0LXQt9C+0L/QsNGB0L3QvtCz0L7RgNC10LbQuNC80LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/QsNGA0LDQvNC10YLRgNGL0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YvRhdC+0L/RhtC40LnQuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0L/QvtC70L3QvtC10LjQvNGP0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQvtC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y/QvdCw0LLQuNCz0LDRhtC40L7QvdC90YvRhdGB0YHRi9C70L7QuiDQv9C+0LvRg9GH0LjRgtGM0L/RgNC+0LLQtdGA0LrRg9GB0LvQvtC20L3QvtGB0YLQuNC/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNGA0LDQt9C00LXQu9C40YLQtdC70YzQv9GD0YLQuCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgNCw0LfQtNC10LvQuNGC0LXQu9GM0L/Rg9GC0LjQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0YDQsNC30LTQtdC70LjRgtC10LvRjNC/0YPRgtC40YHQtdGA0LLQtdGA0LAg0L/QvtC70YPRh9C40YLRjNGB0LXQsNC90YHRi9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgdC60L7RgNC+0YHRgtGM0LrQu9C40LXQvdGC0YHQutC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPINC/0L7Qu9GD0YfQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjRj9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0YHQvtC+0LHRidC10L3QuNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLINC/0L7Qu9GD0YfQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDRg9C60YLRg9GA0YPRhdGA0LDQvdC10L3QuNGP0LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YLQtdC60YPRidC40LnRgdC10LDQvdGB0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzRhNCw0LnQuyDQv9C+0LvRg9GH0LjRgtGM0YTQsNC50LvRiyDQv9C+0LvRg9GH0LjRgtGM0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y4gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y7QuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQvtGBINC/0L7QvNC10YHRgtC40YLRjNCy0L7QstGA0LXQvNC10L3QvdC+0LXRhdGA0LDQvdC40LvQuNGJ0LUgJyArXG4gICfQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQuyDQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQu9GLINC/0YDQsNCyINC/0YDQsNCy0L7QtNC+0YHRgtGD0L/QsCDQv9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90L7QtdC30L3QsNGH0LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQutC+0LTQsNC70L7QutCw0LvQuNC30LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQv9C10YDQuNC+0LTQsCAnICtcbiAgJ9C/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/RgNCw0LLQsCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC/0YDQuNC70L7QttC10L3QuNGPINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10YHQvtCx0YvRgtC40Y/QttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRh9Cw0YHQvtCy0L7Qs9C+0L/QvtGP0YHQsCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1ICcgK1xuICAn0L/RgNC10LrRgNCw0YLQuNGC0YzRgNCw0LHQvtGC0YPRgdC40YHRgtC10LzRiyDQv9GA0LjQstC40LvQtdCz0LjRgNC+0LLQsNC90L3Ri9C50YDQtdC20LjQvCDQv9GA0L7QtNC+0LvQttC40YLRjNCy0YvQt9C+0LIg0L/RgNC+0YfQuNGC0LDRgtGManNvbiDQv9GA0L7Rh9C40YLQsNGC0Yx4bWwg0L/RgNC+0YfQuNGC0LDRgtGM0LTQsNGC0YNqc29uINC/0YPRgdGC0LDRj9GB0YLRgNC+0LrQsCAnICtcbiAgJ9GA0LDQsdC+0YfQuNC50LrQsNGC0LDQu9C+0LPQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YDQsNC30LTQtdC70LjRgtGM0YTQsNC50Lsg0YDQsNC30L7RgNCy0LDRgtGM0YHQvtC10LTQuNC90LXQvdC40LXRgdCy0L3QtdGI0L3QuNC80LjRgdGC0L7Rh9C90LjQutC+0LzQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQutC+0LTQuNGA0L7QstCw0YLRjNGB0YLRgNC+0LrRgyDRgNC+0LvRjNC00L7RgdGC0YPQv9C90LAg0YHQtdC60YPQvdC00LAg0YHQuNCz0L3QsNC7INGB0LjQvNCy0L7QuyDRgdC60L7Qv9C40YDQvtCy0LDRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRgdC80LXRidC10L3QuNC10LvQtdGC0L3QtdCz0L7QstGA0LXQvNC10L3QuCAnICtcbiAgJ9GB0LzQtdGJ0LXQvdC40LXRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QstGA0LXQvNC10L3QuCDRgdC+0LXQtNC40L3QuNGC0YzQsdGD0YTQtdGA0YvQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINGB0L7Qt9C00LDRgtGM0LrQsNGC0LDQu9C+0LMg0YHQvtC30LTQsNGC0YzRhNCw0LHRgNC40LrRg3hkdG8g0YHQvtC60YDQuyDRgdC+0LrRgNC70L8g0YHQvtC60YDQvyDRgdC+0L7QsdGJ0LjRgtGMICcgK1xuICAn0YHQvtGB0YLQvtGP0L3QuNC1INGB0L7RhdGA0LDQvdC40YLRjNC30L3QsNGH0LXQvdC40LUg0YHQvtGF0YDQsNC90LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGB0YDQtdC0INGB0YLRgNC00LvQuNC90LAg0YHRgtGA0LfQsNC60LDQvdGH0LjQstCw0LXRgtGB0Y/QvdCwINGB0YLRgNC30LDQvNC10L3QuNGC0Ywg0YHRgtGA0L3QsNC50YLQuCDRgdGC0YDQvdCw0YfQuNC90LDQtdGC0YHRj9GBICcgK1xuICAn0YHRgtGA0L7QutCwINGB0YLRgNC+0LrQsNGB0L7QtdC00LjQvdC10L3QuNGP0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGB0YLRgNC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDQvtC60YMg0YHRgtGA0YDQsNC30LTQtdC70LjRgtGMINGB0YLRgNGB0L7QtdC00LjQvdC40YLRjCDRgdGC0YDRgdGA0LDQstC90LjRgtGMINGB0YLRgNGH0LjRgdC70L7QstGF0L7QttC00LXQvdC40LkgJytcbiAgJ9GB0YLRgNGH0LjRgdC70L7RgdGC0YDQvtC6INGB0YLRgNGI0LDQsdC70L7QvSDRgtC10LrRg9GJ0LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0LTQsNGC0LDRgdC10LDQvdGB0LAg0YLQtdC60YPRidCw0Y/Rg9C90LjQstC10YDRgdCw0LvRjNC90LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0YPQvdC40LLQtdGA0YHQsNC70YzQvdCw0Y/QtNCw0YLQsNCy0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUgJyArXG4gICfRgtC10LrRg9GJ0LjQudCy0LDRgNC40LDQvdGC0LjQvdGC0LXRgNGE0LXQudGB0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YLQtdC60YPRidC40LnQstCw0YDQuNCw0L3RgtC+0YHQvdC+0LLQvdC+0LPQvtGI0YDQuNGE0YLQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgtC10LrRg9GJ0LjQudC60L7QtNC70L7QutCw0LvQuNC30LDRhtC40LggJyArXG4gICfRgtC10LrRg9GJ0LjQudGA0LXQttC40LzQt9Cw0L/Rg9GB0LrQsCDRgtC10LrRg9GJ0LjQudGP0LfRi9C6INGC0LXQutGD0YnQuNC50Y/Qt9GL0LrRgdC40YHRgtC10LzRiyDRgtC40L8g0YLQuNC/0LfQvdGHINGC0YDQsNC90LfQsNC60YbQuNGP0LDQutGC0LjQstC90LAg0YLRgNC10LMg0YPQtNCw0LvQuNGC0YzQtNCw0L3QvdGL0LXQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfRg9C00LDQu9C40YLRjNC40LfQstGA0LXQvNC10L3QvdC+0LPQvtGF0YDQsNC90LjQu9C40YnQsCDRg9C00LDQu9C40YLRjNC+0LHRitC10LrRgtGLINGD0LTQsNC70LjRgtGM0YTQsNC50LvRiyDRg9C90LjQstC10YDRgdCw0LvRjNC90L7QtdCy0YDQtdC80Y8g0YPRgdGC0LDQvdC+0LLQuNGC0YzQsdC10LfQvtC/0LDRgdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINGD0YHRgtCw0L3QvtCy0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDRg9GB0YLQsNC90L7QstC40YLRjNCy0L3QtdGI0L3RjtGO0LrQvtC80L/QvtC90LXQvdGC0YMgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCy0YDQtdC80Y/Qt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L/Rj9GJ0LXQs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C+0LbQuNC00LDQvdC40Y/QsdC70L7QutC40YDQvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINGD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60YHQuNGB0YLQtdC80Ysg0YPRgdGC0LDQvdC+0LLQuNGC0YzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRg9GB0YLQsNC90L7QstC40YLRjNC60YDQsNGC0LrQuNC50LfQsNCz0L7Qu9C+0LLQvtC60L/RgNC40LvQvtC20LXQvdC40Y8gJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC80LjQvdC40LzQsNC70YzQvdGD0Y7QtNC70LjQvdGD0L/QsNGA0L7Qu9C10LnQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDRg9GB0YLQsNC90L7QstC40YLRjNC80L7QvdC+0L/QvtC70YzQvdGL0LnRgNC10LbQuNC8INGD0YHRgtCw0L3QvtCy0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40LrQu9C40LXQvdGC0LDQu9C40YbQtdC90LfQuNGA0L7QstCw0L3QuNGPICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGD0YHRgtCw0L3QvtCy0LjRgtGM0L7RgtC60LvRjtGH0LXQvdC40LXQsdC10LfQvtC/0LDRgdC90L7Qs9C+0YDQtdC20LjQvNCwICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQv9Cw0YDQsNC80LXRgtGA0YvRhNGD0L3QutGG0LjQvtC90LDQu9GM0L3Ri9GF0L7Qv9GG0LjQudC40L3RgtC10YDRhNC10LnRgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0L/RgNC40LLQuNC70LXQs9C40YDQvtCy0LDQvdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC/0YDQvtCy0LXRgNC60YPRgdC70L7QttC90L7RgdGC0LjQv9Cw0YDQvtC70LXQudC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INGD0YHRgtCw0L3QvtCy0LjRgtGM0YDQsNGB0YjQuNGA0LXQvdC40LXRgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5ICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgNCw0YHRiNC40YDQtdC90LjQtdGA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjQtdGB0LLQvdC10YjQvdC40LzQuNGB0YLQvtGH0L3QuNC60L7QvNC00LDQvdC90YvRhSDRg9GB0YLQsNC90L7QstC40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINGD0YHRgtCw0L3QvtCy0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDRg9GB0YLQsNC90L7QstC40YLRjNGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAgJyArXG4gICfRhNC+0YDQvNCw0YIg0YbQtdC7INGH0LDRgSDRh9Cw0YHQvtCy0L7QudC/0L7Rj9GBINGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAg0YfQuNGB0LvQviDRh9C40YHQu9C+0L/RgNC+0L/QuNGB0YzRjiDRjdGC0L7QsNC00YDQtdGB0LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAgJztcblxuICAvLyB2OCDRgdCy0L7QudGB0YLQstCwINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfcHJvcGVydHkgPVxuICAnd3PRgdGB0YvQu9C60Lgg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INCx0LjQsdC70LjQvtGC0LXQutCw0LzQsNC60LXRgtC+0LLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCx0LjQsdC70LjQvtGC0LXQutCw0YHRgtC40LvQtdC5INCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0YsgJyArXG4gICfQstC90LXRiNC90LjQtdC40YHRgtC+0YfQvdC40LrQuNC00LDQvdC90YvRhSDQstC90LXRiNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuCDQstC90LXRiNC90LjQtdC+0YLRh9C10YLRiyDQstGB0YLRgNC+0LXQvdC90YvQtdC/0L7QutGD0L/QutC4INCz0LvQsNCy0L3Ri9C50LjQvdGC0LXRgNGE0LXQudGBINCz0LvQsNCy0L3Ri9C50YHRgtC40LvRjCAnICtcbiAgJ9C00L7QutGD0LzQtdC90YLRiyDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0LXRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC20YPRgNC90LDQu9GL0LTQvtC60YPQvNC10L3RgtC+0LIg0LfQsNC00LDRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC40L3RgtC10YDQvdC10YLRgdC+0LXQtNC40L3QtdC90LjQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LDQsdC+0YfQtdC50LTQsNGC0YsgJyArXG4gICfQuNGB0YLQvtGA0LjRj9GA0LDQsdC+0YLRi9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQutC+0L3RgdGC0LDQvdGC0Ysg0LrRgNC40YLQtdGA0LjQuNC+0YLQsdC+0YDQsCDQvNC10YLQsNC00LDQvdC90YvQtSDQvtCx0YDQsNCx0L7RgtC60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGA0LXQutC70LDQvNGLINC+0YLQv9GA0LDQstC60LDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YXRg9Cy0LXQtNC+0LzQu9C10L3QuNC5ICcgK1xuICAn0L7RgtGH0LXRgtGLINC/0LDQvdC10LvRjNC30LDQtNCw0YfQvtGBINC/0LDRgNCw0LzQtdGC0YDQt9Cw0L/Rg9GB0LrQsCDQv9Cw0YDQsNC80LXRgtGA0YvRgdC10LDQvdGB0LAg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPINC/0LvQsNC90YvQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0L/Qu9Cw0L3Ri9Cy0LjQtNC+0LLRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiAnICtcbiAgJ9C/0LvQsNC90YvQvtCx0LzQtdC90LAg0L/Qu9Cw0L3Ri9GB0YfQtdGC0L7QsiDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQuiDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4INC/0YDQvtCy0LXRgNC60LDQstGB0YLRgNC+0LXQvdC90YvRhdC/0L7QutGD0L/QvtC6ICcgK1xuICAn0YDQsNCx0L7Rh9Cw0Y/QtNCw0YLQsCDRgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgNC10LPQuNGB0YLRgNGL0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDRgNC10LPQuNGB0YLRgNGL0L3QsNC60L7Qv9C70LXQvdC40Y8g0YDQtdCz0LjRgdGC0YDRi9GA0LDRgdGH0LXRgtCwINGA0LXQs9C40YHRgtGA0YvRgdCy0LXQtNC10L3QuNC5ICcgK1xuICAn0YDQtdCz0LvQsNC80LXQvdGC0L3Ri9C10LfQsNC00LDQvdC40Y8g0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byDRgdC/0YDQsNCy0L7Rh9C90LjQutC4INGB0YDQtdC00YHRgtCy0LDQs9C10L7Qv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjyDRgdGA0LXQtNGB0YLQstCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGB0YDQtdC00YHRgtCy0LDQvNGD0LvRjNGC0LjQvNC10LTQuNCwICcgK1xuICAn0YHRgNC10LTRgdGC0LLQsNC+0YLQvtCx0YDQsNC20LXQvdC40Y/RgNC10LrQu9Cw0LzRiyDRgdGA0LXQtNGB0YLQstCw0L/QvtGH0YLRiyDRgdGA0LXQtNGB0YLQstCw0YLQtdC70LXRhNC+0L3QuNC4INGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQu9C+0LLRi9C10L/QvtGC0L7QutC4INGE0L7QvdC+0LLRi9C10LfQsNC00LDQvdC40Y8g0YXRgNCw0L3QuNC70LjRidCw0L3QsNGB0YLRgNC+0LXQuiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdCy0LDRgNC40LDQvdGC0L7QstC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdC90LDRgdGC0YDQvtC10LrQtNCw0L3QvdGL0YXRhNC+0YDQvCDRhdGA0LDQvdC40LvQuNGJ0LXQvtCx0YnQuNGF0L3QsNGB0YLRgNC+0LXQuiDRhdGA0LDQvdC40LvQuNGJ0LXQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhdC90LDRgdGC0YDQvtC10LrQtNC40L3QsNC80LjRh9C10YHQutC40YXRgdC/0LjRgdC60L7QsiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQuNGF0L3QsNGB0YLRgNC+0LXQutC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdGB0LjRgdGC0LXQvNC90YvRhdC90LDRgdGC0YDQvtC10LogJztcblxuICAvLyBidWlsdF9pbiA6INCy0YHRgtGA0L7QtdC90L3Ri9C1INC40LvQuCDQsdC40LHQu9C40L7RgtC10YfQvdGL0LUg0L7QsdGK0LXQutGC0YsgKNC60L7QvdGB0YLQsNC90YLRiywg0LrQu9Cw0YHRgdGLLCDRhNGD0L3QutGG0LjQuClcbiAgdmFyIEJVSUxUSU4gPVxuICB2N19zeXN0ZW1fY29uc3RhbnRzICtcbiAgdjdfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyArIHY4X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgK1xuICB2OF9nbG9iYWxfY29udGV4dF9wcm9wZXJ0eTtcbiAgXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQvdCw0LHQvtGA0Ysg0LfQvdCw0YfQtdC90LjQuSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9zZXRzX29mX3ZhbHVlcyA9XG4gICd3ZWLRhtCy0LXRgtCwIHdpbmRvd3PRhtCy0LXRgtCwIHdpbmRvd3PRiNGA0LjRhNGC0Ysg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INGA0LDQvNC60LjRgdGC0LjQu9GPINGB0LjQvNCy0L7Qu9GLINGG0LLQtdGC0LDRgdGC0LjQu9GPINGI0YDQuNGE0YLRi9GB0YLQuNC70Y8gJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LjQvdGC0LXRgNGE0LXQudGB0L3Ri9C1ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSA9XG4gICfQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC10YHQvtGF0YDQsNC90LXQvdC40LXQtNCw0L3QvdGL0YXRhNC+0YDQvNGL0LLQvdCw0YHRgtGA0L7QudC60LDRhSDQsNCy0YLQvtC90YPQvNC10YDQsNGG0LjRj9Cy0YTQvtGA0LzQtSDQsNCy0YLQvtGA0LDQt9C00LLQuNC20LXQvdC40LXRgdC10YDQuNC5ICcgK1xuICAn0LDQvdC40LzQsNGG0LjRj9C00LjQsNCz0YDQsNC80LzRiyDQstCw0YDQuNCw0L3RgtCy0YvRgNCw0LLQvdC40LLQsNC90LjRj9GN0LvQtdC80LXQvdGC0L7QstC40LfQsNCz0L7Qu9C+0LLQutC+0LIg0LLQsNGA0LjQsNC90YLRg9C/0YDQsNCy0LvQtdC90LjRj9Cy0YvRgdC+0YLQvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfQstC10YDRgtC40LrQsNC70YzQvdCw0Y/Qv9GA0L7QutGA0YPRgtC60LDRhNC+0YDQvNGLINCy0LXRgNGC0LjQutCw0LvRjNC90L7QtdC/0L7Qu9C+0LbQtdC90LjQtSDQstC10YDRgtC40LrQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LXRjdC70LXQvNC10L3RgtCwINCy0LjQtNCz0YDRg9C/0L/Ri9GE0L7RgNC80YsgJyArXG4gICfQstC40LTQtNC10LrQvtGA0LDRhtC40LjRhNC+0YDQvNGLINCy0LjQtNC00L7Qv9C+0LvQvdC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0LLQuNC00LjQt9C80LXQvdC10L3QuNGP0LTQsNC90L3Ri9GFINCy0LjQtNC60L3QvtC/0LrQuNGE0L7RgNC80Ysg0LLQuNC00L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Y8gJyArXG4gICfQstC40LTQv9C+0LTQv9C40YHQtdC50LrQtNC40LDQs9GA0LDQvNC80LUg0LLQuNC00L/QvtC70Y/RhNC+0YDQvNGLINCy0LjQtNGE0LvQsNC20LrQsCDQstC70LjRj9C90LjQtdGA0LDQt9C80LXRgNCw0L3QsNC/0YPQt9GL0YDQtdC60LTQuNCw0LPRgNCw0LzQvNGLINCz0L7RgNC40LfQvtC90YLQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LUgJyArXG4gICfQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC10Y3Qu9C10LzQtdC90YLQsCDQs9GA0YPQv9C/0LjRgNC+0LLQutCw0LrQvtC70L7QvdC+0Log0LPRgNGD0L/Qv9C40YDQvtCy0LrQsNC/0L7QtNGH0LjQvdC10L3QvdGL0YXRjdC70LXQvNC10L3RgtC+0LLRhNC+0YDQvNGLICcgK1xuICAn0LPRgNGD0L/Qv9GL0LjRjdC70LXQvNC10L3RgtGLINC00LXQudGB0YLQstC40LXQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LnRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQtNC+0L/Rg9GB0YLQuNC80YvQtdC00LXQudGB0YLQstC40Y/Qv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPICcgK1xuICAn0LjQvdGC0LXRgNCy0LDQu9C80LXQttC00YPRjdC70LXQvNC10L3RgtCw0LzQuNGE0L7RgNC80Ysg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQstGL0LLQvtC00LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LvQvtGB0YvQv9GA0L7QutGA0YPRgtC60LggJyArXG4gICfQuNGB0L/QvtC70YzQt9GD0LXQvNC+0LXQt9C90LDRh9C10L3QuNC10YLQvtGH0LrQuNCx0LjRgNC20LXQstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0LjRgdGC0L7RgNC40Y/QstGL0LHQvtGA0LDQv9GA0LjQstCy0L7QtNC1INC40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNC50L7RgdC40YLQvtGH0LXQutC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9C40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNGP0YDQsNC30LzQtdGA0LDQv9GD0LfRi9GA0YzQutCw0LTQuNCw0LPRgNCw0LzQvNGLINC60LDRgtC10LPQvtGA0LjRj9Cz0YDRg9C/0L/Ri9C60L7QvNCw0L3QtCDQvNCw0LrRgdC40LzRg9C80YHQtdGA0LjQuSDQvdCw0YfQsNC70YzQvdC+0LXQvtGC0L7QsdGA0LDQttC10L3QuNC10LTQtdGA0LXQstCwICcgK1xuICAn0L3QsNGH0LDQu9GM0L3QvtC10L7RgtC+0LHRgNCw0LbQtdC90LjQtdGB0L/QuNGB0LrQsCDQvtCx0L3QvtCy0LvQtdC90LjQtdGC0LXQutGB0YLQsNGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0L7RgNC40LXQvdGC0LDRhtC40Y/QtNC10L3QtNGA0L7Qs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/QtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQvtGA0LjQtdC90YLQsNGG0LjRj9C80LXRgtC+0LrQtNC40LDQs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/QvNC10YLQvtC60YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/RjdC70LXQvNC10L3RgtCw0YTQvtGA0LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQtNC40LDQs9GA0LDQvNC80LUgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQu9C10LPQtdC90LTQtdC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LPRgNGD0L/Qv9GL0LrQvdC+0L/QvtC6INC+0YLQvtCx0YDQsNC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC30L3QsNGH0LXQvdC40LnRgdCy0L7QtNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LfQvdCw0YfQtdC90LjRj9C40LfQvNC10YDQuNGC0LXQu9GM0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC40L3RgtC10YDQstCw0LvQsNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC60L3QvtC/0LrQuCDQvtGC0L7QsdGA0LDQttC10L3QuNC10LrQvdC+0L/QutC40LLRi9Cx0L7RgNCwINC+0YLQvtCx0YDQsNC20LXQvdC40LXQvtCx0YHRg9C20LTQtdC90LjQudGE0L7RgNC80YsgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10L7QsdGL0YfQvdC+0LnQs9GA0YPQv9C/0Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9GF0LfQvdCw0YfQtdC90LjQudC/0YPQt9GL0YDRjNC60L7QstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNC/0L7QuNGB0LrQsCAnICtcbiAgJ9C+0YLQvtCx0YDQsNC20LXQvdC40LXQv9C+0LTRgdC60LDQt9C60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y/Qv9GA0LjRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC4INC+0YLQvtCx0YDQsNC20LXQvdC40LXRgNCw0LfQvNC10YLQutC40L/QvtC70L7RgdGL0YDQtdCz0YPQu9C40YDQvtCy0LDQvdC40Y8gJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10YHRgtGA0LDQvdC40YbRhNC+0YDQvNGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXRgtCw0LHQu9C40YbRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YLQtdC60YHRgtCw0LfQvdCw0YfQtdC90LjRj9C00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10YPQv9GA0LDQstC70LXQvdC40Y/QvtCx0YvRh9C90L7QudCz0YDRg9C/0L/RiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YTQuNCz0YPRgNGL0LrQvdC+0L/QutC4INC/0LDQu9C40YLRgNCw0YbQstC10YLQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINC/0L7QstC10LTQtdC90LjQtdC+0LHRi9GH0L3QvtC50LPRgNGD0L/Qv9GLICcgK1xuICAn0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNC00LXQvdC00YDQvtCz0YDQsNC80LzRiyDQv9C+0LTQtNC10YDQttC60LDQvNCw0YHRiNGC0LDQsdCw0LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCDQv9C+0LTQtNC10YDQttC60LDQvNCw0YHRiNGC0LDQsdCw0YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQv9C+0LjRgdC60LLRgtCw0LHQu9C40YbQtdC/0YDQuNCy0LLQvtC00LUg0L/QvtC70L7QttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQsNGA0YLQuNC90LrQuNC60L3QvtC/0LrQuNGE0L7RgNC80YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQutCw0YDRgtC40L3QutC40Y3Qu9C10LzQtdC90YLQsNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINC/0L7Qu9C+0LbQtdC90LjQtdC60L7QvNCw0L3QtNC90L7QudC/0LDQvdC10LvQuNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQvtC80LDQvdC00L3QvtC50L/QsNC90LXQu9C40Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQvtC/0L7RgNC90L7QudGC0L7Rh9C60LjQvtGC0YDQuNGB0L7QstC60Lgg0L/QvtC70L7QttC10L3QuNC10L/QvtC00L/QuNGB0LXQudC60LTQuNCw0LPRgNCw0LzQvNC1INC/0L7Qu9C+0LbQtdC90LjQtdC/0L7QtNC/0LjRgdC10LnRiNC60LDQu9GL0LfQvdCw0YfQtdC90LjQudC40LfQvNC10YDQuNGC0LXQu9GM0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10YHQvtGB0YLQvtGP0L3QuNGP0L/RgNC+0YHQvNC+0YLRgNCwINC/0L7Qu9C+0LbQtdC90LjQtdGB0YLRgNC+0LrQuNC/0L7QuNGB0LrQsCDQv9C+0LvQvtC20LXQvdC40LXRgtC10LrRgdGC0LDRgdC+0LXQtNC40L3QuNGC0LXQu9GM0L3QvtC50LvQuNC90LjQuCDQv9C+0LvQvtC20LXQvdC40LXRg9C/0YDQsNCy0LvQtdC90LjRj9C/0L7QuNGB0LrQvtC8ICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4INC/0L7RgNGP0LTQvtC60L7RgtC+0LHRgNCw0LbQtdC90LjRj9GC0L7Rh9C10LrQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC50LPQuNGB0YLQvtCz0YDQsNC80LzRiyDQv9C+0YDRj9C00L7QutGB0LXRgNC40LnQstC70LXQs9C10L3QtNC10LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YDQsNC30LzQtdGA0LrQsNGA0YLQuNC90LrQuCDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLINGA0LDRgdGC0Y/Qs9C40LLQsNC90LjQtdC/0L7QstC10YDRgtC40LrQsNC70LjQtNC40LDQs9GA0LDQvNC80YvQs9Cw0L3RgtCwICcgK1xuICAn0YDQtdC20LjQvNCw0LLRgtC+0L7RgtC+0LHRgNCw0LbQtdC90LjRj9GB0L7RgdGC0L7Rj9C90LjRjyDRgNC10LbQuNC80LLQstC+0LTQsNGB0YLRgNC+0LrRgtCw0LHQu9C40YbRiyDRgNC10LbQuNC80LLRi9Cx0L7RgNCw0L3QtdC30LDQv9C+0LvQvdC10L3QvdC+0LPQviDRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0LTQsNGC0YsgJyArXG4gICfRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0YHRgtGA0L7QutC40YLQsNCx0LvQuNGG0Ysg0YDQtdC20LjQvNCy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRhtGLINGA0LXQttC40LzQuNC30LzQtdC90LXQvdC40Y/RgNCw0LfQvNC10YDQsCDRgNC10LbQuNC80LjQt9C80LXQvdC10L3QuNGP0YHQstGP0LfQsNC90L3QvtCz0L7Qt9C90LDRh9C10L3QuNGPICcgK1xuICAn0YDQtdC20LjQvNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LTQuNCw0LvQvtCz0LDQv9C10YfQsNGC0Lgg0YDQtdC20LjQvNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0L/QsNGA0LDQvNC10YLRgNCw0LrQvtC80LDQvdC00Ysg0YDQtdC20LjQvNC80LDRgdGI0YLQsNCx0LjRgNC+0LLQsNC90LjRj9C/0YDQvtGB0LzQvtGC0YDQsCAnICtcbiAgJ9GA0LXQttC40LzQvtGB0L3QvtCy0L3QvtCz0L7QvtC60L3QsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgNC10LbQuNC80L7RgtC60YDRi9GC0LjRj9C+0LrQvdCw0YTQvtGA0LzRiyDRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cy0YvQtNC10LvQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50YHQtdGA0LjQuCDRgNC10LbQuNC80L7RgtGA0LjRgdC+0LLQutC40YHQtdGC0LrQuNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLICcgK1xuICAn0YDQtdC20LjQvNC/0L7Qu9GD0L/RgNC+0LfRgNCw0YfQvdC+0YHRgtC40LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzQv9GA0L7QsdC10LvQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzRgNCw0LfQvNC10YnQtdC90LjRj9C90LDRgdGC0YDQsNC90LjRhtC1INGA0LXQttC40LzRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0LrQvtC70L7QvdC60LggJyArXG4gICfRgNC10LbQuNC80YHQs9C70LDQttC40LLQsNC90LjRj9C00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80YHQs9C70LDQttC40LLQsNC90LjRj9C40L3QtNC40LrQsNGC0L7RgNCwINGA0LXQttC40LzRgdC/0LjRgdC60LDQt9Cw0LTQsNGHINGB0LrQstC+0LfQvdC+0LXQstGL0YDQsNCy0L3QuNCy0LDQvdC40LUgJyArXG4gICfRgdC+0YXRgNCw0L3QtdC90LjQtdC00LDQvdC90YvRhdGE0L7RgNC80YvQstC90LDRgdGC0YDQvtC50LrQsNGFINGB0L/QvtGB0L7QsdC30LDQv9C+0LvQvdC10L3QuNGP0YLQtdC60YHRgtCw0LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GB0L/QvtGB0L7QsdC+0L/RgNC10LTQtdC70LXQvdC40Y/QvtCz0YDQsNC90LjRh9C40LLQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGP0LTQuNCw0LPRgNCw0LzQvNGLINGB0YLQsNC90LTQsNGA0YLQvdCw0Y/Qs9GA0YPQv9C/0LDQutC+0LzQsNC90LQg0YHRgtCw0L3QtNCw0YDRgtC90L7QtdC+0YTQvtGA0LzQu9C10L3QuNC1ICcgK1xuICAn0YHRgtCw0YLRg9GB0L7Qv9C+0LLQtdGJ0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YHRgtC40LvRjNGB0YLRgNC10LvQutC4INGC0LjQv9Cw0L/Qv9GA0L7QutGB0LjQvNCw0YbQuNC40LvQuNC90LjQuNGC0YDQtdC90LTQsNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgtC40L/QtdC00LjQvdC40YbRi9GI0LrQsNC70YvQstGA0LXQvNC10L3QuCDRgtC40L/QuNC80L/QvtGA0YLQsNGB0LXRgNC40LnRgdC70L7Rj9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C70LjQvdC40LjQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/Qu9C40L3QuNC40LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0LzQsNGA0LrQtdGA0LDQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/QvNCw0YDQutC10YDQsNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QvtCx0LvQsNGB0YLQuNC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0YLQuNC/0L7RgNCz0LDQvdC40LfQsNGG0LjQuNC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhdCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgdC10YDQuNC40YHQu9C+0Y/Qs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyAnICtcbiAgJ9GC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgtC+0YfQtdGH0L3QvtCz0L7QvtCx0YrQtdC60YLQsNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RiNC60LDQu9GL0Y3Qu9C10LzQtdC90YLQsNC70LXQs9C10L3QtNGL0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80YsgJyArXG4gICfRgtC40L/Qv9C+0LjRgdC60LDQvtCx0YrQtdC60YLQvtCy0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0L/RgNC+0LXQutGG0LjQuNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjQt9C80LXRgNC10L3QuNC5ICcgK1xuICAn0YLQuNC/0YDQsNC30LzQtdGJ0LXQvdC40Y/RgNC10LrQstC40LfQuNGC0L7QstC40LfQvNC10YDQtdC90LjQuSDRgtC40L/RgNCw0LzQutC40Y3Qu9C10LzQtdC90YLQsNGD0L/RgNCw0LLQu9C10L3QuNGPINGC0LjQv9GB0LLQvtC00L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0YHQstGP0LfQuNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0YLQuNC/0YHQvtC10LTQuNC90LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50L/QvtGB0LXRgNC40Y/QvNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GC0L7Rh9C10LrQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgtC40L/RgdC+0LXQtNC40L3QuNGC0LXQu9GM0L3QvtC50LvQuNC90LjQuCDRgtC40L/RgdGC0L7RgNC+0L3Ri9GN0LvQtdC80LXQvdGC0LDQs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/RhNC+0YDQvNGL0L7RgtGH0LXRgtCwINGC0LjQv9GI0LrQsNC70YvRgNCw0LTQsNGA0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YTQsNC60YLQvtGA0LvQuNC90LjQuNGC0YDQtdC90LTQsNC00LjQsNCz0YDQsNC80LzRiyDRhNC40LPRg9GA0LDQutC90L7Qv9C60Lgg0YTQuNCz0YPRgNGL0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YTQuNC60YHQsNGG0LjRj9Cy0YLQsNCx0LvQuNGG0LUg0YTQvtGA0LzQsNGC0LTQvdGP0YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4ICcgK1xuICAn0YTQvtGA0LzQsNGC0LrQsNGA0YLQuNC90LrQuCDRiNC40YDQuNC90LDQv9C+0LTRh9C40L3QtdC90L3Ri9GF0Y3Qu9C10LzQtdC90YLQvtCy0YTQvtGA0LzRiyAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC/0YDQuNC60LvQsNC00L3Ri9GFINC+0LHRitC10LrRgtC+0LIgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb2JqZWN0c19wcm9wZXJ0aWVzID1cbiAgJ9Cy0LjQtNC00LLQuNC20LXQvdC40Y/QsdGD0YXQs9Cw0LvRgtC10YDQuNC4INCy0LjQtNC00LLQuNC20LXQvdC40Y/QvdCw0LrQvtC/0LvQtdC90LjRjyDQstC40LTQv9C10YDQuNC+0LTQsNGA0LXQs9C40YHRgtGA0LDRgNCw0YHRh9C10YLQsCDQstC40LTRgdGH0LXRgtCwINCy0LjQtNGC0L7Rh9C60LjQvNCw0YDRiNGA0YPRgtCw0LHQuNC30L3QtdGB0L/RgNC+0YbQtdGB0YHQsCAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCz0YDRg9C/0L/QuNGN0LvQtdC80LXQvdGC0L7QsiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQttC40LzQsNC/0YDQvtCy0LXQtNC10L3QuNGPICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdGA0LXQt9CwINC/0LXRgNC40L7QtNC40YfQvdC+0YHRgtGM0LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDRgNC10LbQuNC80LDQstGC0L7QstGA0LXQvNGPINGA0LXQttC40LzQt9Cw0L/QuNGB0LjQtNC+0LrRg9C80LXQvdGC0LAg0YDQtdC20LjQvNC/0YDQvtCy0LXQtNC10L3QuNGP0LTQvtC60YPQvNC10L3RgtCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0LvQsNC90Ysg0L7QsdC80LXQvdCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2V4Y2hhbmdlX3BsYW5zID1cbiAgJ9Cw0LLRgtC+0YDQtdCz0LjRgdGC0YDQsNGG0LjRj9C40LfQvNC10L3QtdC90LjQuSDQtNC+0L/Rg9GB0YLQuNC80YvQudC90L7QvNC10YDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7RgtC/0YDQsNCy0LrQsNGN0LvQtdC80LXQvdGC0LDQtNCw0L3QvdGL0YUg0L/QvtC70YPRh9C10L3QuNC10Y3Qu9C10LzQtdC90YLQsNC00LDQvdC90YvRhSAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgtCw0LHQu9C40YfQvdGL0Lkg0LTQvtC60YPQvNC10L3RgiA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc190YWJ1bGFyX2RvY3VtZW50ID1cbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINC+0YDQuNC10L3RgtCw0YbQuNGP0YHRgtGA0LDQvdC40YbRiyDQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLQutC+0LvQvtC90L7QutGB0LLQvtC00L3QvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLRgdGC0YDQvtC60YHQstC+0LTQvdC+0LnRgtCw0LHQu9C40YbRiyDQv9C+0LvQvtC20LXQvdC40LXRgtC10LrRgdGC0LDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L7QutCw0YDRgtC40L3QutC4INGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC30LDQs9C+0LvQvtCy0LrQsNCz0YDRg9C/0L/QuNGA0L7QstC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GB0L/QvtGB0L7QsdGH0YLQtdC90LjRj9C30L3QsNGH0LXQvdC40LnRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QtNCy0YPRgdGC0L7RgNC+0L3QvdC10LnQv9C10YfQsNGC0Lgg0YLQuNC/0LfQsNC/0L7Qu9C90LXQvdC40Y/QvtCx0LvQsNGB0YLQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwICcgK1xuICAn0YLQuNC/0LrRg9GA0YHQvtGA0L7QstGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C70LjQvdC40LjRgNC40YHRg9C90LrQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C70LjQvdC40LjRj9GH0LXQudC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GC0LjQv9C90LDQv9GA0LDQstC70LXQvdC40Y/Qv9C10YDQtdGF0L7QtNCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/Qu9C40L3QuNC50YHQstC+0LTQvdC+0LnRgtCw0LHQu9C40YbRiyAnICtcbiAgJ9GC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0YLQtdC60YHRgtCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YDQuNGB0YPQvdC60LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/RgdC80LXRidC10L3QuNGP0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJyArXG4gICfRgtC40L/Rg9C30L7RgNCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YTQsNC50LvQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0L7Rh9C90L7RgdGC0YzQv9C10YfQsNGC0Lgg0YfQtdGA0LXQtNC+0LLQsNC90LjQtdGA0LDRgdC/0L7Qu9C+0LbQtdC90LjRj9GB0YLRgNCw0L3QuNGGICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0LvQsNC90LjRgNC+0LLRidC40LogPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfc2hlZHVsZXIgPVxuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdCy0YDQtdC80LXQvdC40Y3Qu9C10LzQtdC90YLQvtCy0L/Qu9Cw0L3QuNGA0L7QstGJ0LjQutCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90YvQuSDQtNC+0LrRg9C80LXQvdGCID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2Zvcm1hdHRlZF9kb2N1bWVudCA9XG4gICfRgtC40L/RhNCw0LnQu9Cw0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LfQsNC/0YDQvtGBID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3F1ZXJ5ID1cbiAgJ9C+0LHRhdC+0LTRgNC10LfRg9C70YzRgtCw0YLQsNC30LDQv9GA0L7RgdCwINGC0LjQv9C30LDQv9C40YHQuNC30LDQv9GA0L7RgdCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7RgdGC0YDQvtC40YLQtdC70Ywg0L7RgtGH0LXRgtCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3JlcG9ydF9idWlsZGVyID1cbiAgJ9Cy0LjQtNC30LDQv9C+0LvQvdC10L3QuNGP0YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC/0L7RgdGC0YDQvtC40YLQtdC70Y/QvtGC0YfQtdGC0LAg0YLQuNC/0LTQvtCx0LDQstC70LXQvdC40Y/Qv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRgtC40L/QuNC30LzQtdGA0LXQvdC40Y/Qv9C+0YHRgtGA0L7QuNGC0LXQu9GP0L7RgtGH0LXRgtCwINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjRgtC+0LPQvtCyICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQsdC+0YLQsCDRgSDRhNCw0LnQu9Cw0LzQuCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19maWxlcyA9XG4gICfQtNC+0YHRgtGD0L/QutGE0LDQudC70YMg0YDQtdC20LjQvNC00LjQsNC70L7Qs9Cw0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDRgNC10LbQuNC80L7RgtC60YDRi9GC0LjRj9GE0LDQudC70LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0L/QvtGB0YLRgNC+0LjRgtC10LvRjCDQt9Cw0L/RgNC+0YHQsCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19xdWVyeV9idWlsZGVyID1cbiAgJ9GC0LjQv9C40LfQvNC10YDQtdC90LjRj9C/0L7RgdGC0YDQvtC40YLQtdC70Y/Qt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQsNC90LDQu9C40Lcg0LTQsNC90L3Ri9GFID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2RhdGFfYW5hbHlzaXMgPVxuICAn0LLQuNC00LTQsNC90L3Ri9GF0LDQvdCw0LvQuNC30LAg0LzQtdGC0L7QtNC60LvQsNGB0YLQtdGA0LjQt9Cw0YbQuNC4INGC0LjQv9C10LTQuNC90LjRhtGL0LjQvdGC0LXRgNCy0LDQu9Cw0LLRgNC10LzQtdC90LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/Qt9Cw0L/QvtC70L3QtdC90LjRj9GC0LDQsdC70LjRhtGL0YDQtdC30YPQu9GM0YLQsNGC0LDQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YfQuNGB0LvQvtCy0YvRhdC30L3QsNGH0LXQvdC40LnQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/QuNGB0YLQvtGH0L3QuNC60LDQtNCw0L3QvdGL0YXQv9C+0LjRgdC60LDQsNGB0YHQvtGG0LjQsNGG0LjQuSDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0LTQtdGA0LXQstC+0YDQtdGI0LXQvdC40LkgJyArXG4gICfRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0LrQu9Cw0YHRgtC10YDQuNC30LDRhtC40Y8g0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC+0LHRidCw0Y/RgdGC0LDRgtC40YHRgtC40LrQsCDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0L/QvtC40YHQutCw0YHRgdC+0YbQuNCw0YbQuNC5ICcgK1xuICAn0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC/0L7QuNGB0LrQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LXQuSDRgtC40L/QutC+0LvQvtC90LrQuNC80L7QtNC10LvQuNC/0YDQvtCz0L3QvtC30LAg0YLQuNC/0LzQtdGA0YvRgNCw0YHRgdGC0L7Rj9C90LjRj9Cw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0L7RgtGB0LXRh9C10L3QuNGP0L/RgNCw0LLQuNC70LDRgdGB0L7RhtC40LDRhtC40Lgg0YLQuNC/0L/QvtC70Y/QsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/RgdGC0LDQvdC00LDRgNGC0LjQt9Cw0YbQuNC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YPQv9C+0YDRj9C00L7Rh9C40LLQsNC90LjRj9C/0YDQsNCy0LjQu9Cw0YHRgdC+0YbQuNCw0YbQuNC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfRgtC40L/Rg9C/0L7RgNGP0LTQvtGH0LjQstCw0L3QuNGP0YjQsNCx0LvQvtC90L7QstC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC50LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YPQv9GA0L7RidC10L3QuNGP0LTQtdGA0LXQstCw0YDQtdGI0LXQvdC40LkgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0geG1sLCBqc29uLCB4cywgZG9tLCB4ZHRvLCB3ZWIt0YHQtdGA0LLQuNGB0YsgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfeG1sX2pzb25feHNfZG9tX3hkdG9fd3MgPVxuICAnd3PQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QsNGA0LDQvNC10YLRgNCwINCy0LDRgNC40LDQvdGCeHBhdGh4cyDQstCw0YDQuNCw0L3RgtC30LDQv9C40YHQuNC00LDRgtGLanNvbiDQstCw0YDQuNCw0L3RgtC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINCy0LjQtNCz0YDRg9C/0L/Ri9C80L7QtNC10LvQuHhzINCy0LjQtNGE0LDRgdC10YLQsHhkdG8gJyArXG4gICfQtNC10LnRgdGC0LLQuNC10L/QvtGB0YLRgNC+0LjRgtC10LvRj2RvbSDQt9Cw0LLQtdGA0YjQtdC90L3QvtGB0YLRjNC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHQvtGB0YLQsNCy0L3QvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHRhdC10LzRi3hzINC30LDQv9GA0LXRidC10L3QvdGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMgJyArXG4gICfQuNGB0LrQu9GO0YfQtdC90LjRj9Cz0YDRg9C/0L/Qv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0LrQsNGC0LXQs9C+0YDQuNGP0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/QsNGC0YDQuNCx0YPRgtCweHMg0LrQsNGC0LXQs9C+0YDQuNGP0L7Qs9GA0LDQvdC40YfQtdC90LjRj9C40LTQtdC90YLQuNGH0L3QvtGB0YLQuHhzINC60LDRgtC10LPQvtGA0LjRj9C+0LPRgNCw0L3QuNGH0LXQvdC40Y/Qv9GA0L7RgdGC0YDQsNC90YHRgtCy0LjQvNC10L14cyAnICtcbiAgJ9C80LXRgtC+0LTQvdCw0YHQu9C10LTQvtCy0LDQvdC40Y94cyDQvNC+0LTQtdC70YzRgdC+0LTQtdGA0LbQuNC80L7Qs9C+eHMg0L3QsNC30L3QsNGH0LXQvdC40LXRgtC40L/QsHhtbCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0L7QsdGA0LDQsdC+0YLQutCw0L/RgNC+0LHQtdC70YzQvdGL0YXRgdC40LzQstC+0LvQvtCyeHMg0L7QsdGA0LDQsdC+0YLQutCw0YHQvtC00LXRgNC20LjQvNC+0LPQvnhzICcgK1xuICAn0L7Qs9GA0LDQvdC40YfQtdC90LjQtdC30L3QsNGH0LXQvdC40Y94cyDQv9Cw0YDQsNC80LXRgtGA0YvQvtGC0LHQvtGA0LDRg9C30LvQvtCyZG9tINC/0LXRgNC10L3QvtGB0YHRgtGA0L7Qumpzb24g0L/QvtC30LjRhtC40Y/QstC00L7QutGD0LzQtdC90YLQtWRvbSDQv9GA0L7QsdC10LvRjNC90YvQtdGB0LjQvNCy0L7Qu9GLeG1sINGC0LjQv9Cw0YLRgNC40LHRg9GC0LB4bWwg0YLQuNC/0LfQvdCw0YfQtdC90LjRj2pzb24gJyArXG4gICfRgtC40L/QutCw0L3QvtC90LjRh9C10YHQutC+0LPQvnhtbCDRgtC40L/QutC+0LzQv9C+0L3QtdC90YLRi3hzINGC0LjQv9C/0YDQvtCy0LXRgNC60Lh4bWwg0YLQuNC/0YDQtdC30YPQu9GM0YLQsNGC0LBkb214cGF0aCDRgtC40L/Rg9C30LvQsGRvbSDRgtC40L/Rg9C30LvQsHhtbCDRhNC+0YDQvNCweG1sINGE0L7RgNC80LDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRj3hzICcgK1xuICAn0YTQvtGA0LzQsNGC0LTQsNGC0Ytqc29uINGN0LrRgNCw0L3QuNGA0L7QstCw0L3QuNC10YHQuNC80LLQvtC70L7Qsmpzb24gJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0YHQuNGB0YLQtdC80LAg0LrQvtC80L/QvtC90L7QstC60Lgg0LTQsNC90L3Ri9GFID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtID1cbiAgJ9Cy0LjQtNGB0YDQsNCy0L3QtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LXQudGB0YLQstC40LXQvtCx0YDQsNCx0L7RgtC60LjRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L3QsNC/0YDQsNCy0LvQtdC90LjQtdGB0L7RgNGC0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQstC70L7QttC10L3QvdGL0YXRjdC70LXQvNC10L3RgtC+0LLRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC40YLQvtCz0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdCz0YDRg9C/0L/QuNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC/0L7Qu9C10LnQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10L/QvtC70Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXRgNC10LrQstC40LfQuNGC0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cx0YPRhdCz0LDQu9GC0LXRgNGB0LrQvtCz0L7QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cy0YvQstC+0LTQsNGC0LXQutGB0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cz0YDRg9C/0L/Ri9GN0LvQtdC80LXQvdGC0L7QstC+0YLQsdC+0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C30LDQs9C+0LvQvtCy0LrQsNC/0L7Qu9C10LnQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvNCw0LrQtdGC0LDQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LzQsNC60LXRgtCw0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0L/QtdGA0LjQvtC00LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9GC0LXQutGB0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9GB0LLRj9C30LjQvdCw0LHQvtGA0L7QstC00LDQvdC90YvRhdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9GN0LvQtdC80LXQvdGC0LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LvQtdCz0LXQvdC00YvQtNC40LDQs9GA0LDQvNC80YvQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/Qv9GA0LjQvNC10L3QtdC90LjRj9C+0YLQsdC+0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQvtGB0YLQvtGP0L3QuNC10Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGB0L/QvtGB0L7QsdCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNC10LbQuNC80LrQvtC80L/QvtC90L7QstC60LjRgNC10LfRg9C70YzRgtCw0YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC/0LDRgNCw0LzQtdGC0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCw0LLRgtC+0L/QvtC30LjRhtC40Y/RgNC10YHRg9GA0YHQvtCy0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJytcbiAgJ9Cy0LDRgNC40LDQvdGC0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstCy0LTQuNCw0LPRgNCw0LzQvNC10LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YTQuNC60YHQsNGG0LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRg9GB0LvQvtCy0L3QvtCz0L7QvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7Rh9GC0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfZW1haWwgPVxuICAn0LLQsNC20L3QvtGB0YLRjNC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0L7QsdGA0LDQsdC+0YLQutCw0YLQtdC60YHRgtCw0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtCy0LvQvtC20LXQvdC40Y8gJyArXG4gICfRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0L3QtWFzY2lp0YHQuNC80LLQvtC70L7QstC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0YLQuNC/0YLQtdC60YHRgtCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINC/0YDQvtGC0L7QutC+0LvQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLRiyAnICtcbiAgJ9GB0YLQsNGC0YPRgdGA0LDQt9Cx0L7RgNCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC20YPRgNC90LDQuyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgPVxuICAn0YDQtdC20LjQvNGC0YDQsNC90LfQsNC60YbQuNC40LfQsNC/0LjRgdC40LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGB0YLQsNGC0YPRgdGC0YDQsNC90LfQsNC60YbQuNC40LfQsNC/0LjRgdC40LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGD0YDQvtCy0LXQvdGM0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC60YDQuNC/0YLQvtCz0YDQsNGE0LjRjyA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19jcnlwdG9ncmFwaHkgPVxuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGA0LXQttC40LzQstC60LvRjtGH0LXQvdC40Y/RgdC10YDRgtC40YTQuNC60LDRgtC+0LLQutGA0LjQv9GC0L7Qs9GA0LDRhNC40Lgg0YDQtdC20LjQvNC/0YDQvtCy0LXRgNC60LjRgdC10YDRgtC40YTQuNC60LDRgtCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4ICcgK1xuICAn0YLQuNC/0YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIFpJUCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc196aXAgPVxuICAn0LrQvtC00LjRgNC+0LLQutCw0LjQvNC10L3RhNCw0LnQu9C+0LLQsnppcNGE0LDQudC70LUg0LzQtdGC0L7QtNGB0LbQsNGC0LjRj3ppcCDQvNC10YLQvtC00YjQuNGE0YDQvtCy0LDQvdC40Y96aXAg0YDQtdC20LjQvNCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/Qv9GD0YLQtdC50YTQsNC50LvQvtCyemlwINGA0LXQttC40LzQvtCx0YDQsNCx0L7RgtC60LjQv9C+0LTQutCw0YLQsNC70L7Qs9C+0LJ6aXAgJyArXG4gICfRgNC10LbQuNC80YHQvtGF0YDQsNC90LXQvdC40Y/Qv9GD0YLQtdC5emlwINGD0YDQvtCy0LXQvdGM0YHQttCw0YLQuNGPemlwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIFxuICAvLyDQkdC70L7QutC40YDQvtCy0LrQsCDQtNCw0L3QvdGL0YUsINCk0L7QvdC+0LLRi9C1INC30LDQtNCw0L3QuNGPLCDQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdC+0LUg0YLQtdGB0YLQuNGA0L7QstCw0L3QuNC1LFxuICAvLyDQlNC+0YHRgtCw0LLQu9GP0LXQvNGL0LUg0YPQstC10LTQvtC80LvQtdC90LjRjywg0JLRgdGC0YDQvtC10L3QvdGL0LUg0L/QvtC60YPQv9C60LgsINCY0L3RgtC10YDQvdC10YIsINCg0LDQsdC+0YLQsCDRgSDQtNCy0L7QuNGH0L3Ri9C80Lgg0LTQsNC90L3Ri9C80LggPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb3RoZXIgPVxuICAn0LfQstGD0LrQvtCy0L7QtdC+0L/QvtCy0LXRidC10L3QuNC1INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdGF0L7QtNCw0LrRgdGC0YDQvtC60LUg0L/QvtC30LjRhtC40Y/QstC/0L7RgtC+0LrQtSDQv9C+0YDRj9C00L7QutCx0LDQudGC0L7QsiDRgNC10LbQuNC80LHQu9C+0LrQuNGA0L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhSAnICtcbiAgJ9GB0LXRgNCy0LjRgdCy0YHRgtGA0L7QtdC90L3Ri9GF0L/QvtC60YPQv9C+0Log0YHQvtGB0YLQvtGP0L3QuNC10YTQvtC90L7QstC+0LPQvtC30LDQtNCw0L3QuNGPINGC0LjQv9C/0L7QtNC/0LjRgdGH0LjQutCw0LTQvtGB0YLQsNCy0LvRj9C10LzRi9GF0YPQstC10LTQvtC80LvQtdC90LjQuSDRg9GA0L7QstC10L3RjNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LfQsNGJ0LjRidC10L3QvdC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPZnRwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGB0YXQtdC80LAg0LfQsNC/0YDQvtGB0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcmVxdWVzdF9zY2hlbWEgPVxuICAn0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC/0L7RgNGP0LTQutCw0YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQvNC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C60L7QvdGC0YDQvtC70YzQvdC+0LnRgtC+0YfQutC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C+0LHRitC10LTQuNC90LXQvdC40Y/RgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAgJyArXG4gICfRgtC40L/Qv9Cw0YDQsNC80LXRgtGA0LDQtNC+0YHRgtGD0L/QvdC+0LnRgtCw0LHQu9C40YbRi9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC+0LHRitC10LrRgtC+0LIg0LzQtdGC0LDQtNCw0L3QvdGL0YUgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcHJvcGVydGllc19vZl9tZXRhZGF0YV9vYmplY3RzID1cbiAgJ2h0dHDQvNC10YLQvtC0INCw0LLRgtC+0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LDQstGC0L7Qv9GA0LXRhNC40LrRgdC90L7QvNC10YDQsNC30LDQtNCw0YfQuCDQstCw0YDQuNCw0L3RgtCy0YHRgtGA0L7QtdC90L3QvtCz0L7Rj9C30YvQutCwINCy0LjQtNC40LXRgNCw0YDRhdC40Lgg0LLQuNC00YDQtdCz0LjRgdGC0YDQsNC90LDQutC+0L/Qu9C10L3QuNGPICcgK1xuICAn0LLQuNC00YLQsNCx0LvQuNGG0YvQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINC30LDQv9C40YHRjNC00LLQuNC20LXQvdC40LnQv9GA0LjQv9GA0L7QstC10LTQtdC90LjQuCDQt9Cw0L/QvtC70L3QtdC90LjQtdC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC5INC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40LUgJyArXG4gICfQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0LDQt9GL0L/Qu9Cw0L3QsNCy0LjQtNC+0LLRgNCw0YHRh9C10YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0YvRgdGC0YDQvtCz0L7QstGL0LHQvtGA0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LTRh9C40L3QtdC90LjRjyAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0L7Qs9C+0L/QvtC40YHQutCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNC30LTQtdC70Y/QtdC80YvRhdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQutCy0LjQt9C40YLQsCAnICtcbiAgJ9C90LDQt9C90LDRh9C10L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0LfQvdCw0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdC00LDRh9C4INC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0YXQtNCw0L3QvdGL0YUgJyArXG4gICfQvtC/0LXRgNCw0YLQuNCy0L3QvtC10L/RgNC+0LLQtdC00LXQvdC40LUg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LLQuNC00LDRgNCw0YHRh9C10YLQsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQstC40LTQsNGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LfQsNC00LDRh9C4ICcgK1xuICAn0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/Qu9Cw0L3QsNC+0LHQvNC10L3QsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRgdC/0YDQsNCy0L7Rh9C90LjQutCwINC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdGB0YfQtdGC0LAg0L/QtdGA0LXQvNC10YnQtdC90LjQtdCz0YDQsNC90LjRhtGL0L/RgNC40L/RgNC+0LLQtdC00LXQvdC40LggJyArXG4gICfQv9C10YDQuNC+0LTQuNGH0L3QvtGB0YLRjNC90L7QvNC10YDQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzQvdC+0LzQtdGA0LDQtNC+0LrRg9C80LXQvdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YHQstC10LTQtdC90LjQuSAnICtcbiAgJ9C/0L7QstGC0L7RgNC90L7QtdC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LLQvtC30LLRgNCw0YnQsNC10LzRi9GF0LfQvdCw0YfQtdC90LjQuSDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQutC/0YDQuNCy0LLQvtC00LXQv9C+0YHRgtGA0L7QutC1INC/0YDQuNC90LDQtNC70LXQttC90L7RgdGC0YzQvtCx0YrQtdC60YLQsCDQv9GA0L7QstC10LTQtdC90LjQtSAnICtcbiAgJ9GA0LDQt9C00LXQu9C10L3QuNC10LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuNC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwICcrXG4gICfRgNC10LbQuNC80LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40LjQvtCx0YrQtdC60YLQvtCyINGA0LXQttC40LzQt9Cw0L/QuNGB0LjRgNC10LPQuNGB0YLRgNCwINGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C80L7QtNCw0LvRjNC90L7RgdGC0LggJyArXG4gICfRgNC10LbQuNC80LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC40L3RhdGA0L7QvdC90YvRhdCy0YvQt9C+0LLQvtCy0YDQsNGB0YjQuNGA0LXQvdC40LnQv9C70LDRgtGE0L7RgNC80YvQuNCy0L3QtdGI0L3QuNGF0LrQvtC80L/QvtC90LXQvdGCINGA0LXQttC40LzQv9C+0LLRgtC+0YDQvdC+0LPQvtC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YHQtdCw0L3RgdC+0LIgJyArXG4gICfRgNC10LbQuNC80L/QvtC70YPRh9C10L3QuNGP0LTQsNC90L3Ri9GF0LLRi9Cx0L7RgNCw0L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YDQtdC20LjQvNGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGA0LXQttC40LzRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuNC40L3RgtC10YDRhNC10LnRgdCwICcgK1xuICAn0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhdC/0L7Rg9C80L7Qu9GH0LDQvdC40Y4g0YHQtdGA0LjQuNC60L7QtNC+0LLQv9C70LDQvdCw0LLQuNC00L7QstGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6INGB0LXRgNC40LjQutC+0LTQvtCy0L/Qu9Cw0L3QsNGB0YfQtdGC0L7QsiAnICtcbiAgJ9GB0LXRgNC40LjQutC+0LTQvtCy0YHQv9GA0LDQstC+0YfQvdC40LrQsCDRgdC+0LfQtNCw0L3QuNC10L/RgNC40LLQstC+0LTQtSDRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LAg0YHQv9C+0YHQvtCx0L/QvtC40YHQutCw0YHRgtGA0L7QutC40L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YHQv9C+0YHQvtCx0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyAnICtcbiAgJ9GC0LjQv9C00LDQvdC90YvRhdGC0LDQsdC70LjRhtGL0LLQvdC10YjQvdC10LPQvtC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhSDRgtC40L/QutC+0LTQsNC/0LvQsNC90LDQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0YLQuNC/0LrQvtC00LDRgdC/0YDQsNCy0L7Rh9C90LjQutCwINGC0LjQv9C80LDQutC10YLQsCDRgtC40L/QvdC+0LzQtdGA0LDQsdC40LfQvdC10YHQv9GA0L7RhtC10YHRgdCwICcgK1xuICAn0YLQuNC/0L3QvtC80LXRgNCw0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C90L7QvNC10YDQsNC30LDQtNCw0YfQuCDRgtC40L/RhNC+0YDQvNGLINGD0LTQsNC70LXQvdC40LXQtNCy0LjQttC10L3QuNC5ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQt9C90YvQtSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19kaWZmZXJlbnRzID1cbiAgJ9Cy0LDQttC90L7RgdGC0YzQv9GA0L7QsdC70LXQvNGL0L/RgNC40LzQtdC90LXQvdC40Y/RgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQstCw0YDQuNCw0L3RgtC40L3RgtC10YDRhNC10LnRgdCw0LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINCy0LDRgNC40LDQvdGC0LzQsNGB0YjRgtCw0LHQsNGE0L7RgNC80LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPICcgK1xuICAn0LLQsNGA0LjQsNC90YLQvtGB0L3QvtCy0L3QvtCz0L7RiNGA0LjRhNGC0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0LLQsNGA0LjQsNC90YLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7Qv9C10YDQuNC+0LTQsCDQstCw0YDQuNCw0L3RgtGB0YLQsNC90LTQsNGA0YLQvdC+0LnQtNCw0YLRi9C90LDRh9Cw0LvQsCDQstC40LTQs9GA0LDQvdC40YbRiyDQstC40LTQutCw0YDRgtC40L3QutC4ICcgK1xuICAn0LLQuNC00L7RgtC+0LHRgNCw0LbQtdC90LjRj9C/0L7Qu9C90L7RgtC10LrRgdGC0L7QstC+0LPQvtC/0L7QuNGB0LrQsCDQstC40LTRgNCw0LzQutC4INCy0LjQtNGB0YDQsNCy0L3QtdC90LjRjyDQstC40LTRhtCy0LXRgtCwINCy0LjQtNGH0LjRgdC70L7QstC+0LPQvtC30L3QsNGH0LXQvdC40Y8g0LLQuNC00YjRgNC40YTRgtCwINC00L7Qv9GD0YHRgtC40LzQsNGP0LTQu9C40L3QsCDQtNC+0L/Rg9GB0YLQuNC80YvQudC30L3QsNC6ICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LVieXRlb3JkZXJtYXJrINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LzQtdGC0LDQtNCw0L3QvdGL0YXQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0LjRgdGC0L7Rh9C90LjQutGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC60LvQsNCy0LjRiNCwINC60L7QtNCy0L7Qt9Cy0YDQsNGC0LDQtNC40LDQu9C+0LPQsCAnICtcbiAgJ9C60L7QtNC40YDQvtCy0LrQsHhiYXNlINC60L7QtNC40YDQvtCy0LrQsNGC0LXQutGB0YLQsCDQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QvtC40YHQutCwINC90LDQv9GA0LDQstC70LXQvdC40LXRgdC+0YDRgtC40YDQvtCy0LrQuCDQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GFINC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC40LjQt9C80LXQvdC10L3QuNC40LTQsNC90L3Ri9GFICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNGA0LDQt9C00LXQu9C+0LIg0L/RgNC+0LLQtdGA0LrQsNC30LDQv9C+0LvQvdC10L3QuNGPINGA0LXQttC40LzQtNC40LDQu9C+0LPQsNCy0L7Qv9GA0L7RgSDRgNC10LbQuNC80LfQsNC/0YPRgdC60LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YDQtdC20LjQvNC+0LrRgNGD0LPQu9C10L3QuNGPINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0YTQvtGA0LzQv9GA0LjQu9C+0LbQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0YHQutC+0YDQvtGB0YLRjNC60LvQuNC10L3RgtGB0LrQvtCz0L7RgdC+0LXQtNC40L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40LXQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINGB0L7RgdGC0L7Rj9C90LjQtdC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LDRgdC10YDRgtC40YTQuNC60LDRgtCwd2luZG93cyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0YHRgtGA0L7QutC4INGB0YLQsNGC0YPRgdGB0L7QvtCx0YnQtdC90LjRjyDRgtC40L/QstC90LXRiNC90LXQudC60L7QvNC/0L7QvdC10L3RgtGLINGC0LjQv9C/0LvQsNGC0YTQvtGA0LzRiyDRgtC40L/Qv9C+0LLQtdC00LXQvdC40Y/QutC70LDQstC40YjQuGVudGVyICcgK1xuICAn0YLQuNC/0Y3Qu9C10LzQtdC90YLQsNC40L3RhNC+0YDQvNCw0YbQuNC40L7QstGL0L/QvtC70L3QtdC90LjQuNC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUg0YPRgNC+0LLQtdC90YzQuNC30L7Qu9GP0YbQuNC40YLRgNCw0L3Qt9Cw0LrRhtC40Lkg0YXQtdGI0YTRg9C90LrRhtC40Y8g0YfQsNGB0YLQuNC00LDRgtGLJztcblxuICAvLyBjbGFzczog0LLRgdGC0YDQvtC10L3QvdGL0LUg0L3QsNCx0L7RgNGLINC30L3QsNGH0LXQvdC40LksINGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gKNGB0L7QtNC10YDQttCw0YIg0LTQvtGH0LXRgNC90LjQtSDQt9C90LDRh9C10L3QuNGPLCDQvtCx0YDQsNGJ0LXQvdC40Y8g0Log0LrQvtGC0L7RgNGL0Lwg0YfQtdGA0LXQtyDRgNCw0LfRi9C80LXQvdC+0LLQsNC90LjQtSlcbiAgdmFyIENMQVNTID1cbiAgdjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzICtcbiAgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSArXG4gIHY4X3N5c3RlbV9lbnVtc19vYmplY3RzX3Byb3BlcnRpZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZXhjaGFuZ2VfcGxhbnMgK1xuICB2OF9zeXN0ZW1fZW51bXNfdGFidWxhcl9kb2N1bWVudCArXG4gIHY4X3N5c3RlbV9lbnVtc19zaGVkdWxlciArXG4gIHY4X3N5c3RlbV9lbnVtc19mb3JtYXR0ZWRfZG9jdW1lbnQgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnkgK1xuICB2OF9zeXN0ZW1fZW51bXNfcmVwb3J0X2J1aWxkZXIgK1xuICB2OF9zeXN0ZW1fZW51bXNfZmlsZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnlfYnVpbGRlciArXG4gIHY4X3N5c3RlbV9lbnVtc19kYXRhX2FuYWx5c2lzICtcbiAgdjhfc3lzdGVtX2VudW1zX3htbF9qc29uX3hzX2RvbV94ZHRvX3dzICtcbiAgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtICtcbiAgdjhfc3lzdGVtX2VudW1zX2VtYWlsICtcbiAgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgK1xuICB2OF9zeXN0ZW1fZW51bXNfY3J5cHRvZ3JhcGh5ICtcbiAgdjhfc3lzdGVtX2VudW1zX3ppcCArXG4gIHY4X3N5c3RlbV9lbnVtc19vdGhlciArXG4gIHY4X3N5c3RlbV9lbnVtc19yZXF1ZXN0X3NjaGVtYSArXG4gIHY4X3N5c3RlbV9lbnVtc19wcm9wZXJ0aWVzX29mX21ldGFkYXRhX29iamVjdHMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZGlmZmVyZW50cztcblxuICAvLyB2OCDQvtCx0YnQuNC1INC+0LHRitC10LrRgtGLICjRgyDQvtCx0YrQtdC60YLQvtCyINC10YHRgtGMINC60L7QvdGB0YLRgNGD0LrRgtC+0YAsINGN0LrQt9C10LzQv9C70Y/RgNGLINGB0L7Qt9C00LDRjtGC0YHRjyDQvNC10YLQvtC00L7QvCDQndCe0JLQq9CZKSA9PT4gdHlwZVxuICB2YXIgdjhfc2hhcmVkX29iamVjdCA9XG4gICdjb23QvtCx0YrQtdC60YIgZnRw0YHQvtC10LTQuNC90LXQvdC40LUgaHR0cNC30LDQv9GA0L7RgSBodHRw0YHQtdGA0LLQuNGB0L7RgtCy0LXRgiBodHRw0YHQvtC10LTQuNC90LXQvdC40LUgd3PQvtC/0YDQtdC00LXQu9C10L3QuNGPIHdz0L/RgNC+0LrRgdC4IHhiYXNlINCw0L3QsNC70LjQt9C00LDQvdC90YvRhSDQsNC90L3QvtGC0LDRhtC40Y94cyAnICtcbiAgJ9Cx0LvQvtC60LjRgNC+0LLQutCw0LTQsNC90L3Ri9GFINCx0YPRhNC10YDQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINCy0LrQu9GO0YfQtdC90LjQtXhzINCy0YvRgNCw0LbQtdC90LjQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCz0LXQvdC10YDQsNGC0L7RgNGB0LvRg9GH0LDQudC90YvRhdGH0LjRgdC10Lsg0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAgJyArXG4gICfQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQuNC10LrQvtC+0YDQtNC40L3QsNGC0Ysg0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAg0LPRgNGD0L/Qv9Cw0LzQvtC00LXQu9C4eHMg0LTQsNC90L3Ri9C10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LLQvtC40YfQvdGL0LXQtNCw0L3QvdGL0LUg0LTQtdC90LTRgNC+0LPRgNCw0LzQvNCwICcgK1xuICAn0LTQuNCw0LPRgNCw0LzQvNCwINC00LjQsNCz0YDQsNC80LzQsNCz0LDQvdGC0LAg0LTQuNCw0LvQvtCz0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDQtNC40LDQu9C+0LPQstGL0LHQvtGA0LDRhtCy0LXRgtCwINC00LjQsNC70L7Qs9Cy0YvQsdC+0YDQsNGI0YDQuNGE0YLQsCDQtNC40LDQu9C+0LPRgNCw0YHQv9C40YHQsNC90LjRj9GA0LXQs9C70LDQvNC10L3RgtC90L7Qs9C+0LfQsNC00LDQvdC40Y8gJyArXG4gICfQtNC40LDQu9C+0LPRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0L/QtdGA0LjQvtC00LAg0LTQuNCw0L/QsNC30L7QvSDQtNC+0LrRg9C80LXQvdGCZG9tINC00L7QutGD0LzQtdC90YJodG1sINC00L7QutGD0LzQtdC90YLQsNGG0LjRj3hzINC00L7RgdGC0LDQstC70Y/QtdC80L7QtdGD0LLQtdC00L7QvNC70LXQvdC40LUgJyArXG4gICfQt9Cw0L/QuNGB0Yxkb20g0LfQsNC/0LjRgdGMZmFzdGluZm9zZXQg0LfQsNC/0LjRgdGMaHRtbCDQt9Cw0L/QuNGB0Yxqc29uINC30LDQv9C40YHRjHhtbCDQt9Cw0L/QuNGB0Yx6aXDRhNCw0LnQu9CwINC30LDQv9C40YHRjNC00LDQvdC90YvRhSDQt9Cw0L/QuNGB0YzRgtC10LrRgdGC0LAg0LfQsNC/0LjRgdGM0YPQt9C70L7QsmRvbSAnICtcbiAgJ9C30LDQv9GA0L7RgSDQt9Cw0YnQuNGJ0LXQvdC90L7QtdGB0L7QtdC00LjQvdC10L3QuNC1b3BlbnNzbCDQt9C90LDRh9C10L3QuNGP0L/QvtC70LXQudGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQuNC30LLQu9C10YfQtdC90LjQtdGC0LXQutGB0YLQsCDQuNC80L/QvtGA0YJ4cyDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQsCAnICtcbiAgJ9C40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtC10YHQvtC+0LHRidC10L3QuNC1INC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLRi9C50L/RgNC+0YTQuNC70Ywg0LjQvdGC0LXRgNC90LXRgtC/0YDQvtC60YHQuCDQuNC90YLQtdGA0L3QtdGC0YHQvtC10LTQuNC90LXQvdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Y/QtNC70Y/Qv9GA0LjQu9C+0LbQtdC90LjRj3hzICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsNGC0YDQuNCx0YPRgtCweHMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQuNGB0YLQvtGH0L3QuNC60LTQvtGB0YLRg9C/0L3Ri9GF0L3QsNGB0YLRgNC+0LXQutC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgtC10YDQsNGC0L7RgNGD0LfQu9C+0LJkb20g0LrQsNGA0YLQuNC90LrQsCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9C00LDRgtGLINC60LLQsNC70LjRhNC40LrQsNGC0L7RgNGL0LTQstC+0LjRh9C90YvRhdC00LDQvdC90YvRhSDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GB0YLRgNC+0LrQuCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GH0LjRgdC70LAgJyArXG4gICfQutC+0LzQv9C+0L3QvtCy0YnQuNC60LzQsNC60LXRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC80L/QvtC90L7QstGJ0LjQutC90LDRgdGC0YDQvtC10LrQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LzQsNC60LXRgtCw0L7RhNC+0YDQvNC70LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C60L7QvdGB0YLRgNGD0LrRgtC+0YDQvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC90YHRgtGA0YPQutGC0L7RgNGE0L7RgNC80LDRgtC90L7QudGB0YLRgNC+0LrQuCDQu9C40L3QuNGPINC80LDQutC10YLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvNCw0LrQtdGC0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C80LDQutC10YLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDRgdC60LB4cyDQvNC10L3QtdC00LbQtdGA0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INC90LDQsdC+0YDRgdGF0LXQvHhtbCDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvdCw0YHRgtGA0L7QudC60LjRgdC10YDQuNCw0LvQuNC30LDRhtC40Lhqc29uICcgK1xuICAn0L7QsdGA0LDQsdC+0YLQutCw0LrQsNGA0YLQuNC90L7QuiDQvtCx0YDQsNCx0L7RgtC60LDRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L7QsdGF0L7QtNC00LXRgNC10LLQsGRvbSDQvtCx0YrRj9Cy0LvQtdC90LjQtdCw0YLRgNC40LHRg9GC0LB4cyDQvtCx0YrRj9Cy0LvQtdC90LjQtdC90L7RgtCw0YbQuNC4eHMgJyArXG4gICfQvtCx0YrRj9Cy0LvQtdC90LjQtdGN0LvQtdC80LXQvdGC0LB4cyDQvtC/0LjRgdCw0L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC+0LHRi9GC0LjRj9C00L7RgdGC0YPQv9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0L7QsdGL0YLQuNGP0L7RgtC60LDQt9Cy0LTQvtGB0YLRg9C/0LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L7Qv9C40YHQsNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuNGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQv9C10YDQtdC00LDQstCw0LXQvNC+0LPQvtGE0LDQudC70LAg0L7Qv9C40YHQsNC90LjQtdGC0LjQv9C+0LIg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdCz0YDRg9C/0L/Ri9Cw0YLRgNC40LHRg9GC0L7QsnhzINC+0L/RgNC10LTQtdC70LXQvdC40LXQs9GA0YPQv9C/0YvQvNC+0LTQtdC70Lh4cyAnICtcbiAgJ9C+0L/RgNC10LTQtdC70LXQvdC40LXQvtCz0YDQsNC90LjRh9C10L3QuNGP0LjQtNC10L3RgtC40YfQvdC+0YHRgtC4eHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC+0L/RgNC10LTQtdC70LXQvdC40LXRgdC+0YHRgtCw0LLQvdC+0LPQvtGC0LjQv9CweHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdGC0LjQv9Cw0LTQvtC60YPQvNC10L3RgtCwZG9tICcgK1xuICAn0L7Qv9GA0LXQtNC10LvQtdC90LjRj3hwYXRoeHMg0L7RgtCx0L7RgNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0LDQutC10YLQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YXQtNC+0LrRg9C80LXQvdGC0L7QsiDQv9Cw0YDQsNC80LXRgtGA0LLRi9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C/0LDRgNCw0LzQtdGC0YDRi9C30LDQv9C40YHQuGpzb24g0L/QsNGA0LDQvNC10YLRgNGL0LfQsNC/0LjRgdC4eG1sINC/0LDRgNCw0LzQtdGC0YDRi9GH0YLQtdC90LjRj3htbCDQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LV4cyDQv9C70LDQvdC40YDQvtCy0YnQuNC6INC/0L7Qu9C10LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7RgdGC0YDQvtC40YLQtdC70Yxkb20g0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC30LDQv9GA0L7RgdCwINC/0L7RgdGC0YDQvtC40YLQtdC70YzQvtGC0YfQtdGC0LAg0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC+0YLRh9C10YLQsNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0L/QvtGB0YLRgNC+0LjRgtC10LvRjNGB0YXQtdC8eG1sINC/0L7RgtC+0Log0L/QvtGC0L7QutCy0L/QsNC80Y/RgtC4INC/0L7Rh9GC0LAg0L/QvtGH0YLQvtCy0L7QtdGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1eHNsINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LXQutC60LDQvdC+0L3QuNGH0LXRgdC60L7QvNGDeG1sICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LLRi9Cy0L7QtNCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhdCy0LrQvtC70LvQtdC60YbQuNGO0LfQvdCw0YfQtdC90LjQuSDQv9GA0L7RhtC10YHRgdC+0YDQstGL0LLQvtC00LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GF0LLRgtCw0LHQu9C40YfQvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNC30YvQvNC10L3QvtCy0LDRgtC10LvRjNC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQuNC80LXQvWRvbSDRgNCw0LzQutCwINGA0LDRgdC/0LjRgdCw0L3QuNC10YDQtdCz0LvQsNC80LXQvdGC0L3QvtCz0L7Qt9Cw0LTQsNC90LjRjyDRgNCw0YHRiNC40YDQtdC90L3QvtC10LjQvNGPeG1sICcgK1xuICAn0YDQtdC30YPQu9GM0YLQsNGC0YfRgtC10L3QuNGP0LTQsNC90L3Ri9GFINGB0LLQvtC00L3QsNGP0LTQuNCw0LPRgNCw0LzQvNCwINGB0LLRj9C30YzQv9Cw0YDQsNC80LXRgtGA0LDQstGL0LHQvtGA0LAg0YHQstGP0LfRjNC/0L7RgtC40L/RgyDRgdCy0Y/Qt9GM0L/QvtGC0LjQv9GD0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LB3aW5kb3dzINGB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LDRhNCw0LnQuyDRgdC10YDRgtC40YTQuNC60LDRgtC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDRgdC10YDRgtC40YTQuNC60LDRgtGL0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjRhdGG0LXQvdGC0YDQvtCyd2luZG93cyAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0YvRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNGF0YbQtdC90YLRgNC+0LLRhNCw0LnQuyDRgdC20LDRgtC40LXQtNCw0L3QvdGL0YUg0YHQuNGB0YLQtdC80L3QsNGP0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHQvtC+0LHRidC10L3QuNC10L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOINGB0L7Rh9C10YLQsNC90LjQtdC60LvQsNCy0LjRiCAnICtcbiAgJ9GB0YDQsNCy0L3QtdC90LjQtdC30L3QsNGH0LXQvdC40Lkg0YHRgtCw0L3QtNCw0YDRgtC90LDRj9C00LDRgtCw0L3QsNGH0LDQu9CwINGB0YLQsNC90LTQsNGA0YLQvdGL0LnQv9C10YDQuNC+0LQg0YHRhdC10LzQsHhtbCDRgdGF0LXQvNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQsNCx0LvQuNGH0L3Ri9C50LTQvtC60YPQvNC10L3RgiAnICtcbiAgJ9GC0LXQutGB0YLQvtCy0YvQudC00L7QutGD0LzQtdC90YIg0YLQtdGB0YLQuNGA0YPQtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0LjQv9C00LDQvdC90YvRhXhtbCDRg9C90LjQutCw0LvRjNC90YvQudC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQuyDRhNCw0LnQu9C+0LLRi9C50L/QvtGC0L7QuiAnICtcbiAgJ9GE0LDRgdC10YLQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QstC00YDQvtCx0L3QvtC50YfQsNGB0YLQuHhzINGE0LDRgdC10YLQvNCw0LrRgdC40LzQsNC70YzQvdC+0LPQvtCy0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMgJyArXG4gICfRhNCw0YHQtdGC0LzQsNC60YHQuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LDQutGB0LjQvNCw0LvRjNC90L7QudC00LvQuNC90Yt4cyDRhNCw0YHQtdGC0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+0LLQutC70Y7Rh9Cw0Y7RidC10LPQvtC30L3QsNGH0LXQvdC40Y94cyAnICtcbiAgJ9GE0LDRgdC10YLQvNC40L3QuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LjQvdC40LzQsNC70YzQvdC+0LnQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC+0LHRgNCw0LfRhtCweHMg0YTQsNGB0LXRgtC+0LHRidC10LPQvtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QsnhzICcgK1xuICAn0YTQsNGB0LXRgtC/0LXRgNC10YfQuNGB0LvQtdC90LjRj3hzINGE0LDRgdC10YLQv9GA0L7QsdC10LvRjNC90YvRhdGB0LjQvNCy0L7Qu9C+0LJ4cyDRhNC40LvRjNGC0YDRg9C30LvQvtCyZG9tINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90LDRj9GB0YLRgNC+0LrQsCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0YTRgNCw0LPQvNC10L3RgnhzINGF0LXRiNC40YDQvtCy0LDQvdC40LXQtNCw0L3QvdGL0YUg0YXRgNCw0L3QuNC70LjRidC10LfQvdCw0YfQtdC90LjRjyDRhtCy0LXRgiDRh9GC0LXQvdC40LVmYXN0aW5mb3NldCDRh9GC0LXQvdC40LVodG1sINGH0YLQtdC90LjQtWpzb24g0YfRgtC10L3QuNC1eG1sINGH0YLQtdC90LjQtXppcNGE0LDQudC70LAgJyArXG4gICfRh9GC0LXQvdC40LXQtNCw0L3QvdGL0YUg0YfRgtC10L3QuNC10YLQtdC60YHRgtCwINGH0YLQtdC90LjQtdGD0LfQu9C+0LJkb20g0YjRgNC40YTRgiDRjdC70LXQvNC10L3RgtGA0LXQt9GD0LvRjNGC0LDRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJztcblxuICAvLyB2OCDRg9C90LjQstC10YDRgdCw0LvRjNC90YvQtSDQutC+0LvQu9C10LrRhtC40Lgg0LfQvdCw0YfQtdC90LjQuSA9PT4gdHlwZVxuICB2YXIgdjhfdW5pdmVyc2FsX2NvbGxlY3Rpb24gPVxuICAnY29tc2FmZWFycmF5INC00LXRgNC10LLQvtC30L3QsNGH0LXQvdC40Lkg0LzQsNGB0YHQuNCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRgdC/0LjRgdC+0LrQt9C90LDRh9C10L3QuNC5INGB0YLRgNGD0LrRgtGD0YDQsCDRgtCw0LHQu9C40YbQsNC30L3QsNGH0LXQvdC40Lkg0YTQuNC60YHQuNGA0L7QstCw0L3QvdCw0Y/RgdGC0YDRg9C60YLRg9GA0LAgJyArXG4gICfRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQudC80LDRgdGB0LjQsiAnO1xuXG4gIC8vIHR5cGUgOiDQstGB0YLRgNC+0LXQvdC90YvQtSDRgtC40L/Ri1xuICB2YXIgVFlQRSA9XG4gIHY4X3NoYXJlZF9vYmplY3QgK1xuICB2OF91bml2ZXJzYWxfY29sbGVjdGlvbjtcblxuICAvLyBsaXRlcmFsIDog0L/RgNC40LzQuNGC0LjQstC90YvQtSDRgtC40L/Ri1xuICB2YXIgTElURVJBTCA9ICdudWxsINC40YHRgtC40L3QsCDQu9C+0LbRjCDQvdC10L7Qv9GA0LXQtNC10LvQtdC90L4nO1xuICBcbiAgLy8gbnVtYmVyIDog0YfQuNGB0LvQsFxuICB2YXIgTlVNQkVSUyA9IGhsanMuaW5oZXJpdChobGpzLk5VTUJFUl9NT0RFKTtcblxuICAvLyBzdHJpbmcgOiDRgdGC0YDQvtC60LhcbiAgdmFyIFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wifFxcXFx8JywgZW5kOiAnXCJ8JCcsXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gIH07XG5cbiAgLy8gbnVtYmVyIDog0LTQsNGC0YtcbiAgdmFyIERBVEUgPSB7XG4gICAgYmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wiLCBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcZHs0fShbXFxcXC5cXFxcXFxcXC86LV0/XFxcXGR7Mn0pezAsNX0nXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBcbiAgLy8gY29tbWVudCA6INC60L7QvNC80LXQvdGC0LDRgNC40LhcbiAgdmFyIENPTU1FTlRTID0gaGxqcy5pbmhlcml0KGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSk7XG4gIFxuICAvLyBtZXRhIDog0LjQvdGB0YLRgNGD0LrRhtC40Lgg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLRiyDQutC+0LzQv9C40LvRj9GG0LjQuFxuICB2YXIgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGJlZ2luOiAnI3wmJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogS0VZV09SRCArIE1FVEFLRVlXT1JEfSxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFNcbiAgICBdXG4gIH07XG4gIFxuICAvLyBzeW1ib2wgOiDQvNC10YLQutCwIGdvdG9cbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnficsIGVuZDogJzt8OicsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTsgIFxuICBcbiAgLy8gZnVuY3Rpb24gOiDQvtCx0YrRj9Cy0LvQtdC90LjQtSDQv9GA0L7RhtC10LTRg9GAINC4INGE0YPQvdC60YbQuNC5XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgbGV4ZW1lczogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAn0L/RgNC+0YbQtdC00YPRgNCwfNGE0YPQvdC60YbQuNGPJywgZW5kOiAnXFxcXCknLCBrZXl3b3JkczogJ9C/0YDQvtGG0LXQtNGD0YDQsCDRhNGD0L3QutGG0LjRjyd9LFxuICAgICAge2JlZ2luOiAn0LrQvtC90LXRhtC/0YDQvtGG0LXQtNGD0YDRi3zQutC+0L3QtdGG0YTRg9C90LrRhtC40LgnLCBrZXl3b3JkczogJ9C60L7QvdC10YbQv9GA0L7RhtC10LTRg9GA0Ysg0LrQvtC90LXRhtGE0YPQvdC60YbQuNC4J31cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGVuZHNQYXJlbnQgOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsIGVuZDogJywnLCBleGNsdWRlRW5kOiB0cnVlLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAgIGtleXdvcmQ6ICfQt9C90LDRhycsXG4gICAgICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBEQVRFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBDT01NRU5UU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBVTkRFUlNDT1JFX0lERU5UX1JFfSlcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkQsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTixcbiAgICAgIGNsYXNzOiBDTEFTUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgTUVUQSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgQ09NTUVOVFMsXG4gICAgICBTWU1CT0wsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIERBVEVcbiAgICBdICBcbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgICB2YXIgcmVnZXhlcyA9IHtcbiAgICAgICAgcnVsZURlY2xhcmF0aW9uOiBcIl5bYS16QS1aXVthLXpBLVowLTktXSpcIixcbiAgICAgICAgdW5leHBlY3RlZENoYXJzOiBcIlshQCMkXiYnLD8rfmB8Ol1cIlxuICAgIH07XG5cbiAgICB2YXIga2V5d29yZHMgPSBbXG4gICAgICAgIFwiQUxQSEFcIixcbiAgICAgICAgXCJCSVRcIixcbiAgICAgICAgXCJDSEFSXCIsXG4gICAgICAgIFwiQ1JcIixcbiAgICAgICAgXCJDUkxGXCIsXG4gICAgICAgIFwiQ1RMXCIsXG4gICAgICAgIFwiRElHSVRcIixcbiAgICAgICAgXCJEUVVPVEVcIixcbiAgICAgICAgXCJIRVhESUdcIixcbiAgICAgICAgXCJIVEFCXCIsXG4gICAgICAgIFwiTEZcIixcbiAgICAgICAgXCJMV1NQXCIsXG4gICAgICAgIFwiT0NURVRcIixcbiAgICAgICAgXCJTUFwiLFxuICAgICAgICBcIlZDSEFSXCIsXG4gICAgICAgIFwiV1NQXCJcbiAgICBdO1xuXG4gICAgdmFyIGNvbW1lbnRNb2RlID0gaGxqcy5DT01NRU5UKFwiO1wiLCBcIiRcIik7XG5cbiAgICB2YXIgdGVybWluYWxCaW5hcnlNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvJWJbMC0xXSsoLVswLTFdK3woXFwuWzAtMV0rKSspezAsMX0vXG4gICAgfTtcblxuICAgIHZhciB0ZXJtaW5hbERlY2ltYWxNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvJWRbMC05XSsoLVswLTldK3woXFwuWzAtOV0rKSspezAsMX0vXG4gICAgfTtcblxuICAgIHZhciB0ZXJtaW5hbEhleGFkZWNpbWFsTW9kZSA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogLyV4WzAtOUEtRl0rKC1bMC05QS1GXSt8KFxcLlswLTlBLUZdKykrKXswLDF9LyxcbiAgICB9O1xuXG4gICAgdmFyIGNhc2VTZW5zaXRpdml0eUluZGljYXRvck1vZGUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzeW1ib2xcIixcbiAgICAgICAgYmVnaW46IC8lW3NpXS9cbiAgICB9O1xuXG4gICAgdmFyIHJ1bGVEZWNsYXJhdGlvbk1vZGUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJhdHRyaWJ1dGVcIixcbiAgICAgICAgYmVnaW46IHJlZ2V4ZXMucnVsZURlY2xhcmF0aW9uICsgJyg/PVxcXFxzKj0pJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlsbGVnYWw6IHJlZ2V4ZXMudW5leHBlY3RlZENoYXJzLFxuICAgICAga2V5d29yZHM6IGtleXdvcmRzLmpvaW4oXCIgXCIpLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBydWxlRGVjbGFyYXRpb25Nb2RlLFxuICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgIHRlcm1pbmFsQmluYXJ5TW9kZSxcbiAgICAgICAgICB0ZXJtaW5hbERlY2ltYWxNb2RlLFxuICAgICAgICAgIHRlcm1pbmFsSGV4YWRlY2ltYWxNb2RlLFxuICAgICAgICAgIGNhc2VTZW5zaXRpdml0eUluZGljYXRvck1vZGUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvTWV0aG9kc1xuICB2YXIgSFRUUF9WRVJCUyA9IFtcbiAgICBcIkdFVFwiLCBcIlBPU1RcIiwgXCJIRUFEXCIsIFwiUFVUXCIsIFwiREVMRVRFXCIsIFwiQ09OTkVDVFwiLCBcIk9QVElPTlNcIiwgXCJQQVRDSFwiLCBcIlRSQUNFXCJcbiAgXVxuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBJUFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ15cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZHsxLDV9KT9cXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTo1XG4gICAgICB9LFxuICAgICAgLy8gT3RoZXIgbnVtYmVyc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrXFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBSZXF1ZXN0c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiKCcgKyBIVFRQX1ZFUkJTLmpvaW4oXCJ8XCIpICsgJyknLCBlbmQ6ICdcIicsXG4gICAgICAgIGtleXdvcmRzOiBIVFRQX1ZFUkJTLmpvaW4oXCIgXCIpLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDUsXG4gICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiAnSFRUUC9bMTJdXFxcXC5cXFxcZCcsXG4gICAgICAgICAgcmVsZXZhbmNlOjVcbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICAvLyBEYXRlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAvLyBkYXRlcyBtdXN0IGhhdmUgYSBjZXJ0YWluIGxlbmd0aCwgdGhpcyBwcmV2ZW50cyBtYXRjaGluZ1xuICAgICAgICAvLyBzaW1wbGUgYXJyYXkgYWNjZXNzZXMgYVsxMjNdIGFuZCBbXSBhbmQgb3RoZXIgY29tbW9uIHBhdHRlcm5zXG4gICAgICAgIC8vIGZvdW5kIGluIG90aGVyIGxhbmd1YWdlc1xuICAgICAgICBiZWdpbjogL1xcW1xcZFteXFxdXFxuXXs4LH1cXF0vLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gVXNlciBhZ2VudCAvIHJlbGV2YW5jZSBib29zdFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiTW96aWxsYS9cXFxcZFxcXFwuXFxcXGQgXFxcXFxcKCcsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAzXG4gICAgICB9LFxuICAgICAgLy8gU3RyaW5nc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJztcbiAgdmFyIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUgPSAnKFsqXXxbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJztcblxuICB2YXIgQVMzX1JFU1RfQVJHX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAncmVzdF9hcmcnLFxuICAgIGJlZ2luOiAnWy5dezN9JywgZW5kOiBJREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2FzJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhcyBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZXRlIGRvIGR5bmFtaWMgZWFjaCAnICtcbiAgICAgICAgJ2Vsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZvciBmdW5jdGlvbiBnZXQgaWYgaW1wbGVtZW50cyBpbXBvcnQgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luc3RhbmNlb2YgaW50ZXJmYWNlIGludGVybmFsIGlzIG5hbWVzcGFjZSBuYXRpdmUgbmV3IG92ZXJyaWRlIHBhY2thZ2UgcHJpdmF0ZSAnICtcbiAgICAgICAgJ3Byb3RlY3RlZCBwdWJsaWMgcmV0dXJuIHNldCBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1c2UgdmFyIHZvaWQgJyArXG4gICAgICAgICd3aGlsZSB3aXRoJyxcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwYWNrYWdlJywgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCBpbmNsdWRlJywgZW5kOiAnOycsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpbXBvcnQgaW5jbHVkZSd9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJ1t7O10nLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFMnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBBUzNfUkVTVF9BUkdfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc6XFxcXHMqJyArIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLk1FVEhPRF9HVUFSRFxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLy8gV2UgdHJ5IHRvIHN1cHBvcnQgZnVsbCBBZGEyMDEyXG4vL1xuLy8gV2UgaGlnaGxpZ2h0IGFsbCBhcHBlYXJhbmNlcyBvZiB0eXBlcywga2V5d29yZHMsIGxpdGVyYWxzIChzdHJpbmcsIGNoYXIsIG51bWJlciwgYm9vbClcbi8vIGFuZCB0aXRsZXMgKHVzZXIgZGVmaW5lZCBmdW5jdGlvbi9wcm9jZWR1cmUvcGFja2FnZSlcbi8vIENTUyBjbGFzc2VzIGFyZSBzZXQgYWNjb3JkaW5nbHlcbi8vXG4vLyBMYW5ndWFnZXMgY2F1c2luZyBwcm9ibGVtcyBmb3IgbGFuZ3VhZ2UgZGV0ZWN0aW9uOlxuLy8geG1sIChicm9rZW4gYnkgRm9vIDogQmFyIHR5cGUpLCBlbG0gKGJyb2tlbiBieSBGb28gOiBCYXIgdHlwZSksIHZic2NyaXB0LWh0bWwgKGJyb2tlbiBieSBib2R5IGtleXdvcmQpXG4vLyBzcWwgKGFkYSBkZWZhdWx0LnR4dCBoYXMgYSBsb3Qgb2Ygc3FsIGtleXdvcmRzKVxuXG5mdW5jdGlvbihobGpzKSB7XG4gICAgLy8gUmVndWxhciBleHByZXNzaW9uIGZvciBBZGEgbnVtZXJpYyBsaXRlcmFscy5cbiAgICAvLyBzdG9sZW4gZm9ybSB0aGUgVkhETCBoaWdobGlnaHRlclxuXG4gICAgLy8gRGVjaW1hbCBsaXRlcmFsOlxuICAgIHZhciBJTlRFR0VSX1JFID0gJ1xcXFxkKF98XFxcXGQpKic7XG4gICAgdmFyIEVYUE9ORU5UX1JFID0gJ1tlRV1bLStdPycgKyBJTlRFR0VSX1JFO1xuICAgIHZhciBERUNJTUFMX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyhcXFxcLicgKyBJTlRFR0VSX1JFICsgJyk/JyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAgIC8vIEJhc2VkIGxpdGVyYWw6XG4gICAgdmFyIEJBU0VEX0lOVEVHRVJfUkUgPSAnXFxcXHcrJztcbiAgICB2YXIgQkFTRURfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnIycgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyhcXFxcLicgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyk/JyArICcjJyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAgIHZhciBOVU1CRVJfUkUgPSAnXFxcXGIoJyArIEJBU0VEX0xJVEVSQUxfUkUgKyAnfCcgKyBERUNJTUFMX0xJVEVSQUxfUkUgKyAnKSc7XG5cbiAgICAvLyBJZGVudGlmaWVyIHJlZ2V4XG4gICAgdmFyIElEX1JFR0VYID0gJ1tBLVphLXpdKF8/W0EtWmEtejAtOS5dKSonO1xuXG4gICAgLy8gYmFkIGNoYXJzLCBvbmx5IGFsbG93ZWQgaW4gbGl0ZXJhbHNcbiAgICB2YXIgQkFEX0NIQVJTID0gJ1tde30lI1xcJ1xcXCInXG5cbiAgICAvLyBBZGEgZG9lc24ndCBoYXZlIGJsb2NrIGNvbW1lbnRzLCBvbmx5IGxpbmUgY29tbWVudHNcbiAgICB2YXIgQ09NTUVOVFMgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcblxuICAgIC8vIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgZm9ybVxuICAgIC8vIEZvbyA6IEJhciA6PSBCYXo7XG4gICAgLy8gd2hlcmUgb25seSBCYXIgd2lsbCBiZSBoaWdobGlnaHRlZFxuICAgIHZhciBWQVJfREVDTFMgPSB7XG4gICAgICAgIC8vIFRPRE86IFRoZXNlIHNwYWNlcyBhcmUgbm90IHJlcXVpcmVkIGJ5IHRoZSBBZGEgc3ludGF4XG4gICAgICAgIC8vIGhvd2V2ZXIsIEkgaGF2ZSB5ZXQgdG8gc2VlIGhhbmR3cml0dGVuIEFkYSBjb2RlIHdoZXJlXG4gICAgICAgIC8vIHNvbWVvbmUgZG9lcyBub3QgcHV0IHNwYWNlcyBhcm91bmQgOlxuICAgICAgICBiZWdpbjogJ1xcXFxzKzpcXFxccysnLCBlbmQ6ICdcXFxccyooOj18O3xcXFxcKXw9PnwkKScsXG4gICAgICAgIC8vIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAvLyByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdvcmthcm91bmQgdG8gYXZvaWQgaGlnaGxpZ2h0aW5nXG4gICAgICAgICAgICAgICAgLy8gbmFtZWQgbG9vcHMgYW5kIGRlY2xhcmUgYmxvY2tzXG4gICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2xvb3AgZm9yIGRlY2xhcmUgb3RoZXJzJyxcbiAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJseSBoaWdobGlnaHQgYWxsIG1vZGlmaWVyc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdub3QgbnVsbCBjb25zdGFudCBhY2Nlc3MgZnVuY3Rpb24gcHJvY2VkdXJlIGluIG91dCBhbGlhc2VkIGV4Y2VwdGlvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46IElEX1JFR0VYLFxuICAgICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgICAgICdhYm9ydCBlbHNlIG5ldyByZXR1cm4gYWJzIGVsc2lmIG5vdCByZXZlcnNlIGFic3RyYWN0IGVuZCAnICtcbiAgICAgICAgICAgICAgICAnYWNjZXB0IGVudHJ5IHNlbGVjdCBhY2Nlc3MgZXhjZXB0aW9uIG9mIHNlcGFyYXRlIGFsaWFzZWQgZXhpdCBvciBzb21lICcgK1xuICAgICAgICAgICAgICAgICdhbGwgb3RoZXJzIHN1YnR5cGUgYW5kIGZvciBvdXQgc3luY2hyb25pemVkIGFycmF5IGZ1bmN0aW9uIG92ZXJyaWRpbmcgJyArXG4gICAgICAgICAgICAgICAgJ2F0IHRhZ2dlZCBnZW5lcmljIHBhY2thZ2UgdGFzayBiZWdpbiBnb3RvIHByYWdtYSB0ZXJtaW5hdGUgJyArXG4gICAgICAgICAgICAgICAgJ2JvZHkgcHJpdmF0ZSB0aGVuIGlmIHByb2NlZHVyZSB0eXBlIGNhc2UgaW4gcHJvdGVjdGVkIGNvbnN0YW50IGludGVyZmFjZSAnICtcbiAgICAgICAgICAgICAgICAnaXMgcmFpc2UgdXNlIGRlY2xhcmUgcmFuZ2UgZGVsYXkgbGltaXRlZCByZWNvcmQgd2hlbiBkZWx0YSBsb29wIHJlbSB3aGlsZSAnICtcbiAgICAgICAgICAgICAgICAnZGlnaXRzIHJlbmFtZXMgd2l0aCBkbyBtb2QgcmVxdWV1ZSB4b3InLFxuICAgICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICAgICAnVHJ1ZSBGYWxzZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBDT01NRU5UUyxcbiAgICAgICAgICAgIC8vIHN0cmluZ3MgXCJmb29iYXJcIlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tiZWdpbjogL1wiXCIvLCByZWxldmFuY2U6IDB9XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgJydcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgbGl0ZXJhbHMgYWx3YXlzIGNvbnRhaW4gb25lIGNoYXJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvJy4nL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBudW1iZXIgbGl0ZXJhbHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBOVU1CRVJfUkUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBcIidcIiArIElEX1JFR0VYLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBwYWNrYWdlIGRlZmluaXRpb24sIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnKFxcXFxid2l0aFxcXFxzKyk/KFxcXFxicHJpdmF0ZVxcXFxzKyk/XFxcXGJwYWNrYWdlXFxcXHMrKFxcXFxiYm9keVxcXFxzKyk/JywgZW5kOiAnKGlzfCQpJyxcbiAgICAgICAgICAgICAgICBrZXl3b3JkczogJ3BhY2thZ2UgYm9keScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uL3Byb2NlZHVyZSBkZWNsYXJhdGlvbi9kZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgLy8gbWF5YmUgaW5zaWRlIGdlbmVyaWNcbiAgICAgICAgICAgICAgICBiZWdpbjogJyhcXFxcYih3aXRofG92ZXJyaWRpbmcpXFxcXHMrKT9cXFxcYihmdW5jdGlvbnxwcm9jZWR1cmUpXFxcXHMrJywgZW5kOiAnKFxcXFxiaXN8XFxcXGJ3aXRofFxcXFxicmVuYW1lc3xcXFxcKVxcXFxzKjspJyxcbiAgICAgICAgICAgICAgICBrZXl3b3JkczogJ292ZXJyaWRpbmcgZnVuY3Rpb24gcHJvY2VkdXJlIHdpdGggaXMgcmVuYW1lcyByZXR1cm4nLFxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmUtbWF0Y2ggdGhlICdmdW5jdGlvbicga2V5d29yZCwgc28gdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSB0aXRsZSBtb2RlIGJlbG93IG1hdGNoZXMgb25seSBleGFjdGx5IG9uY2VcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczpcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIENPTU1FTlRTLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIHRoZSBmdW5jdGlvbi9wcm9jZWR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnKFxcXFxid2l0aFxcXFxzKyk/XFxcXGIoZnVuY3Rpb258cHJvY2VkdXJlKVxcXFxzKycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6ICcoXFxcXCh8XFxcXHMrfCQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsOiBCQURfQ0hBUlNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnXG4gICAgICAgICAgICAgICAgICAgIC8vIC8vIHBhcmFtZXRlciB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBWQVJfREVDTFMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGJyZXR1cm5cXFxccysnLCBlbmQ6ICcoXFxcXHMrfDt8JCknLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6ICdyZXR1cm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBkb25lIHdpdGggZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG5ldyB0eXBlIGRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIC8vIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYihzdWIpP3R5cGVcXFxccysnLCBlbmQ6ICdcXFxccysnLFxuICAgICAgICAgICAgICAgIGtleXdvcmRzOiAndHlwZScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlsbGVnYWw6IEJBRF9DSEFSU1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgdGhlIGRlZmluaXRpb25cbiAgICAgICAgICAgIFZBUl9ERUNMUyxcblxuICAgICAgICAgICAgLy8gbm8gbWFya3VwXG4gICAgICAgICAgICAvLyByZWxldmFuY2UgYm9vc3RlcnMgZm9yIHNtYWxsIHNuaXBwZXRzXG4gICAgICAgICAgICAvLyB7YmVnaW46ICdcXFxccyo9PlxcXFxzKid9LFxuICAgICAgICAgICAgLy8ge2JlZ2luOiAnXFxcXHMqOj1cXFxccyonfSxcbiAgICAgICAgICAgIC8vIHtiZWdpbjogJ1xcXFxzKzo9XFxcXHMrJ30sXG4gICAgICAgIF1cbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIGJ1aWx0SW5UeXBlTW9kZSA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICdcXFxcYih2b2lkfGJvb2x8aW50fGludDh8aW50MTZ8aW50MzJ8aW50NjR8dWludHx1aW50OHx1aW50MTZ8dWludDMyfHVpbnQ2NHxzdHJpbmd8cmVmfGFycmF5fGRvdWJsZXxmbG9hdHxhdXRvfGRpY3Rpb25hcnkpJ1xuICB9O1xuXG4gIHZhciBvYmplY3RIYW5kbGVNb2RlID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbYS16QS1aMC05X10rQCdcbiAgfTtcblxuICB2YXIgZ2VuZXJpY01vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICc8JywgZW5kOiAnPicsXG4gICAgY29udGFpbnM6IFsgYnVpbHRJblR5cGVNb2RlLCBvYmplY3RIYW5kbGVNb2RlIF1cbiAgfTtcblxuICBidWlsdEluVHlwZU1vZGUuY29udGFpbnMgPSBbIGdlbmVyaWNNb2RlIF07XG4gIG9iamVjdEhhbmRsZU1vZGUuY29udGFpbnMgPSBbIGdlbmVyaWNNb2RlIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbICdhc2MnIF0sXG5cbiAgICBrZXl3b3JkczpcbiAgICAgICdmb3IgaW58MCBicmVhayBjb250aW51ZSB3aGlsZSBkb3wwIHJldHVybiBpZiBlbHNlIGNhc2Ugc3dpdGNoIG5hbWVzcGFjZSBpcyBjYXN0ICcgK1xuICAgICAgJ29yIGFuZCB4b3Igbm90IGdldHwwIGluIGlub3V0fDEwIG91dCBvdmVycmlkZSBzZXR8MCBwcml2YXRlIHB1YmxpYyBjb25zdCBkZWZhdWx0fDAgJyArXG4gICAgICAnZmluYWwgc2hhcmVkIGV4dGVybmFsIG1peGlufDEwIGVudW0gdHlwZWRlZiBmdW5jZGVmIHRoaXMgc3VwZXIgaW1wb3J0IGZyb20gaW50ZXJmYWNlICcgK1xuICAgICAgJ2Fic3RyYWN0fDAgdHJ5IGNhdGNoIHByb3RlY3RlZCBleHBsaWNpdCBwcm9wZXJ0eScsXG5cbiAgICAvLyBhdm9pZCBjbG9zZSBkZXRlY3Rpb24gd2l0aCBDIyBhbmQgSlNcbiAgICBpbGxlZ2FsOiAnKF51c2luZ1xcXFxzK1tBLVphLXowLTlfXFxcXC5dKzskfFxcXFxiZnVuY3Rpb25cXHMqW15cXFxcKF0pJyxcblxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vICdzdHJpbmdzJ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIHsgLy8gXCJzdHJpbmdzXCJcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblxuICAgICAgLy8gXCJcIlwiaGVyZWRvYyBzdHJpbmdzXCJcIlwiXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcblxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLCAvLyBzaW5nbGUtbGluZSBjb21tZW50c1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgLy8gY29tbWVudCBibG9ja3NcblxuICAgICAgeyAvLyBpbnRlcmZhY2Ugb3IgbmFtZXNwYWNlIGRlY2xhcmF0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbnRlcmZhY2UgbmFtZXNwYWNlJywgZW5kOiAneycsXG4gICAgICAgIGlsbGVnYWw6ICdbOy5cXFxcLV0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgLy8gaW50ZXJmYWNlIG9yIG5hbWVzcGFjZSBuYW1lXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdbYS16QS1aMC05X10rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgeyAvLyBjbGFzcyBkZWNsYXJhdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLCBlbmQ6ICd7JyxcbiAgICAgICAgaWxsZWdhbDogJ1s7LlxcXFwtXScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyAvLyBjbGFzcyBuYW1lXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdbYS16QS1aMC05X10rJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1s6LF1cXFxccyonLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnW2EtekEtWjAtOV9dKydcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIGJ1aWx0SW5UeXBlTW9kZSwgLy8gYnVpbHQtaW4gdHlwZXNcbiAgICAgIG9iamVjdEhhbmRsZU1vZGUsIC8vIG9iamVjdCBoYW5kbGVzXG5cbiAgICAgIHsgLy8gbGl0ZXJhbHNcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIobnVsbHx0cnVlfGZhbHNlKSdcbiAgICAgIH0sXG5cbiAgICAgIHsgLy8gbnVtYmVyc1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTldK3woXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCopP2Y/fFxcXFwuXFxcXGQrZj8pKFtlRV1bLStdP1xcXFxkK2Y/KT8pJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBOVU1CRVIgPSB7Y2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdbXFxcXCQlXVxcXFxkKyd9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYXBhY2hlY29uZiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7Y2xhc3NOYW1lOiAnc2VjdGlvbicsIGJlZ2luOiAnPC8/JywgZW5kOiAnPid9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogL1xcdysvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIC8vIGtleXdvcmRzIGFyZW7igJl0IG5lZWRlZCBmb3IgaGlnaGxpZ2h0aW5nIHBlciBzZSwgdGhleSBvbmx5IGJvb3N0IHJlbGV2YW5jZVxuICAgICAgICAvLyBmb3IgYSB2ZXJ5IGdlbmVyYWxseSBkZWZpbmVkIG1vZGUgKHN0YXJ0cyB3aXRoIGEgd29yZCwgZW5kcyB3aXRoIGxpbmUtZW5kXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgbm9tYXJrdXA6XG4gICAgICAgICAgICAnb3JkZXIgZGVueSBhbGxvdyBzZXRlbnYgcmV3cml0ZXJ1bGUgcmV3cml0ZWVuZ2luZSByZXdyaXRlY29uZCBkb2N1bWVudHJvb3QgJyArXG4gICAgICAgICAgICAnc2V0aGFuZGxlciBlcnJvcmRvY3VtZW50IGxvYWRtb2R1bGUgb3B0aW9ucyBoZWFkZXIgbGlzdGVuIHNlcnZlcnJvb3QgJyArXG4gICAgICAgICAgICAnc2VydmVybmFtZSdcbiAgICAgICAgfSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBsaXRlcmFsOiAnb24gb2ZmIGFsbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxzXFxcXFsnLCBlbmQ6ICdcXFxcXSQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICAgIGJlZ2luOiAnW1xcXFwkJV1cXFxceycsIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIE5VTUJFUl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvXFxTL1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogJyd9KTtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IFsnc2VsZicsIGhsanMuQ19OVU1CRVJfTU9ERSwgU1RSSU5HXVxuICB9O1xuICB2YXIgQ09NTUVOVF9NT0RFXzEgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcbiAgdmFyIENPTU1FTlRfTU9ERV8yID0gaGxqcy5DT01NRU5UKFxuICAgICdcXFxcKFxcXFwqJyxcbiAgICAnXFxcXCpcXFxcKScsXG4gICAge1xuICAgICAgY29udGFpbnM6IFsnc2VsZicsIENPTU1FTlRfTU9ERV8xXSAvL2FsbG93IG5lc3RpbmdcbiAgICB9XG4gICk7XG4gIHZhciBDT01NRU5UUyA9IFtcbiAgICBDT01NRU5UX01PREVfMSxcbiAgICBDT01NRU5UX01PREVfMixcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ29zYXNjcmlwdCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWJvdXQgYWJvdmUgYWZ0ZXIgYWdhaW5zdCBhbmQgYXJvdW5kIGFzIGF0IGJhY2sgYmVmb3JlIGJlZ2lubmluZyAnICtcbiAgICAgICAgJ2JlaGluZCBiZWxvdyBiZW5lYXRoIGJlc2lkZSBiZXR3ZWVuIGJ1dCBieSBjb25zaWRlcmluZyAnICtcbiAgICAgICAgJ2NvbnRhaW4gY29udGFpbnMgY29udGludWUgY29weSBkaXYgZG9lcyBlaWdodGggZWxzZSBlbmQgZXF1YWwgJyArXG4gICAgICAgICdlcXVhbHMgZXJyb3IgZXZlcnkgZXhpdCBmaWZ0aCBmaXJzdCBmb3IgZm91cnRoIGZyb20gZnJvbnQgJyArXG4gICAgICAgICdnZXQgZ2l2ZW4gZ2xvYmFsIGlmIGlnbm9yaW5nIGluIGludG8gaXMgaXQgaXRzIGxhc3QgbG9jYWwgbWUgJyArXG4gICAgICAgICdtaWRkbGUgbW9kIG15IG5pbnRoIG5vdCBvZiBvbiBvbnRvIG9yIG92ZXIgcHJvcCBwcm9wZXJ0eSBwdXQgcmVmICcgK1xuICAgICAgICAncmVmZXJlbmNlIHJlcGVhdCByZXR1cm5pbmcgc2NyaXB0IHNlY29uZCBzZXQgc2V2ZW50aCBzaW5jZSAnICtcbiAgICAgICAgJ3NpeHRoIHNvbWUgdGVsbCB0ZW50aCB0aGF0IHRoZXwwIHRoZW4gdGhpcmQgdGhyb3VnaCB0aHJ1ICcgK1xuICAgICAgICAndGltZW91dCB0aW1lcyB0byB0cmFuc2FjdGlvbiB0cnkgdW50aWwgd2hlcmUgd2hpbGUgd2hvc2Ugd2l0aCAnICtcbiAgICAgICAgJ3dpdGhvdXQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ0FwcGxlU2NyaXB0IGZhbHNlIGxpbmVmZWVkIHJldHVybiBwaSBxdW90ZSByZXN1bHQgc3BhY2UgdGFiIHRydWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhbGlhcyBhcHBsaWNhdGlvbiBib29sZWFuIGNsYXNzIGNvbnN0YW50IGRhdGUgZmlsZSBpbnRlZ2VyIGxpc3QgJyArXG4gICAgICAgICdudW1iZXIgcmVhbCByZWNvcmQgc3RyaW5nIHRleHQgJyArXG4gICAgICAgICdhY3RpdmF0ZSBiZWVwIGNvdW50IGRlbGF5IGxhdW5jaCBsb2cgb2Zmc2V0IHJlYWQgcm91bmQgJyArXG4gICAgICAgICdydW4gc2F5IHN1bW1hcml6ZSB3cml0ZSAnICtcbiAgICAgICAgJ2NoYXJhY3RlciBjaGFyYWN0ZXJzIGNvbnRlbnRzIGRheSBmcm9udG1vc3QgaWQgaXRlbSBsZW5ndGggJyArXG4gICAgICAgICdtb250aCBuYW1lIHBhcmFncmFwaCBwYXJhZ3JhcGhzIHJlc3QgcmV2ZXJzZSBydW5uaW5nIHRpbWUgdmVyc2lvbiAnICtcbiAgICAgICAgJ3dlZWtkYXkgd29yZCB3b3JkcyB5ZWFyJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjpcbiAgICAgICAgICAnXFxcXGIoY2xpcGJvYXJkIGluZm98dGhlIGNsaXBib2FyZHxpbmZvIGZvcnxsaXN0IChkaXNrc3xmb2xkZXIpfCcgK1xuICAgICAgICAgICdtb3VudCB2b2x1bWV8cGF0aCB0b3woY2xvc2V8b3BlbiBmb3IpIGFjY2Vzc3woZ2V0fHNldCkgZW9mfCcgK1xuICAgICAgICAgICdjdXJyZW50IGRhdGV8ZG8gc2hlbGwgc2NyaXB0fGdldCB2b2x1bWUgc2V0dGluZ3N8cmFuZG9tIG51bWJlcnwnICtcbiAgICAgICAgICAnc2V0IHZvbHVtZXxzeXN0ZW0gYXR0cmlidXRlfHN5c3RlbSBpbmZvfHRpbWUgdG8gR01UfCcgK1xuICAgICAgICAgICcobG9hZHxydW58c3RvcmUpIHNjcmlwdHxzY3JpcHRpbmcgY29tcG9uZW50c3wnICtcbiAgICAgICAgICAnQVNDSUkgKGNoYXJhY3RlcnxudW1iZXIpfGxvY2FsaXplZCBzdHJpbmd8JyArXG4gICAgICAgICAgJ2Nob29zZSAoYXBwbGljYXRpb258Y29sb3J8ZmlsZXxmaWxlIG5hbWV8JyArXG4gICAgICAgICAgJ2ZvbGRlcnxmcm9tIGxpc3R8cmVtb3RlIGFwcGxpY2F0aW9ufFVSTCl8JyArXG4gICAgICAgICAgJ2Rpc3BsYXkgKGFsZXJ0fGRpYWxvZykpXFxcXGJ8XlxcXFxzKnJldHVyblxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYih0ZXh0IGl0ZW0gZGVsaW1pdGVyc3xjdXJyZW50IGFwcGxpY2F0aW9ufG1pc3NpbmcgdmFsdWUpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgJ1xcXFxiKGFwYXJ0IGZyb218YXNpZGUgZnJvbXxpbnN0ZWFkIG9mfG91dCBvZnxncmVhdGVyIHRoYW58JyArXG4gICAgICAgICAgXCJpc24ndHwoZG9lc24ndHxkb2VzIG5vdCkgKGVxdWFsfGNvbWUgYmVmb3JlfGNvbWUgYWZ0ZXJ8Y29udGFpbil8XCIgK1xuICAgICAgICAgICcoZ3JlYXRlcnxsZXNzKSB0aGFuKCBvciBlcXVhbCk/fChzdGFydHM/fGVuZHN8YmVnaW5zPykgd2l0aHwnICtcbiAgICAgICAgICAnY29udGFpbmVkIGJ5fGNvbWVzIChiZWZvcmV8YWZ0ZXIpfGEgKHJlZnxyZWZlcmVuY2UpfFBPU0lYIGZpbGV8JyArXG4gICAgICAgICAgJ1BPU0lYIHBhdGh8KGRhdGV8dGltZSkgc3RyaW5nfHF1b3RlZCBmb3JtKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ29uJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez07XFxcXG5dJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwgUEFSQU1TXVxuICAgICAgfVxuICAgIF0uY29uY2F0KENPTU1FTlRTKSxcbiAgICBpbGxlZ2FsOiAnLy98LT58PT58XFxcXFtcXFxcWydcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbQS1aYS16X11bMC05QS1aYS16X10qJztcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaWYgZm9yIHdoaWxlIHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhaycsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdCYWNrU2xhc2ggRG91YmxlUXVvdGUgZmFsc2UgRm9yd2FyZFNsYXNoIEluZmluaXR5IE5hTiBOZXdMaW5lIG51bGwgUEkgU2luZ2xlUXVvdGUgVGFiIFRleHRGb3JtYXR0aW5nIHRydWUgdW5kZWZpbmVkJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdBYnMgQWNvcyBBbmdsZSBBdHRhY2htZW50cyBBcmVhIEFyZWFHZW9kZXRpYyBBc2luIEF0YW4gQXRhbjIgQXZlcmFnZSBCZWFyaW5nIEJvb2xlYW4gQnVmZmVyIEJ1ZmZlckdlb2RldGljICcgK1xuICAgICAgJ0NlaWwgQ2VudHJvaWQgQ2xpcCBDb25zb2xlIENvbnN0cmFpbiBDb250YWlucyBDb3MgQ291bnQgQ3Jvc3NlcyBDdXQgRGF0ZSBEYXRlQWRkICcgK1xuICAgICAgJ0RhdGVEaWZmIERheSBEZWNvZGUgRGVmYXVsdFZhbHVlIERpY3Rpb25hcnkgRGlmZmVyZW5jZSBEaXNqb2ludCBEaXN0YW5jZSBEaXN0YW5jZUdlb2RldGljIERpc3RpbmN0ICcgK1xuICAgICAgJ0RvbWFpbkNvZGUgRG9tYWluTmFtZSBFcXVhbHMgRXhwIEV4dGVudCBGZWF0dXJlIEZlYXR1cmVTZXQgRmVhdHVyZVNldEJ5QXNzb2NpYXRpb24gRmVhdHVyZVNldEJ5SWQgRmVhdHVyZVNldEJ5UG9ydGFsSXRlbSAnICtcbiAgICAgICdGZWF0dXJlU2V0QnlSZWxhdGlvbnNoaXBOYW1lIEZlYXR1cmVTZXRCeVRpdGxlIEZlYXR1cmVTZXRCeVVybCBGaWx0ZXIgRmlyc3QgRmxvb3IgR2VvbWV0cnkgR3JvdXBCeSBHdWlkIEhhc0tleSBIb3VyIElJZiBJbmRleE9mICcgK1xuICAgICAgJ0ludGVyc2VjdGlvbiBJbnRlcnNlY3RzIElzRW1wdHkgSXNOYW4gSXNTZWxmSW50ZXJzZWN0aW5nIExlbmd0aCBMZW5ndGhHZW9kZXRpYyBMb2cgTWF4IE1lYW4gTWlsbGlzZWNvbmQgTWluIE1pbnV0ZSBNb250aCAnICtcbiAgICAgICdNdWx0aVBhcnRUb1NpbmdsZVBhcnQgTXVsdGlwb2ludCBOZXh0U2VxdWVuY2VWYWx1ZSBOb3cgTnVtYmVyIE9yZGVyQnkgT3ZlcmxhcHMgUG9pbnQgUG9seWdvbiAnICtcbiAgICAgICdQb2x5bGluZSBQb3J0YWwgUG93IFJhbmRvbSBSZWxhdGUgUmV2ZXJzZSBSaW5nSXNDbG9ja1dpc2UgUm91bmQgU2Vjb25kIFNldEdlb21ldHJ5IFNpbiBTb3J0IFNxcnQgU3RkZXYgU3VtICcgK1xuICAgICAgJ1N5bW1ldHJpY0RpZmZlcmVuY2UgVGFuIFRleHQgVGltZXN0YW1wIFRvZGF5IFRvTG9jYWwgVG9wIFRvdWNoZXMgVG9VVEMgVHJhY2tDdXJyZW50VGltZSAnICtcbiAgICAgICdUcmFja0dlb21ldHJ5V2luZG93IFRyYWNrSW5kZXggVHJhY2tTdGFydFRpbWUgVHJhY2tXaW5kb3cgVHlwZU9mIFVuaW9uIFVybEVuY29kZSBWYXJpYW5jZSAnICtcbiAgICAgICdXZWVrZGF5IFdoZW4gV2l0aGluIFllYXIgJ1xuICB9O1xuICB2YXIgRVhQUkVTU0lPTlM7XG4gIHZhciBTWU1CT0wgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1xcXFwkW2RhdGFzdG9yZXxmZWF0dXJlfGxheWVyfG1hcHxtZWFzdXJlfHNvdXJjZWZlYXR1cmV8c291cmNlbGF5ZXJ8dGFyZ2V0ZmVhdHVyZXx0YXJnZXRsYXllcnx2YWx1ZXx2aWV3XSsnXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspJyB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbb09dWzAtN10rKScgfSxcbiAgICAgIHsgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW10gIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgdmFyIFRFTVBMQVRFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMgPSBbXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgVEVNUExBVEVfU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICBobGpzLlJFR0VYUF9NT0RFXG4gIF07XG4gIHZhciBQQVJBTVNfQ09OVEFJTlMgPSBTVUJTVC5jb250YWlucy5jb25jYXQoW1xuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydhcmNhZGUnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgU1lNQk9MLFxuICAgICAgTlVNQkVSLFxuICAgICAgeyAvLyBvYmplY3QgYXR0ciBjb250YWluZXJcbiAgICAgICAgYmVnaW46IC9beyxdXFxzKi8sIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnYXR0cicsIGJlZ2luOiBJREVOVF9SRSwgcmVsZXZhbmNlOiAwfV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKHJldHVybilcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5SRUdFWFBfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICBiZWdpbjogJyhcXFxcKC4qP1xcXFwpfCcgKyBJREVOVF9SRSArICcpXFxcXHMqPT4nLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBJREVOVF9SRVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSURFTlRfUkV9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC9cXFt8JS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkWyguXS9cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jKD8hISkvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICBmdW5jdGlvbiBvcHRpb25hbChzKSB7XG4gICAgcmV0dXJuICcoPzonICsgcyArICcpPyc7XG4gIH1cbiAgdmFyIERFQ0xUWVBFX0FVVE9fUkUgPSAnZGVjbHR5cGVcXFxcKGF1dG9cXFxcKSdcbiAgdmFyIE5BTUVTUEFDRV9SRSA9ICdbYS16QS1aX11cXFxcdyo6OidcbiAgdmFyIFRFTVBMQVRFX0FSR1VNRU5UX1JFID0gJzwuKj8+JztcbiAgdmFyIEZVTkNUSU9OX1RZUEVfUkUgPSAnKCcgK1xuICAgIERFQ0xUWVBFX0FVVE9fUkUgKyAnfCcgK1xuICAgIG9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKydbYS16QS1aX11cXFxcdyonICsgb3B0aW9uYWwoVEVNUExBVEVfQVJHVU1FTlRfUkUpICtcbiAgJyknO1xuICB2YXIgQ1BQX1BSSU1JVElWRV9UWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogJ1xcXFxiW2EtelxcXFxkX10qX3RcXFxcYidcbiAgfTtcblxuICAvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvZXNjYXBlXG4gIC8vIFxcXFwgXFx4IFxceEZGIFxcdTI4MzcgXFx1MDAzMjM3NDcgXFwzNzRcbiAgdmFyIENIQVJBQ1RFUl9FU0NBUEVTID0gJ1xcXFxcXFxcKHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NCw4fXxbMC03XXszfXxcXFxcUyknXG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XFwnKCcgKyBDSEFSQUNURVJfRVNDQVBFUyArIFwifC4pXCIsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfSxcbiAgICAgIHsgYmVnaW46IC8oPzp1OD98VXxMKT9SXCIoW14oKVxcXFwgXXswLDE2fSlcXCgoPzoufFxcbikqP1xcKVxcMVwiLyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcYigwYlswMVxcJ10rKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pXFxcXGIoW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKHV8VXxsfEx8dWx8VUx8ZnxGfGJ8QiknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KShcXFxcYjBbeFhdW2EtZkEtRjAtOVxcJ10rfChcXFxcYltcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKShbZUVdWy0rXT9bXFxcXGRcXCddKyk/KScgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBSRVBST0NFU1NPUiA9ICAgICAgIHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLywgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgJyArXG4gICAgICAgICdwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC88Lio/Pi8sIGVuZDogLyQvLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgdmFyIFRJVExFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgRlVOQ1RJT05fVElUTEUgPSBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCc7XG5cbiAgdmFyIENQUF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjaGFyOF90IGNoYXIxNl90IGNoYXIzMl90IGNhdGNoIGltcG9ydCBtb2R1bGUgZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mICcgK1xuICAgICAgJ2R5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSAnICtcbiAgICAgICd1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgJyArXG4gICAgICAnZG8gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiB1c2luZyBhc20gY2FzZSB0eXBlaWQgd2NoYXJfdCcgK1xuICAgICAgJ3Nob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWduYXMgYWxpZ25vZiBjb25zdGV4cHIgY29uc3RldmFsIGNvbnN0aW5pdCBkZWNsdHlwZSAnICtcbiAgICAgICdjb25jZXB0IGNvX2F3YWl0IGNvX3JldHVybiBjb195aWVsZCByZXF1aXJlcyAnICtcbiAgICAgICdub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBmaW5hbCBvdmVycmlkZSAnICtcbiAgICAgICdhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgJyArXG4gICAgICAnYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyAnICtcbiAgICAgICdhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gJyArXG4gICAgICAnYW5kIGFuZF9lcSBiaXRhbmQgYml0b3IgY29tcGwgbm90IG5vdF9lcSBvciBvcl9lcSB4b3IgeG9yX2VxJyxcbiAgICBidWlsdF9pbjogJ3N0ZCBzdHJpbmcgd3N0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtICcgK1xuICAgICAgJ2F1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgJyArXG4gICAgICAndW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgdGVybWluYXRlIGFicyBhY29zICcgK1xuICAgICAgJ2FzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwICcgK1xuICAgICAgJ2ZzY2FuZiBmdXR1cmUgaXNhbG51bSBpc2FscGhhIGlzY250cmwgaXNkaWdpdCBpc2dyYXBoIGlzbG93ZXIgaXNwcmludCBpc3B1bmN0IGlzc3BhY2UgaXN1cHBlciAnICtcbiAgICAgICdpc3hkaWdpdCB0b2xvd2VyIHRvdXBwZXIgbGFicyBsZGV4cCBsb2cxMCBsb2cgbWFsbG9jIHJlYWxsb2MgbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtc2V0IG1vZGYgcG93ICcgK1xuICAgICAgJ3ByaW50ZiBwdXRjaGFyIHB1dHMgc2NhbmYgc2luaCBzaW4gc25wcmludGYgc3ByaW50ZiBzcXJ0IHNzY2FuZiBzdHJjYXQgc3RyY2hyIHN0cmNtcCAnICtcbiAgICAgICdzdHJjcHkgc3RyY3NwbiBzdHJsZW4gc3RybmNhdCBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBzdHJzdHIgdGFuaCB0YW4gJyArXG4gICAgICAndmZwcmludGYgdnByaW50ZiB2c3ByaW50ZiBlbmRsIGluaXRpYWxpemVyX2xpc3QgdW5pcXVlX3B0ciBfQm9vbCBjb21wbGV4IF9Db21wbGV4IGltYWdpbmFyeSBfSW1hZ2luYXJ5JyxcbiAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxscHRyIE5VTEwnXG4gIH07XG5cbiAgdmFyIEVYUFJFU1NJT05fQ09OVEFJTlMgPSBbXG4gICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJTLFxuICAgIFNUUklOR1NcbiAgXTtcblxuICB2YXIgRVhQUkVTU0lPTl9DT05URVhUID0ge1xuICAgIC8vIFRoaXMgbW9kZSBjb3ZlcnMgZXhwcmVzc2lvbiBjb250ZXh0IHdoZXJlIHdlIGNhbid0IGV4cGVjdCBhIGZ1bmN0aW9uXG4gICAgLy8gZGVmaW5pdGlvbiBhbmQgc2hvdWxkbid0IGhpZ2hsaWdodCBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2Ugb25lOlxuICAgIC8vIGByZXR1cm4gc29tZSgpYCwgYGVsc2UgaWYoKWAsIGAoeCpzdW0oMSwgMikpYFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC89LywgZW5kOiAvOy99LFxuICAgICAge2JlZ2luOiAvXFwoLywgZW5kOiAvXFwpL30sXG4gICAgICB7YmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsIGVuZDogLzsvfVxuICAgIF0sXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbJ3NlbGYnXSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9ERUNMQVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46ICcoJyArIEZVTkNUSU9OX1RZUEVfUkUgKyAnW1xcXFwqJlxcXFxzXSspKycgKyBGVU5DVElPTl9USVRMRSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvW3s7PV0vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvW15cXHdcXHNcXComOjw+XS8sXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgeyAvLyB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY29uZnVzZWQgYXMgdGhlIGZ1bmN0aW9uIHRpdGxlXG4gICAgICAgIGJlZ2luOiBERUNMVFlQRV9BVVRPX1JFLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1RJVExFX01PREVdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgICAgICAgIC8vIENvdW50IG1hdGNoaW5nIHBhcmVudGhlc2VzLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFU1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIENQUF9QUklNSVRJVkVfVFlQRVMsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgUFJFUFJPQ0VTU09SXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjJywgJ2NjJywgJ2gnLCAnYysrJywgJ2grKycsICdocHAnLCAnaGgnLCAnaHh4JywgJ2N4eCddLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW10uY29uY2F0KFxuICAgICAgRVhQUkVTU0lPTl9DT05URVhULFxuICAgICAgRlVOQ1RJT05fREVDTEFSQVRJT04sXG4gICAgICBFWFBSRVNTSU9OX0NPTlRBSU5TLFxuICAgICAgW1xuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxcXFxzKjwnLCBlbmQ6ICc+JyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIENQUF9QUklNSVRJVkVfVFlQRVNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIHN0cnVjdCcsIGVuZDogL1t7OzpdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW46IC88LywgZW5kOiAvPi8sIGNvbnRhaW5zOiBbJ3NlbGYnXX0sIC8vIHNraXAgZ2VuZXJpYyBzdHVmZlxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSksXG4gICAgZXhwb3J0czoge1xuICAgICAgcHJlcHJvY2Vzc29yOiBQUkVQUk9DRVNTT1IsXG4gICAgICBzdHJpbmdzOiBTVFJJTkdTLFxuICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEU1xuICAgIH1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cblx0dmFyIEFSRFVJTk9fS1cgPSB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYm9vbGVhbiBieXRlIHdvcmQgU3RyaW5nJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnc2V0dXAgbG9vcCcgK1xuICAgICAgICAnS2V5Ym9hcmRDb250cm9sbGVyIE1vdXNlQ29udHJvbGxlciBTb2Z0d2FyZVNlcmlhbCAnICtcbiAgICAgICAgJ0V0aGVybmV0U2VydmVyIEV0aGVybmV0Q2xpZW50IExpcXVpZENyeXN0YWwgJyArXG4gICAgICAgICdSb2JvdENvbnRyb2wgR1NNVm9pY2VDYWxsIEV0aGVybmV0VURQIEVzcGxvcmFURlQgJyArXG4gICAgICAgICdIdHRwQ2xpZW50IFJvYm90TW90b3IgV2lGaUNsaWVudCBHU01TY2FubmVyICcgK1xuICAgICAgICAnRmlsZVN5c3RlbSBTY2hlZHVsZXIgR1NNU2VydmVyIFl1bkNsaWVudCBZdW5TZXJ2ZXIgJyArXG4gICAgICAgICdJUEFkZHJlc3MgR1NNQ2xpZW50IEdTTU1vZGVtIEtleWJvYXJkIEV0aGVybmV0ICcgK1xuICAgICAgICAnQ29uc29sZSBHU01CYW5kIEVzcGxvcmEgU3RlcHBlciBQcm9jZXNzICcgK1xuICAgICAgICAnV2lGaVVEUCBHU01fU01TIE1haWxib3ggVVNCSG9zdCBGaXJtYXRhIFBJbWFnZSAnICtcbiAgICAgICAgJ0NsaWVudCBTZXJ2ZXIgR1NNUElOIEZpbGVJTyBCcmlkZ2UgU2VyaWFsICcgK1xuICAgICAgICAnRUVQUk9NIFN0cmVhbSBNb3VzZSBBdWRpbyBTZXJ2byBGaWxlIFRhc2sgJyArXG4gICAgICAgICdHUFJTIFdpRmkgV2lyZSBURlQgR1NNIFNQSSBTRCAnICtcbiAgICAgICAgJ3J1blNoZWxsQ29tbWFuZEFzeW5jaHJvbm91c2x5IGFuYWxvZ1dyaXRlUmVzb2x1dGlvbiAnICtcbiAgICAgICAgJ3JldHJpZXZlQ2FsbGluZ051bWJlciBwcmludEZpcm13YXJlVmVyc2lvbiAnICtcbiAgICAgICAgJ2FuYWxvZ1JlYWRSZXNvbHV0aW9uIHNlbmREaWdpdGFsUG9ydFBhaXIgJyArXG4gICAgICAgICdub0xpc3Rlbk9uTG9jYWxob3N0IHJlYWRKb3lzdGlja0J1dHRvbiBzZXRGaXJtd2FyZVZlcnNpb24gJyArXG4gICAgICAgICdyZWFkSm95c3RpY2tTd2l0Y2ggc2Nyb2xsRGlzcGxheVJpZ2h0IGdldFZvaWNlQ2FsbFN0YXR1cyAnICtcbiAgICAgICAgJ3Njcm9sbERpc3BsYXlMZWZ0IHdyaXRlTWljcm9zZWNvbmRzIGRlbGF5TWljcm9zZWNvbmRzICcgK1xuICAgICAgICAnYmVnaW5UcmFuc21pc3Npb24gZ2V0U2lnbmFsU3RyZW5ndGggcnVuQXN5bmNocm9ub3VzbHkgJyArXG4gICAgICAgICdnZXRBc3luY2hyb25vdXNseSBsaXN0ZW5PbkxvY2FsaG9zdCBnZXRDdXJyZW50Q2FycmllciAnICtcbiAgICAgICAgJ3JlYWRBY2NlbGVyb21ldGVyIG1lc3NhZ2VBdmFpbGFibGUgc2VuZERpZ2l0YWxQb3J0cyAnICtcbiAgICAgICAgJ2xpbmVGb2xsb3dDb25maWcgY291bnRyeU5hbWVXcml0ZSBydW5TaGVsbENvbW1hbmQgJyArXG4gICAgICAgICdyZWFkU3RyaW5nVW50aWwgcmV3aW5kRGlyZWN0b3J5IHJlYWRUZW1wZXJhdHVyZSAnICtcbiAgICAgICAgJ3NldENsb2NrRGl2aWRlciByZWFkTGlnaHRTZW5zb3IgZW5kVHJhbnNtaXNzaW9uICcgK1xuICAgICAgICAnYW5hbG9nUmVmZXJlbmNlIGRldGFjaEludGVycnVwdCBjb3VudHJ5TmFtZVJlYWQgJyArXG4gICAgICAgICdhdHRhY2hJbnRlcnJ1cHQgZW5jcnlwdGlvblR5cGUgcmVhZEJ5dGVzVW50aWwgJyArXG4gICAgICAgICdyb2JvdE5hbWVXcml0ZSByZWFkTWljcm9waG9uZSByb2JvdE5hbWVSZWFkIGNpdHlOYW1lV3JpdGUgJyArXG4gICAgICAgICd1c2VyTmFtZVdyaXRlIHJlYWRKb3lzdGlja1kgcmVhZEpveXN0aWNrWCBtb3VzZVJlbGVhc2VkICcgK1xuICAgICAgICAnb3Blbk5leHRGaWxlIHNjYW5OZXR3b3JrcyBub0ludGVycnVwdHMgZGlnaXRhbFdyaXRlICcgK1xuICAgICAgICAnYmVnaW5TcGVha2VyIG1vdXNlUHJlc3NlZCBpc0FjdGlvbkRvbmUgbW91c2VEcmFnZ2VkICcgK1xuICAgICAgICAnZGlzcGxheUxvZ29zIG5vQXV0b3Njcm9sbCBhZGRQYXJhbWV0ZXIgcmVtb3RlTnVtYmVyICcgK1xuICAgICAgICAnZ2V0TW9kaWZpZXJzIGtleWJvYXJkUmVhZCB1c2VyTmFtZVJlYWQgd2FpdENvbnRpbnVlICcgK1xuICAgICAgICAncHJvY2Vzc0lucHV0IHBhcnNlQ29tbWFuZCBwcmludFZlcnNpb24gcmVhZE5ldHdvcmtzICcgK1xuICAgICAgICAnd3JpdGVNZXNzYWdlIGJsaW5rVmVyc2lvbiBjaXR5TmFtZVJlYWQgcmVhZE1lc3NhZ2UgJyArXG4gICAgICAgICdzZXREYXRhTW9kZSBwYXJzZVBhY2tldCBpc0xpc3RlbmluZyBzZXRCaXRPcmRlciAnICtcbiAgICAgICAgJ2JlZ2luUGFja2V0IGlzRGlyZWN0b3J5IG1vdG9yc1dyaXRlIGRyYXdDb21wYXNzICcgK1xuICAgICAgICAnZGlnaXRhbFJlYWQgY2xlYXJTY3JlZW4gc2VyaWFsRXZlbnQgcmlnaHRUb0xlZnQgJyArXG4gICAgICAgICdzZXRUZXh0U2l6ZSBsZWZ0VG9SaWdodCByZXF1ZXN0RnJvbSBrZXlSZWxlYXNlZCAnICtcbiAgICAgICAgJ2NvbXBhc3NSZWFkIGFuYWxvZ1dyaXRlIGludGVycnVwdHMgV2lGaVNlcnZlciAnICtcbiAgICAgICAgJ2Rpc2Nvbm5lY3QgcGxheU1lbG9keSBwYXJzZUZsb2F0IGF1dG9zY3JvbGwgJyArXG4gICAgICAgICdnZXRQSU5Vc2VkIHNldFBJTlVzZWQgc2V0VGltZW91dCBzZW5kQW5hbG9nICcgK1xuICAgICAgICAncmVhZFNsaWRlciBhbmFsb2dSZWFkIGJlZ2luV3JpdGUgY3JlYXRlQ2hhciAnICtcbiAgICAgICAgJ21vdG9yc1N0b3Aga2V5UHJlc3NlZCB0ZW1wb1dyaXRlIHJlYWRCdXR0b24gJyArXG4gICAgICAgICdzdWJuZXRNYXNrIGRlYnVnUHJpbnQgbWFjQWRkcmVzcyB3cml0ZUdyZWVuICcgK1xuICAgICAgICAncmFuZG9tU2VlZCBhdHRhY2hHUFJTIHJlYWRTdHJpbmcgc2VuZFN0cmluZyAnICtcbiAgICAgICAgJ3JlbW90ZVBvcnQgcmVsZWFzZUFsbCBtb3VzZU1vdmVkIGJhY2tncm91bmQgJyArXG4gICAgICAgICdnZXRYQ2hhbmdlIGdldFlDaGFuZ2UgYW5zd2VyQ2FsbCBnZXRSZXN1bHQgJyArXG4gICAgICAgICd2b2ljZUNhbGwgZW5kUGFja2V0IGNvbnN0cmFpbiBnZXRTb2NrZXQgd3JpdGVKU09OICcgK1xuICAgICAgICAnZ2V0QnV0dG9uIGF2YWlsYWJsZSBjb25uZWN0ZWQgZmluZFVudGlsIHJlYWRCeXRlcyAnICtcbiAgICAgICAgJ2V4aXRWYWx1ZSByZWFkR3JlZW4gd3JpdGVCbHVlIHN0YXJ0TG9vcCBJUEFkZHJlc3MgJyArXG4gICAgICAgICdpc1ByZXNzZWQgc2VuZFN5c2V4IHBhdXNlTW9kZSBnYXRld2F5SVAgc2V0Q3Vyc29yICcgK1xuICAgICAgICAnZ2V0T2VtS2V5IHR1bmVXcml0ZSBub0Rpc3BsYXkgbG9hZEltYWdlIHN3aXRjaFBJTiAnICtcbiAgICAgICAgJ29uUmVxdWVzdCBvblJlY2VpdmUgY2hhbmdlUElOIHBsYXlGaWxlIG5vQnVmZmVyICcgK1xuICAgICAgICAncGFyc2VJbnQgb3ZlcmZsb3cgY2hlY2tQSU4ga25vYlJlYWQgYmVnaW5URlQgJyArXG4gICAgICAgICdiaXRDbGVhciB1cGRhdGVJUiBiaXRXcml0ZSBwb3NpdGlvbiB3cml0ZVJHQiAnICtcbiAgICAgICAgJ2hpZ2hCeXRlIHdyaXRlUmVkIHNldFNwZWVkIHJlYWRCbHVlIG5vU3Ryb2tlICcgK1xuICAgICAgICAncmVtb3RlSVAgdHJhbnNmZXIgc2h1dGRvd24gaGFuZ0NhbGwgYmVnaW5TTVMgJyArXG4gICAgICAgICdlbmRXcml0ZSBhdHRhY2hlZCBtYWludGFpbiBub0N1cnNvciBjaGVja1JlZyAnICtcbiAgICAgICAgJ2NoZWNrUFVLIHNoaWZ0T3V0IGlzVmFsaWQgc2hpZnRJbiBwdWxzZUluICcgK1xuICAgICAgICAnY29ubmVjdCBwcmludGxuIGxvY2FsSVAgcGluTW9kZSBnZXRJTUVJICcgK1xuICAgICAgICAnZGlzcGxheSBub0JsaW5rIHByb2Nlc3MgZ2V0QmFuZCBydW5uaW5nIGJlZ2luU0QgJyArXG4gICAgICAgICdkcmF3Qk1QIGxvd0J5dGUgc2V0QmFuZCByZWxlYXNlIGJpdFJlYWQgcHJlcGFyZSAnICtcbiAgICAgICAgJ3BvaW50VG8gcmVhZFJlZCBzZXRNb2RlIG5vRmlsbCByZW1vdmUgbGlzdGVuICcgK1xuICAgICAgICAnc3Ryb2tlIGRldGFjaCBhdHRhY2ggbm9Ub25lIGV4aXN0cyBidWZmZXIgJyArXG4gICAgICAgICdoZWlnaHQgYml0U2V0IGNpcmNsZSBjb25maWcgY3Vyc29yIHJhbmRvbSAnICtcbiAgICAgICAgJ0lScmVhZCBzZXRETlMgZW5kU01TIGdldEtleSBtaWNyb3MgJyArXG4gICAgICAgICdtaWxsaXMgYmVnaW4gcHJpbnQgd3JpdGUgcmVhZHkgZmx1c2ggd2lkdGggJyArXG4gICAgICAgICdpc1BJTiBibGluayBjbGVhciBwcmVzcyBta2RpciBybWRpciBjbG9zZSAnICtcbiAgICAgICAgJ3BvaW50IHlpZWxkIGltYWdlIEJTU0lEIGNsaWNrIGRlbGF5ICcgK1xuICAgICAgICAncmVhZCB0ZXh0IG1vdmUgcGVlayBiZWVwIHJlY3QgbGluZSBvcGVuICcgK1xuICAgICAgICAnc2VlayBmaWxsIHNpemUgdHVybiBzdG9wIGhvbWUgZmluZCAnICtcbiAgICAgICAgJ3N0ZXAgdG9uZSBzcXJ0IFJTU0kgU1NJRCAnICtcbiAgICAgICAgJ2VuZCBiaXQgdGFuIGNvcyBzaW4gcG93IG1hcCBhYnMgbWF4ICcgK1xuICAgICAgICAnbWluIGdldCBydW4gcHV0JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdESUdJVEFMX01FU1NBR0UgRklSTUFUQV9TVFJJTkcgQU5BTE9HX01FU1NBR0UgJyArXG4gICAgICAgICdSRVBPUlRfRElHSVRBTCBSRVBPUlRfQU5BTE9HIElOUFVUX1BVTExVUCAnICtcbiAgICAgICAgJ1NFVF9QSU5fTU9ERSBJTlRFUk5BTDJWNTYgU1lTVEVNX1JFU0VUIExFRF9CVUlMVElOICcgK1xuICAgICAgICAnSU5URVJOQUwxVjEgU1lTRVhfU1RBUlQgSU5URVJOQUwgRVhURVJOQUwgJyArXG4gICAgICAgICdERUZBVUxUIE9VVFBVVCBJTlBVVCBISUdIIExPVydcbiAgfTtcblxuICB2YXIgQVJEVUlOTyA9IGhsanMucmVxdWlyZUxhbmd1YWdlKCdjcHAnKS5yYXdEZWZpbml0aW9uKCk7XG5cbiAgdmFyIGt3cyA9IEFSRFVJTk8ua2V5d29yZHM7XG5cbiAga3dzLmtleXdvcmQgKz0gJyAnICsgQVJEVUlOT19LVy5rZXl3b3JkO1xuICBrd3MubGl0ZXJhbCArPSAnICcgKyBBUkRVSU5PX0tXLmxpdGVyYWw7XG4gIGt3cy5idWlsdF9pbiArPSAnICcgKyBBUkRVSU5PX0tXLmJ1aWx0X2luO1xuXG4gIHJldHVybiBBUkRVSU5PO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgICAvL2xvY2FsIGxhYmVsczogJT9bRkJdP1tBVF0/XFxkezEsMn1cXHcrXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbJ2FybSddLFxuICAgIGxleGVtZXM6ICdcXFxcLj8nICsgaGxqcy5JREVOVF9SRSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbWV0YTpcbiAgICAgICAgLy9HTlUgcHJlcHJvY3NcbiAgICAgICAgJy4yYnl0ZSAuNGJ5dGUgLmFsaWduIC5hc2NpaSAuYXNjaXogLmJhbGlnbiAuYnl0ZSAuY29kZSAuZGF0YSAuZWxzZSAuZW5kIC5lbmRpZiAuZW5kbSAuZW5kciAuZXF1IC5lcnIgLmV4aXRtIC5leHRlcm4gLmdsb2JhbCAuaHdvcmQgLmlmIC5pZmRlZiAuaWZuZGVmIC5pbmNsdWRlIC5pcnAgLmxvbmcgLm1hY3JvIC5yZXB0IC5yZXEgLnNlY3Rpb24gLnNldCAuc2tpcCAuc3BhY2UgLnRleHQgLndvcmQgLmFybSAudGh1bWIgLmNvZGUxNiAuY29kZTMyIC5mb3JjZV90aHVtYiAudGh1bWJfZnVuYyAubHRvcmcgJytcbiAgICAgICAgLy9BUk0gZGlyZWN0aXZlc1xuICAgICAgICAnQUxJQVMgQUxJR04gQVJNIEFSRUEgQVNTRVJUIEFUVFIgQ04gQ09ERSBDT0RFMTYgQ09ERTMyIENPTU1PTiBDUCBEQVRBIERDQiBEQ0QgRENEVSBEQ0RPIERDRkQgRENGRFUgRENJIERDUSBEQ1FVIERDVyBEQ1dVIEROIEVMSUYgRUxTRSBFTkQgRU5ERlVOQyBFTkRJRiBFTkRQIEVOVFJZIEVRVSBFWFBPUlQgRVhQT1JUQVMgRVhURVJOIEZJRUxEIEZJTEwgRlVOQ1RJT04gR0JMQSBHQkxMIEdCTFMgR0VUIEdMT0JBTCBJRiBJTVBPUlQgSU5DQklOIElOQ0xVREUgSU5GTyBLRUVQIExDTEEgTENMTCBMQ0xTIExUT1JHIE1BQ1JPIE1BUCBNRU5EIE1FWElUIE5PRlAgT1BUIFBSRVNFUlZFOCBQUk9DIFFOIFJFQURPTkxZIFJFTE9DIFJFUVVJUkUgUkVRVUlSRTggUkxJU1QgRk4gUk9VVCBTRVRBIFNFVEwgU0VUUyBTTiBTUEFDRSBTVUJUIFRIVU1CIFRIVU1CWCBUVEwgV0hJTEUgV0VORCAnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdyMCByMSByMiByMyByNCByNSByNiByNyByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnKyAvL3N0YW5kYXJkIHJlZ2lzdGVyc1xuICAgICAgICAncGMgbHIgc3AgaXAgc2wgc2IgZnAgJysgLy90eXBpY2FsIHJlZ3MgcGx1cyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICdhMSBhMiBhMyBhNCB2MSB2MiB2MyB2NCB2NSB2NiB2NyB2OCBmMCBmMSBmMiBmMyBmNCBmNSBmNiBmNyAnKyAvL21vcmUgcmVncyBhbmQgZnBcbiAgICAgICAgJ3AwIHAxIHAyIHAzIHA0IHA1IHA2IHA3IHA4IHA5IHAxMCBwMTEgcDEyIHAxMyBwMTQgcDE1ICcrIC8vY29wcm9jZXNzb3IgcmVnc1xuICAgICAgICAnYzAgYzEgYzIgYzMgYzQgYzUgYzYgYzcgYzggYzkgYzEwIGMxMSBjMTIgYzEzIGMxNCBjMTUgJysgLy9tb3JlIGNvcHJvY1xuICAgICAgICAncTAgcTEgcTIgcTMgcTQgcTUgcTYgcTcgcTggcTkgcTEwIHExMSBxMTIgcTEzIHExNCBxMTUgJysgLy9hZHZhbmNlZCBTSU1EIE5FT04gcmVnc1xuXG4gICAgICAgIC8vcHJvZ3JhbSBzdGF0dXMgcmVnaXN0ZXJzXG4gICAgICAgICdjcHNyX2MgY3Bzcl94IGNwc3JfcyBjcHNyX2YgY3Bzcl9jeCBjcHNyX2N4cyBjcHNyX3hzIGNwc3JfeHNmIGNwc3Jfc2YgY3Bzcl9jeHNmICcrXG4gICAgICAgICdzcHNyX2Mgc3Bzcl94IHNwc3JfcyBzcHNyX2Ygc3Bzcl9jeCBzcHNyX2N4cyBzcHNyX3hzIHNwc3JfeHNmIHNwc3Jfc2Ygc3Bzcl9jeHNmICcrXG5cbiAgICAgICAgLy9ORU9OIGFuZCBWRlAgcmVnaXN0ZXJzXG4gICAgICAgICdzMCBzMSBzMiBzMyBzNCBzNSBzNiBzNyBzOCBzOSBzMTAgczExIHMxMiBzMTMgczE0IHMxNSAnK1xuICAgICAgICAnczE2IHMxNyBzMTggczE5IHMyMCBzMjEgczIyIHMyMyBzMjQgczI1IHMyNiBzMjcgczI4IHMyOSBzMzAgczMxICcrXG4gICAgICAgICdkMCBkMSBkMiBkMyBkNCBkNSBkNiBkNyBkOCBkOSBkMTAgZDExIGQxMiBkMTMgZDE0IGQxNSAnK1xuICAgICAgICAnZDE2IGQxNyBkMTggZDE5IGQyMCBkMjEgZDIyIGQyMyBkMjQgZDI1IGQyNiBkMjcgZDI4IGQyOSBkMzAgZDMxICcgK1xuXG4gICAgICAgICd7UEN9IHtWQVJ9IHtUUlVFfSB7RkFMU0V9IHtPUFR9IHtDT05GSUd9IHtFTkRJQU59IHtDT0RFU0laRX0ge0NQVX0ge0ZQVX0ge0FSQ0hJVEVDVFVSRX0ge1BDU1RPUkVPRkZTRVR9IHtBUk1BU01fVkVSU0lPTn0ge0lOVEVSfSB7Uk9QSX0ge1JXUEl9IHtTV1NUfSB7Tk9TV1NUfSAuIEAnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYignKyAgICAgLy9tbmVtb25pY3NcbiAgICAgICAgICAgICdhZGN8JytcbiAgICAgICAgICAgICcocWQ/fHNoP3x1W3FoXT8pP2FkZCg4fDE2KT98dXNhZGE/OHwocXxzaD98dVtxaF0/KT8oYXN8c2EpeHwnK1xuICAgICAgICAgICAgJ2FuZHxhZHJsP3xzYmN8cnNbYmNdfGFzcnxiW2x4XT98Ymx4fGJ4anxjYm4/enx0YltiaF18YmljfCcrXG4gICAgICAgICAgICAnYmZjfGJmaXxbc3VdYmZ4fGJrcHR8Y2RwMj98Y2x6fGNscmV4fGNtcHxjbW58Y3BzaVtlZF18Y3BzfCcrXG4gICAgICAgICAgICAnc2V0ZW5kfGRiZ3xkbWJ8ZHNifGVvcnxpc2J8aXRbdGVdezAsM318bHNsfGxzcnxyb3J8cnJ4fCcrXG4gICAgICAgICAgICAnbGRtKChbaWRdW2FiXSl8Zltkc10pP3xsZHIoKHN8ZXgpP1tiaGRdKT98bW92dD98bXZufG1yYXxtYXJ8JytcbiAgICAgICAgICAgICdtdWx8W3VzXW11bGx8c211bFtid3RdW2J0XXxzbXVbYXNdZHxzbW11bHxzbW1sYXwnK1xuICAgICAgICAgICAgJ21sYXx1bWxhYWx8c21sYWw/KFt3YnRdW2J0XXxkKXxtbHN8c21sc2w/W2RzXXxzbWN8c3ZjfHNldnwnK1xuICAgICAgICAgICAgJ21pYShbYnRdezJ9fHBoKT98bXJyP2MyP3xtY3JyMj98bXJzfG1zcnxvcnJ8b3JufHBraCh0YnxidCl8cmJpdHwnK1xuICAgICAgICAgICAgJ3JldigxNnxzaCk/fHNlbHxbc3Vdc2F0KDE2KT98bm9wfHBvcHxwdXNofHJmZShbaWRdW2FiXSk/fCcrXG4gICAgICAgICAgICAnc3RtKFtpZF1bYWJdKT98c3RyKGV4KT9bYmhkXT98KHFkPyk/c3VifChzaD98cXx1W3FoXT8pP3N1Yig4fDE2KXwnK1xuICAgICAgICAgICAgJ1tzdV14dChhP2h8YT9iKDE2KT8pfHNycyhbaWRdW2FiXSk/fHN3cGI/fHN3aXxzbWl8dHN0fHRlcXwnK1xuICAgICAgICAgICAgJ3dmZXx3Zml8eWllbGQnK1xuICAgICAgICAnKScrXG4gICAgICAgICcoZXF8bmV8Y3N8Y2N8bWl8cGx8dnN8dmN8aGl8bHN8Z2V8bHR8Z3R8bGV8YWx8aHN8bG8pPycrIC8vY29uZGl0aW9uIGNvZGVzXG4gICAgICAgICdbc3B0cnhdPycgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGVnYWwgcG9zdGZpeGVzXG4gICAgICAgIGVuZDogJ1xcXFxzJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnWztAXScsICckJywge3JlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnW15cXFxcXFxcXF1cXCcnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcfCcsIGVuZDogJ1xcXFx8JyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAge2JlZ2luOiAnWyMkPV0/MHhbMC05YS1mXSsnfSwgLy9oZXhcbiAgICAgICAgICAgIHtiZWdpbjogJ1sjJD1dPzBiWzAxXSsnfSwgICAgIC8vYmluXG4gICAgICAgICAgICB7YmVnaW46ICdbIyQ9XVxcXFxkKyd9LCAgICAgICAgLy9saXRlcmFsXG4gICAgICAgICAgICB7YmVnaW46ICdcXFxcYlxcXFxkKyd9ICAgICAgICAgICAvL2JhcmUgbnVtYmVyXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJ15bYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSsnfSwgLy9BUk0gc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdeXFxcXHMqW2Etel9cXFxcLlxcXFwkXVthLXowLTlfXFxcXC5cXFxcJF0rOid9LCAvL0dOVSBBUk0gc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdbPSNdXFxcXHcrJyB9ICAvL2xhYmVsIHJlZmVyZW5jZVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgWE1MX0lERU5UX1JFID0gJ1tBLVphLXowLTlcXFxcLl86LV0rJztcbiAgdmFyIFhNTF9FTlRJVElFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnJlthLXpdKzt8JiNbMC05XSs7fCYjeFthLWYwLTldKzsnXG4gIH07XG4gIHZhciBYTUxfTUVUQV9LRVlXT1JEUyA9IHtcblx0ICBiZWdpbjogJ1xcXFxzJyxcblx0ICBjb250YWluczpbXG5cdCAgICB7XG5cdCAgICAgIGNsYXNzTmFtZTogJ21ldGEta2V5d29yZCcsXG5cdCAgICAgIGJlZ2luOiAnIz9bYS16X11bYS16MS05Xy1dKycsXG5cdCAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICB9XG5cdCAgXVxuICB9O1xuICB2YXIgWE1MX01FVEFfUEFSX0tFWVdPUkRTID0gaGxqcy5pbmhlcml0KFhNTF9NRVRBX0tFWVdPUkRTLCB7YmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ30pO1xuICB2YXIgQVBPU19NRVRBX1NUUklOR19NT0RFID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pO1xuICB2YXIgUVVPVEVfTUVUQV9TVFJJTkdfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSk7XG4gIHZhciBUQUdfSU5URVJOQUxTID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGlsbGVnYWw6IC88LyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiBYTUxfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89XFxzKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvLCBjb250YWluczogW1hNTF9FTlRJVElFU119LFxuICAgICAgICAgICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy8sIGNvbnRhaW5zOiBbWE1MX0VOVElUSUVTXX0sXG4gICAgICAgICAgICAgIHtiZWdpbjogL1teXFxzXCInPTw+YF0rL31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydodG1sJywgJ3hodG1sJywgJ3JzcycsICdhdG9tJywgJ3hqYicsICd4c2QnLCAneHNsJywgJ3BsaXN0JywgJ3dzZicsICdzdmcnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJzwhW2Etel0nLCBlbmQ6ICc+JyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgY29udGFpbnM6IFtcblx0XHRcdFx0ICBYTUxfTUVUQV9LRVlXT1JEUyxcblx0XHRcdFx0ICBRVU9URV9NRVRBX1NUUklOR19NT0RFLFxuXHRcdFx0XHQgIEFQT1NfTUVUQV9TVFJJTkdfTU9ERSxcblx0XHRcdFx0XHRYTUxfTUVUQV9QQVJfS0VZV09SRFMsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdCAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcblx0XHRcdFx0XHQgIGNvbnRhaW5zOltcblx0XHRcdFx0XHRcdCAge1xuXHRcdFx0XHRcdCAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuXHRcdFx0XHRcdCAgICAgIGJlZ2luOiAnPCFbYS16XScsIGVuZDogJz4nLFxuXHRcdFx0XHRcdCAgICAgIGNvbnRhaW5zOiBbXG5cdFx0XHRcdFx0ICAgICAgICBYTUxfTUVUQV9LRVlXT1JEUyxcblx0XHRcdFx0XHQgICAgICAgIFhNTF9NRVRBX1BBUl9LRVlXT1JEUyxcblx0XHRcdFx0XHQgICAgICAgIFFVT1RFX01FVEFfU1RSSU5HX01PREUsXG5cdFx0XHRcdFx0ICAgICAgICBBUE9TX01FVEFfU1RSSU5HX01PREVcblx0XHRcdFx0XHRcdCAgICBdXG5cdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgIF1cblx0XHRcdFx0ICB9XG5cdFx0XHRcdF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc8IS0tJyxcbiAgICAgICAgJy0tPicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPFxcXFwhXFxcXFtDREFUQVxcXFxbJywgZW5kOiAnXFxcXF1cXFxcXT4nLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgWE1MX0VOVElUSUVTLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC88XFw/eG1sLywgZW5kOiAvXFw/Pi8sIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPFxcPyhwaHApPy8sIGVuZDogL1xcPz4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BocCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgcGhwIGNsb3NpbmcgdGFnID8+IHRvIGNsb3NlIHRoZSBQSFAgYmxvY2sgd2hlblxuICAgICAgICAgIC8vIGluc2lkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBibG9ja3M6XG4gICAgICAgICAge2JlZ2luOiAnL1xcXFwqJywgZW5kOiAnXFxcXCovJywgc2tpcDogdHJ1ZX0sXG4gICAgICAgICAge2JlZ2luOiAnYlwiJywgZW5kOiAnXCInLCBza2lwOiB0cnVlfSxcbiAgICAgICAgICB7YmVnaW46ICdiXFwnJywgZW5kOiAnXFwnJywgc2tpcDogdHJ1ZX0sXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGwsIGNsYXNzTmFtZTogbnVsbCwgY29udGFpbnM6IG51bGwsIHNraXA6IHRydWV9KSxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGwsIGNsYXNzTmFtZTogbnVsbCwgY29udGFpbnM6IG51bGwsIHNraXA6IHRydWV9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICAvKlxuICAgICAgICBUaGUgbG9va2FoZWFkIHBhdHRlcm4gKD89Li4uKSBlbnN1cmVzIHRoYXQgJ2JlZ2luJyBvbmx5IG1hdGNoZXNcbiAgICAgICAgJzxzdHlsZScgYXMgYSBzaW5nbGUgd29yZCwgZm9sbG93ZWQgYnkgYSB3aGl0ZXNwYWNlIG9yIGFuXG4gICAgICAgIGVuZGluZyBicmFrZXQuIFRoZSAnJCcgaXMgbmVlZGVkIGZvciB0aGUgbGV4ZW1lIHRvIGJlIHJlY29nbml6ZWRcbiAgICAgICAgYnkgaGxqcy5zdWJNb2RlKCkgdGhhdCB0ZXN0cyBsZXhlbWVzIG91dHNpZGUgdGhlIHN0cmVhbS5cbiAgICAgICAgKi9cbiAgICAgICAgYmVnaW46ICc8c3R5bGUoPz1cXFxcc3w+KScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge25hbWU6ICdzdHlsZSd9LFxuICAgICAgICBjb250YWluczogW1RBR19JTlRFUk5BTFNdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICc8L3N0eWxlPicsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogWydjc3MnLCAneG1sJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZSA8c3R5bGUgdGFnIGFib3V0IHRoZSBsb29rYWhlYWQgcGF0dGVyblxuICAgICAgICBiZWdpbjogJzxzY3JpcHQoPz1cXFxcc3w+KScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge25hbWU6ICdzY3JpcHQnfSxcbiAgICAgICAgY29udGFpbnM6IFtUQUdfSU5URVJOQUxTXSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFw8XFwvc2NyaXB0XFw+JywgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiBbJ2FjdGlvbnNjcmlwdCcsICdqYXZhc2NyaXB0JywgJ2hhbmRsZWJhcnMnLCAneG1sJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICc8Lz8nLCBlbmQ6ICcvPz4nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLCBiZWdpbjogL1teXFwvPjxcXHNdKy8sIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgVEFHX0lOVEVSTkFMU1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2Fkb2MnXSxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gYmxvY2sgY29tbWVudFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXi97NCx9XFxcXG4nLFxuICAgICAgICAnXFxcXG4vezQsfSQnLFxuICAgICAgICAvLyBjYW4gYWxzbyBiZSBkb25lIGFzLi4uXG4gICAgICAgIC8vJ14vezQsfSQnLFxuICAgICAgICAvLydeL3s0LH0kJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8vIGxpbmUgY29tbWVudFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXi8vJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvLyB0aXRsZVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFwuXFxcXHcuKiQnXG4gICAgICB9LFxuICAgICAgLy8gZXhhbXBsZSwgYWRtb25pdGlvbiAmIHNpZGViYXIgYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXls9XFxcXCpdezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5eWz1cXFxcKl17NCx9JCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBoZWFkaW5nc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdeKD17MSw1fSkgLis/KCBcXFxcMSk/JCd9LFxuICAgICAgICAgIHtiZWdpbjogJ15bXlxcXFxbXFxcXF1cXFxcbl0rP1xcXFxuWz1cXFxcLX5cXFxcXlxcXFwrXXsyLH0kJ30sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBkb2N1bWVudCBhdHRyaWJ1dGVzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ146Lis/OicsXG4gICAgICAgIGVuZDogJ1xcXFxzJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGJsb2NrIGF0dHJpYnV0ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxbLis/XFxcXF0kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gcXVvdGVibG9ja3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgICAgICBiZWdpbjogJ15fezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5fezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gbGlzdGluZyBhbmQgbGl0ZXJhbCBibG9ja3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnXltcXFxcLVxcXFwuXXs0LH1cXFxcbicsXG4gICAgICAgIGVuZDogJ1xcXFxuW1xcXFwtXFxcXC5dezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gcGFzc3Rocm91Z2ggYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlxcXFwrezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5cXFxcK3s0LH0kJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJzwnLCBlbmQ6ICc+JyxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGxpc3RzIChjYW4gb25seSBjYXB0dXJlIGluZGljYXRvcnMpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAgIGJlZ2luOiAnXihcXFxcKit8XFxcXC0rfFxcXFwuK3xbXlxcXFxuXSs/OjopXFxcXHMrJ1xuICAgICAgfSxcbiAgICAgIC8vIGFkbW9uaXRpb25cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdeKE5PVEV8VElQfElNUE9SVEFOVHxXQVJOSU5HfENBVVRJT04pOlxcXFxzKycsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBpbmxpbmUgc3Ryb25nXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cm9uZycsXG4gICAgICAgIC8vIG11c3Qgbm90IGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyIG9yIGJlIGZvbGxvd2VkIGJ5IGFuIGFzdGVyaXNrIG9yIHNwYWNlXG4gICAgICAgIGJlZ2luOiAnXFxcXEJcXFxcKig/IVtcXFxcKlxcXFxzXSknLFxuICAgICAgICBlbmQ6ICcoXFxcXG57Mn18XFxcXCopJyxcbiAgICAgICAgLy8gYWxsb3cgZXNjYXBlZCBhc3RlcmlzayBmb2xsb3dlZCBieSB3b3JkIGNoYXJcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxcXFxcKlxcXFx3JyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBlbXBoYXNpc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAgIC8vIG11c3Qgbm90IGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyIG9yIGJlIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIHF1b3RlIG9yIHNwYWNlXG4gICAgICAgIGJlZ2luOiAnXFxcXEJcXCcoPyFbXFwnXFxcXHNdKScsXG4gICAgICAgIGVuZDogJyhcXFxcbnsyfXxcXCcpJyxcbiAgICAgICAgLy8gYWxsb3cgZXNjYXBlZCBzaW5nbGUgcXVvdGUgZm9sbG93ZWQgYnkgd29yZCBjaGFyXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcXFxcXFxcJ1xcXFx3JyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaW5saW5lIGVtcGhhc2lzIChhbHQpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgICAgLy8gbXVzdCBub3QgZm9sbG93IGEgd29yZCBjaGFyYWN0ZXIgb3IgYmUgZm9sbG93ZWQgYnkgYW4gdW5kZXJsaW5lIG9yIHNwYWNlXG4gICAgICAgIGJlZ2luOiAnXyg/IVtfXFxcXHNdKScsXG4gICAgICAgIGVuZDogJyhcXFxcbnsyfXxfKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBzbWFydCBxdW90ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IFwiYGAuKz8nJ1wifSxcbiAgICAgICAgICB7YmVnaW46IFwiYC4rPydcIn1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBjb2RlIHNuaXBwZXRzIChUT0RPIHNob3VsZCBnZXQgc2FtZSB0cmVhdG1lbnQgYXMgc3Ryb25nIGFuZCBlbXBoYXNpcylcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnKGAuKz9gfFxcXFwrLis/XFxcXCspJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaW5kZW50ZWQgbGl0ZXJhbCBibG9ja1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb2RlJyxcbiAgICAgICAgYmVnaW46ICdeWyBcXFxcdF0nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaG9yaXpvbnRhbCBydWxlc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXCd7Myx9WyBcXFxcdF0qJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBpbWFnZXMgYW5kIGxpbmtzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKGxpbms6KT8oaHR0cHxodHRwc3xmdHB8ZmlsZXxpcmN8aW1hZ2U6Pyk6XFxcXFMrXFxcXFsuKj9cXFxcXScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKGxpbmt8aW1hZ2U6Pyk6JyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFx3JyxcbiAgICAgICAgICAgIGVuZDogJ1teXFxcXFtdKycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxbJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID1cbiAgICAnZmFsc2Ugc3luY2hyb25pemVkIGludCBhYnN0cmFjdCBmbG9hdCBwcml2YXRlIGNoYXIgYm9vbGVhbiBzdGF0aWMgbnVsbCBpZiBjb25zdCAnICtcbiAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkICcgK1xuICAgICdlbnVtIGVsc2UgZXh0ZW5kcyBpbXBsZW1lbnRzIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgJyArXG4gICAgJ2Fzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByaXZpbGVnZWQgJyArXG4gICAgJ2FzcGVjdE9mIGFkdmljZWV4ZWN1dGlvbiBwcm9jZWVkIGNmbG93YmVsb3cgY2Zsb3cgaW5pdGlhbGl6YXRpb24gcHJlaW5pdGlhbGl6YXRpb24gJyArXG4gICAgJ3N0YXRpY2luaXRpYWxpemF0aW9uIHdpdGhpbmNvZGUgdGFyZ2V0IHdpdGhpbiBleGVjdXRpb24gZ2V0V2l0aGluVHlwZU5hbWUgaGFuZGxlciAnICtcbiAgICAndGhpc0pvaW5Qb2ludCB0aGlzSm9pblBvaW50U3RhdGljUGFydCB0aGlzRW5jbG9zaW5nSm9pblBvaW50U3RhdGljUGFydCBkZWNsYXJlIHBhcmVudHMgJytcbiAgICAnd2FybmluZyBlcnJvciBzb2Z0IHByZWNlZGVuY2UgdGhpc0FzcGVjdEluc3RhbmNlJztcbiAgdmFyIFNIT1JUS0VZUyA9ICdnZXQgc2V0IGFyZ3MgY2FsbCc7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHMgOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsIDogLzxcXC98Iy8sXG4gICAgY29udGFpbnMgOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gZWF0IHVwIEAncyBpbiBlbWFpbHMgdG8gcHJldmVudCB0aGVtIHRvIGJlIHJlY29nbml6ZWQgYXMgZG9jdGFnc1xuICAgICAgICAgICAgICBiZWdpbjogL1xcdytALywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWUgOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW4gOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lIDogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkcyA6ICdhc3BlY3QnLFxuICAgICAgICBlbmQgOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kIDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbCA6IC9bOjtcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzIDogJ2V4dGVuZHMgaW1wbGVtZW50cyBwZXJ0eXBld2l0aGluIHBlcnRoaXMgcGVydGFyZ2V0IHBlcmNmbG93YmVsb3cgcGVyY2Zsb3cgaXNzaW5nbGV0b24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbiA6IC9cXChbXlxcKV0qLyxcbiAgICAgICAgICAgIGVuZCA6IC9bKV0rLyxcbiAgICAgICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMgKyAnICcgKyBTSE9SVEtFWVMsXG4gICAgICAgICAgICBleGNsdWRlRW5kIDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZSA6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHMgOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgZW5kIDogL1t7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZCA6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAga2V5d29yZHMgOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgaWxsZWdhbCA6IC9bOlwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtiZWdpbktleXdvcmRzIDogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEFzcGVjdEogQ29uc3RydWN0c1xuICAgICAgICBiZWdpbktleXdvcmRzIDogJ3BvaW50Y3V0IGFmdGVyIGJlZm9yZSBhcm91bmQgdGhyb3dpbmcgcmV0dXJuaW5nJyxcbiAgICAgICAgZW5kIDogL1spXS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQgOiBmYWxzZSxcbiAgICAgICAgaWxsZWdhbCA6IC9bXCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW4gOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW4gOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnMgOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbiA6IC9bOl0vLFxuICAgICAgICByZXR1cm5CZWdpbiA6IHRydWUsXG4gICAgICAgIGVuZCA6IC9beztdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlRW5kIDogZmFsc2UsXG4gICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMsXG4gICAgICAgIGlsbGVnYWwgOiAvW1wiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luIDogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMgKyAnICcgKyBTSE9SVEtFWVMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBwcmV2ZW50cyAnbmV3IE5hbWUoLi4uKSwgb3IgdGhyb3cgLi4uJyBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHMgOiAnbmV3IHRocm93JyxcbiAgICAgICAgcmVsZXZhbmNlIDogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGNsYXNzIGlzIGEgYml0IGRpZmZlcmVudCBmb3IgQXNwZWN0SiBjb21wYXJlZCB0byB0aGUgSmF2YSBsYW5ndWFnZVxuICAgICAgICBjbGFzc05hbWUgOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbiA6IC9cXHcrICtcXHcrKFxcLik/XFx3K1xccypcXChbXlxcKV0qXFwpXFxzKigodGhyb3dzKVtcXHdcXHMsXSspP1tcXHs7XS8sXG4gICAgICAgIHJldHVybkJlZ2luIDogdHJ1ZSxcbiAgICAgICAgZW5kIDogL1t7Oz1dLyxcbiAgICAgICAga2V5d29yZHMgOiBLRVlXT1JEUyxcbiAgICAgICAgZXhjbHVkZUVuZCA6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luIDogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luIDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zIDogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lIDogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbiA6IC9cXCgvLCBlbmQgOiAvXFwpLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMsXG4gICAgICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIC8vIGFubm90YXRpb24gaXMgYWxzbyB1c2VkIGluIHRoaXMgbGFuZ3VhZ2VcbiAgICAgICAgY2xhc3NOYW1lIDogJ21ldGEnLFxuICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCQUNLVElDS19FU0NBUEUgPSB7XG4gICAgYmVnaW46ICdgW1xcXFxzXFxcXFNdJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbICdhaGsnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdCcmVhayBDb250aW51ZSBDcml0aWNhbCBFeGl0IEV4aXRBcHAgR29zdWIgR290byBOZXcgT25FeGl0IFBhdXNlIHJldHVybiBTZXRCYXRjaExpbmVzIFNldFRpbWVyIFN1c3BlbmQgVGhyZWFkIFRocm93IFVudGlsIGFoa19pZCBhaGtfY2xhc3MgYWhrX3BpZCBhaGtfZXhlIGFoa19ncm91cCcsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBOT1QgQU5EIE9SJyxcbiAgICAgIGJ1aWx0X2luOiAnQ29tU3BlYyBDbGlwYm9hcmQgQ2xpcGJvYXJkQWxsIEVycm9yTGV2ZWwnLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJBQ0tUSUNLX0VTQ0FQRSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y29udGFpbnM6IFtCQUNLVElDS19FU0NBUEVdfSksXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsIC8vc3Vic3Qgd291bGQgYmUgdGhlIG1vc3QgYWNjdXJhdGUgaG93ZXZlciBmYWlscyB0aGUgcG9pbnQgb2YgaGlnaGxpZ2h0aW5nLiB2YXJpYWJsZSBpcyBjb21wYXJhYmx5IHRoZSBtb3N0IGFjY3VyYXRlIHRoYXQgYWN0dWFsbHkgaGFzIHNvbWUgZWZmZWN0XG4gICAgICAgIGJlZ2luOiAnJVthLXpBLVowLTkjXyRAXSslJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcdytcXFxccyooLHwlKSdcbiAgICAgICAgLy9JIGRvbid0IHJlYWxseSBrbm93IGlmIHRoaXMgaXMgdG90YWxseSByZWxldmFudFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLCAvL3N5bWJvbCB3b3VsZCBiZSBtb3N0IGFjY3VyYXRlIGhvd2V2ZXIgaXMgaGlnbGlnaHRlZCBqdXN0IGxpa2UgYnVpbHRfaW4gYW5kIHRoYXQgbWFrZXMgdXAgYSBsb3Qgb2YgQXV0b0hvdGtleSBjb2RlXG5cdFx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9tZWFuaW5nIHRoYXQgaXQgd291bGQgZmFpbCB0byBoaWdobGlnaHQgYW55dGhpbmdcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdeW15cXFxcblwiO10rOjooPyE9KSd9LFxuICAgICAgICAgIHtiZWdpbjogJ15bXlxcXFxuXCI7XSs6KD8hPSknLCByZWxldmFuY2U6IDB9IC8vIHplcm8gcmVsZXZhbmNlIGFzIGl0IGNhdGNoZXMgYSBsb3Qgb2YgdGhpbmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9sbG93ZWQgYnkgYSBzaW5nbGUgJzonIGluIG1hbnkgbGFuZ3VhZ2VzXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqI1xcXFx3KycsIGVuZDonJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblx0ICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ0FfW2EtekEtWjAtOV0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY29uc2VjdXRpdmUgY29tbWFzLCBub3QgZm9yIGhpZ2hsaWdodGluZyBidXQganVzdCBmb3IgcmVsZXZhbmNlXG4gICAgICAgIGJlZ2luOiAnLFxcXFxzKiwnXG4gICAgICB9XG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBLRVlXT1JEUyA9ICdCeVJlZiBDYXNlIENvbnN0IENvbnRpbnVlQ2FzZSBDb250aW51ZUxvb3AgJyArXG4gICAgICAgICdEZWZhdWx0IERpbSBEbyBFbHNlIEVsc2VJZiBFbmRGdW5jIEVuZElmIEVuZFNlbGVjdCAnICtcbiAgICAgICAgJ0VuZFN3aXRjaCBFbmRXaXRoIEVudW0gRXhpdCBFeGl0TG9vcCBGb3IgRnVuYyAnICtcbiAgICAgICAgJ0dsb2JhbCBJZiBJbiBMb2NhbCBOZXh0IFJlRGltIFJldHVybiBTZWxlY3QgU3RhdGljICcgK1xuICAgICAgICAnU3RlcCBTd2l0Y2ggVGhlbiBUbyBVbnRpbCBWb2xhdGlsZSBXRW5kIFdoaWxlIFdpdGgnLFxuXG4gICAgICAgIExJVEVSQUwgPSAnVHJ1ZSBGYWxzZSBBbmQgTnVsbCBOb3QgT3InLFxuXG4gICAgICAgIEJVSUxUX0lOID1cbiAgICAgICAgICAnQWJzIEFDb3MgQWRsaWJSZWdpc3RlciBBZGxpYlVuUmVnaXN0ZXIgQXNjIEFzY1cgQVNpbiBBc3NpZ24gQVRhbiBBdXRvSXRTZXRPcHRpb24gQXV0b0l0V2luR2V0VGl0bGUgQXV0b0l0V2luU2V0VGl0bGUgQmVlcCBCaW5hcnkgQmluYXJ5TGVuIEJpbmFyeU1pZCBCaW5hcnlUb1N0cmluZyBCaXRBTkQgQml0Tk9UIEJpdE9SIEJpdFJvdGF0ZSBCaXRTaGlmdCBCaXRYT1IgQmxvY2tJbnB1dCBCcmVhayBDYWxsIENEVHJheSBDZWlsaW5nIENociBDaHJXIENsaXBHZXQgQ2xpcFB1dCBDb25zb2xlUmVhZCBDb25zb2xlV3JpdGUgQ29uc29sZVdyaXRlRXJyb3IgQ29udHJvbENsaWNrIENvbnRyb2xDb21tYW5kIENvbnRyb2xEaXNhYmxlIENvbnRyb2xFbmFibGUgQ29udHJvbEZvY3VzIENvbnRyb2xHZXRGb2N1cyBDb250cm9sR2V0SGFuZGxlIENvbnRyb2xHZXRQb3MgQ29udHJvbEdldFRleHQgQ29udHJvbEhpZGUgQ29udHJvbExpc3RWaWV3IENvbnRyb2xNb3ZlIENvbnRyb2xTZW5kIENvbnRyb2xTZXRUZXh0IENvbnRyb2xTaG93IENvbnRyb2xUcmVlVmlldyBDb3MgRGVjIERpckNvcHkgRGlyQ3JlYXRlIERpckdldFNpemUgRGlyTW92ZSBEaXJSZW1vdmUgRGxsQ2FsbCBEbGxDYWxsQWRkcmVzcyBEbGxDYWxsYmFja0ZyZWUgRGxsQ2FsbGJhY2tHZXRQdHIgRGxsQ2FsbGJhY2tSZWdpc3RlciBEbGxDbG9zZSBEbGxPcGVuIERsbFN0cnVjdENyZWF0ZSBEbGxTdHJ1Y3RHZXREYXRhIERsbFN0cnVjdEdldFB0ciBEbGxTdHJ1Y3RHZXRTaXplIERsbFN0cnVjdFNldERhdGEgRHJpdmVHZXREcml2ZSBEcml2ZUdldEZpbGVTeXN0ZW0gRHJpdmVHZXRMYWJlbCBEcml2ZUdldFNlcmlhbCBEcml2ZUdldFR5cGUgRHJpdmVNYXBBZGQgRHJpdmVNYXBEZWwgRHJpdmVNYXBHZXQgRHJpdmVTZXRMYWJlbCBEcml2ZVNwYWNlRnJlZSBEcml2ZVNwYWNlVG90YWwgRHJpdmVTdGF0dXMgRW52R2V0IEVudlNldCBFbnZVcGRhdGUgRXZhbCBFeGVjdXRlIEV4cCBGaWxlQ2hhbmdlRGlyIEZpbGVDbG9zZSBGaWxlQ29weSBGaWxlQ3JlYXRlTlRGU0xpbmsgRmlsZUNyZWF0ZVNob3J0Y3V0IEZpbGVEZWxldGUgRmlsZUV4aXN0cyBGaWxlRmluZEZpcnN0RmlsZSBGaWxlRmluZE5leHRGaWxlIEZpbGVGbHVzaCBGaWxlR2V0QXR0cmliIEZpbGVHZXRFbmNvZGluZyBGaWxlR2V0TG9uZ05hbWUgRmlsZUdldFBvcyBGaWxlR2V0U2hvcnRjdXQgRmlsZUdldFNob3J0TmFtZSBGaWxlR2V0U2l6ZSBGaWxlR2V0VGltZSBGaWxlR2V0VmVyc2lvbiBGaWxlSW5zdGFsbCBGaWxlTW92ZSBGaWxlT3BlbiBGaWxlT3BlbkRpYWxvZyBGaWxlUmVhZCBGaWxlUmVhZExpbmUgRmlsZVJlYWRUb0FycmF5IEZpbGVSZWN5Y2xlIEZpbGVSZWN5Y2xlRW1wdHkgRmlsZVNhdmVEaWFsb2cgRmlsZVNlbGVjdEZvbGRlciBGaWxlU2V0QXR0cmliIEZpbGVTZXRFbmQgRmlsZVNldFBvcyBGaWxlU2V0VGltZSBGaWxlV3JpdGUgRmlsZVdyaXRlTGluZSBGbG9vciBGdHBTZXRQcm94eSBGdW5jTmFtZSBHVUlDcmVhdGUgR1VJQ3RybENyZWF0ZUF2aSBHVUlDdHJsQ3JlYXRlQnV0dG9uIEdVSUN0cmxDcmVhdGVDaGVja2JveCBHVUlDdHJsQ3JlYXRlQ29tYm8gR1VJQ3RybENyZWF0ZUNvbnRleHRNZW51IEdVSUN0cmxDcmVhdGVEYXRlIEdVSUN0cmxDcmVhdGVEdW1teSBHVUlDdHJsQ3JlYXRlRWRpdCBHVUlDdHJsQ3JlYXRlR3JhcGhpYyBHVUlDdHJsQ3JlYXRlR3JvdXAgR1VJQ3RybENyZWF0ZUljb24gR1VJQ3RybENyZWF0ZUlucHV0IEdVSUN0cmxDcmVhdGVMYWJlbCBHVUlDdHJsQ3JlYXRlTGlzdCBHVUlDdHJsQ3JlYXRlTGlzdFZpZXcgR1VJQ3RybENyZWF0ZUxpc3RWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlTWVudSBHVUlDdHJsQ3JlYXRlTWVudUl0ZW0gR1VJQ3RybENyZWF0ZU1vbnRoQ2FsIEdVSUN0cmxDcmVhdGVPYmogR1VJQ3RybENyZWF0ZVBpYyBHVUlDdHJsQ3JlYXRlUHJvZ3Jlc3MgR1VJQ3RybENyZWF0ZVJhZGlvIEdVSUN0cmxDcmVhdGVTbGlkZXIgR1VJQ3RybENyZWF0ZVRhYiBHVUlDdHJsQ3JlYXRlVGFiSXRlbSBHVUlDdHJsQ3JlYXRlVHJlZVZpZXcgR1VJQ3RybENyZWF0ZVRyZWVWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlVXBkb3duIEdVSUN0cmxEZWxldGUgR1VJQ3RybEdldEhhbmRsZSBHVUlDdHJsR2V0U3RhdGUgR1VJQ3RybFJlYWQgR1VJQ3RybFJlY3ZNc2cgR1VJQ3RybFJlZ2lzdGVyTGlzdFZpZXdTb3J0IEdVSUN0cmxTZW5kTXNnIEdVSUN0cmxTZW5kVG9EdW1teSBHVUlDdHJsU2V0QmtDb2xvciBHVUlDdHJsU2V0Q29sb3IgR1VJQ3RybFNldEN1cnNvciBHVUlDdHJsU2V0RGF0YSBHVUlDdHJsU2V0RGVmQmtDb2xvciBHVUlDdHJsU2V0RGVmQ29sb3IgR1VJQ3RybFNldEZvbnQgR1VJQ3RybFNldEdyYXBoaWMgR1VJQ3RybFNldEltYWdlIEdVSUN0cmxTZXRMaW1pdCBHVUlDdHJsU2V0T25FdmVudCBHVUlDdHJsU2V0UG9zIEdVSUN0cmxTZXRSZXNpemluZyBHVUlDdHJsU2V0U3RhdGUgR1VJQ3RybFNldFN0eWxlIEdVSUN0cmxTZXRUaXAgR1VJRGVsZXRlIEdVSUdldEN1cnNvckluZm8gR1VJR2V0TXNnIEdVSUdldFN0eWxlIEdVSVJlZ2lzdGVyTXNnIEdVSVNldEFjY2VsZXJhdG9ycyBHVUlTZXRCa0NvbG9yIEdVSVNldENvb3JkIEdVSVNldEN1cnNvciBHVUlTZXRGb250IEdVSVNldEhlbHAgR1VJU2V0SWNvbiBHVUlTZXRPbkV2ZW50IEdVSVNldFN0YXRlIEdVSVNldFN0eWxlIEdVSVN0YXJ0R3JvdXAgR1VJU3dpdGNoIEhleCBIb3RLZXlTZXQgSHR0cFNldFByb3h5IEh0dHBTZXRVc2VyQWdlbnQgSFduZCBJbmV0Q2xvc2UgSW5ldEdldCBJbmV0R2V0SW5mbyBJbmV0R2V0U2l6ZSBJbmV0UmVhZCBJbmlEZWxldGUgSW5pUmVhZCBJbmlSZWFkU2VjdGlvbiBJbmlSZWFkU2VjdGlvbk5hbWVzIEluaVJlbmFtZVNlY3Rpb24gSW5pV3JpdGUgSW5pV3JpdGVTZWN0aW9uIElucHV0Qm94IEludCBJc0FkbWluIElzQXJyYXkgSXNCaW5hcnkgSXNCb29sIElzRGVjbGFyZWQgSXNEbGxTdHJ1Y3QgSXNGbG9hdCBJc0Z1bmMgSXNIV25kIElzSW50IElzS2V5d29yZCBJc051bWJlciBJc09iaiBJc1B0ciBJc1N0cmluZyBMb2cgTWVtR2V0U3RhdHMgTW9kIE1vdXNlQ2xpY2sgTW91c2VDbGlja0RyYWcgTW91c2VEb3duIE1vdXNlR2V0Q3Vyc29yIE1vdXNlR2V0UG9zIE1vdXNlTW92ZSBNb3VzZVVwIE1vdXNlV2hlZWwgTXNnQm94IE51bWJlciBPYmpDcmVhdGUgT2JqQ3JlYXRlSW50ZXJmYWNlIE9iakV2ZW50IE9iakdldCBPYmpOYW1lIE9uQXV0b0l0RXhpdFJlZ2lzdGVyIE9uQXV0b0l0RXhpdFVuUmVnaXN0ZXIgUGluZyBQaXhlbENoZWNrc3VtIFBpeGVsR2V0Q29sb3IgUGl4ZWxTZWFyY2ggUHJvY2Vzc0Nsb3NlIFByb2Nlc3NFeGlzdHMgUHJvY2Vzc0dldFN0YXRzIFByb2Nlc3NMaXN0IFByb2Nlc3NTZXRQcmlvcml0eSBQcm9jZXNzV2FpdCBQcm9jZXNzV2FpdENsb3NlIFByb2dyZXNzT2ZmIFByb2dyZXNzT24gUHJvZ3Jlc3NTZXQgUHRyIFJhbmRvbSBSZWdEZWxldGUgUmVnRW51bUtleSBSZWdFbnVtVmFsIFJlZ1JlYWQgUmVnV3JpdGUgUm91bmQgUnVuIFJ1bkFzIFJ1bkFzV2FpdCBSdW5XYWl0IFNlbmQgU2VuZEtlZXBBY3RpdmUgU2V0RXJyb3IgU2V0RXh0ZW5kZWQgU2hlbGxFeGVjdXRlIFNoZWxsRXhlY3V0ZVdhaXQgU2h1dGRvd24gU2luIFNsZWVwIFNvdW5kUGxheSBTb3VuZFNldFdhdmVWb2x1bWUgU3BsYXNoSW1hZ2VPbiBTcGxhc2hPZmYgU3BsYXNoVGV4dE9uIFNxcnQgU1JhbmRvbSBTdGF0dXNiYXJHZXRUZXh0IFN0ZGVyclJlYWQgU3RkaW5Xcml0ZSBTdGRpb0Nsb3NlIFN0ZG91dFJlYWQgU3RyaW5nIFN0cmluZ0FkZENSIFN0cmluZ0NvbXBhcmUgU3RyaW5nRm9ybWF0IFN0cmluZ0Zyb21BU0NJSUFycmF5IFN0cmluZ0luU3RyIFN0cmluZ0lzQWxOdW0gU3RyaW5nSXNBbHBoYSBTdHJpbmdJc0FTQ0lJIFN0cmluZ0lzRGlnaXQgU3RyaW5nSXNGbG9hdCBTdHJpbmdJc0ludCBTdHJpbmdJc0xvd2VyIFN0cmluZ0lzU3BhY2UgU3RyaW5nSXNVcHBlciBTdHJpbmdJc1hEaWdpdCBTdHJpbmdMZWZ0IFN0cmluZ0xlbiBTdHJpbmdMb3dlciBTdHJpbmdNaWQgU3RyaW5nUmVnRXhwIFN0cmluZ1JlZ0V4cFJlcGxhY2UgU3RyaW5nUmVwbGFjZSBTdHJpbmdSZXZlcnNlIFN0cmluZ1JpZ2h0IFN0cmluZ1NwbGl0IFN0cmluZ1N0cmlwQ1IgU3RyaW5nU3RyaXBXUyBTdHJpbmdUb0FTQ0lJQXJyYXkgU3RyaW5nVG9CaW5hcnkgU3RyaW5nVHJpbUxlZnQgU3RyaW5nVHJpbVJpZ2h0IFN0cmluZ1VwcGVyIFRhbiBUQ1BBY2NlcHQgVENQQ2xvc2VTb2NrZXQgVENQQ29ubmVjdCBUQ1BMaXN0ZW4gVENQTmFtZVRvSVAgVENQUmVjdiBUQ1BTZW5kIFRDUFNodXRkb3duLCBVRFBTaHV0ZG93biBUQ1BTdGFydHVwLCBVRFBTdGFydHVwIFRpbWVyRGlmZiBUaW1lckluaXQgVG9vbFRpcCBUcmF5Q3JlYXRlSXRlbSBUcmF5Q3JlYXRlTWVudSBUcmF5R2V0TXNnIFRyYXlJdGVtRGVsZXRlIFRyYXlJdGVtR2V0SGFuZGxlIFRyYXlJdGVtR2V0U3RhdGUgVHJheUl0ZW1HZXRUZXh0IFRyYXlJdGVtU2V0T25FdmVudCBUcmF5SXRlbVNldFN0YXRlIFRyYXlJdGVtU2V0VGV4dCBUcmF5U2V0Q2xpY2sgVHJheVNldEljb24gVHJheVNldE9uRXZlbnQgVHJheVNldFBhdXNlSWNvbiBUcmF5U2V0U3RhdGUgVHJheVNldFRvb2xUaXAgVHJheVRpcCBVQm91bmQgVURQQmluZCBVRFBDbG9zZVNvY2tldCBVRFBPcGVuIFVEUFJlY3YgVURQU2VuZCBWYXJHZXRUeXBlIFdpbkFjdGl2YXRlIFdpbkFjdGl2ZSBXaW5DbG9zZSBXaW5FeGlzdHMgV2luRmxhc2ggV2luR2V0Q2FyZXRQb3MgV2luR2V0Q2xhc3NMaXN0IFdpbkdldENsaWVudFNpemUgV2luR2V0SGFuZGxlIFdpbkdldFBvcyBXaW5HZXRQcm9jZXNzIFdpbkdldFN0YXRlIFdpbkdldFRleHQgV2luR2V0VGl0bGUgV2luS2lsbCBXaW5MaXN0IFdpbk1lbnVTZWxlY3RJdGVtIFdpbk1pbmltaXplQWxsIFdpbk1pbmltaXplQWxsVW5kbyBXaW5Nb3ZlIFdpblNldE9uVG9wIFdpblNldFN0YXRlIFdpblNldFRpdGxlIFdpblNldFRyYW5zIFdpbldhaXQnLFxuXG4gICAgICAgIENPTU1FTlQgPSB7XG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgICAgICAgICAgaGxqcy5DT01NRU5UKCcjY3MnLCAnI2NlJyksXG4gICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnI2NvbW1lbnRzLXN0YXJ0JywgJyNjb21tZW50cy1lbmQnKVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIFZBUklBQkxFID0ge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFtBLXowLTlfXSsnXG4gICAgICAgIH0sXG5cbiAgICAgICAgU1RSSU5HID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbe1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cIlwiLyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICAgICAgICAgIGVuZDogLycvLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogLycnLyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0sXG5cbiAgICAgICAgTlVNQkVSID0ge1xuICAgICAgICAgICAgdmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXVxuICAgICAgICB9LFxuXG4gICAgICAgIFBSRVBST0NFU1NPUiA9IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2NvbW1lbnRzIGluY2x1ZGUgaW5jbHVkZS1vbmNlIE5vVHJheUljb24gT25BdXRvSXRTdGFydFJlZ2lzdGVyIHByYWdtYSBjb21waWxlIFJlcXVpcmVBZG1pbid9LFxuICAgICAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSd9LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46ICc8JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAnPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cIlwiLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8nJy8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgICAgQ09NTUVOVFxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIENPTlNUQU5UID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIC8vIGJlZ2luOiAnQCcsXG4gICAgICAgICAgICAvLyBlbmQ6ICckJyxcbiAgICAgICAgICAgIC8vIGtleXdvcmRzOiAnQXBwRGF0YUNvbW1vbkRpciBBcHBEYXRhRGlyIEF1dG9JdEV4ZSBBdXRvSXRQSUQgQXV0b0l0VmVyc2lvbiBBdXRvSXRYNjQgQ09NX0V2ZW50T2JqIENvbW1vbkZpbGVzRGlyIENvbXBpbGVkIENvbXB1dGVyTmFtZSBDb21TcGVjIENQVUFyY2ggQ1IgQ1JMRiBEZXNrdG9wQ29tbW9uRGlyIERlc2t0b3BEZXB0aCBEZXNrdG9wRGlyIERlc2t0b3BIZWlnaHQgRGVza3RvcFJlZnJlc2ggRGVza3RvcFdpZHRoIERvY3VtZW50c0NvbW1vbkRpciBlcnJvciBleGl0Q29kZSBleGl0TWV0aG9kIGV4dGVuZGVkIEZhdm9yaXRlc0NvbW1vbkRpciBGYXZvcml0ZXNEaXIgR1VJX0N0cmxIYW5kbGUgR1VJX0N0cmxJZCBHVUlfRHJhZ0ZpbGUgR1VJX0RyYWdJZCBHVUlfRHJvcElkIEdVSV9XaW5IYW5kbGUgSG9tZURyaXZlIEhvbWVQYXRoIEhvbWVTaGFyZSBIb3RLZXlQcmVzc2VkIEhPVVIgSVBBZGRyZXNzMSBJUEFkZHJlc3MyIElQQWRkcmVzczMgSVBBZGRyZXNzNCBLQkxheW91dCBMRiBMb2NhbEFwcERhdGFEaXIgTG9nb25ETlNEb21haW4gTG9nb25Eb21haW4gTG9nb25TZXJ2ZXIgTURBWSBNSU4gTU9OIE1TRUMgTVVJTGFuZyBNeURvY3VtZW50c0RpciBOdW1QYXJhbXMgT1NBcmNoIE9TQnVpbGQgT1NMYW5nIE9TU2VydmljZVBhY2sgT1NUeXBlIE9TVmVyc2lvbiBQcm9ncmFtRmlsZXNEaXIgUHJvZ3JhbXNDb21tb25EaXIgUHJvZ3JhbXNEaXIgU2NyaXB0RGlyIFNjcmlwdEZ1bGxQYXRoIFNjcmlwdExpbmVOdW1iZXIgU2NyaXB0TmFtZSBTRUMgU3RhcnRNZW51Q29tbW9uRGlyIFN0YXJ0TWVudURpciBTdGFydHVwQ29tbW9uRGlyIFN0YXJ0dXBEaXIgU1dfRElTQUJMRSBTV19FTkFCTEUgU1dfSElERSBTV19MT0NLIFNXX01BWElNSVpFIFNXX01JTklNSVpFIFNXX1JFU1RPUkUgU1dfU0hPVyBTV19TSE9XREVGQVVMVCBTV19TSE9XTUFYSU1JWkVEIFNXX1NIT1dNSU5JTUlaRUQgU1dfU0hPV01JTk5PQUNUSVZFIFNXX1NIT1dOQSBTV19TSE9XTk9BQ1RJVkFURSBTV19TSE9XTk9STUFMIFNXX1VOTE9DSyBTeXN0ZW1EaXIgVEFCIFRlbXBEaXIgVFJBWV9JRCBUcmF5SWNvbkZsYXNoaW5nIFRyYXlJY29uVmlzaWJsZSBVc2VyTmFtZSBVc2VyUHJvZmlsZURpciBXREFZIFdpbmRvd3NEaXIgV29ya2luZ0RpciBZREFZIFlFQVInLFxuICAgICAgICAgICAgLy8gcmVsZXZhbmNlOiA1XG4gICAgICAgICAgICBiZWdpbjogJ0BbQS16MC05X10rJ1xuICAgICAgICB9LFxuXG4gICAgICAgIEZVTkNUSU9OID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ0Z1bmMnLFxuICAgICAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXCR8XFxcXFt8JScsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGJ1aWx0X2luOiBCVUlMVF9JTixcbiAgICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIENPTU1FTlQsXG4gICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAgICAgIENPTlNUQU5ULFxuICAgICAgICAgICAgRlVOQ1RJT05cbiAgICAgICAgXVxuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIG1uZW1vbmljICovXG4gICAgICAgICdhZGMgYWRkIGFkaXcgYW5kIGFuZGkgYXNyIGJjbHIgYmxkIGJyYmMgYnJicyBicmNjIGJyY3MgYnJlYWsgYnJlcSBicmdlIGJyaGMgYnJocyAnICtcbiAgICAgICAgJ2JyaWQgYnJpZSBicmxvIGJybHQgYnJtaSBicm5lIGJycGwgYnJzaCBicnRjIGJydHMgYnJ2YyBicnZzIGJzZXQgYnN0IGNhbGwgY2JpIGNiciAnICtcbiAgICAgICAgJ2NsYyBjbGggY2xpIGNsbiBjbHIgY2xzIGNsdCBjbHYgY2x6IGNvbSBjcCBjcGMgY3BpIGNwc2UgZGVjIGVpY2FsbCBlaWptcCBlbHBtIGVvciAnICtcbiAgICAgICAgJ2ZtdWwgZm11bHMgZm11bHN1IGljYWxsIGlqbXAgaW4gaW5jIGptcCBsZCBsZGQgbGRpIGxkcyBscG0gbHNsIGxzciBtb3YgbW92dyBtdWwgJyArXG4gICAgICAgICdtdWxzIG11bHN1IG5lZyBub3Agb3Igb3JpIG91dCBwb3AgcHVzaCByY2FsbCByZXQgcmV0aSByam1wIHJvbCByb3Igc2JjIHNiciBzYnJjIHNicnMgJyArXG4gICAgICAgICdzZWMgc2VoIHNiaSBzYmNpIHNiaWMgc2JpcyBzYml3IHNlaSBzZW4gc2VyIHNlcyBzZXQgc2V2IHNleiBzbGVlcCBzcG0gc3Qgc3RkIHN0cyBzdWIgJyArXG4gICAgICAgICdzdWJpIHN3YXAgdHN0IHdkcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAqL1xuICAgICAgICAncjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgcjE2IHIxNyByMTggcjE5IHIyMCByMjEgcjIyICcgK1xuICAgICAgICAncjIzIHIyNCByMjUgcjI2IHIyNyByMjggcjI5IHIzMCByMzEgeHwwIHhoIHhsIHl8MCB5aCB5bCB6fDAgemggemwgJyArXG4gICAgICAgIC8qIElPIFJlZ2lzdGVycyAoQVRNZWdhMTI4KSAqL1xuICAgICAgICAndWNzcjFjIHVkcjEgdWNzcjFhIHVjc3IxYiB1YnJyMWwgdWJycjFoIHVjc3IwYyB1YnJyMGggdGNjcjNjIHRjY3IzYSB0Y2NyM2IgdGNudDNoICcgK1xuICAgICAgICAndGNudDNsIG9jcjNhaCBvY3IzYWwgb2NyM2JoIG9jcjNibCBvY3IzY2ggb2NyM2NsIGljcjNoIGljcjNsIGV0aW1zayBldGlmciB0Y2NyMWMgJyArXG4gICAgICAgICdvY3IxY2ggb2NyMWNsIHR3Y3IgdHdkciB0d2FyIHR3c3IgdHdiciBvc2NjYWwgeG1jcmEgeG1jcmIgZWljcmEgc3BtY3NyIHNwbWNyIHBvcnRnICcgK1xuICAgICAgICAnZGRyZyBwaW5nIHBvcnRmIGRkcmYgc3JlZyBzcGggc3BsIHhkaXYgcmFtcHogZWljcmIgZWltc2sgZ2ltc2sgZ2ljciBlaWZyIGdpZnIgdGltc2sgJyArXG4gICAgICAgICd0aWZyIG1jdWNyIG1jdWNzciB0Y2NyMCB0Y250MCBvY3IwIGFzc3IgdGNjcjFhIHRjY3IxYiB0Y250MWggdGNudDFsIG9jcjFhaCBvY3IxYWwgJyArXG4gICAgICAgICdvY3IxYmggb2NyMWJsIGljcjFoIGljcjFsIHRjY3IyIHRjbnQyIG9jcjIgb2NkciB3ZHRjciBzZmlvciBlZWFyaCBlZWFybCBlZWRyIGVlY3IgJyArXG4gICAgICAgICdwb3J0YSBkZHJhIHBpbmEgcG9ydGIgZGRyYiBwaW5iIHBvcnRjIGRkcmMgcGluYyBwb3J0ZCBkZHJkIHBpbmQgc3BkciBzcHNyIHNwY3IgdWRyMCAnICtcbiAgICAgICAgJ3Vjc3IwYSB1Y3NyMGIgdWJycjBsIGFjc3IgYWRtdXggYWRjc3IgYWRjaCBhZGNsIHBvcnRlIGRkcmUgcGluZSBwaW5mJyxcbiAgICAgIG1ldGE6XG4gICAgICAgICcuYnl0ZSAuY3NlZyAuZGIgLmRlZiAuZGV2aWNlIC5kc2VnIC5kdyAuZW5kbWFjcm8gLmVxdSAuZXNlZyAuZXhpdCAuaW5jbHVkZSAubGlzdCAnICtcbiAgICAgICAgJy5saXN0bWFjIC5tYWNybyAubm9saXN0IC5vcmcgLnNldCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnOycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLCAvLyAweC4uLiwgZGVjaW1hbCwgZmxvYXRcbiAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLCAvLyAwYi4uLlxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFwkW2EtekEtWjAtOV0rfDBvWzAtN10rKScgLy8gJC4uLiwgMG8uLi5cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1teXFxcXFxcXFxdW15cXCddJ1xuICAgICAgfSxcbiAgICAgIHtjbGFzc05hbWU6ICdzeW1ib2wnLCAgYmVnaW46ICdeW0EtWmEtejAtOV8uJF0rOid9LFxuICAgICAge2NsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyMnLCBlbmQ6ICckJ30sXG4gICAgICB7ICAvLyBzdWJzdGl0dXRpb24gd2l0aGluIGEgbWFjcm9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJ0BbMC05XSsnXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFwkW1xcd1xcZCNAXVtcXHdcXGRfXSovfSxcbiAgICAgIHtiZWdpbjogL1xcJFxceyguKj8pfS99XG4gICAgXVxuICB9O1xuICB2YXIgS0VZV09SRFMgPSAnQkVHSU4gRU5EIGlmIGVsc2Ugd2hpbGUgZG8gZm9yIGluIGJyZWFrIGNvbnRpbnVlIGRlbGV0ZSBuZXh0IG5leHRmaWxlIGZ1bmN0aW9uIGZ1bmMgZXhpdHwxMCc7XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxiKT9yPycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8Yik/cj9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fHJ8dXIpJy8sIGVuZDogLycvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fHJ8dXIpXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKGJ8YnIpJy8sIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhifGJyKVwiLywgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcblx0IGtleXdvcmRzOiB7XG5cdCAgIGtleXdvcmQ6IEtFWVdPUkRTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6ICdmYWxzZSBpbnQgYWJzdHJhY3QgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgZm9yIHRydWUgJyArXG4gICAgICAnd2hpbGUgbG9uZyB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgJyArXG4gICAgICAnYnJlYWsgbmV3IGNhdGNoIGJ5dGUgc3VwZXIgY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoICcgK1xuICAgICAgJ2NvbnRpbnVlIHJldmVyc2UgZmlyc3RmYXN0IGZpcnN0b25seSBmb3J1cGRhdGUgbm9mZXRjaCBzdW0gYXZnIG1pbm9mIG1heG9mIGNvdW50ICcgK1xuICAgICAgJ29yZGVyIGdyb3VwIGJ5IGFzYyBkZXNjIGluZGV4IGhpbnQgbGlrZSBkaXNwYWx5IGVkaXQgY2xpZW50IHNlcnZlciB0dHNiZWdpbiAnICtcbiAgICAgICd0dHNjb21taXQgc3RyIHJlYWwgZGF0ZSBjb250YWluZXIgYW55dHlwZSBjb21tb24gZGl2IG1vZCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsIGVuZDogJ3snLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnOicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL30sXG4gICAgICB7YmVnaW46IC9cXCRcXHsoLio/KX0vfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIEVTQ0FQRURfUVVPVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBiZWdpbjogL1xcXFxcIi9cblxuICB9O1xuICB2YXIgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLycvLCBlbmQ6IC8nL1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzaCcsICd6c2gnXSxcbiAgICBsZXhlbWVzOiAvXFxiLT9bYS16XFwuX10rXFxiLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciB3aGlsZSBpbiBkbyBkb25lIGNhc2UgZXNhYyBmdW5jdGlvbicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gU2hlbGwgYnVpbHQtaW5zXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtQnVpbHRpbi1Db21tYW5kcy5odG1sXG4gICAgICAgICdicmVhayBjZCBjb250aW51ZSBldmFsIGV4ZWMgZXhpdCBleHBvcnQgZ2V0b3B0cyBoYXNoIHB3ZCByZWFkb25seSByZXR1cm4gc2hpZnQgdGVzdCB0aW1lcyAnICtcbiAgICAgICAgJ3RyYXAgdW1hc2sgdW5zZXQgJyArXG4gICAgICAgIC8vIEJhc2ggYnVpbHQtaW5zXG4gICAgICAgICdhbGlhcyBiaW5kIGJ1aWx0aW4gY2FsbGVyIGNvbW1hbmQgZGVjbGFyZSBlY2hvIGVuYWJsZSBoZWxwIGxldCBsb2NhbCBsb2dvdXQgbWFwZmlsZSBwcmludGYgJyArXG4gICAgICAgICdyZWFkIHJlYWRhcnJheSBzb3VyY2UgdHlwZSB0eXBlc2V0IHVsaW1pdCB1bmFsaWFzICcgK1xuICAgICAgICAvLyBTaGVsbCBtb2RpZmllcnNcbiAgICAgICAgJ3NldCBzaG9wdCAnICtcbiAgICAgICAgLy8gWnNoIGJ1aWx0LWluc1xuICAgICAgICAnYXV0b2xvYWQgYmcgYmluZGtleSBieWUgY2FwIGNoZGlyIGNsb25lIGNvbXBhcmd1bWVudHMgY29tcGNhbGwgY29tcGN0bCBjb21wZGVzY3JpYmUgY29tcGZpbGVzICcgK1xuICAgICAgICAnY29tcGdyb3VwcyBjb21wcXVvdGUgY29tcHRhZ3MgY29tcHRyeSBjb21wdmFsdWVzIGRpcnMgZGlzYWJsZSBkaXNvd24gZWNob3RjIGVjaG90aSBlbXVsYXRlICcgK1xuICAgICAgICAnZmMgZmcgZmxvYXQgZnVuY3Rpb25zIGdldGNhcCBnZXRsbiBoaXN0b3J5IGludGVnZXIgam9icyBraWxsIGxpbWl0IGxvZyBub2dsb2IgcG9wZCBwcmludCAnICtcbiAgICAgICAgJ3B1c2hkIHB1c2hsbiByZWhhc2ggc2NoZWQgc2V0Y2FwIHNldG9wdCBzdGF0IHN1c3BlbmQgdHR5Y3RsIHVuZnVuY3Rpb24gdW5oYXNoIHVubGltaXQgJyArXG4gICAgICAgICd1bnNldG9wdCB2YXJlZCB3YWl0IHdoZW5jZSB3aGVyZSB3aGljaCB6Y29tcGlsZSB6Zm9ybWF0IHpmdHAgemxlIHptb2Rsb2FkIHpwYXJzZW9wdHMgenByb2YgJyArXG4gICAgICAgICd6cHR5IHpyZWdleHBhcnNlIHpzb2NrZXQgenN0eWxlIHp0Y3AnLFxuICAgICAgXzpcbiAgICAgICAgJy1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYScgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL14jIVteXFxuXStzaFxccyokLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogL1xcd1tcXHdcXGRfXSpcXHMqXFwoXFxzKlxcKVxccypcXHsvLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IC9cXHdbXFx3XFxkX10qL30pXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEVTQ0FQRURfUVVPVEUsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnXlxcLicsXG4gICAgLy8gU3VwcG9ydCBleHBsaWNpdGVseSB0eXBlZCB2YXJpYWJsZXMgdGhhdCBlbmQgd2l0aCAkJSEgb3IgIy5cbiAgICBsZXhlbWVzOiAnW2EtekEtWl1bYS16QS1aMC05X1xcJFxcJVxcIVxcI10qJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICdBQlMgQVNDIEFORCBBVE4gQVVUT3wwIEJFRVAgQkxPQUR8MTAgQlNBVkV8MTAgQ0FMTCBDQUxMUyBDREJMIENIQUlOIENIRElSIENIUiR8MTAgQ0lOVCBDSVJDTEUgJyArXG4gICAgICAgICAgJ0NMRUFSIENMT1NFIENMUyBDT0xPUiBDT00gQ09NTU9OIENPTlQgQ09TIENTTkcgQ1NSTElOIENWRCBDVkkgQ1ZTIERBVEEgREFURSQgJyArXG4gICAgICAgICAgJ0RFRkRCTCBERUZJTlQgREVGU05HIERFRlNUUiBERUZ8MCBTRUcgVVNSIERFTEVURSBESU0gRFJBVyBFRElUIEVORCBFTlZJUk9OIEVOVklST04kICcgK1xuICAgICAgICAgICdFT0YgRVFWIEVSQVNFIEVSREVWIEVSREVWJCBFUkwgRVJSIEVSUk9SIEVYUCBGSUVMRCBGSUxFUyBGSVggRk9SfDAgRlJFIEdFVCBHT1NVQnwxMCBHT1RPICcgK1xuICAgICAgICAgICdIRVgkIElGIFRIRU4gRUxTRXwwIElOS0VZJCBJTlAgSU5QVVQgSU5QVVQjIElOUFVUJCBJTlNUUiBJTVAgSU5UIElPQ1RMIElPQ1RMJCBLRVkgT04gJyArXG4gICAgICAgICAgJ09GRiBMSVNUIEtJTEwgTEVGVCQgTEVOIExFVCBMSU5FIExMSVNUIExPQUQgTE9DIExPQ0FURSBMT0YgTE9HIExQUklOVCBVU0lORyBMU0VUICcgK1xuICAgICAgICAgICdNRVJHRSBNSUQkIE1LRElSIE1LRCQgTUtJJCBNS1MkIE1PRCBOQU1FIE5FVyBORVhUIE5PSVNFIE5PVCBPQ1QkIE9OIE9SIFBFTiBQTEFZIFNUUklHIE9QRU4gT1BUSU9OICcgK1xuICAgICAgICAgICdCQVNFIE9VVCBQQUlOVCBQQUxFVFRFIFBDT1BZIFBFRUsgUE1BUCBQT0lOVCBQT0tFIFBPUyBQUklOVCBQUklOVF0gUFNFVCBQUkVTRVQgJyArXG4gICAgICAgICAgJ1BVVCBSQU5ET01JWkUgUkVBRCBSRU0gUkVOVU0gUkVTRVR8MCBSRVNUT1JFIFJFU1VNRSBSRVRVUk58MCBSSUdIVCQgUk1ESVIgUk5EIFJTRVQgJyArXG4gICAgICAgICAgJ1JVTiBTQVZFIFNDUkVFTiBTR04gU0hFTEwgU0lOIFNPVU5EIFNQQUNFJCBTUEMgU1FSIFNURVAgU1RJQ0sgU1RPUCBTVFIkIFNUUklORyQgU1dBUCAnICtcbiAgICAgICAgICAnU1lTVEVNIFRBQiBUQU4gVElNRSQgVElNRVIgVFJPRkYgVFJPTiBUTyBVU1IgVkFMIFZBUlBUUiBWQVJQVFIkIFZJRVcgV0FJVCBXSElMRSAnICtcbiAgICAgICAgICAnV0VORCBXSURUSCBXSU5ET1cgV1JJVEUgWE9SJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJ1JFTScsICckJywge3JlbGV2YW5jZTogMTB9KSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXFwnJywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIGxpbmUgbnVtYmVyc1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ15bMC05XStcXCAnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBNYXRjaCB0eXBlZCBudW1lcmljIGNvbnN0YW50cyAoMTAwMCwgMTIuMzQhLCAxLjJlNSwgMS41IywgMS4yRDIpXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoWzAtOV0rWzAtOWVkRURcXC5dKlsjXFwhXT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBNYXRjaCBoZXhhZGVjaW1hbCBudW1iZXJzICgmSHh4eHgpXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKFxcJltoSF1bMC05YS1mQS1GXXsxLDR9KSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIG9jdGFsIG51bWJlcnMgKCZPeHh4eHh4KVxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJyhcXCZbb09dWzAtN117MSw2fSknXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpe1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBBdHRyaWJ1dGVcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi9cbiAgICAgIH0sXG4gICAgICAvLyBTcGVjaWZpY1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzo6PS8sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvPC8sIGVuZDogLz4vXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQ29tbW9uXG4gICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKXtcbiAgdmFyIExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46ICdbXFxcXCtcXFxcLV0nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYmYnXSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnW15cXFxcW1xcXFxdXFxcXC4sXFxcXCtcXFxcLTw+IFxcclxcbl0nLFxuICAgICAgICAnW1xcXFxbXFxcXF1cXFxcLixcXFxcK1xcXFwtPD4gXFxyXFxuXScsXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdbXFxcXFtcXFxcXV0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW1xcXFwuLF0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoaXMgbW9kZSB3b3JrcyBhcyB0aGUgb25seSByZWxldmFuY2UgY291bnRlclxuICAgICAgICBiZWdpbjogLyg/OlxcK1xcK3xcXC1cXC0pLyxcbiAgICAgICAgY29udGFpbnM6IFtMSVRFUkFMXVxuICAgICAgfSxcbiAgICAgIExJVEVSQUxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdkaXYgbW9kIGluIGFuZCBvciBub3QgeG9yIGFzc2VydGVycm9yIGJlZ2luIGNhc2UgZG8gZG93bnRvIGVsc2UgZW5kIGV4aXQgZm9yIGlmIG9mIHJlcGVhdCB0aGVuIHRvICcgK1xuICAgICd1bnRpbCB3aGlsZSB3aXRoIHZhcic7XG4gIHZhciBMSVRFUkFMUyA9ICdmYWxzZSB0cnVlJztcbiAgdmFyIENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgIC9cXHsvLFxuICAgICAgL1xcfS8sXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL1xcKFxcKi8sXG4gICAgICAvXFwqXFwpLyxcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIClcbiAgXTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvJycvfV1cbiAgfTtcbiAgdmFyIENIQVJfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIHZhciBEQVRFID0ge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCspPyhEVHxEfFQpJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgREJMX1FVT1RFRF9WQVJJQUJMRSA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIG5vdCBhIHN0cmluZyB0ZWNobmljYWxseSBidXQgbWFrZXMgc2Vuc2UgdG8gYmUgaGlnaGxpZ2h0ZWQgaW4gdGhlIHNhbWUgc3R5bGVcbiAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgZW5kOiAnXCInXG4gIH07XG5cbiAgdmFyIFBST0NFRFVSRSA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ3Byb2NlZHVyZScsIGVuZDogL1s6O10vLFxuICAgIGtleXdvcmRzOiAncHJvY2VkdXJlfDEwJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtTVFJJTkcsIENIQVJfU1RSSU5HXVxuICAgICAgfVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG5cbiAgdmFyIE9CSkVDVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46ICdPQkpFQ1QgKFRhYmxlfEZvcm18UmVwb3J0fERhdGFwb3J0fENvZGV1bml0fFhNTHBvcnR8TWVudVN1aXRlfFBhZ2V8UXVlcnkpIChcXFxcZCspIChbXlxcXFxyXFxcXG5dKyknLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgIFBST0NFRFVSRVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHsga2V5d29yZDogS0VZV09SRFMsIGxpdGVyYWw6IExJVEVSQUxTIH0sXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORywgQ0hBUl9TVFJJTkcsXG4gICAgICBEQVRFLCBEQkxfUVVPVEVEX1ZBUklBQkxFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIE9CSkVDVCxcbiAgICAgIFBST0NFRFVSRVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjYXBucCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnc3RydWN0IGVudW0gaW50ZXJmYWNlIHVuaW9uIGdyb3VwIGltcG9ydCB1c2luZyBjb25zdCBhbm5vdGF0aW9uIGV4dGVuZHMgaW4gb2Ygb24gYXMgd2l0aCBmcm9tIGZpeGVkJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnVm9pZCBCb29sIEludDggSW50MTYgSW50MzIgSW50NjQgVUludDggVUludDE2IFVJbnQzMiBVSW50NjQgRmxvYXQzMiBGbG9hdDY0ICcgK1xuICAgICAgICAnVGV4dCBEYXRhIEFueVBvaW50ZXIgQW55U3RydWN0IENhcGFiaWxpdHkgTGlzdCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL0AweFtcXHdcXGRdezE2fTsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9AXFxkK1xcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N0cnVjdCBlbnVtJywgZW5kOiAvXFx7LyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgc3RhcnRzOiB7ZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWV9IC8vIGhhY2s6IGVhdGluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCB0aXRsZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsIGVuZDogL1xcey8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICAgIHN0YXJ0czoge2VuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlfSAvLyBoYWNrOiBlYXRpbmcgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgdGl0bGVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgLy8gMi4zLiBJZGVudGlmaWVycyBhbmQga2V5d29yZHNcbiAgdmFyIEtFWVdPUkRTID1cbiAgICAnYXNzZW1ibHkgbW9kdWxlIHBhY2thZ2UgaW1wb3J0IGFsaWFzIGNsYXNzIGludGVyZmFjZSBvYmplY3QgZ2l2ZW4gdmFsdWUgJyArXG4gICAgJ2Fzc2lnbiB2b2lkIGZ1bmN0aW9uIG5ldyBvZiBleHRlbmRzIHNhdGlzZmllcyBhYnN0cmFjdHMgaW4gb3V0IHJldHVybiAnICtcbiAgICAnYnJlYWsgY29udGludWUgdGhyb3cgYXNzZXJ0IGR5bmFtaWMgaWYgZWxzZSBzd2l0Y2ggY2FzZSBmb3Igd2hpbGUgdHJ5ICcgK1xuICAgICdjYXRjaCBmaW5hbGx5IHRoZW4gbGV0IHRoaXMgb3V0ZXIgc3VwZXIgaXMgZXhpc3RzIG5vbmVtcHR5JztcbiAgLy8gNy40LjEgRGVjbGFyYXRpb24gTW9kaWZpZXJzXG4gIHZhciBERUNMQVJBVElPTl9NT0RJRklFUlMgPVxuICAgICdzaGFyZWQgYWJzdHJhY3QgZm9ybWFsIGRlZmF1bHQgYWN0dWFsIHZhcmlhYmxlIGxhdGUgbmF0aXZlIGRlcHJlY2F0ZWQnICtcbiAgICAnZmluYWwgc2VhbGVkIGFubm90YXRpb24gc3VwcHJlc3NXYXJuaW5ncyBzbWFsbCc7XG4gIC8vIDcuNC4yIERvY3VtZW50YXRpb25cbiAgdmFyIERPQ1VNRU5UQVRJT04gPVxuICAgICdkb2MgYnkgbGljZW5zZSBzZWUgdGhyb3dzIHRhZ2dlZCc7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBiZWdpbjogL2BgLywgZW5kOiAvYGAvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICB7XG4gICAgICAvLyB2ZXJiYXRpbSBzdHJpbmdcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICBlbmQ6ICdcIlwiXCInLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RyaW5nIGxpdGVyYWwgb3IgdGVtcGxhdGVcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgY29udGFpbnM6IFtTVUJTVF1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIGNoYXJhY3RlciBsaXRlcmFsXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46IFwiJ1wiLFxuICAgICAgZW5kOiBcIidcIlxuICAgIH0sXG4gICAge1xuICAgICAgLy8gbnVtZXJpYyBsaXRlcmFsXG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcjWzAtOWEtZkEtRl9dK3xcXFxcJFswMV9dK3xbMC05X10rKD86XFxcXC5bMC05X10oPzpbZUVdWystXT9cXFxcZCspPyk/W2tNR1RQbXVucGZdPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogS0VZV09SRFMgKyAnICcgKyBERUNMQVJBVElPTl9NT0RJRklFUlMsXG4gICAgICBtZXRhOiBET0NVTUVOVEFUSU9OXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnXFxcXCRbXjAxXXwjW14wLTlhLWZBLUZdJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJywge2NvbnRhaW5zOiBbJ3NlbGYnXX0pLFxuICAgICAge1xuICAgICAgICAvLyBjb21waWxlciBhbm5vdGF0aW9uXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ0BbYS16XVxcXFx3Kig/OlxcXFw6XFxcIlteXFxcIl0qXFxcIik/J1xuICAgICAgfVxuICAgIF0uY29uY2F0KEVYUFJFU1NJT05TKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NsZWFuJywnaWNsJywnZGNsJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpZiBsZXQgaW4gd2l0aCB3aGVyZSBjYXNlIG9mIGNsYXNzIGluc3RhbmNlIG90aGVyd2lzZSAnICtcbiAgICAgICAgJ2ltcGxlbWVudGF0aW9uIGRlZmluaXRpb24gc3lzdGVtIG1vZHVsZSBmcm9tIGltcG9ydCBxdWFsaWZpZWQgYXMgJyArXG4gICAgICAgICdzcGVjaWFsIGNvZGUgaW5saW5lIGZvcmVpZ24gZXhwb3J0IGNjYWxsIHN0ZGNhbGwgZ2VuZXJpYyBkZXJpdmUgJyArXG4gICAgICAgICdpbmZpeCBpbmZpeGwgaW5maXhyJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnSW50IFJlYWwgQ2hhciBCb29sJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdUcnVlIEZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG5cbiAgICAgIHtiZWdpbjogJy0+fDwtW3w6XT98IyE/fD4+PXxcXFxce1xcXFx8fFxcXFx8XFxcXH18Oj09fD06fDw+J30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIga2V5d29yZHMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBDbG9qdXJlIGtleXdvcmRzXG4gICAgICAnZGVmIGRlZm9uY2UgY29uZCBhcHBseSBpZi1ub3QgaWYtbGV0IGlmIG5vdCBub3Q9ID0gPCA+IDw9ID49ID09ICsgLyAqIC0gcmVtICcrXG4gICAgICAncXVvdCBuZWc/IHBvcz8gZGVsYXk/IHN5bWJvbD8ga2V5d29yZD8gdHJ1ZT8gZmFsc2U/IGludGVnZXI/IGVtcHR5PyBjb2xsPyBsaXN0PyAnK1xuICAgICAgJ3NldD8gaWZuPyBmbj8gYXNzb2NpYXRpdmU/IHNlcXVlbnRpYWw/IHNvcnRlZD8gY291bnRlZD8gcmV2ZXJzaWJsZT8gbnVtYmVyPyBkZWNpbWFsPyAnK1xuICAgICAgJ2NsYXNzPyBkaXN0aW5jdD8gaXNhPyBmbG9hdD8gcmF0aW9uYWw/IHJlZHVjZWQ/IHJhdGlvPyBvZGQ/IGV2ZW4/IGNoYXI/IHNlcT8gdmVjdG9yPyAnK1xuICAgICAgJ3N0cmluZz8gbWFwPyBuaWw/IGNvbnRhaW5zPyB6ZXJvPyBpbnN0YW5jZT8gbm90LWV2ZXJ5PyBub3QtYW55PyBsaWJzcGVjPyAtPiAtPj4gLi4gLiAnK1xuICAgICAgJ2luYyBjb21wYXJlIGRvIGRvdGltZXMgbWFwY2F0IHRha2UgcmVtb3ZlIHRha2Utd2hpbGUgZHJvcCBsZXRmbiBkcm9wLWxhc3QgdGFrZS1sYXN0ICcrXG4gICAgICAnZHJvcC13aGlsZSB3aGlsZSBpbnRlcm4gY29uZHAgY2FzZSByZWR1Y2VkIGN5Y2xlIHNwbGl0LWF0IHNwbGl0LXdpdGggcmVwZWF0IHJlcGxpY2F0ZSAnK1xuICAgICAgJ2l0ZXJhdGUgcmFuZ2UgbWVyZ2UgemlwbWFwIGRlY2xhcmUgbGluZS1zZXEgc29ydCBjb21wYXJhdG9yIHNvcnQtYnkgZG9ydW4gZG9hbGwgbnRobmV4dCAnK1xuICAgICAgJ250aHJlc3QgcGFydGl0aW9uIGV2YWwgZG9zZXEgYXdhaXQgYXdhaXQtZm9yIGxldCBhZ2VudCBhdG9tIHNlbmQgc2VuZC1vZmYgcmVsZWFzZS1wZW5kaW5nLXNlbmRzICcrXG4gICAgICAnYWRkLXdhdGNoIG1hcHYgZmlsdGVydiByZW1vdmUtd2F0Y2ggYWdlbnQtZXJyb3IgcmVzdGFydC1hZ2VudCBzZXQtZXJyb3ItaGFuZGxlciBlcnJvci1oYW5kbGVyICcrXG4gICAgICAnc2V0LWVycm9yLW1vZGUhIGVycm9yLW1vZGUgc2h1dGRvd24tYWdlbnRzIHF1b3RlIHZhciBmbiBsb29wIHJlY3VyIHRocm93IHRyeSBtb25pdG9yLWVudGVyICcrXG4gICAgICAnbW9uaXRvci1leGl0IGRlZm1hY3JvIGRlZm4gZGVmbi0gbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBmb3IgZG9zeW5jIGFuZCBvciAnK1xuICAgICAgJ3doZW4gd2hlbi1ub3Qgd2hlbi1sZXQgY29tcCBqdXh0IHBhcnRpYWwgc2VxdWVuY2UgbWVtb2l6ZSBjb25zdGFudGx5IGNvbXBsZW1lbnQgaWRlbnRpdHkgYXNzZXJ0ICcrXG4gICAgICAncGVlayBwb3AgZG90byBwcm94eSBkZWZzdHJ1Y3QgZmlyc3QgcmVzdCBjb25zIGRlZnByb3RvY29sIGNhc3QgY29sbCBkZWZ0eXBlIGRlZnJlY29yZCBsYXN0IGJ1dGxhc3QgJytcbiAgICAgICdzaWdzIHJlaWZ5IHNlY29uZCBmZmlyc3QgZm5leHQgbmZpcnN0IG5uZXh0IGRlZm11bHRpIGRlZm1ldGhvZCBtZXRhIHdpdGgtbWV0YSBucyBpbi1ucyBjcmVhdGUtbnMgaW1wb3J0ICcrXG4gICAgICAncmVmZXIga2V5cyBzZWxlY3Qta2V5cyB2YWxzIGtleSB2YWwgcnNlcSBuYW1lIG5hbWVzcGFjZSBwcm9taXNlIGludG8gdHJhbnNpZW50IHBlcnNpc3RlbnQhIGNvbmohICcrXG4gICAgICAnYXNzb2MhIGRpc3NvYyEgcG9wISBkaXNqISB1c2UgY2xhc3MgdHlwZSBudW0gZmxvYXQgZG91YmxlIHNob3J0IGJ5dGUgYm9vbGVhbiBiaWdpbnQgYmlnaW50ZWdlciAnK1xuICAgICAgJ2JpZ2RlYyBwcmludC1tZXRob2QgcHJpbnQtZHVwIHRocm93LWlmIHByaW50ZiBmb3JtYXQgbG9hZCBjb21waWxlIGdldC1pbiB1cGRhdGUtaW4gcHIgcHItb24gbmV3bGluZSAnK1xuICAgICAgJ2ZsdXNoIHJlYWQgc2x1cnAgcmVhZC1saW5lIHN1YnZlYyB3aXRoLW9wZW4gbWVtZm4gdGltZSByZS1maW5kIHJlLWdyb3VwcyByYW5kLWludCByYW5kIG1vZCBsb2NraW5nICcrXG4gICAgICAnYXNzZXJ0LXZhbGlkLWZkZWNsIGFsaWFzIHJlc29sdmUgcmVmIGRlcmVmIHJlZnNldCBzd2FwISByZXNldCEgc2V0LXZhbGlkYXRvciEgY29tcGFyZS1hbmQtc2V0ISBhbHRlci1tZXRhISAnK1xuICAgICAgJ3Jlc2V0LW1ldGEhIGNvbW11dGUgZ2V0LXZhbGlkYXRvciBhbHRlciByZWYtc2V0IHJlZi1oaXN0b3J5LWNvdW50IHJlZi1taW4taGlzdG9yeSByZWYtbWF4LWhpc3RvcnkgZW5zdXJlIHN5bmMgaW8hICcrXG4gICAgICAnbmV3IG5leHQgY29uaiBzZXQhIHRvLWFycmF5IGZ1dHVyZSBmdXR1cmUtY2FsbCBpbnRvLWFycmF5IGFzZXQgZ2VuLWNsYXNzIHJlZHVjZSBtYXAgZmlsdGVyIGZpbmQgZW1wdHkgJytcbiAgICAgICdoYXNoLW1hcCBoYXNoLXNldCBzb3J0ZWQtbWFwIHNvcnRlZC1tYXAtYnkgc29ydGVkLXNldCBzb3J0ZWQtc2V0LWJ5IHZlYyB2ZWN0b3Igc2VxIGZsYXR0ZW4gcmV2ZXJzZSBhc3NvYyBkaXNzb2MgbGlzdCAnK1xuICAgICAgJ2Rpc2ogZ2V0IHVuaW9uIGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIGV4dGVuZCBleHRlbmQtdHlwZSBleHRlbmQtcHJvdG9jb2wgaW50IG50aCBkZWxheSBjb3VudCBjb25jYXQgY2h1bmsgY2h1bmstYnVmZmVyICcrXG4gICAgICAnY2h1bmstYXBwZW5kIGNodW5rLWZpcnN0IGNodW5rLXJlc3QgbWF4IG1pbiBkZWMgdW5jaGVja2VkLWluYy1pbnQgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtZGVjLWluYyB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1uZWdhdGUgJytcbiAgICAgICd1bmNoZWNrZWQtYWRkLWludCB1bmNoZWNrZWQtYWRkIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgdW5jaGVja2VkLXN1YnRyYWN0IGNodW5rLW5leHQgY2h1bmstY29ucyBjaHVua2VkLXNlcT8gcHJuIHZhcnktbWV0YSAnK1xuICAgICAgJ2xhenktc2VxIHNwcmVhZCBsaXN0KiBzdHIgZmluZC1rZXl3b3JkIGtleXdvcmQgc3ltYm9sIGdlbnN5bSBmb3JjZSByYXRpb25hbGl6ZSdcbiAgIH07XG5cbiAgdmFyIFNZTUJPTFNUQVJUID0gJ2EtekEtWl9cXFxcLSEuPysqPTw+JiNcXCcnO1xuICB2YXIgU1lNQk9MX1JFID0gJ1snICsgU1lNQk9MU1RBUlQgKyAnXVsnICsgU1lNQk9MU1RBUlQgKyAnMC05Lzs6XSonO1xuICB2YXIgU0lNUExFX05VTUJFUl9SRSA9ICdbLStdP1xcXFxkKyhcXFxcLlxcXFxkKyk/JztcblxuICB2YXIgU1lNQk9MID0ge1xuICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46IFNJTVBMRV9OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KTtcbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzsnLFxuICAgICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFxiKHRydWV8ZmFsc2V8bmlsKVxcYi9cbiAgfTtcbiAgdmFyIENPTExFQ1RJT04gPSB7XG4gICAgYmVnaW46ICdbXFxcXFtcXFxce10nLCBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIHZhciBISU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXF4nICsgU1lNQk9MX1JFXG4gIH07XG4gIHZhciBISU5UX0NPTCA9IGhsanMuQ09NTUVOVCgnXFxcXF5cXFxceycsICdcXFxcfScpO1xuICB2YXIgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIE5BTUUgPSB7XG4gICAga2V5d29yZHM6IGtleXdvcmRzLFxuICAgIGxleGVtZXM6IFNZTUJPTF9SRSxcbiAgICBjbGFzc05hbWU6ICduYW1lJywgYmVnaW46IFNZTUJPTF9SRSxcbiAgICBzdGFydHM6IEJPRFlcbiAgfTtcbiAgdmFyIERFRkFVTFRfQ09OVEFJTlMgPSBbTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUwsIFNZTUJPTF07XG5cbiAgTElTVC5jb250YWlucyA9IFtobGpzLkNPTU1FTlQoJ2NvbW1lbnQnLCAnJyksIE5BTUUsIEJPRFldO1xuICBCT0RZLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcbiAgQ09MTEVDVElPTi5jb250YWlucyA9IERFRkFVTFRfQ09OVEFJTlM7XG4gIEhJTlRfQ09MLmNvbnRhaW5zID0gW0NPTExFQ1RJT05dO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjbGonXSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW0xJU1QsIFNUUklORywgSElOVCwgSElOVF9DT0wsIENPTU1FTlQsIEtFWSwgQ09MTEVDVElPTiwgTlVNQkVSLCBMSVRFUkFMXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL14oW1xcdy4tXSt8XFxzKiNfKT89Pi8sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAnY2xvanVyZSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NtYWtlLmluJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8gc2NyaXB0aW5nIGNvbW1hbmRzXG4gICAgICAgICdicmVhayBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAnICtcbiAgICAgICAgJ2NtYWtlX3BvbGljeSBjb25maWd1cmVfZmlsZSBjb250aW51ZSBlbHNlaWYgZWxzZSBlbmRmb3JlYWNoIGVuZGZ1bmN0aW9uIGVuZGlmIGVuZG1hY3JvICcgK1xuICAgICAgICAnZW5kd2hpbGUgZXhlY3V0ZV9wcm9jZXNzIGZpbGUgZmluZF9maWxlIGZpbmRfbGlicmFyeSBmaW5kX3BhY2thZ2UgZmluZF9wYXRoICcgK1xuICAgICAgICAnZmluZF9wcm9ncmFtIGZvcmVhY2ggZnVuY3Rpb24gZ2V0X2NtYWtlX3Byb3BlcnR5IGdldF9kaXJlY3RvcnlfcHJvcGVydHkgJyArXG4gICAgICAgICdnZXRfZmlsZW5hbWVfY29tcG9uZW50IGdldF9wcm9wZXJ0eSBpZiBpbmNsdWRlIGluY2x1ZGVfZ3VhcmQgbGlzdCBtYWNybyAnICtcbiAgICAgICAgJ21hcmtfYXNfYWR2YW5jZWQgbWF0aCBtZXNzYWdlIG9wdGlvbiByZXR1cm4gc2VwYXJhdGVfYXJndW1lbnRzICcgK1xuICAgICAgICAnc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzIHNldF9wcm9wZXJ0eSBzZXQgc2l0ZV9uYW1lIHN0cmluZyB1bnNldCB2YXJpYWJsZV93YXRjaCB3aGlsZSAnICtcbiAgICAgICAgLy8gcHJvamVjdCBjb21tYW5kc1xuICAgICAgICAnYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMgYWRkX2NvbXBpbGVfb3B0aW9ucyBhZGRfY3VzdG9tX2NvbW1hbmQgYWRkX2N1c3RvbV90YXJnZXQgJyArXG4gICAgICAgICdhZGRfZGVmaW5pdGlvbnMgYWRkX2RlcGVuZGVuY2llcyBhZGRfZXhlY3V0YWJsZSBhZGRfbGlicmFyeSBhZGRfbGlua19vcHRpb25zICcgK1xuICAgICAgICAnYWRkX3N1YmRpcmVjdG9yeSBhZGRfdGVzdCBhdXhfc291cmNlX2RpcmVjdG9yeSBidWlsZF9jb21tYW5kIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QgJyArXG4gICAgICAgICdkZWZpbmVfcHJvcGVydHkgZW5hYmxlX2xhbmd1YWdlIGVuYWJsZV90ZXN0aW5nIGV4cG9ydCBmbHRrX3dyYXBfdWkgJyArXG4gICAgICAgICdnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2V0X3RhcmdldF9wcm9wZXJ0eSBnZXRfdGVzdF9wcm9wZXJ0eSBpbmNsdWRlX2RpcmVjdG9yaWVzICcgK1xuICAgICAgICAnaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QgaW5jbHVkZV9yZWd1bGFyX2V4cHJlc3Npb24gaW5zdGFsbCBsaW5rX2RpcmVjdG9yaWVzICcgK1xuICAgICAgICAnbGlua19saWJyYXJpZXMgbG9hZF9jYWNoZSBwcm9qZWN0IHF0X3dyYXBfY3BwIHF0X3dyYXBfdWkgcmVtb3ZlX2RlZmluaXRpb25zICcgK1xuICAgICAgICAnc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIHNldF90YXJnZXRfcHJvcGVydGllcyBzZXRfdGVzdHNfcHJvcGVydGllcyBzb3VyY2VfZ3JvdXAgJyArXG4gICAgICAgICd0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyB0YXJnZXRfY29tcGlsZV9vcHRpb25zICcgK1xuICAgICAgICAndGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfbGlicmFyaWVzICcgK1xuICAgICAgICAndGFyZ2V0X2xpbmtfb3B0aW9ucyB0YXJnZXRfc291cmNlcyB0cnlfY29tcGlsZSB0cnlfcnVuICcgK1xuICAgICAgICAvLyBDVGVzdCBjb21tYW5kc1xuICAgICAgICAnY3Rlc3RfYnVpbGQgY3Rlc3RfY29uZmlndXJlIGN0ZXN0X2NvdmVyYWdlIGN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkgY3Rlc3RfbWVtY2hlY2sgJyArXG4gICAgICAgICdjdGVzdF9yZWFkX2N1c3RvbV9maWxlcyBjdGVzdF9ydW5fc2NyaXB0IGN0ZXN0X3NsZWVwIGN0ZXN0X3N0YXJ0IGN0ZXN0X3N1Ym1pdCAnICtcbiAgICAgICAgJ2N0ZXN0X3Rlc3QgY3Rlc3RfdXBkYXRlIGN0ZXN0X3VwbG9hZCAnICtcbiAgICAgICAgLy8gZGVwcmVjYXRlZCBjb21tYW5kc1xuICAgICAgICAnYnVpbGRfbmFtZSBleGVjX3Byb2dyYW0gZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzIGluc3RhbGxfZmlsZXMgaW5zdGFsbF9wcm9ncmFtcyAnICtcbiAgICAgICAgJ2luc3RhbGxfdGFyZ2V0cyBsb2FkX2NvbW1hbmQgbWFrZV9kaXJlY3Rvcnkgb3V0cHV0X3JlcXVpcmVkX2ZpbGVzIHJlbW92ZSAnICtcbiAgICAgICAgJ3N1YmRpcl9kZXBlbmRzIHN1YmRpcnMgdXNlX21hbmdsZWRfbWVzYSB1dGlsaXR5X3NvdXJjZSB2YXJpYWJsZV9yZXF1aXJlcyB3cml0ZV9maWxlICcgK1xuICAgICAgICAncXQ1X3VzZV9tb2R1bGVzIHF0NV91c2VfcGFja2FnZSBxdDVfd3JhcF9jcHAgJyArXG4gICAgICAgIC8vIGNvcmUga2V5d29yZHNcbiAgICAgICAgJ29uIG9mZiB0cnVlIGZhbHNlIGFuZCBvciBub3QgY29tbWFuZCBwb2xpY3kgdGFyZ2V0IHRlc3QgZXhpc3RzIGlzX25ld2VyX3RoYW4gJyArXG4gICAgICAgICdpc19kaXJlY3RvcnkgaXNfc3ltbGluayBpc19hYnNvbHV0ZSBtYXRjaGVzIGxlc3MgZ3JlYXRlciBlcXVhbCBsZXNzX2VxdWFsICcgK1xuICAgICAgICAnZ3JlYXRlcl9lcXVhbCBzdHJsZXNzIHN0cmdyZWF0ZXIgc3RyZXF1YWwgc3RybGVzc19lcXVhbCBzdHJncmVhdGVyX2VxdWFsIHZlcnNpb25fbGVzcyAnICtcbiAgICAgICAgJ3ZlcnNpb25fZ3JlYXRlciB2ZXJzaW9uX2VxdWFsIHZlcnNpb25fbGVzc19lcXVhbCB2ZXJzaW9uX2dyZWF0ZXJfZXF1YWwgaW5fbGlzdCBkZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFwkeycsIGVuZDogJ30nXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAvLyBKUyBrZXl3b3Jkc1xuICAgICAgJ2luIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHlpZWxkIGltcG9ydCBleHBvcnQgZnJvbSBhcyBkZWZhdWx0IGF3YWl0ICcgK1xuICAgICAgLy8gQ29mZmVlIGtleXdvcmRzXG4gICAgICAndGhlbiB1bmxlc3MgdW50aWwgbG9vcCBvZiBieSB3aGVuIGFuZCBvciBpcyBpc250IG5vdCcsXG4gICAgbGl0ZXJhbDpcbiAgICAgIC8vIEpTIGxpdGVyYWxzXG4gICAgICAndHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCAnICtcbiAgICAgIC8vIENvZmZlZSBsaXRlcmFsc1xuICAgICAgJ3llcyBubyBvbiBvZmYnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ25wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQnXG4gIH07XG4gIHZhciBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sIGVuZDogL30vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEU1xuICB9O1xuICB2YXIgRVhQUkVTU0lPTlMgPSBbXG4gICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSwge3N0YXJ0czoge2VuZDogJyhcXFxccyovKT8nLCByZWxldmFuY2U6IDB9fSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJycnLywgZW5kOiAvJycnLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLy8vJywgZW5kOiAnLy8vJyxcbiAgICAgICAgICBjb250YWluczogW1NVQlNULCBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcvL1tnaW1dezAsM30oPz1cXFxcVyknLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLy8gcmVnZXggY2FuJ3Qgc3RhcnQgd2l0aCBzcGFjZSB0byBwYXJzZSB4IC8gMiAvIDMgYXMgdHdvIGRpdmlzaW9uc1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggKiwgYW5kIGl0IHN1cHBvcnRzIGFuIFwiaWxsZWdhbFwiIGluIHRoZSBtYWluIG1vZGVcbiAgICAgICAgICBiZWdpbjogL1xcLyg/IVsgKl0pLio/KD8hW1xcXFxdKS5cXC9bZ2ltXXswLDN9KD89XFxXKS9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICdAJyArIEpTX0lERU5UX1JFIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgfSxcbiAgICB7XG4gICAgICBzdWJMYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYGBgJywgZW5kOiAnYGBgJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIHZhciBUSVRMRSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSlNfSURFTlRfUkV9KTtcbiAgdmFyIFBBUkFNU19SRSA9ICcoXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlstPV0+JztcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXChbXlxcXFwoXScsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIC8qIFdlIG5lZWQgYW5vdGhlciBjb250YWluZWQgbmFtZWxlc3MgbW9kZSB0byBub3QgaGF2ZSBldmVyeSBuZXN0ZWRcbiAgICBwYWlyIG9mIHBhcmVucyB0byBiZSBjYWxsZWQgXCJwYXJhbXNcIiAqL1xuICAgIGNvbnRhaW5zOiBbe1xuICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICB9XVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjb2ZmZWUnLCAnY3NvbicsICdpY2VkJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OUy5jb25jYXQoW1xuICAgICAgaGxqcy5DT01NRU5UKCcjIyMnLCAnIyMjJyksXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBBUkFNU19SRSwgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9uIHN0YXJ0XG4gICAgICAgIGJlZ2luOiAvWzpcXCgsPV1cXHMqLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQQVJBTVNfUkUsIGVuZDogJ1stPV0+JyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtUSVRMRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBKU19JREVOVF9SRSArICc6JywgZW5kOiAnOicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLCByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnX3wwIGFzIGF0IGNvZml4IGVsc2UgZW5kIGV4aXN0cyBleGlzdHMyIGZpeCBmb3IgZm9yYWxsIGZ1biBpZiBJRiBpbiBsZXQgJyArXG4gICAgICAgICdtYXRjaCBtb2QgUHJvcCByZXR1cm4gU2V0IHRoZW4gVHlwZSB1c2luZyB3aGVyZSB3aXRoICcgK1xuICAgICAgICAnQWJvcnQgQWJvdXQgQWRkIEFkbWl0IEFkbWl0dGVkIEFsbCBBcmd1bWVudHMgQXNzdW1wdGlvbnMgQXhpb20gQmFjayBCYWNrVG8gJyArXG4gICAgICAgICdCYWNrdHJhY2sgQmluZCBCbGFja2xpc3QgQ2Fub25pY2FsIENkIENoZWNrIENsYXNzIENsYXNzZXMgQ2xvc2UgQ29lcmNpb24gJyArXG4gICAgICAgICdDb2VyY2lvbnMgQ29GaXhwb2ludCBDb0luZHVjdGl2ZSBDb2xsZWN0aW9uIENvbWJpbmVkIENvbXB1dGUgQ29uamVjdHVyZSAnICtcbiAgICAgICAgJ0NvbmplY3R1cmVzIENvbnN0YW50IGNvbnN0ciBDb25zdHJhaW50IENvbnN0cnVjdG9ycyBDb250ZXh0IENvcm9sbGFyeSAnICtcbiAgICAgICAgJ0NyZWF0ZUhpbnREYiBDdXQgRGVjbGFyZSBEZWZpbmVkIERlZmluaXRpb24gRGVsaW1pdCBEZXBlbmRlbmNpZXMgRGVwZW5kZW50JyArXG4gICAgICAgICdEZXJpdmUgRHJvcCBlYXV0byBFbmQgRXF1YWxpdHkgRXZhbCBFeGFtcGxlIEV4aXN0ZW50aWFsIEV4aXN0ZW50aWFscyAnICtcbiAgICAgICAgJ0V4aXN0aW5nIEV4cG9ydCBleHBvcnRpbmcgRXh0ZXJuIEV4dHJhY3QgRXh0cmFjdGlvbiBGYWN0IEZpZWxkIEZpZWxkcyBGaWxlICcgK1xuICAgICAgICAnRml4cG9pbnQgRm9jdXMgZm9yIEZyb20gRnVuY3Rpb24gRnVuY3Rpb25hbCBHZW5lcmFsaXphYmxlIEdsb2JhbCBHb2FsIEdyYWIgJyArXG4gICAgICAgICdHcmFtbWFyIEdyYXBoIEd1YXJkZWQgSGVhcCBIaW50IEhpbnREYiBIaW50cyBIeXBvdGhlc2VzIEh5cG90aGVzaXMgaWRlbnQgJyArXG4gICAgICAgICdJZGVudGl0eSBJZiBJbW1lZGlhdGUgSW1wbGljaXQgSW1wb3J0IEluY2x1ZGUgSW5kdWN0aXZlIEluZml4IEluZm8gSW5pdGlhbCAnICtcbiAgICAgICAgJ0lubGluZSBJbnNwZWN0IEluc3RhbmNlIEluc3RhbmNlcyBJbnRybyBJbnRyb3MgSW52ZXJzaW9uIEludmVyc2lvbl9jbGVhciAnICtcbiAgICAgICAgJ0xhbmd1YWdlIExlZnQgTGVtbWEgTGV0IExpYnJhcmllcyBMaWJyYXJ5IExvYWQgTG9hZFBhdGggTG9jYWwgTG9jYXRlIEx0YWMgTUwgJyArXG4gICAgICAgICdNb2RlIE1vZHVsZSBNb2R1bGVzIE1vbm9tb3JwaGljIE1vcnBoaXNtIE5leHQgTm9JbmxpbmUgTm90YXRpb24gT2JsaWdhdGlvbiAnICtcbiAgICAgICAgJ09ibGlnYXRpb25zIE9wYXF1ZSBPcGVuIE9wdGltaXplIE9wdGlvbnMgUGFyYW1ldGVyIFBhcmFtZXRlcnMgUGFyYW1ldHJpYyAnICtcbiAgICAgICAgJ1BhdGggUGF0aHMgcGF0dGVybiBQb2x5bW9ycGhpYyBQcmV0ZXJtIFByaW50IFByaW50aW5nIFByb2dyYW0gUHJvamVjdGlvbnMgJyArXG4gICAgICAgICdQcm9vZiBQcm9wb3NpdGlvbiBQd2QgUWVkIFF1aXQgUmVjIFJlY29yZCBSZWN1cnNpdmUgUmVkaXJlY3QgUmVsYXRpb24gUmVtYXJrICcgK1xuICAgICAgICAnUmVtb3ZlIFJlcXVpcmUgUmVzZXJ2ZWQgUmVzZXQgUmVzb2x2ZSBSZXN0YXJ0IFJld3JpdGUgUmlnaHQgUmluZyBSaW5ncyBTYXZlICcgK1xuICAgICAgICAnU2NoZW1lIFNjb3BlIFNjb3BlcyBTY3JpcHQgU2VhcmNoIFNlYXJjaEFib3V0IFNlYXJjaEhlYWQgU2VhcmNoUGF0dGVybiAnICtcbiAgICAgICAgJ1NlYXJjaFJld3JpdGUgU2VjdGlvbiBTZXBhcmF0ZSBTZXQgU2V0b2lkIFNob3cgU29sdmUgU29ydGVkIFN0ZXAgU3RyYXRlZ2llcyAnICtcbiAgICAgICAgJ1N0cmF0ZWd5IFN0cnVjdHVyZSBTdWJDbGFzcyBUYWJsZSBUYWJsZXMgVGFjdGljIFRlcm0gVGVzdCBUaGVvcmVtIFRpbWUgJyArXG4gICAgICAgICdUaW1lb3V0IFRyYW5zcGFyZW50IFR5cGUgVHlwZWNsYXNzZXMgVHlwZXMgVW5kZWxpbWl0IFVuZG8gVW5mb2N1cyBVbmZvY3VzZWQgJyArXG4gICAgICAgICdVbmZvbGQgVW5pdmVyc2UgVW5pdmVyc2VzIFVuc2V0IFVuc2hlbHZlIHVzaW5nIFZhcmlhYmxlIFZhcmlhYmxlcyBWYXJpYW50ICcgK1xuICAgICAgICAnVmVyYm9zZSBWaXNpYmlsaXR5IHdoZXJlIHdpdGgnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhYnN0cmFjdCBhYnN1cmQgYWRtaXQgYWZ0ZXIgYXBwbHkgYXMgYXNzZXJ0IGFzc3VtcHRpb24gYXQgYXV0byBhdXRvcmV3cml0ZSAnICtcbiAgICAgICAgJ2F1dG91bmZvbGQgYmVmb3JlIGJvdHRvbSBidGF1dG8gYnkgY2FzZSBjYXNlX2VxIGNibiBjYnYgY2hhbmdlICcgK1xuICAgICAgICAnY2xhc3NpY2FsX2xlZnQgY2xhc3NpY2FsX3JpZ2h0IGNsZWFyIGNsZWFyYm9keSBjb2ZpeCBjb21wYXJlIGNvbXB1dGUgJyArXG4gICAgICAgICdjb25ncnVlbmNlIGNvbnN0cl9lcSBjb25zdHJ1Y3RvciBjb250cmFkaWN0IGNvbnRyYWRpY3Rpb24gY3V0IGN1dHJld3JpdGUgJyArXG4gICAgICAgICdjeWNsZSBkZWNpZGUgZGVjb21wb3NlIGRlcGVuZGVudCBkZXN0cnVjdCBkZXN0cnVjdGlvbiBkaW50dWl0aW9uICcgK1xuICAgICAgICAnZGlzY3JpbWluYXRlIGRpc2NyUiBkbyBkb3VibGUgZHRhdXRvIGVhcHBseSBlYXNzdW1wdGlvbiBlYXV0byBlY2FzZSAnICtcbiAgICAgICAgJ2Vjb25zdHJ1Y3RvciBlZGVzdHJ1Y3QgZWRpc2NyaW1pbmF0ZSBlZWxpbSBlZXhhY3QgZWV4aXN0cyBlaW5kdWN0aW9uICcgK1xuICAgICAgICAnZWluamVjdGlvbiBlbGVmdCBlbGltIGVsaW10eXBlIGVub3VnaCBlcXVhbGl0eSBlcmV3cml0ZSBlcmlnaHQgJyArXG4gICAgICAgICdlc2ltcGxpZnlfZXEgZXNwbGl0IGV2YXIgZXhhY3QgZXhhY3RseV9vbmNlIGV4ZmFsc28gZXhpc3RzIGZfZXF1YWwgZmFpbCAnICtcbiAgICAgICAgJ2ZpZWxkIGZpZWxkX3NpbXBsaWZ5IGZpZWxkX3NpbXBsaWZ5X2VxIGZpcnN0IGZpcnN0b3JkZXIgZml4IGZvbGQgZm91cmllciAnICtcbiAgICAgICAgJ2Z1bmN0aW9uYWwgZ2VuZXJhbGl6ZSBnZW5lcmFsaXppbmcgZ2ZhaWwgZ2l2ZV91cCBoYXNfZXZhciBobmYgaWR0YWMgaW4gJyArXG4gICAgICAgICdpbmR1Y3Rpb24gaW5qZWN0aW9uIGluc3RhbnRpYXRlIGludHJvIGludHJvX3BhdHRlcm4gaW50cm9zIGludHVpdGlvbiAnICtcbiAgICAgICAgJ2ludmVyc2lvbiBpbnZlcnNpb25fY2xlYXIgaXNfZXZhciBpc192YXIgbGFwcGx5IGxhenkgbGVmdCBsaWEgbHJhIG1vdmUgJyArXG4gICAgICAgICduYXRpdmVfY29tcHV0ZSBuaWEgbnNhdHogb21lZ2Egb25jZSBwYXR0ZXJuIHBvc2UgcHJvZ3Jlc3MgcHJvb2YgcHNhdHogcXVvdGUgJyArXG4gICAgICAgICdyZWNvcmQgcmVkIHJlZmluZSByZWZsZXhpdml0eSByZW1lbWJlciByZW5hbWUgcmVwZWF0IHJlcGxhY2UgcmV2ZXJ0ICcgK1xuICAgICAgICAncmV2Z29hbHMgcmV3cml0ZSByZXdyaXRlX3N0cmF0IHJpZ2h0IHJpbmcgcmluZ19zaW1wbGlmeSBydGF1dG8gc2V0ICcgK1xuICAgICAgICAnc2V0b2lkX3JlZmxleGl2aXR5IHNldG9pZF9yZXBsYWNlIHNldG9pZF9yZXdyaXRlIHNldG9pZF9zeW1tZXRyeSAnICtcbiAgICAgICAgJ3NldG9pZF90cmFuc2l0aXZpdHkgc2hlbHZlIHNoZWx2ZV91bmlmaWFibGUgc2ltcGwgc2ltcGxlIHNpbXBsaWZ5X2VxIHNvbHZlICcgK1xuICAgICAgICAnc3BlY2lhbGl6ZSBzcGxpdCBzcGxpdF9SYWJzIHNwbGl0X1JtdWx0IHN0ZXBsIHN0ZXByIHN1YnN0IHN1bSBzd2FwICcgK1xuICAgICAgICAnc3ltbWV0cnkgdGFjdGljIHRhdXRvIHRpbWUgdGltZW91dCB0b3AgdHJhbnNpdGl2aXR5IHRyaXZpYWwgdHJ5IHRyeWlmICcgK1xuICAgICAgICAndW5mb2xkIHVuaWZ5IHVudGlsIHVzaW5nIHZtX2NvbXB1dGUgd2l0aCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKFxcXFwqJywgJ1xcXFwqXFxcXCknKSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgYmVnaW46ICdcXFxcfFxcXFxzKicsXG4gICAgICAgIGVuZDogJ1xcXFx3KydcbiAgICAgIH0sXG4gICAgICB7YmVnaW46IC9bLT1dPi99IC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvcyAoaGxqcykge1xuXG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFt7IC8vIGVzY2FwZWRcbiAgICAgICAgICBiZWdpbjogXCJcXFwiXFxcIlwiLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IFwiXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIENPU19LRVlXT1JEUyA9XG4gICAgJ3Byb3BlcnR5IHBhcmFtZXRlciBjbGFzcyBjbGFzc21ldGhvZCBjbGllbnRtZXRob2QgZXh0ZW5kcyBhcyBicmVhayAnICtcbiAgICAnY2F0Y2ggY2xvc2UgY29udGludWUgZG8gZHwwIGVsc2UgZWxzZWlmIGZvciBnb3RvIGhhbHQgaGFuZyBofDAgaWYgam9iICcgK1xuICAgICdqfDAga2lsbCBrfDAgbG9jayBsfDAgbWVyZ2UgbmV3IG9wZW4gcXVpdCBxfDAgcmVhZCByfDAgcmV0dXJuIHNldCBzfDAgJyArXG4gICAgJ3Rjb21taXQgdGhyb3cgdHJvbGxiYWNrIHRyeSB0c3RhcnQgdXNlIHZpZXcgd2hpbGUgd3JpdGUgd3wwIHhlY3V0ZSB4fDAgJyArXG4gICAgJ3praWxsIHpuc3BhY2Ugem4genRyYXAgendyaXRlIHp3IHp6ZHVtcCB6endyaXRlIHByaW50IHpicmVhayB6aW5zZXJ0ICcgK1xuICAgICd6bG9hZCB6cHJpbnQgenJlbW92ZSB6c2F2ZSB6enByaW50IG12IG12Y2FsbCBtdmNydCBtdmRpbSBtdnByaW50IHpxdWl0ICcgK1xuICAgICd6c3luYyBhc2NpaSc7XG5cbiAgICAvLyByZWdpc3RlcmVkIGZ1bmN0aW9uIC0gbm8gbmVlZCBpbiB0aGVtIGR1ZSB0byBhbGwgZnVuY3Rpb25zIGFyZSBoaWdobGlnaHRlZCxcbiAgICAvLyBidXQgSSdsbCBqdXN0IGxlYXZlIHRoaXMgaGVyZS5cblxuICAgIC8vXCIkYml0XCIsIFwiJGJpdGNvdW50XCIsXG4gICAgLy9cIiRiaXRmaW5kXCIsIFwiJGJpdGxvZ2ljXCIsIFwiJGNhc2VcIiwgXCIkY2hhclwiLCBcIiRjbGFzc21ldGhvZFwiLCBcIiRjbGFzc25hbWVcIixcbiAgICAvL1wiJGNvbXBpbGVcIiwgXCIkZGF0YVwiLCBcIiRkZWNpbWFsXCIsIFwiJGRvdWJsZVwiLCBcIiRleHRyYWN0XCIsIFwiJGZhY3RvclwiLFxuICAgIC8vXCIkZmluZFwiLCBcIiRmbnVtYmVyXCIsIFwiJGdldFwiLCBcIiRpbmNyZW1lbnRcIiwgXCIkaW51bWJlclwiLCBcIiRpc29iamVjdFwiLFxuICAgIC8vXCIkaXN2YWxpZGRvdWJsZVwiLCBcIiRpc3ZhbGlkbnVtXCIsIFwiJGp1c3RpZnlcIiwgXCIkbGVuZ3RoXCIsIFwiJGxpc3RcIixcbiAgICAvL1wiJGxpc3RidWlsZFwiLCBcIiRsaXN0ZGF0YVwiLCBcIiRsaXN0ZmluZFwiLCBcIiRsaXN0ZnJvbXN0cmluZ1wiLCBcIiRsaXN0Z2V0XCIsXG4gICAgLy9cIiRsaXN0bGVuZ3RoXCIsIFwiJGxpc3RuZXh0XCIsIFwiJGxpc3RzYW1lXCIsIFwiJGxpc3R0b3N0cmluZ1wiLCBcIiRsaXN0dmFsaWRcIixcbiAgICAvL1wiJGxvY2F0ZVwiLCBcIiRtYXRjaFwiLCBcIiRtZXRob2RcIiwgXCIkbmFtZVwiLCBcIiRuY29udmVydFwiLCBcIiRuZXh0XCIsXG4gICAgLy9cIiRub3JtYWxpemVcIiwgXCIkbm93XCIsIFwiJG51bWJlclwiLCBcIiRvcmRlclwiLCBcIiRwYXJhbWV0ZXJcIiwgXCIkcGllY2VcIixcbiAgICAvL1wiJHByZWZldGNob2ZmXCIsIFwiJHByZWZldGNob25cIiwgXCIkcHJvcGVydHlcIiwgXCIkcWxlbmd0aFwiLCBcIiRxc3Vic2NyaXB0XCIsXG4gICAgLy9cIiRxdWVyeVwiLCBcIiRyYW5kb21cIiwgXCIkcmVwbGFjZVwiLCBcIiRyZXZlcnNlXCIsIFwiJHNjb252ZXJ0XCIsIFwiJHNlbGVjdFwiLFxuICAgIC8vXCIkc29ydGJlZ2luXCIsIFwiJHNvcnRlbmRcIiwgXCIkc3RhY2tcIiwgXCIkdGV4dFwiLCBcIiR0cmFuc2xhdGVcIiwgXCIkdmlld1wiLFxuICAgIC8vXCIkd2FzY2lpXCIsIFwiJHdjaGFyXCIsIFwiJHdleHRyYWN0XCIsIFwiJHdmaW5kXCIsIFwiJHdpc3dpZGVcIiwgXCIkd2xlbmd0aFwiLFxuICAgIC8vXCIkd3JldmVyc2VcIiwgXCIkeGVjdXRlXCIsIFwiJHphYnNcIiwgXCIkemFyY2Nvc1wiLCBcIiR6YXJjc2luXCIsIFwiJHphcmN0YW5cIixcbiAgICAvL1wiJHpjb3NcIiwgXCIkemNvdFwiLCBcIiR6Y3NjXCIsIFwiJHpkYXRlXCIsIFwiJHpkYXRlaFwiLCBcIiR6ZGF0ZXRpbWVcIixcbiAgICAvL1wiJHpkYXRldGltZWhcIiwgXCIkemV4cFwiLCBcIiR6aGV4XCIsIFwiJHpsblwiLCBcIiR6bG9nXCIsIFwiJHpwb3dlclwiLCBcIiR6c2VjXCIsXG4gICAgLy9cIiR6c2luXCIsIFwiJHpzcXJcIiwgXCIkenRhblwiLCBcIiR6dGltZVwiLCBcIiR6dGltZWhcIiwgXCIkemJvb2xlYW5cIixcbiAgICAvL1wiJHpjb252ZXJ0XCIsIFwiJHpjcmNcIiwgXCIkemN5Y1wiLCBcIiR6ZGFzY2lpXCIsIFwiJHpkY2hhclwiLCBcIiR6ZlwiLFxuICAgIC8vXCIkemlzd2lkZVwiLCBcIiR6bGFzY2lpXCIsIFwiJHpsY2hhclwiLCBcIiR6bmFtZVwiLCBcIiR6cG9zaXRpb25cIiwgXCIkenFhc2NpaVwiLFxuICAgIC8vXCIkenFjaGFyXCIsIFwiJHpzZWFyY2hcIiwgXCIkenNlZWtcIiwgXCIkenN0cmlwXCIsIFwiJHp3YXNjaWlcIiwgXCIkendjaGFyXCIsXG4gICAgLy9cIiR6d2lkdGhcIiwgXCIkendwYWNrXCIsIFwiJHp3YnBhY2tcIiwgXCIkend1bnBhY2tcIiwgXCIkendidW5wYWNrXCIsIFwiJHp6ZW5rYWt1XCIsXG4gICAgLy9cIiRjaGFuZ2VcIiwgXCIkbXZcIiwgXCIkbXZhdFwiLCBcIiRtdmZtdFwiLCBcIiRtdmZtdHNcIiwgXCIkbXZpY29udlwiLFxuICAgIC8vXCIkbXZpY29udnNcIiwgXCIkbXZpbm1hdFwiLCBcIiRtdmxvdmVyXCIsIFwiJG12b2NvbnZcIiwgXCIkbXZvY29udnNcIiwgXCIkbXZyYWlzZVwiLFxuICAgIC8vXCIkbXZ0cmFuc1wiLCBcIiRtdnZcIiwgXCIkbXZuYW1lXCIsIFwiJHpiaXRhbmRcIiwgXCIkemJpdGNvdW50XCIsIFwiJHpiaXRmaW5kXCIsXG4gICAgLy9cIiR6Yml0Z2V0XCIsIFwiJHpiaXRsZW5cIiwgXCIkemJpdG5vdFwiLCBcIiR6Yml0b3JcIiwgXCIkemJpdHNldFwiLCBcIiR6Yml0c3RyXCIsXG4gICAgLy9cIiR6Yml0eG9yXCIsIFwiJHppbmNyZW1lbnRcIiwgXCIkem5leHRcIiwgXCIkem9yZGVyXCIsIFwiJHpwcmV2aW91c1wiLCBcIiR6c29ydFwiLFxuICAgIC8vXCJkZXZpY2VcIiwgXCIkZWNvZGVcIiwgXCIkZXN0YWNrXCIsIFwiJGV0cmFwXCIsIFwiJGhhbHRcIiwgXCIkaG9yb2xvZ1wiLFxuICAgIC8vXCIkaW9cIiwgXCIkam9iXCIsIFwiJGtleVwiLCBcIiRuYW1lc3BhY2VcIiwgXCIkcHJpbmNpcGFsXCIsIFwiJHF1aXRcIiwgXCIkcm9sZXNcIixcbiAgICAvL1wiJHN0b3JhZ2VcIiwgXCIkc3lzdGVtXCIsIFwiJHRlc3RcIiwgXCIkdGhpc1wiLCBcIiR0bGV2ZWxcIiwgXCIkdXNlcm5hbWVcIixcbiAgICAvL1wiJHhcIiwgXCIkeVwiLCBcIiR6YVwiLCBcIiR6YlwiLCBcIiR6Y2hpbGRcIiwgXCIkemVvZlwiLCBcIiR6ZW9zXCIsIFwiJHplcnJvclwiLFxuICAgIC8vXCIkemhvcm9sb2dcIiwgXCIkemlvXCIsIFwiJHpqb2JcIiwgXCIkem1vZGVcIiwgXCIkem5zcGFjZVwiLCBcIiR6cGFyZW50XCIsIFwiJHpwaVwiLFxuICAgIC8vXCIkenBvc1wiLCBcIiR6cmVmZXJlbmNlXCIsIFwiJHpzdG9yYWdlXCIsIFwiJHp0aW1lc3RhbXBcIiwgXCIkenRpbWV6b25lXCIsXG4gICAgLy9cIiR6dHJhcFwiLCBcIiR6dmVyc2lvblwiXG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFtcImNvc1wiLCBcImNsc1wiXSxcbiAgICBrZXl3b3JkczogQ09TX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgICAgIGJlZ2luOiAvOy8sIGVuZDogXCIkXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gRnVuY3Rpb25zIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOiB3cml0ZSAkenRpbWUoNjAqNjAqMyksICQkbXlGdW5jKDEwKSwgJCReVmFsKDEpXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICBiZWdpbjogLyg/OlxcJFxcJD98XFwuXFwuKVxcXj9bYS16QS1aXSsvXG4gICAgICB9LFxuICAgICAgeyAvLyBNYWNybyBjb21tYW5kOiBxdWl0ICQkJE9LXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICBiZWdpbjogL1xcJFxcJFxcJFthLXpBLVpdKy9cbiAgICAgIH0sXG4gICAgICB7IC8vIFNwZWNpYWwgKGdsb2JhbCkgdmFyaWFibGVzOiB3cml0ZSAlcmVxdWVzdC5Db250ZW50OyBCdWlsdC1pbiBjbGFzc2VzOiAlTGlicmFyeS5JbnRlZ2VyXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICBiZWdpbjogLyVbYS16XSsoPzpcXC5bYS16XSspKi9cbiAgICAgIH0sXG4gICAgICB7IC8vIEdsb2JhbCB2YXJpYWJsZTogc2V0IF5nbG9iYWxOYW1lID0gMTIgd3JpdGUgXmdsb2JhbE5hbWVcbiAgICAgICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogL1xcXiU/W2EtekEtWl1bXFx3XSovXG4gICAgICB9LFxuICAgICAgeyAvLyBTb21lIGNvbnRyb2wgY29uc3RydWN0aW9uczogZG8gIyNjbGFzcyhQYWNrYWdlLkNsYXNzTmFtZSkuTWV0aG9kKCksICMjc3VwZXIoKVxuICAgICAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiLFxuICAgICAgICBiZWdpbjogLyMjY2xhc3N8IyNzdXBlcnwjZGVmaW5lfCNkaW0vXG4gICAgICB9LFxuXG4gICAgICAvLyBzdWItbGFuZ3VhZ2VzOiBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSBobGpzIGJ5IDExLzE1LzIwMTVcbiAgICAgIC8vIGxlZnQgZm9yIHRoZSBmdXR1cmUgaW1wbGVtZW50YXRpb24uXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJnNxbFxcKC8sICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6IFwic3FsXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJihqc3xqc2NyaXB0fGphdmFzY3JpcHQpPC8sIGVuZDogLz4vLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcImphdmFzY3JpcHRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBicmFrZXMgZmlyc3QgYW5kIGxhc3QgdGFnLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW1iZWQgYSB2YWxpZCBodG1sXG4gICAgICAgIGJlZ2luOiAvJmh0bWw8XFxzKjwvLCBlbmQ6IC8+XFxzKj4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogXCJ4bWxcIlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBSRVNPVVJDRVMgPSAncHJpbWl0aXZlIHJzY190ZW1wbGF0ZSc7XG5cbiAgdmFyIENPTU1BTkRTID0gJ2dyb3VwIGNsb25lIG1zIG1hc3RlciBsb2NhdGlvbiBjb2xvY2F0aW9uIG9yZGVyIGZlbmNpbmdfdG9wb2xvZ3kgJyArXG4gICAgICAncnNjX3RpY2tldCBhY2xfdGFyZ2V0IGFjbF9ncm91cCB1c2VyIHJvbGUgJyArXG4gICAgICAndGFnIHhtbCc7XG5cbiAgdmFyIFBST1BFUlRZX1NFVFMgPSAncHJvcGVydHkgcnNjX2RlZmF1bHRzIG9wX2RlZmF1bHRzJztcblxuICB2YXIgS0VZV09SRFMgPSAncGFyYW1zIG1ldGEgb3BlcmF0aW9ucyBvcCBydWxlIGF0dHJpYnV0ZXMgdXRpbGl6YXRpb24nO1xuXG4gIHZhciBPUEVSQVRPUlMgPSAncmVhZCB3cml0ZSBkZW55IGRlZmluZWQgbm90X2RlZmluZWQgaW5fcmFuZ2UgZGF0ZSBzcGVjIGluICcgK1xuICAgICAgJ3JlZiByZWZlcmVuY2UgYXR0cmlidXRlIHR5cGUgeHBhdGggdmVyc2lvbiBhbmQgb3IgbHQgZ3QgdGFnICcgK1xuICAgICAgJ2x0ZSBndGUgZXEgbmUgXFxcXCc7XG5cbiAgdmFyIFRZUEVTID0gJ251bWJlciBzdHJpbmcnO1xuXG4gIHZhciBMSVRFUkFMUyA9ICdNYXN0ZXIgU3RhcnRlZCBTbGF2ZSBTdG9wcGVkIHN0YXJ0IHByb21vdGUgZGVtb3RlIHN0b3AgbW9uaXRvciB0cnVlIGZhbHNlJztcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3JtJywgJ3BjbWsnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyArICcgJyArIE9QRVJBVE9SUyArICcgJyArIFRZUEVTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbm9kZScsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogJ1xcXFxzKihbXFxcXHdfLV0rOik/JyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKltcXFxcJFxcXFx3X11bXFxcXHdfLV0qJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogUkVTT1VSQ0VTLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgZW5kOiAnXFxcXHMqW1xcXFwkXFxcXHdfXVtcXFxcd18tXSonLFxuICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgZW5kOiAnXFxcXHMqQD9bXFxcXHdfXVtcXFxcd19cXFxcLjotXSonXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBDT01NQU5EUy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpXFxcXHMrJyxcbiAgICAgICAga2V5d29yZHM6IENPTU1BTkRTLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgZW5kOiAnW1xcXFwkXFxcXHdfXVtcXFxcd18tXSonXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFBST1BFUlRZX1NFVFMsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICBlbmQ6ICdcXFxccyooW1xcXFx3Xy1dKzopPydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyhvY2Z8c3lzdGVtZHxzZXJ2aWNlfGxzYik6W1xcXFx3XzotXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCspPyhtc3xzfGh8bSk/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdbLV0/KGluZmluaXR5fGluZiknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogLyhbQS1aYS16XFwkX1xcI11bXFx3Xy1dKyk9LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICBiZWdpbjogJzwvPycsXG4gICAgICAgIGVuZDogJy8/PicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJTlRfU1VGRklYID0gJyhfKlt1aV0oOHwxNnwzMnw2NHwxMjgpKT8nO1xuICB2YXIgRkxPQVRfU1VGRklYID0gJyhfKmYoMzJ8NjQpKT8nO1xuICB2YXIgQ1JZU1RBTF9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdypbIT89XT8nO1xuICB2YXIgQ1JZU1RBTF9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dXFxcXEB8PDx8Pj58Wz0hXX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+fF18Ly98Ly89fCZbLSsqXT0/fCZcXFxcKlxcXFwqfFxcXFxbXFxcXF1bPT9dPyc7XG4gIHZhciBDUllTVEFMX1BBVEhfUkUgPSAnW0EtWmEtel9dXFxcXHcqKDo6XFxcXHcrKSooXFxcXD98XFxcXCEpPyc7XG4gIHZhciBDUllTVEFMX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWJzdHJhY3QgYWxpYXMgYW5ub3RhdGlvbiBhcyBhcz8gYXNtIGJlZ2luIGJyZWFrIGNhc2UgY2xhc3MgZGVmIGRvIGVsc2UgZWxzaWYgZW5kIGVuc3VyZSBlbnVtIGV4dGVuZCBmb3IgZnVuIGlmICcgK1xuICAgICAgJ2luY2x1ZGUgaW5zdGFuY2Vfc2l6ZW9mIGlzX2E/IGxpYiBtYWNybyBtb2R1bGUgbmV4dCBuaWw/IG9mIG91dCBwb2ludGVyb2YgcHJpdmF0ZSBwcm90ZWN0ZWQgcmVzY3VlIHJlc3BvbmRzX3RvPyAnICtcbiAgICAgICdyZXR1cm4gcmVxdWlyZSBzZWxlY3Qgc2VsZiBzaXplb2Ygc3RydWN0IHN1cGVyIHRoZW4gdHlwZSB0eXBlb2YgdW5pb24gdW5pbml0aWFsaXplZCB1bmxlc3MgdW50aWwgdmVyYmF0aW0gd2hlbiB3aGlsZSB3aXRoIHlpZWxkICcgK1xuICAgICAgJ19fRElSX18gX19FTkRfTElORV9fIF9fRklMRV9fIF9fTElORV9fJyxcbiAgICBsaXRlcmFsOiAnZmFsc2UgbmlsIHRydWUnXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjeycsIGVuZDogJ30nLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBBTlNJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxce1xcXFx7JywgZW5kOiAnXFxcXH1cXFxcfSd9LFxuICAgICAge2JlZ2luOiAnXFxcXHslJywgZW5kOiAnJVxcXFx9J31cbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlUGFyZW4oYmVnaW4sIGVuZCkge1xuICAgIHZhclxuICAgIGNvbnRhaW5zID0gW3tiZWdpbjogYmVnaW4sIGVuZDogZW5kfV07XG4gICAgY29udGFpbnNbMF0uY29udGFpbnMgPSBjb250YWlucztcbiAgICByZXR1cm4gY29udGFpbnM7XG4gIH1cbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogLycvLCBlbmQ6IC8nL30sXG4gICAgICB7YmVnaW46IC9cIi8sIGVuZDogL1wiL30sXG4gICAgICB7YmVnaW46IC9gLywgZW5kOiAvYC99LFxuICAgICAge2JlZ2luOiAnJVtRd2ldP1xcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFwoJywgJ1xcXFwpJyl9LFxuICAgICAge2JlZ2luOiAnJVtRd2ldP1xcXFxbJywgZW5kOiAnXFxcXF0nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFxbJywgJ1xcXFxdJyl9LFxuICAgICAge2JlZ2luOiAnJVtRd2ldP3snLCBlbmQ6ICd9JywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCd7JywgJ30nKX0sXG4gICAgICB7YmVnaW46ICclW1F3aV0/PCcsIGVuZDogJz4nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJzwnLCAnPicpfSxcbiAgICAgIHtiZWdpbjogJyVbUXdpXT9cXFxcfCcsIGVuZDogJ1xcXFx8J30sXG4gICAgICB7YmVnaW46IC88PC1cXHcrJC8sIGVuZDogL15cXHMqXFx3KyQvfSxcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcbiAgdmFyIFFfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJyVxXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXCgnLCAnXFxcXCknKX0sXG4gICAgICB7YmVnaW46ICclcVxcXFxbJywgZW5kOiAnXFxcXF0nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFxbJywgJ1xcXFxdJyl9LFxuICAgICAge2JlZ2luOiAnJXF7JywgZW5kOiAnfScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbigneycsICd9Jyl9LFxuICAgICAge2JlZ2luOiAnJXE8JywgZW5kOiAnPicsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+Jyl9LFxuICAgICAge2JlZ2luOiAnJXFcXFxcfCcsIGVuZDogJ1xcXFx8J30sXG4gICAgICB7YmVnaW46IC88PC0nXFx3KyckLywgZW5kOiAvXlxccypcXHcrJC99LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwLFxuICB9O1xuICB2YXIgUkVHRVhQID0ge1xuICAgIGJlZ2luOiAnKD8hJX0pKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcbnxcXFxcYihjYXNlfGlmfHNlbGVjdHx1bmxlc3N8dW50aWx8d2hlbnx3aGlsZSlcXFxcYilcXFxccyonLFxuICAgIGtleXdvcmRzOiAnY2FzZSBpZiBzZWxlY3QgdW5sZXNzIHVudGlsIHdoZW4gd2hpbGUnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAnLy9bYS16XSonLCByZWxldmFuY2U6IDB9LFxuICAgICAgICAgIHtiZWdpbjogJy8oPyFcXFxcLyknLCBlbmQ6ICcvW2Etel0qJ30sXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgUkVHRVhQMiA9IHtcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJyVyXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXCgnLCAnXFxcXCknKX0sXG4gICAgICB7YmVnaW46ICclclxcXFxbJywgZW5kOiAnXFxcXF0nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFxbJywgJ1xcXFxdJyl9LFxuICAgICAge2JlZ2luOiAnJXJ7JywgZW5kOiAnfScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbigneycsICd9Jyl9LFxuICAgICAge2JlZ2luOiAnJXI8JywgZW5kOiAnPicsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+Jyl9LFxuICAgICAge2JlZ2luOiAnJXJcXFxcfCcsIGVuZDogJ1xcXFx8J30sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIEFUVFJJQlVURSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0BcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZyd9KVxuICAgIF1cbiAgfTtcbiAgdmFyIENSWVNUQUxfREVGQVVMVF9DT05UQUlOUyA9IFtcbiAgICBFWFBBTlNJT04sXG4gICAgU1RSSU5HLFxuICAgIFFfU1RSSU5HLFxuICAgIFJFR0VYUDIsXG4gICAgUkVHRVhQLFxuICAgIEFUVFJJQlVURSxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBtb2R1bGUgc3RydWN0JywgZW5kOiAnJHw7JyxcbiAgICAgIGlsbGVnYWw6IC89LyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogQ1JZU1RBTF9QQVRIX1JFfSksXG4gICAgICAgIHtiZWdpbjogJzwnfSAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgaW5oZXJpdGFuY2VcbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdsaWIgZW51bSB1bmlvbicsIGVuZDogJyR8OycsXG4gICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IENSWVNUQUxfUEFUSF9SRX0pLFxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdhbm5vdGF0aW9uJywgZW5kOiAnJHw7JyxcbiAgICAgIGlsbGVnYWw6IC89LyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogQ1JZU1RBTF9QQVRIX1JFfSksXG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZicsIGVuZDogL1xcQlxcYi8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgYmVnaW46IENSWVNUQUxfTUVUSE9EX1JFLFxuICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW4gbWFjcm8nLCBlbmQ6IC9cXEJcXGIvLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgIGJlZ2luOiBDUllTVEFMX01FVEhPRF9SRSxcbiAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiA1XG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoXFxcXCF8XFxcXD8pPzonLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46ICc6JyxcbiAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCB7YmVnaW46IENSWVNUQUxfTUVUSE9EX1JFfV0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7IGJlZ2luOiAnXFxcXGIwYihbMDFfXSspJyArIElOVF9TVUZGSVggfSxcbiAgICAgICAgeyBiZWdpbjogJ1xcXFxiMG8oWzAtN19dKyknICsgSU5UX1NVRkZJWCB9LFxuICAgICAgICB7IGJlZ2luOiAnXFxcXGIweChbQS1GYS1mMC05X10rKScgKyBJTlRfU1VGRklYIH0sXG4gICAgICAgIHsgYmVnaW46ICdcXFxcYihbMS05XVswLTlfXSpbMC05XXxbMC05XSkoXFxcXC5bMC05XVswLTlfXSopPyhbZUVdXypbLStdP1swLTlfXSopPycgKyBGTE9BVF9TVUZGSVggKyAnKD8hXyknIH0sXG4gICAgICAgIHsgYmVnaW46ICdcXFxcYihbMS05XVswLTlfXSp8MCknICsgSU5UX1NVRkZJWCB9XG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IENSWVNUQUxfREVGQVVMVF9DT05UQUlOUztcbiAgRVhQQU5TSU9OLmNvbnRhaW5zID0gQ1JZU1RBTF9ERUZBVUxUX0NPTlRBSU5TLnNsaWNlKDEpOyAvLyB3aXRob3V0IEVYUEFOU0lPTlxuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjciddLFxuICAgIGxleGVtZXM6IENSWVNUQUxfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IENSWVNUQUxfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IENSWVNUQUxfREVGQVVMVF9DT05UQUlOU1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAvLyBOb3JtYWwga2V5d29yZHMuXG4gICAgICAnYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY29uc3QgY29udGludWUgZGVjaW1hbCAnICtcbiAgICAgICdkZWZhdWx0IGRlbGVnYXRlIGRvIGRvdWJsZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmaW5hbGx5IGZpeGVkIGZsb2F0ICcgK1xuICAgICAgJ2ZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgJyArXG4gICAgICAnb2JqZWN0IG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiBzYnl0ZSAnICtcbiAgICAgICdzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdHJ5IHR5cGVvZiAnICtcbiAgICAgICd1aW50IHVsb25nIHVuY2hlY2tlZCB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSAnICtcbiAgICAgIC8vIENvbnRleHR1YWwga2V5d29yZHMuXG4gICAgICAnYWRkIGFsaWFzIGFzY2VuZGluZyBhc3luYyBhd2FpdCBieSBkZXNjZW5kaW5nIGR5bmFtaWMgZXF1YWxzIGZyb20gZ2V0IGdsb2JhbCBncm91cCBpbnRvIGpvaW4gJyArXG4gICAgICAnbGV0IG5hbWVvZiBvbiBvcmRlcmJ5IHBhcnRpYWwgcmVtb3ZlIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZW4gd2hlcmUgeWllbGQnLFxuICAgIGxpdGVyYWw6XG4gICAgICAnbnVsbCBmYWxzZSB0cnVlJ1xuICB9O1xuICB2YXIgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpJyB9LFxuICAgICAgeyBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgVkVSQkFUSU1fU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdAXCInLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gIH07XG4gIHZhciBWRVJCQVRJTV9TVFJJTkdfTk9fTEYgPSBobGpzLmluaGVyaXQoVkVSQkFUSU1fU1RSSU5HLCB7aWxsZWdhbDogL1xcbi99KTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ3snLCBlbmQ6ICd9JyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIFNVQlNUX05PX0xGID0gaGxqcy5pbmhlcml0KFNVQlNULCB7aWxsZWdhbDogL1xcbi99KTtcbiAgdmFyIElOVEVSUE9MQVRFRF9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJFwiLywgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAne3snfSwge2JlZ2luOiAnfX0nfSwgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF9OT19MRl1cbiAgfTtcbiAgdmFyIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJEBcIi8sIGVuZDogJ1wiJyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ3t7J30sIHtiZWdpbjogJ319J30sIHtiZWdpbjogJ1wiXCInfSwgU1VCU1RdXG4gIH07XG4gIHZhciBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGID0gaGxqcy5pbmhlcml0KElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsIHtcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ3t7J30sIHtiZWdpbjogJ319J30sIHtiZWdpbjogJ1wiXCInfSwgU1VCU1RfTk9fTEZdXG4gIH0pO1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICBdO1xuICBTVUJTVF9OT19MRi5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsIHtpbGxlZ2FsOiAvXFxuL30pXG4gIF07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgICBJTlRFUlBPTEFURURfU1RSSU5HLFxuICAgICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcblxuICB2YXIgVFlQRV9JREVOVF9SRSA9IGhsanMuSURFTlRfUkUgKyAnKDwnICsgaGxqcy5JREVOVF9SRSArICcoXFxcXHMqLFxcXFxzKicgKyBobGpzLklERU5UX1JFICsgJykqPik/KFxcXFxbXFxcXF0pPyc7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NzaGFycCcsICdjIyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvOjovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvLy8nLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAnLy8vJywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiZWdpbjogJzwhLS18LS0+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICc8Lz8nLCBlbmQ6ICc+J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOixdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25hbWVzcGFjZScsIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJ1thLXpBLVpdKFxcXFwuP1xcXFx3KSonfSksXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gW0F0dHJpYnV0ZXMoXCJcIildXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcWycsIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZW5kOiAnXFxcXF0nLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyByZXR1cm4gdGhyb3cgYXdhaXQgZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgVFlQRV9JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1xccypbezs9XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlRJVExFX01PREVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAgbGV4ZW1lczogJ1thLXpBLVpdW2EtekEtWjAtOV8tXSonLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnYmFzZS11cmkgY2hpbGQtc3JjIGNvbm5lY3Qtc3JjIGRlZmF1bHQtc3JjIGZvbnQtc3JjIGZvcm0tYWN0aW9uJyArXG4gICAgICAgICcgZnJhbWUtYW5jZXN0b3JzIGZyYW1lLXNyYyBpbWctc3JjIG1lZGlhLXNyYyBvYmplY3Qtc3JjIHBsdWdpbi10eXBlcycgK1xuICAgICAgICAnIHJlcG9ydC11cmkgc2FuZGJveCBzY3JpcHQtc3JjIHN0eWxlLXNyYycsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogXCInXCIsIGVuZDogXCInXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICBiZWdpbjogJ15Db250ZW50JywgZW5kOiAnOicsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgfSxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgRlVOQ1RJT05fTElLRSA9IHtcbiAgICBiZWdpbjogL1tcXHctXStcXCgvLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvW1xcdy1dKy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfVxuICB2YXIgQVRUUklCVVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgYmVnaW46IC9cXFMvLCBlbmQ6ICc6JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgRlVOQ1RJT05fTElLRSxcbiAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiAnI1swLTlBLUZhLWZdKydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH1cbiAgdmFyIEFUX0lERU5USUZJRVIgPSAnQFthLXotXSsnIC8vIEBmb250LWZhY2VcbiAgdmFyIEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCJcbiAgdmFyIE1FRElBX1RZUEVTID0gXCJhbGwgcHJpbnQgc2NyZWVuIHNwZWVjaFwiXG4gIHZhciBBVF9QUk9QRVJUWV9SRSA9IC9AXFwtP1xcd1tcXHddKihcXC1cXHcrKSovIC8vIEAtd2Via2l0LWtleWZyYW1lc1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICB2YXIgUlVMRSA9IHtcbiAgICBiZWdpbjogLyg/OltBLVpcXF9cXC5cXC1dK3wtLVthLXpBLVowLTlfLV0rKVxccyo6LywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJzsnLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgQVRUUklCVVRFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvWz1cXC98J1xcJF0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsIGJlZ2luOiAvI1tBLVphLXowLTlfLV0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLCBiZWdpbjogL1xcLltBLVphLXowLTlfLV0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgaWxsZWdhbDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogLzooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVwiJy5dKy9cbiAgICAgIH0sXG4gICAgICAvLyBtYXRjaGluZyB0aGVzZSBoZXJlIGFsbG93cyB1cyB0byB0cmVhdCB0aGVtIG1vcmUgbGlrZSByZWd1bGFyIENTU1xuICAgICAgLy8gcnVsZXMgc28gZXZlcnl0aGluZyBiZXR3ZWVuIHRoZSB7fSBnZXRzIHJlZ3VsYXIgcnVsZSBoaWdobGlnaHRpbmcsXG4gICAgICAvLyB3aGljaCBpcyB3aGF0IHdlIHdhbnQgZm9yIHBhZ2UgYW5kIGZvbnQtZmFjZVxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AocGFnZXxmb250LWZhY2UpJyxcbiAgICAgICAgbGV4ZW1lczogQVRfSURFTlRJRklFUixcbiAgICAgICAga2V5d29yZHM6ICdAcGFnZSBAZm9udC1mYWNlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdAJywgZW5kOiAnW3s7XScsIC8vIGF0X3J1bGUgZWF0aW5nIGZpcnN0IFwie1wiIGlzIGEgZ29vZCB0aGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpdCBkb2VzbuKAmXQgbGV0IGl0IHRvIGJlIHBhcnNlZCBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBydWxlIHNldCBidXQgaW5zdGVhZCBkcm9wcyBwYXJzZXIgaW50b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgbW9kZSB3aGljaCBpcyBob3cgaXQgc2hvdWxkIGJlLlxuICAgICAgICBpbGxlZ2FsOiAvOi8sIC8vIGJyZWFrIG9uIExlc3MgdmFyaWFibGVzIEB2YXI6IC4uLlxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiBBVF9QUk9QRVJUWV9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHMvLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGtleXdvcmRzOiBBVF9NT0RJRklFUlMsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC9bYS16LV0rOi8sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOlwiYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJywgYmVnaW46IElERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFJVTEUsXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLyoqXG4gKiBLbm93biBpc3N1ZXM6XG4gKlxuICogLSBpbnZhbGlkIGhleCBzdHJpbmcgbGl0ZXJhbHMgd2lsbCBiZSByZWNvZ25pemVkIGFzIGEgZG91YmxlIHF1b3RlZCBzdHJpbmdzXG4gKiAgIGJ1dCAneCcgYXQgdGhlIGJlZ2lubmluZyBvZiBzdHJpbmcgd2lsbCBub3QgYmUgbWF0Y2hlZFxuICpcbiAqIC0gZGVsaW1pdGVkIHN0cmluZyBsaXRlcmFscyBhcmUgbm90IGNoZWNrZWQgZm9yIG1hdGNoaW5nIGVuZCBkZWxpbWl0ZXJcbiAqICAgKG5vdCBwb3NzaWJsZSB0byBkbyB3aXRoIGpzIHJlZ2V4cClcbiAqXG4gKiAtIGNvbnRlbnQgb2YgdG9rZW4gc3RyaW5nIGlzIGNvbG9yZWQgYXMgYSBzdHJpbmcgKGkuZS4gbm8ga2V5d29yZCBjb2xvcmluZyBpbnNpZGUgYSB0b2tlbiBzdHJpbmcpXG4gKiAgIGFsc28sIGNvbnRlbnQgb2YgdG9rZW4gc3RyaW5nIGlzIG5vdCB2YWxpZGF0ZWQgdG8gY29udGFpbiBvbmx5IHZhbGlkIEQgdG9rZW5zXG4gKlxuICogLSBzcGVjaWFsIHRva2VuIHNlcXVlbmNlIHJ1bGUgaXMgbm90IHN0cmljdGx5IGZvbGxvd2luZyBEIGdyYW1tYXIgKGFueXRoaW5nIGZvbGxvd2luZyAjbGluZVxuICogICB1cCB0byB0aGUgZW5kIG9mIGxpbmUgaXMgbWF0Y2hlZCBhcyBzcGVjaWFsIHRva2VuIHNlcXVlbmNlKVxuICovXG5cbmZ1bmN0aW9uKGhsanMpIHtcbiAgLyoqXG4gICAqIExhbmd1YWdlIGtleXdvcmRzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFsaWFzIGFsaWduIGFzbSBhc3NlcnQgYXV0byBib2R5IGJyZWFrIGJ5dGUgY2FzZSBjYXN0IGNhdGNoIGNsYXNzICcgK1xuICAgICAgJ2NvbnN0IGNvbnRpbnVlIGRlYnVnIGRlZmF1bHQgZGVsZXRlIGRlcHJlY2F0ZWQgZG8gZWxzZSBlbnVtIGV4cG9ydCBleHRlcm4gZmluYWwgJyArXG4gICAgICAnZmluYWxseSBmb3IgZm9yZWFjaCBmb3JlYWNoX3JldmVyc2V8MTAgZ290byBpZiBpbW11dGFibGUgaW1wb3J0IGluIGlub3V0IGludCAnICtcbiAgICAgICdpbnRlcmZhY2UgaW52YXJpYW50IGlzIGxhenkgbWFjcm8gbWl4aW4gbW9kdWxlIG5ldyBub3Rocm93IG91dCBvdmVycmlkZSBwYWNrYWdlICcgK1xuICAgICAgJ3ByYWdtYSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcHVyZSByZWYgcmV0dXJuIHNjb3BlIHNoYXJlZCBzdGF0aWMgc3RydWN0ICcgK1xuICAgICAgJ3N1cGVyIHN3aXRjaCBzeW5jaHJvbml6ZWQgdGVtcGxhdGUgdGhpcyB0aHJvdyB0cnkgdHlwZWRlZiB0eXBlaWQgdHlwZW9mIHVuaW9uICcgK1xuICAgICAgJ3VuaXR0ZXN0IHZlcnNpb24gdm9pZCB2b2xhdGlsZSB3aGlsZSB3aXRoIF9fRklMRV9fIF9fTElORV9fIF9fZ3NoYXJlZHwxMCAnICtcbiAgICAgICdfX3RocmVhZCBfX3RyYWl0cyBfX0RBVEVfXyBfX0VPRl9fIF9fVElNRV9fIF9fVElNRVNUQU1QX18gX19WRU5ET1JfXyBfX1ZFUlNJT05fXycsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYm9vbCBjZG91YmxlIGNlbnQgY2Zsb2F0IGNoYXIgY3JlYWwgZGNoYXIgZGVsZWdhdGUgZG91YmxlIGRzdHJpbmcgZmxvYXQgZnVuY3Rpb24gJyArXG4gICAgICAnaWRvdWJsZSBpZmxvYXQgaXJlYWwgbG9uZyByZWFsIHNob3J0IHN0cmluZyB1Ynl0ZSB1Y2VudCB1aW50IHVsb25nIHVzaG9ydCB3Y2hhciAnICtcbiAgICAgICd3c3RyaW5nJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIG51bGwgdHJ1ZSdcbiAgfTtcblxuICAvKipcbiAgICogTnVtYmVyIGxpdGVyYWwgcmVnZXhwc1xuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdmFyIGRlY2ltYWxfaW50ZWdlcl9yZSA9ICcoMHxbMS05XVtcXFxcZF9dKiknLFxuICAgIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSA9ICcoMHxbMS05XVtcXFxcZF9dKnxcXFxcZFtcXFxcZF9dKnxbXFxcXGRfXSs/XFxcXGQpJyxcbiAgICBiaW5hcnlfaW50ZWdlcl9yZSA9ICcwW2JCXVswMV9dKycsXG4gICAgaGV4YWRlY2ltYWxfZGlnaXRzX3JlID0gJyhbXFxcXGRhLWZBLUZdW1xcXFxkYS1mQS1GX10qfF9bXFxcXGRhLWZBLUZdW1xcXFxkYS1mQS1GX10qKScsXG4gICAgaGV4YWRlY2ltYWxfaW50ZWdlcl9yZSA9ICcwW3hYXScgKyBoZXhhZGVjaW1hbF9kaWdpdHNfcmUsXG5cbiAgICBkZWNpbWFsX2V4cG9uZW50X3JlID0gJyhbZUVdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknLFxuICAgIGRlY2ltYWxfZmxvYXRfcmUgPSAnKCcgKyBkZWNpbWFsX2ludGVnZXJfbm9zdXNfcmUgKyAnKFxcXFwuXFxcXGQqfCcgKyBkZWNpbWFsX2V4cG9uZW50X3JlICsgJyl8JyArXG4gICAgICAgICAgICAgICAgJ1xcXFxkK1xcXFwuJyArIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSArIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSArICd8JyArXG4gICAgICAgICAgICAgICAgJ1xcXFwuJyArIGRlY2ltYWxfaW50ZWdlcl9yZSArIGRlY2ltYWxfZXhwb25lbnRfcmUgKyAnPycgK1xuICAgICAgICAgICAgICAnKScsXG4gICAgaGV4YWRlY2ltYWxfZmxvYXRfcmUgPSAnKDBbeFhdKCcgK1xuICAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICsgJ1xcXFwuJyArIGhleGFkZWNpbWFsX2RpZ2l0c19yZSArICd8JytcbiAgICAgICAgICAgICAgICAgICdcXFxcLj8nICsgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICtcbiAgICAgICAgICAgICAgICAgJylbcFBdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknLFxuXG4gICAgaW50ZWdlcl9yZSA9ICcoJyArXG4gICAgICBkZWNpbWFsX2ludGVnZXJfcmUgKyAnfCcgK1xuICAgICAgYmluYXJ5X2ludGVnZXJfcmUgICsgJ3wnICtcbiAgICAgICBoZXhhZGVjaW1hbF9pbnRlZ2VyX3JlICAgK1xuICAgICcpJyxcblxuICAgIGZsb2F0X3JlID0gJygnICtcbiAgICAgIGhleGFkZWNpbWFsX2Zsb2F0X3JlICsgJ3wnICtcbiAgICAgIGRlY2ltYWxfZmxvYXRfcmUgICtcbiAgICAnKSc7XG5cbiAgLyoqXG4gICAqIEVzY2FwZSBzZXF1ZW5jZSBzdXBwb3J0ZWQgaW4gRCBzdHJpbmcgYW5kIGNoYXJhY3RlciBsaXRlcmFsc1xuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdmFyIGVzY2FwZV9zZXF1ZW5jZV9yZSA9ICdcXFxcXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1tcXCdcIlxcXFw/XFxcXFxcXFxhYmZucnR2XXwnICsgIC8vIGNvbW1vbiBlc2NhcGVzXG4gICAgICAgICAgICAgICd1W1xcXFxkQS1GYS1mXXs0fXwnICsgICAgIC8vIGZvdXIgaGV4IGRpZ2l0IHVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICAgICdbMC03XXsxLDN9fCcgKyAgICAgICAvLyBvbmUgdG8gdGhyZWUgb2N0YWwgZGlnaXQgYXNjaWkgY2hhciBjb2RlXG4gICAgICAgICAgICAgICd4W1xcXFxkQS1GYS1mXXsyfXwnICsgICAgLy8gdHdvIGhleCBkaWdpdCBhc2NpaSBjaGFyIGNvZGVcbiAgICAgICAgICAgICAgJ1VbXFxcXGRBLUZhLWZdezh9JyArICAgICAgLy8gZWlnaHQgaGV4IGRpZ2l0IHVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICAgICcpfCcgK1xuICAgICAgICAgICAgICAnJlthLXpBLVpcXFxcZF17Mix9Oyc7ICAgICAgLy8gbmFtZWQgY2hhcmFjdGVyIGVudGl0eVxuXG4gIC8qKlxuICAgKiBEIGludGVnZXIgbnVtYmVyIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9JTlRFR0VSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGInICsgaW50ZWdlcl9yZSArICcoTHx1fFV8THV8TFV8dUx8VUwpPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogW0RfRkxPQVRfTU9ERSBkZXNjcmlwdGlvbl1cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX0ZMT0FUX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiKCcgK1xuICAgICAgICBmbG9hdF9yZSArICcoW2ZGXXxMfGl8W2ZGXWl8TGkpP3wnICtcbiAgICAgICAgaW50ZWdlcl9yZSArICcoaXxbZkZdaXxMaSknICtcbiAgICAgICcpJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogRCBjaGFyYWN0ZXIgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfQ0hBUkFDVEVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJygnICsgZXNjYXBlX3NlcXVlbmNlX3JlICsgJ3wuKScsIGVuZDogJ1xcJycsXG4gICAgaWxsZWdhbDogJy4nXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfRVNDQVBFX1NFUVVFTkNFID0ge1xuICAgIGJlZ2luOiBlc2NhcGVfc2VxdWVuY2VfcmUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgZG91YmxlIHF1b3RlZCBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiJyxcbiAgICBjb250YWluczogW0RfRVNDQVBFX1NFUVVFTkNFXSxcbiAgICBlbmQ6ICdcIltjd2RdPydcbiAgfTtcblxuICAvKipcbiAgICogRCB3eXNpd3lnIGFuZCBkZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9XWVNJV1lHX0RFTElNSVRFRF9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnW3JxXVwiJyxcbiAgICBlbmQ6ICdcIltjd2RdPycsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgYWx0ZXJuYXRlIHd5c2l3eWcgc3RyaW5nIGxpdGVyYWxcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgW2N3ZF0/J1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIGhleGFkZWNpbWFsIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9IRVhfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ3hcIltcXFxcZGEtZkEtRlxcXFxzXFxcXG5cXFxccl0qXCJbY3dkXT8nLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcblxuICAvKipcbiAgICogRCBkZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWxcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX1RPS0VOX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdxXCJcXFxceycsXG4gICAgZW5kOiAnXFxcXH1cIidcbiAgfTtcblxuICAvKipcbiAgICogSGFzaGJhbmcgc3VwcG9ydFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfSEFTSEJBTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3BlY2lhbCB0b2tlbiBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnIyhsaW5lKScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfQVRUUklCVVRFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAW2EtekEtWl9dW2EtekEtWl9cXFxcZF0qJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIG5lc3RpbmcgY29tbWVudFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfTkVTVElOR19DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoXG4gICAgJ1xcXFwvXFxcXCsnLFxuICAgICdcXFxcK1xcXFwvJyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ10sXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBEX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgIERfTkVTVElOR19DT01NRU5UX01PREUsXG4gICAgICAgIERfSEVYX1NUUklOR19NT0RFLFxuICAgICAgICBEX1NUUklOR19NT0RFLFxuICAgICAgICBEX1dZU0lXWUdfREVMSU1JVEVEX1NUUklOR19NT0RFLFxuICAgICAgICBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFLFxuICAgICAgICBEX1RPS0VOX1NUUklOR19NT0RFLFxuICAgICAgICBEX0ZMT0FUX01PREUsXG4gICAgICAgIERfSU5URUdFUl9NT0RFLFxuICAgICAgICBEX0NIQVJBQ1RFUl9NT0RFLFxuICAgICAgICBEX0hBU0hCQU5HX01PREUsXG4gICAgICAgIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFLFxuICAgICAgICBEX0FUVFJJQlVURV9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21kJywgJ21rZG93bicsICdta2QnXSxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gaGlnaGxpZ2h0IGhlYWRlcnNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ14jezEsNn0nLCBlbmQ6ICckJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdeLis/XFxcXG5bPS1dezIsfSQnIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBodG1sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCcsIGVuZDogJz4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGxpc3RzIChpbmRpY2F0b3JzIG9ubHkpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKihbKistXXwoXFxcXGQrXFxcXC4pKVxcXFxzKydcbiAgICAgIH0sXG4gICAgICAvLyBzdHJvbmcgc2VnbWVudHNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Ryb25nJyxcbiAgICAgICAgYmVnaW46ICdbKl9dezJ9Lis/WypfXXsyfSdcbiAgICAgIH0sXG4gICAgICAvLyBlbXBoYXNpcyBzZWdtZW50c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFwqLis/XFxcXConIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ18uKz9fJ1xuICAgICAgICAgICwgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gYmxvY2txdW90ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgICAgICBiZWdpbjogJ14+XFxcXHMrJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICAvLyBjb2RlIHNuaXBwZXRzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXmBgYFxcXFx3KlxcXFxzKiQnLCBlbmQ6ICdeYGBgWyBdKiQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2AuKz9gJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeKCB7NH18XFxcXHQpJywgZW5kOiAnJCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBob3Jpem9udGFsIHJ1bGVzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlstXFxcXCpdezMsfScsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgLy8gdXNpbmcgbGlua3MgLSB0aXRsZSBhbmQgbGlua1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxbLis/XFxcXF1bXFxcXChcXFxcW10uKj9bXFxcXClcXFxcXV0nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXlxcW1teXFxuXStcXF06LyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogLzpcXHMqLywgZW5kOiAvJC8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIHZhcmlhbnRzOiBbe1xuICAgICAgYmVnaW46ICdcXFxcJFtBLVphLXowLTlfXSsnXG4gICAgfV0sXG4gIH07XG5cbiAgdmFyIEJSQUNFRF9TVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFt7XG4gICAgICBiZWdpbjogJ1xcXFwkeycsXG4gICAgICBlbmQ6ICd9J1xuICAgIH0sIF0sXG4gICAga2V5d29yZHM6ICd0cnVlIGZhbHNlIG51bGwgdGhpcyBpcyBuZXcgc3VwZXInLFxuICB9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW3tcbiAgICAgICAgYmVnaW46ICdyXFwnXFwnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnXFwnXFwnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNULCBCUkFDRURfU1VCU1RdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICAgIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVCwgQlJBQ0VEX1NVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIEJSQUNFRF9TVUJTVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVCwgQlJBQ0VEX1NVQlNUXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgQlJBQ0VEX1NVQlNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQ19OVU1CRVJfTU9ERSwgU1RSSU5HXG4gIF07XG5cbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdhYnN0cmFjdCBhcyBhc3NlcnQgYXN5bmMgYXdhaXQgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb25zdCBjb250aW51ZSBjb3ZhcmlhbnQgZGVmYXVsdCBkZWZlcnJlZCBkbyAnICtcbiAgICAgICdkeW5hbWljIGVsc2UgZW51bSBleHBvcnQgZXh0ZW5kcyBleHRlbnNpb24gZXh0ZXJuYWwgZmFjdG9yeSBmYWxzZSBmaW5hbCBmaW5hbGx5IGZvciBGdW5jdGlvbiBnZXQgaGlkZSBpZiAnICtcbiAgICAgICdpbXBsZW1lbnRzIGltcG9ydCBpbiBpbmZlcmZhY2UgaXMgbGlicmFyeSBtaXhpbiBuZXcgbnVsbCBvbiBvcGVyYXRvciBwYXJ0IHJldGhyb3cgcmV0dXJuIHNldCBzaG93IHN0YXRpYyAnICtcbiAgICAgICdzdXBlciBzd2l0Y2ggc3luYyB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVkZWYgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAvLyBkYXJ0OmNvcmVcbiAgICAgICdDb21wYXJhYmxlIERhdGVUaW1lIER1cmF0aW9uIEZ1bmN0aW9uIEl0ZXJhYmxlIEl0ZXJhdG9yIExpc3QgTWFwIE1hdGNoIE51bGwgT2JqZWN0IFBhdHRlcm4gUmVnRXhwIFNldCAnICtcbiAgICAgICdTdG9wd2F0Y2ggU3RyaW5nIFN0cmluZ0J1ZmZlciBTdHJpbmdTaW5rIFN5bWJvbCBUeXBlIFVyaSBib29sIGRvdWJsZSBkeW5hbWljIGludCBudW0gcHJpbnQgJyArXG4gICAgICAvLyBkYXJ0Omh0bWxcbiAgICAgICdFbGVtZW50IEVsZW1lbnRMaXN0IGRvY3VtZW50IHF1ZXJ5U2VsZWN0b3IgcXVlcnlTZWxlY3RvckFsbCB3aW5kb3cnXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsIHtcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ21hcmtkb3duJ1xuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnLy8vK1xcXFxzKicsXG4gICAgICAgICckJywge1xuICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdtYXJrZG93bicsXG4gICAgICAgICAgICBiZWdpbjogJy4nLFxuICAgICAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogJ3snLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2V4cG9ydHMgcmVnaXN0ZXIgZmlsZSBzaGwgYXJyYXkgcmVjb3JkIHByb3BlcnR5IGZvciBtb2Qgd2hpbGUgc2V0IGFsbHkgbGFiZWwgdXNlcyByYWlzZSBub3QgJyArXG4gICAgJ3N0b3JlZCBjbGFzcyBzYWZlY2FsbCB2YXIgaW50ZXJmYWNlIG9yIHByaXZhdGUgc3RhdGljIGV4aXQgaW5kZXggaW5oZXJpdGVkIHRvIGVsc2Ugc3RkY2FsbCAnICtcbiAgICAnb3ZlcnJpZGUgc2hyIGFzbSBmYXIgcmVzb3VyY2VzdHJpbmcgZmluYWxpemF0aW9uIHBhY2tlZCB2aXJ0dWFsIG91dCBhbmQgcHJvdGVjdGVkIGxpYnJhcnkgZG8gJyArXG4gICAgJ3hvcndyaXRlIGdvdG8gbmVhciBmdW5jdGlvbiBlbmQgZGl2IG92ZXJsb2FkIG9iamVjdCB1bml0IGJlZ2luIHN0cmluZyBvbiBpbmxpbmUgcmVwZWF0IHVudGlsICcgK1xuICAgICdkZXN0cnVjdG9yIHdyaXRlIG1lc3NhZ2UgcHJvZ3JhbSB3aXRoIHJlYWQgaW5pdGlhbGl6YXRpb24gZXhjZXB0IGRlZmF1bHQgbmlsIGlmIGNhc2UgY2RlY2wgaW4gJyArXG4gICAgJ2Rvd250byB0aHJlYWR2YXIgb2YgdHJ5IHBhc2NhbCBjb25zdCBleHRlcm5hbCBjb25zdHJ1Y3RvciB0eXBlIHB1YmxpYyB0aGVuIGltcGxlbWVudGF0aW9uICcgK1xuICAgICdmaW5hbGx5IHB1Ymxpc2hlZCBwcm9jZWR1cmUgYWJzb2x1dGUgcmVpbnRyb2R1Y2Ugb3BlcmF0b3IgYXMgaXMgYWJzdHJhY3QgYWxpYXMgYXNzZW1ibGVyICcgK1xuICAgICdiaXRwYWNrZWQgYnJlYWsgY29udGludWUgY3BwZGVjbCBjdmFyIGVudW1lcmF0b3IgZXhwZXJpbWVudGFsIHBsYXRmb3JtIGRlcHJlY2F0ZWQgJyArXG4gICAgJ3VuaW1wbGVtZW50ZWQgZHluYW1pYyBleHBvcnQgZmFyMTYgZm9yd2FyZCBnZW5lcmljIGhlbHBlciBpbXBsZW1lbnRzIGludGVycnVwdCBpb2NoZWNrcyAnICtcbiAgICAnbG9jYWwgbmFtZSBub2RlZmF1bHQgbm9yZXR1cm4gbm9zdGFja2ZyYW1lIG9sZGZwY2NhbGwgb3RoZXJ3aXNlIHNhdmVyZWdpc3RlcnMgc29mdGZsb2F0ICcgK1xuICAgICdzcGVjaWFsaXplIHN0cmljdCB1bmFsaWduZWQgdmFyYXJncyAnO1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKC9cXHsvLCAvXFx9Lywge3JlbGV2YW5jZTogMH0pLFxuICAgIGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8sIHtyZWxldmFuY2U6IDEwfSlcbiAgXTtcbiAgdmFyIERJUkVDVElWRSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFx7XFwkLywgZW5kOiAvXFx9L30sXG4gICAgICB7YmVnaW46IC9cXChcXCpcXCQvLCBlbmQ6IC9cXCpcXCkvfVxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvJycvfV1cbiAgfTtcbiAgdmFyIENIQVJfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIHZhciBDTEFTUyA9IHtcbiAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccyo9XFxcXHMqY2xhc3NcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREVcbiAgICBdXG4gIH07XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yIGRlc3RydWN0b3IgcHJvY2VkdXJlJywgZW5kOiAvWzo7XS8sXG4gICAga2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvcnwxMCBkZXN0cnVjdG9yfDEwIHByb2NlZHVyZXwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCBDSEFSX1NUUklORywgRElSRUNUSVZFXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgICAgIH0sXG4gICAgICBESVJFQ1RJVkVcbiAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZHByJywgJ2RmbScsICdwYXMnLCAncGFzY2FsJywgJ2ZyZWVwYXNjYWwnLCAnbGF6YXJ1cycsICdscHInLCAnbGZtJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1wifFxcJFtHLVpnLXpdfFxcL1xcKnw8XFwvfFxcfC8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORywgQ0hBUl9TVFJJTkcsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgQ0xBU1MsXG4gICAgICBGVU5DVElPTixcbiAgICAgIERJUkVDVElWRVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGF0Y2gnXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9eQEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtAQCQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQvfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9JbmRleDogLywgZW5kOiAvJC99LFxuICAgICAgICAgIHtiZWdpbjogLz17Myx9LywgZW5kOiAvJC99LFxuICAgICAgICAgIHtiZWdpbjogL15cXC17M30vLCBlbmQ6IC8kL30sXG4gICAgICAgICAge2JlZ2luOiAvXlxcKnszfSAvLCBlbmQ6IC8kL30sXG4gICAgICAgICAge2JlZ2luOiAvXlxcK3szfS8sIGVuZDogLyQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwqezE1fSQvIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYWRkaXRpb24nLFxuICAgICAgICBiZWdpbjogJ15cXFxcKycsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdkZWxldGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFwtJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2FkZGl0aW9uJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCEnLCBlbmQ6ICckJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16XSs6Py8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIG5hbWU6XG4gICAgICAgICd0cnVuY2F0ZXdvcmRzIHJlbW92ZXRhZ3MgbGluZWJyZWFrc2JyIHllc25vIGdldF9kaWdpdCB0aW1lc2luY2UgcmFuZG9tIHN0cmlwdGFncyAnICtcbiAgICAgICAgJ2ZpbGVzaXplZm9ybWF0IGVzY2FwZSBsaW5lYnJlYWtzIGxlbmd0aF9pcyBsanVzdCByanVzdCBjdXQgdXJsaXplIGZpeF9hbXBlcnNhbmRzICcgK1xuICAgICAgICAndGl0bGUgZmxvYXRmb3JtYXQgY2FwZmlyc3QgcHByaW50IGRpdmlzaWJsZWJ5IGFkZCBtYWtlX2xpc3QgdW5vcmRlcmVkX2xpc3QgdXJsZW5jb2RlICcgK1xuICAgICAgICAndGltZXVudGlsIHVybGl6ZXRydW5jIHdvcmRjb3VudCBzdHJpbmdmb3JtYXQgbGluZW51bWJlcnMgc2xpY2UgZGF0ZSBkaWN0c29ydCAnICtcbiAgICAgICAgJ2RpY3Rzb3J0cmV2ZXJzZWQgZGVmYXVsdF9pZl9ub25lIHBsdXJhbGl6ZSBsb3dlciBqb2luIGNlbnRlciBkZWZhdWx0ICcgK1xuICAgICAgICAndHJ1bmNhdGV3b3Jkc19odG1sIHVwcGVyIGxlbmd0aCBwaG9uZTJudW1lcmljIHdvcmR3cmFwIHRpbWUgYWRkc2xhc2hlcyBzbHVnaWZ5IGZpcnN0ICcgK1xuICAgICAgICAnZXNjYXBlanMgZm9yY2VfZXNjYXBlIGlyaWVuY29kZSBsYXN0IHNhZmUgc2FmZXNlcSB0cnVuY2F0ZWNoYXJzIGxvY2FsaXplIHVubG9jYWxpemUgJyArXG4gICAgICAgICdsb2NhbHRpbWUgdXRjIHRpbWV6b25lJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2ppbmphJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7JVxccypjb21tZW50XFxzKiV9LywgL1xceyVcXHMqZW5kY29tbWVudFxccyolfS8pLFxuICAgICAgaGxqcy5DT01NRU5UKC9cXHsjLywgLyN9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyV9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICdjb21tZW50IGVuZGNvbW1lbnQgbG9hZCB0ZW1wbGF0ZXRhZyBpZmNoYW5nZWQgZW5kaWZjaGFuZ2VkIGlmIGVuZGlmIGZpcnN0b2YgZm9yICcgK1xuICAgICAgICAgICAgICAgICdlbmRmb3IgaWZub3RlcXVhbCBlbmRpZm5vdGVxdWFsIHdpZHRocmF0aW8gZXh0ZW5kcyBpbmNsdWRlIHNwYWNlbGVzcyAnICtcbiAgICAgICAgICAgICAgICAnZW5kc3BhY2VsZXNzIHJlZ3JvdXAgaWZlcXVhbCBlbmRpZmVxdWFsIHNzaSBub3cgd2l0aCBjeWNsZSB1cmwgZmlsdGVyICcgK1xuICAgICAgICAgICAgICAgICdlbmRmaWx0ZXIgZGVidWcgYmxvY2sgZW5kYmxvY2sgZWxzZSBhdXRvZXNjYXBlIGVuZGF1dG9lc2NhcGUgY3NyZl90b2tlbiBlbXB0eSBlbGlmICcgK1xuICAgICAgICAgICAgICAgICdlbmR3aXRoIHN0YXRpYyB0cmFucyBibG9ja3RyYW5zIGVuZGJsb2NrdHJhbnMgZ2V0X3N0YXRpY19wcmVmaXggZ2V0X21lZGlhX3ByZWZpeCAnICtcbiAgICAgICAgICAgICAgICAncGx1cmFsIGdldF9jdXJyZW50X2xhbmd1YWdlIGxhbmd1YWdlIGdldF9hdmFpbGFibGVfbGFuZ3VhZ2VzICcgK1xuICAgICAgICAgICAgICAgICdnZXRfY3VycmVudF9sYW5ndWFnZV9iaWRpIGdldF9sYW5ndWFnZV9pbmZvIGdldF9sYW5ndWFnZV9pbmZvX2xpc3QgbG9jYWxpemUgJyArXG4gICAgICAgICAgICAgICAgJ2VuZGxvY2FsaXplIGxvY2FsdGltZSBlbmRsb2NhbHRpbWUgdGltZXpvbmUgZW5kdGltZXpvbmUgZ2V0X2N1cnJlbnRfdGltZXpvbmUgJyArXG4gICAgICAgICAgICAgICAgJ3ZlcmJhdGltJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5d29yZHM6ICdpbiBieSBhcycsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbRklMVEVSXSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvfX0vLFxuICAgICAgICBjb250YWluczogW0ZJTFRFUl1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYmluZCcsICd6b25lJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdJTiBBIEFBQUEgQUZTREIgQVBMIENBQSBDRE5TS0VZIENEUyBDRVJUIENOQU1FIERIQ0lEIERMViBETkFNRSBETlNLRVkgRFMgSElQIElQU0VDS0VZIEtFWSBLWCAnICtcbiAgICAgICAgJ0xPQyBNWCBOQVBUUiBOUyBOU0VDIE5TRUMzIE5TRUMzUEFSQU0gUFRSIFJSU0lHIFJQIFNJRyBTT0EgU1JWIFNTSEZQIFRBIFRLRVkgVExTQSBUU0lHIFRYVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxcJChUVEx8R0VORVJBVEV8SU5DTFVERXxPUklHSU4pXFxiL1xuICAgICAgfSxcbiAgICAgIC8vIElQdjZcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoKChbMC05QS1GYS1mXXsxLDR9Oil7N30oWzAtOUEtRmEtZl17MSw0fXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn0oOlswLTlBLUZhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs1fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs0fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05QS1GYS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7M30oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsyfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezF9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNn0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKSlcXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyBJUHY0XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFxcXGInXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuTlVNQkVSX01PREUsIHtiZWdpbjogL1xcYlxcZCtbZGh3bV0/L30pXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2RvY2tlciddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6ICdmcm9tIG1haW50YWluZXIgZXhwb3NlIGVudiBhcmcgdXNlciBvbmJ1aWxkIHN0b3BzaWduYWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdydW4gY21kIGVudHJ5cG9pbnQgdm9sdW1lIGFkZCBjb3B5IHdvcmtkaXIgbGFiZWwgaGVhbHRoY2hlY2sgc2hlbGwnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC9bXlxcXFxdJC8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdiYXNoJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnPC8nXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9eXFxzKkA/cmVtXFxiLywgLyQvLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9XG4gICk7XG4gIHZhciBMQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXlxcXFxzKltBLVphLXouXz9dW0EtWmEtejAtOV8kI0B+Lj9dKig6fFxcXFxzK2xhYmVsKScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydiYXQnLCAnY21kJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIGVsc2UgZ290byBmb3IgaW4gZG8gY2FsbCBleGl0IG5vdCBleGlzdCBlcnJvcmxldmVsIGRlZmluZWQgJyArXG4gICAgICAgICdlcXUgbmVxIGxzcyBsZXEgZ3RyIGdlcScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3BybiBudWwgbHB0MyBscHQyIGxwdDEgY29uIGNvbTQgY29tMyBjb20yIGNvbTEgYXV4ICcgK1xuICAgICAgICAnc2hpZnQgY2QgZGlyIGVjaG8gc2V0bG9jYWwgZW5kbG9jYWwgc2V0IHBhdXNlIGNvcHkgJyArXG4gICAgICAgICdhcHBlbmQgYXNzb2MgYXQgYXR0cmliIGJyZWFrIGNhY2xzIGNkIGNoY3AgY2hkaXIgY2hrZHNrIGNoa250ZnMgY2xzIGNtZCBjb2xvciAnICtcbiAgICAgICAgJ2NvbXAgY29tcGFjdCBjb252ZXJ0IGRhdGUgZGlyIGRpc2tjb21wIGRpc2tjb3B5IGRvc2tleSBlcmFzZSBmcyAnICtcbiAgICAgICAgJ2ZpbmQgZmluZHN0ciBmb3JtYXQgZnR5cGUgZ3JhZnRhYmwgaGVscCBrZXliIGxhYmVsIG1kIG1rZGlyIG1vZGUgbW9yZSBtb3ZlIHBhdGggJyArXG4gICAgICAgICdwYXVzZSBwcmludCBwb3BkIHB1c2hkIHByb210IHJkIHJlY292ZXIgcmVtIHJlbmFtZSByZXBsYWNlIHJlc3RvcmUgcm1kaXIgc2hpZnQnICtcbiAgICAgICAgJ3NvcnQgc3RhcnQgc3Vic3QgdGltZSB0aXRsZSB0cmVlIHR5cGUgdmVyIHZlcmlmeSB2b2wgJyArXG4gICAgICAgIC8vIHdpbnV0aWxzXG4gICAgICAgICdwaW5nIG5ldCBpcGNvbmZpZyB0YXNra2lsbCB4Y29weSByZW4gZGVsJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLCBiZWdpbjogLyUlW14gXXwlW14gXSs/JXwhW14gXSs/IS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IExBQkVMLmJlZ2luLCBlbmQ6ICdnb3RvOmVvZicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnKFtfYS16QS1aXVxcXFx3KlxcXFwuKSooW19hLXpBLVpdXFxcXHcqOik/W19hLXpBLVpdXFxcXHcqJ30pLFxuICAgICAgICAgIENPTU1FTlRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdcXFxcYlxcXFxkKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIENPTU1FTlRcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUVVPVEVEX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sIGVuZDogL1wiL1xuICB9O1xuICB2YXIgQVBPU19QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gIH07XG4gIHZhciBVTlFVT1RFRF9QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnW1xcXFx3LT9dKzpcXFxcdysnLCBlbmQ6ICdcXFxcVycsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBWQUxVRUxFU1NfUFJPUEVSVFkgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcXFx3Ky0/XFxcXHcrJywgZW5kOiAnXFxcXFcnLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6ICdkc2NvbmZpZycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXmRzY29uZmlnJywgZW5kOiAnXFxcXHMnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnKGxpc3R8Y3JlYXRlfGdldHxzZXR8ZGVsZXRlKS0oXFxcXHcrKScsIGVuZDogJ1xcXFxzJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJyFAIyQlXiYqKCknLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnLS0oXFxcXHcrKScsIGVuZDogJ1xcXFxzJywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFFVT1RFRF9QUk9QRVJUWSxcbiAgICAgIEFQT1NfUFJPUEVSVFksXG4gICAgICBVTlFVT1RFRF9QUk9QRVJUWSxcbiAgICAgIFZBTFVFTEVTU19QUk9QRVJUWSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBiZWdpbjogJygodTg/fFUpfEwpP1wiJyB9KSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFUpP1JcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJ1xcXFxcXFxcPy4nLCBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnLidcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKFxcXFxkKyhcXFxcLlxcXFxkKik/fFxcXFwuXFxcXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RiknIH0sXG4gICAgICB7IGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgaWZkZWYgaWZuZGVmJ30sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5jbHVkZScsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSd9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICc8JywgZW5kOiAnPicsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgdmFyIERUU19SRUZFUkVOQ0UgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnXFxcXCZbYS16XFxcXGRfXSpcXFxcYidcbiAgfTtcblxuICB2YXIgRFRTX0tFWVdPUkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YS1rZXl3b3JkJyxcbiAgICBiZWdpbjogJy9bYS16XVthLXpcXFxcZC1dKi8nXG4gIH07XG5cbiAgdmFyIERUU19MQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXlxcXFxzKlthLXpBLVpfXVthLXpBLVpcXFxcZF9dKjonXG4gIH07XG5cbiAgdmFyIERUU19DRUxMX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICc8JyxcbiAgICBlbmQ6ICc+JyxcbiAgICBjb250YWluczogW1xuICAgICAgTlVNQkVSUyxcbiAgICAgIERUU19SRUZFUkVOQ0VcbiAgICBdXG4gIH07XG5cbiAgdmFyIERUU19OT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbjogL1thLXpBLVpfXVthLXpBLVpcXGRfQF0qXFxzey8sXG4gICAgZW5kOiAvW3s7PV0vLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTtcblxuICB2YXIgRFRTX1JPT1RfTk9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46ICcvXFxcXHMqeycsXG4gICAgZW5kOiAnfTsnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIERUU19SRUZFUkVOQ0UsXG4gICAgICBEVFNfS0VZV09SRCxcbiAgICAgIERUU19MQUJFTCxcbiAgICAgIERUU19OT0RFLFxuICAgICAgRFRTX0NFTExfUFJPUEVSVFksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklOR1NcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogXCJcIixcbiAgICBjb250YWluczogW1xuICAgICAgRFRTX1JPT1RfTk9ERSxcbiAgICAgIERUU19SRUZFUkVOQ0UsXG4gICAgICBEVFNfS0VZV09SRCxcbiAgICAgIERUU19MQUJFTCxcbiAgICAgIERUU19OT0RFLFxuICAgICAgRFRTX0NFTExfUFJPUEVSVFksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJzo6JyxcbiAgICAgICAga2V5d29yZHM6IFwiXCJcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgRVhQUkVTU0lPTl9LRVlXT1JEUyA9ICdpZiBlcSBuZSBsdCBsdGUgZ3QgZ3RlIHNlbGVjdCBkZWZhdWx0IG1hdGggc2VwJztcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2RzdCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7WyNcXC9dLywgZW5kOiAvXFx9LywgaWxsZWdhbDogLzsvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgYmVnaW46IC9bYS16QS1aXFwuLV0rLyxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcey8sIGVuZDogL1xcfS8sIGlsbGVnYWw6IC87LyxcbiAgICAgICAga2V5d29yZHM6IEVYUFJFU1NJT05fS0VZV09SRFNcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBjb21tZW50TW9kZSA9IGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8pO1xuXG4gICAgdmFyIG5vblRlcm1pbmFsTW9kZSA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImF0dHJpYnV0ZVwiLFxuICAgICAgICBiZWdpbjogL15bIF0qW2EtekEtWl1bYS16QS1aLV9dKihbXFxzLV9dK1thLXpBLVpdW2EtekEtWl0qKSovXG4gICAgfTtcblxuICAgIHZhciBzcGVjaWFsU2VxdWVuY2VNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwibWV0YVwiLFxuICAgICAgICBiZWdpbjogL1xcPy4qXFw/L1xuICAgIH07XG5cbiAgICB2YXIgcnVsZUJvZHlNb2RlID0ge1xuICAgICAgICBiZWdpbjogLz0vLCBlbmQ6IC9bLjtdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgICAgc3BlY2lhbFNlcXVlbmNlTW9kZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gdGVybWluYWxzXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAge2JlZ2luOiAnYCcsIGVuZDogJ2AnfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgICAgbm9uVGVybWluYWxNb2RlLFxuICAgICAgICAgICAgcnVsZUJvZHlNb2RlXG4gICAgICAgIF1cbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEVMSVhJUl9JREVOVF9SRSA9ICdbYS16QS1aX11bYS16QS1aMC05Xy5dKihcXFxcIXxcXFxcPyk/JztcbiAgdmFyIEVMSVhJUl9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dXFxcXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+YHxdfFxcXFxbXFxcXF09Pyc7XG4gIHZhciBFTElYSVJfS0VZV09SRFMgPVxuICAgICdhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuICcgK1xuICAgICduZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBuaWwgYnJlYWsgbm90IGNhc2UgY29uZCBhbGlhcyB3aGlsZSBlbnN1cmUgb3IgJyArXG4gICAgJ2luY2x1ZGUgdXNlIGFsaWFzIGZuIHF1b3RlIHJlcXVpcmUgaW1wb3J0IHdpdGh8MCc7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjXFxcXHsnLCBlbmQ6ICd9JyxcbiAgICBsZXhlbWVzOiBFTElYSVJfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEVMSVhJUl9LRVlXT1JEU1xuICB9O1xuXG4gIHZhciBTSUdJTF9ERUxJTUlURVJTID0gJ1svfChbezxcIlxcJ10nXG4gIHZhciBMT1dFUkNBU0VfU0lHSUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ35bYS16XScgKyAnKD89JyArIFNJR0lMX0RFTElNSVRFUlMgKyAnKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDp0cnVlLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7IGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8gfSxcbiAgICAgICAgICAgIHsgYmVnaW46IC8nLywgZW5kOiAvJy8gfSxcbiAgICAgICAgICAgIHsgYmVnaW46IC9cXC8vLCBlbmQ6IC9cXC8vIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAvXFx8LywgZW5kOiAvXFx8LyB9LFxuICAgICAgICAgICAgeyBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8gfSxcbiAgICAgICAgICAgIHsgYmVnaW46IC9cXFsvLCBlbmQ6IC9cXF0vIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAvXFx7LywgZW5kOiAvXFx9LyB9LFxuICAgICAgICAgICAgeyBiZWdpbjogLzwvLCBlbmQ6IC8+LyB9XG4gICAgICAgICAgXVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHZhciBVUENBU0VfU0lHSUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ35bQS1aXScgKyAnKD89JyArIFNJR0lMX0RFTElNSVRFUlMgKyAnKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cIi8sIGVuZDogL1wiLyB9LFxuICAgICAgeyBiZWdpbjogLycvLCBlbmQ6IC8nLyB9LFxuICAgICAgeyBiZWdpbjogL1xcLy8sIGVuZDogL1xcLy8gfSxcbiAgICAgIHsgYmVnaW46IC9cXHwvLCBlbmQ6IC9cXHwvIH0sXG4gICAgICB7IGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyB9LFxuICAgICAgeyBiZWdpbjogL1xcWy8sIGVuZDogL1xcXS8gfSxcbiAgICAgIHsgYmVnaW46IC9cXHsvLCBlbmQ6IC9cXH0vIH0sXG4gICAgICB7IGJlZ2luOiAvXFw8LywgZW5kOiAvXFw+LyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCJcIlwiLywgZW5kOiAvXCJcIlwiLyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJycnLywgZW5kOiAvJycnLyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvflNcIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvflNcIi8sIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TJycnLywgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TJy8sIGVuZDogLycvLFxuICAgICAgICBjb250YWluczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbiAgdmFyIEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnZGVmIGRlZnAgZGVmbWFjcm8nLCBlbmQ6IC9cXEJcXGIvLCAvLyB0aGUgbW9kZSBpcyBlbmRlZCBieSB0aGUgdGl0bGVcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICBiZWdpbjogRUxJWElSX0lERU5UX1JFLFxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICB9KVxuICAgIF1cbiAgfTtcbiAgdmFyIENMQVNTID0gaGxqcy5pbmhlcml0KEZVTkNUSU9OLCB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWZpbXBsIGRlZm1vZHVsZSBkZWZwcm90b2NvbCBkZWZyZWNvcmQnLCBlbmQ6IC9cXGJkb1xcYnwkfDsvXG4gIH0pO1xuICB2YXIgRUxJWElSX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgU1RSSU5HLFxuICAgIFVQQ0FTRV9TSUdJTCxcbiAgICBMT1dFUkNBU0VfU0lHSUwsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBDTEFTUyxcbiAgICBGVU5DVElPTixcbiAgICB7XG4gICAgICBiZWdpbjogJzo6J1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiAnOig/IVtcXFxcczpdKScsXG4gICAgICBjb250YWluczogW1NUUklORywge2JlZ2luOiBFTElYSVJfTUVUSE9EX1JFfV0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogRUxJWElSX0lERU5UX1JFICsgJzooPyE6KScsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBvWzAtN19dKyl8KFxcXFxiMGJbMDFfXSspfChcXFxcYjB4WzAtOWEtZkEtRl9dKyl8KC0/XFxcXGJbMS05XVswLTlfXSooLlswLTlfXSsoW2VFXVstK10/WzAtOV0rKT8pPyknLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICBiZWdpbjogJyhcXFxcJFxcXFxXKXwoKFxcXFwkfFxcXFxAXFxcXEA/KShcXFxcdyspKSdcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLT4nXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJylcXFxccyonLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnLycsIGVuZDogJy9bYS16XSonXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyXFxcXFsnLCBlbmQ6ICdcXFxcXVthLXpdKidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRUxJWElSX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBsZXhlbWVzOiBFTElYSVJfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEVMSVhJUl9LRVlXT1JEUyxcbiAgICBjb250YWluczogRUxJWElSX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ3stJyxcbiAgICAgICAgJy19JyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgICB9XG4gICAgICApXG4gICAgXVxuICB9O1xuXG4gIHZhciBDT05TVFJVQ1RPUiA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXCddKicsIC8vIFRPRE86IG90aGVyIGNvbnN0cnVjdG9ycyAoYnVpbHQtaW4sIGluZml4KS5cbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgIGlsbGVnYWw6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtjbGFzc05hbWU6ICd0eXBlJywgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XSooXFxcXCgoXFxcXC5cXFxcLnwsfFxcXFx3KylcXFxcKSk/J30sXG4gICAgICBDT01NRU5UXG4gICAgXVxuICB9O1xuXG4gIHZhciBSRUNPUkQgPSB7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgY29udGFpbnM6IExJU1QuY29udGFpbnNcbiAgfTtcblxuICB2YXIgQ0hBUkFDVEVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXCdcXFxcXFxcXD8uJywgZW5kOiAnXFwnJyxcbiAgICBpbGxlZ2FsOiAnLidcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOlxuICAgICAgJ2xldCBpbiBpZiB0aGVuIGVsc2UgY2FzZSBvZiB3aGVyZSBtb2R1bGUgaW1wb3J0IGV4cG9zaW5nICcgK1xuICAgICAgJ3R5cGUgYWxpYXMgYXMgaW5maXggaW5maXhsIGluZml4ciBwb3J0IGVmZmVjdCBjb21tYW5kIHN1YnNjcmlwdGlvbicsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gVG9wLWxldmVsIGNvbnN0cnVjdGlvbnMuXG5cbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3BvcnQgZWZmZWN0IG1vZHVsZScsIGVuZDogJ2V4cG9zaW5nJyxcbiAgICAgICAga2V5d29yZHM6ICdwb3J0IGVmZmVjdCBtb2R1bGUgd2hlcmUgY29tbWFuZCBzdWJzY3JpcHRpb24gZXhwb3NpbmcnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdpbXBvcnQnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdpbXBvcnQgYXMgZXhwb3NpbmcnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd0eXBlJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAndHlwZSBhbGlhcycsXG4gICAgICAgIGNvbnRhaW5zOiBbQ09OU1RSVUNUT1IsIExJU1QsIFJFQ09SRCwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmZpeCBpbmZpeGwgaW5maXhyJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5DX05VTUJFUl9NT0RFLCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdwb3J0JywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAncG9ydCcsXG4gICAgICAgIGNvbnRhaW5zOiBbQ09NTUVOVF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIExpdGVyYWxzIGFuZCBuYW1lcy5cblxuICAgICAgQ0hBUkFDVEVSLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnXltfYS16XVtcXFxcd1xcJ10qJ30pLFxuICAgICAgQ09NTUVOVCxcblxuICAgICAge2JlZ2luOiAnLT58PC0nfSAvLyBObyBtYXJrdXAsIHJlbGV2YW5jZSBib29zdGVyXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvOy9cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBSVUJZX01FVEhPRF9SRSA9ICdbYS16QS1aX11cXFxcdypbIT89XT98Wy0rfl1cXFxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFxcXCpcXFxcKnxbLS8rJV4mKn5gfF18XFxcXFtcXFxcXT0/JztcbiAgdmFyIFJVQllfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhbmQgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHNlbGYgd2hlbiAnICtcbiAgICAgICduZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBFTkQgcmVzY3VlIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgJyArXG4gICAgICAncmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSBhdHRyX3JlYWRlciBhdHRyX3dyaXRlciBhdHRyX2FjY2Vzc29yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgbmlsJ1xuICB9O1xuICB2YXIgWUFSRE9DVEFHID0ge1xuICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICB9O1xuICB2YXIgSVJCX09CSkVDVCA9IHtcbiAgICBiZWdpbjogJyM8JywgZW5kOiAnPidcbiAgfTtcbiAgdmFyIENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJyMnLFxuICAgICAgJyQnLFxuICAgICAge1xuICAgICAgICBjb250YWluczogW1lBUkRPQ1RBR11cbiAgICAgIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICdeXFxcXD1iZWdpbicsXG4gICAgICAnXlxcXFw9ZW5kJyxcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IFtZQVJET0NUQUddLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgKSxcbiAgICBobGpzLkNPTU1FTlQoJ15fX0VORF9fJywgJ1xcXFxuJCcpXG4gIF07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjXFxcXHsnLCBlbmQ6ICd9JyxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICB9O1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgIHtiZWdpbjogL2AvLCBlbmQ6IC9gL30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT9cXFxcKCcsIGVuZDogJ1xcXFwpJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT9cXFxcWycsIGVuZDogJ1xcXFxdJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT97JywgZW5kOiAnfSd9LFxuICAgICAge2JlZ2luOiAnJVtxUXdXeF0/PCcsIGVuZDogJz4nfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdPy8nLCBlbmQ6ICcvJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT8lJywgZW5kOiAnJSd9LFxuICAgICAge2JlZ2luOiAnJVtxUXdXeF0/LScsIGVuZDogJy0nfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdP1xcXFx8JywgZW5kOiAnXFxcXHwnfSxcbiAgICAgIHtcbiAgICAgICAgLy8gXFxCIGluIHRoZSBiZWdpbm5pbmcgc3VwcHJlc3NlcyByZWNvZ25pdGlvbiBvZiA/LXNlcXVlbmNlcyB3aGVyZSA/XG4gICAgICAgIC8vIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHByZWNlZGluZyBpZGVudGlmaWVyLCBhcyBpbjogYGZ1bmM/NGBcbiAgICAgICAgYmVnaW46IC9cXEJcXD8oXFxcXFxcZHsxLDN9fFxcXFx4W0EtRmEtZjAtOV17MSwyfXxcXFxcdVtBLUZhLWYwLTldezR9fFxcXFw/XFxTKVxcYi9cbiAgICAgIH0sXG4gICAgICB7IC8vIGhlcmVkb2NzXG4gICAgICAgIGJlZ2luOiAvPDxbLX5dPyc/KFxcdyspKD86LnxcXG4pKj9cXG5cXHMqXFwxXFxiLyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbjogLzw8Wy1+XT8nPy8gfSxcbiAgICAgICAgICB7IGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBlbmRTYW1lQXNCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJywgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICB9O1xuXG4gIHZhciBSVUJZX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgU1RSSU5HLFxuICAgIElSQl9PQkpFQ1QsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIG1vZHVsZScsIGVuZDogJyR8OycsXG4gICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICdbQS1aYS16X11cXFxcdyooOjpcXFxcdyspKihcXFxcP3xcXFxcISk/J30pLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICc8XFxcXHMqJyxcbiAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLklERU5UX1JFICsgJzo6KT8nICsgaGxqcy5JREVOVF9SRVxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICBiZWdpbktleXdvcmRzOiAnZGVmJywgZW5kOiAnJHw7JyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogUlVCWV9NRVRIT0RfUkV9KSxcbiAgICAgICAgUEFSQU1TXG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3dhbGxvdyBuYW1lc3BhY2UgcXVhbGlmaWVycyBiZWZvcmUgc3ltYm9sc1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoXFxcXCF8XFxcXD8pPzonLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46ICc6KD8hXFxcXHMpJyxcbiAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCB7YmVnaW46IFJVQllfTUVUSE9EX1JFfV0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICcoXFxcXCRcXFxcVyl8KChcXFxcJHxcXFxcQFxcXFxAPykoXFxcXHcrKSknIC8vIHZhcmlhYmxlc1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgIGJlZ2luOiAvXFx8LywgZW5kOiAvXFx8LyxcbiAgICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3x1bmxlc3MpXFxcXHMqJyxcbiAgICAgIGtleXdvcmRzOiAndW5sZXNzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIElSQl9PQkpFQ1QsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJy8nLCBlbmQ6ICcvW2Etel0qJ30sXG4gICAgICAgICAgICB7YmVnaW46ICclcnsnLCBlbmQ6ICd9W2Etel0qJ30sXG4gICAgICAgICAgICB7YmVnaW46ICclclxcXFwoJywgZW5kOiAnXFxcXClbYS16XSonfSxcbiAgICAgICAgICAgIHtiZWdpbjogJyVyIScsIGVuZDogJyFbYS16XSonfSxcbiAgICAgICAgICAgIHtiZWdpbjogJyVyXFxcXFsnLCBlbmQ6ICdcXFxcXVthLXpdKid9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXS5jb25jYXQoQ09NTUVOVF9NT0RFUyk7XG5cbiAgU1VCU1QuY29udGFpbnMgPSBSVUJZX0RFRkFVTFRfQ09OVEFJTlM7XG4gIFBBUkFNUy5jb250YWlucyA9IFJVQllfREVGQVVMVF9DT05UQUlOUztcblxuICB2YXIgU0lNUExFX1BST01QVCA9IFwiWz4/XT5cIjtcbiAgdmFyIERFRkFVTFRfUFJPTVBUID0gXCJbXFxcXHcjXStcXFxcKFxcXFx3K1xcXFwpOlxcXFxkKzpcXFxcZCs+XCI7XG4gIHZhciBSVk1fUFJPTVBUID0gXCIoXFxcXHcrLSk/XFxcXGQrXFxcXC5cXFxcZCtcXFxcLlxcXFxkKHBcXFxcZCspP1tePl0rPlwiO1xuXG4gIHZhciBJUkJfREVGQVVMVCA9IFtcbiAgICB7XG4gICAgICBiZWdpbjogL15cXHMqPT4vLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyQnLCBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnXignK1NJTVBMRV9QUk9NUFQrXCJ8XCIrREVGQVVMVF9QUk9NUFQrJ3wnK1JWTV9QUk9NUFQrJyknLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyQnLCBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfVxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydyYicsICdnZW1zcGVjJywgJ3BvZHNwZWMnLCAndGhvcicsICdpcmInXSxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogQ09NTUVOVF9NT0RFUy5jb25jYXQoSVJCX0RFRkFVTFQpLmNvbmNhdChSVUJZX0RFRkFVTFRfQ09OVEFJTlMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCc8JSMnLCAnJT4nKSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc8JVslPS1dPycsIGVuZDogJ1slLV0/JT4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3NwYXduIHNwYXduX2xpbmsgc2VsZicsXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWZ0ZXIgYW5kIGFuZGFsc298MTAgYmFuZCBiZWdpbiBibm90IGJvciBic2wgYnNyIGJ4b3IgY2FzZSBjYXRjaCBjb25kIGRpdiBlbmQgZnVuIGlmICcgK1xuICAgICAgICAnbGV0IG5vdCBvZiBvciBvcmVsc2V8MTAgcXVlcnkgcmVjZWl2ZSByZW0gdHJ5IHdoZW4geG9yJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnXlswLTldKz4gJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnJScsICckJyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrI1thLWZBLUYwLTldK3xcXFxcZCsoXFxcXC5cXFxcZCspPyhbZUVdWy0rXT9cXFxcZCspPyknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFw/KDo6KT8oW0EtWl1cXFxcdyooOjopPykrJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICctPidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnb2snXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyEnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhcXFxcYlthLXpcXCddW2EtekEtWjAtOV9cXCddKjpbYS16XFwnXVthLXpBLVowLTlfXFwnXSopfChcXFxcYlthLXpcXCddW2EtekEtWjAtOV9cXCddKiknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW0EtWl1bYS16QS1aMC05X1xcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEJBU0lDX0FUT01fUkUgPSAnW2EtelxcJ11bYS16QS1aMC05X1xcJ10qJztcbiAgdmFyIEZVTkNUSU9OX05BTUVfUkUgPSAnKCcgKyBCQVNJQ19BVE9NX1JFICsgJzonICsgQkFTSUNfQVRPTV9SRSArICd8JyArIEJBU0lDX0FUT01fUkUgKyAnKSc7XG4gIHZhciBFUkxBTkdfUkVTRVJWRUQgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhZnRlciBhbmQgYW5kYWxzb3wxMCBiYW5kIGJlZ2luIGJub3QgYm9yIGJzbCBienIgYnhvciBjYXNlIGNhdGNoIGNvbmQgZGl2IGVuZCBmdW4gaWYgJyArXG4gICAgICAnbGV0IG5vdCBvZiBvcmVsc2V8MTAgcXVlcnkgcmVjZWl2ZSByZW0gdHJ5IHdoZW4geG9yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIHRydWUnXG4gIH07XG5cbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoJyUnLCAnJCcpO1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdcXFxcYihcXFxcZCsjW2EtZkEtRjAtOV0rfFxcXFxkKyhcXFxcLlxcXFxkKyk/KFtlRV1bLStdP1xcXFxkKyk/KScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBOQU1FRF9GVU4gPSB7XG4gICAgYmVnaW46ICdmdW5cXFxccysnICsgQkFTSUNfQVRPTV9SRSArICcvXFxcXGQrJ1xuICB9O1xuICB2YXIgRlVOQ1RJT05fQ0FMTCA9IHtcbiAgICBiZWdpbjogRlVOQ1RJT05fTkFNRV9SRSArICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEZVTkNUSU9OX05BTUVfUkUsIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIC8vIFwiY29udGFpbnNcIiBkZWZpbmVkIGxhdGVyXG4gICAgICB9XG4gICAgXVxuICB9O1xuICB2YXIgVFVQTEUgPSB7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgcmVsZXZhbmNlOiAwXG4gICAgLy8gXCJjb250YWluc1wiIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgdmFyIFZBUjEgPSB7XG4gICAgYmVnaW46ICdcXFxcYl8oW0EtWl1bQS1aYS16MC05X10qKT8nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgVkFSMiA9IHtcbiAgICBiZWdpbjogJ1tBLVpdW2EtekEtWjAtOV9dKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBSRUNPUkRfQUNDRVNTID0ge1xuICAgIGJlZ2luOiAnIycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnIycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAvLyBcImNvbnRhaW5zXCIgZGVmaW5lZCBsYXRlclxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgQkxPQ0tfU1RBVEVNRU5UUyA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnZnVuIHJlY2VpdmUgaWYgdHJ5IGNhc2UnLCBlbmQ6ICdlbmQnLFxuICAgIGtleXdvcmRzOiBFUkxBTkdfUkVTRVJWRURcbiAgfTtcbiAgQkxPQ0tfU1RBVEVNRU5UUy5jb250YWlucyA9IFtcbiAgICBDT01NRU5ULFxuICAgIE5BTUVEX0ZVTixcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnJ30pLFxuICAgIEJMT0NLX1NUQVRFTUVOVFMsXG4gICAgRlVOQ1RJT05fQ0FMTCxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUixcbiAgICBUVVBMRSxcbiAgICBWQVIxLCBWQVIyLFxuICAgIFJFQ09SRF9BQ0NFU1NcbiAgXTtcblxuICB2YXIgQkFTSUNfTU9ERVMgPSBbXG4gICAgQ09NTUVOVCxcbiAgICBOQU1FRF9GVU4sXG4gICAgQkxPQ0tfU1RBVEVNRU5UUyxcbiAgICBGVU5DVElPTl9DQUxMLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSLFxuICAgIFRVUExFLFxuICAgIFZBUjEsIFZBUjIsXG4gICAgUkVDT1JEX0FDQ0VTU1xuICBdO1xuICBGVU5DVElPTl9DQUxMLmNvbnRhaW5zWzFdLmNvbnRhaW5zID0gQkFTSUNfTU9ERVM7XG4gIFRVUExFLmNvbnRhaW5zID0gQkFTSUNfTU9ERVM7XG4gIFJFQ09SRF9BQ0NFU1MuY29udGFpbnNbMV0uY29udGFpbnMgPSBCQVNJQ19NT0RFUztcblxuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogQkFTSUNfTU9ERVNcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2VybCddLFxuICAgIGtleXdvcmRzOiBFUkxBTkdfUkVTRVJWRUQsXG4gICAgaWxsZWdhbDogJyg8L3xcXFxcKj18XFxcXCs9fC09fC9cXFxcKnxcXFxcKi98XFxcXChcXFxcKnxcXFxcKlxcXFwpKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ14nICsgQkFTSUNfQVRPTV9SRSArICdcXFxccypcXFxcKCcsIGVuZDogJy0+JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcKHwjfC8vfC9cXFxcKnxcXFxcXFxcXHw6fDsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IEJBU0lDX0FUT01fUkV9KVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICc7fFxcXFwuJyxcbiAgICAgICAgICBrZXl3b3JkczogRVJMQU5HX1JFU0VSVkVELFxuICAgICAgICAgIGNvbnRhaW5zOiBCQVNJQ19NT0RFU1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ09NTUVOVCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeLScsIGVuZDogJ1xcXFwuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgbGV4ZW1lczogJy0nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgICAga2V5d29yZHM6XG4gICAgICAgICAgJy1tb2R1bGUgLXJlY29yZCAtdW5kZWYgLWV4cG9ydCAtaWZkZWYgLWlmbmRlZiAtYXV0aG9yIC1jb3B5cmlnaHQgLWRvYyAtdnNuICcgK1xuICAgICAgICAgICctaW1wb3J0IC1pbmNsdWRlIC1pbmNsdWRlX2xpYiAtY29tcGlsZSAtZGVmaW5lIC1lbHNlIC1lbmRpZiAtZmlsZSAtYmVoYXZpb3VyICcgK1xuICAgICAgICAgICctYmVoYXZpb3IgLXNwZWMnLFxuICAgICAgICBjb250YWluczogW1BBUkFNU11cbiAgICAgIH0sXG4gICAgICBOVU1CRVIsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgUkVDT1JEX0FDQ0VTUyxcbiAgICAgIFZBUjEsIFZBUjIsXG4gICAgICBUVVBMRSxcbiAgICAgIHtiZWdpbjogL1xcLiQvfSAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd4bHN4JywgJ3hscyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1thLXpBLVpdW1xcd1xcLl0qLyxcbiAgICAvLyBidWlsdC1pbiBmdW5jdGlvbnMgaW1wb3J0ZWQgZnJvbSBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA1MTMwNDI3MTAvaHR0cHM6Ly9zdXBwb3J0Lm9mZmljZS5jb20vZW4tdXMvYXJ0aWNsZS9FeGNlbC1mdW5jdGlvbnMtYWxwaGFiZXRpY2FsLWIzOTQ0NTcyLTI1NWQtNGVmYi1iYjk2LWM2ZDkwMDMzZTE4OFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAgIGJ1aWx0X2luOiAnQUJTIEFDQ1JJTlQgQUNDUklOVE0gQUNPUyBBQ09TSCBBQ09UIEFDT1RIIEFHR1JFR0FURSBBRERSRVNTIEFNT1JERUdSQyBBTU9STElOQyBBTkQgQVJBQklDIEFSRUFTIEFTQyBBU0lOIEFTSU5IIEFUQU4gQVRBTjIgQVRBTkggQVZFREVWIEFWRVJBR0UgQVZFUkFHRUEgQVZFUkFHRUlGIEFWRVJBR0VJRlMgQkFIVFRFWFQgQkFTRSBCRVNTRUxJIEJFU1NFTEogQkVTU0VMSyBCRVNTRUxZIEJFVEFESVNUIEJFVEEuRElTVCBCRVRBSU5WIEJFVEEuSU5WIEJJTjJERUMgQklOMkhFWCBCSU4yT0NUIEJJTk9NRElTVCBCSU5PTS5ESVNUIEJJTk9NLkRJU1QuUkFOR0UgQklOT00uSU5WIEJJVEFORCBCSVRMU0hJRlQgQklUT1IgQklUUlNISUZUIEJJVFhPUiBDQUxMIENFSUxJTkcgQ0VJTElORy5NQVRIIENFSUxJTkcuUFJFQ0lTRSBDRUxMIENIQVIgQ0hJRElTVCBDSElJTlYgQ0hJVEVTVCBDSElTUS5ESVNUIENISVNRLkRJU1QuUlQgQ0hJU1EuSU5WIENISVNRLklOVi5SVCBDSElTUS5URVNUIENIT09TRSBDTEVBTiBDT0RFIENPTFVNTiBDT0xVTU5TIENPTUJJTiBDT01CSU5BIENPTVBMRVggQ09OQ0FUIENPTkNBVEVOQVRFIENPTkZJREVOQ0UgQ09ORklERU5DRS5OT1JNIENPTkZJREVOQ0UuVCBDT05WRVJUIENPUlJFTCBDT1MgQ09TSCBDT1QgQ09USCBDT1VOVCBDT1VOVEEgQ09VTlRCTEFOSyBDT1VOVElGIENPVU5USUZTIENPVVBEQVlCUyBDT1VQREFZUyBDT1VQREFZU05DIENPVVBOQ0QgQ09VUE5VTSBDT1VQUENEIENPVkFSIENPVkFSSUFOQ0UuUCBDT1ZBUklBTkNFLlMgQ1JJVEJJTk9NIENTQyBDU0NIIENVQkVLUElNRU1CRVIgQ1VCRU1FTUJFUiBDVUJFTUVNQkVSUFJPUEVSVFkgQ1VCRVJBTktFRE1FTUJFUiBDVUJFU0VUIENVQkVTRVRDT1VOVCBDVUJFVkFMVUUgQ1VNSVBNVCBDVU1QUklOQyBEQVRFIERBVEVESUYgREFURVZBTFVFIERBVkVSQUdFIERBWSBEQVlTIERBWVMzNjAgREIgREJDUyBEQ09VTlQgRENPVU5UQSBEREIgREVDMkJJTiBERUMySEVYIERFQzJPQ1QgREVDSU1BTCBERUdSRUVTIERFTFRBIERFVlNRIERHRVQgRElTQyBETUFYIERNSU4gRE9MTEFSIERPTExBUkRFIERPTExBUkZSIERQUk9EVUNUIERTVERFViBEU1RERVZQIERTVU0gRFVSQVRJT04gRFZBUiBEVkFSUCBFREFURSBFRkZFQ1QgRU5DT0RFVVJMIEVPTU9OVEggRVJGIEVSRi5QUkVDSVNFIEVSRkMgRVJGQy5QUkVDSVNFIEVSUk9SLlRZUEUgRVVST0NPTlZFUlQgRVZFTiBFWEFDVCBFWFAgRVhQT04uRElTVCBFWFBPTkRJU1QgRkFDVCBGQUNURE9VQkxFIEZBTFNFfDAgRi5ESVNUIEZESVNUIEYuRElTVC5SVCBGSUxURVJYTUwgRklORCBGSU5EQiBGLklOViBGLklOVi5SVCBGSU5WIEZJU0hFUiBGSVNIRVJJTlYgRklYRUQgRkxPT1IgRkxPT1IuTUFUSCBGTE9PUi5QUkVDSVNFIEZPUkVDQVNUIEZPUkVDQVNULkVUUyBGT1JFQ0FTVC5FVFMuQ09ORklOVCBGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkgRk9SRUNBU1QuRVRTLlNUQVQgRk9SRUNBU1QuTElORUFSIEZPUk1VTEFURVhUIEZSRVFVRU5DWSBGLlRFU1QgRlRFU1QgRlYgRlZTQ0hFRFVMRSBHQU1NQSBHQU1NQS5ESVNUIEdBTU1BRElTVCBHQU1NQS5JTlYgR0FNTUFJTlYgR0FNTUFMTiBHQU1NQUxOLlBSRUNJU0UgR0FVU1MgR0NEIEdFT01FQU4gR0VTVEVQIEdFVFBJVk9UREFUQSBHUk9XVEggSEFSTUVBTiBIRVgyQklOIEhFWDJERUMgSEVYMk9DVCBITE9PS1VQIEhPVVIgSFlQRVJMSU5LIEhZUEdFT00uRElTVCBIWVBHRU9NRElTVCBJRiBJRkVSUk9SIElGTkEgSUZTIElNQUJTIElNQUdJTkFSWSBJTUFSR1VNRU5UIElNQ09OSlVHQVRFIElNQ09TIElNQ09TSCBJTUNPVCBJTUNTQyBJTUNTQ0ggSU1ESVYgSU1FWFAgSU1MTiBJTUxPRzEwIElNTE9HMiBJTVBPV0VSIElNUFJPRFVDVCBJTVJFQUwgSU1TRUMgSU1TRUNIIElNU0lOIElNU0lOSCBJTVNRUlQgSU1TVUIgSU1TVU0gSU1UQU4gSU5ERVggSU5ESVJFQ1QgSU5GTyBJTlQgSU5URVJDRVBUIElOVFJBVEUgSVBNVCBJUlIgSVNCTEFOSyBJU0VSUiBJU0VSUk9SIElTRVZFTiBJU0ZPUk1VTEEgSVNMT0dJQ0FMIElTTkEgSVNOT05URVhUIElTTlVNQkVSIElTT0REIElTUkVGIElTVEVYVCBJU08uQ0VJTElORyBJU09XRUVLTlVNIElTUE1UIEpJUyBLVVJUIExBUkdFIExDTSBMRUZUIExFRlRCIExFTiBMRU5CIExJTkVTVCBMTiBMT0cgTE9HMTAgTE9HRVNUIExPR0lOViBMT0dOT1JNLkRJU1QgTE9HTk9STURJU1QgTE9HTk9STS5JTlYgTE9PS1VQIExPV0VSIE1BVENIIE1BWCBNQVhBIE1BWElGUyBNREVURVJNIE1EVVJBVElPTiBNRURJQU4gTUlEIE1JREJzIE1JTiBNSU5JRlMgTUlOQSBNSU5VVEUgTUlOVkVSU0UgTUlSUiBNTVVMVCBNT0QgTU9ERSBNT0RFLk1VTFQgTU9ERS5TTkdMIE1PTlRIIE1ST1VORCBNVUxUSU5PTUlBTCBNVU5JVCBOIE5BIE5FR0JJTk9NLkRJU1QgTkVHQklOT01ESVNUIE5FVFdPUktEQVlTIE5FVFdPUktEQVlTLklOVEwgTk9NSU5BTCBOT1JNLkRJU1QgTk9STURJU1QgTk9STUlOViBOT1JNLklOViBOT1JNLlMuRElTVCBOT1JNU0RJU1QgTk9STS5TLklOViBOT1JNU0lOViBOT1QgTk9XIE5QRVIgTlBWIE5VTUJFUlZBTFVFIE9DVDJCSU4gT0NUMkRFQyBPQ1QySEVYIE9ERCBPRERGUFJJQ0UgT0RERllJRUxEIE9ERExQUklDRSBPRERMWUlFTEQgT0ZGU0VUIE9SIFBEVVJBVElPTiBQRUFSU09OIFBFUkNFTlRJTEUuRVhDIFBFUkNFTlRJTEUuSU5DIFBFUkNFTlRJTEUgUEVSQ0VOVFJBTksuRVhDIFBFUkNFTlRSQU5LLklOQyBQRVJDRU5UUkFOSyBQRVJNVVQgUEVSTVVUQVRJT05BIFBISSBQSE9ORVRJQyBQSSBQTVQgUE9JU1NPTi5ESVNUIFBPSVNTT04gUE9XRVIgUFBNVCBQUklDRSBQUklDRURJU0MgUFJJQ0VNQVQgUFJPQiBQUk9EVUNUIFBST1BFUiBQViBRVUFSVElMRSBRVUFSVElMRS5FWEMgUVVBUlRJTEUuSU5DIFFVT1RJRU5UIFJBRElBTlMgUkFORCBSQU5EQkVUV0VFTiBSQU5LLkFWRyBSQU5LLkVRIFJBTksgUkFURSBSRUNFSVZFRCBSRUdJU1RFUi5JRCBSRVBMQUNFIFJFUExBQ0VCIFJFUFQgUklHSFQgUklHSFRCIFJPTUFOIFJPVU5EIFJPVU5ERE9XTiBST1VORFVQIFJPVyBST1dTIFJSSSBSU1EgUlREIFNFQVJDSCBTRUFSQ0hCIFNFQyBTRUNIIFNFQ09ORCBTRVJJRVNTVU0gU0hFRVQgU0hFRVRTIFNJR04gU0lOIFNJTkggU0tFVyBTS0VXLlAgU0xOIFNMT1BFIFNNQUxMIFNRTC5SRVFVRVNUIFNRUlQgU1FSVFBJIFNUQU5EQVJESVpFIFNUREVWIFNUREVWLlAgU1RERVYuUyBTVERFVkEgU1RERVZQIFNUREVWUEEgU1RFWVggU1VCU1RJVFVURSBTVUJUT1RBTCBTVU0gU1VNSUYgU1VNSUZTIFNVTVBST0RVQ1QgU1VNU1EgU1VNWDJNWTIgU1VNWDJQWTIgU1VNWE1ZMiBTV0lUQ0ggU1lEIFQgVEFOIFRBTkggVEJJTExFUSBUQklMTFBSSUNFIFRCSUxMWUlFTEQgVC5ESVNUIFQuRElTVC4yVCBULkRJU1QuUlQgVERJU1QgVEVYVCBURVhUSk9JTiBUSU1FIFRJTUVWQUxVRSBULklOViBULklOVi4yVCBUSU5WIFRPREFZIFRSQU5TUE9TRSBUUkVORCBUUklNIFRSSU1NRUFOIFRSVUV8MCBUUlVOQyBULlRFU1QgVFRFU1QgVFlQRSBVTklDSEFSIFVOSUNPREUgVVBQRVIgVkFMVUUgVkFSIFZBUi5QIFZBUi5TIFZBUkEgVkFSUCBWQVJQQSBWREIgVkxPT0tVUCBXRUJTRVJWSUNFIFdFRUtEQVkgV0VFS05VTSBXRUlCVUxMIFdFSUJVTEwuRElTVCBXT1JLREFZIFdPUktEQVkuSU5UTCBYSVJSIFhOUFYgWE9SIFlFQVIgWUVBUkZSQUMgWUlFTEQgWUlFTERESVNDIFlJRUxETUFUIFouVEVTVCBaVEVTVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIC8qIG1hdGNoZXMgYSBiZWdpbm5pbmcgZXF1YWwgc2lnbiBmb3VuZCBpbiBFeGNlbCBmb3JtdWxhIGV4YW1wbGVzICovXG4gICAgICAgIGJlZ2luOiAvXj0vLFxuICAgICAgICBlbmQ6IC9bXj1dLywgcmV0dXJuRW5kOiB0cnVlLCBpbGxlZ2FsOiAvPS8sIC8qIG9ubHkgYWxsb3cgc2luZ2xlIGVxdWFsIHNpZ24gYXQgZnJvbnQgb2YgbGluZSAqL1xuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLyogdGVjaG5pY2FsbHksIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gMiBsZXR0ZXJzIGluIGNvbHVtbiBuYW1lcywgYnV0IHRoaXMgcHJldmVudHMgY29uZmxpY3Qgd2l0aCBzb21lIGtleXdvcmRzICovXG4gICAgICB7XG4gICAgICAgIC8qIG1hdGNoZXMgYSByZWZlcmVuY2UgdG8gYSBzaW5nbGUgY2VsbCAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL1xcYltBLVpdezEsMn1cXGQrXFxiLyxcbiAgICAgICAgZW5kOiAvW15cXGRdLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvKiBtYXRjaGVzIGEgcmVmZXJlbmNlIHRvIGEgcmFuZ2Ugb2YgY2VsbHMgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9bQS1aXXswLDJ9XFxkKjpbQS1aXXswLDJ9XFxkKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSArICcoJSk/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLyogRXhjZWwgZm9ybXVsYSBjb21tZW50cyBhcmUgZG9uZSBieSBwdXR0aW5nIHRoZSBjb21tZW50IGluIGEgZnVuY3Rpb24gY2FsbCB0byBOKCkgKi9cbiAgICAgIGhsanMuQ09NTUVOVCgvXFxiTlxcKC8sL1xcKS8sXG4gICAgICB7XG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1xcbi9cbiAgICAgIH0pXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogW1xuICAgIHtcbiAgICAgIGJlZ2luOiAvW15cXHUyNDAxXFx1MDAwMV0rLyxcbiAgICAgIGVuZDogL1tcXHUyNDAxXFx1MDAwMV0vLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFteXFx1MjQwMVxcdTAwMDE9XSspLyxcbiAgICAgICAgZW5kOiAvPShbXlxcdTI0MDFcXHUwMDAxPV0rKS8sXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmVnaW46IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89LyxcbiAgICAgICAgZW5kOiAvKFtcXHUyNDAxXFx1MDAwMV0pLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnXG4gICAgICB9XVxuICAgIH1dLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWVcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuXG4gICAgdmFyIENIQVIgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvJygufFxcXFxbeFh1VV1bYS16QS1aMC05XSspJy9cbiAgICB9O1xuXG4gICAgdmFyIFNUUklORyA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgdmFyIE5BTUUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vXG4gICAgfTtcblxuICAgIHZhciBNRVRIT0QgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZicsXG4gICAgICAgIGVuZDogL1s6PXtcXFsoXFxuO10vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW05BTUVdXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZScsXG4gICAgICAgICAgICBrZXl3b3JkOiAnY2FzZSBjbGFzcyBkZWYgZWxzZSBlbnVtIGlmIGltcGwgaW1wb3J0IGluIGxhdCByZWwgaW5kZXggbGV0IG1hdGNoIG5hbWVzcGFjZSBzd2l0Y2ggdHlwZSB5aWVsZCB3aXRoJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIENIQVIsXG4gICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICBNRVRIT0QsXG4gICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuXG4gIHZhciBGX0tFWVdPUkRTID0ge1xuICAgIGxpdGVyYWw6ICcuRmFsc2UuIC5UcnVlLicsXG4gICAga2V5d29yZDogJ2tpbmQgZG8gd2hpbGUgcHJpdmF0ZSBjYWxsIGludHJpbnNpYyB3aGVyZSBlbHNld2hlcmUgJyArXG4gICAgICAndHlwZSBlbmR0eXBlIGVuZG1vZHVsZSBlbmRzZWxlY3QgZW5kaW50ZXJmYWNlIGVuZCBlbmRkbyBlbmRpZiBpZiBmb3JhbGwgZW5kZm9yYWxsIG9ubHkgY29udGFpbnMgZGVmYXVsdCByZXR1cm4gc3RvcCB0aGVuIGJsb2NrIGVuZGJsb2NrICcgK1xuICAgICAgJ3B1YmxpYyBzdWJyb3V0aW5lfDEwIGZ1bmN0aW9uIHByb2dyYW0gLmFuZC4gLm9yLiAubm90LiAubGUuIC5lcS4gLmdlLiAuZ3QuIC5sdC4gJyArXG4gICAgICAnZ290byBzYXZlIGVsc2UgdXNlIG1vZHVsZSBzZWxlY3QgY2FzZSAnICtcbiAgICAgICdhY2Nlc3MgYmxhbmsgZGlyZWN0IGV4aXN0IGZpbGUgZm10IGZvcm0gZm9ybWF0dGVkIGlvc3RhdCBuYW1lIG5hbWVkIG5leHRyZWMgbnVtYmVyIG9wZW5lZCByZWMgcmVjbCBzZXF1ZW50aWFsIHN0YXR1cyB1bmZvcm1hdHRlZCB1bml0ICcgK1xuICAgICAgJ2NvbnRpbnVlIGZvcm1hdCBwYXVzZSBjeWNsZSBleGl0ICcgK1xuICAgICAgJ2NfbnVsbF9jaGFyIGNfYWxlcnQgY19iYWNrc3BhY2UgY19mb3JtX2ZlZWQgZmx1c2ggd2FpdCBkZWNpbWFsIHJvdW5kIGlvbXNnICcgK1xuICAgICAgJ3N5bmNocm9ub3VzIG5vcGFzcyBub25fb3ZlcnJpZGFibGUgcGFzcyBwcm90ZWN0ZWQgdm9sYXRpbGUgYWJzdHJhY3QgZXh0ZW5kcyBpbXBvcnQgJyArXG4gICAgICAnbm9uX2ludHJpbnNpYyB2YWx1ZSBkZWZlcnJlZCBnZW5lcmljIGZpbmFsIGVudW1lcmF0b3IgY2xhc3MgYXNzb2NpYXRlIGJpbmQgZW51bSAnICtcbiAgICAgICdjX2ludCBjX3Nob3J0IGNfbG9uZyBjX2xvbmdfbG9uZyBjX3NpZ25lZF9jaGFyIGNfc2l6ZV90IGNfaW50OF90IGNfaW50MTZfdCBjX2ludDMyX3QgY19pbnQ2NF90IGNfaW50X2xlYXN0OF90IGNfaW50X2xlYXN0MTZfdCAnICtcbiAgICAgICdjX2ludF9sZWFzdDMyX3QgY19pbnRfbGVhc3Q2NF90IGNfaW50X2Zhc3Q4X3QgY19pbnRfZmFzdDE2X3QgY19pbnRfZmFzdDMyX3QgY19pbnRfZmFzdDY0X3QgY19pbnRtYXhfdCBDX2ludHB0cl90IGNfZmxvYXQgY19kb3VibGUgJyArXG4gICAgICAnY19sb25nX2RvdWJsZSBjX2Zsb2F0X2NvbXBsZXggY19kb3VibGVfY29tcGxleCBjX2xvbmdfZG91YmxlX2NvbXBsZXggY19ib29sIGNfY2hhciBjX251bGxfcHRyIGNfbnVsbF9mdW5wdHIgJyArXG4gICAgICAnY19uZXdfbGluZSBjX2NhcnJpYWdlX3JldHVybiBjX2hvcml6b250YWxfdGFiIGNfdmVydGljYWxfdGFiIGlzb19jX2JpbmRpbmcgY19sb2MgY19mdW5sb2MgY19hc3NvY2lhdGVkICBjX2ZfcG9pbnRlciAnICtcbiAgICAgICdjX3B0ciBjX2Z1bnB0ciBpc29fZm9ydHJhbl9lbnYgY2hhcmFjdGVyX3N0b3JhZ2Vfc2l6ZSBlcnJvcl91bml0IGZpbGVfc3RvcmFnZV9zaXplIGlucHV0X3VuaXQgaW9zdGF0X2VuZCBpb3N0YXRfZW9yICcgK1xuICAgICAgJ251bWVyaWNfc3RvcmFnZV9zaXplIG91dHB1dF91bml0IGNfZl9wcm9jcG9pbnRlciBpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sICcgK1xuICAgICAgJ2llZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlIG5ld3VuaXQgY29udGlndW91cyByZWN1cnNpdmUgJyArXG4gICAgICAncGFkIHBvc2l0aW9uIGFjdGlvbiBkZWxpbSByZWFkd3JpdGUgZW9yIGFkdmFuY2Ugbm1sIGludGVyZmFjZSBwcm9jZWR1cmUgbmFtZWxpc3QgaW5jbHVkZSBzZXF1ZW5jZSBlbGVtZW50YWwgcHVyZSAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgY2hhcmFjdGVyIGNvbXBsZXggbG9naWNhbCBkaW1lbnNpb24gYWxsb2NhdGFibGV8MTAgcGFyYW1ldGVyICcgK1xuICAgICAgJ2V4dGVybmFsIGltcGxpY2l0fDEwIG5vbmUgZG91YmxlIHByZWNpc2lvbiBhc3NpZ24gaW50ZW50IG9wdGlvbmFsIHBvaW50ZXIgJyArXG4gICAgICAndGFyZ2V0IGluIG91dCBjb21tb24gZXF1aXZhbGVuY2UgZGF0YScsXG4gICAgYnVpbHRfaW46ICdhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50ICcgK1xuICAgICAgJ2Rsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgJyArXG4gICAgICAnYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hICcgK1xuICAgICAgJ2lxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgJyArXG4gICAgICAncW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgJyArXG4gICAgICAnbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgJyArXG4gICAgICAnYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgJyArXG4gICAgICAnZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCAnICtcbiAgICAgICdtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0ICcgK1xuICAgICAgJ3JhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kICcgK1xuICAgICAgJ3NldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgJyArXG4gICAgICAnZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kICcgK1xuICAgICAgJ2llZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgJyArXG4gICAgICAnaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mJyAgK1xuICAgICAgJ2Fjb3NoIGFzaW5oIGF0YW5oIGJlc3NlbF9qMCBiZXNzZWxfajEgYmVzc2VsX2puIGJlc3NlbF95MCBiZXNzZWxfeTEgYmVzc2VsX3luIGVyZiBlcmZjIGVyZmNfc2NhbGVkIGdhbW1hIGxvZ19nYW1tYSBoeXBvdCBub3JtMiAnICtcbiAgICAgICdhdG9taWNfZGVmaW5lIGF0b21pY19yZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUgbGVhZHogdHJhaWx6IHN0b3JhZ2Vfc2l6ZSBtZXJnZV9iaXRzICcgK1xuICAgICAgJ2JnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciAnICtcbiAgICAgICdudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2UnXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbJ2Y5MCcsICdmOTUnXSxcbiAgICBrZXl3b3JkczogRl9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez1cXFxcbl0nLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCBQQVJBTVNdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKD89XFxcXGJ8XFxcXCt8XFxcXC18XFxcXC4pKD89XFxcXC5cXFxcZHxcXFxcZCkoPzpcXFxcZCspPyg/OlxcXFwuP1xcXFxkKikoPzpbZGVdWystXT9cXFxcZCspP1xcXFxiXFxcXC4/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFRZUEVQQVJBTSA9IHtcbiAgICBiZWdpbjogJzwnLCBlbmQ6ICc+JyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAvJ1thLXpBLVowLTlfXSsvfSlcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2ZzJ10sXG4gICAga2V5d29yZHM6XG4gICAgICAnYWJzdHJhY3QgYW5kIGFzIGFzc2VydCBiYXNlIGJlZ2luIGNsYXNzIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG9uZSAnICtcbiAgICAgICdkb3duY2FzdCBkb3dudG8gZWxpZiBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuIGZhbHNlIGZpbmFsbHkgZm9yICcgK1xuICAgICAgJ2Z1biBmdW5jdGlvbiBnbG9iYWwgaWYgaW4gaW5oZXJpdCBpbmxpbmUgaW50ZXJmYWNlIGludGVybmFsIGxhenkgbGV0ICcgK1xuICAgICAgJ21hdGNoIG1lbWJlciBtb2R1bGUgbXV0YWJsZSBuYW1lc3BhY2UgbmV3IG51bGwgb2Ygb3BlbiBvciAnICtcbiAgICAgICdvdmVycmlkZSBwcml2YXRlIHB1YmxpYyByZWMgcmV0dXJuIHNpZyBzdGF0aWMgc3RydWN0IHRoZW4gdG8gJyArXG4gICAgICAndHJ1ZSB0cnkgdHlwZSB1cGNhc3QgdXNlIHZhbCB2b2lkIHdoZW4gd2hpbGUgd2l0aCB5aWVsZCcsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gbW9uYWQgYnVpbGRlciBrZXl3b3JkcyAobWF0Y2hlcyBiZWZvcmUgbm9uLWJhbmcga3dzKVxuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46IC9cXGIoeWllbGR8cmV0dXJufGxldHxkbykhL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdAXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCInXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKFxcXFwqJywgJ1xcXFwqXFxcXCknKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAndHlwZScsIGVuZDogJ1xcXFwofD18JCcsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAgVFlQRVBBUkFNXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ1xcXFxbPCcsIGVuZDogJz5cXFxcXScsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXEIoXFwnW0EtWmEtel0pXFxcXGInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgJ2tleXdvcmQnOlxuICAgICAgJ2Fib3J0IGFjcm9ueW0gYWNyb255bXMgYWxpYXMgYWxsIGFuZCBhc3NpZ24gYmluYXJ5IGNhcmQgZGlhZyBkaXNwbGF5ICcgK1xuICAgICAgJ2Vsc2UgZXEgZmlsZSBmaWxlcyBmb3IgZnJlZSBnZSBndCBpZiBpbnRlZ2VyIGxlIGxvb3AgbHQgbWF4aW1pemluZyAnICtcbiAgICAgICdtaW5pbWl6aW5nIG1vZGVsIG1vZGVscyBuZSBuZWdhdGl2ZSBubyBub3Qgb3B0aW9uIG9wdGlvbnMgb3Igb3JkICcgK1xuICAgICAgJ3Bvc2l0aXZlIHByb2QgcHV0IHB1dHBhZ2UgcHV0dGwgcmVwZWF0IHNhbWVhcyBzZW1pY29udCBzZW1paW50IHNtYXggJyArXG4gICAgICAnc21pbiBzb2x2ZSBzb3MxIHNvczIgc3VtIHN5c3RlbSB0YWJsZSB0aGVuIHVudGlsIHVzaW5nIHdoaWxlIHhvciB5ZXMnLFxuICAgICdsaXRlcmFsJzogJ2VwcyBpbmYgbmEnLFxuICAgICdidWlsdC1pbic6XG4gICAgICAnYWJzIGFyY2NvcyBhcmNzaW4gYXJjdGFuIGFyY3RhbjIgQmV0YSBiZXRhUmVnIGJpbm9taWFsIGNlaWwgY2VudHJvcHkgJyArXG4gICAgICAnY29zIGNvc2ggY3ZQb3dlciBkaXYgZGl2MCBlRGlzdCBlbnRyb3B5IGVycm9yZiBleGVjU2VlZCBleHAgZmFjdCAnICtcbiAgICAgICdmbG9vciBmcmFjIGdhbW1hIGdhbW1hUmVnIGxvZyBsb2dCZXRhIGxvZ0dhbW1hIGxvZzEwIGxvZzIgbWFwVmFsIG1heCAnICtcbiAgICAgICdtaW4gbW9kIG5jcENNIG5jcEYgbmNwVlVwb3cgbmNwVlVzaW4gbm9ybWFsIHBpIHBvbHkgcG93ZXIgJyArXG4gICAgICAncmFuZEJpbm9taWFsIHJhbmRMaW5lYXIgcmFuZFRyaWFuZ2xlIHJvdW5kIHJQb3dlciBzaWdtb2lkIHNpZ24gJyArXG4gICAgICAnc2lnblBvd2VyIHNpbiBzaW5oIHNsZXhwIHNsbG9nMTAgc2xyZWMgc3FleHAgc3Fsb2cxMCBzcXIgc3FyZWMgc3FydCAnICtcbiAgICAgICd0YW4gdGFuaCB0cnVuYyB1bmlmb3JtIHVuaWZvcm1JbnQgdmNQb3dlciBib29sX2FuZCBib29sX2VxdiBib29sX2ltcCAnICtcbiAgICAgICdib29sX25vdCBib29sX29yIGJvb2xfeG9yIGlmVGhlbiByZWxfZXEgcmVsX2dlIHJlbF9ndCByZWxfbGUgcmVsX2x0ICcgK1xuICAgICAgJ3JlbF9uZSBnZGF5IGdkb3cgZ2hvdXIgZ2xlYXAgZ21pbGxpc2VjIGdtaW51dGUgZ21vbnRoIGdzZWNvbmQgZ3llYXIgJyArXG4gICAgICAnamRhdGUgam5vdyBqc3RhcnQganRpbWUgZXJyb3JMZXZlbCBleGVjRXJyb3IgZ2Ftc1JlbGVhc2UgZ2Ftc1ZlcnNpb24gJyArXG4gICAgICAnaGFuZGxlQ29sbGVjdCBoYW5kbGVEZWxldGUgaGFuZGxlU3RhdHVzIGhhbmRsZVN1Ym1pdCBoZWFwRnJlZSAnICtcbiAgICAgICdoZWFwTGltaXQgaGVhcFNpemUgam9iSGFuZGxlIGpvYktpbGwgam9iU3RhdHVzIGpvYlRlcm1pbmF0ZSAnICtcbiAgICAgICdsaWNlbnNlTGV2ZWwgbGljZW5zZVN0YXR1cyBtYXhFeGVjRXJyb3Igc2xlZXAgdGltZUNsb3NlIHRpbWVDb21wICcgK1xuICAgICAgJ3RpbWVFbGFwc2VkIHRpbWVFeGVjIHRpbWVTdGFydCdcbiAgfTtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgfTtcbiAgdmFyIFNZTUJPTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFw9W2xnZW54Y109L30sXG4gICAgICB7YmVnaW46IC9cXCQvfSxcbiAgICBdXG4gIH07XG4gIHZhciBRU1RSID0geyAvLyBPbmUtbGluZSBxdW90ZWQgY29tbWVudCBzdHJpbmdcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAnXFwnJywgZW5kOiAnXFwnJ30sXG4gICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJ30sXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICB2YXIgQVNTSUdOTUVOVCA9IHtcbiAgICBiZWdpbjogJy8nLFxuICAgIGVuZDogJy8nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgUVNUUixcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgIF0sXG4gIH07XG4gIHZhciBERVNDVEVYVCA9IHsgLy8gUGFyYW1ldGVyL3NldC92YXJpYWJsZSBkZXNjcmlwdGlvbiB0ZXh0XG4gICAgYmVnaW46IC9bYS16XVthLXowLTlfXSooXFwoW2EtejAtOV8sIF0qXFwpKT9bIFxcdF0rLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZW5kOiAnJCcsXG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFTVFIsXG4gICAgICBBU1NJR05NRU5ULFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgYmVnaW46IC8oWyBdKlthLXowLTkmIyo9P0A+XFxcXDw6XFwtLCgpJFxcW1xcXV8ue30hKyVeXSspKy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydnbXMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKC9eXFwkb250ZXh0LywgL15cXCRvZmZ0ZXh0LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxcJFthLXowLTldKycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLWtleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICdeXFxcXCRbYS16MC05XSsnLFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFwqJywgJyQnKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgLy8gRGVjbGFyYXRpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ3NldCBzZXRzIHBhcmFtZXRlciBwYXJhbWV0ZXJzIHZhcmlhYmxlIHZhcmlhYmxlcyAnICtcbiAgICAgICAgICAnc2NhbGFyIHNjYWxhcnMgZXF1YXRpb24gZXF1YXRpb25zJyxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXConLCAnJCcpLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIEFTU0lHTk1FTlQsXG4gICAgICAgICAgREVTQ1RFWFQsXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIHRhYmxlIGVudmlyb25tZW50XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd0YWJsZScsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IC8vIHRhYmxlIGhlYWRlciByb3dcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICd0YWJsZScsXG4gICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbREVTQ1RFWFRdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXConLCAnJCcpLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAvLyBUYWJsZSBkb2VzIG5vdCBjb250YWluIERFU0NURVhUIG9yIEFTU0lHTk1FTlRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eW2Etel1bYS16MC05XyxcXC0rJyAoKSRdK1xcLnsyfS8sXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7IC8vIEZ1bmN0aW9uIHRpdGxlXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXlthLXowLTlfXSsvLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgICAgIFNZTUJPTFMsXG4gICAgICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIFNZTUJPTFMsXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICAnYm9vbCBicmVhayBjYWxsIGNhbGxleGUgY2hlY2tpbnRlcnJ1cHQgY2xlYXIgY2xlYXJnIGNsb3NlYWxsIGNscyBjb21sb2cgY29tcGlsZSAnICtcbiAgICAgICAgICAgICAgJ2NvbnRpbnVlIGNyZWF0ZSBkZWJ1ZyBkZWNsYXJlIGRlbGV0ZSBkaXNhYmxlIGRsaWJyYXJ5IGRsbGNhbGwgZG8gZG9zIGVkIGVkaXQgZWxzZSAnICtcbiAgICAgICAgICAgICAgJ2Vsc2VpZiBlbmFibGUgZW5kIGVuZGZvciBlbmRpZiBlbmRwIGVuZG8gZXJyb3Jsb2cgZXJyb3Jsb2dhdCBleHByIGV4dGVybmFsIGZuICcgK1xuICAgICAgICAgICAgICAnZm9yIGZvcm1hdCBnb3RvIGdvc3ViIGdyYXBoIGlmIGtleXdvcmQgbGV0IGxpYiBsaWJyYXJ5IGxpbmUgbG9hZCBsb2FkYXJyYXkgbG9hZGV4ZSAnICtcbiAgICAgICAgICAgICAgJ2xvYWRmIGxvYWRrIGxvYWRtIGxvYWRwIGxvYWRzIGxvYWR4IGxvY2FsIGxvY2F0ZSBsb29wbmV4dGluZGV4IGxwcmludCBscHdpZHRoIGxzaG93ICcgK1xuICAgICAgICAgICAgICAnbWF0cml4IG1zeW0gbmRwY2xleCBuZXcgb3BlbiBvdXRwdXQgb3V0d2lkdGggcGxvdCBwbG90c3ltIHBvcCBwcmNzbiBwcmludCAnICtcbiAgICAgICAgICAgICAgJ3ByaW50ZG9zIHByb2MgcHVzaCByZXRwIHJldHVybiBybmRjb24gcm5kbW9kIHJuZG11bHQgcm5kc2VlZCBydW4gc2F2ZSBzYXZlYWxsIHNjcmVlbiAnICtcbiAgICAgICAgICAgICAgJ3Njcm9sbCBzZXRhcnJheSBzaG93IHNwYXJzZSBzdG9wIHN0cmluZyBzdHJ1Y3Qgc3lzdGVtIHRyYWNlIHRyYXAgdGhyZWFkZm9yICcgK1xuICAgICAgICAgICAgICAndGhyZWFkZW5kZm9yIHRocmVhZGJlZ2luIHRocmVhZGpvaW4gdGhyZWFkc3RhdCB0aHJlYWRlbmQgdW50aWwgdXNlIHdoaWxlIHdpbnByaW50ICcgK1xuICAgICAgICAgICAgICAnbmUgZ2UgbGUgZ3QgbHQgYW5kIHhvciBvciBub3QgZXEgZXF2JyxcbiAgICBidWlsdF9pbjogJ2FicyBhY2YgYWNvbmNhdCBhZXllIGFtYXggYW1lYW4gQW1lcmljYW5CaW5vbUNhbGwgQW1lcmljYW5CaW5vbUNhbGxfR3JlZWtzIEFtZXJpY2FuQmlub21DYWxsX0ltcFZvbCAnICtcbiAgICAgICAgICAgICAgJ0FtZXJpY2FuQmlub21QdXQgQW1lcmljYW5CaW5vbVB1dF9HcmVla3MgQW1lcmljYW5CaW5vbVB1dF9JbXBWb2wgQW1lcmljYW5CU0NhbGwgQW1lcmljYW5CU0NhbGxfR3JlZWtzICcgK1xuICAgICAgICAgICAgICAnQW1lcmljYW5CU0NhbGxfSW1wVm9sIEFtZXJpY2FuQlNQdXQgQW1lcmljYW5CU1B1dF9HcmVla3MgQW1lcmljYW5CU1B1dF9JbXBWb2wgYW1pbiBhbXVsdCBhbm5vdGF0aW9uR2V0RGVmYXVsdHMgJyArXG4gICAgICAgICAgICAgICdhbm5vdGF0aW9uU2V0QmtkIGFubm90YXRpb25TZXRGb250IGFubm90YXRpb25TZXRMaW5lQ29sb3IgYW5ub3RhdGlvblNldExpbmVTdHlsZSBhbm5vdGF0aW9uU2V0TGluZVRoaWNrbmVzcyAnICtcbiAgICAgICAgICAgICAgJ2FubnVhbFRyYWRpbmdEYXlzIGFyY2NvcyBhcmNzaW4gYXJlc2hhcGUgYXJyYXlhbGxvYyBhcnJheWluZGV4IGFycmF5aW5pdCBhcnJheXRvbWF0IGFzY2lpbG9hZCBhc2NsYWJlbCBhc3RkICcgK1xuICAgICAgICAgICAgICAnYXN0ZHMgYXN1bSBhdGFuIGF0YW4yIGF0cmFuc3Bvc2UgYXhtYXJnaW4gYmFsYW5jZSBiYW5kIGJhbmRjaG9sIGJhbmRjaG9sc29sIGJhbmRsdHNvbCBiYW5kcnYgYmFuZHNvbHBkIGJhciAnICtcbiAgICAgICAgICAgICAgJ2Jhc2UxMCBiZWd3aW5kIGJlc3NlbGogYmVzc2VseSBiZXRhIGJveCBib3hjb3ggY2RmQmV0YSBjZGZCZXRhSW52IGNkZkJpbm9taWFsIGNkZkJpbm9taWFsSW52IGNkZkJ2biBjZGZCdm4yICcgK1xuICAgICAgICAgICAgICAnY2RmQnZuMmUgY2RmQ2F1Y2h5IGNkZkNhdWNoeUludiBjZGZDaGljIGNkZkNoaWkgY2RmQ2hpbmMgY2RmQ2hpbmNJbnYgY2RmRXhwIGNkZkV4cEludiBjZGZGYyBjZGZGbmMgY2RmRm5jSW52ICcgK1xuICAgICAgICAgICAgICAnY2RmR2FtIGNkZkdlblBhcmV0byBjZGZIeXBlckdlbyBjZGZMYXBsYWNlIGNkZkxhcGxhY2VJbnYgY2RmTG9naXN0aWMgY2RmTG9naXN0aWNJbnYgY2RmbUNvbnRyb2xDcmVhdGUgY2RmTXZuICcgK1xuICAgICAgICAgICAgICAnY2RmTXZuMmUgY2RmTXZuY2UgY2RmTXZuZSBjZGZNdnQyZSBjZGZNdnRjZSBjZGZNdnRlIGNkZk4gY2RmTjIgY2RmTmMgY2RmTmVnQmlub21pYWwgY2RmTmVnQmlub21pYWxJbnYgY2RmTmkgJyArXG4gICAgICAgICAgICAgICdjZGZQb2lzc29uIGNkZlBvaXNzb25JbnYgY2RmUmF5bGVpZ2ggY2RmUmF5bGVpZ2hJbnYgY2RmVGMgY2RmVGNpIGNkZlRuYyBjZGZUdm4gY2RmV2VpYnVsbCBjZGZXZWlidWxsSW52IGNkaXIgJyArXG4gICAgICAgICAgICAgICdjZWlsIENoYW5nZURpciBjaGRpciBjaGlCYXJTcXVhcmUgY2hvbCBjaG9sZG4gY2hvbHNvbCBjaG9sdXAgY2hycyBjbG9zZSBjb2RlIGNvbHMgY29sc2YgY29tYmluYXRlIGNvbWJpbmF0ZWQgJyArXG4gICAgICAgICAgICAgICdjb21wbGV4IGNvbiBjb25kIGNvbmogY29ucyBDb25TY29yZSBjb250b3VyIGNvbnYgY29udmVydHNhdG9zdHIgY29udmVydHN0cnRvc2EgY29ycm0gY29ycm1zIGNvcnJ2YyBjb3JyeCBjb3JyeHMgJyArXG4gICAgICAgICAgICAgICdjb3MgY29zaCBjb3VudHMgY291bnR3dHMgY3Jvc3NwcmQgY3JvdXQgY3JvdXRwIGNzcmNvbCBjc3JsaW4gY3N2UmVhZE0gY3N2UmVhZFNBIGN1bXByb2RjIGN1bXN1bWMgY3VydmUgY3Z0b3MgJyArXG4gICAgICAgICAgICAgICdkYXRhY3JlYXRlIGRhdGFjcmVhdGVjb21wbGV4IGRhdGFsaXN0IGRhdGFsb2FkIGRhdGFsb29wIGRhdGFvcGVuIGRhdGFzYXZlIGRhdGUgZGF0ZXN0ciBkYXRlc3RyaW5nIGRhdGVzdHJ5bWQgJyArXG4gICAgICAgICAgICAgICdkYXlpbnlyIGRheW9md2VlayBkYkFkZERhdGFiYXNlIGRiQ2xvc2UgZGJDb21taXQgZGJDcmVhdGVRdWVyeSBkYkV4ZWNRdWVyeSBkYkdldENvbm5lY3RPcHRpb25zIGRiR2V0RGF0YWJhc2VOYW1lICcgK1xuICAgICAgICAgICAgICAnZGJHZXREcml2ZXJOYW1lIGRiR2V0RHJpdmVycyBkYkdldEhvc3ROYW1lIGRiR2V0TGFzdEVycm9yTnVtIGRiR2V0TGFzdEVycm9yVGV4dCBkYkdldE51bWVyaWNhbFByZWNQb2xpY3kgJyArXG4gICAgICAgICAgICAgICdkYkdldFBhc3N3b3JkIGRiR2V0UG9ydCBkYkdldFRhYmxlSGVhZGVycyBkYkdldFRhYmxlcyBkYkdldFVzZXJOYW1lIGRiSGFzRmVhdHVyZSBkYklzRHJpdmVyQXZhaWxhYmxlIGRiSXNPcGVuICcgK1xuICAgICAgICAgICAgICAnZGJJc09wZW5FcnJvciBkYk9wZW4gZGJRdWVyeUJpbmRWYWx1ZSBkYlF1ZXJ5Q2xlYXIgZGJRdWVyeUNvbHMgZGJRdWVyeUV4ZWNQcmVwYXJlZCBkYlF1ZXJ5RmV0Y2hBbGxNIGRiUXVlcnlGZXRjaEFsbFNBICcgK1xuICAgICAgICAgICAgICAnZGJRdWVyeUZldGNoT25lTSBkYlF1ZXJ5RmV0Y2hPbmVTQSBkYlF1ZXJ5RmluaXNoIGRiUXVlcnlHZXRCb3VuZFZhbHVlIGRiUXVlcnlHZXRCb3VuZFZhbHVlcyBkYlF1ZXJ5R2V0RmllbGQgJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5R2V0TGFzdEVycm9yTnVtIGRiUXVlcnlHZXRMYXN0RXJyb3JUZXh0IGRiUXVlcnlHZXRMYXN0SW5zZXJ0SUQgZGJRdWVyeUdldExhc3RRdWVyeSBkYlF1ZXJ5R2V0UG9zaXRpb24gJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5SXNBY3RpdmUgZGJRdWVyeUlzRm9yd2FyZE9ubHkgZGJRdWVyeUlzTnVsbCBkYlF1ZXJ5SXNTZWxlY3QgZGJRdWVyeUlzVmFsaWQgZGJRdWVyeVByZXBhcmUgZGJRdWVyeVJvd3MgJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5U2VlayBkYlF1ZXJ5U2Vla0ZpcnN0IGRiUXVlcnlTZWVrTGFzdCBkYlF1ZXJ5U2Vla05leHQgZGJRdWVyeVNlZWtQcmV2aW91cyBkYlF1ZXJ5U2V0Rm9yd2FyZE9ubHkgJyArXG4gICAgICAgICAgICAgICdkYlJlbW92ZURhdGFiYXNlIGRiUm9sbGJhY2sgZGJTZXRDb25uZWN0T3B0aW9ucyBkYlNldERhdGFiYXNlTmFtZSBkYlNldEhvc3ROYW1lIGRiU2V0TnVtZXJpY2FsUHJlY1BvbGljeSAnICtcbiAgICAgICAgICAgICAgJ2RiU2V0UG9ydCBkYlNldFVzZXJOYW1lIGRiVHJhbnNhY3Rpb24gRGVsZXRlRmlsZSBkZWxpZiBkZWxyb3dzIGRlbnNlVG9TcCBkZW5zZVRvU3BSRSBkZW5Ub1plcm8gZGVzaWduIGRldCBkZXRsICcgK1xuICAgICAgICAgICAgICAnZGZmdCBkZmZ0aSBkaWFnIGRpYWdydiBkaWdhbW1hIGRvc3dpbiBET1NXaW5DbG9zZWFsbCBET1NXaW5PcGVuIGRvdGZlcSBkb3RmZXFtdCBkb3RmZ2UgZG90ZmdlbXQgZG90Zmd0IGRvdGZndG10ICcgK1xuICAgICAgICAgICAgICAnZG90ZmxlIGRvdGZsZW10IGRvdGZsdCBkb3RmbHRtdCBkb3RmbmUgZG90Zm5lbXQgZHJhdyBkcm9wIGRzQ3JlYXRlIGRzdGF0IGRzdGF0bXQgZHN0YXRtdENvbnRyb2xDcmVhdGUgZHRkYXRlIGR0ZGF5ICcgK1xuICAgICAgICAgICAgICAnZHR0aW1lIGR0dG9kdHYgZHR0b3N0ciBkdHRvdXRjIGR0dm5vcm1hbCBkdHZ0b2R0IGR0dnRvdXRjIGR1bW15IGR1bW15YnIgZHVtbXlkbiBlaWcgZWlnaCBlaWdodiBlaWd2IGVsYXBzZWRUcmFkaW5nRGF5cyAnICtcbiAgICAgICAgICAgICAgJ2VuZHdpbmQgZW52Z2V0IGVvZiBlcVNvbHZlIGVxU29sdmVtdCBlcVNvbHZlbXRDb250cm9sQ3JlYXRlIGVxU29sdmVtdE91dENyZWF0ZSBlcVNvbHZlc2V0IGVyZiBlcmZjIGVyZmNjcGx4IGVyZmNwbHggZXJyb3IgJyArXG4gICAgICAgICAgICAgICdldGRheXMgZXRoc2VjIGV0c3RyIEV1cm9wZWFuQmlub21DYWxsIEV1cm9wZWFuQmlub21DYWxsX0dyZWVrcyBFdXJvcGVhbkJpbm9tQ2FsbF9JbXBWb2wgRXVyb3BlYW5CaW5vbVB1dCAnICtcbiAgICAgICAgICAgICAgJ0V1cm9wZWFuQmlub21QdXRfR3JlZWtzIEV1cm9wZWFuQmlub21QdXRfSW1wVm9sIEV1cm9wZWFuQlNDYWxsIEV1cm9wZWFuQlNDYWxsX0dyZWVrcyBFdXJvcGVhbkJTQ2FsbF9JbXBWb2wgJyArXG4gICAgICAgICAgICAgICdFdXJvcGVhbkJTUHV0IEV1cm9wZWFuQlNQdXRfR3JlZWtzIEV1cm9wZWFuQlNQdXRfSW1wVm9sIGV4Y3RzbXBsIGV4ZWMgZXhlY2JnIGV4cCBleHRlcm4gZXllIGZjaGVja2VyciBmY2xlYXJlcnIgZmVxICcgK1xuICAgICAgICAgICAgICAnZmVxbXQgZmZsdXNoIGZmdCBmZnRpIGZmdG0gZmZ0bWkgZmZ0biBmZ2UgZmdlbXQgZmdldHMgZmdldHNhIGZnZXRzYXQgZmdldHN0IGZndCBmZ3RtdCBmaWxlaW5mbyBmaWxlc2EgZmxlIGZsZW10ICcgK1xuICAgICAgICAgICAgICAnZmxvb3IgZmx0IGZsdG10IGZtb2QgZm5lIGZuZW10IGZvbnRzIGZvcGVuIGZvcm1hdGN2IGZvcm1hdG52IGZwdXRzIGZwdXRzdCBmc2VlayBmc3RyZXJyb3IgZnRlbGwgZnRvY3YgZnRvcyBmdG9zdHJDICcgK1xuICAgICAgICAgICAgICAnZ2FtbWEgZ2FtbWFjcGx4IGdhbW1haWkgZ2F1c3NldCBnZGFBcHBlbmQgZ2RhQ3JlYXRlIGdkYURTdGF0IGdkYURTdGF0TWF0IGdkYUdldEluZGV4IGdkYUdldE5hbWUgZ2RhR2V0TmFtZXMgZ2RhR2V0T3JkZXJzICcgK1xuICAgICAgICAgICAgICAnZ2RhR2V0VHlwZSBnZGFHZXRUeXBlcyBnZGFHZXRWYXJJbmZvIGdkYUlzQ3BseCBnZGFMb2FkIGdkYVBhY2sgZ2RhUmVhZCBnZGFSZWFkQnlJbmRleCBnZGFSZWFkU29tZSBnZGFSZWFkU3BhcnNlICcgK1xuICAgICAgICAgICAgICAnZ2RhUmVhZFN0cnVjdCBnZGFSZXBvcnRWYXJJbmZvIGdkYVNhdmUgZ2RhVXBkYXRlIGdkYVVwZGF0ZUFuZFBhY2sgZ2RhVmFycyBnZGFXcml0ZSBnZGFXcml0ZTMyIGdkYVdyaXRlU29tZSBnZXRhcnJheSAnICtcbiAgICAgICAgICAgICAgJ2dldGRpbXMgZ2V0ZiBnZXRHQVVTU2hvbWUgZ2V0bWF0cml4IGdldG1hdHJpeDREIGdldG5hbWUgZ2V0bmFtZWYgZ2V0TmV4dFRyYWRpbmdEYXkgZ2V0TmV4dFdlZWtEYXkgZ2V0bnIgZ2V0b3JkZXJzICcgK1xuICAgICAgICAgICAgICAnZ2V0cGF0aCBnZXRQcmV2aW91c1RyYWRpbmdEYXkgZ2V0UHJldmlvdXNXZWVrRGF5IGdldFJvdyBnZXRzY2FsYXIzRCBnZXRzY2FsYXI0RCBnZXRUclJvdyBnZXR3aW5kIGdsbSBncmFkY3BseCBncmFkTVQgJyArXG4gICAgICAgICAgICAgICdncmFkTVRtIGdyYWRNVFQgZ3JhZE1UVG0gZ3JhZHAgZ3JhcGhwcnQgZ3JhcGhzZXQgaGFzaW1hZyBoZWFkZXIgaGVhZGVybXQgaGVzcyBoZXNzTVQgaGVzc01UZyBoZXNzTVRndyBoZXNzTVRtICcgK1xuICAgICAgICAgICAgICAnaGVzc01UbXcgaGVzc01UVCBoZXNzTVRUZyBoZXNzTVRUZ3cgaGVzc01UVG0gaGVzc01UdyBoZXNzcCBoaXN0IGhpc3RmIGhpc3RwIGhzZWMgaW1hZyBpbmRjdiBpbmRleGNhdCBpbmRpY2VzIGluZGljZXMyICcgK1xuICAgICAgICAgICAgICAnaW5kaWNlc2YgaW5kaWNlc2ZuIGluZG52IGluZHNhdiBpbnRlZ3JhdGUxZCBpbnRlZ3JhdGVDb250cm9sQ3JlYXRlIGludGdyYXQyIGludGdyYXQzIGludGhwMSBpbnRocDIgaW50aHAzIGludGhwNCAnICtcbiAgICAgICAgICAgICAgJ2ludGhwQ29udHJvbENyZWF0ZSBpbnRxdWFkMSBpbnRxdWFkMiBpbnRxdWFkMyBpbnRybGVhdiBpbnRybGVhdnNhIGludHJzZWN0IGludHNpbXAgaW52IGludnBkIGludnN3cCBpc2NwbHggaXNjcGx4ZiAnICtcbiAgICAgICAgICAgICAgJ2lzZGVuIGlzaW5mbmFubWlzcyBpc21pc3Mga2V5IGtleWF2IGtleXcgbGFnIGxhZzEgbGFnbiBsYXBFaWdoYiBsYXBFaWdoaSBsYXBFaWdodmIgbGFwRWlnaHZpIGxhcGdFaWcgbGFwZ0VpZ2ggbGFwZ0VpZ2h2ICcgK1xuICAgICAgICAgICAgICAnbGFwZ0VpZ3YgbGFwZ1NjaHVyIGxhcGdTdmRjc3QgbGFwZ1N2ZHMgbGFwZ1N2ZHN0IGxhcFN2ZGN1c3YgbGFwU3ZkcyBsYXBTdmR1c3YgbGRscCBsZGxzb2wgbGluU29sdmUgbGlzdHdpc2UgbG4gbG5jZGZidm4gJyArXG4gICAgICAgICAgICAgICdsbmNkZmJ2bjIgbG5jZGZtdm4gbG5jZGZuIGxuY2RmbjIgbG5jZGZuYyBsbmZhY3QgbG5nYW1tYWNwbHggbG5wZGZtdm4gbG5wZGZtdnQgbG5wZGZuIGxucGRmdCBsb2FkZCBsb2Fkc3RydWN0IGxvYWR3aW5kICcgK1xuICAgICAgICAgICAgICAnbG9lc3MgbG9lc3NtdCBsb2Vzc210Q29udHJvbENyZWF0ZSBsb2cgbG9nbG9nIGxvZ3ggbG9neSBsb3dlciBsb3dtYXQgbG93bWF0MSBsdHJpc29sIGx1IGx1c29sIG1hY2hFcHNpbG9uIG1ha2UgbWFrZXZhcnMgJyArXG4gICAgICAgICAgICAgICdtYWtld2luZCBtYXJnaW4gbWF0YWxsb2MgbWF0aW5pdCBtYXR0b2FycmF5IG1heGJ5dGVzIG1heGMgbWF4aW5kYyBtYXh2IG1heHZlYyBtYmVzc2VsZWkgbWJlc3NlbGVpMCBtYmVzc2VsZWkxIG1iZXNzZWxpICcgK1xuICAgICAgICAgICAgICAnbWJlc3NlbGkwIG1iZXNzZWxpMSBtZWFuYyBtZWRpYW4gbWVyZ2VieSBtZXJnZXZhciBtaW5jIG1pbmluZGMgbWludiBtaXNzIG1pc3NleCBtaXNzcnYgbW9tZW50IG1vbWVudGQgbW92aW5nYXZlICcgK1xuICAgICAgICAgICAgICAnbW92aW5nYXZlRXhwd2d0IG1vdmluZ2F2ZVdndCBuZXh0aW5kZXggbmV4dG4gbmV4dG5ldm4gbmV4dHdpbmQgbnRvcyBudWxsIG51bGwxIG51bUNvbWJpbmF0aW9ucyBvbHMgb2xzbXQgb2xzbXRDb250cm9sQ3JlYXRlICcgK1xuICAgICAgICAgICAgICAnb2xzcXIgb2xzcXIyIG9sc3FybXQgb25lcyBvcHRuIG9wdG5ldm4gb3J0aCBvdXR0eXAgcGFjZiBwYWNrZWRUb1NwIHBhY2tyIHBhcnNlIHBhdXNlIHBkZkNhdWNoeSBwZGZDaGkgcGRmRXhwIHBkZkdlblBhcmV0byAnICtcbiAgICAgICAgICAgICAgJ3BkZkh5cGVyR2VvIHBkZkxhcGxhY2UgcGRmTG9naXN0aWMgcGRmbiBwZGZQb2lzc29uIHBkZlJheWxlaWdoIHBkZldlaWJ1bGwgcGkgcGludiBwaW52bXQgcGxvdEFkZEFycm93IHBsb3RBZGRCYXIgcGxvdEFkZEJveCAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RBZGRIaXN0IHBsb3RBZGRIaXN0RiBwbG90QWRkSGlzdFAgcGxvdEFkZFBvbGFyIHBsb3RBZGRTY2F0dGVyIHBsb3RBZGRTaGFwZSBwbG90QWRkVGV4dGJveCBwbG90QWRkVFMgcGxvdEFkZFhZIHBsb3RBcmVhICcgK1xuICAgICAgICAgICAgICAncGxvdEJhciBwbG90Qm94IHBsb3RDbGVhckxheW91dCBwbG90Q29udG91ciBwbG90Q3VzdG9tTGF5b3V0IHBsb3RHZXREZWZhdWx0cyBwbG90SGlzdCBwbG90SGlzdEYgcGxvdEhpc3RQIHBsb3RMYXlvdXQgJyArXG4gICAgICAgICAgICAgICdwbG90TG9nTG9nIHBsb3RMb2dYIHBsb3RMb2dZIHBsb3RPcGVuV2luZG93IHBsb3RQb2xhciBwbG90U2F2ZSBwbG90U2NhdHRlciBwbG90U2V0QXhlc1BlbiBwbG90U2V0QmFyIHBsb3RTZXRCYXJGaWxsICcgK1xuICAgICAgICAgICAgICAncGxvdFNldEJhclN0YWNrZWQgcGxvdFNldEJrZENvbG9yIHBsb3RTZXRGaWxsIHBsb3RTZXRHcmlkIHBsb3RTZXRMZWdlbmQgcGxvdFNldExpbmVDb2xvciBwbG90U2V0TGluZVN0eWxlIHBsb3RTZXRMaW5lU3ltYm9sICcgK1xuICAgICAgICAgICAgICAncGxvdFNldExpbmVUaGlja25lc3MgcGxvdFNldE5ld1dpbmRvdyBwbG90U2V0VGl0bGUgcGxvdFNldFdoaWNoWUF4aXMgcGxvdFNldFhBeGlzU2hvdyBwbG90U2V0WExhYmVsIHBsb3RTZXRYUmFuZ2UgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0WFRpY0ludGVydmFsIHBsb3RTZXRYVGljTGFiZWwgcGxvdFNldFlBeGlzU2hvdyBwbG90U2V0WUxhYmVsIHBsb3RTZXRZUmFuZ2UgcGxvdFNldFpBeGlzU2hvdyBwbG90U2V0WkxhYmVsICcgK1xuICAgICAgICAgICAgICAncGxvdFN1cmZhY2UgcGxvdFRTIHBsb3RYWSBwb2xhciBwb2x5Y2hhciBwb2x5ZXZhbCBwb2x5Z2FtbWEgcG9seWludCBwb2x5bWFrZSBwb2x5bWF0IHBvbHltcm9vdCBwb2x5bXVsdCBwb2x5cm9vdCAnICtcbiAgICAgICAgICAgICAgJ3BxZ3dpbiBwcmV2aW91c2luZGV4IHByaW5jb21wIHByaW50Zm0gcHJpbnRmbXQgcHJvZGMgcHNpIHB1dGFycmF5IHB1dGYgcHV0dmFscyBwdkNyZWF0ZSBwdkdldEluZGV4IHB2R2V0UGFyTmFtZXMgJyArXG4gICAgICAgICAgICAgICdwdkdldFBhclZlY3RvciBwdkxlbmd0aCBwdkxpc3QgcHZQYWNrIHB2UGFja2kgcHZQYWNrbSBwdlBhY2ttaSBwdlBhY2tzIHB2UGFja3NpIHB2UGFja3NtIHB2UGFja3NtaSBwdlB1dFBhclZlY3RvciAnICtcbiAgICAgICAgICAgICAgJ3B2VGVzdCBwdlVucGFjayBRTmV3dG9uIFFOZXd0b25tdCBRTmV3dG9ubXRDb250cm9sQ3JlYXRlIFFOZXd0b25tdE91dENyZWF0ZSBRTmV3dG9uU2V0IFFQcm9nIFFQcm9nbXQgUVByb2dtdEluQ3JlYXRlICcgK1xuICAgICAgICAgICAgICAncXFyIHFxcmUgcXFyZXAgcXIgcXJlIHFyZXAgcXJzb2wgcXJ0c29sIHF0eXIgcXR5cmUgcXR5cmVwIHF1YW50aWxlIHF1YW50aWxlZCBxeXIgcXlyZSBxeXJlcCBxeiByYW5rIHJhbmtpbmR4IHJlYWRyICcgK1xuICAgICAgICAgICAgICAncmVhbCByZWNsYXNzaWZ5IHJlY2xhc3NpZnlDdXRzIHJlY29kZSByZWNzZXJhciByZWNzZXJjcCByZWNzZXJyYyByZXJ1biByZXNjYWxlIHJlc2hhcGUgcmV0cyByZXYgcmZmdCByZmZ0aSByZmZ0aXAgcmZmdG4gJyArXG4gICAgICAgICAgICAgICdyZmZ0bnAgcmZmdHAgcm5kQmVybm91bGxpIHJuZEJldGEgcm5kQmlub21pYWwgcm5kQ2F1Y2h5IHJuZENoaVNxdWFyZSBybmRDb24gcm5kQ3JlYXRlU3RhdGUgcm5kRXhwIHJuZEdhbW1hIHJuZEdlbyBybmRHdW1iZWwgJyArXG4gICAgICAgICAgICAgICdybmRIeXBlckdlbyBybmRpIHJuZEtNYmV0YSBybmRLTWdhbSBybmRLTWkgcm5kS01uIHJuZEtNbmIgcm5kS01wIHJuZEtNdSBybmRLTXZtIHJuZExhcGxhY2Ugcm5kTENiZXRhIHJuZExDZ2FtIHJuZExDaSBybmRMQ24gJyArXG4gICAgICAgICAgICAgICdybmRMQ25iIHJuZExDcCBybmRMQ3Ugcm5kTEN2bSBybmRMb2dOb3JtIHJuZE1UdSBybmRNVm4gcm5kTVZ0IHJuZG4gcm5kbmIgcm5kTmVnQmlub21pYWwgcm5kcCBybmRQb2lzc29uIHJuZFJheWxlaWdoICcgK1xuICAgICAgICAgICAgICAncm5kU3RhdGVTa2lwIHJuZHUgcm5kdm0gcm5kV2VpYnVsbCBybmRXaXNoYXJ0IHJvdGF0ZXIgcm91bmQgcm93cyByb3dzZiBycmVmIHNhbXBsZURhdGEgc2F0b3N0ckMgc2F2ZWQgc2F2ZVN0cnVjdCBzYXZld2luZCAnICtcbiAgICAgICAgICAgICAgJ3NjYWxlIHNjYWxlM2Qgc2NhbGVyciBzY2FsaW5mbmFubWlzcyBzY2FsbWlzcyBzY2h0b2Mgc2NodXIgc2VhcmNoc291cmNlcGF0aCBzZWVrciBzZWxlY3Qgc2VsaWYgc2VxYSBzZXFtIHNldGRpZiBzZXRkaWZzYSAnICtcbiAgICAgICAgICAgICAgJ3NldHZhcnMgc2V0dndybW9kZSBzZXR3aW5kIHNoZWxsIHNoaWZ0ciBzaW4gc2luZ2xlaW5kZXggc2luaCBzbGVlcCBzb2xwZCBzb3J0YyBzb3J0Y2Mgc29ydGQgc29ydGhjIHNvcnRoY2Mgc29ydGluZCAnICtcbiAgICAgICAgICAgICAgJ3NvcnRpbmRjIHNvcnRtYyBzb3J0ciBzb3J0cmMgc3BCaWNvbmpHcmFkU29sIHNwQ2hvbCBzcENvbmpHcmFkU29sIHNwQ3JlYXRlIHNwRGVuc2VTdWJtYXQgc3BEaWFnUnZNYXQgc3BFaWd2IHNwRXllIHNwTERMICcgK1xuICAgICAgICAgICAgICAnc3BsaW5lIHNwTFUgc3BOdW1OWkUgc3BPbmVzIHNwcmVhZFNoZWV0UmVhZE0gc3ByZWFkU2hlZXRSZWFkU0Egc3ByZWFkU2hlZXRXcml0ZSBzcFNjYWxlIHNwU3VibWF0IHNwVG9EZW5zZSBzcFRyVERlbnNlICcgK1xuICAgICAgICAgICAgICAnc3BUU2NhbGFyIHNwWmVyb3Mgc3FwU29sdmUgc3FwU29sdmVNVCBzcXBTb2x2ZU1UQ29udHJvbENyZWF0ZSBzcXBTb2x2ZU1UbGFncmFuZ2VDcmVhdGUgc3FwU29sdmVNVG91dENyZWF0ZSBzcXBTb2x2ZVNldCAnICtcbiAgICAgICAgICAgICAgJ3NxcnQgc3RhdGVtZW50cyBzdGRjIHN0ZHNjIHN0b2N2IHN0b2Ygc3RyY29tYmluZSBzdHJpbmR4IHN0cmxlbiBzdHJwdXQgc3RycmluZHggc3Ryc2VjdCBzdHJzcGxpdCBzdHJzcGxpdFBhZCBzdHJ0b2R0ICcgK1xuICAgICAgICAgICAgICAnc3RydG9mIHN0cnRvZmNwbHggc3RydHJpbWwgc3RydHJpbXIgc3RydHJ1bmMgc3RydHJ1bmNsIHN0cnRydW5jcGFkIHN0cnRydW5jciBzdWJtYXQgc3Vic2NhdCBzdWJzdHV0ZSBzdWJ2ZWMgc3VtYyBzdW1yICcgK1xuICAgICAgICAgICAgICAnc3VyZmFjZSBzdmQgc3ZkMSBzdmQyIHN2ZGN1c3Ygc3ZkcyBzdmR1c3Ygc3lzc3RhdGUgdGFiIHRhbiB0YW5oIHRlbXBuYW1lICcgK1xuICAgICAgICAgICAgICAndGltZSB0aW1lZHQgdGltZXN0ciB0aW1ldXRjIHRpdGxlIHRrZjJlcHMgdGtmMnBzIHRvY2FydCB0b2RheWR0IHRvZXBsaXR6IHRva2VuIHRvcG9sYXIgdHJhcGNoayAnICtcbiAgICAgICAgICAgICAgJ3RyaWdhbW1hIHRyaW1yIHRydW5jIHR5cGUgdHlwZWN2IHR5cGVmIHVuaW9uIHVuaW9uc2EgdW5pcWluZHggdW5pcWluZHhzYSB1bmlxdWUgdW5pcXVlc2EgdXBtYXQgdXBtYXQxIHVwcGVyIHV0Y3RvZHQgJyArXG4gICAgICAgICAgICAgICd1dGN0b2R0diB1dHJpc29sIHZhbHMgdmFyQ292TVMgdmFyQ292WFMgdmFyZ2V0IHZhcmdldGwgdmFybWFsbCB2YXJtYXJlcyB2YXJwdXQgdmFycHV0bCB2YXJ0eXBlZiB2Y20gdmNtcyB2Y3ggdmN4cyAnICtcbiAgICAgICAgICAgICAgJ3ZlYyB2ZWNoIHZlY3IgdmVjdG9yIHZnZXQgdmlldyB2aWV3eHl6IHZsaXN0IHZuYW1lY3Ygdm9sdW1lIHZwdXQgdnJlYWQgdnR5cGVjdiB3YWl0IHdhaXRjIHdhbGtpbmRleCB3aGVyZSB3aW5kb3cgJyArXG4gICAgICAgICAgICAgICd3cml0ZXIgeGxhYmVsIHhsc0dldFNoZWV0Q291bnQgeGxzR2V0U2hlZXRTaXplIHhsc0dldFNoZWV0VHlwZXMgeGxzTWFrZVJhbmdlIHhsc1JlYWRNIHhsc1JlYWRTQSB4bHNXcml0ZSB4bHNXcml0ZU0gJyArXG4gICAgICAgICAgICAgICd4bHNXcml0ZVNBIHhwbmQgeHRpY3MgeHkgeHl6IHlsYWJlbCB5dGljcyB6ZXJvcyB6ZXRhIHpsYWJlbCB6dGljcyBjZGZFbXBpcmljYWwgZG90IGg1Y3JlYXRlIGg1b3BlbiBoNXJlYWQgaDVyZWFkQXR0cmlidXRlICcgK1xuICAgICAgICAgICAgICAnaDV3cml0ZSBoNXdyaXRlQXR0cmlidXRlIGxkbCBwbG90QWRkRXJyb3JCYXIgcGxvdEFkZFN1cmZhY2UgcGxvdENERkVtcGlyaWNhbCBwbG90U2V0Q29sb3JtYXAgcGxvdFNldENvbnRvdXJMYWJlbHMgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0TGVnZW5kRm9udCBwbG90U2V0VGV4dEludGVycHJldGVyIHBsb3RTZXRYVGljQ291bnQgcGxvdFNldFlUaWNDb3VudCBwbG90U2V0WkxldmVscyBwb3dlcm0gc3Ryam9pbiBzeWx2ZXN0ZXIgJyArXG4gICAgICAgICAgICAgICdzdHJ0cmltJyxcbiAgICBsaXRlcmFsOiAnREJfQUZURVJfTEFTVF9ST1cgREJfQUxMX1RBQkxFUyBEQl9CQVRDSF9PUEVSQVRJT05TIERCX0JFRk9SRV9GSVJTVF9ST1cgREJfQkxPQiBEQl9FVkVOVF9OT1RJRklDQVRJT05TICcgK1xuICAgICAgICAgICAgICdEQl9GSU5JU0hfUVVFUlkgREJfSElHSF9QUkVDSVNJT04gREJfTEFTVF9JTlNFUlRfSUQgREJfTE9XX1BSRUNJU0lPTl9ET1VCTEUgREJfTE9XX1BSRUNJU0lPTl9JTlQzMiAnICtcbiAgICAgICAgICAgICAnREJfTE9XX1BSRUNJU0lPTl9JTlQ2NCBEQl9MT1dfUFJFQ0lTSU9OX05VTUJFUlMgREJfTVVMVElQTEVfUkVTVUxUX1NFVFMgREJfTkFNRURfUExBQ0VIT0xERVJTICcgK1xuICAgICAgICAgICAgICdEQl9QT1NJVElPTkFMX1BMQUNFSE9MREVSUyBEQl9QUkVQQVJFRF9RVUVSSUVTIERCX1FVRVJZX1NJWkUgREJfU0lNUExFX0xPQ0tJTkcgREJfU1lTVEVNX1RBQkxFUyBEQl9UQUJMRVMgJyArXG4gICAgICAgICAgICAgJ0RCX1RSQU5TQUNUSU9OUyBEQl9VTklDT0RFIERCX1ZJRVdTIF9fU1RESU4gX19TVERPVVQgX19TVERFUlIgX19GSUxFX0RJUidcbiAgfTtcblxuXG4gIHZhciBBVF9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJ0AnLCAnQCcpO1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPVxuICB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2RlZmluZSBkZWZpbmVjc3wxMCB1bmRlZiBpZmRlZiBpZm5kZWYgaWZsaWdodCBpZmRsbGNhbGwgaWZtYWMgaWZvczJ3aW4gaWZ1bml4IGVsc2UgZW5kaWYgbGluZXNvbiBsaW5lc29mZiBzcmNmaWxlIHNyY2xpbmUnfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmNsdWRlJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpbmNsdWRlJ30sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgIF1cbiAgfTtcblxuICB2YXIgU1RSVUNUX1RZUEUgPVxuICB7XG4gICAgYmVnaW46IC9cXGJzdHJ1Y3RcXHMrLyxcbiAgICBlbmQ6IC9cXHMvLFxuICAgIGtleXdvcmRzOiBcInN0cnVjdFwiLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJ0eXBlXCIsXG4gICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICAvLyBvbmx5IGZvciBkZWZpbml0aW9uc1xuICB2YXIgUEFSU0VfUEFSQU1TID0gW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7IC8vIGRvdHNcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgICBiZWdpbjogL1xcLlxcLlxcLi8sXG4gICAgICAgIH0sXG4gICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgICAgICBTVFJVQ1RfVFlQRSxcbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgdmFyIEZVTkNUSU9OX0RFRiA9XG4gIHtcbiAgICBjbGFzc05hbWU6IFwidGl0bGVcIixcbiAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcblxuICB2YXIgREVGSU5JVElPTiA9IGZ1bmN0aW9uIChiZWdpbktleXdvcmRzLCBlbmQsIGluaGVyaXRzKSB7XG4gICAgdmFyIG1vZGUgPSBobGpzLmluaGVyaXQoXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJmdW5jdGlvblwiLFxuICAgICAgICBiZWdpbktleXdvcmRzOiBiZWdpbktleXdvcmRzLFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtdLmNvbmNhdChQQVJTRV9QQVJBTVMpLFxuICAgICAgfSxcbiAgICAgIGluaGVyaXRzIHx8IHt9XG4gICAgKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goRlVOQ1RJT05fREVGKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5DX05VTUJFUl9NT0RFKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSk7XG4gICAgbW9kZS5jb250YWlucy5wdXNoKEFUX0NPTU1FTlRfTU9ERSk7XG4gICAgcmV0dXJuIG1vZGU7XG4gIH07XG5cbiAgdmFyIEJVSUxUX0lOX1JFRiA9XG4gIHsgLy8gdGhlc2UgYXJlIGV4cGxpY2l0bHkgbmFtZWQgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbHNcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICdcXFxcYignICsgS0VZV09SRFMuYnVpbHRfaW4uc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKVxcXFxiJyxcbiAgfTtcblxuICB2YXIgU1RSSU5HX1JFRiA9XG4gIHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcblxuICB2YXIgRlVOQ1RJT05fUkVGID1cbiAge1xuICAgIC8vY2xhc3NOYW1lOiBcImZuX3JlZlwiLFxuICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogS0VZV09SRFMua2V5d29yZCxcbiAgICAgIH0sXG4gICAgICBCVUlMVF9JTl9SRUYsXG4gICAgICB7IC8vIGFtYmlndW91c2x5IG5hbWVkIGZ1bmN0aW9uIGNhbGxzIGdldCBhIHJlbGV2YW5jZSBvZiAwXG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9SRUZfUEFSQU1TID1cbiAge1xuICAgIC8vY2xhc3NOYW1lOiBcImZuX3JlZl9wYXJhbXNcIixcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IHsgYnVpbHRfaW46IEtFWVdPUkRTLmJ1aWx0X2luLCBsaXRlcmFsOiBLRVlXT1JEUy5saXRlcmFsIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBBVF9DT01NRU5UX01PREUsXG4gICAgICBCVUlMVF9JTl9SRUYsXG4gICAgICBGVU5DVElPTl9SRUYsXG4gICAgICBTVFJJTkdfUkVGLFxuICAgICAgJ3NlbGYnLFxuICAgIF0sXG4gIH07XG5cbiAgRlVOQ1RJT05fUkVGLmNvbnRhaW5zLnB1c2goRlVOQ1RJT05fUkVGX1BBUkFNUyk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2dzcyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsIC8vIGxhbmd1YWdlIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyhcXHtbJSNdfFslI11cXH18IDwtICkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgICAgU1RSSU5HX1JFRixcbiAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFxiZXh0ZXJuYWwgKG1hdHJpeHxzdHJpbmd8YXJyYXl8c3BhcnNlIG1hdHJpeHxzdHJ1Y3R8cHJvY3xrZXl3b3JkfGZuKS8sXG4gICAgICB9LFxuICAgICAgREVGSU5JVElPTigncHJvYyBrZXl3b3JkJywgJzsnKSxcbiAgICAgIERFRklOSVRJT04oJ2ZuJywgJz0nKSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZvciB0aHJlYWRmb3InLFxuICAgICAgICBlbmQ6IC87LyxcbiAgICAgICAgLy9lbmQ6IC9cXCgvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBBVF9DT01NRU5UX01PREUsXG4gICAgICAgICAgRlVOQ1RJT05fUkVGX1BBUkFNUyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7IC8vIGN1c3RvbSBtZXRob2QgZ3VhcmRcbiAgICAgICAgLy8gZXhjbHVkZXMgbWV0aG9kIG5hbWVzIGZyb20ga2V5d29yZCBwcm9jZXNzaW5nXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFwuJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSwgfSxcbiAgICAgICAgICB7IGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqPScsIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9SRUYsXG4gICAgICBTVFJVQ1RfVFlQRSxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBHQ09ERV9JREVOVF9SRSA9ICdbQS1aX11bQS1aMC05Xy5dKic7XG4gICAgdmFyIEdDT0RFX0NMT1NFX1JFID0gJ1xcXFwlJztcbiAgICB2YXIgR0NPREVfS0VZV09SRFMgPVxuICAgICAgJ0lGIERPIFdISUxFIEVORFdISUxFIENBTEwgRU5ESUYgU1VCIEVORFNVQiBHT1RPIFJFUEVBVCBFTkRSRVBFQVQgJyArXG4gICAgICAnRVEgTFQgR1QgTkUgR0UgTEUgT1IgWE9SJztcbiAgICB2YXIgR0NPREVfU1RBUlQgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyhbT10pKFswLTldKyknXG4gICAgfTtcbiAgICB2YXIgR0NPREVfQ09ERSA9IFtcbiAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLkNPTU1FTlQoL1xcKC8sIC9cXCkvKSxcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSwge2JlZ2luOiAnKFstK10/KFswLTldKlxcXFwuP1swLTldK1xcXFwuPykpfCcgKyBobGpzLkNfTlVNQkVSX1JFfSksXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKFtHXSkoWzAtOV0rXFxcXC4/WzAtOV0/KSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICAgICAgICBiZWdpbjogJyhbTV0pKFswLTldK1xcXFwuP1swLTldPyknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46ICcoVkN8VlN8IyknLFxuICAgICAgICAgICAgZW5kOiAnKFxcXFxkKyknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46ICcoVlpPRlh8VlpPRll8VlpPRlopJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgICAgICBiZWdpbjogJyhBVEFOfEFCU3xBQ09TfEFTSU58U0lOfENPU3xFWFB8RklYfEZVUHxST1VORHxMTnxUQU4pKFxcXFxbKScsXG4gICAgICAgICAgICBlbmQ6ICcoWy0rXT8oWzAtOV0qXFxcXC4/WzAtOV0rXFxcXC4/KSkoXFxcXF0pJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnTicsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcVydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxpYXNlczogWyduYyddLFxuICAgICAgICAvLyBTb21lIGltcGxlbWVudGF0aW9ucyAoQ05DIGNvbnRyb2xzKSBvZiBHLWNvZGUgYXJlIGludGVyb3BlcmFibGUgd2l0aCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzIHNlYW1sZXNzbHkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIG1vc3QgcHJlZmVyIGFsbCB1cHBlcmNhc2UgYW5kIHVwcGVyY2FzZSBpcyBjdXN0b21hcnkuXG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGxleGVtZXM6IEdDT0RFX0lERU5UX1JFLFxuICAgICAgICBrZXl3b3JkczogR0NPREVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgICAgICAgICAgYmVnaW46IEdDT0RFX0NMT1NFX1JFXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgR0NPREVfU1RBUlRcbiAgICAgICAgXS5jb25jYXQoR0NPREVfQ09ERSlcbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydmZWF0dXJlJ10sXG4gICAga2V5d29yZHM6ICdGZWF0dXJlIEJhY2tncm91bmQgQWJpbGl0eSBCdXNpbmVzc1xcIE5lZWQgU2NlbmFyaW8gU2NlbmFyaW9zIFNjZW5hcmlvXFwgT3V0bGluZSBTY2VuYXJpb1xcIFRlbXBsYXRlIEV4YW1wbGVzIEdpdmVuIEFuZCBUaGVuIEJ1dCBXaGVuJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcXFwqJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW15AXFxcXHNdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLCBlbmQ6ICdcXFxcfFxcXFx3KiQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1tefF0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJzwnLCBlbmQ6ICc+J1xuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBTdGF0ZW1lbnRzXG4gICAgICAgICdicmVhayBjb250aW51ZSBkaXNjYXJkIGRvIGVsc2UgZm9yIGlmIHJldHVybiB3aGlsZSBzd2l0Y2ggY2FzZSBkZWZhdWx0ICcgK1xuICAgICAgICAvLyBRdWFsaWZpZXJzXG4gICAgICAgICdhdHRyaWJ1dGUgYmluZGluZyBidWZmZXIgY2N3IGNlbnRyb2lkIGNlbnRyb2lkIHZhcnlpbmcgY29oZXJlbnQgY29sdW1uX21ham9yIGNvbnN0IGN3ICcgK1xuICAgICAgICAnZGVwdGhfYW55IGRlcHRoX2dyZWF0ZXIgZGVwdGhfbGVzcyBkZXB0aF91bmNoYW5nZWQgZWFybHlfZnJhZ21lbnRfdGVzdHMgZXF1YWxfc3BhY2luZyAnICtcbiAgICAgICAgJ2ZsYXQgZnJhY3Rpb25hbF9ldmVuX3NwYWNpbmcgZnJhY3Rpb25hbF9vZGRfc3BhY2luZyBoaWdocCBpbiBpbmRleCBpbm91dCBpbnZhcmlhbnQgJyArXG4gICAgICAgICdpbnZvY2F0aW9ucyBpc29saW5lcyBsYXlvdXQgbGluZV9zdHJpcCBsaW5lcyBsaW5lc19hZGphY2VuY3kgbG9jYWxfc2l6ZV94IGxvY2FsX3NpemVfeSAnICtcbiAgICAgICAgJ2xvY2FsX3NpemVfeiBsb2NhdGlvbiBsb3dwIG1heF92ZXJ0aWNlcyBtZWRpdW1wIG5vcGVyc3BlY3RpdmUgb2Zmc2V0IG9yaWdpbl91cHBlcl9sZWZ0ICcgK1xuICAgICAgICAnb3V0IHBhY2tlZCBwYXRjaCBwaXhlbF9jZW50ZXJfaW50ZWdlciBwb2ludF9tb2RlIHBvaW50cyBwcmVjaXNlIHByZWNpc2lvbiBxdWFkcyByMTFmX2cxMWZfYjEwZiAnK1xuICAgICAgICAncjE2IHIxNl9zbm9ybSByMTZmIHIxNmkgcjE2dWkgcjMyZiByMzJpIHIzMnVpIHI4IHI4X3Nub3JtIHI4aSByOHVpIHJlYWRvbmx5IHJlc3RyaWN0ICcgK1xuICAgICAgICAncmcxNiByZzE2X3Nub3JtIHJnMTZmIHJnMTZpIHJnMTZ1aSByZzMyZiByZzMyaSByZzMydWkgcmc4IHJnOF9zbm9ybSByZzhpIHJnOHVpIHJnYjEwX2EyICcgK1xuICAgICAgICAncmdiMTBfYTJ1aSByZ2JhMTYgcmdiYTE2X3Nub3JtIHJnYmExNmYgcmdiYTE2aSByZ2JhMTZ1aSByZ2JhMzJmIHJnYmEzMmkgcmdiYTMydWkgcmdiYTggJyArXG4gICAgICAgICdyZ2JhOF9zbm9ybSByZ2JhOGkgcmdiYTh1aSByb3dfbWFqb3Igc2FtcGxlIHNoYXJlZCBzbW9vdGggc3RkMTQwIHN0ZDQzMCBzdHJlYW0gdHJpYW5nbGVfc3RyaXAgJyArXG4gICAgICAgICd0cmlhbmdsZXMgdHJpYW5nbGVzX2FkamFjZW5jeSB1bmlmb3JtIHZhcnlpbmcgdmVydGljZXMgdm9sYXRpbGUgd3JpdGVvbmx5JyxcbiAgICAgIHR5cGU6XG4gICAgICAgICdhdG9taWNfdWludCBib29sIGJ2ZWMyIGJ2ZWMzIGJ2ZWM0IGRtYXQyIGRtYXQyeDIgZG1hdDJ4MyBkbWF0Mng0IGRtYXQzIGRtYXQzeDIgZG1hdDN4MyAnICtcbiAgICAgICAgJ2RtYXQzeDQgZG1hdDQgZG1hdDR4MiBkbWF0NHgzIGRtYXQ0eDQgZG91YmxlIGR2ZWMyIGR2ZWMzIGR2ZWM0IGZsb2F0IGlpbWFnZTFEIGlpbWFnZTFEQXJyYXkgJyArXG4gICAgICAgICdpaW1hZ2UyRCBpaW1hZ2UyREFycmF5IGlpbWFnZTJETVMgaWltYWdlMkRNU0FycmF5IGlpbWFnZTJEUmVjdCBpaW1hZ2UzRCBpaW1hZ2VCdWZmZXInICtcbiAgICAgICAgJ2lpbWFnZUN1YmUgaWltYWdlQ3ViZUFycmF5IGltYWdlMUQgaW1hZ2UxREFycmF5IGltYWdlMkQgaW1hZ2UyREFycmF5IGltYWdlMkRNUyBpbWFnZTJETVNBcnJheSAnICtcbiAgICAgICAgJ2ltYWdlMkRSZWN0IGltYWdlM0QgaW1hZ2VCdWZmZXIgaW1hZ2VDdWJlIGltYWdlQ3ViZUFycmF5IGludCBpc2FtcGxlcjFEIGlzYW1wbGVyMURBcnJheSAnICtcbiAgICAgICAgJ2lzYW1wbGVyMkQgaXNhbXBsZXIyREFycmF5IGlzYW1wbGVyMkRNUyBpc2FtcGxlcjJETVNBcnJheSBpc2FtcGxlcjJEUmVjdCBpc2FtcGxlcjNEICcgK1xuICAgICAgICAnaXNhbXBsZXJCdWZmZXIgaXNhbXBsZXJDdWJlIGlzYW1wbGVyQ3ViZUFycmF5IGl2ZWMyIGl2ZWMzIGl2ZWM0IG1hdDIgbWF0MngyIG1hdDJ4MyAnICtcbiAgICAgICAgJ21hdDJ4NCBtYXQzIG1hdDN4MiBtYXQzeDMgbWF0M3g0IG1hdDQgbWF0NHgyIG1hdDR4MyBtYXQ0eDQgc2FtcGxlcjFEIHNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAnc2FtcGxlcjFEQXJyYXlTaGFkb3cgc2FtcGxlcjFEU2hhZG93IHNhbXBsZXIyRCBzYW1wbGVyMkRBcnJheSBzYW1wbGVyMkRBcnJheVNoYWRvdyAnICtcbiAgICAgICAgJ3NhbXBsZXIyRE1TIHNhbXBsZXIyRE1TQXJyYXkgc2FtcGxlcjJEUmVjdCBzYW1wbGVyMkRSZWN0U2hhZG93IHNhbXBsZXIyRFNoYWRvdyBzYW1wbGVyM0QgJyArXG4gICAgICAgICdzYW1wbGVyQnVmZmVyIHNhbXBsZXJDdWJlIHNhbXBsZXJDdWJlQXJyYXkgc2FtcGxlckN1YmVBcnJheVNoYWRvdyBzYW1wbGVyQ3ViZVNoYWRvdyAnICtcbiAgICAgICAgJ2ltYWdlMUQgdWltYWdlMURBcnJheSB1aW1hZ2UyRCB1aW1hZ2UyREFycmF5IHVpbWFnZTJETVMgdWltYWdlMkRNU0FycmF5IHVpbWFnZTJEUmVjdCAnICtcbiAgICAgICAgJ3VpbWFnZTNEIHVpbWFnZUJ1ZmZlciB1aW1hZ2VDdWJlIHVpbWFnZUN1YmVBcnJheSB1aW50IHVzYW1wbGVyMUQgdXNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAndXNhbXBsZXIyRCB1c2FtcGxlcjJEQXJyYXkgdXNhbXBsZXIyRE1TIHVzYW1wbGVyMkRNU0FycmF5IHVzYW1wbGVyMkRSZWN0IHVzYW1wbGVyM0QgJyArXG4gICAgICAgICdzYW1wbGVyQnVmZmVyIHVzYW1wbGVyQ3ViZSB1c2FtcGxlckN1YmVBcnJheSB1dmVjMiB1dmVjMyB1dmVjNCB2ZWMyIHZlYzMgdmVjNCB2b2lkJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBDb25zdGFudHNcbiAgICAgICAgJ2dsX01heEF0b21pY0NvdW50ZXJCaW5kaW5ncyBnbF9NYXhBdG9taWNDb3VudGVyQnVmZmVyU2l6ZSBnbF9NYXhDbGlwRGlzdGFuY2VzIGdsX01heENsaXBQbGFuZXMgJyArXG4gICAgICAgICdnbF9NYXhDb21iaW5lZEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heENvbWJpbmVkQXRvbWljQ291bnRlcnMgZ2xfTWF4Q29tYmluZWRJbWFnZVVuaWZvcm1zICcgK1xuICAgICAgICAnZ2xfTWF4Q29tYmluZWRJbWFnZVVuaXRzQW5kRnJhZ21lbnRPdXRwdXRzIGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgZ2xfTWF4Q29tcHV0ZUF0b21pY0NvdW50ZXJCdWZmZXJzICcgK1xuICAgICAgICAnZ2xfTWF4Q29tcHV0ZUF0b21pY0NvdW50ZXJzIGdsX01heENvbXB1dGVJbWFnZVVuaWZvcm1zIGdsX01heENvbXB1dGVUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heENvbXB1dGVVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhDb21wdXRlV29ya0dyb3VwQ291bnQgZ2xfTWF4Q29tcHV0ZVdvcmtHcm91cFNpemUgJyArXG4gICAgICAgICdnbF9NYXhEcmF3QnVmZmVycyBnbF9NYXhGcmFnbWVudEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heEZyYWdtZW50QXRvbWljQ291bnRlcnMgJyArXG4gICAgICAgICdnbF9NYXhGcmFnbWVudEltYWdlVW5pZm9ybXMgZ2xfTWF4RnJhZ21lbnRJbnB1dENvbXBvbmVudHMgZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgJyArXG4gICAgICAgICdnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgZ2xfTWF4R2VvbWV0cnlBdG9taWNDb3VudGVyQnVmZmVycyAnICtcbiAgICAgICAgJ2dsX01heEdlb21ldHJ5QXRvbWljQ291bnRlcnMgZ2xfTWF4R2VvbWV0cnlJbWFnZVVuaWZvcm1zIGdsX01heEdlb21ldHJ5SW5wdXRDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4R2VvbWV0cnlPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5T3V0cHV0VmVydGljZXMgZ2xfTWF4R2VvbWV0cnlUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heEdlb21ldHJ5VG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlWYXJ5aW5nQ29tcG9uZW50cyAnICtcbiAgICAgICAgJ2dsX01heEltYWdlU2FtcGxlcyBnbF9NYXhJbWFnZVVuaXRzIGdsX01heExpZ2h0cyBnbF9NYXhQYXRjaFZlcnRpY2VzIGdsX01heFByb2dyYW1UZXhlbE9mZnNldCAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sQXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VGVzc0NvbnRyb2xBdG9taWNDb3VudGVycyBnbF9NYXhUZXNzQ29udHJvbEltYWdlVW5pZm9ybXMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzQ29udHJvbElucHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzQ29udHJvbE91dHB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0NvbnRyb2xUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sVG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heFRlc3NDb250cm9sVW5pZm9ybUNvbXBvbmVudHMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvbkF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heFRlc3NFdmFsdWF0aW9uQXRvbWljQ291bnRlcnMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvbkltYWdlVW5pZm9ybXMgZ2xfTWF4VGVzc0V2YWx1YXRpb25JbnB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0V2YWx1YXRpb25PdXRwdXRDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0V2YWx1YXRpb25UZXh0dXJlSW1hZ2VVbml0cyBnbF9NYXhUZXNzRXZhbHVhdGlvblVuaWZvcm1Db21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0dlbkxldmVsIGdsX01heFRlc3NQYXRjaENvbXBvbmVudHMgZ2xfTWF4VGV4dHVyZUNvb3JkcyBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heFRleHR1cmVVbml0cyBnbF9NYXhWYXJ5aW5nQ29tcG9uZW50cyBnbF9NYXhWYXJ5aW5nRmxvYXRzIGdsX01heFZhcnlpbmdWZWN0b3JzICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4QXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VmVydGV4QXRvbWljQ291bnRlcnMgZ2xfTWF4VmVydGV4QXR0cmlicyBnbF9NYXhWZXJ0ZXhJbWFnZVVuaWZvcm1zICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4T3V0cHV0Q29tcG9uZW50cyBnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgZ2xfTWF4Vmlld3BvcnRzIGdsX01pblByb2dyYW1UZXhlbE9mZnNldCAnICtcbiAgICAgICAgLy8gVmFyaWFibGVzXG4gICAgICAgICdnbF9CYWNrQ29sb3IgZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IGdsX0JhY2tMaWdodFByb2R1Y3QgZ2xfQmFja01hdGVyaWFsICcgK1xuICAgICAgICAnZ2xfQmFja1NlY29uZGFyeUNvbG9yIGdsX0NsaXBEaXN0YW5jZSBnbF9DbGlwUGxhbmUgZ2xfQ2xpcFZlcnRleCBnbF9Db2xvciAnICtcbiAgICAgICAgJ2dsX0RlcHRoUmFuZ2UgZ2xfRXllUGxhbmVRIGdsX0V5ZVBsYW5lUiBnbF9FeWVQbGFuZVMgZ2xfRXllUGxhbmVUIGdsX0ZvZyBnbF9Gb2dDb29yZCAnICtcbiAgICAgICAgJ2dsX0ZvZ0ZyYWdDb29yZCBnbF9GcmFnQ29sb3IgZ2xfRnJhZ0Nvb3JkIGdsX0ZyYWdEYXRhIGdsX0ZyYWdEZXB0aCBnbF9Gcm9udENvbG9yICcgK1xuICAgICAgICAnZ2xfRnJvbnRGYWNpbmcgZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCBnbF9Gcm9udExpZ2h0UHJvZHVjdCBnbF9Gcm9udE1hdGVyaWFsICcgK1xuICAgICAgICAnZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciBnbF9HbG9iYWxJbnZvY2F0aW9uSUQgZ2xfSW5zdGFuY2VJRCBnbF9JbnZvY2F0aW9uSUQgZ2xfTGF5ZXIgZ2xfTGlnaHRNb2RlbCAnICtcbiAgICAgICAgJ2dsX0xpZ2h0U291cmNlIGdsX0xvY2FsSW52b2NhdGlvbklEIGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IGdsX01vZGVsVmlld01hdHJpeCAnICtcbiAgICAgICAgJ2dsX01vZGVsVmlld01hdHJpeEludmVyc2UgZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZSBnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UgJyArXG4gICAgICAgICdnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlICcgK1xuICAgICAgICAnZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9NdWx0aVRleENvb3JkMCBnbF9NdWx0aVRleENvb3JkMSBnbF9NdWx0aVRleENvb3JkMiAnICtcbiAgICAgICAgJ2dsX011bHRpVGV4Q29vcmQzIGdsX011bHRpVGV4Q29vcmQ0IGdsX011bHRpVGV4Q29vcmQ1IGdsX011bHRpVGV4Q29vcmQ2IGdsX011bHRpVGV4Q29vcmQ3ICcgK1xuICAgICAgICAnZ2xfTm9ybWFsIGdsX05vcm1hbE1hdHJpeCBnbF9Ob3JtYWxTY2FsZSBnbF9OdW1TYW1wbGVzIGdsX051bVdvcmtHcm91cHMgZ2xfT2JqZWN0UGxhbmVRICcgK1xuICAgICAgICAnZ2xfT2JqZWN0UGxhbmVSIGdsX09iamVjdFBsYW5lUyBnbF9PYmplY3RQbGFuZVQgZ2xfUGF0Y2hWZXJ0aWNlc0luIGdsX1BvaW50IGdsX1BvaW50Q29vcmQgJyArXG4gICAgICAgICdnbF9Qb2ludFNpemUgZ2xfUG9zaXRpb24gZ2xfUHJpbWl0aXZlSUQgZ2xfUHJpbWl0aXZlSURJbiBnbF9Qcm9qZWN0aW9uTWF0cml4IGdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlICcgK1xuICAgICAgICAnZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UgZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9TYW1wbGVJRCBnbF9TYW1wbGVNYXNrICcgK1xuICAgICAgICAnZ2xfU2FtcGxlTWFza0luIGdsX1NhbXBsZVBvc2l0aW9uIGdsX1NlY29uZGFyeUNvbG9yIGdsX1Rlc3NDb29yZCBnbF9UZXNzTGV2ZWxJbm5lciBnbF9UZXNzTGV2ZWxPdXRlciAnICtcbiAgICAgICAgJ2dsX1RleENvb3JkIGdsX1RleHR1cmVFbnZDb2xvciBnbF9UZXh0dXJlTWF0cml4IGdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIGdsX1RleHR1cmVNYXRyaXhJbnZlcnNlVHJhbnNwb3NlICcgK1xuICAgICAgICAnZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZSBnbF9WZXJ0ZXggZ2xfVmVydGV4SUQgZ2xfVmlld3BvcnRJbmRleCBnbF9Xb3JrR3JvdXBJRCBnbF9Xb3JrR3JvdXBTaXplIGdsX2luIGdsX291dCAnICtcbiAgICAgICAgLy8gRnVuY3Rpb25zXG4gICAgICAgICdFbWl0U3RyZWFtVmVydGV4IEVtaXRWZXJ0ZXggRW5kUHJpbWl0aXZlIEVuZFN0cmVhbVByaW1pdGl2ZSBhYnMgYWNvcyBhY29zaCBhbGwgYW55IGFzaW4gJyArXG4gICAgICAgICdhc2luaCBhdGFuIGF0YW5oIGF0b21pY0FkZCBhdG9taWNBbmQgYXRvbWljQ29tcFN3YXAgYXRvbWljQ291bnRlciBhdG9taWNDb3VudGVyRGVjcmVtZW50ICcgK1xuICAgICAgICAnYXRvbWljQ291bnRlckluY3JlbWVudCBhdG9taWNFeGNoYW5nZSBhdG9taWNNYXggYXRvbWljTWluIGF0b21pY09yIGF0b21pY1hvciBiYXJyaWVyICcgK1xuICAgICAgICAnYml0Q291bnQgYml0ZmllbGRFeHRyYWN0IGJpdGZpZWxkSW5zZXJ0IGJpdGZpZWxkUmV2ZXJzZSBjZWlsIGNsYW1wIGNvcyBjb3NoIGNyb3NzICcgK1xuICAgICAgICAnZEZkeCBkRmR5IGRlZ3JlZXMgZGV0ZXJtaW5hbnQgZGlzdGFuY2UgZG90IGVxdWFsIGV4cCBleHAyIGZhY2Vmb3J3YXJkIGZpbmRMU0IgZmluZE1TQiAnICtcbiAgICAgICAgJ2Zsb2F0Qml0c1RvSW50IGZsb2F0Qml0c1RvVWludCBmbG9vciBmbWEgZnJhY3QgZnJleHAgZnRyYW5zZm9ybSBmd2lkdGggZ3JlYXRlclRoYW4gJyArXG4gICAgICAgICdncmVhdGVyVGhhbkVxdWFsIGdyb3VwTWVtb3J5QmFycmllciBpbWFnZUF0b21pY0FkZCBpbWFnZUF0b21pY0FuZCBpbWFnZUF0b21pY0NvbXBTd2FwICcgK1xuICAgICAgICAnaW1hZ2VBdG9taWNFeGNoYW5nZSBpbWFnZUF0b21pY01heCBpbWFnZUF0b21pY01pbiBpbWFnZUF0b21pY09yIGltYWdlQXRvbWljWG9yIGltYWdlTG9hZCAnICtcbiAgICAgICAgJ2ltYWdlU2l6ZSBpbWFnZVN0b3JlIGltdWxFeHRlbmRlZCBpbnRCaXRzVG9GbG9hdCBpbnRlcnBvbGF0ZUF0Q2VudHJvaWQgaW50ZXJwb2xhdGVBdE9mZnNldCAnICtcbiAgICAgICAgJ2ludGVycG9sYXRlQXRTYW1wbGUgaW52ZXJzZSBpbnZlcnNlc3FydCBpc2luZiBpc25hbiBsZGV4cCBsZW5ndGggbGVzc1RoYW4gbGVzc1RoYW5FcXVhbCBsb2cgJyArXG4gICAgICAgICdsb2cyIG1hdHJpeENvbXBNdWx0IG1heCBtZW1vcnlCYXJyaWVyIG1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyIG1lbW9yeUJhcnJpZXJCdWZmZXIgJyArXG4gICAgICAgICdtZW1vcnlCYXJyaWVySW1hZ2UgbWVtb3J5QmFycmllclNoYXJlZCBtaW4gbWl4IG1vZCBtb2RmIG5vaXNlMSBub2lzZTIgbm9pc2UzIG5vaXNlNCAnICtcbiAgICAgICAgJ25vcm1hbGl6ZSBub3Qgbm90RXF1YWwgb3V0ZXJQcm9kdWN0IHBhY2tEb3VibGUyeDMyIHBhY2tIYWxmMngxNiBwYWNrU25vcm0yeDE2IHBhY2tTbm9ybTR4OCAnICtcbiAgICAgICAgJ3BhY2tVbm9ybTJ4MTYgcGFja1Vub3JtNHg4IHBvdyByYWRpYW5zIHJlZmxlY3QgcmVmcmFjdCByb3VuZCByb3VuZEV2ZW4gc2hhZG93MUQgc2hhZG93MURMb2QgJyArXG4gICAgICAgICdzaGFkb3cxRFByb2ogc2hhZG93MURQcm9qTG9kIHNoYWRvdzJEIHNoYWRvdzJETG9kIHNoYWRvdzJEUHJvaiBzaGFkb3cyRFByb2pMb2Qgc2lnbiBzaW4gc2luaCAnICtcbiAgICAgICAgJ3Ntb290aHN0ZXAgc3FydCBzdGVwIHRhbiB0YW5oIHRleGVsRmV0Y2ggdGV4ZWxGZXRjaE9mZnNldCB0ZXh0dXJlIHRleHR1cmUxRCB0ZXh0dXJlMURMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlMURQcm9qIHRleHR1cmUxRFByb2pMb2QgdGV4dHVyZTJEIHRleHR1cmUyRExvZCB0ZXh0dXJlMkRQcm9qIHRleHR1cmUyRFByb2pMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlM0QgdGV4dHVyZTNETG9kIHRleHR1cmUzRFByb2ogdGV4dHVyZTNEUHJvakxvZCB0ZXh0dXJlQ3ViZSB0ZXh0dXJlQ3ViZUxvZCAnICtcbiAgICAgICAgJ3RleHR1cmVHYXRoZXIgdGV4dHVyZUdhdGhlck9mZnNldCB0ZXh0dXJlR2F0aGVyT2Zmc2V0cyB0ZXh0dXJlR3JhZCB0ZXh0dXJlR3JhZE9mZnNldCAnICtcbiAgICAgICAgJ3RleHR1cmVMb2QgdGV4dHVyZUxvZE9mZnNldCB0ZXh0dXJlT2Zmc2V0IHRleHR1cmVQcm9qIHRleHR1cmVQcm9qR3JhZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQgJyArXG4gICAgICAgICd0ZXh0dXJlUHJvakxvZCB0ZXh0dXJlUHJvakxvZE9mZnNldCB0ZXh0dXJlUHJvak9mZnNldCB0ZXh0dXJlUXVlcnlMZXZlbHMgdGV4dHVyZVF1ZXJ5TG9kICcgK1xuICAgICAgICAndGV4dHVyZVNpemUgdHJhbnNwb3NlIHRydW5jIHVhZGRDYXJyeSB1aW50Qml0c1RvRmxvYXQgdW11bEV4dGVuZGVkIHVucGFja0RvdWJsZTJ4MzIgJyArXG4gICAgICAgICd1bnBhY2tIYWxmMngxNiB1bnBhY2tTbm9ybTJ4MTYgdW5wYWNrU25vcm00eDggdW5wYWNrVW5vcm0yeDE2IHVucGFja1Vub3JtNHg4IHVzdWJCb3Jyb3cnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgR01MX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdiZWdpbiBlbmQgaWYgdGhlbiBlbHNlIHdoaWxlIGRvIGZvciBicmVhayBjb250aW51ZSB3aXRoIHVudGlsICcgK1xuICAgICAgJ3JlcGVhdCBleGl0IGFuZCBvciB4b3Igbm90IHJldHVybiBtb2QgZGl2IHN3aXRjaCBjYXNlIGRlZmF1bHQgdmFyICcgK1xuICAgICAgJ2dsb2JhbHZhciBlbnVtICNtYWNybyAjcmVnaW9uICNlbmRyZWdpb24nLFxuICAgIGJ1aWx0X2luOiAnaXNfcmVhbCBpc19zdHJpbmcgaXNfYXJyYXkgaXNfdW5kZWZpbmVkIGlzX2ludDMyIGlzX2ludDY0ICcgK1xuICAgICAgJ2lzX3B0ciBpc192ZWMzIGlzX3ZlYzQgaXNfbWF0cml4IGlzX2Jvb2wgdHlwZW9mICcgK1xuICAgICAgJ3ZhcmlhYmxlX2dsb2JhbF9leGlzdHMgdmFyaWFibGVfZ2xvYmFsX2dldCB2YXJpYWJsZV9nbG9iYWxfc2V0ICcgK1xuICAgICAgJ3ZhcmlhYmxlX2luc3RhbmNlX2V4aXN0cyB2YXJpYWJsZV9pbnN0YW5jZV9nZXQgdmFyaWFibGVfaW5zdGFuY2Vfc2V0ICcgK1xuICAgICAgJ3ZhcmlhYmxlX2luc3RhbmNlX2dldF9uYW1lcyBhcnJheV9sZW5ndGhfMWQgYXJyYXlfbGVuZ3RoXzJkICcgK1xuICAgICAgJ2FycmF5X2hlaWdodF8yZCBhcnJheV9lcXVhbHMgYXJyYXlfY3JlYXRlIGFycmF5X2NvcHkgcmFuZG9tICcgK1xuICAgICAgJ3JhbmRvbV9yYW5nZSBpcmFuZG9tIGlyYW5kb21fcmFuZ2UgcmFuZG9tX3NldF9zZWVkIHJhbmRvbV9nZXRfc2VlZCAnICtcbiAgICAgICdyYW5kb21pemUgcmFuZG9taXNlIGNob29zZSBhYnMgcm91bmQgZmxvb3IgY2VpbCBzaWduIGZyYWMgc3FydCBzcXIgJyArXG4gICAgICAnZXhwIGxuIGxvZzIgbG9nMTAgc2luIGNvcyB0YW4gYXJjc2luIGFyY2NvcyBhcmN0YW4gYXJjdGFuMiBkc2luIGRjb3MgJyArXG4gICAgICAnZHRhbiBkYXJjc2luIGRhcmNjb3MgZGFyY3RhbiBkYXJjdGFuMiBkZWd0b3JhZCByYWR0b2RlZyBwb3dlciBsb2duICcgK1xuICAgICAgJ21pbiBtYXggbWVhbiBtZWRpYW4gY2xhbXAgbGVycCBkb3RfcHJvZHVjdCBkb3RfcHJvZHVjdF8zZCAnICtcbiAgICAgICdkb3RfcHJvZHVjdF9ub3JtYWxpc2VkIGRvdF9wcm9kdWN0XzNkX25vcm1hbGlzZWQgJyArXG4gICAgICAnZG90X3Byb2R1Y3Rfbm9ybWFsaXplZCBkb3RfcHJvZHVjdF8zZF9ub3JtYWxpemVkIG1hdGhfc2V0X2Vwc2lsb24gJyArXG4gICAgICAnbWF0aF9nZXRfZXBzaWxvbiBhbmdsZV9kaWZmZXJlbmNlIHBvaW50X2Rpc3RhbmNlXzNkIHBvaW50X2Rpc3RhbmNlICcgK1xuICAgICAgJ3BvaW50X2RpcmVjdGlvbiBsZW5ndGhkaXJfeCBsZW5ndGhkaXJfeSByZWFsIHN0cmluZyBpbnQ2NCBwdHIgJyArXG4gICAgICAnc3RyaW5nX2Zvcm1hdCBjaHIgYW5zaV9jaGFyIG9yZCBzdHJpbmdfbGVuZ3RoIHN0cmluZ19ieXRlX2xlbmd0aCAnICtcbiAgICAgICdzdHJpbmdfcG9zIHN0cmluZ19jb3B5IHN0cmluZ19jaGFyX2F0IHN0cmluZ19vcmRfYXQgc3RyaW5nX2J5dGVfYXQgJyArXG4gICAgICAnc3RyaW5nX3NldF9ieXRlX2F0IHN0cmluZ19kZWxldGUgc3RyaW5nX2luc2VydCBzdHJpbmdfbG93ZXIgJyArXG4gICAgICAnc3RyaW5nX3VwcGVyIHN0cmluZ19yZXBlYXQgc3RyaW5nX2xldHRlcnMgc3RyaW5nX2RpZ2l0cyAnICtcbiAgICAgICdzdHJpbmdfbGV0dGVyc2RpZ2l0cyBzdHJpbmdfcmVwbGFjZSBzdHJpbmdfcmVwbGFjZV9hbGwgc3RyaW5nX2NvdW50ICcgK1xuICAgICAgJ3N0cmluZ19oYXNoX3RvX25ld2xpbmUgY2xpcGJvYXJkX2hhc190ZXh0IGNsaXBib2FyZF9zZXRfdGV4dCAnICtcbiAgICAgICdjbGlwYm9hcmRfZ2V0X3RleHQgZGF0ZV9jdXJyZW50X2RhdGV0aW1lIGRhdGVfY3JlYXRlX2RhdGV0aW1lICcgK1xuICAgICAgJ2RhdGVfdmFsaWRfZGF0ZXRpbWUgZGF0ZV9pbmNfeWVhciBkYXRlX2luY19tb250aCBkYXRlX2luY193ZWVrICcgK1xuICAgICAgJ2RhdGVfaW5jX2RheSBkYXRlX2luY19ob3VyIGRhdGVfaW5jX21pbnV0ZSBkYXRlX2luY19zZWNvbmQgJyArXG4gICAgICAnZGF0ZV9nZXRfeWVhciBkYXRlX2dldF9tb250aCBkYXRlX2dldF93ZWVrIGRhdGVfZ2V0X2RheSAnICtcbiAgICAgICdkYXRlX2dldF9ob3VyIGRhdGVfZ2V0X21pbnV0ZSBkYXRlX2dldF9zZWNvbmQgZGF0ZV9nZXRfd2Vla2RheSAnICtcbiAgICAgICdkYXRlX2dldF9kYXlfb2ZfeWVhciBkYXRlX2dldF9ob3VyX29mX3llYXIgZGF0ZV9nZXRfbWludXRlX29mX3llYXIgJyArXG4gICAgICAnZGF0ZV9nZXRfc2Vjb25kX29mX3llYXIgZGF0ZV95ZWFyX3NwYW4gZGF0ZV9tb250aF9zcGFuICcgK1xuICAgICAgJ2RhdGVfd2Vla19zcGFuIGRhdGVfZGF5X3NwYW4gZGF0ZV9ob3VyX3NwYW4gZGF0ZV9taW51dGVfc3BhbiAnICtcbiAgICAgICdkYXRlX3NlY29uZF9zcGFuIGRhdGVfY29tcGFyZV9kYXRldGltZSBkYXRlX2NvbXBhcmVfZGF0ZSAnICtcbiAgICAgICdkYXRlX2NvbXBhcmVfdGltZSBkYXRlX2RhdGVfb2YgZGF0ZV90aW1lX29mIGRhdGVfZGF0ZXRpbWVfc3RyaW5nICcgK1xuICAgICAgJ2RhdGVfZGF0ZV9zdHJpbmcgZGF0ZV90aW1lX3N0cmluZyBkYXRlX2RheXNfaW5fbW9udGggJyArXG4gICAgICAnZGF0ZV9kYXlzX2luX3llYXIgZGF0ZV9sZWFwX3llYXIgZGF0ZV9pc190b2RheSBkYXRlX3NldF90aW1lem9uZSAnICtcbiAgICAgICdkYXRlX2dldF90aW1lem9uZSBnYW1lX3NldF9zcGVlZCBnYW1lX2dldF9zcGVlZCBtb3Rpb25fc2V0ICcgK1xuICAgICAgJ21vdGlvbl9hZGQgcGxhY2VfZnJlZSBwbGFjZV9lbXB0eSBwbGFjZV9tZWV0aW5nIHBsYWNlX3NuYXBwZWQgJyArXG4gICAgICAnbW92ZV9yYW5kb20gbW92ZV9zbmFwIG1vdmVfdG93YXJkc19wb2ludCBtb3ZlX2NvbnRhY3Rfc29saWQgJyArXG4gICAgICAnbW92ZV9jb250YWN0X2FsbCBtb3ZlX291dHNpZGVfc29saWQgbW92ZV9vdXRzaWRlX2FsbCAnICtcbiAgICAgICdtb3ZlX2JvdW5jZV9zb2xpZCBtb3ZlX2JvdW5jZV9hbGwgbW92ZV93cmFwIGRpc3RhbmNlX3RvX3BvaW50ICcgK1xuICAgICAgJ2Rpc3RhbmNlX3RvX29iamVjdCBwb3NpdGlvbl9lbXB0eSBwb3NpdGlvbl9tZWV0aW5nIHBhdGhfc3RhcnQgJyArXG4gICAgICAncGF0aF9lbmQgbXBfbGluZWFyX3N0ZXAgbXBfcG90ZW50aWFsX3N0ZXAgbXBfbGluZWFyX3N0ZXBfb2JqZWN0ICcgK1xuICAgICAgJ21wX3BvdGVudGlhbF9zdGVwX29iamVjdCBtcF9wb3RlbnRpYWxfc2V0dGluZ3MgbXBfbGluZWFyX3BhdGggJyArXG4gICAgICAnbXBfcG90ZW50aWFsX3BhdGggbXBfbGluZWFyX3BhdGhfb2JqZWN0IG1wX3BvdGVudGlhbF9wYXRoX29iamVjdCAnICtcbiAgICAgICdtcF9ncmlkX2NyZWF0ZSBtcF9ncmlkX2Rlc3Ryb3kgbXBfZ3JpZF9jbGVhcl9hbGwgbXBfZ3JpZF9jbGVhcl9jZWxsICcgK1xuICAgICAgJ21wX2dyaWRfY2xlYXJfcmVjdGFuZ2xlIG1wX2dyaWRfYWRkX2NlbGwgbXBfZ3JpZF9nZXRfY2VsbCAnICtcbiAgICAgICdtcF9ncmlkX2FkZF9yZWN0YW5nbGUgbXBfZ3JpZF9hZGRfaW5zdGFuY2VzIG1wX2dyaWRfcGF0aCAnICtcbiAgICAgICdtcF9ncmlkX2RyYXcgbXBfZ3JpZF90b19kc19ncmlkIGNvbGxpc2lvbl9wb2ludCBjb2xsaXNpb25fcmVjdGFuZ2xlICcgK1xuICAgICAgJ2NvbGxpc2lvbl9jaXJjbGUgY29sbGlzaW9uX2VsbGlwc2UgY29sbGlzaW9uX2xpbmUgJyArXG4gICAgICAnY29sbGlzaW9uX3BvaW50X2xpc3QgY29sbGlzaW9uX3JlY3RhbmdsZV9saXN0IGNvbGxpc2lvbl9jaXJjbGVfbGlzdCAnICtcbiAgICAgICdjb2xsaXNpb25fZWxsaXBzZV9saXN0IGNvbGxpc2lvbl9saW5lX2xpc3QgaW5zdGFuY2VfcG9zaXRpb25fbGlzdCAnICtcbiAgICAgICdpbnN0YW5jZV9wbGFjZV9saXN0IHBvaW50X2luX3JlY3RhbmdsZSAnICtcbiAgICAgICdwb2ludF9pbl90cmlhbmdsZSBwb2ludF9pbl9jaXJjbGUgcmVjdGFuZ2xlX2luX3JlY3RhbmdsZSAnICtcbiAgICAgICdyZWN0YW5nbGVfaW5fdHJpYW5nbGUgcmVjdGFuZ2xlX2luX2NpcmNsZSBpbnN0YW5jZV9maW5kICcgK1xuICAgICAgJ2luc3RhbmNlX2V4aXN0cyBpbnN0YW5jZV9udW1iZXIgaW5zdGFuY2VfcG9zaXRpb24gaW5zdGFuY2VfbmVhcmVzdCAnICtcbiAgICAgICdpbnN0YW5jZV9mdXJ0aGVzdCBpbnN0YW5jZV9wbGFjZSBpbnN0YW5jZV9jcmVhdGVfZGVwdGggJyArXG4gICAgICAnaW5zdGFuY2VfY3JlYXRlX2xheWVyIGluc3RhbmNlX2NvcHkgaW5zdGFuY2VfY2hhbmdlIGluc3RhbmNlX2Rlc3Ryb3kgJyArXG4gICAgICAncG9zaXRpb25fZGVzdHJveSBwb3NpdGlvbl9jaGFuZ2UgaW5zdGFuY2VfaWRfZ2V0ICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfYWxsIGluc3RhbmNlX2RlYWN0aXZhdGVfb2JqZWN0ICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfcmVnaW9uIGluc3RhbmNlX2FjdGl2YXRlX2FsbCAnICtcbiAgICAgICdpbnN0YW5jZV9hY3RpdmF0ZV9vYmplY3QgaW5zdGFuY2VfYWN0aXZhdGVfcmVnaW9uIHJvb21fZ290byAnICtcbiAgICAgICdyb29tX2dvdG9fcHJldmlvdXMgcm9vbV9nb3RvX25leHQgcm9vbV9wcmV2aW91cyByb29tX25leHQgJyArXG4gICAgICAncm9vbV9yZXN0YXJ0IGdhbWVfZW5kIGdhbWVfcmVzdGFydCBnYW1lX2xvYWQgZ2FtZV9zYXZlICcgK1xuICAgICAgJ2dhbWVfc2F2ZV9idWZmZXIgZ2FtZV9sb2FkX2J1ZmZlciBldmVudF9wZXJmb3JtIGV2ZW50X3VzZXIgJyArXG4gICAgICAnZXZlbnRfcGVyZm9ybV9vYmplY3QgZXZlbnRfaW5oZXJpdGVkIHNob3dfZGVidWdfbWVzc2FnZSAnICtcbiAgICAgICdzaG93X2RlYnVnX292ZXJsYXkgZGVidWdfZXZlbnQgZGVidWdfZ2V0X2NhbGxzdGFjayBhbGFybV9nZXQgJyArXG4gICAgICAnYWxhcm1fc2V0IGZvbnRfdGV4dHVyZV9wYWdlX3NpemUga2V5Ym9hcmRfc2V0X21hcCBrZXlib2FyZF9nZXRfbWFwICcgK1xuICAgICAgJ2tleWJvYXJkX3Vuc2V0X21hcCBrZXlib2FyZF9jaGVjayBrZXlib2FyZF9jaGVja19wcmVzc2VkICcgK1xuICAgICAgJ2tleWJvYXJkX2NoZWNrX3JlbGVhc2VkIGtleWJvYXJkX2NoZWNrX2RpcmVjdCBrZXlib2FyZF9nZXRfbnVtbG9jayAnICtcbiAgICAgICdrZXlib2FyZF9zZXRfbnVtbG9jayBrZXlib2FyZF9rZXlfcHJlc3Mga2V5Ym9hcmRfa2V5X3JlbGVhc2UgJyArXG4gICAgICAna2V5Ym9hcmRfY2xlYXIgaW9fY2xlYXIgbW91c2VfY2hlY2tfYnV0dG9uICcgK1xuICAgICAgJ21vdXNlX2NoZWNrX2J1dHRvbl9wcmVzc2VkIG1vdXNlX2NoZWNrX2J1dHRvbl9yZWxlYXNlZCAnICtcbiAgICAgICdtb3VzZV93aGVlbF91cCBtb3VzZV93aGVlbF9kb3duIG1vdXNlX2NsZWFyIGRyYXdfc2VsZiBkcmF3X3Nwcml0ZSAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9wb3MgZHJhd19zcHJpdGVfZXh0IGRyYXdfc3ByaXRlX3N0cmV0Y2hlZCAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9zdHJldGNoZWRfZXh0IGRyYXdfc3ByaXRlX3RpbGVkIGRyYXdfc3ByaXRlX3RpbGVkX2V4dCAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9wYXJ0IGRyYXdfc3ByaXRlX3BhcnRfZXh0IGRyYXdfc3ByaXRlX2dlbmVyYWwgZHJhd19jbGVhciAnICtcbiAgICAgICdkcmF3X2NsZWFyX2FscGhhIGRyYXdfcG9pbnQgZHJhd19saW5lIGRyYXdfbGluZV93aWR0aCBkcmF3X3JlY3RhbmdsZSAnICtcbiAgICAgICdkcmF3X3JvdW5kcmVjdCBkcmF3X3JvdW5kcmVjdF9leHQgZHJhd190cmlhbmdsZSBkcmF3X2NpcmNsZSAnICtcbiAgICAgICdkcmF3X2VsbGlwc2UgZHJhd19zZXRfY2lyY2xlX3ByZWNpc2lvbiBkcmF3X2Fycm93IGRyYXdfYnV0dG9uICcgK1xuICAgICAgJ2RyYXdfcGF0aCBkcmF3X2hlYWx0aGJhciBkcmF3X2dldHBpeGVsIGRyYXdfZ2V0cGl4ZWxfZXh0ICcgK1xuICAgICAgJ2RyYXdfc2V0X2NvbG91ciBkcmF3X3NldF9jb2xvciBkcmF3X3NldF9hbHBoYSBkcmF3X2dldF9jb2xvdXIgJyArXG4gICAgICAnZHJhd19nZXRfY29sb3IgZHJhd19nZXRfYWxwaGEgbWVyZ2VfY29sb3VyIG1ha2VfY29sb3VyX3JnYiAnICtcbiAgICAgICdtYWtlX2NvbG91cl9oc3YgY29sb3VyX2dldF9yZWQgY29sb3VyX2dldF9ncmVlbiBjb2xvdXJfZ2V0X2JsdWUgJyArXG4gICAgICAnY29sb3VyX2dldF9odWUgY29sb3VyX2dldF9zYXR1cmF0aW9uIGNvbG91cl9nZXRfdmFsdWUgbWVyZ2VfY29sb3IgJyArXG4gICAgICAnbWFrZV9jb2xvcl9yZ2IgbWFrZV9jb2xvcl9oc3YgY29sb3JfZ2V0X3JlZCBjb2xvcl9nZXRfZ3JlZW4gJyArXG4gICAgICAnY29sb3JfZ2V0X2JsdWUgY29sb3JfZ2V0X2h1ZSBjb2xvcl9nZXRfc2F0dXJhdGlvbiBjb2xvcl9nZXRfdmFsdWUgJyArXG4gICAgICAnbWVyZ2VfY29sb3Igc2NyZWVuX3NhdmUgc2NyZWVuX3NhdmVfcGFydCBkcmF3X3NldF9mb250ICcgK1xuICAgICAgJ2RyYXdfc2V0X2hhbGlnbiBkcmF3X3NldF92YWxpZ24gZHJhd190ZXh0IGRyYXdfdGV4dF9leHQgc3RyaW5nX3dpZHRoICcgK1xuICAgICAgJ3N0cmluZ19oZWlnaHQgc3RyaW5nX3dpZHRoX2V4dCBzdHJpbmdfaGVpZ2h0X2V4dCAnICtcbiAgICAgICdkcmF3X3RleHRfdHJhbnNmb3JtZWQgZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZCBkcmF3X3RleHRfY29sb3VyICcgK1xuICAgICAgJ2RyYXdfdGV4dF9leHRfY29sb3VyIGRyYXdfdGV4dF90cmFuc2Zvcm1lZF9jb2xvdXIgJyArXG4gICAgICAnZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZF9jb2xvdXIgZHJhd190ZXh0X2NvbG9yIGRyYXdfdGV4dF9leHRfY29sb3IgJyArXG4gICAgICAnZHJhd190ZXh0X3RyYW5zZm9ybWVkX2NvbG9yIGRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRfY29sb3IgJyArXG4gICAgICAnZHJhd19wb2ludF9jb2xvdXIgZHJhd19saW5lX2NvbG91ciBkcmF3X2xpbmVfd2lkdGhfY29sb3VyICcgK1xuICAgICAgJ2RyYXdfcmVjdGFuZ2xlX2NvbG91ciBkcmF3X3JvdW5kcmVjdF9jb2xvdXIgJyArXG4gICAgICAnZHJhd19yb3VuZHJlY3RfY29sb3VyX2V4dCBkcmF3X3RyaWFuZ2xlX2NvbG91ciBkcmF3X2NpcmNsZV9jb2xvdXIgJyArXG4gICAgICAnZHJhd19lbGxpcHNlX2NvbG91ciBkcmF3X3BvaW50X2NvbG9yIGRyYXdfbGluZV9jb2xvciAnICtcbiAgICAgICdkcmF3X2xpbmVfd2lkdGhfY29sb3IgZHJhd19yZWN0YW5nbGVfY29sb3IgZHJhd19yb3VuZHJlY3RfY29sb3IgJyArXG4gICAgICAnZHJhd19yb3VuZHJlY3RfY29sb3JfZXh0IGRyYXdfdHJpYW5nbGVfY29sb3IgZHJhd19jaXJjbGVfY29sb3IgJyArXG4gICAgICAnZHJhd19lbGxpcHNlX2NvbG9yIGRyYXdfcHJpbWl0aXZlX2JlZ2luIGRyYXdfdmVydGV4ICcgK1xuICAgICAgJ2RyYXdfdmVydGV4X2NvbG91ciBkcmF3X3ZlcnRleF9jb2xvciBkcmF3X3ByaW1pdGl2ZV9lbmQgJyArXG4gICAgICAnc3ByaXRlX2dldF91dnMgZm9udF9nZXRfdXZzIHNwcml0ZV9nZXRfdGV4dHVyZSBmb250X2dldF90ZXh0dXJlICcgK1xuICAgICAgJ3RleHR1cmVfZ2V0X3dpZHRoIHRleHR1cmVfZ2V0X2hlaWdodCB0ZXh0dXJlX2dldF91dnMgJyArXG4gICAgICAnZHJhd19wcmltaXRpdmVfYmVnaW5fdGV4dHVyZSBkcmF3X3ZlcnRleF90ZXh0dXJlICcgK1xuICAgICAgJ2RyYXdfdmVydGV4X3RleHR1cmVfY29sb3VyIGRyYXdfdmVydGV4X3RleHR1cmVfY29sb3IgJyArXG4gICAgICAndGV4dHVyZV9nbG9iYWxfc2NhbGUgc3VyZmFjZV9jcmVhdGUgc3VyZmFjZV9jcmVhdGVfZXh0ICcgK1xuICAgICAgJ3N1cmZhY2VfcmVzaXplIHN1cmZhY2VfZnJlZSBzdXJmYWNlX2V4aXN0cyBzdXJmYWNlX2dldF93aWR0aCAnICtcbiAgICAgICdzdXJmYWNlX2dldF9oZWlnaHQgc3VyZmFjZV9nZXRfdGV4dHVyZSBzdXJmYWNlX3NldF90YXJnZXQgJyArXG4gICAgICAnc3VyZmFjZV9zZXRfdGFyZ2V0X2V4dCBzdXJmYWNlX3Jlc2V0X3RhcmdldCBzdXJmYWNlX2RlcHRoX2Rpc2FibGUgJyArXG4gICAgICAnc3VyZmFjZV9nZXRfZGVwdGhfZGlzYWJsZSBkcmF3X3N1cmZhY2UgZHJhd19zdXJmYWNlX3N0cmV0Y2hlZCAnICtcbiAgICAgICdkcmF3X3N1cmZhY2VfdGlsZWQgZHJhd19zdXJmYWNlX3BhcnQgZHJhd19zdXJmYWNlX2V4dCAnICtcbiAgICAgICdkcmF3X3N1cmZhY2Vfc3RyZXRjaGVkX2V4dCBkcmF3X3N1cmZhY2VfdGlsZWRfZXh0ICcgK1xuICAgICAgJ2RyYXdfc3VyZmFjZV9wYXJ0X2V4dCBkcmF3X3N1cmZhY2VfZ2VuZXJhbCBzdXJmYWNlX2dldHBpeGVsICcgK1xuICAgICAgJ3N1cmZhY2VfZ2V0cGl4ZWxfZXh0IHN1cmZhY2Vfc2F2ZSBzdXJmYWNlX3NhdmVfcGFydCBzdXJmYWNlX2NvcHkgJyArXG4gICAgICAnc3VyZmFjZV9jb3B5X3BhcnQgYXBwbGljYXRpb25fc3VyZmFjZV9kcmF3X2VuYWJsZSAnICtcbiAgICAgICdhcHBsaWNhdGlvbl9nZXRfcG9zaXRpb24gYXBwbGljYXRpb25fc3VyZmFjZV9lbmFibGUgJyArXG4gICAgICAnYXBwbGljYXRpb25fc3VyZmFjZV9pc19lbmFibGVkIGRpc3BsYXlfZ2V0X3dpZHRoIGRpc3BsYXlfZ2V0X2hlaWdodCAnICtcbiAgICAgICdkaXNwbGF5X2dldF9vcmllbnRhdGlvbiBkaXNwbGF5X2dldF9ndWlfd2lkdGggZGlzcGxheV9nZXRfZ3VpX2hlaWdodCAnICtcbiAgICAgICdkaXNwbGF5X3Jlc2V0IGRpc3BsYXlfbW91c2VfZ2V0X3ggZGlzcGxheV9tb3VzZV9nZXRfeSAnICtcbiAgICAgICdkaXNwbGF5X21vdXNlX3NldCBkaXNwbGF5X3NldF91aV92aXNpYmlsaXR5ICcgK1xuICAgICAgJ3dpbmRvd19zZXRfZnVsbHNjcmVlbiB3aW5kb3dfZ2V0X2Z1bGxzY3JlZW4gJyArXG4gICAgICAnd2luZG93X3NldF9jYXB0aW9uIHdpbmRvd19zZXRfbWluX3dpZHRoIHdpbmRvd19zZXRfbWF4X3dpZHRoICcgK1xuICAgICAgJ3dpbmRvd19zZXRfbWluX2hlaWdodCB3aW5kb3dfc2V0X21heF9oZWlnaHQgd2luZG93X2dldF92aXNpYmxlX3JlY3RzICcgK1xuICAgICAgJ3dpbmRvd19nZXRfY2FwdGlvbiB3aW5kb3dfc2V0X2N1cnNvciB3aW5kb3dfZ2V0X2N1cnNvciAnICtcbiAgICAgICd3aW5kb3dfc2V0X2NvbG91ciB3aW5kb3dfZ2V0X2NvbG91ciB3aW5kb3dfc2V0X2NvbG9yICcgK1xuICAgICAgJ3dpbmRvd19nZXRfY29sb3Igd2luZG93X3NldF9wb3NpdGlvbiB3aW5kb3dfc2V0X3NpemUgJyArXG4gICAgICAnd2luZG93X3NldF9yZWN0YW5nbGUgd2luZG93X2NlbnRlciB3aW5kb3dfZ2V0X3ggd2luZG93X2dldF95ICcgK1xuICAgICAgJ3dpbmRvd19nZXRfd2lkdGggd2luZG93X2dldF9oZWlnaHQgd2luZG93X21vdXNlX2dldF94ICcgK1xuICAgICAgJ3dpbmRvd19tb3VzZV9nZXRfeSB3aW5kb3dfbW91c2Vfc2V0IHdpbmRvd192aWV3X21vdXNlX2dldF94ICcgK1xuICAgICAgJ3dpbmRvd192aWV3X21vdXNlX2dldF95IHdpbmRvd192aWV3c19tb3VzZV9nZXRfeCAnICtcbiAgICAgICd3aW5kb3dfdmlld3NfbW91c2VfZ2V0X3kgYXVkaW9fbGlzdGVuZXJfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fbGlzdGVuZXJfdmVsb2NpdHkgYXVkaW9fbGlzdGVuZXJfb3JpZW50YXRpb24gJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9wb3NpdGlvbiBhdWRpb19lbWl0dGVyX2NyZWF0ZSBhdWRpb19lbWl0dGVyX2ZyZWUgJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9leGlzdHMgYXVkaW9fZW1pdHRlcl9waXRjaCBhdWRpb19lbWl0dGVyX3ZlbG9jaXR5ICcgK1xuICAgICAgJ2F1ZGlvX2VtaXR0ZXJfZmFsbG9mZiBhdWRpb19lbWl0dGVyX2dhaW4gYXVkaW9fcGxheV9zb3VuZCAnICtcbiAgICAgICdhdWRpb19wbGF5X3NvdW5kX29uIGF1ZGlvX3BsYXlfc291bmRfYXQgYXVkaW9fc3RvcF9zb3VuZCAnICtcbiAgICAgICdhdWRpb19yZXN1bWVfbXVzaWMgYXVkaW9fbXVzaWNfaXNfcGxheWluZyBhdWRpb19yZXN1bWVfc291bmQgJyArXG4gICAgICAnYXVkaW9fcGF1c2Vfc291bmQgYXVkaW9fcGF1c2VfbXVzaWMgYXVkaW9fY2hhbm5lbF9udW0gJyArXG4gICAgICAnYXVkaW9fc291bmRfbGVuZ3RoIGF1ZGlvX2dldF90eXBlIGF1ZGlvX2ZhbGxvZmZfc2V0X21vZGVsICcgK1xuICAgICAgJ2F1ZGlvX3BsYXlfbXVzaWMgYXVkaW9fc3RvcF9tdXNpYyBhdWRpb19tYXN0ZXJfZ2FpbiBhdWRpb19tdXNpY19nYWluICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX2dhaW4gYXVkaW9fc291bmRfcGl0Y2ggYXVkaW9fc3RvcF9hbGwgYXVkaW9fcmVzdW1lX2FsbCAnICtcbiAgICAgICdhdWRpb19wYXVzZV9hbGwgYXVkaW9faXNfcGxheWluZyBhdWRpb19pc19wYXVzZWQgYXVkaW9fZXhpc3RzICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX3NldF90cmFja19wb3NpdGlvbiBhdWRpb19zb3VuZF9nZXRfdHJhY2tfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9nZXRfZ2FpbiBhdWRpb19lbWl0dGVyX2dldF9waXRjaCBhdWRpb19lbWl0dGVyX2dldF94ICcgK1xuICAgICAgJ2F1ZGlvX2VtaXR0ZXJfZ2V0X3kgYXVkaW9fZW1pdHRlcl9nZXRfeiBhdWRpb19lbWl0dGVyX2dldF92eCAnICtcbiAgICAgICdhdWRpb19lbWl0dGVyX2dldF92eSBhdWRpb19lbWl0dGVyX2dldF92eiAnICtcbiAgICAgICdhdWRpb19saXN0ZW5lcl9zZXRfcG9zaXRpb24gYXVkaW9fbGlzdGVuZXJfc2V0X3ZlbG9jaXR5ICcgK1xuICAgICAgJ2F1ZGlvX2xpc3RlbmVyX3NldF9vcmllbnRhdGlvbiBhdWRpb19saXN0ZW5lcl9nZXRfZGF0YSAnICtcbiAgICAgICdhdWRpb19zZXRfbWFzdGVyX2dhaW4gYXVkaW9fZ2V0X21hc3Rlcl9nYWluIGF1ZGlvX3NvdW5kX2dldF9nYWluICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX2dldF9waXRjaCBhdWRpb19nZXRfbmFtZSBhdWRpb19zb3VuZF9zZXRfdHJhY2tfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fc291bmRfZ2V0X3RyYWNrX3Bvc2l0aW9uIGF1ZGlvX2NyZWF0ZV9zdHJlYW0gJyArXG4gICAgICAnYXVkaW9fZGVzdHJveV9zdHJlYW0gYXVkaW9fY3JlYXRlX3N5bmNfZ3JvdXAgJyArXG4gICAgICAnYXVkaW9fZGVzdHJveV9zeW5jX2dyb3VwIGF1ZGlvX3BsYXlfaW5fc3luY19ncm91cCAnICtcbiAgICAgICdhdWRpb19zdGFydF9zeW5jX2dyb3VwIGF1ZGlvX3N0b3Bfc3luY19ncm91cCBhdWRpb19wYXVzZV9zeW5jX2dyb3VwICcgK1xuICAgICAgJ2F1ZGlvX3Jlc3VtZV9zeW5jX2dyb3VwIGF1ZGlvX3N5bmNfZ3JvdXBfZ2V0X3RyYWNrX3BvcyAnICtcbiAgICAgICdhdWRpb19zeW5jX2dyb3VwX2RlYnVnIGF1ZGlvX3N5bmNfZ3JvdXBfaXNfcGxheWluZyBhdWRpb19kZWJ1ZyAnICtcbiAgICAgICdhdWRpb19ncm91cF9sb2FkIGF1ZGlvX2dyb3VwX3VubG9hZCBhdWRpb19ncm91cF9pc19sb2FkZWQgJyArXG4gICAgICAnYXVkaW9fZ3JvdXBfbG9hZF9wcm9ncmVzcyBhdWRpb19ncm91cF9uYW1lIGF1ZGlvX2dyb3VwX3N0b3BfYWxsICcgK1xuICAgICAgJ2F1ZGlvX2dyb3VwX3NldF9nYWluIGF1ZGlvX2NyZWF0ZV9idWZmZXJfc291bmQgJyArXG4gICAgICAnYXVkaW9fZnJlZV9idWZmZXJfc291bmQgYXVkaW9fY3JlYXRlX3BsYXlfcXVldWUgJyArXG4gICAgICAnYXVkaW9fZnJlZV9wbGF5X3F1ZXVlIGF1ZGlvX3F1ZXVlX3NvdW5kIGF1ZGlvX2dldF9yZWNvcmRlcl9jb3VudCAnICtcbiAgICAgICdhdWRpb19nZXRfcmVjb3JkZXJfaW5mbyBhdWRpb19zdGFydF9yZWNvcmRpbmcgYXVkaW9fc3RvcF9yZWNvcmRpbmcgJyArXG4gICAgICAnYXVkaW9fc291bmRfZ2V0X2xpc3RlbmVyX21hc2sgYXVkaW9fZW1pdHRlcl9nZXRfbGlzdGVuZXJfbWFzayAnICtcbiAgICAgICdhdWRpb19nZXRfbGlzdGVuZXJfbWFzayBhdWRpb19zb3VuZF9zZXRfbGlzdGVuZXJfbWFzayAnICtcbiAgICAgICdhdWRpb19lbWl0dGVyX3NldF9saXN0ZW5lcl9tYXNrIGF1ZGlvX3NldF9saXN0ZW5lcl9tYXNrICcgK1xuICAgICAgJ2F1ZGlvX2dldF9saXN0ZW5lcl9jb3VudCBhdWRpb19nZXRfbGlzdGVuZXJfaW5mbyBhdWRpb19zeXN0ZW0gJyArXG4gICAgICAnc2hvd19tZXNzYWdlIHNob3dfbWVzc2FnZV9hc3luYyBjbGlja2FibGVfYWRkIGNsaWNrYWJsZV9hZGRfZXh0ICcgK1xuICAgICAgJ2NsaWNrYWJsZV9jaGFuZ2UgY2xpY2thYmxlX2NoYW5nZV9leHQgY2xpY2thYmxlX2RlbGV0ZSAnICtcbiAgICAgICdjbGlja2FibGVfZXhpc3RzIGNsaWNrYWJsZV9zZXRfc3R5bGUgc2hvd19xdWVzdGlvbiAnICtcbiAgICAgICdzaG93X3F1ZXN0aW9uX2FzeW5jIGdldF9pbnRlZ2VyIGdldF9zdHJpbmcgZ2V0X2ludGVnZXJfYXN5bmMgJyArXG4gICAgICAnZ2V0X3N0cmluZ19hc3luYyBnZXRfbG9naW5fYXN5bmMgZ2V0X29wZW5fZmlsZW5hbWUgZ2V0X3NhdmVfZmlsZW5hbWUgJyArXG4gICAgICAnZ2V0X29wZW5fZmlsZW5hbWVfZXh0IGdldF9zYXZlX2ZpbGVuYW1lX2V4dCBzaG93X2Vycm9yICcgK1xuICAgICAgJ2hpZ2hzY29yZV9jbGVhciBoaWdoc2NvcmVfYWRkIGhpZ2hzY29yZV92YWx1ZSBoaWdoc2NvcmVfbmFtZSAnICtcbiAgICAgICdkcmF3X2hpZ2hzY29yZSBzcHJpdGVfZXhpc3RzIHNwcml0ZV9nZXRfbmFtZSBzcHJpdGVfZ2V0X251bWJlciAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3dpZHRoIHNwcml0ZV9nZXRfaGVpZ2h0IHNwcml0ZV9nZXRfeG9mZnNldCAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3lvZmZzZXQgc3ByaXRlX2dldF9iYm94X2xlZnQgc3ByaXRlX2dldF9iYm94X3JpZ2h0ICcgK1xuICAgICAgJ3Nwcml0ZV9nZXRfYmJveF90b3Agc3ByaXRlX2dldF9iYm94X2JvdHRvbSBzcHJpdGVfc2F2ZSAnICtcbiAgICAgICdzcHJpdGVfc2F2ZV9zdHJpcCBzcHJpdGVfc2V0X2NhY2hlX3NpemUgc3ByaXRlX3NldF9jYWNoZV9zaXplX2V4dCAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3RwZSBzcHJpdGVfcHJlZmV0Y2ggc3ByaXRlX3ByZWZldGNoX211bHRpIHNwcml0ZV9mbHVzaCAnICtcbiAgICAgICdzcHJpdGVfZmx1c2hfbXVsdGkgc3ByaXRlX3NldF9zcGVlZCBzcHJpdGVfZ2V0X3NwZWVkX3R5cGUgJyArXG4gICAgICAnc3ByaXRlX2dldF9zcGVlZCBmb250X2V4aXN0cyBmb250X2dldF9uYW1lIGZvbnRfZ2V0X2ZvbnRuYW1lICcgK1xuICAgICAgJ2ZvbnRfZ2V0X2JvbGQgZm9udF9nZXRfaXRhbGljIGZvbnRfZ2V0X2ZpcnN0IGZvbnRfZ2V0X2xhc3QgJyArXG4gICAgICAnZm9udF9nZXRfc2l6ZSBmb250X3NldF9jYWNoZV9zaXplIHBhdGhfZXhpc3RzIHBhdGhfZ2V0X25hbWUgJyArXG4gICAgICAncGF0aF9nZXRfbGVuZ3RoIHBhdGhfZ2V0X3RpbWUgcGF0aF9nZXRfa2luZCBwYXRoX2dldF9jbG9zZWQgJyArXG4gICAgICAncGF0aF9nZXRfcHJlY2lzaW9uIHBhdGhfZ2V0X251bWJlciBwYXRoX2dldF9wb2ludF94IHBhdGhfZ2V0X3BvaW50X3kgJyArXG4gICAgICAncGF0aF9nZXRfcG9pbnRfc3BlZWQgcGF0aF9nZXRfeCBwYXRoX2dldF95IHBhdGhfZ2V0X3NwZWVkICcgK1xuICAgICAgJ3NjcmlwdF9leGlzdHMgc2NyaXB0X2dldF9uYW1lIHRpbWVsaW5lX2FkZCB0aW1lbGluZV9kZWxldGUgJyArXG4gICAgICAndGltZWxpbmVfY2xlYXIgdGltZWxpbmVfZXhpc3RzIHRpbWVsaW5lX2dldF9uYW1lICcgK1xuICAgICAgJ3RpbWVsaW5lX21vbWVudF9jbGVhciB0aW1lbGluZV9tb21lbnRfYWRkX3NjcmlwdCB0aW1lbGluZV9zaXplICcgK1xuICAgICAgJ3RpbWVsaW5lX21heF9tb21lbnQgb2JqZWN0X2V4aXN0cyBvYmplY3RfZ2V0X25hbWUgb2JqZWN0X2dldF9zcHJpdGUgJyArXG4gICAgICAnb2JqZWN0X2dldF9zb2xpZCBvYmplY3RfZ2V0X3Zpc2libGUgb2JqZWN0X2dldF9wZXJzaXN0ZW50ICcgK1xuICAgICAgJ29iamVjdF9nZXRfbWFzayBvYmplY3RfZ2V0X3BhcmVudCBvYmplY3RfZ2V0X3BoeXNpY3MgJyArXG4gICAgICAnb2JqZWN0X2lzX2FuY2VzdG9yIHJvb21fZXhpc3RzIHJvb21fZ2V0X25hbWUgc3ByaXRlX3NldF9vZmZzZXQgJyArXG4gICAgICAnc3ByaXRlX2R1cGxpY2F0ZSBzcHJpdGVfYXNzaWduIHNwcml0ZV9tZXJnZSBzcHJpdGVfYWRkICcgK1xuICAgICAgJ3Nwcml0ZV9yZXBsYWNlIHNwcml0ZV9jcmVhdGVfZnJvbV9zdXJmYWNlIHNwcml0ZV9hZGRfZnJvbV9zdXJmYWNlICcgK1xuICAgICAgJ3Nwcml0ZV9kZWxldGUgc3ByaXRlX3NldF9hbHBoYV9mcm9tX3Nwcml0ZSBzcHJpdGVfY29sbGlzaW9uX21hc2sgJyArXG4gICAgICAnZm9udF9hZGRfZW5hYmxlX2FhIGZvbnRfYWRkX2dldF9lbmFibGVfYWEgZm9udF9hZGQgZm9udF9hZGRfc3ByaXRlICcgK1xuICAgICAgJ2ZvbnRfYWRkX3Nwcml0ZV9leHQgZm9udF9yZXBsYWNlIGZvbnRfcmVwbGFjZV9zcHJpdGUgJyArXG4gICAgICAnZm9udF9yZXBsYWNlX3Nwcml0ZV9leHQgZm9udF9kZWxldGUgcGF0aF9zZXRfa2luZCBwYXRoX3NldF9jbG9zZWQgJyArXG4gICAgICAncGF0aF9zZXRfcHJlY2lzaW9uIHBhdGhfYWRkIHBhdGhfYXNzaWduIHBhdGhfZHVwbGljYXRlIHBhdGhfYXBwZW5kICcgK1xuICAgICAgJ3BhdGhfZGVsZXRlIHBhdGhfYWRkX3BvaW50IHBhdGhfaW5zZXJ0X3BvaW50IHBhdGhfY2hhbmdlX3BvaW50ICcgK1xuICAgICAgJ3BhdGhfZGVsZXRlX3BvaW50IHBhdGhfY2xlYXJfcG9pbnRzIHBhdGhfcmV2ZXJzZSBwYXRoX21pcnJvciAnICtcbiAgICAgICdwYXRoX2ZsaXAgcGF0aF9yb3RhdGUgcGF0aF9yZXNjYWxlIHBhdGhfc2hpZnQgc2NyaXB0X2V4ZWN1dGUgJyArXG4gICAgICAnb2JqZWN0X3NldF9zcHJpdGUgb2JqZWN0X3NldF9zb2xpZCBvYmplY3Rfc2V0X3Zpc2libGUgJyArXG4gICAgICAnb2JqZWN0X3NldF9wZXJzaXN0ZW50IG9iamVjdF9zZXRfbWFzayByb29tX3NldF93aWR0aCByb29tX3NldF9oZWlnaHQgJyArXG4gICAgICAncm9vbV9zZXRfcGVyc2lzdGVudCByb29tX3NldF9iYWNrZ3JvdW5kX2NvbG91ciAnICtcbiAgICAgICdyb29tX3NldF9iYWNrZ3JvdW5kX2NvbG9yIHJvb21fc2V0X3ZpZXcgcm9vbV9zZXRfdmlld3BvcnQgJyArXG4gICAgICAncm9vbV9nZXRfdmlld3BvcnQgcm9vbV9zZXRfdmlld19lbmFibGVkIHJvb21fYWRkIHJvb21fZHVwbGljYXRlICcgK1xuICAgICAgJ3Jvb21fYXNzaWduIHJvb21faW5zdGFuY2VfYWRkIHJvb21faW5zdGFuY2VfY2xlYXIgcm9vbV9nZXRfY2FtZXJhICcgK1xuICAgICAgJ3Jvb21fc2V0X2NhbWVyYSBhc3NldF9nZXRfaW5kZXggYXNzZXRfZ2V0X3R5cGUgJyArXG4gICAgICAnZmlsZV90ZXh0X29wZW5fZnJvbV9zdHJpbmcgZmlsZV90ZXh0X29wZW5fcmVhZCBmaWxlX3RleHRfb3Blbl93cml0ZSAnICtcbiAgICAgICdmaWxlX3RleHRfb3Blbl9hcHBlbmQgZmlsZV90ZXh0X2Nsb3NlIGZpbGVfdGV4dF93cml0ZV9zdHJpbmcgJyArXG4gICAgICAnZmlsZV90ZXh0X3dyaXRlX3JlYWwgZmlsZV90ZXh0X3dyaXRlbG4gZmlsZV90ZXh0X3JlYWRfc3RyaW5nICcgK1xuICAgICAgJ2ZpbGVfdGV4dF9yZWFkX3JlYWwgZmlsZV90ZXh0X3JlYWRsbiBmaWxlX3RleHRfZW9mIGZpbGVfdGV4dF9lb2xuICcgK1xuICAgICAgJ2ZpbGVfZXhpc3RzIGZpbGVfZGVsZXRlIGZpbGVfcmVuYW1lIGZpbGVfY29weSBkaXJlY3RvcnlfZXhpc3RzICcgK1xuICAgICAgJ2RpcmVjdG9yeV9jcmVhdGUgZGlyZWN0b3J5X2Rlc3Ryb3kgZmlsZV9maW5kX2ZpcnN0IGZpbGVfZmluZF9uZXh0ICcgK1xuICAgICAgJ2ZpbGVfZmluZF9jbG9zZSBmaWxlX2F0dHJpYnV0ZXMgZmlsZW5hbWVfbmFtZSBmaWxlbmFtZV9wYXRoICcgK1xuICAgICAgJ2ZpbGVuYW1lX2RpciBmaWxlbmFtZV9kcml2ZSBmaWxlbmFtZV9leHQgZmlsZW5hbWVfY2hhbmdlX2V4dCAnICtcbiAgICAgICdmaWxlX2Jpbl9vcGVuIGZpbGVfYmluX3Jld3JpdGUgZmlsZV9iaW5fY2xvc2UgZmlsZV9iaW5fcG9zaXRpb24gJyArXG4gICAgICAnZmlsZV9iaW5fc2l6ZSBmaWxlX2Jpbl9zZWVrIGZpbGVfYmluX3dyaXRlX2J5dGUgZmlsZV9iaW5fcmVhZF9ieXRlICcgK1xuICAgICAgJ3BhcmFtZXRlcl9jb3VudCBwYXJhbWV0ZXJfc3RyaW5nIGVudmlyb25tZW50X2dldF92YXJpYWJsZSAnICtcbiAgICAgICdpbmlfb3Blbl9mcm9tX3N0cmluZyBpbmlfb3BlbiBpbmlfY2xvc2UgaW5pX3JlYWRfc3RyaW5nICcgK1xuICAgICAgJ2luaV9yZWFkX3JlYWwgaW5pX3dyaXRlX3N0cmluZyBpbmlfd3JpdGVfcmVhbCBpbmlfa2V5X2V4aXN0cyAnICtcbiAgICAgICdpbmlfc2VjdGlvbl9leGlzdHMgaW5pX2tleV9kZWxldGUgaW5pX3NlY3Rpb25fZGVsZXRlICcgK1xuICAgICAgJ2RzX3NldF9wcmVjaXNpb24gZHNfZXhpc3RzIGRzX3N0YWNrX2NyZWF0ZSBkc19zdGFja19kZXN0cm95ICcgK1xuICAgICAgJ2RzX3N0YWNrX2NsZWFyIGRzX3N0YWNrX2NvcHkgZHNfc3RhY2tfc2l6ZSBkc19zdGFja19lbXB0eSAnICtcbiAgICAgICdkc19zdGFja19wdXNoIGRzX3N0YWNrX3BvcCBkc19zdGFja190b3AgZHNfc3RhY2tfd3JpdGUgZHNfc3RhY2tfcmVhZCAnICtcbiAgICAgICdkc19xdWV1ZV9jcmVhdGUgZHNfcXVldWVfZGVzdHJveSBkc19xdWV1ZV9jbGVhciBkc19xdWV1ZV9jb3B5ICcgK1xuICAgICAgJ2RzX3F1ZXVlX3NpemUgZHNfcXVldWVfZW1wdHkgZHNfcXVldWVfZW5xdWV1ZSBkc19xdWV1ZV9kZXF1ZXVlICcgK1xuICAgICAgJ2RzX3F1ZXVlX2hlYWQgZHNfcXVldWVfdGFpbCBkc19xdWV1ZV93cml0ZSBkc19xdWV1ZV9yZWFkICcgK1xuICAgICAgJ2RzX2xpc3RfY3JlYXRlIGRzX2xpc3RfZGVzdHJveSBkc19saXN0X2NsZWFyIGRzX2xpc3RfY29weSAnICtcbiAgICAgICdkc19saXN0X3NpemUgZHNfbGlzdF9lbXB0eSBkc19saXN0X2FkZCBkc19saXN0X2luc2VydCAnICtcbiAgICAgICdkc19saXN0X3JlcGxhY2UgZHNfbGlzdF9kZWxldGUgZHNfbGlzdF9maW5kX2luZGV4IGRzX2xpc3RfZmluZF92YWx1ZSAnICtcbiAgICAgICdkc19saXN0X21hcmtfYXNfbGlzdCBkc19saXN0X21hcmtfYXNfbWFwIGRzX2xpc3Rfc29ydCAnICtcbiAgICAgICdkc19saXN0X3NodWZmbGUgZHNfbGlzdF93cml0ZSBkc19saXN0X3JlYWQgZHNfbGlzdF9zZXQgZHNfbWFwX2NyZWF0ZSAnICtcbiAgICAgICdkc19tYXBfZGVzdHJveSBkc19tYXBfY2xlYXIgZHNfbWFwX2NvcHkgZHNfbWFwX3NpemUgZHNfbWFwX2VtcHR5ICcgK1xuICAgICAgJ2RzX21hcF9hZGQgZHNfbWFwX2FkZF9saXN0IGRzX21hcF9hZGRfbWFwIGRzX21hcF9yZXBsYWNlICcgK1xuICAgICAgJ2RzX21hcF9yZXBsYWNlX21hcCBkc19tYXBfcmVwbGFjZV9saXN0IGRzX21hcF9kZWxldGUgZHNfbWFwX2V4aXN0cyAnICtcbiAgICAgICdkc19tYXBfZmluZF92YWx1ZSBkc19tYXBfZmluZF9wcmV2aW91cyBkc19tYXBfZmluZF9uZXh0ICcgK1xuICAgICAgJ2RzX21hcF9maW5kX2ZpcnN0IGRzX21hcF9maW5kX2xhc3QgZHNfbWFwX3dyaXRlIGRzX21hcF9yZWFkICcgK1xuICAgICAgJ2RzX21hcF9zZWN1cmVfc2F2ZSBkc19tYXBfc2VjdXJlX2xvYWQgZHNfbWFwX3NlY3VyZV9sb2FkX2J1ZmZlciAnICtcbiAgICAgICdkc19tYXBfc2VjdXJlX3NhdmVfYnVmZmVyIGRzX21hcF9zZXQgZHNfcHJpb3JpdHlfY3JlYXRlICcgK1xuICAgICAgJ2RzX3ByaW9yaXR5X2Rlc3Ryb3kgZHNfcHJpb3JpdHlfY2xlYXIgZHNfcHJpb3JpdHlfY29weSAnICtcbiAgICAgICdkc19wcmlvcml0eV9zaXplIGRzX3ByaW9yaXR5X2VtcHR5IGRzX3ByaW9yaXR5X2FkZCAnICtcbiAgICAgICdkc19wcmlvcml0eV9jaGFuZ2VfcHJpb3JpdHkgZHNfcHJpb3JpdHlfZmluZF9wcmlvcml0eSAnICtcbiAgICAgICdkc19wcmlvcml0eV9kZWxldGVfdmFsdWUgZHNfcHJpb3JpdHlfZGVsZXRlX21pbiBkc19wcmlvcml0eV9maW5kX21pbiAnICtcbiAgICAgICdkc19wcmlvcml0eV9kZWxldGVfbWF4IGRzX3ByaW9yaXR5X2ZpbmRfbWF4IGRzX3ByaW9yaXR5X3dyaXRlICcgK1xuICAgICAgJ2RzX3ByaW9yaXR5X3JlYWQgZHNfZ3JpZF9jcmVhdGUgZHNfZ3JpZF9kZXN0cm95IGRzX2dyaWRfY29weSAnICtcbiAgICAgICdkc19ncmlkX3Jlc2l6ZSBkc19ncmlkX3dpZHRoIGRzX2dyaWRfaGVpZ2h0IGRzX2dyaWRfY2xlYXIgJyArXG4gICAgICAnZHNfZ3JpZF9zZXQgZHNfZ3JpZF9hZGQgZHNfZ3JpZF9tdWx0aXBseSBkc19ncmlkX3NldF9yZWdpb24gJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfcmVnaW9uIGRzX2dyaWRfbXVsdGlwbHlfcmVnaW9uIGRzX2dyaWRfc2V0X2Rpc2sgJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfZGlzayBkc19ncmlkX211bHRpcGx5X2Rpc2sgZHNfZ3JpZF9zZXRfZ3JpZF9yZWdpb24gJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfZ3JpZF9yZWdpb24gZHNfZ3JpZF9tdWx0aXBseV9ncmlkX3JlZ2lvbiBkc19ncmlkX2dldCAnICtcbiAgICAgICdkc19ncmlkX2dldF9zdW0gZHNfZ3JpZF9nZXRfbWF4IGRzX2dyaWRfZ2V0X21pbiBkc19ncmlkX2dldF9tZWFuICcgK1xuICAgICAgJ2RzX2dyaWRfZ2V0X2Rpc2tfc3VtIGRzX2dyaWRfZ2V0X2Rpc2tfbWluIGRzX2dyaWRfZ2V0X2Rpc2tfbWF4ICcgK1xuICAgICAgJ2RzX2dyaWRfZ2V0X2Rpc2tfbWVhbiBkc19ncmlkX3ZhbHVlX2V4aXN0cyBkc19ncmlkX3ZhbHVlX3ggJyArXG4gICAgICAnZHNfZ3JpZF92YWx1ZV95IGRzX2dyaWRfdmFsdWVfZGlza19leGlzdHMgZHNfZ3JpZF92YWx1ZV9kaXNrX3ggJyArXG4gICAgICAnZHNfZ3JpZF92YWx1ZV9kaXNrX3kgZHNfZ3JpZF9zaHVmZmxlIGRzX2dyaWRfd3JpdGUgZHNfZ3JpZF9yZWFkICcgK1xuICAgICAgJ2RzX2dyaWRfc29ydCBkc19ncmlkX3NldCBkc19ncmlkX2dldCBlZmZlY3RfY3JlYXRlX2JlbG93ICcgK1xuICAgICAgJ2VmZmVjdF9jcmVhdGVfYWJvdmUgZWZmZWN0X2NsZWFyIHBhcnRfdHlwZV9jcmVhdGUgcGFydF90eXBlX2Rlc3Ryb3kgJyArXG4gICAgICAncGFydF90eXBlX2V4aXN0cyBwYXJ0X3R5cGVfY2xlYXIgcGFydF90eXBlX3NoYXBlIHBhcnRfdHlwZV9zcHJpdGUgJyArXG4gICAgICAncGFydF90eXBlX3NpemUgcGFydF90eXBlX3NjYWxlIHBhcnRfdHlwZV9vcmllbnRhdGlvbiBwYXJ0X3R5cGVfbGlmZSAnICtcbiAgICAgICdwYXJ0X3R5cGVfc3RlcCBwYXJ0X3R5cGVfZGVhdGggcGFydF90eXBlX3NwZWVkIHBhcnRfdHlwZV9kaXJlY3Rpb24gJyArXG4gICAgICAncGFydF90eXBlX2dyYXZpdHkgcGFydF90eXBlX2NvbG91cjEgcGFydF90eXBlX2NvbG91cjIgJyArXG4gICAgICAncGFydF90eXBlX2NvbG91cjMgcGFydF90eXBlX2NvbG91cl9taXggcGFydF90eXBlX2NvbG91cl9yZ2IgJyArXG4gICAgICAncGFydF90eXBlX2NvbG91cl9oc3YgcGFydF90eXBlX2NvbG9yMSBwYXJ0X3R5cGVfY29sb3IyICcgK1xuICAgICAgJ3BhcnRfdHlwZV9jb2xvcjMgcGFydF90eXBlX2NvbG9yX21peCBwYXJ0X3R5cGVfY29sb3JfcmdiICcgK1xuICAgICAgJ3BhcnRfdHlwZV9jb2xvcl9oc3YgcGFydF90eXBlX2FscGhhMSBwYXJ0X3R5cGVfYWxwaGEyICcgK1xuICAgICAgJ3BhcnRfdHlwZV9hbHBoYTMgcGFydF90eXBlX2JsZW5kIHBhcnRfc3lzdGVtX2NyZWF0ZSAnICtcbiAgICAgICdwYXJ0X3N5c3RlbV9jcmVhdGVfbGF5ZXIgcGFydF9zeXN0ZW1fZGVzdHJveSBwYXJ0X3N5c3RlbV9leGlzdHMgJyArXG4gICAgICAncGFydF9zeXN0ZW1fY2xlYXIgcGFydF9zeXN0ZW1fZHJhd19vcmRlciBwYXJ0X3N5c3RlbV9kZXB0aCAnICtcbiAgICAgICdwYXJ0X3N5c3RlbV9wb3NpdGlvbiBwYXJ0X3N5c3RlbV9hdXRvbWF0aWNfdXBkYXRlICcgK1xuICAgICAgJ3BhcnRfc3lzdGVtX2F1dG9tYXRpY19kcmF3IHBhcnRfc3lzdGVtX3VwZGF0ZSBwYXJ0X3N5c3RlbV9kcmF3aXQgJyArXG4gICAgICAncGFydF9zeXN0ZW1fZ2V0X2xheWVyIHBhcnRfc3lzdGVtX2xheWVyIHBhcnRfcGFydGljbGVzX2NyZWF0ZSAnICtcbiAgICAgICdwYXJ0X3BhcnRpY2xlc19jcmVhdGVfY29sb3VyIHBhcnRfcGFydGljbGVzX2NyZWF0ZV9jb2xvciAnICtcbiAgICAgICdwYXJ0X3BhcnRpY2xlc19jbGVhciBwYXJ0X3BhcnRpY2xlc19jb3VudCBwYXJ0X2VtaXR0ZXJfY3JlYXRlICcgK1xuICAgICAgJ3BhcnRfZW1pdHRlcl9kZXN0cm95IHBhcnRfZW1pdHRlcl9kZXN0cm95X2FsbCBwYXJ0X2VtaXR0ZXJfZXhpc3RzICcgK1xuICAgICAgJ3BhcnRfZW1pdHRlcl9jbGVhciBwYXJ0X2VtaXR0ZXJfcmVnaW9uIHBhcnRfZW1pdHRlcl9idXJzdCAnICtcbiAgICAgICdwYXJ0X2VtaXR0ZXJfc3RyZWFtIGV4dGVybmFsX2NhbGwgZXh0ZXJuYWxfZGVmaW5lIGV4dGVybmFsX2ZyZWUgJyArXG4gICAgICAnd2luZG93X2hhbmRsZSB3aW5kb3dfZGV2aWNlIG1hdHJpeF9nZXQgbWF0cml4X3NldCAnICtcbiAgICAgICdtYXRyaXhfYnVpbGRfaWRlbnRpdHkgbWF0cml4X2J1aWxkIG1hdHJpeF9idWlsZF9sb29rYXQgJyArXG4gICAgICAnbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fb3J0aG8gbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmUgJyArXG4gICAgICAnbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmVfZm92IG1hdHJpeF9tdWx0aXBseSAnICtcbiAgICAgICdtYXRyaXhfdHJhbnNmb3JtX3ZlcnRleCBtYXRyaXhfc3RhY2tfcHVzaCBtYXRyaXhfc3RhY2tfcG9wICcgK1xuICAgICAgJ21hdHJpeF9zdGFja19tdWx0aXBseSBtYXRyaXhfc3RhY2tfc2V0IG1hdHJpeF9zdGFja19jbGVhciAnICtcbiAgICAgICdtYXRyaXhfc3RhY2tfdG9wIG1hdHJpeF9zdGFja19pc19lbXB0eSBicm93c2VyX2lucHV0X2NhcHR1cmUgJyArXG4gICAgICAnb3NfZ2V0X2NvbmZpZyBvc19nZXRfaW5mbyBvc19nZXRfbGFuZ3VhZ2Ugb3NfZ2V0X3JlZ2lvbiAnICtcbiAgICAgICdvc19sb2NrX29yaWVudGF0aW9uIGRpc3BsYXlfZ2V0X2RwaV94IGRpc3BsYXlfZ2V0X2RwaV95ICcgK1xuICAgICAgJ2Rpc3BsYXlfc2V0X2d1aV9zaXplIGRpc3BsYXlfc2V0X2d1aV9tYXhpbWlzZSAnICtcbiAgICAgICdkaXNwbGF5X3NldF9ndWlfbWF4aW1pemUgZGV2aWNlX21vdXNlX2RiY2xpY2tfZW5hYmxlICcgK1xuICAgICAgJ2Rpc3BsYXlfc2V0X3RpbWluZ19tZXRob2QgZGlzcGxheV9nZXRfdGltaW5nX21ldGhvZCAnICtcbiAgICAgICdkaXNwbGF5X3NldF9zbGVlcF9tYXJnaW4gZGlzcGxheV9nZXRfc2xlZXBfbWFyZ2luIHZpcnR1YWxfa2V5X2FkZCAnICtcbiAgICAgICd2aXJ0dWFsX2tleV9oaWRlIHZpcnR1YWxfa2V5X2RlbGV0ZSB2aXJ0dWFsX2tleV9zaG93ICcgK1xuICAgICAgJ2RyYXdfZW5hYmxlX2RyYXdldmVudCBkcmF3X2VuYWJsZV9zd2ZfYWEgZHJhd19zZXRfc3dmX2FhX2xldmVsICcgK1xuICAgICAgJ2RyYXdfZ2V0X3N3Zl9hYV9sZXZlbCBkcmF3X3RleHR1cmVfZmx1c2ggZHJhd19mbHVzaCAnICtcbiAgICAgICdncHVfc2V0X2JsZW5kZW5hYmxlIGdwdV9zZXRfenRlc3RlbmFibGUgZ3B1X3NldF96ZnVuYyAnICtcbiAgICAgICdncHVfc2V0X3p3cml0ZWVuYWJsZSBncHVfc2V0X2xpZ2h0aW5nZW5hYmxlIGdwdV9zZXRfZm9nICcgK1xuICAgICAgJ2dwdV9zZXRfY3VsbG1vZGUgZ3B1X3NldF9ibGVuZG1vZGUgZ3B1X3NldF9ibGVuZG1vZGVfZXh0ICcgK1xuICAgICAgJ2dwdV9zZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfc2V0X2NvbG9yd3JpdGVlbmFibGUgJyArXG4gICAgICAnZ3B1X3NldF9jb2xvdXJ3cml0ZWVuYWJsZSBncHVfc2V0X2FscGhhdGVzdGVuYWJsZSAnICtcbiAgICAgICdncHVfc2V0X2FscGhhdGVzdHJlZiBncHVfc2V0X2FscGhhdGVzdGZ1bmMgZ3B1X3NldF90ZXhmaWx0ZXIgJyArXG4gICAgICAnZ3B1X3NldF90ZXhmaWx0ZXJfZXh0IGdwdV9zZXRfdGV4cmVwZWF0IGdwdV9zZXRfdGV4cmVwZWF0X2V4dCAnICtcbiAgICAgICdncHVfc2V0X3RleF9maWx0ZXIgZ3B1X3NldF90ZXhfZmlsdGVyX2V4dCBncHVfc2V0X3RleF9yZXBlYXQgJyArXG4gICAgICAnZ3B1X3NldF90ZXhfcmVwZWF0X2V4dCBncHVfc2V0X3RleF9taXBfZmlsdGVyICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21pcF9maWx0ZXJfZXh0IGdwdV9zZXRfdGV4X21pcF9iaWFzICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21pcF9iaWFzX2V4dCBncHVfc2V0X3RleF9taW5fbWlwIGdwdV9zZXRfdGV4X21pbl9taXBfZXh0ICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21heF9taXAgZ3B1X3NldF90ZXhfbWF4X21pcF9leHQgZ3B1X3NldF90ZXhfbWF4X2FuaXNvICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21heF9hbmlzb19leHQgZ3B1X3NldF90ZXhfbWlwX2VuYWJsZSAnICtcbiAgICAgICdncHVfc2V0X3RleF9taXBfZW5hYmxlX2V4dCBncHVfZ2V0X2JsZW5kZW5hYmxlIGdwdV9nZXRfenRlc3RlbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF96ZnVuYyBncHVfZ2V0X3p3cml0ZWVuYWJsZSBncHVfZ2V0X2xpZ2h0aW5nZW5hYmxlICcgK1xuICAgICAgJ2dwdV9nZXRfZm9nIGdwdV9nZXRfY3VsbG1vZGUgZ3B1X2dldF9ibGVuZG1vZGUgZ3B1X2dldF9ibGVuZG1vZGVfZXh0ICcgK1xuICAgICAgJ2dwdV9nZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfZ2V0X2JsZW5kbW9kZV9zcmMgJyArXG4gICAgICAnZ3B1X2dldF9ibGVuZG1vZGVfZGVzdCBncHVfZ2V0X2JsZW5kbW9kZV9zcmNhbHBoYSAnICtcbiAgICAgICdncHVfZ2V0X2JsZW5kbW9kZV9kZXN0YWxwaGEgZ3B1X2dldF9jb2xvcndyaXRlZW5hYmxlICcgK1xuICAgICAgJ2dwdV9nZXRfY29sb3Vyd3JpdGVlbmFibGUgZ3B1X2dldF9hbHBoYXRlc3RlbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF9hbHBoYXRlc3RyZWYgZ3B1X2dldF9hbHBoYXRlc3RmdW5jIGdwdV9nZXRfdGV4ZmlsdGVyICcgK1xuICAgICAgJ2dwdV9nZXRfdGV4ZmlsdGVyX2V4dCBncHVfZ2V0X3RleHJlcGVhdCBncHVfZ2V0X3RleHJlcGVhdF9leHQgJyArXG4gICAgICAnZ3B1X2dldF90ZXhfZmlsdGVyIGdwdV9nZXRfdGV4X2ZpbHRlcl9leHQgZ3B1X2dldF90ZXhfcmVwZWF0ICcgK1xuICAgICAgJ2dwdV9nZXRfdGV4X3JlcGVhdF9leHQgZ3B1X2dldF90ZXhfbWlwX2ZpbHRlciAnICtcbiAgICAgICdncHVfZ2V0X3RleF9taXBfZmlsdGVyX2V4dCBncHVfZ2V0X3RleF9taXBfYmlhcyAnICtcbiAgICAgICdncHVfZ2V0X3RleF9taXBfYmlhc19leHQgZ3B1X2dldF90ZXhfbWluX21pcCBncHVfZ2V0X3RleF9taW5fbWlwX2V4dCAnICtcbiAgICAgICdncHVfZ2V0X3RleF9tYXhfbWlwIGdwdV9nZXRfdGV4X21heF9taXBfZXh0IGdwdV9nZXRfdGV4X21heF9hbmlzbyAnICtcbiAgICAgICdncHVfZ2V0X3RleF9tYXhfYW5pc29fZXh0IGdwdV9nZXRfdGV4X21pcF9lbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF90ZXhfbWlwX2VuYWJsZV9leHQgZ3B1X3B1c2hfc3RhdGUgZ3B1X3BvcF9zdGF0ZSAnICtcbiAgICAgICdncHVfZ2V0X3N0YXRlIGdwdV9zZXRfc3RhdGUgZHJhd19saWdodF9kZWZpbmVfYW1iaWVudCAnICtcbiAgICAgICdkcmF3X2xpZ2h0X2RlZmluZV9kaXJlY3Rpb24gZHJhd19saWdodF9kZWZpbmVfcG9pbnQgJyArXG4gICAgICAnZHJhd19saWdodF9lbmFibGUgZHJhd19zZXRfbGlnaHRpbmcgZHJhd19saWdodF9nZXRfYW1iaWVudCAnICtcbiAgICAgICdkcmF3X2xpZ2h0X2dldCBkcmF3X2dldF9saWdodGluZyBzaG9wX2xlYXZlX3JhdGluZyB1cmxfZ2V0X2RvbWFpbiAnICtcbiAgICAgICd1cmxfb3BlbiB1cmxfb3Blbl9leHQgdXJsX29wZW5fZnVsbCBnZXRfdGltZXIgYWNoaWV2ZW1lbnRfbG9naW4gJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfbG9nb3V0IGFjaGlldmVtZW50X3Bvc3QgYWNoaWV2ZW1lbnRfaW5jcmVtZW50ICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3Bvc3Rfc2NvcmUgYWNoaWV2ZW1lbnRfYXZhaWxhYmxlICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnRzIGFjaGlldmVtZW50X3Nob3dfbGVhZGVyYm9hcmRzICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2xvYWRfZnJpZW5kcyBhY2hpZXZlbWVudF9sb2FkX2xlYWRlcmJvYXJkICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3NlbmRfY2hhbGxlbmdlIGFjaGlldmVtZW50X2xvYWRfcHJvZ3Jlc3MgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfcmVzZXQgYWNoaWV2ZW1lbnRfbG9naW5fc3RhdHVzIGFjaGlldmVtZW50X2dldF9waWMgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfc2hvd19jaGFsbGVuZ2Vfbm90aWZpY2F0aW9ucyBhY2hpZXZlbWVudF9nZXRfY2hhbGxlbmdlcyAnICtcbiAgICAgICdhY2hpZXZlbWVudF9ldmVudCBhY2hpZXZlbWVudF9zaG93IGFjaGlldmVtZW50X2dldF9pbmZvICcgK1xuICAgICAgJ2Nsb3VkX2ZpbGVfc2F2ZSBjbG91ZF9zdHJpbmdfc2F2ZSBjbG91ZF9zeW5jaHJvbmlzZSBhZHNfZW5hYmxlICcgK1xuICAgICAgJ2Fkc19kaXNhYmxlIGFkc19zZXR1cCBhZHNfZW5nYWdlbWVudF9sYXVuY2ggYWRzX2VuZ2FnZW1lbnRfYXZhaWxhYmxlICcgK1xuICAgICAgJ2Fkc19lbmdhZ2VtZW50X2FjdGl2ZSBhZHNfZXZlbnQgYWRzX2V2ZW50X3ByZWxvYWQgJyArXG4gICAgICAnYWRzX3NldF9yZXdhcmRfY2FsbGJhY2sgYWRzX2dldF9kaXNwbGF5X2hlaWdodCBhZHNfZ2V0X2Rpc3BsYXlfd2lkdGggJyArXG4gICAgICAnYWRzX21vdmUgYWRzX2ludGVyc3RpdGlhbF9hdmFpbGFibGUgYWRzX2ludGVyc3RpdGlhbF9kaXNwbGF5ICcgK1xuICAgICAgJ2RldmljZV9nZXRfdGlsdF94IGRldmljZV9nZXRfdGlsdF95IGRldmljZV9nZXRfdGlsdF96ICcgK1xuICAgICAgJ2RldmljZV9pc19rZXlwYWRfb3BlbiBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uICcgK1xuICAgICAgJ2RldmljZV9tb3VzZV9jaGVja19idXR0b25fcHJlc3NlZCBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uX3JlbGVhc2VkICcgK1xuICAgICAgJ2RldmljZV9tb3VzZV94IGRldmljZV9tb3VzZV95IGRldmljZV9tb3VzZV9yYXdfeCBkZXZpY2VfbW91c2VfcmF3X3kgJyArXG4gICAgICAnZGV2aWNlX21vdXNlX3hfdG9fZ3VpIGRldmljZV9tb3VzZV95X3RvX2d1aSBpYXBfYWN0aXZhdGUgaWFwX3N0YXR1cyAnICtcbiAgICAgICdpYXBfZW51bWVyYXRlX3Byb2R1Y3RzIGlhcF9yZXN0b3JlX2FsbCBpYXBfYWNxdWlyZSBpYXBfY29uc3VtZSAnICtcbiAgICAgICdpYXBfcHJvZHVjdF9kZXRhaWxzIGlhcF9wdXJjaGFzZV9kZXRhaWxzIGZhY2Vib29rX2luaXQgJyArXG4gICAgICAnZmFjZWJvb2tfbG9naW4gZmFjZWJvb2tfc3RhdHVzIGZhY2Vib29rX2dyYXBoX3JlcXVlc3QgJyArXG4gICAgICAnZmFjZWJvb2tfZGlhbG9nIGZhY2Vib29rX2xvZ291dCBmYWNlYm9va19sYXVuY2hfb2ZmZXJ3YWxsICcgK1xuICAgICAgJ2ZhY2Vib29rX3Bvc3RfbWVzc2FnZSBmYWNlYm9va19zZW5kX2ludml0ZSBmYWNlYm9va191c2VyX2lkICcgK1xuICAgICAgJ2ZhY2Vib29rX2FjY2Vzc3Rva2VuIGZhY2Vib29rX2NoZWNrX3Blcm1pc3Npb24gJyArXG4gICAgICAnZmFjZWJvb2tfcmVxdWVzdF9yZWFkX3Blcm1pc3Npb25zICcgK1xuICAgICAgJ2ZhY2Vib29rX3JlcXVlc3RfcHVibGlzaF9wZXJtaXNzaW9ucyBnYW1lcGFkX2lzX3N1cHBvcnRlZCAnICtcbiAgICAgICdnYW1lcGFkX2dldF9kZXZpY2VfY291bnQgZ2FtZXBhZF9pc19jb25uZWN0ZWQgJyArXG4gICAgICAnZ2FtZXBhZF9nZXRfZGVzY3JpcHRpb24gZ2FtZXBhZF9nZXRfYnV0dG9uX3RocmVzaG9sZCAnICtcbiAgICAgICdnYW1lcGFkX3NldF9idXR0b25fdGhyZXNob2xkIGdhbWVwYWRfZ2V0X2F4aXNfZGVhZHpvbmUgJyArXG4gICAgICAnZ2FtZXBhZF9zZXRfYXhpc19kZWFkem9uZSBnYW1lcGFkX2J1dHRvbl9jb3VudCBnYW1lcGFkX2J1dHRvbl9jaGVjayAnICtcbiAgICAgICdnYW1lcGFkX2J1dHRvbl9jaGVja19wcmVzc2VkIGdhbWVwYWRfYnV0dG9uX2NoZWNrX3JlbGVhc2VkICcgK1xuICAgICAgJ2dhbWVwYWRfYnV0dG9uX3ZhbHVlIGdhbWVwYWRfYXhpc19jb3VudCBnYW1lcGFkX2F4aXNfdmFsdWUgJyArXG4gICAgICAnZ2FtZXBhZF9zZXRfdmlicmF0aW9uIGdhbWVwYWRfc2V0X2NvbG91ciBnYW1lcGFkX3NldF9jb2xvciAnICtcbiAgICAgICdvc19pc19wYXVzZWQgd2luZG93X2hhc19mb2N1cyBjb2RlX2lzX2NvbXBpbGVkIGh0dHBfZ2V0ICcgK1xuICAgICAgJ2h0dHBfZ2V0X2ZpbGUgaHR0cF9wb3N0X3N0cmluZyBodHRwX3JlcXVlc3QganNvbl9lbmNvZGUganNvbl9kZWNvZGUgJyArXG4gICAgICAnemlwX3VuemlwIGxvYWRfY3N2IGJhc2U2NF9lbmNvZGUgYmFzZTY0X2RlY29kZSBtZDVfc3RyaW5nX3VuaWNvZGUgJyArXG4gICAgICAnbWQ1X3N0cmluZ191dGY4IG1kNV9maWxlIG9zX2lzX25ldHdvcmtfY29ubmVjdGVkIHNoYTFfc3RyaW5nX3VuaWNvZGUgJyArXG4gICAgICAnc2hhMV9zdHJpbmdfdXRmOCBzaGExX2ZpbGUgb3NfcG93ZXJzYXZlX2VuYWJsZSBhbmFseXRpY3NfZXZlbnQgJyArXG4gICAgICAnYW5hbHl0aWNzX2V2ZW50X2V4dCB3aW44X2xpdmV0aWxlX3RpbGVfbm90aWZpY2F0aW9uICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfdGlsZV9jbGVhciB3aW44X2xpdmV0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICd3aW44X2xpdmV0aWxlX2JhZGdlX2NsZWFyIHdpbjhfbGl2ZXRpbGVfcXVldWVfZW5hYmxlICcgK1xuICAgICAgJ3dpbjhfc2Vjb25kYXJ5dGlsZV9waW4gd2luOF9zZWNvbmRhcnl0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICd3aW44X3NlY29uZGFyeXRpbGVfZGVsZXRlIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2JlZ2luICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3NlY29uZGFyeV9iZWdpbiAnICtcbiAgICAgICd3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9leHBpcnkgd2luOF9saXZldGlsZV9ub3RpZmljYXRpb25fdGFnICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3RleHRfYWRkICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2ltYWdlX2FkZCB3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9lbmQgJyArXG4gICAgICAnd2luOF9hcHBiYXJfZW5hYmxlIHdpbjhfYXBwYmFyX2FkZF9lbGVtZW50ICcgK1xuICAgICAgJ3dpbjhfYXBwYmFyX3JlbW92ZV9lbGVtZW50IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfZW50cnkgJyArXG4gICAgICAnd2luOF9zZXR0aW5nc2NoYXJtX2FkZF9odG1sX2VudHJ5IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfeGFtbF9lbnRyeSAnICtcbiAgICAgICd3aW44X3NldHRpbmdzY2hhcm1fc2V0X3hhbWxfcHJvcGVydHkgJyArXG4gICAgICAnd2luOF9zZXR0aW5nc2NoYXJtX2dldF94YW1sX3Byb3BlcnR5IHdpbjhfc2V0dGluZ3NjaGFybV9yZW1vdmVfZW50cnkgJyArXG4gICAgICAnd2luOF9zaGFyZV9pbWFnZSB3aW44X3NoYXJlX3NjcmVlbnNob3Qgd2luOF9zaGFyZV9maWxlICcgK1xuICAgICAgJ3dpbjhfc2hhcmVfdXJsIHdpbjhfc2hhcmVfdGV4dCB3aW44X3NlYXJjaF9lbmFibGUgJyArXG4gICAgICAnd2luOF9zZWFyY2hfZGlzYWJsZSB3aW44X3NlYXJjaF9hZGRfc3VnZ2VzdGlvbnMgJyArXG4gICAgICAnd2luOF9kZXZpY2VfdG91Y2hzY3JlZW5fYXZhaWxhYmxlIHdpbjhfbGljZW5zZV9pbml0aWFsaXplX3NhbmRib3ggJyArXG4gICAgICAnd2luOF9saWNlbnNlX3RyaWFsX3ZlcnNpb24gd2lucGhvbmVfbGljZW5zZV90cmlhbF92ZXJzaW9uICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfdGl0bGUgd2lucGhvbmVfdGlsZV9jb3VudCB3aW5waG9uZV90aWxlX2JhY2tfdGl0bGUgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnQgd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnRfd2lkZSAnICtcbiAgICAgICd3aW5waG9uZV90aWxlX2Zyb250X2ltYWdlIHdpbnBob25lX3RpbGVfZnJvbnRfaW1hZ2Vfc21hbGwgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9mcm9udF9pbWFnZV93aWRlIHdpbnBob25lX3RpbGVfYmFja19pbWFnZSAnICtcbiAgICAgICd3aW5waG9uZV90aWxlX2JhY2tfaW1hZ2Vfd2lkZSB3aW5waG9uZV90aWxlX2JhY2tncm91bmRfY29sb3VyICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfYmFja2dyb3VuZF9jb2xvciB3aW5waG9uZV90aWxlX2ljb25faW1hZ2UgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9zbWFsbF9pY29uX2ltYWdlIHdpbnBob25lX3RpbGVfd2lkZV9jb250ZW50ICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfY3ljbGVfaW1hZ2VzIHdpbnBob25lX3RpbGVfc21hbGxfYmFja2dyb3VuZF9pbWFnZSAnICtcbiAgICAgICdwaHlzaWNzX3dvcmxkX2NyZWF0ZSBwaHlzaWNzX3dvcmxkX2dyYXZpdHkgJyArXG4gICAgICAncGh5c2ljc193b3JsZF91cGRhdGVfc3BlZWQgcGh5c2ljc193b3JsZF91cGRhdGVfaXRlcmF0aW9ucyAnICtcbiAgICAgICdwaHlzaWNzX3dvcmxkX2RyYXdfZGVidWcgcGh5c2ljc19wYXVzZV9lbmFibGUgcGh5c2ljc19maXh0dXJlX2NyZWF0ZSAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2tpbmVtYXRpYyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2RlbnNpdHkgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9hd2FrZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X3Jlc3RpdHV0aW9uICcgK1xuICAgICAgJ3BoeXNpY3NfZml4dHVyZV9zZXRfZnJpY3Rpb24gcGh5c2ljc19maXh0dXJlX3NldF9jb2xsaXNpb25fZ3JvdXAgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9zZW5zb3IgcGh5c2ljc19maXh0dXJlX3NldF9saW5lYXJfZGFtcGluZyAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2FuZ3VsYXJfZGFtcGluZyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2NpcmNsZV9zaGFwZSAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2JveF9zaGFwZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X2VkZ2Vfc2hhcGUgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9wb2x5Z29uX3NoYXBlIHBoeXNpY3NfZml4dHVyZV9zZXRfY2hhaW5fc2hhcGUgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX2FkZF9wb2ludCBwaHlzaWNzX2ZpeHR1cmVfYmluZCAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfYmluZF9leHQgcGh5c2ljc19maXh0dXJlX2RlbGV0ZSBwaHlzaWNzX2FwcGx5X2ZvcmNlICcgK1xuICAgICAgJ3BoeXNpY3NfYXBwbHlfaW1wdWxzZSBwaHlzaWNzX2FwcGx5X2FuZ3VsYXJfaW1wdWxzZSAnICtcbiAgICAgICdwaHlzaWNzX2FwcGx5X2xvY2FsX2ZvcmNlIHBoeXNpY3NfYXBwbHlfbG9jYWxfaW1wdWxzZSAnICtcbiAgICAgICdwaHlzaWNzX2FwcGx5X3RvcnF1ZSBwaHlzaWNzX21hc3NfcHJvcGVydGllcyBwaHlzaWNzX2RyYXdfZGVidWcgJyArXG4gICAgICAncGh5c2ljc190ZXN0X292ZXJsYXAgcGh5c2ljc19yZW1vdmVfZml4dHVyZSBwaHlzaWNzX3NldF9mcmljdGlvbiAnICtcbiAgICAgICdwaHlzaWNzX3NldF9kZW5zaXR5IHBoeXNpY3Nfc2V0X3Jlc3RpdHV0aW9uIHBoeXNpY3NfZ2V0X2ZyaWN0aW9uICcgK1xuICAgICAgJ3BoeXNpY3NfZ2V0X2RlbnNpdHkgcGh5c2ljc19nZXRfcmVzdGl0dXRpb24gJyArXG4gICAgICAncGh5c2ljc19qb2ludF9kaXN0YW5jZV9jcmVhdGUgcGh5c2ljc19qb2ludF9yb3BlX2NyZWF0ZSAnICtcbiAgICAgICdwaHlzaWNzX2pvaW50X3Jldm9sdXRlX2NyZWF0ZSBwaHlzaWNzX2pvaW50X3ByaXNtYXRpY19jcmVhdGUgJyArXG4gICAgICAncGh5c2ljc19qb2ludF9wdWxsZXlfY3JlYXRlIHBoeXNpY3Nfam9pbnRfd2hlZWxfY3JlYXRlICcgK1xuICAgICAgJ3BoeXNpY3Nfam9pbnRfd2VsZF9jcmVhdGUgcGh5c2ljc19qb2ludF9mcmljdGlvbl9jcmVhdGUgJyArXG4gICAgICAncGh5c2ljc19qb2ludF9nZWFyX2NyZWF0ZSBwaHlzaWNzX2pvaW50X2VuYWJsZV9tb3RvciAnICtcbiAgICAgICdwaHlzaWNzX2pvaW50X2dldF92YWx1ZSBwaHlzaWNzX2pvaW50X3NldF92YWx1ZSBwaHlzaWNzX2pvaW50X2RlbGV0ZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2NyZWF0ZSBwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZV9yZWdpb25fY2lyY2xlICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9ib3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9kZWxldGVfcmVnaW9uX3BvbHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZmxhZ3MgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9zZXRfY2F0ZWdvcnlfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9kcmF3ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZHJhd19leHQgcGh5c2ljc19wYXJ0aWNsZV9jb3VudCAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dldF9kYXRhIHBoeXNpY3NfcGFydGljbGVfZ2V0X2RhdGFfcGFydGljbGUgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9iZWdpbiBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2NpcmNsZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2JveCBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX3BvbHlnb24gJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9hZGRfcG9pbnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9lbmQgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9qb2luIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZGVsZXRlICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ3JvdXBfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfZGF0YSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9tYXNzIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X2luZXJ0aWEgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nX3ZlbCAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF94IHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X3kgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nbGUgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZ3JvdXBfZmxhZ3MgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3JvdXBfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9nZXRfbWF4X2NvdW50ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ2V0X3JhZGl1cyBwaHlzaWNzX3BhcnRpY2xlX2dldF9kZW5zaXR5ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ2V0X2RhbXBpbmcgcGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3Jhdml0eV9zY2FsZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX3NldF9tYXhfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9zZXRfcmFkaXVzICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfc2V0X2RlbnNpdHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZGFtcGluZyAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX3NldF9ncmF2aXR5X3NjYWxlIG5ldHdvcmtfY3JlYXRlX3NvY2tldCAnICtcbiAgICAgICduZXR3b3JrX2NyZWF0ZV9zb2NrZXRfZXh0IG5ldHdvcmtfY3JlYXRlX3NlcnZlciAnICtcbiAgICAgICduZXR3b3JrX2NyZWF0ZV9zZXJ2ZXJfcmF3IG5ldHdvcmtfY29ubmVjdCBuZXR3b3JrX2Nvbm5lY3RfcmF3ICcgK1xuICAgICAgJ25ldHdvcmtfc2VuZF9wYWNrZXQgbmV0d29ya19zZW5kX3JhdyBuZXR3b3JrX3NlbmRfYnJvYWRjYXN0ICcgK1xuICAgICAgJ25ldHdvcmtfc2VuZF91ZHAgbmV0d29ya19zZW5kX3VkcF9yYXcgbmV0d29ya19zZXRfdGltZW91dCAnICtcbiAgICAgICduZXR3b3JrX3NldF9jb25maWcgbmV0d29ya19yZXNvbHZlIG5ldHdvcmtfZGVzdHJveSBidWZmZXJfY3JlYXRlICcgK1xuICAgICAgJ2J1ZmZlcl93cml0ZSBidWZmZXJfcmVhZCBidWZmZXJfc2VlayBidWZmZXJfZ2V0X3N1cmZhY2UgJyArXG4gICAgICAnYnVmZmVyX3NldF9zdXJmYWNlIGJ1ZmZlcl9kZWxldGUgYnVmZmVyX2V4aXN0cyBidWZmZXJfZ2V0X3R5cGUgJyArXG4gICAgICAnYnVmZmVyX2dldF9hbGlnbm1lbnQgYnVmZmVyX3Bva2UgYnVmZmVyX3BlZWsgYnVmZmVyX3NhdmUgJyArXG4gICAgICAnYnVmZmVyX3NhdmVfZXh0IGJ1ZmZlcl9sb2FkIGJ1ZmZlcl9sb2FkX2V4dCBidWZmZXJfbG9hZF9wYXJ0aWFsICcgK1xuICAgICAgJ2J1ZmZlcl9jb3B5IGJ1ZmZlcl9maWxsIGJ1ZmZlcl9nZXRfc2l6ZSBidWZmZXJfdGVsbCBidWZmZXJfcmVzaXplICcgK1xuICAgICAgJ2J1ZmZlcl9tZDUgYnVmZmVyX3NoYTEgYnVmZmVyX2Jhc2U2NF9lbmNvZGUgYnVmZmVyX2Jhc2U2NF9kZWNvZGUgJyArXG4gICAgICAnYnVmZmVyX2Jhc2U2NF9kZWNvZGVfZXh0IGJ1ZmZlcl9zaXplb2YgYnVmZmVyX2dldF9hZGRyZXNzICcgK1xuICAgICAgJ2J1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyICcgK1xuICAgICAgJ2J1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyX2V4dCBidWZmZXJfY29weV9mcm9tX3ZlcnRleF9idWZmZXIgJyArXG4gICAgICAnYnVmZmVyX2FzeW5jX2dyb3VwX2JlZ2luIGJ1ZmZlcl9hc3luY19ncm91cF9vcHRpb24gJyArXG4gICAgICAnYnVmZmVyX2FzeW5jX2dyb3VwX2VuZCBidWZmZXJfbG9hZF9hc3luYyBidWZmZXJfc2F2ZV9hc3luYyAnICtcbiAgICAgICdnbWxfcmVsZWFzZV9tb2RlIGdtbF9wcmFnbWEgc3RlYW1fYWN0aXZhdGVfb3ZlcmxheSAnICtcbiAgICAgICdzdGVhbV9pc19vdmVybGF5X2VuYWJsZWQgc3RlYW1faXNfb3ZlcmxheV9hY3RpdmF0ZWQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3BlcnNvbmFfbmFtZSBzdGVhbV9pbml0aWFsaXNlZCAnICtcbiAgICAgICdzdGVhbV9pc19jbG91ZF9lbmFibGVkX2Zvcl9hcHAgc3RlYW1faXNfY2xvdWRfZW5hYmxlZF9mb3JfYWNjb3VudCAnICtcbiAgICAgICdzdGVhbV9maWxlX3BlcnNpc3RlZCBzdGVhbV9nZXRfcXVvdGFfdG90YWwgc3RlYW1fZ2V0X3F1b3RhX2ZyZWUgJyArXG4gICAgICAnc3RlYW1fZmlsZV93cml0ZSBzdGVhbV9maWxlX3dyaXRlX2ZpbGUgc3RlYW1fZmlsZV9yZWFkICcgK1xuICAgICAgJ3N0ZWFtX2ZpbGVfZGVsZXRlIHN0ZWFtX2ZpbGVfZXhpc3RzIHN0ZWFtX2ZpbGVfc2l6ZSBzdGVhbV9maWxlX3NoYXJlICcgK1xuICAgICAgJ3N0ZWFtX2lzX3NjcmVlbnNob3RfcmVxdWVzdGVkIHN0ZWFtX3NlbmRfc2NyZWVuc2hvdCAnICtcbiAgICAgICdzdGVhbV9pc191c2VyX2xvZ2dlZF9vbiBzdGVhbV9nZXRfdXNlcl9zdGVhbV9pZCBzdGVhbV91c2VyX293bnNfZGxjICcgK1xuICAgICAgJ3N0ZWFtX3VzZXJfaW5zdGFsbGVkX2RsYyBzdGVhbV9zZXRfYWNoaWV2ZW1lbnQgc3RlYW1fZ2V0X2FjaGlldmVtZW50ICcgK1xuICAgICAgJ3N0ZWFtX2NsZWFyX2FjaGlldmVtZW50IHN0ZWFtX3NldF9zdGF0X2ludCBzdGVhbV9zZXRfc3RhdF9mbG9hdCAnICtcbiAgICAgICdzdGVhbV9zZXRfc3RhdF9hdmdfcmF0ZSBzdGVhbV9nZXRfc3RhdF9pbnQgc3RlYW1fZ2V0X3N0YXRfZmxvYXQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3N0YXRfYXZnX3JhdGUgc3RlYW1fcmVzZXRfYWxsX3N0YXRzICcgK1xuICAgICAgJ3N0ZWFtX3Jlc2V0X2FsbF9zdGF0c19hY2hpZXZlbWVudHMgc3RlYW1fc3RhdHNfcmVhZHkgJyArXG4gICAgICAnc3RlYW1fY3JlYXRlX2xlYWRlcmJvYXJkIHN0ZWFtX3VwbG9hZF9zY29yZSBzdGVhbV91cGxvYWRfc2NvcmVfZXh0ICcgK1xuICAgICAgJ3N0ZWFtX2Rvd25sb2FkX3Njb3Jlc19hcm91bmRfdXNlciBzdGVhbV9kb3dubG9hZF9zY29yZXMgJyArXG4gICAgICAnc3RlYW1fZG93bmxvYWRfZnJpZW5kc19zY29yZXMgc3RlYW1fdXBsb2FkX3Njb3JlX2J1ZmZlciAnICtcbiAgICAgICdzdGVhbV91cGxvYWRfc2NvcmVfYnVmZmVyX2V4dCBzdGVhbV9jdXJyZW50X2dhbWVfbGFuZ3VhZ2UgJyArXG4gICAgICAnc3RlYW1fYXZhaWxhYmxlX2xhbmd1YWdlcyBzdGVhbV9hY3RpdmF0ZV9vdmVybGF5X2Jyb3dzZXIgJyArXG4gICAgICAnc3RlYW1fYWN0aXZhdGVfb3ZlcmxheV91c2VyIHN0ZWFtX2FjdGl2YXRlX292ZXJsYXlfc3RvcmUgJyArXG4gICAgICAnc3RlYW1fZ2V0X3VzZXJfcGVyc29uYV9uYW1lIHN0ZWFtX2dldF9hcHBfaWQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3VzZXJfYWNjb3VudF9pZCBzdGVhbV91Z2NfZG93bmxvYWQgc3RlYW1fdWdjX2NyZWF0ZV9pdGVtICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zdGFydF9pdGVtX3VwZGF0ZSBzdGVhbV91Z2Nfc2V0X2l0ZW1fdGl0bGUgJyArXG4gICAgICAnc3RlYW1fdWdjX3NldF9pdGVtX2Rlc2NyaXB0aW9uIHN0ZWFtX3VnY19zZXRfaXRlbV92aXNpYmlsaXR5ICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zZXRfaXRlbV90YWdzIHN0ZWFtX3VnY19zZXRfaXRlbV9jb250ZW50ICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zZXRfaXRlbV9wcmV2aWV3IHN0ZWFtX3VnY19zdWJtaXRfaXRlbV91cGRhdGUgJyArXG4gICAgICAnc3RlYW1fdWdjX2dldF9pdGVtX3VwZGF0ZV9wcm9ncmVzcyBzdGVhbV91Z2Nfc3Vic2NyaWJlX2l0ZW0gJyArXG4gICAgICAnc3RlYW1fdWdjX3Vuc3Vic2NyaWJlX2l0ZW0gc3RlYW1fdWdjX251bV9zdWJzY3JpYmVkX2l0ZW1zICcgK1xuICAgICAgJ3N0ZWFtX3VnY19nZXRfc3Vic2NyaWJlZF9pdGVtcyBzdGVhbV91Z2NfZ2V0X2l0ZW1faW5zdGFsbF9pbmZvICcgK1xuICAgICAgJ3N0ZWFtX3VnY19nZXRfaXRlbV91cGRhdGVfaW5mbyBzdGVhbV91Z2NfcmVxdWVzdF9pdGVtX2RldGFpbHMgJyArXG4gICAgICAnc3RlYW1fdWdjX2NyZWF0ZV9xdWVyeV91c2VyIHN0ZWFtX3VnY19jcmVhdGVfcXVlcnlfdXNlcl9leCAnICtcbiAgICAgICdzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbCBzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbF9leCAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X2Nsb3VkX2ZpbGVuYW1lX2ZpbHRlciAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X21hdGNoX2FueV90YWcgc3RlYW1fdWdjX3F1ZXJ5X3NldF9zZWFyY2hfdGV4dCAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X3JhbmtlZF9ieV90cmVuZF9kYXlzICcgK1xuICAgICAgJ3N0ZWFtX3VnY19xdWVyeV9hZGRfcmVxdWlyZWRfdGFnIHN0ZWFtX3VnY19xdWVyeV9hZGRfZXhjbHVkZWRfdGFnICcgK1xuICAgICAgJ3N0ZWFtX3VnY19xdWVyeV9zZXRfcmV0dXJuX2xvbmdfZGVzY3JpcHRpb24gJyArXG4gICAgICAnc3RlYW1fdWdjX3F1ZXJ5X3NldF9yZXR1cm5fdG90YWxfb25seSAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X2FsbG93X2NhY2hlZF9yZXNwb25zZSBzdGVhbV91Z2Nfc2VuZF9xdWVyeSAnICtcbiAgICAgICdzaGFkZXJfc2V0IHNoYWRlcl9nZXRfbmFtZSBzaGFkZXJfcmVzZXQgc2hhZGVyX2N1cnJlbnQgJyArXG4gICAgICAnc2hhZGVyX2lzX2NvbXBpbGVkIHNoYWRlcl9nZXRfc2FtcGxlcl9pbmRleCBzaGFkZXJfZ2V0X3VuaWZvcm0gJyArXG4gICAgICAnc2hhZGVyX3NldF91bmlmb3JtX2kgc2hhZGVyX3NldF91bmlmb3JtX2lfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX2YgJyArXG4gICAgICAnc2hhZGVyX3NldF91bmlmb3JtX2ZfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX21hdHJpeCAnICtcbiAgICAgICdzaGFkZXJfc2V0X3VuaWZvcm1fbWF0cml4X2FycmF5IHNoYWRlcl9lbmFibGVfY29ybmVyX2lkICcgK1xuICAgICAgJ3RleHR1cmVfc2V0X3N0YWdlIHRleHR1cmVfZ2V0X3RleGVsX3dpZHRoIHRleHR1cmVfZ2V0X3RleGVsX2hlaWdodCAnICtcbiAgICAgICdzaGFkZXJzX2FyZV9zdXBwb3J0ZWQgdmVydGV4X2Zvcm1hdF9iZWdpbiB2ZXJ0ZXhfZm9ybWF0X2VuZCAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2RlbGV0ZSB2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbiAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbl8zZCB2ZXJ0ZXhfZm9ybWF0X2FkZF9jb2xvdXIgJyArXG4gICAgICAndmVydGV4X2Zvcm1hdF9hZGRfY29sb3IgdmVydGV4X2Zvcm1hdF9hZGRfbm9ybWFsICcgK1xuICAgICAgJ3ZlcnRleF9mb3JtYXRfYWRkX3RleGNvb3JkIHZlcnRleF9mb3JtYXRfYWRkX3RleHRjb29yZCAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2FkZF9jdXN0b20gdmVydGV4X2NyZWF0ZV9idWZmZXIgJyArXG4gICAgICAndmVydGV4X2NyZWF0ZV9idWZmZXJfZXh0IHZlcnRleF9kZWxldGVfYnVmZmVyIHZlcnRleF9iZWdpbiAnICtcbiAgICAgICd2ZXJ0ZXhfZW5kIHZlcnRleF9wb3NpdGlvbiB2ZXJ0ZXhfcG9zaXRpb25fM2QgdmVydGV4X2NvbG91ciAnICtcbiAgICAgICd2ZXJ0ZXhfY29sb3IgdmVydGV4X2FyZ2IgdmVydGV4X3RleGNvb3JkIHZlcnRleF9ub3JtYWwgdmVydGV4X2Zsb2F0MSAnICtcbiAgICAgICd2ZXJ0ZXhfZmxvYXQyIHZlcnRleF9mbG9hdDMgdmVydGV4X2Zsb2F0NCB2ZXJ0ZXhfdWJ5dGU0ICcgK1xuICAgICAgJ3ZlcnRleF9zdWJtaXQgdmVydGV4X2ZyZWV6ZSB2ZXJ0ZXhfZ2V0X251bWJlciB2ZXJ0ZXhfZ2V0X2J1ZmZlcl9zaXplICcgK1xuICAgICAgJ3ZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyICcgK1xuICAgICAgJ3ZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyX2V4dCBwdXNoX2xvY2FsX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICdwdXNoX2dldF9maXJzdF9sb2NhbF9ub3RpZmljYXRpb24gcHVzaF9nZXRfbmV4dF9sb2NhbF9ub3RpZmljYXRpb24gJyArXG4gICAgICAncHVzaF9jYW5jZWxfbG9jYWxfbm90aWZpY2F0aW9uIHNrZWxldG9uX2FuaW1hdGlvbl9zZXQgJyArXG4gICAgICAnc2tlbGV0b25fYW5pbWF0aW9uX2dldCBza2VsZXRvbl9hbmltYXRpb25fbWl4ICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9zZXRfZXh0IHNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZXh0ICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9nZXRfZHVyYXRpb24gc2tlbGV0b25fYW5pbWF0aW9uX2dldF9mcmFtZXMgJyArXG4gICAgICAnc2tlbGV0b25fYW5pbWF0aW9uX2NsZWFyIHNrZWxldG9uX3NraW5fc2V0IHNrZWxldG9uX3NraW5fZ2V0ICcgK1xuICAgICAgJ3NrZWxldG9uX2F0dGFjaG1lbnRfc2V0IHNrZWxldG9uX2F0dGFjaG1lbnRfZ2V0ICcgK1xuICAgICAgJ3NrZWxldG9uX2F0dGFjaG1lbnRfY3JlYXRlIHNrZWxldG9uX2NvbGxpc2lvbl9kcmF3X3NldCAnICtcbiAgICAgICdza2VsZXRvbl9ib25lX2RhdGFfZ2V0IHNrZWxldG9uX2JvbmVfZGF0YV9zZXQgJyArXG4gICAgICAnc2tlbGV0b25fYm9uZV9zdGF0ZV9nZXQgc2tlbGV0b25fYm9uZV9zdGF0ZV9zZXQgc2tlbGV0b25fZ2V0X21pbm1heCAnICtcbiAgICAgICdza2VsZXRvbl9nZXRfbnVtX2JvdW5kcyBza2VsZXRvbl9nZXRfYm91bmRzICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9nZXRfZnJhbWUgc2tlbGV0b25fYW5pbWF0aW9uX3NldF9mcmFtZSAnICtcbiAgICAgICdkcmF3X3NrZWxldG9uIGRyYXdfc2tlbGV0b25fdGltZSBkcmF3X3NrZWxldG9uX2luc3RhbmNlICcgK1xuICAgICAgJ2RyYXdfc2tlbGV0b25fY29sbGlzaW9uIHNrZWxldG9uX2FuaW1hdGlvbl9saXN0IHNrZWxldG9uX3NraW5fbGlzdCAnICtcbiAgICAgICdza2VsZXRvbl9zbG90X2RhdGEgbGF5ZXJfZ2V0X2lkIGxheWVyX2dldF9pZF9hdF9kZXB0aCAnICtcbiAgICAgICdsYXllcl9nZXRfZGVwdGggbGF5ZXJfY3JlYXRlIGxheWVyX2Rlc3Ryb3kgbGF5ZXJfZGVzdHJveV9pbnN0YW5jZXMgJyArXG4gICAgICAnbGF5ZXJfYWRkX2luc3RhbmNlIGxheWVyX2hhc19pbnN0YW5jZSBsYXllcl9zZXRfdmlzaWJsZSAnICtcbiAgICAgICdsYXllcl9nZXRfdmlzaWJsZSBsYXllcl9leGlzdHMgbGF5ZXJfeCBsYXllcl95IGxheWVyX2dldF94ICcgK1xuICAgICAgJ2xheWVyX2dldF95IGxheWVyX2hzcGVlZCBsYXllcl92c3BlZWQgbGF5ZXJfZ2V0X2hzcGVlZCAnICtcbiAgICAgICdsYXllcl9nZXRfdnNwZWVkIGxheWVyX3NjcmlwdF9iZWdpbiBsYXllcl9zY3JpcHRfZW5kIGxheWVyX3NoYWRlciAnICtcbiAgICAgICdsYXllcl9nZXRfc2NyaXB0X2JlZ2luIGxheWVyX2dldF9zY3JpcHRfZW5kIGxheWVyX2dldF9zaGFkZXIgJyArXG4gICAgICAnbGF5ZXJfc2V0X3RhcmdldF9yb29tIGxheWVyX2dldF90YXJnZXRfcm9vbSBsYXllcl9yZXNldF90YXJnZXRfcm9vbSAnICtcbiAgICAgICdsYXllcl9nZXRfYWxsIGxheWVyX2dldF9hbGxfZWxlbWVudHMgbGF5ZXJfZ2V0X25hbWUgbGF5ZXJfZGVwdGggJyArXG4gICAgICAnbGF5ZXJfZ2V0X2VsZW1lbnRfbGF5ZXIgbGF5ZXJfZ2V0X2VsZW1lbnRfdHlwZSBsYXllcl9lbGVtZW50X21vdmUgJyArXG4gICAgICAnbGF5ZXJfZm9yY2VfZHJhd19kZXB0aCBsYXllcl9pc19kcmF3X2RlcHRoX2ZvcmNlZCAnICtcbiAgICAgICdsYXllcl9nZXRfZm9yY2VkX2RlcHRoIGxheWVyX2JhY2tncm91bmRfZ2V0X2lkICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfZXhpc3RzIGxheWVyX2JhY2tncm91bmRfY3JlYXRlICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfZGVzdHJveSBsYXllcl9iYWNrZ3JvdW5kX3Zpc2libGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9jaGFuZ2UgbGF5ZXJfYmFja2dyb3VuZF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9odGlsZWQgbGF5ZXJfYmFja2dyb3VuZF92dGlsZWQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfeXNjYWxlICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfeHNjYWxlIGxheWVyX2JhY2tncm91bmRfYmxlbmQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9hbHBoYSBsYXllcl9iYWNrZ3JvdW5kX2luZGV4IGxheWVyX2JhY2tncm91bmRfc3BlZWQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfdmlzaWJsZSBsYXllcl9iYWNrZ3JvdW5kX2dldF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfaHRpbGVkIGxheWVyX2JhY2tncm91bmRfZ2V0X3Z0aWxlZCAnICtcbiAgICAgICdsYXllcl9iYWNrZ3JvdW5kX2dldF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfZ2V0X3lzY2FsZSAnICtcbiAgICAgICdsYXllcl9iYWNrZ3JvdW5kX2dldF94c2NhbGUgbGF5ZXJfYmFja2dyb3VuZF9nZXRfYmxlbmQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfYWxwaGEgbGF5ZXJfYmFja2dyb3VuZF9nZXRfaW5kZXggJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF9pZCBsYXllcl9zcHJpdGVfZXhpc3RzICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9jcmVhdGUgbGF5ZXJfc3ByaXRlX2Rlc3Ryb3kgbGF5ZXJfc3ByaXRlX2NoYW5nZSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfaW5kZXggbGF5ZXJfc3ByaXRlX3NwZWVkIGxheWVyX3Nwcml0ZV94c2NhbGUgJyArXG4gICAgICAnbGF5ZXJfc3ByaXRlX3lzY2FsZSBsYXllcl9zcHJpdGVfYW5nbGUgbGF5ZXJfc3ByaXRlX2JsZW5kICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9hbHBoYSBsYXllcl9zcHJpdGVfeCBsYXllcl9zcHJpdGVfeSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfZ2V0X3Nwcml0ZSBsYXllcl9zcHJpdGVfZ2V0X2luZGV4ICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF94c2NhbGUgJyArXG4gICAgICAnbGF5ZXJfc3ByaXRlX2dldF95c2NhbGUgbGF5ZXJfc3ByaXRlX2dldF9hbmdsZSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfZ2V0X2JsZW5kIGxheWVyX3Nwcml0ZV9nZXRfYWxwaGEgbGF5ZXJfc3ByaXRlX2dldF94ICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9nZXRfeSBsYXllcl90aWxlbWFwX2dldF9pZCBsYXllcl90aWxlbWFwX2V4aXN0cyAnICtcbiAgICAgICdsYXllcl90aWxlbWFwX2NyZWF0ZSBsYXllcl90aWxlbWFwX2Rlc3Ryb3kgdGlsZW1hcF90aWxlc2V0IHRpbGVtYXBfeCAnICtcbiAgICAgICd0aWxlbWFwX3kgdGlsZW1hcF9zZXQgdGlsZW1hcF9zZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfdGlsZXNldCAnICtcbiAgICAgICd0aWxlbWFwX2dldF90aWxlX3dpZHRoIHRpbGVtYXBfZ2V0X3RpbGVfaGVpZ2h0IHRpbGVtYXBfZ2V0X3dpZHRoICcgK1xuICAgICAgJ3RpbGVtYXBfZ2V0X2hlaWdodCB0aWxlbWFwX2dldF94IHRpbGVtYXBfZ2V0X3kgdGlsZW1hcF9nZXQgJyArXG4gICAgICAndGlsZW1hcF9nZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfY2VsbF94X2F0X3BpeGVsICcgK1xuICAgICAgJ3RpbGVtYXBfZ2V0X2NlbGxfeV9hdF9waXhlbCB0aWxlbWFwX2NsZWFyIGRyYXdfdGlsZW1hcCBkcmF3X3RpbGUgJyArXG4gICAgICAndGlsZW1hcF9zZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9nZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9zZXRfbWFzayAnICtcbiAgICAgICd0aWxlbWFwX2dldF9tYXNrIHRpbGVtYXBfZ2V0X2ZyYW1lIHRpbGVfc2V0X2VtcHR5IHRpbGVfc2V0X2luZGV4ICcgK1xuICAgICAgJ3RpbGVfc2V0X2ZsaXAgdGlsZV9zZXRfbWlycm9yIHRpbGVfc2V0X3JvdGF0ZSB0aWxlX2dldF9lbXB0eSAnICtcbiAgICAgICd0aWxlX2dldF9pbmRleCB0aWxlX2dldF9mbGlwIHRpbGVfZ2V0X21pcnJvciB0aWxlX2dldF9yb3RhdGUgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9leGlzdHMgbGF5ZXJfdGlsZV9jcmVhdGUgbGF5ZXJfdGlsZV9kZXN0cm95ICcgK1xuICAgICAgJ2xheWVyX3RpbGVfY2hhbmdlIGxheWVyX3RpbGVfeHNjYWxlIGxheWVyX3RpbGVfeXNjYWxlICcgK1xuICAgICAgJ2xheWVyX3RpbGVfYmxlbmQgbGF5ZXJfdGlsZV9hbHBoYSBsYXllcl90aWxlX3ggbGF5ZXJfdGlsZV95ICcgK1xuICAgICAgJ2xheWVyX3RpbGVfcmVnaW9uIGxheWVyX3RpbGVfdmlzaWJsZSBsYXllcl90aWxlX2dldF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9nZXRfeHNjYWxlIGxheWVyX3RpbGVfZ2V0X3lzY2FsZSBsYXllcl90aWxlX2dldF9ibGVuZCAnICtcbiAgICAgICdsYXllcl90aWxlX2dldF9hbHBoYSBsYXllcl90aWxlX2dldF94IGxheWVyX3RpbGVfZ2V0X3kgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9nZXRfcmVnaW9uIGxheWVyX3RpbGVfZ2V0X3Zpc2libGUgJyArXG4gICAgICAnbGF5ZXJfaW5zdGFuY2VfZ2V0X2luc3RhbmNlIGluc3RhbmNlX2FjdGl2YXRlX2xheWVyICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfbGF5ZXIgY2FtZXJhX2NyZWF0ZSBjYW1lcmFfY3JlYXRlX3ZpZXcgJyArXG4gICAgICAnY2FtZXJhX2Rlc3Ryb3kgY2FtZXJhX2FwcGx5IGNhbWVyYV9nZXRfYWN0aXZlIGNhbWVyYV9nZXRfZGVmYXVsdCAnICtcbiAgICAgICdjYW1lcmFfc2V0X2RlZmF1bHQgY2FtZXJhX3NldF92aWV3X21hdCBjYW1lcmFfc2V0X3Byb2pfbWF0ICcgK1xuICAgICAgJ2NhbWVyYV9zZXRfdXBkYXRlX3NjcmlwdCBjYW1lcmFfc2V0X2JlZ2luX3NjcmlwdCAnICtcbiAgICAgICdjYW1lcmFfc2V0X2VuZF9zY3JpcHQgY2FtZXJhX3NldF92aWV3X3BvcyBjYW1lcmFfc2V0X3ZpZXdfc2l6ZSAnICtcbiAgICAgICdjYW1lcmFfc2V0X3ZpZXdfc3BlZWQgY2FtZXJhX3NldF92aWV3X2JvcmRlciBjYW1lcmFfc2V0X3ZpZXdfYW5nbGUgJyArXG4gICAgICAnY2FtZXJhX3NldF92aWV3X3RhcmdldCBjYW1lcmFfZ2V0X3ZpZXdfbWF0IGNhbWVyYV9nZXRfcHJval9tYXQgJyArXG4gICAgICAnY2FtZXJhX2dldF91cGRhdGVfc2NyaXB0IGNhbWVyYV9nZXRfYmVnaW5fc2NyaXB0ICcgK1xuICAgICAgJ2NhbWVyYV9nZXRfZW5kX3NjcmlwdCBjYW1lcmFfZ2V0X3ZpZXdfeCBjYW1lcmFfZ2V0X3ZpZXdfeSAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfd2lkdGggY2FtZXJhX2dldF92aWV3X2hlaWdodCBjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeCAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeSBjYW1lcmFfZ2V0X3ZpZXdfYm9yZGVyX3ggJyArXG4gICAgICAnY2FtZXJhX2dldF92aWV3X2JvcmRlcl95IGNhbWVyYV9nZXRfdmlld19hbmdsZSAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfdGFyZ2V0IHZpZXdfZ2V0X2NhbWVyYSB2aWV3X2dldF92aXNpYmxlICcgK1xuICAgICAgJ3ZpZXdfZ2V0X3hwb3J0IHZpZXdfZ2V0X3lwb3J0IHZpZXdfZ2V0X3dwb3J0IHZpZXdfZ2V0X2hwb3J0ICcgK1xuICAgICAgJ3ZpZXdfZ2V0X3N1cmZhY2VfaWQgdmlld19zZXRfY2FtZXJhIHZpZXdfc2V0X3Zpc2libGUgdmlld19zZXRfeHBvcnQgJyArXG4gICAgICAndmlld19zZXRfeXBvcnQgdmlld19zZXRfd3BvcnQgdmlld19zZXRfaHBvcnQgdmlld19zZXRfc3VyZmFjZV9pZCAnICtcbiAgICAgICdnZXN0dXJlX2RyYWdfdGltZSBnZXN0dXJlX2RyYWdfZGlzdGFuY2UgZ2VzdHVyZV9mbGlja19zcGVlZCAnICtcbiAgICAgICdnZXN0dXJlX2RvdWJsZV90YXBfdGltZSBnZXN0dXJlX2RvdWJsZV90YXBfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9waW5jaF9kaXN0YW5jZSBnZXN0dXJlX3BpbmNoX2FuZ2xlX3Rvd2FyZHMgJyArXG4gICAgICAnZ2VzdHVyZV9waW5jaF9hbmdsZV9hd2F5IGdlc3R1cmVfcm90YXRlX3RpbWUgZ2VzdHVyZV9yb3RhdGVfYW5nbGUgJyArXG4gICAgICAnZ2VzdHVyZV90YXBfY291bnQgZ2VzdHVyZV9nZXRfZHJhZ190aW1lIGdlc3R1cmVfZ2V0X2RyYWdfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9nZXRfZmxpY2tfc3BlZWQgZ2VzdHVyZV9nZXRfZG91YmxlX3RhcF90aW1lICcgK1xuICAgICAgJ2dlc3R1cmVfZ2V0X2RvdWJsZV90YXBfZGlzdGFuY2UgZ2VzdHVyZV9nZXRfcGluY2hfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9nZXRfcGluY2hfYW5nbGVfdG93YXJkcyBnZXN0dXJlX2dldF9waW5jaF9hbmdsZV9hd2F5ICcgK1xuICAgICAgJ2dlc3R1cmVfZ2V0X3JvdGF0ZV90aW1lIGdlc3R1cmVfZ2V0X3JvdGF0ZV9hbmdsZSAnICtcbiAgICAgICdnZXN0dXJlX2dldF90YXBfY291bnQga2V5Ym9hcmRfdmlydHVhbF9zaG93IGtleWJvYXJkX3ZpcnR1YWxfaGlkZSAnICtcbiAgICAgICdrZXlib2FyZF92aXJ0dWFsX3N0YXR1cyBrZXlib2FyZF92aXJ0dWFsX2hlaWdodCcsXG4gICAgbGl0ZXJhbDogJ3NlbGYgb3RoZXIgYWxsIG5vb25lIGdsb2JhbCBsb2NhbCB1bmRlZmluZWQgcG9pbnRlcl9pbnZhbGlkICcgK1xuICAgICAgJ3BvaW50ZXJfbnVsbCBwYXRoX2FjdGlvbl9zdG9wIHBhdGhfYWN0aW9uX3Jlc3RhcnQgJyArXG4gICAgICAncGF0aF9hY3Rpb25fY29udGludWUgcGF0aF9hY3Rpb25fcmV2ZXJzZSB0cnVlIGZhbHNlIHBpIEdNX2J1aWxkX2RhdGUgJyArXG4gICAgICAnR01fdmVyc2lvbiBHTV9ydW50aW1lX3ZlcnNpb24gIHRpbWV6b25lX2xvY2FsIHRpbWV6b25lX3V0YyAnICtcbiAgICAgICdnYW1lc3BlZWRfZnBzIGdhbWVzcGVlZF9taWNyb3NlY29uZHMgIGV2X2NyZWF0ZSBldl9kZXN0cm95IGV2X3N0ZXAgJyArXG4gICAgICAnZXZfYWxhcm0gZXZfa2V5Ym9hcmQgZXZfbW91c2UgZXZfY29sbGlzaW9uIGV2X290aGVyIGV2X2RyYXcgJyArXG4gICAgICAnZXZfZHJhd19iZWdpbiBldl9kcmF3X2VuZCBldl9kcmF3X3ByZSBldl9kcmF3X3Bvc3QgZXZfa2V5cHJlc3MgJyArXG4gICAgICAnZXZfa2V5cmVsZWFzZSBldl90cmlnZ2VyIGV2X2xlZnRfYnV0dG9uIGV2X3JpZ2h0X2J1dHRvbiAnICtcbiAgICAgICdldl9taWRkbGVfYnV0dG9uIGV2X25vX2J1dHRvbiBldl9sZWZ0X3ByZXNzIGV2X3JpZ2h0X3ByZXNzICcgK1xuICAgICAgJ2V2X21pZGRsZV9wcmVzcyBldl9sZWZ0X3JlbGVhc2UgZXZfcmlnaHRfcmVsZWFzZSBldl9taWRkbGVfcmVsZWFzZSAnICtcbiAgICAgICdldl9tb3VzZV9lbnRlciBldl9tb3VzZV9sZWF2ZSBldl9tb3VzZV93aGVlbF91cCBldl9tb3VzZV93aGVlbF9kb3duICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X2J1dHRvbiBldl9nbG9iYWxfcmlnaHRfYnV0dG9uIGV2X2dsb2JhbF9taWRkbGVfYnV0dG9uICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X3ByZXNzIGV2X2dsb2JhbF9yaWdodF9wcmVzcyBldl9nbG9iYWxfbWlkZGxlX3ByZXNzICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X3JlbGVhc2UgZXZfZ2xvYmFsX3JpZ2h0X3JlbGVhc2UgJyArXG4gICAgICAnZXZfZ2xvYmFsX21pZGRsZV9yZWxlYXNlIGV2X2pveXN0aWNrMV9sZWZ0IGV2X2pveXN0aWNrMV9yaWdodCAnICtcbiAgICAgICdldl9qb3lzdGljazFfdXAgZXZfam95c3RpY2sxX2Rvd24gZXZfam95c3RpY2sxX2J1dHRvbjEgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjIgZXZfam95c3RpY2sxX2J1dHRvbjMgZXZfam95c3RpY2sxX2J1dHRvbjQgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjUgZXZfam95c3RpY2sxX2J1dHRvbjYgZXZfam95c3RpY2sxX2J1dHRvbjcgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjggZXZfam95c3RpY2syX2xlZnQgZXZfam95c3RpY2syX3JpZ2h0ICcgK1xuICAgICAgJ2V2X2pveXN0aWNrMl91cCBldl9qb3lzdGljazJfZG93biBldl9qb3lzdGljazJfYnV0dG9uMSAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uMiBldl9qb3lzdGljazJfYnV0dG9uMyBldl9qb3lzdGljazJfYnV0dG9uNCAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uNSBldl9qb3lzdGljazJfYnV0dG9uNiBldl9qb3lzdGljazJfYnV0dG9uNyAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uOCBldl9vdXRzaWRlIGV2X2JvdW5kYXJ5IGV2X2dhbWVfc3RhcnQgJyArXG4gICAgICAnZXZfZ2FtZV9lbmQgZXZfcm9vbV9zdGFydCBldl9yb29tX2VuZCBldl9ub19tb3JlX2xpdmVzICcgK1xuICAgICAgJ2V2X2FuaW1hdGlvbl9lbmQgZXZfZW5kX29mX3BhdGggZXZfbm9fbW9yZV9oZWFsdGggZXZfY2xvc2VfYnV0dG9uICcgK1xuICAgICAgJ2V2X3VzZXIwIGV2X3VzZXIxIGV2X3VzZXIyIGV2X3VzZXIzIGV2X3VzZXI0IGV2X3VzZXI1IGV2X3VzZXI2ICcgK1xuICAgICAgJ2V2X3VzZXI3IGV2X3VzZXI4IGV2X3VzZXI5IGV2X3VzZXIxMCBldl91c2VyMTEgZXZfdXNlcjEyIGV2X3VzZXIxMyAnICtcbiAgICAgICdldl91c2VyMTQgZXZfdXNlcjE1IGV2X3N0ZXBfbm9ybWFsIGV2X3N0ZXBfYmVnaW4gZXZfc3RlcF9lbmQgZXZfZ3VpICcgK1xuICAgICAgJ2V2X2d1aV9iZWdpbiBldl9ndWlfZW5kIGV2X2NsZWFudXAgZXZfZ2VzdHVyZSBldl9nZXN0dXJlX3RhcCAnICtcbiAgICAgICdldl9nZXN0dXJlX2RvdWJsZV90YXAgZXZfZ2VzdHVyZV9kcmFnX3N0YXJ0IGV2X2dlc3R1cmVfZHJhZ2dpbmcgJyArXG4gICAgICAnZXZfZ2VzdHVyZV9kcmFnX2VuZCBldl9nZXN0dXJlX2ZsaWNrIGV2X2dlc3R1cmVfcGluY2hfc3RhcnQgJyArXG4gICAgICAnZXZfZ2VzdHVyZV9waW5jaF9pbiBldl9nZXN0dXJlX3BpbmNoX291dCBldl9nZXN0dXJlX3BpbmNoX2VuZCAnICtcbiAgICAgICdldl9nZXN0dXJlX3JvdGF0ZV9zdGFydCBldl9nZXN0dXJlX3JvdGF0aW5nIGV2X2dlc3R1cmVfcm90YXRlX2VuZCAnICtcbiAgICAgICdldl9nbG9iYWxfZ2VzdHVyZV90YXAgZXZfZ2xvYmFsX2dlc3R1cmVfZG91YmxlX3RhcCAnICtcbiAgICAgICdldl9nbG9iYWxfZ2VzdHVyZV9kcmFnX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX2RyYWdnaW5nICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX2RyYWdfZW5kIGV2X2dsb2JhbF9nZXN0dXJlX2ZsaWNrICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX2luICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX291dCBldl9nbG9iYWxfZ2VzdHVyZV9waW5jaF9lbmQgJyArXG4gICAgICAnZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRlX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX3JvdGF0aW5nICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3JvdGF0ZV9lbmQgdmtfbm9rZXkgdmtfYW55a2V5IHZrX2VudGVyIHZrX3JldHVybiAnICtcbiAgICAgICd2a19zaGlmdCB2a19jb250cm9sIHZrX2FsdCB2a19lc2NhcGUgdmtfc3BhY2UgdmtfYmFja3NwYWNlIHZrX3RhYiAnICtcbiAgICAgICd2a19wYXVzZSB2a19wcmludHNjcmVlbiB2a19sZWZ0IHZrX3JpZ2h0IHZrX3VwIHZrX2Rvd24gdmtfaG9tZSAnICtcbiAgICAgICd2a19lbmQgdmtfZGVsZXRlIHZrX2luc2VydCB2a19wYWdldXAgdmtfcGFnZWRvd24gdmtfZjEgdmtfZjIgdmtfZjMgJyArXG4gICAgICAndmtfZjQgdmtfZjUgdmtfZjYgdmtfZjcgdmtfZjggdmtfZjkgdmtfZjEwIHZrX2YxMSB2a19mMTIgdmtfbnVtcGFkMCAnICtcbiAgICAgICd2a19udW1wYWQxIHZrX251bXBhZDIgdmtfbnVtcGFkMyB2a19udW1wYWQ0IHZrX251bXBhZDUgdmtfbnVtcGFkNiAnICtcbiAgICAgICd2a19udW1wYWQ3IHZrX251bXBhZDggdmtfbnVtcGFkOSB2a19kaXZpZGUgdmtfbXVsdGlwbHkgdmtfc3VidHJhY3QgJyArXG4gICAgICAndmtfYWRkIHZrX2RlY2ltYWwgdmtfbHNoaWZ0IHZrX2xjb250cm9sIHZrX2xhbHQgdmtfcnNoaWZ0ICcgK1xuICAgICAgJ3ZrX3Jjb250cm9sIHZrX3JhbHQgIG1iX2FueSBtYl9ub25lIG1iX2xlZnQgbWJfcmlnaHQgbWJfbWlkZGxlICcgK1xuICAgICAgJ2NfYXF1YSBjX2JsYWNrIGNfYmx1ZSBjX2RrZ3JheSBjX2Z1Y2hzaWEgY19ncmF5IGNfZ3JlZW4gY19saW1lICcgK1xuICAgICAgJ2NfbHRncmF5IGNfbWFyb29uIGNfbmF2eSBjX29saXZlIGNfcHVycGxlIGNfcmVkIGNfc2lsdmVyIGNfdGVhbCAnICtcbiAgICAgICdjX3doaXRlIGNfeWVsbG93IGNfb3JhbmdlIGZhX2xlZnQgZmFfY2VudGVyIGZhX3JpZ2h0IGZhX3RvcCAnICtcbiAgICAgICdmYV9taWRkbGUgZmFfYm90dG9tIHByX3BvaW50bGlzdCBwcl9saW5lbGlzdCBwcl9saW5lc3RyaXAgJyArXG4gICAgICAncHJfdHJpYW5nbGVsaXN0IHByX3RyaWFuZ2xlc3RyaXAgcHJfdHJpYW5nbGVmYW4gYm1fY29tcGxleCBibV9ub3JtYWwgJyArXG4gICAgICAnYm1fYWRkIGJtX21heCBibV9zdWJ0cmFjdCBibV96ZXJvIGJtX29uZSBibV9zcmNfY29sb3VyICcgK1xuICAgICAgJ2JtX2ludl9zcmNfY29sb3VyIGJtX3NyY19jb2xvciBibV9pbnZfc3JjX2NvbG9yIGJtX3NyY19hbHBoYSAnICtcbiAgICAgICdibV9pbnZfc3JjX2FscGhhIGJtX2Rlc3RfYWxwaGEgYm1faW52X2Rlc3RfYWxwaGEgYm1fZGVzdF9jb2xvdXIgJyArXG4gICAgICAnYm1faW52X2Rlc3RfY29sb3VyIGJtX2Rlc3RfY29sb3IgYm1faW52X2Rlc3RfY29sb3IgYm1fc3JjX2FscGhhX3NhdCAnICtcbiAgICAgICd0Zl9wb2ludCB0Zl9saW5lYXIgdGZfYW5pc290cm9waWMgbWlwX29mZiBtaXBfb24gbWlwX21hcmtlZG9ubHkgJyArXG4gICAgICAnYXVkaW9fZmFsbG9mZl9ub25lIGF1ZGlvX2ZhbGxvZmZfaW52ZXJzZV9kaXN0YW5jZSAnICtcbiAgICAgICdhdWRpb19mYWxsb2ZmX2ludmVyc2VfZGlzdGFuY2VfY2xhbXBlZCBhdWRpb19mYWxsb2ZmX2xpbmVhcl9kaXN0YW5jZSAnICtcbiAgICAgICdhdWRpb19mYWxsb2ZmX2xpbmVhcl9kaXN0YW5jZV9jbGFtcGVkICcgK1xuICAgICAgJ2F1ZGlvX2ZhbGxvZmZfZXhwb25lbnRfZGlzdGFuY2UgJyArXG4gICAgICAnYXVkaW9fZmFsbG9mZl9leHBvbmVudF9kaXN0YW5jZV9jbGFtcGVkIGF1ZGlvX29sZF9zeXN0ZW0gJyArXG4gICAgICAnYXVkaW9fbmV3X3N5c3RlbSBhdWRpb19tb25vIGF1ZGlvX3N0ZXJlbyBhdWRpb18zZCBjcl9kZWZhdWx0IGNyX25vbmUgJyArXG4gICAgICAnY3JfYXJyb3cgY3JfY3Jvc3MgY3JfYmVhbSBjcl9zaXplX25lc3cgY3Jfc2l6ZV9ucyBjcl9zaXplX253c2UgJyArXG4gICAgICAnY3Jfc2l6ZV93ZSBjcl91cGFycm93IGNyX2hvdXJnbGFzcyBjcl9kcmFnIGNyX2FwcHN0YXJ0IGNyX2hhbmRwb2ludCAnICtcbiAgICAgICdjcl9zaXplX2FsbCBzcHJpdGVzcGVlZF9mcmFtZXNwZXJzZWNvbmQgJyArXG4gICAgICAnc3ByaXRlc3BlZWRfZnJhbWVzcGVyZ2FtZWZyYW1lIGFzc2V0X29iamVjdCBhc3NldF91bmtub3duICcgK1xuICAgICAgJ2Fzc2V0X3Nwcml0ZSBhc3NldF9zb3VuZCBhc3NldF9yb29tIGFzc2V0X3BhdGggYXNzZXRfc2NyaXB0ICcgK1xuICAgICAgJ2Fzc2V0X2ZvbnQgYXNzZXRfdGltZWxpbmUgYXNzZXRfdGlsZXMgYXNzZXRfc2hhZGVyIGZhX3JlYWRvbmx5ICcgK1xuICAgICAgJ2ZhX2hpZGRlbiBmYV9zeXNmaWxlIGZhX3ZvbHVtZWlkIGZhX2RpcmVjdG9yeSBmYV9hcmNoaXZlICAnICtcbiAgICAgICdkc190eXBlX21hcCBkc190eXBlX2xpc3QgZHNfdHlwZV9zdGFjayBkc190eXBlX3F1ZXVlIGRzX3R5cGVfZ3JpZCAnICtcbiAgICAgICdkc190eXBlX3ByaW9yaXR5IGVmX2V4cGxvc2lvbiBlZl9yaW5nIGVmX2VsbGlwc2UgZWZfZmlyZXdvcmsgJyArXG4gICAgICAnZWZfc21va2UgZWZfc21va2V1cCBlZl9zdGFyIGVmX3NwYXJrIGVmX2ZsYXJlIGVmX2Nsb3VkIGVmX3JhaW4gJyArXG4gICAgICAnZWZfc25vdyBwdF9zaGFwZV9waXhlbCBwdF9zaGFwZV9kaXNrIHB0X3NoYXBlX3NxdWFyZSBwdF9zaGFwZV9saW5lICcgK1xuICAgICAgJ3B0X3NoYXBlX3N0YXIgcHRfc2hhcGVfY2lyY2xlIHB0X3NoYXBlX3JpbmcgcHRfc2hhcGVfc3BoZXJlICcgK1xuICAgICAgJ3B0X3NoYXBlX2ZsYXJlIHB0X3NoYXBlX3NwYXJrIHB0X3NoYXBlX2V4cGxvc2lvbiBwdF9zaGFwZV9jbG91ZCAnICtcbiAgICAgICdwdF9zaGFwZV9zbW9rZSBwdF9zaGFwZV9zbm93IHBzX2Rpc3RyX2xpbmVhciBwc19kaXN0cl9nYXVzc2lhbiAnICtcbiAgICAgICdwc19kaXN0cl9pbnZnYXVzc2lhbiBwc19zaGFwZV9yZWN0YW5nbGUgcHNfc2hhcGVfZWxsaXBzZSAnICtcbiAgICAgICdwc19zaGFwZV9kaWFtb25kIHBzX3NoYXBlX2xpbmUgdHlfcmVhbCB0eV9zdHJpbmcgZGxsX2NkZWNsICcgK1xuICAgICAgJ2RsbF9zdGRjYWxsIG1hdHJpeF92aWV3IG1hdHJpeF9wcm9qZWN0aW9uIG1hdHJpeF93b3JsZCBvc193aW4zMiAnICtcbiAgICAgICdvc193aW5kb3dzIG9zX21hY29zeCBvc19pb3Mgb3NfYW5kcm9pZCBvc19zeW1iaWFuIG9zX2xpbnV4ICcgK1xuICAgICAgJ29zX3Vua25vd24gb3Nfd2lucGhvbmUgb3NfdGl6ZW4gb3Nfd2luOG5hdGl2ZSAnICtcbiAgICAgICdvc193aWl1IG9zXzNkcyAgb3NfcHN2aXRhIG9zX2JiMTAgb3NfcHM0IG9zX3hib3hvbmUgJyArXG4gICAgICAnb3NfcHMzIG9zX3hib3gzNjAgb3NfdXdwIG9zX3R2b3Mgb3Nfc3dpdGNoICcgK1xuICAgICAgJ2Jyb3dzZXJfbm90X2FfYnJvd3NlciBicm93c2VyX3Vua25vd24gYnJvd3Nlcl9pZSBicm93c2VyX2ZpcmVmb3ggJyArXG4gICAgICAnYnJvd3Nlcl9jaHJvbWUgYnJvd3Nlcl9zYWZhcmkgYnJvd3Nlcl9zYWZhcmlfbW9iaWxlIGJyb3dzZXJfb3BlcmEgJyArXG4gICAgICAnYnJvd3Nlcl90aXplbiBicm93c2VyX2VkZ2UgYnJvd3Nlcl93aW5kb3dzX3N0b3JlIGJyb3dzZXJfaWVfbW9iaWxlICAnICtcbiAgICAgICdkZXZpY2VfaW9zX3Vua25vd24gZGV2aWNlX2lvc19pcGhvbmUgZGV2aWNlX2lvc19pcGhvbmVfcmV0aW5hICcgK1xuICAgICAgJ2RldmljZV9pb3NfaXBhZCBkZXZpY2VfaW9zX2lwYWRfcmV0aW5hIGRldmljZV9pb3NfaXBob25lNSAnICtcbiAgICAgICdkZXZpY2VfaW9zX2lwaG9uZTYgZGV2aWNlX2lvc19pcGhvbmU2cGx1cyBkZXZpY2VfZW11bGF0b3IgJyArXG4gICAgICAnZGV2aWNlX3RhYmxldCBkaXNwbGF5X2xhbmRzY2FwZSBkaXNwbGF5X2xhbmRzY2FwZV9mbGlwcGVkICcgK1xuICAgICAgJ2Rpc3BsYXlfcG9ydHJhaXQgZGlzcGxheV9wb3J0cmFpdF9mbGlwcGVkIHRtX3NsZWVwIHRtX2NvdW50dnN5bmNzICcgK1xuICAgICAgJ29mX2NoYWxsZW5nZV93aW4gb2ZfY2hhbGxlbiBnZV9sb3NlIG9mX2NoYWxsZW5nZV90aWUgJyArXG4gICAgICAnbGVhZGVyYm9hcmRfdHlwZV9udW1iZXIgbGVhZGVyYm9hcmRfdHlwZV90aW1lX21pbnNfc2VjcyAnICtcbiAgICAgICdjbXBmdW5jX25ldmVyIGNtcGZ1bmNfbGVzcyBjbXBmdW5jX2VxdWFsIGNtcGZ1bmNfbGVzc2VxdWFsICcgK1xuICAgICAgJ2NtcGZ1bmNfZ3JlYXRlciBjbXBmdW5jX25vdGVxdWFsIGNtcGZ1bmNfZ3JlYXRlcmVxdWFsIGNtcGZ1bmNfYWx3YXlzICcgK1xuICAgICAgJ2N1bGxfbm9jdWxsaW5nIGN1bGxfY2xvY2t3aXNlIGN1bGxfY291bnRlcmNsb2Nrd2lzZSBsaWdodHR5cGVfZGlyICcgK1xuICAgICAgJ2xpZ2h0dHlwZV9wb2ludCBpYXBfZXZfc3RvcmVsb2FkIGlhcF9ldl9wcm9kdWN0IGlhcF9ldl9wdXJjaGFzZSAnICtcbiAgICAgICdpYXBfZXZfY29uc3VtZSBpYXBfZXZfcmVzdG9yZSBpYXBfc3RvcmVsb2FkX29rIGlhcF9zdG9yZWxvYWRfZmFpbGVkICcgK1xuICAgICAgJ2lhcF9zdGF0dXNfdW5pbml0aWFsaXNlZCBpYXBfc3RhdHVzX3VuYXZhaWxhYmxlIGlhcF9zdGF0dXNfbG9hZGluZyAnICtcbiAgICAgICdpYXBfc3RhdHVzX2F2YWlsYWJsZSBpYXBfc3RhdHVzX3Byb2Nlc3NpbmcgaWFwX3N0YXR1c19yZXN0b3JpbmcgJyArXG4gICAgICAnaWFwX2ZhaWxlZCBpYXBfdW5hdmFpbGFibGUgaWFwX2F2YWlsYWJsZSBpYXBfcHVyY2hhc2VkIGlhcF9jYW5jZWxlZCAnICtcbiAgICAgICdpYXBfcmVmdW5kZWQgZmJfbG9naW5fZGVmYXVsdCBmYl9sb2dpbl9mYWxsYmFja190b193ZWJ2aWV3ICcgK1xuICAgICAgJ2ZiX2xvZ2luX25vX2ZhbGxiYWNrX3RvX3dlYnZpZXcgZmJfbG9naW5fZm9yY2luZ193ZWJ2aWV3ICcgK1xuICAgICAgJ2ZiX2xvZ2luX3VzZV9zeXN0ZW1fYWNjb3VudCBmYl9sb2dpbl9mb3JjaW5nX3NhZmFyaSAgJyArXG4gICAgICAncGh5X2pvaW50X2FuY2hvcl8xX3ggcGh5X2pvaW50X2FuY2hvcl8xX3kgcGh5X2pvaW50X2FuY2hvcl8yX3ggJyArXG4gICAgICAncGh5X2pvaW50X2FuY2hvcl8yX3kgcGh5X2pvaW50X3JlYWN0aW9uX2ZvcmNlX3ggJyArXG4gICAgICAncGh5X2pvaW50X3JlYWN0aW9uX2ZvcmNlX3kgcGh5X2pvaW50X3JlYWN0aW9uX3RvcnF1ZSAnICtcbiAgICAgICdwaHlfam9pbnRfbW90b3Jfc3BlZWQgcGh5X2pvaW50X2FuZ2xlIHBoeV9qb2ludF9tb3Rvcl90b3JxdWUgJyArXG4gICAgICAncGh5X2pvaW50X21heF9tb3Rvcl90b3JxdWUgcGh5X2pvaW50X3RyYW5zbGF0aW9uIHBoeV9qb2ludF9zcGVlZCAnICtcbiAgICAgICdwaHlfam9pbnRfbW90b3JfZm9yY2UgcGh5X2pvaW50X21heF9tb3Rvcl9mb3JjZSBwaHlfam9pbnRfbGVuZ3RoXzEgJyArXG4gICAgICAncGh5X2pvaW50X2xlbmd0aF8yIHBoeV9qb2ludF9kYW1waW5nX3JhdGlvIHBoeV9qb2ludF9mcmVxdWVuY3kgJyArXG4gICAgICAncGh5X2pvaW50X2xvd2VyX2FuZ2xlX2xpbWl0IHBoeV9qb2ludF91cHBlcl9hbmdsZV9saW1pdCAnICtcbiAgICAgICdwaHlfam9pbnRfYW5nbGVfbGltaXRzIHBoeV9qb2ludF9tYXhfbGVuZ3RoIHBoeV9qb2ludF9tYXhfdG9ycXVlICcgK1xuICAgICAgJ3BoeV9qb2ludF9tYXhfZm9yY2UgcGh5X2RlYnVnX3JlbmRlcl9hYWJiICcgK1xuICAgICAgJ3BoeV9kZWJ1Z19yZW5kZXJfY29sbGlzaW9uX3BhaXJzIHBoeV9kZWJ1Z19yZW5kZXJfY29tcyAnICtcbiAgICAgICdwaHlfZGVidWdfcmVuZGVyX2NvcmVfc2hhcGVzIHBoeV9kZWJ1Z19yZW5kZXJfam9pbnRzICcgK1xuICAgICAgJ3BoeV9kZWJ1Z19yZW5kZXJfb2JiIHBoeV9kZWJ1Z19yZW5kZXJfc2hhcGVzICAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZmxhZ193YXRlciBwaHlfcGFydGljbGVfZmxhZ196b21iaWUgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2ZsYWdfd2FsbCBwaHlfcGFydGljbGVfZmxhZ19zcHJpbmcgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2ZsYWdfZWxhc3RpYyBwaHlfcGFydGljbGVfZmxhZ192aXNjb3VzICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9mbGFnX3Bvd2RlciBwaHlfcGFydGljbGVfZmxhZ190ZW5zaWxlICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9mbGFnX2NvbG91cm1peGluZyBwaHlfcGFydGljbGVfZmxhZ19jb2xvcm1peGluZyAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZ3JvdXBfZmxhZ19zb2xpZCBwaHlfcGFydGljbGVfZ3JvdXBfZmxhZ19yaWdpZCAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZGF0YV9mbGFnX3R5cGVmbGFncyBwaHlfcGFydGljbGVfZGF0YV9mbGFnX3Bvc2l0aW9uICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfdmVsb2NpdHkgcGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvdXIgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvciBwaHlfcGFydGljbGVfZGF0YV9mbGFnX2NhdGVnb3J5ICAnICtcbiAgICAgICdhY2hpZXZlbWVudF9vdXJfaW5mbyBhY2hpZXZlbWVudF9mcmllbmRzX2luZm8gJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfbGVhZGVyYm9hcmRfaW5mbyBhY2hpZXZlbWVudF9hY2hpZXZlbWVudF9pbmZvICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2ZpbHRlcl9hbGxfcGxheWVycyBhY2hpZXZlbWVudF9maWx0ZXJfZnJpZW5kc19vbmx5ICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2ZpbHRlcl9mYXZvcml0ZXNfb25seSAnICtcbiAgICAgICdhY2hpZXZlbWVudF90eXBlX2FjaGlldmVtZW50X2NoYWxsZW5nZSAnICtcbiAgICAgICdhY2hpZXZlbWVudF90eXBlX3Njb3JlX2NoYWxsZW5nZSBhY2hpZXZlbWVudF9waWNfbG9hZGVkICAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X3VpIGFjaGlldmVtZW50X3Nob3dfcHJvZmlsZSAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X2xlYWRlcmJvYXJkIGFjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnQgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfc2hvd19iYW5rIGFjaGlldmVtZW50X3Nob3dfZnJpZW5kX3BpY2tlciAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X3B1cmNoYXNlX3Byb21wdCBuZXR3b3JrX3NvY2tldF90Y3AgJyArXG4gICAgICAnbmV0d29ya19zb2NrZXRfdWRwIG5ldHdvcmtfc29ja2V0X2JsdWV0b290aCBuZXR3b3JrX3R5cGVfY29ubmVjdCAnICtcbiAgICAgICduZXR3b3JrX3R5cGVfZGlzY29ubmVjdCBuZXR3b3JrX3R5cGVfZGF0YSAnICtcbiAgICAgICduZXR3b3JrX3R5cGVfbm9uX2Jsb2NraW5nX2Nvbm5lY3QgbmV0d29ya19jb25maWdfY29ubmVjdF90aW1lb3V0ICcgK1xuICAgICAgJ25ldHdvcmtfY29uZmlnX3VzZV9ub25fYmxvY2tpbmdfc29ja2V0ICcgK1xuICAgICAgJ25ldHdvcmtfY29uZmlnX2VuYWJsZV9yZWxpYWJsZV91ZHAgJyArXG4gICAgICAnbmV0d29ya19jb25maWdfZGlzYWJsZV9yZWxpYWJsZV91ZHAgYnVmZmVyX2ZpeGVkIGJ1ZmZlcl9ncm93ICcgK1xuICAgICAgJ2J1ZmZlcl93cmFwIGJ1ZmZlcl9mYXN0IGJ1ZmZlcl92YnVmZmVyIGJ1ZmZlcl9uZXR3b3JrIGJ1ZmZlcl91OCAnICtcbiAgICAgICdidWZmZXJfczggYnVmZmVyX3UxNiBidWZmZXJfczE2IGJ1ZmZlcl91MzIgYnVmZmVyX3MzMiBidWZmZXJfdTY0ICcgK1xuICAgICAgJ2J1ZmZlcl9mMTYgYnVmZmVyX2YzMiBidWZmZXJfZjY0IGJ1ZmZlcl9ib29sIGJ1ZmZlcl90ZXh0ICcgK1xuICAgICAgJ2J1ZmZlcl9zdHJpbmcgYnVmZmVyX3N1cmZhY2VfY29weSBidWZmZXJfc2Vla19zdGFydCAnICtcbiAgICAgICdidWZmZXJfc2Vla19yZWxhdGl2ZSBidWZmZXJfc2Vla19lbmQgJyArXG4gICAgICAnYnVmZmVyX2dlbmVyYWxlcnJvciBidWZmZXJfb3V0b2ZzcGFjZSBidWZmZXJfb3V0b2Zib3VuZHMgJyArXG4gICAgICAnYnVmZmVyX2ludmFsaWR0eXBlICB0ZXh0X3R5cGUgYnV0dG9uX3R5cGUgaW5wdXRfdHlwZSBBTlNJX0NIQVJTRVQgJyArXG4gICAgICAnREVGQVVMVF9DSEFSU0VUIEVBU1RFVVJPUEVfQ0hBUlNFVCBSVVNTSUFOX0NIQVJTRVQgU1lNQk9MX0NIQVJTRVQgJyArXG4gICAgICAnU0hJRlRKSVNfQ0hBUlNFVCBIQU5HRVVMX0NIQVJTRVQgR0IyMzEyX0NIQVJTRVQgQ0hJTkVTRUJJRzVfQ0hBUlNFVCAnICtcbiAgICAgICdKT0hBQl9DSEFSU0VUIEhFQlJFV19DSEFSU0VUIEFSQUJJQ19DSEFSU0VUIEdSRUVLX0NIQVJTRVQgJyArXG4gICAgICAnVFVSS0lTSF9DSEFSU0VUIFZJRVROQU1FU0VfQ0hBUlNFVCBUSEFJX0NIQVJTRVQgTUFDX0NIQVJTRVQgJyArXG4gICAgICAnQkFMVElDX0NIQVJTRVQgT0VNX0NIQVJTRVQgIGdwX2ZhY2UxIGdwX2ZhY2UyIGdwX2ZhY2UzIGdwX2ZhY2U0ICcgK1xuICAgICAgJ2dwX3Nob3VsZGVybCBncF9zaG91bGRlcnIgZ3Bfc2hvdWxkZXJsYiBncF9zaG91bGRlcnJiIGdwX3NlbGVjdCAnICtcbiAgICAgICdncF9zdGFydCBncF9zdGlja2wgZ3Bfc3RpY2tyIGdwX3BhZHUgZ3BfcGFkZCBncF9wYWRsIGdwX3BhZHIgJyArXG4gICAgICAnZ3BfYXhpc2xoIGdwX2F4aXNsdiBncF9heGlzcmggZ3BfYXhpc3J2IG92X2ZyaWVuZHMgb3ZfY29tbXVuaXR5ICcgK1xuICAgICAgJ292X3BsYXllcnMgb3Zfc2V0dGluZ3Mgb3ZfZ2FtZWdyb3VwIG92X2FjaGlldmVtZW50cyBsYl9zb3J0X25vbmUgJyArXG4gICAgICAnbGJfc29ydF9hc2NlbmRpbmcgbGJfc29ydF9kZXNjZW5kaW5nIGxiX2Rpc3Bfbm9uZSBsYl9kaXNwX251bWVyaWMgJyArXG4gICAgICAnbGJfZGlzcF90aW1lX3NlYyBsYl9kaXNwX3RpbWVfbXMgdWdjX3Jlc3VsdF9zdWNjZXNzICcgK1xuICAgICAgJ3VnY19maWxldHlwZV9jb21tdW5pdHkgdWdjX2ZpbGV0eXBlX21pY3JvdHJhbnMgdWdjX3Zpc2liaWxpdHlfcHVibGljICcgK1xuICAgICAgJ3VnY192aXNpYmlsaXR5X2ZyaWVuZHNfb25seSB1Z2NfdmlzaWJpbGl0eV9wcml2YXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeVZvdGUgdWdjX3F1ZXJ5X1JhbmtlZEJ5UHVibGljYXRpb25EYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9BY2NlcHRlZEZvckdhbWVSYW5rZWRCeUFjY2VwdGFuY2VEYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeVRyZW5kICcgK1xuICAgICAgJ3VnY19xdWVyeV9GYXZvcml0ZWRCeUZyaWVuZHNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZSAnICtcbiAgICAgICd1Z2NfcXVlcnlfQ3JlYXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeU51bVRpbWVzUmVwb3J0ZWQgJyArXG4gICAgICAndWdjX3F1ZXJ5X0NyZWF0ZWRCeUZvbGxvd2VkVXNlcnNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZSAnICtcbiAgICAgICd1Z2NfcXVlcnlfTm90WWV0UmF0ZWQgdWdjX3F1ZXJ5X1JhbmtlZEJ5VG90YWxWb3Rlc0FzYyAnICtcbiAgICAgICd1Z2NfcXVlcnlfUmFua2VkQnlWb3Rlc1VwIHVnY19xdWVyeV9SYW5rZWRCeVRleHRTZWFyY2ggJyArXG4gICAgICAndWdjX3NvcnRvcmRlcl9DcmVhdGlvbk9yZGVyRGVzYyB1Z2Nfc29ydG9yZGVyX0NyZWF0aW9uT3JkZXJBc2MgJyArXG4gICAgICAndWdjX3NvcnRvcmRlcl9UaXRsZUFzYyB1Z2Nfc29ydG9yZGVyX0xhc3RVcGRhdGVkRGVzYyAnICtcbiAgICAgICd1Z2Nfc29ydG9yZGVyX1N1YnNjcmlwdGlvbkRhdGVEZXNjIHVnY19zb3J0b3JkZXJfVm90ZVNjb3JlRGVzYyAnICtcbiAgICAgICd1Z2Nfc29ydG9yZGVyX0Zvck1vZGVyYXRpb24gdWdjX2xpc3RfUHVibGlzaGVkIHVnY19saXN0X1ZvdGVkT24gJyArXG4gICAgICAndWdjX2xpc3RfVm90ZWRVcCB1Z2NfbGlzdF9Wb3RlZERvd24gdWdjX2xpc3RfV2lsbFZvdGVMYXRlciAnICtcbiAgICAgICd1Z2NfbGlzdF9GYXZvcml0ZWQgdWdjX2xpc3RfU3Vic2NyaWJlZCB1Z2NfbGlzdF9Vc2VkT3JQbGF5ZWQgJyArXG4gICAgICAndWdjX2xpc3RfRm9sbG93ZWQgdWdjX21hdGNoX0l0ZW1zIHVnY19tYXRjaF9JdGVtc19NdHggJyArXG4gICAgICAndWdjX21hdGNoX0l0ZW1zX1JlYWR5VG9Vc2UgdWdjX21hdGNoX0NvbGxlY3Rpb25zIHVnY19tYXRjaF9BcnR3b3JrICcgK1xuICAgICAgJ3VnY19tYXRjaF9WaWRlb3MgdWdjX21hdGNoX1NjcmVlbnNob3RzIHVnY19tYXRjaF9BbGxHdWlkZXMgJyArXG4gICAgICAndWdjX21hdGNoX1dlYkd1aWRlcyB1Z2NfbWF0Y2hfSW50ZWdyYXRlZEd1aWRlcyAnICtcbiAgICAgICd1Z2NfbWF0Y2hfVXNhYmxlSW5HYW1lIHVnY19tYXRjaF9Db250cm9sbGVyQmluZGluZ3MgICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9wb3NpdGlvbiB2ZXJ0ZXhfdXNhZ2VfY29sb3VyIHZlcnRleF91c2FnZV9jb2xvciAnICtcbiAgICAgICd2ZXJ0ZXhfdXNhZ2Vfbm9ybWFsIHZlcnRleF91c2FnZV90ZXhjb29yZCB2ZXJ0ZXhfdXNhZ2VfdGV4dGNvb3JkICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9ibGVuZHdlaWdodCB2ZXJ0ZXhfdXNhZ2VfYmxlbmRpbmRpY2VzICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9wc2l6ZSB2ZXJ0ZXhfdXNhZ2VfdGFuZ2VudCB2ZXJ0ZXhfdXNhZ2VfYmlub3JtYWwgJyArXG4gICAgICAndmVydGV4X3VzYWdlX2ZvZyB2ZXJ0ZXhfdXNhZ2VfZGVwdGggdmVydGV4X3VzYWdlX3NhbXBsZSAnICtcbiAgICAgICd2ZXJ0ZXhfdHlwZV9mbG9hdDEgdmVydGV4X3R5cGVfZmxvYXQyIHZlcnRleF90eXBlX2Zsb2F0MyAnICtcbiAgICAgICd2ZXJ0ZXhfdHlwZV9mbG9hdDQgdmVydGV4X3R5cGVfY29sb3VyIHZlcnRleF90eXBlX2NvbG9yICcgK1xuICAgICAgJ3ZlcnRleF90eXBlX3VieXRlNCBsYXllcmVsZW1lbnR0eXBlX3VuZGVmaW5lZCAnICtcbiAgICAgICdsYXllcmVsZW1lbnR0eXBlX2JhY2tncm91bmQgbGF5ZXJlbGVtZW50dHlwZV9pbnN0YW5jZSAnICtcbiAgICAgICdsYXllcmVsZW1lbnR0eXBlX29sZHRpbGVtYXAgbGF5ZXJlbGVtZW50dHlwZV9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJlbGVtZW50dHlwZV90aWxlbWFwIGxheWVyZWxlbWVudHR5cGVfcGFydGljbGVzeXN0ZW0gJyArXG4gICAgICAnbGF5ZXJlbGVtZW50dHlwZV90aWxlIHRpbGVfcm90YXRlIHRpbGVfZmxpcCB0aWxlX21pcnJvciAnICtcbiAgICAgICd0aWxlX2luZGV4X21hc2sga2J2X3R5cGVfZGVmYXVsdCBrYnZfdHlwZV9hc2NpaSBrYnZfdHlwZV91cmwgJyArXG4gICAgICAna2J2X3R5cGVfZW1haWwga2J2X3R5cGVfbnVtYmVycyBrYnZfdHlwZV9waG9uZSBrYnZfdHlwZV9waG9uZV9uYW1lICcgK1xuICAgICAgJ2tidl9yZXR1cm5rZXlfZGVmYXVsdCBrYnZfcmV0dXJua2V5X2dvIGtidl9yZXR1cm5rZXlfZ29vZ2xlICcgK1xuICAgICAgJ2tidl9yZXR1cm5rZXlfam9pbiBrYnZfcmV0dXJua2V5X25leHQga2J2X3JldHVybmtleV9yb3V0ZSAnICtcbiAgICAgICdrYnZfcmV0dXJua2V5X3NlYXJjaCBrYnZfcmV0dXJua2V5X3NlbmQga2J2X3JldHVybmtleV95YWhvbyAnICtcbiAgICAgICdrYnZfcmV0dXJua2V5X2RvbmUga2J2X3JldHVybmtleV9jb250aW51ZSBrYnZfcmV0dXJua2V5X2VtZXJnZW5jeSAnICtcbiAgICAgICdrYnZfYXV0b2NhcGl0YWxpemVfbm9uZSBrYnZfYXV0b2NhcGl0YWxpemVfd29yZHMgJyArXG4gICAgICAna2J2X2F1dG9jYXBpdGFsaXplX3NlbnRlbmNlcyBrYnZfYXV0b2NhcGl0YWxpemVfY2hhcmFjdGVycycsXG4gICAgc3ltYm9sOiAnYXJndW1lbnRfcmVsYXRpdmUgYXJndW1lbnQgYXJndW1lbnQwIGFyZ3VtZW50MSBhcmd1bWVudDIgJyArXG4gICAgICAnYXJndW1lbnQzIGFyZ3VtZW50NCBhcmd1bWVudDUgYXJndW1lbnQ2IGFyZ3VtZW50NyBhcmd1bWVudDggJyArXG4gICAgICAnYXJndW1lbnQ5IGFyZ3VtZW50MTAgYXJndW1lbnQxMSBhcmd1bWVudDEyIGFyZ3VtZW50MTMgYXJndW1lbnQxNCAnICtcbiAgICAgICdhcmd1bWVudDE1IGFyZ3VtZW50X2NvdW50IHggeSB4cHJldmlvdXMgeXByZXZpb3VzIHhzdGFydCB5c3RhcnQgJyArXG4gICAgICAnaHNwZWVkIHZzcGVlZCBkaXJlY3Rpb24gc3BlZWQgZnJpY3Rpb24gZ3Jhdml0eSBncmF2aXR5X2RpcmVjdGlvbiAnICtcbiAgICAgICdwYXRoX2luZGV4IHBhdGhfcG9zaXRpb24gcGF0aF9wb3NpdGlvbnByZXZpb3VzIHBhdGhfc3BlZWQgJyArXG4gICAgICAncGF0aF9zY2FsZSBwYXRoX29yaWVudGF0aW9uIHBhdGhfZW5kYWN0aW9uIG9iamVjdF9pbmRleCBpZCBzb2xpZCAnICtcbiAgICAgICdwZXJzaXN0ZW50IG1hc2tfaW5kZXggaW5zdGFuY2VfY291bnQgaW5zdGFuY2VfaWQgcm9vbV9zcGVlZCBmcHMgJyArXG4gICAgICAnZnBzX3JlYWwgY3VycmVudF90aW1lIGN1cnJlbnRfeWVhciBjdXJyZW50X21vbnRoIGN1cnJlbnRfZGF5ICcgK1xuICAgICAgJ2N1cnJlbnRfd2Vla2RheSBjdXJyZW50X2hvdXIgY3VycmVudF9taW51dGUgY3VycmVudF9zZWNvbmQgYWxhcm0gJyArXG4gICAgICAndGltZWxpbmVfaW5kZXggdGltZWxpbmVfcG9zaXRpb24gdGltZWxpbmVfc3BlZWQgdGltZWxpbmVfcnVubmluZyAnICtcbiAgICAgICd0aW1lbGluZV9sb29wIHJvb20gcm9vbV9maXJzdCByb29tX2xhc3Qgcm9vbV93aWR0aCByb29tX2hlaWdodCAnICtcbiAgICAgICdyb29tX2NhcHRpb24gcm9vbV9wZXJzaXN0ZW50IHNjb3JlIGxpdmVzIGhlYWx0aCBzaG93X3Njb3JlICcgK1xuICAgICAgJ3Nob3dfbGl2ZXMgc2hvd19oZWFsdGggY2FwdGlvbl9zY29yZSBjYXB0aW9uX2xpdmVzIGNhcHRpb25faGVhbHRoICcgK1xuICAgICAgJ2V2ZW50X3R5cGUgZXZlbnRfbnVtYmVyIGV2ZW50X29iamVjdCBldmVudF9hY3Rpb24gJyArXG4gICAgICAnYXBwbGljYXRpb25fc3VyZmFjZSBnYW1lbWFrZXJfcHJvIGdhbWVtYWtlcl9yZWdpc3RlcmVkICcgK1xuICAgICAgJ2dhbWVtYWtlcl92ZXJzaW9uIGVycm9yX29jY3VycmVkIGVycm9yX2xhc3QgZGVidWdfbW9kZSAnICtcbiAgICAgICdrZXlib2FyZF9rZXkga2V5Ym9hcmRfbGFzdGtleSBrZXlib2FyZF9sYXN0Y2hhciBrZXlib2FyZF9zdHJpbmcgJyArXG4gICAgICAnbW91c2VfeCBtb3VzZV95IG1vdXNlX2J1dHRvbiBtb3VzZV9sYXN0YnV0dG9uIGN1cnNvcl9zcHJpdGUgJyArXG4gICAgICAndmlzaWJsZSBzcHJpdGVfaW5kZXggc3ByaXRlX3dpZHRoIHNwcml0ZV9oZWlnaHQgc3ByaXRlX3hvZmZzZXQgJyArXG4gICAgICAnc3ByaXRlX3lvZmZzZXQgaW1hZ2VfbnVtYmVyIGltYWdlX2luZGV4IGltYWdlX3NwZWVkIGRlcHRoICcgK1xuICAgICAgJ2ltYWdlX3hzY2FsZSBpbWFnZV95c2NhbGUgaW1hZ2VfYW5nbGUgaW1hZ2VfYWxwaGEgaW1hZ2VfYmxlbmQgJyArXG4gICAgICAnYmJveF9sZWZ0IGJib3hfcmlnaHQgYmJveF90b3AgYmJveF9ib3R0b20gbGF5ZXIgYmFja2dyb3VuZF9jb2xvdXIgICcgK1xuICAgICAgJ2JhY2tncm91bmRfc2hvd2NvbG91ciBiYWNrZ3JvdW5kX2NvbG9yIGJhY2tncm91bmRfc2hvd2NvbG9yICcgK1xuICAgICAgJ3ZpZXdfZW5hYmxlZCB2aWV3X2N1cnJlbnQgdmlld192aXNpYmxlIHZpZXdfeHZpZXcgdmlld195dmlldyAnICtcbiAgICAgICd2aWV3X3d2aWV3IHZpZXdfaHZpZXcgdmlld194cG9ydCB2aWV3X3lwb3J0IHZpZXdfd3BvcnQgdmlld19ocG9ydCAnICtcbiAgICAgICd2aWV3X2FuZ2xlIHZpZXdfaGJvcmRlciB2aWV3X3Zib3JkZXIgdmlld19oc3BlZWQgdmlld192c3BlZWQgJyArXG4gICAgICAndmlld19vYmplY3Qgdmlld19zdXJmYWNlX2lkIHZpZXdfY2FtZXJhIGdhbWVfaWQgZ2FtZV9kaXNwbGF5X25hbWUgJyArXG4gICAgICAnZ2FtZV9wcm9qZWN0X25hbWUgZ2FtZV9zYXZlX2lkIHdvcmtpbmdfZGlyZWN0b3J5IHRlbXBfZGlyZWN0b3J5ICcgK1xuICAgICAgJ3Byb2dyYW1fZGlyZWN0b3J5IGJyb3dzZXJfd2lkdGggYnJvd3Nlcl9oZWlnaHQgb3NfdHlwZSBvc19kZXZpY2UgJyArXG4gICAgICAnb3NfYnJvd3NlciBvc192ZXJzaW9uIGRpc3BsYXlfYWEgYXN5bmNfbG9hZCBkZWx0YV90aW1lICcgK1xuICAgICAgJ3dlYmdsX2VuYWJsZWQgZXZlbnRfZGF0YSBpYXBfZGF0YSBwaHlfcm90YXRpb24gcGh5X3Bvc2l0aW9uX3ggJyArXG4gICAgICAncGh5X3Bvc2l0aW9uX3kgcGh5X2FuZ3VsYXJfdmVsb2NpdHkgcGh5X2xpbmVhcl92ZWxvY2l0eV94ICcgK1xuICAgICAgJ3BoeV9saW5lYXJfdmVsb2NpdHlfeSBwaHlfc3BlZWRfeCBwaHlfc3BlZWRfeSBwaHlfc3BlZWQgJyArXG4gICAgICAncGh5X2FuZ3VsYXJfZGFtcGluZyBwaHlfbGluZWFyX2RhbXBpbmcgcGh5X2J1bGxldCAnICtcbiAgICAgICdwaHlfZml4ZWRfcm90YXRpb24gcGh5X2FjdGl2ZSBwaHlfbWFzcyBwaHlfaW5lcnRpYSBwaHlfY29tX3ggJyArXG4gICAgICAncGh5X2NvbV95IHBoeV9keW5hbWljIHBoeV9raW5lbWF0aWMgcGh5X3NsZWVwaW5nICcgK1xuICAgICAgJ3BoeV9jb2xsaXNpb25fcG9pbnRzIHBoeV9jb2xsaXNpb25feCBwaHlfY29sbGlzaW9uX3kgJyArXG4gICAgICAncGh5X2NvbF9ub3JtYWxfeCBwaHlfY29sX25vcm1hbF95IHBoeV9wb3NpdGlvbl94cHJldmlvdXMgJyArXG4gICAgICAncGh5X3Bvc2l0aW9uX3lwcmV2aW91cydcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ21sJywgJ0dNTCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLCAvLyBsYW5ndWFnZSBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAga2V5d29yZHM6IEdNTF9LRVlXT1JEUyxcblxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBHT19LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2JyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCAnICtcbiAgICAgICdjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciAnICtcbiAgICAgICdib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4ICcgK1xuICAgICAgJ3VpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZScsXG4gICAgbGl0ZXJhbDpcbiAgICAgICAndHJ1ZSBmYWxzZSBpb3RhIG5pbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYXBwZW5kIGNhcCBjbG9zZSBjb21wbGV4IGNvcHkgaW1hZyBsZW4gbWFrZSBuZXcgcGFuaWMgcHJpbnQgcHJpbnRsbiByZWFsIHJlY292ZXIgZGVsZXRlJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ29sYW5nJ10sXG4gICAga2V5d29yZHM6IEdPX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAge2JlZ2luOiAnYCcsIGVuZDogJ2AnfSxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnW2ldJywgcmVsZXZhbmNlOiAxfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86PS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLCBlbmQ6ICdcXFxccyooXFxcXHt8JCknLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IEdPX0tFWVdPUkRTLFxuICAgICAgICAgICAgaWxsZWdhbDogL1tcIiddL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgJ3ByaW50bG4gcmVhZGxuIHByaW50IGltcG9ydCBtb2R1bGUgZnVuY3Rpb24gbG9jYWwgcmV0dXJuIGxldCB2YXIgJyArXG4gICAgICAgICAgJ3doaWxlIGZvciBmb3JlYWNoIHRpbWVzIGluIGNhc2Ugd2hlbiBtYXRjaCB3aXRoIGJyZWFrIGNvbnRpbnVlICcgK1xuICAgICAgICAgICdhdWdtZW50IGF1Z21lbnRhdGlvbiBlYWNoIGZpbmQgZmlsdGVyIHJlZHVjZSAnICtcbiAgICAgICAgICAnaWYgdGhlbiBlbHNlIG90aGVyd2lzZSB0cnkgY2F0Y2ggZmluYWxseSByYWlzZSB0aHJvdyBvcklmTnVsbCAnICtcbiAgICAgICAgICAnRHluYW1pY09iamVjdHwxMCBEeW5hbWljVmFyaWFibGUgc3RydWN0IE9ic2VydmFibGUgbWFwIHNldCB2ZWN0b3IgbGlzdCBhcnJheScsXG4gICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCdcbiAgICAgIH0sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAndGFzayBwcm9qZWN0IGFsbHByb2plY3RzIHN1YnByb2plY3RzIGFydGlmYWN0cyBidWlsZHNjcmlwdCBjb25maWd1cmF0aW9ucyAnICtcbiAgICAgICAgJ2RlcGVuZGVuY2llcyByZXBvc2l0b3JpZXMgc291cmNlU2V0cyBkZXNjcmlwdGlvbiBkZWxldGUgZnJvbSBpbnRvIGluY2x1ZGUgJyArXG4gICAgICAgICdleGNsdWRlIHNvdXJjZSBjbGFzc3BhdGggZGVzdGluYXRpb25EaXIgaW5jbHVkZXMgb3B0aW9ucyBzb3VyY2VDb21wYXRpYmlsaXR5ICcgK1xuICAgICAgICAndGFyZ2V0Q29tcGF0aWJpbGl0eSBncm91cCBmbGF0RGlyIGRvTGFzdCBkb0ZpcnN0IGZsYXR0ZW4gdG9kaXIgZnJvbWRpciBhbnQgJyArXG4gICAgICAgICdkZWYgYWJzdHJhY3QgYnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWZhdWx0IGRvIGVsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5ICcgK1xuICAgICAgICAnZm9yIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBuYXRpdmUgbmV3IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZXR1cm4gc3RhdGljICcgK1xuICAgICAgICAnc3dpdGNoIHN5bmNocm9uaXplZCB0aHJvdyB0aHJvd3MgdHJhbnNpZW50IHRyeSB2b2xhdGlsZSB3aGlsZSBzdHJpY3RmcCBwYWNrYWdlICcgK1xuICAgICAgICAnaW1wb3J0IGZhbHNlIG51bGwgc3VwZXIgdGhpcyB0cnVlIGFudGxydGFzayBjaGVja3N0eWxlIGNvZGVuYXJjIGNvcHkgYm9vbGVhbiAnICtcbiAgICAgICAgJ2J5dGUgY2hhciBjbGFzcyBkb3VibGUgZmxvYXQgaW50IGludGVyZmFjZSBsb25nIHNob3J0IHZvaWQgY29tcGlsZSBydW5UaW1lICcgK1xuICAgICAgICAnZmlsZSBmaWxlVHJlZSBhYnMgYW55IGFwcGVuZCBhc0xpc3QgYXNXcml0YWJsZSBjYWxsIGNvbGxlY3QgY29tcGFyZVRvIGNvdW50ICcgK1xuICAgICAgICAnZGl2IGR1bXAgZWFjaCBlYWNoQnl0ZSBlYWNoRmlsZSBlYWNoTGluZSBldmVyeSBmaW5kIGZpbmRBbGwgZmxhdHRlbiBnZXRBdCAnICtcbiAgICAgICAgJ2dldEVyciBnZXRJbiBnZXRPdXQgZ2V0VGV4dCBncmVwIGltbXV0YWJsZSBpbmplY3QgaW5zcGVjdCBpbnRlcnNlY3QgaW52b2tlTWV0aG9kcyAnICtcbiAgICAgICAgJ2lzQ2FzZSBqb2luIGxlZnRTaGlmdCBtaW51cyBtdWx0aXBseSBuZXdJbnB1dFN0cmVhbSBuZXdPdXRwdXRTdHJlYW0gbmV3UHJpbnRXcml0ZXIgJyArXG4gICAgICAgICduZXdSZWFkZXIgbmV3V3JpdGVyIG5leHQgcGx1cyBwb3AgcG93ZXIgcHJldmlvdXMgcHJpbnQgcHJpbnRsbiBwdXNoIHB1dEF0IHJlYWQgJyArXG4gICAgICAgICdyZWFkQnl0ZXMgcmVhZExpbmVzIHJldmVyc2UgcmV2ZXJzZUVhY2ggcm91bmQgc2l6ZSBzb3J0IHNwbGl0RWFjaExpbmUgc3RlcCBzdWJNYXAgJyArXG4gICAgICAgICd0aW1lcyB0b0ludGVnZXIgdG9MaXN0IHRva2VuaXplIHVwdG8gd2FpdEZvck9yS2lsbCB3aXRoUHJpbnRXcml0ZXIgd2l0aFJlYWRlciAnICtcbiAgICAgICAgJ3dpdGhTdHJlYW0gd2l0aFdyaXRlciB3aXRoV3JpdGVyQXBwZW5kIHdyaXRlIHdyaXRlTGluZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFXG5cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgIGxpdGVyYWwgOiAndHJ1ZSBmYWxzZSBudWxsJyxcbiAgICAgICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgICAnYnl0ZSBzaG9ydCBjaGFyIGludCBsb25nIGJvb2xlYW4gZmxvYXQgZG91YmxlIHZvaWQgJyArXG4gICAgICAgICAgICAvLyBncm9vdnkgc3BlY2lmaWMga2V5d29yZHNcbiAgICAgICAgICAgICdkZWYgYXMgaW4gYXNzZXJ0IHRyYWl0ICcgK1xuICAgICAgICAgICAgLy8gY29tbW9uIGtleXdvcmRzIHdpdGggSmF2YVxuICAgICAgICAgICAgJ3N1cGVyIHRoaXMgYWJzdHJhY3Qgc3RhdGljIHZvbGF0aWxlIHRyYW5zaWVudCBwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgc3luY2hyb25pemVkIGZpbmFsICcgK1xuICAgICAgICAgICAgJ2NsYXNzIGludGVyZmFjZSBlbnVtIGlmIGVsc2UgZm9yIHdoaWxlIHN3aXRjaCBjYXNlIGJyZWFrIGRlZmF1bHQgY29udGludWUgJyArXG4gICAgICAgICAgICAndGhyb3cgdGhyb3dzIHRyeSBjYXRjaCBmaW5hbGx5IGltcGxlbWVudHMgZXh0ZW5kcyBuZXcgaW1wb3J0IHBhY2thZ2UgcmV0dXJuIGluc3RhbmNlb2YnXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAgICAgICAgICdcXFxcKi8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXQgdXAgQCdzIGluIGVtYWlscyB0byBwcmV2ZW50IHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBkb2N0YWdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFx3K0AvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lIDogJ2RvY3RhZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIDogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogXCInJydcIiwgZW5kOiBcIicnJ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46IFwiXFxcXCQvXCIsIGVuZDogXCIvXFxcXCRcIixcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9+P1xcL1teXFwvXFxuXStcXC8vLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBcIl4jIS91c3IvYmluL2VudlwiLCBlbmQ6ICckJyxcbiAgICAgICAgICAgICAgICBpbGxlZ2FsOiAnXFxuJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIHRyYWl0IGVudW0nLCBlbmQ6ICd7JyxcbiAgICAgICAgICAgICAgICBpbGxlZ2FsOiAnOicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICAgICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBtYXAga2V5cyBhbmQgbmFtZWQgcGFyYW1ldGVycyBhcyBzdHJpbmdzXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgYmVnaW46IC9bXlxcP117MH1bQS1aYS16MC05XyRdKyAqOi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2F0Y2ggbWlkZGxlIGVsZW1lbnQgb2YgdGhlIHRlcm5hcnkgb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBoaWdobGlnaHQgaXQgYXMgYSBsYWJlbCwgbmFtZWQgcGFyYW1ldGVyLCBvciBtYXAga2V5XG4gICAgICAgICAgICAgICAgYmVnaW46IC9cXD8vLCBlbmQ6IC9cXDovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBsYWJlbGVkIHN0YXRlbWVudHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLCBiZWdpbjogJ15cXFxccypbQS1aYS16MC05XyRdKzonLFxuICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvI3w8XFwvL1xuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSAvLyBUT0RPIHN1cHBvcnQgZmlsdGVyIHRhZ3MgbGlrZSA6amF2YXNjcmlwdCwgc3VwcG9ydCBpbmxpbmUgSFRNTFxuZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiEhISggKDV8MVxcXFwuMXxTdHJpY3R8RnJhbWVzZXR8QmFzaWN8TW9iaWxlfFJERmF8WE1MXFxcXGIuKikpPyQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gRklYTUUgdGhlc2UgY29tbWVudHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3BhbiBpbmRlbnRlZCBsaW5lc1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXlxcXFxzKighPSN8PSN8LSN8LykuKiQnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyooLXw9fCE9KSg/ISMpJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFxcXG4nLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAncnVieSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqJScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLFxuICAgICAgICAgICAgYmVnaW46ICcjW1xcXFx3LV0rJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcLltcXFxcdy1dKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAne1xcXFxzKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyp9JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJzpcXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgICAgICAgZW5kOiAnLFxcXFxzKycsXG4gICAgICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnOlxcXFx3KydcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcKFxcXFxzKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccypcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrXFxcXHMqPScsXG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXHMrJyxcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcdysnLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqWz1+XVxcXFxzKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnI3snLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIEJVSUxUX0lOUyA9IHsnYnVpbHRpbi1uYW1lJzogJ2VhY2ggaW4gd2l0aCBpZiBlbHNlIHVubGVzcyBiaW5kYXR0ciBhY3Rpb24gY29sbGVjdGlvbiBkZWJ1Z2dlciBsb2cgb3V0bGV0IHRlbXBsYXRlIHVuYm91bmQgdmlldyB5aWVsZCBsb29rdXAnfTtcblxuICB2YXIgSURFTlRJRklFUl9QTEFJTl9PUl9RVU9URUQgPSB7XG4gICAgYmVnaW46IC9cIi4qP1wifCcuKj8nfFxcWy4qP1xcXXxcXHcrL1xuICB9O1xuXG4gIHZhciBFWFBSRVNTSU9OX09SX0hFTFBFUl9DQUxMID0gaGxqcy5pbmhlcml0KElERU5USUZJRVJfUExBSU5fT1JfUVVPVEVELCB7XG4gICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICBzdGFydHM6IHtcbiAgICAgIC8vIGhlbHBlciBwYXJhbXNcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoSURFTlRJRklFUl9QTEFJTl9PUl9RVU9URUQsIHtyZWxldmFuY2U6IDB9KV1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciBCTE9DS19NVVNUQUNIRV9DT05URU5UUyA9IGhsanMuaW5oZXJpdChFWFBSRVNTSU9OX09SX0hFTFBFUl9DQUxMLCB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZSdcbiAgfSk7XG5cbiAgdmFyIEJBU0lDX01VU1RBQ0hFX0NPTlRFTlRTID0gaGxqcy5pbmhlcml0KEVYUFJFU1NJT05fT1JfSEVMUEVSX0NBTEwsIHtcbiAgICAvLyByZWxldmFuY2UgMCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjb25jZXJuaW5nIGF1dG8tZGV0ZWN0aW9uXG4gICAgcmVsZXZhbmNlOiAwXG4gIH0pO1xuXG4gIHZhciBFU0NBUEVfTVVTVEFDSEVfV0lUSF9QUkVDRUVESU5HX0JBQ0tTTEFTSCA9IHtiZWdpbjogL1xcXFxcXHtcXHsvLCBza2lwOiB0cnVlfTtcbiAgdmFyIFBSRVZFTlRfRVNDQVBFX1dJVEhfQU5PVEhFUl9QUkVDRUVESU5HX0JBQ0tTTEFTSCA9IHtiZWdpbjogL1xcXFxcXFxcKD89XFx7XFx7KS8sIHNraXA6IHRydWV9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydoYnMnLCAnaHRtbC5oYnMnLCAnaHRtbC5oYW5kbGViYXJzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEVTQ0FQRV9NVVNUQUNIRV9XSVRIX1BSRUNFRURJTkdfQkFDS1NMQVNILFxuICAgICAgUFJFVkVOVF9FU0NBUEVfV0lUSF9BTk9USEVSX1BSRUNFRURJTkdfQkFDS1NMQVNILFxuICAgICAgaGxqcy5DT01NRU5UKC9cXHtcXHshLS0vLCAvLS1cXH1cXH0vKSxcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7XFx7IS8sIC9cXH1cXH0vKSxcbiAgICAgIHtcbiAgICAgICAgLy8gb3BlbiByYXcgYmxvY2sgXCJ7e3t7cmF3fX19fSBjb250ZW50IG5vdCBldmFsdWF0ZWQge3t7ey9yYXd9fX19XCJcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtcXHtcXHsoPyFcXC8pLywgZW5kOiAvXFx9XFx9XFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCTE9DS19NVVNUQUNIRV9DT05URU5UU10sXG4gICAgICAgIHN0YXJ0czoge2VuZDogL1xce1xce1xce1xce1xcLy8sIHJldHVybkVuZDogdHJ1ZSwgc3ViTGFuZ3VhZ2U6ICd4bWwnfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY2xvc2UgcmF3IGJsb2NrXG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7XFx7XFx7XFwvLywgZW5kOiAvXFx9XFx9XFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCTE9DS19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG9wZW4gYmxvY2sgc3RhdGVtZW50XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7WyNcXC9dLywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCTE9DS19NVVNUQUNIRV9DT05URU5UU10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZSBvciBoZWxwZXItY2FsbCB0aGF0IGlzIE5PVCBodG1sLWVzY2FwZWRcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xce1xcey8sIGVuZDogL1xcfVxcfVxcfS8sXG4gICAgICAgIGtleXdvcmRzOiBCVUlMVF9JTlMsXG4gICAgICAgIGNvbnRhaW5zOiBbQkFTSUNfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZSBvciBoZWxwZXItY2FsbCB0aGF0IGlzIGh0bWwtZXNjYXBlZFxuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICAgICAgY29udGFpbnM6IFtCQVNJQ19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQ09NTUVOVCA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICd7LScsXG4gICAgICAgICctfScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcblxuICB2YXIgUFJBR01BID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAney0jJywgZW5kOiAnIy19J1xuICB9O1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdeIycsIGVuZDogJyQnXG4gIH07XG5cbiAgdmFyIENPTlNUUlVDVE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIGJlZ2luOiAnXFxcXGJbQS1aXVtcXFxcd1xcJ10qJywgLy8gVE9ETzogb3RoZXIgY29uc3RydWN0b3JzIChidWlsZC1pbiwgaW5maXgpLlxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBMSVNUID0ge1xuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgaWxsZWdhbDogJ1wiJyxcbiAgICBjb250YWluczogW1xuICAgICAgUFJBR01BLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge2NsYXNzTmFtZTogJ3R5cGUnLCBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHddKihcXFxcKChcXFxcLlxcXFwufCx8XFxcXHcrKVxcXFwpKT8nfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJ1tfYS16XVtcXFxcd1xcJ10qJ30pLFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcblxuICB2YXIgUkVDT1JEID0ge1xuICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgIGNvbnRhaW5zOiBMSVNULmNvbnRhaW5zXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2hzJ10sXG4gICAga2V5d29yZHM6XG4gICAgICAnbGV0IGluIGlmIHRoZW4gZWxzZSBjYXNlIG9mIHdoZXJlIGRvIG1vZHVsZSBpbXBvcnQgaGlkaW5nICcgK1xuICAgICAgJ3F1YWxpZmllZCB0eXBlIGRhdGEgbmV3dHlwZSBkZXJpdmluZyBjbGFzcyBpbnN0YW5jZSBhcyBkZWZhdWx0ICcgK1xuICAgICAgJ2luZml4IGluZml4bCBpbmZpeHIgZm9yZWlnbiBleHBvcnQgY2NhbGwgc3RkY2FsbCBjcGx1c3BsdXMgJyArXG4gICAgICAnanZtIGRvdG5ldCBzYWZlIHVuc2FmZSBmYW1pbHkgZm9yYWxsIG1kbyBwcm9jIHJlYycsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gVG9wLWxldmVsIGNvbnN0cnVjdGlvbnMuXG5cbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ21vZHVsZScsIGVuZDogJ3doZXJlJyxcbiAgICAgICAga2V5d29yZHM6ICdtb2R1bGUgd2hlcmUnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYmltcG9ydFxcXFxiJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnaW1wb3J0IHF1YWxpZmllZCBhcyBoaWRpbmcnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXihcXFxccyopPyhjbGFzc3xpbnN0YW5jZSlcXFxcYicsIGVuZDogJ3doZXJlJyxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBmYW1pbHkgaW5zdGFuY2Ugd2hlcmUnLFxuICAgICAgICBjb250YWluczogW0NPTlNUUlVDVE9SLCBMSVNULCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKGRhdGF8KG5ldyk/dHlwZSlcXFxcYicsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2RhdGEgZmFtaWx5IHR5cGUgbmV3dHlwZSBkZXJpdmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbUFJBR01BLCBDT05TVFJVQ1RPUiwgTElTVCwgUkVDT1JELCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZmF1bHQnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtDT05TVFJVQ1RPUiwgTElTVCwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmZpeCBpbmZpeGwgaW5maXhyJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5DX05VTUJFUl9NT0RFLCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYmZvcmVpZ25cXFxcYicsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2ZvcmVpZ24gaW1wb3J0IGV4cG9ydCBjY2FsbCBzdGRjYWxsIGNwbHVzcGx1cyBqdm0gJyArXG4gICAgICAgICAgICAgICAgICAnZG90bmV0IHNhZmUgdW5zYWZlJyxcbiAgICAgICAgY29udGFpbnM6IFtDT05TVFJVQ1RPUiwgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMhXFxcXC91c3JcXFxcL2JpblxcXFwvZW52XFwgcnVuaGFza2VsbCcsIGVuZDogJyQnXG4gICAgICB9LFxuXG4gICAgICAvLyBcIldoaXRlc3BhY2VzXCIuXG5cbiAgICAgIFBSQUdNQSxcbiAgICAgIFBSRVBST0NFU1NPUixcblxuICAgICAgLy8gTGl0ZXJhbHMgYW5kIG5hbWVzLlxuXG4gICAgICAvLyBUT0RPOiBjaGFyYWN0ZXJzLlxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnXltfYS16XVtcXFxcd1xcJ10qJ30pLFxuXG4gICAgICBDT01NRU5ULFxuXG4gICAgICB7YmVnaW46ICctPnw8LSd9IC8vIE5vIG1hcmt1cCwgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJztcbiAgdmFyIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUgPSAnKFsqXXxbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJztcblxuICB2YXIgSEFYRV9CQVNJQ19UWVBFUyA9ICdJbnQgRmxvYXQgU3RyaW5nIEJvb2wgRHluYW1pYyBWb2lkIEFycmF5ICc7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2h4J10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdicmVhayBjYXNlIGNhc3QgY2F0Y2ggY29udGludWUgZGVmYXVsdCBkbyBkeW5hbWljIGVsc2UgZW51bSBleHRlcm4gJyArXG4gICAgICAgICAgICAgICAnZm9yIGZ1bmN0aW9uIGhlcmUgaWYgaW1wb3J0IGluIGlubGluZSBuZXZlciBuZXcgb3ZlcnJpZGUgcGFja2FnZSBwcml2YXRlIGdldCBzZXQgJyArXG4gICAgICAgICAgICAgICAncHVibGljIHJldHVybiBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJhY2UgdHJ5IHR5cGVkZWYgdW50eXBlZCB1c2luZyB2YXIgd2hpbGUgJyArXG4gICAgICAgICAgICAgICBIQVhFX0JBU0lDX1RZUEVTLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICd0cmFjZSB0aGlzJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIGludGVycG9sYXRlLWFibGUgc3RyaW5nc1xuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnc3Vic3QnLCAvLyBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnc3Vic3QnLCAvLyBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkJywgZW5kOiAnXFxcXFd9J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgeyBjbGFzc05hbWU6ICdtZXRhJywgLy8gY29tcGlsZXIgbWV0YVxuICAgICAgICBiZWdpbjogJ0A6JywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ21ldGEnLCAvLyBjb21waWxlciBjb25kaXRpb25hbHNcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmQgZXJyb3InfVxuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAndHlwZScsIC8vIGZ1bmN0aW9uIHR5cGVzXG4gICAgICAgIGJlZ2luOiAnOlsgXFx0XSonLCBlbmQ6ICdbXkEtWmEtejAtOV8gXFx0XFxcXC0+XScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJywgLy8gdHlwZXNcbiAgICAgICAgYmVnaW46ICc6WyBcXHRdKicsIGVuZDogJ1xcXFxXJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJywgLy8gaW5zdGFudGlhdGlvblxuICAgICAgICBiZWdpbjogJ25ldyAqJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2NsYXNzJywgLy8gZW51bXNcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2VudW0nLCBlbmQ6ICdcXFxceycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2NsYXNzJywgLy8gYWJzdHJhY3RzXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdhYnN0cmFjdCcsIGVuZDogJ1tcXFxceyRdJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnZnJvbSArJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46ICd0byArJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBrZXl3b3JkOiAnYWJzdHJhY3QgZnJvbSB0bydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAnY2xhc3MnLCAvLyBjbGFzc2VzXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoY2xhc3N8aW50ZXJmYWNlKSArJywgZW5kOiAnW1xcXFx7JF0nLCAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKGV4dGVuZHN8aW1wbGVtZW50cykgKycsXG4gICAgICAgICAgICBrZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cycsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJ1xcXFwoJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxTJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogLzxcXC8vXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1tcXHdcXC5fXSsvLFxuICAgIGtleXdvcmRzOiAnZ290byBnb3N1YiByZXR1cm4gYnJlYWsgcmVwZWF0IGxvb3AgY29udGludWUgd2FpdCBhd2FpdCBkaW0gc2RpbSBmb3JlYWNoIGRpbXR5cGUgZHVwIGR1cHB0ciBlbmQgc3RvcCBuZXdtb2QgZGVsbW9kIG1yZWYgcnVuIGV4Z290byBvbiBtY2FsbCBhc3NlcnQgbG9nbWVzIG5ld2xhYiByZXN1bWUgeWllbGQgb25leGl0IG9uZXJyb3Igb25rZXkgb25jbGljayBvbmNtZCBleGlzdCBkZWxldGUgbWtkaXIgY2hkaXIgZGlybGlzdCBibG9hZCBic2F2ZSBiY29weSBtZW1maWxlIGlmIGVsc2UgcG9rZSB3cG9rZSBscG9rZSBnZXRzdHIgY2hkcG0gbWVtZXhwYW5kIG1lbWNweSBtZW1zZXQgbm90ZXNlbCBub3RlYWRkIG5vdGVkZWwgbm90ZWxvYWQgbm90ZXNhdmUgcmFuZG9taXplIG5vdGV1bnNlbCBub3RlZ2V0IHNwbGl0IHN0cnJlcCBzZXRlYXNlIGJ1dHRvbiBjaGdkaXNwIGV4ZWMgZGlhbG9nIG1tbG9hZCBtbXBsYXkgbW1zdG9wIG1jaSBwc2V0IHBnZXQgc3lzY29sb3IgbWVzIHByaW50IHRpdGxlIHBvcyBjaXJjbGUgY2xzIGZvbnQgc3lzZm9udCBvYmpzaXplIHBpY2xvYWQgY29sb3IgcGFsY29sb3IgcGFsZXR0ZSByZWRyYXcgd2lkdGggZ3NlbCBnY29weSBnem9vbSBnbW9kZSBibXBzYXZlIGhzdmNvbG9yIGdldGtleSBsaXN0Ym94IGNoa2JveCBjb21ib3ggaW5wdXQgbWVzYm94IGJ1ZmZlciBzY3JlZW4gYmdzY3IgbW91c2Ugb2Jqc2VsIGdyb2xsIGxpbmUgY2xyb2JqIGJveGYgb2JqcHJtIG9iam1vZGUgc3RpY2sgZ3JlY3QgZ3JvdGF0ZSBnc3F1YXJlIGdyYWRmIG9iamltYWdlIG9ianNraXAgb2JqZW5hYmxlIGNlbGxvYWQgY2VsZGl2IGNlbHB1dCBuZXdjb20gcXVlcnljb20gZGVsY29tIGNudnN0b3cgY29tcmVzIGF4b2JqIHdpbm9iaiBzZW5kbXNnIGNvbWV2ZW50IGNvbWV2YXJnIHNhcnJheWNvbnYgY2FsbGZ1bmMgY252d3RvcyBjb21ldmRpc3AgbGlicHRyIHN5c3RlbSBoc3BzdGF0IGhzcHZlciBzdGF0IGNudCBlcnIgc3Ryc2l6ZSBsb29wbGV2IHN1YmxldiBpcGFyYW0gd3BhcmFtIGxwYXJhbSByZWZzdHIgcmVmZHZhbCBpbnQgcm5kIHN0cmxlbiBsZW5ndGggbGVuZ3RoMiBsZW5ndGgzIGxlbmd0aDQgdmFydHlwZSBnZXR0aW1lIHBlZWsgd3BlZWsgbHBlZWsgdmFycHRyIHZhcnVzZSBub3RlaW5mbyBpbnN0ciBhYnMgbGltaXQgZ2V0ZWFzZSBzdHIgc3RybWlkIHN0cmYgZ2V0cGF0aCBzdHJ0cmltIHNpbiBjb3MgdGFuIGF0YW4gc3FydCBkb3VibGUgYWJzZiBleHBmIGxvZ2YgbGltaXRmIHBvd2YgZ2V0ZWFzZWYgbW91c2V4IG1vdXNleSBtb3VzZXcgaHduZCBoaW5zdGFuY2UgaGRjIGdpbmZvIG9iamluZm8gZGlyaW5mbyBzeXNpbmZvIHRoaXNtb2QgX19oc3B2ZXJfXyBfX2hzcDMwX18gX19kYXRlX18gX190aW1lX18gX19saW5lX18gX19maWxlX18gX2RlYnVnIF9faHNwZGVmX18gYW5kIG9yIHhvciBub3Qgc2NyZWVuX25vcm1hbCBzY3JlZW5fcGFsZXR0ZSBzY3JlZW5faGlkZSBzY3JlZW5fZml4ZWRzaXplIHNjcmVlbl90b29sIHNjcmVlbl9mcmFtZSBnbW9kZV9nZGkgZ21vZGVfbWVtIGdtb2RlX3JnYjAgZ21vZGVfYWxwaGEgZ21vZGVfcmdiMGFscGhhIGdtb2RlX2FkZCBnbW9kZV9zdWIgZ21vZGVfcGl4ZWxhIGdpbmZvX214IGdpbmZvX215IGdpbmZvX2FjdCBnaW5mb19zZWwgZ2luZm9fd3gxIGdpbmZvX3d5MSBnaW5mb193eDIgZ2luZm9fd3kyIGdpbmZvX3Z4IGdpbmZvX3Z5IGdpbmZvX3NpemV4IGdpbmZvX3NpemV5IGdpbmZvX3dpbnggZ2luZm9fd2lueSBnaW5mb19tZXN4IGdpbmZvX21lc3kgZ2luZm9fciBnaW5mb19nIGdpbmZvX2IgZ2luZm9fcGFsdXNlIGdpbmZvX2Rpc3B4IGdpbmZvX2Rpc3B5IGdpbmZvX2N4IGdpbmZvX2N5IGdpbmZvX2ludGlkIGdpbmZvX25ld2lkIGdpbmZvX3N4IGdpbmZvX3N5IG9iamluZm9fbW9kZSBvYmppbmZvX2Jtc2NyIG9iamluZm9faHduZCBub3RlbWF4IG5vdGVzaXplIGRpcl9jdXIgZGlyX2V4ZSBkaXJfd2luIGRpcl9zeXMgZGlyX2NtZGxpbmUgZGlyX2Rlc2t0b3AgZGlyX215ZG9jIGRpcl90diBmb250X25vcm1hbCBmb250X2JvbGQgZm9udF9pdGFsaWMgZm9udF91bmRlcmxpbmUgZm9udF9zdHJpa2VvdXQgZm9udF9hbnRpYWxpYXMgb2JqbW9kZV9ub3JtYWwgb2JqbW9kZV9ndWlmb250IG9iam1vZGVfdXNlZm9udCBnc3F1YXJlX2dyYWQgbXNnb3RoaWMgbXNtaW5jaG8gZG8gdW50aWwgd2hpbGUgd2VuZCBmb3IgbmV4dCBfYnJlYWsgX2NvbnRpbnVlIHN3aXRjaCBjYXNlIGRlZmF1bHQgc3dicmVhayBzd2VuZCBkZGltIGxkaW0gYWxsb2MgbV9waSByYWQyZGVnIGRlZzJyYWQgZWFzZV9saW5lYXIgZWFzZV9xdWFkX2luIGVhc2VfcXVhZF9vdXQgZWFzZV9xdWFkX2lub3V0IGVhc2VfY3ViaWNfaW4gZWFzZV9jdWJpY19vdXQgZWFzZV9jdWJpY19pbm91dCBlYXNlX3F1YXJ0aWNfaW4gZWFzZV9xdWFydGljX291dCBlYXNlX3F1YXJ0aWNfaW5vdXQgZWFzZV9ib3VuY2VfaW4gZWFzZV9ib3VuY2Vfb3V0IGVhc2VfYm91bmNlX2lub3V0IGVhc2Vfc2hha2VfaW4gZWFzZV9zaGFrZV9vdXQgZWFzZV9zaGFrZV9pbm91dCBlYXNlX2xvb3AnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcblxuICAgICAge1xuICAgICAgICAvLyBtdWx0aS1saW5lIHN0cmluZ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ3tcIicsIGVuZDogJ1wifScsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcblxuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG5cbiAgICAgIHtcbiAgICAgICAgLy8gcHJlLXByb2Nlc3NvclxuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdhZGRpb24gY2Z1bmMgY21kIGNtcG9wdCBjb21mdW5jIGNvbnN0IGRlZmNmdW5jIGRlZmZ1bmMgZGVmaW5lIGVsc2UgZW5kaWYgZW51bSBlcGFjayBmdW5jIGdsb2JhbCBpZiBpZmRlZiBpZm5kZWYgaW5jbHVkZSBtb2RjZnVuYyBtb2RmdW5jIG1vZGluaXQgbW9kdGVybSBtb2R1bGUgcGFjayBwYWNrb3B0IHJlZ2NtZCBydW50aW1lIHVuZGVmIHVzZWNvbSB1c2VsaWInfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pLFxuICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgLy8gbGFiZWxcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCooXFxcXHcrfEApJ1xuICAgICAgfSxcblxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCVUlMVF9JTlMgPSAnYWN0aW9uIGNvbGxlY3Rpb24gY29tcG9uZW50IGNvbmNhdCBkZWJ1Z2dlciBlYWNoIGVhY2gtaW4gZWxzZSBnZXQgaGFzaCBpZiBpbnB1dCBsaW5rLXRvIGxvYyBsb2cgbXV0IG91dGxldCBwYXJ0aWFsIHF1ZXJ5LXBhcmFtcyByZW5kZXIgdGV4dGFyZWEgdW5ib3VuZCB1bmxlc3Mgd2l0aCB5aWVsZCB2aWV3JztcblxuICB2YXIgQVRUUl9BU1NJR05NRU5UID0ge1xuICAgIGlsbGVnYWw6IC9cXH1cXH0vLFxuICAgIGJlZ2luOiAvW2EtekEtWjAtOV9dKz0vLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJywgYmVnaW46IC9bYS16QS1aMC05X10rL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgU1VCX0VYUFIgPSB7XG4gICAgaWxsZWdhbDogL1xcfVxcfS8sXG4gICAgYmVnaW46IC9cXCkvLCBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvW2EtekEtWlxcLlxcLV0rLyxcbiAgICAgICAga2V5d29yZHM6IHtidWlsdF9pbjogQlVJTFRfSU5TfSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFRBR19JTk5BUkRTID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IHtrZXl3b3JkOiAnYXMnLCBidWlsdF9pbjogQlVJTFRfSU5TfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIEFUVFJfQVNTSUdOTUVOVCxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCd7eyEoLS0pPycsICcoLS0pP319JyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7WyNcXC9dLywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvW2EtekEtWlxcLlxcLV0rLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7J2J1aWx0aW4tbmFtZSc6IEJVSUxUX0lOU30sXG4gICAgICAgICAgICBzdGFydHM6IFRBR19JTk5BUkRTXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7W2EtekEtWl1bYS16QS1aXFwtXSsvLCBlbmQ6IC9cXH1cXH0vLFxuICAgICAgICBrZXl3b3Jkczoge2tleXdvcmQ6ICdhcycsIGJ1aWx0X2luOiBCVUlMVF9JTlN9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBWRVJTSU9OID0gJ0hUVFAvWzAtOVxcXFwuXSsnO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaHR0cHMnXSxcbiAgICBpbGxlZ2FsOiAnXFxcXFMnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXicgKyBWRVJTSU9OLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdcXFxcYlxcXFxkezN9XFxcXGInfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXltBLVpdKyAoLio/KSAnICsgVkVSU0lPTiArICckJywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJyAnLCBlbmQ6ICcgJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IFZFUlNJT05cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICdbQS1aXSsnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ15cXFxcdycsIGVuZDogJzogJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxufFxcXFxzfD0nLFxuICAgICAgICBzdGFydHM6IHtlbmQ6ICckJywgcmVsZXZhbmNlOiAwfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcblxcXFxuJyxcbiAgICAgICAgc3RhcnRzOiB7c3ViTGFuZ3VhZ2U6IFtdLCBlbmRzV2l0aFBhcmVudDogdHJ1ZX1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIga2V5d29yZHMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBrZXl3b3Jkc1xuICAgICAgJyE9ICUgJT0gJiAmPSAqICoqICoqPSAqPSAqbWFwICcgK1xuICAgICAgJysgKz0gLCAtLWJ1aWxkLWNsYXNzLS0gLS1pbXBvcnQtLSAtPSAuIC8gLy8gLy89ICcgK1xuICAgICAgJy89IDwgPDwgPDw9IDw9ID0gPiA+PSA+PiA+Pj0gJyArXG4gICAgICAnQCBAPSBeIF49IGFicyBhY2N1bXVsYXRlIGFsbCBhbmQgYW55IGFwLWNvbXBvc2UgJyArXG4gICAgICAnYXAtZG90aW1lcyBhcC1lYWNoIGFwLWVhY2gtd2hpbGUgYXAtZmlsdGVyIGFwLWZpcnN0IGFwLWlmIGFwLWxhc3QgYXAtbWFwIGFwLW1hcC13aGVuIGFwLXBpcGUgJyArXG4gICAgICAnYXAtcmVkdWNlIGFwLXJlamVjdCBhcHBseSBhcy0+IGFzY2lpIGFzc2VydCBhc3NvYyBiaW4gYnJlYWsgYnV0bGFzdCAnICtcbiAgICAgICdjYWxsYWJsZSBjYWxsaW5nLW1vZHVsZS1uYW1lIGNhciBjYXNlIGNkciBjaGFpbiBjaHIgY29sbD8gY29tYmluYXRpb25zIGNvbXBpbGUgJyArXG4gICAgICAnY29tcHJlc3MgY29uZCBjb25zIGNvbnM/IGNvbnRpbnVlIGNvdW50IGN1cnJ5IGN1dCBjeWNsZSBkZWMgJyArXG4gICAgICAnZGVmIGRlZmF1bHQtbWV0aG9kIGRlZmNsYXNzIGRlZm1hY3JvIGRlZm1hY3JvLWFsaWFzIGRlZm1hY3JvL2chIGRlZm1haW4gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gJyArXG4gICAgICAnZGVmbi1hbGlhcyBkZWZuYyBkZWZuciBkZWZyZWFkZXIgZGVmc2VxIGRlbCBkZWxhdHRyIGRlbGV0ZS1yb3V0ZSBkaWN0LWNvbXAgZGlyICcgK1xuICAgICAgJ2Rpc2Fzc2VtYmxlIGRpc3BhdGNoLXJlYWRlci1tYWNybyBkaXN0aW5jdCBkaXZtb2QgZG8gZG90byBkcm9wIGRyb3AtbGFzdCBkcm9wLXdoaWxlIGVtcHR5PyAnICtcbiAgICAgICdlbmQtc2VxdWVuY2UgZXZhbCBldmFsLWFuZC1jb21waWxlIGV2YWwtd2hlbi1jb21waWxlIGV2ZW4/IGV2ZXJ5PyBleGNlcHQgZXhlYyBmaWx0ZXIgZmlyc3QgJyArXG4gICAgICAnZmxhdHRlbiBmbG9hdD8gZm4gZm5jIGZuciBmb3IgZm9yKiBmb3JtYXQgZnJhY3Rpb24gZ2VuZXhwciAnICtcbiAgICAgICdnZW5zeW0gZ2V0IGdldGF0dHIgZ2xvYmFsIGdsb2JhbHMgZ3JvdXAtYnkgaGFzYXR0ciBoYXNoIGhleCBpZCAnICtcbiAgICAgICdpZGVudGl0eSBpZiBpZiogaWYtbm90IGlmLXB5dGhvbjIgaW1wb3J0IGluIGluYyBpbnB1dCBpbnN0YW5jZT8gJyArXG4gICAgICAnaW50ZWdlciBpbnRlZ2VyLWNoYXI/IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJwb3NlIGlzIGlzLWNvbGwgaXMtY29ucyBpcy1lbXB0eSBpcy1ldmVuICcgK1xuICAgICAgJ2lzLWV2ZXJ5IGlzLWZsb2F0IGlzLWluc3RhbmNlIGlzLWludGVnZXIgaXMtaW50ZWdlci1jaGFyIGlzLWl0ZXJhYmxlIGlzLWl0ZXJhdG9yIGlzLWtleXdvcmQgaXMtbmVnIGlzLW5vbmUgJyArXG4gICAgICAnaXMtbm90IGlzLW51bWVyaWMgaXMtb2RkIGlzLXBvcyBpcy1zdHJpbmcgaXMtc3ltYm9sIGlzLXplcm8gaXNpbnN0YW5jZSBpc2xpY2UgaXNzdWJjbGFzcyAnICtcbiAgICAgICdpdGVyIGl0ZXJhYmxlPyBpdGVyYXRlIGl0ZXJhdG9yPyBrZXl3b3JkIGtleXdvcmQ/IGxhbWJkYSBsYXN0IGxlbiBsZXQgJyArXG4gICAgICAnbGlmIGxpZi1ub3QgbGlzdCogbGlzdC1jb21wIGxvY2FscyBsb29wIG1hY3JvLWVycm9yIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFjcm9leHBhbmQtYWxsICcgK1xuICAgICAgJ21hcCBtYXggbWVyZ2Utd2l0aCBtZXRob2QtZGVjb3JhdG9yIG1pbiBtdWx0aS1kZWNvcmF0b3IgbXVsdGljb21iaW5hdGlvbnMgbmFtZSBuZWc/IG5leHQgJyArXG4gICAgICAnbm9uZT8gbm9ubG9jYWwgbm90IG5vdC1pbiBub3Q/IG50aCBudW1lcmljPyBvY3Qgb2RkPyBvcGVuICcgK1xuICAgICAgJ29yIG9yZCBwYXJ0aXRpb24gcGVybXV0YXRpb25zIHBvcz8gcG9zdC1yb3V0ZSBwb3N0d2FsayBwb3cgcHJld2FsayBwcmludCAnICtcbiAgICAgICdwcm9kdWN0IHByb2ZpbGUvY2FsbHMgcHJvZmlsZS9jcHUgcHV0LXJvdXRlIHF1YXNpcXVvdGUgcXVvdGUgcmFpc2UgcmFuZ2UgcmVhZCByZWFkLXN0ciAnICtcbiAgICAgICdyZWN1cnNpdmUtcmVwbGFjZSByZWR1Y2UgcmVtb3ZlIHJlcGVhdCByZXBlYXRlZGx5IHJlcHIgcmVxdWlyZSByZXN0IHJvdW5kIHJvdXRlICcgK1xuICAgICAgJ3JvdXRlLXdpdGgtbWV0aG9kcyByd20gc2Vjb25kIHNlcSBzZXQtY29tcCBzZXRhdHRyIHNldHYgc29tZSBzb3J0ZWQgc3RyaW5nICcgK1xuICAgICAgJ3N0cmluZz8gc3VtIHN3aXRjaCBzeW1ib2w/IHRha2UgdGFrZS1udGggdGFrZS13aGlsZSB0ZWUgdHJ5IHVubGVzcyAnICtcbiAgICAgICd1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdmFycyB3YWxrIHdoZW4gd2hpbGUgd2l0aCB3aXRoKiB3aXRoLWRlY29yYXRvciB3aXRoLWdlbnN5bXMgJyArXG4gICAgICAneGkgeG9yIHlpZWxkIHlpZWxkLWZyb20gemVybz8gemlwIHppcC1sb25nZXN0IHwgfD0gfidcbiAgIH07XG5cbiAgdmFyIFNZTUJPTFNUQVJUID0gJ2EtekEtWl9cXFxcLSEuPysqPTw+JiNcXCcnO1xuICB2YXIgU1lNQk9MX1JFID0gJ1snICsgU1lNQk9MU1RBUlQgKyAnXVsnICsgU1lNQk9MU1RBUlQgKyAnMC05Lzs6XSonO1xuICB2YXIgU0lNUExFX05VTUJFUl9SRSA9ICdbLStdP1xcXFxkKyhcXFxcLlxcXFxkKyk/JztcblxuICB2YXIgU0hFQkFORyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsIGVuZDogJyQnXG4gIH07XG5cbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBiZWdpbjogU1lNQk9MX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiBTSU1QTEVfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSk7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JyxcbiAgICAnJCcsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICApO1xuICB2YXIgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogL1xcYihbVHRdcnVlfFtGZl1hbHNlfG5pbHxOb25lKVxcYi9cbiAgfTtcbiAgdmFyIENPTExFQ1RJT04gPSB7XG4gICAgYmVnaW46ICdbXFxcXFtcXFxce10nLCBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIHZhciBISU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXF4nICsgU1lNQk9MX1JFXG4gIH07XG4gIHZhciBISU5UX0NPTCA9IGhsanMuQ09NTUVOVCgnXFxcXF5cXFxceycsICdcXFxcfScpO1xuICB2YXIgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIE5BTUUgPSB7XG4gICAga2V5d29yZHM6IGtleXdvcmRzLFxuICAgIGxleGVtZXM6IFNZTUJPTF9SRSxcbiAgICBjbGFzc05hbWU6ICduYW1lJywgYmVnaW46IFNZTUJPTF9SRSxcbiAgICBzdGFydHM6IEJPRFlcbiAgfTtcbiAgdmFyIERFRkFVTFRfQ09OVEFJTlMgPSBbTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUwsIFNZTUJPTF07XG5cbiAgTElTVC5jb250YWlucyA9IFtobGpzLkNPTU1FTlQoJ2NvbW1lbnQnLCAnJyksIE5BTUUsIEJPRFldO1xuICBCT0RZLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcbiAgQ09MTEVDVElPTi5jb250YWlucyA9IERFRkFVTFRfQ09OVEFJTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2h5bGFuZyddLFxuICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgIGNvbnRhaW5zOiBbU0hFQkFORywgTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUxdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVEFSVF9CUkFDS0VUID0gJ1xcXFxbJztcbiAgdmFyIEVORF9CUkFDS0VUID0gJ1xcXFxdJztcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2k3J10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgLy8gU29tZSBrZXl3b3JkcyBtb3JlIG9yIGxlc3MgdW5pcXVlIHRvIEk3LCBmb3IgcmVsZXZhbmNlLlxuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8ga2luZDpcbiAgICAgICAgJ3RoaW5nIHJvb20gcGVyc29uIG1hbiB3b21hbiBhbmltYWwgY29udGFpbmVyICcgK1xuICAgICAgICAnc3VwcG9ydGVyIGJhY2tkcm9wIGRvb3IgJyArXG4gICAgICAgIC8vIGNoYXJhY3RlcmlzdGljOlxuICAgICAgICAnc2NlbmVyeSBvcGVuIGNsb3NlZCBsb2NrZWQgaW5zaWRlIGdlbmRlciAnICtcbiAgICAgICAgLy8gdmVyYjpcbiAgICAgICAgJ2lzIGFyZSBzYXkgdW5kZXJzdGFuZCAnICtcbiAgICAgICAgLy8gbWlzYyBrZXl3b3JkOlxuICAgICAgICAna2luZCBvZiBydWxlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIGJlZ2luOiBTVEFSVF9CUkFDS0VULCBlbmQ6IEVORF9CUkFDS0VUXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eKFZvbHVtZXxCb29rfFBhcnR8Q2hhcHRlcnxTZWN0aW9ufFRhYmxlKVxcYi8sXG4gICAgICAgIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBSdWxlIGRlZmluaXRpb25cbiAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGZvciByZWxldmFuY2UuXG4gICAgICAgIGJlZ2luOiAvXihDaGVja3xDYXJyeSBvdXR8UmVwb3J0fEluc3RlYWQgb2Z8VG98UnVsZXxXaGVufEJlZm9yZXxBZnRlcilcXGIvLFxuICAgICAgICBlbmQ6ICc6JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvL1J1bGUgbmFtZVxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKFRoaXMnLCBlbmQ6ICdcXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICBiZWdpbjogU1RBUlRfQlJBQ0tFVCwgZW5kOiBFTkRfQlJBQ0tFVCxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC8oW1xcK1xcLV0rKT9bXFxkXStfW1xcZF9dKy8gfSxcbiAgICAgIHsgYmVnaW46IGhsanMuTlVNQkVSX1JFIH1cbiAgICBdXG4gIH07XG4gIHZhciBDT01NRU5UUyA9IGhsanMuQ09NTUVOVCgpO1xuICBDT01NRU5UUy52YXJpYW50cyA9IFtcbiAgICB7YmVnaW46IC87LywgZW5kOiAvJC99LFxuICAgIHtiZWdpbjogLyMvLCBlbmQ6IC8kL30sXG4gIF07XG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvXFwkW1xcd1xcZFwiXVtcXHdcXGRfXSovIH0sXG4gICAgICB7IGJlZ2luOiAvXFwkXFx7KC4qPyl9LyB9XG4gICAgXVxuICB9O1xuICB2YXIgTElURVJBTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9cXGJvbnxvZmZ8dHJ1ZXxmYWxzZXx5ZXN8bm9cXGIvXG4gIH07XG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IFwiJycnXCIsIGVuZDogXCInJydcIiwgcmVsZXZhbmNlOiAxMCB9LFxuICAgICAgeyBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsIHJlbGV2YW5jZTogMTAgfSxcbiAgICAgIHsgYmVnaW46ICdcIicsIGVuZDogJ1wiJyB9LFxuICAgICAgeyBiZWdpbjogXCInXCIsIGVuZDogXCInXCIgfVxuICAgIF1cbiAgfTtcbiAgdmFyIEFSUkFZID0ge1xuICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICBMSVRFUkFMUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgJ3NlbGYnXG4gICAgXSxcbiAgICByZWxldmFuY2U6MFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd0b21sJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICBiZWdpbjogL1xcWysvLCBlbmQ6IC9cXF0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9eW2EtejAtOVxcW1xcXV9cXC4tXSsoPz1cXHMqPVxccyopLyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBDT01NRU5UUyxcbiAgICAgICAgICAgIEFSUkFZLFxuICAgICAgICAgICAgTElURVJBTFMsXG4gICAgICAgICAgICBWQVJJQUJMRVMsXG4gICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgTlVNQkVSU1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gIH07XG5cbiAgdmFyIEZfS0VZV09SRFMgPSB7XG4gICAgbGl0ZXJhbDogJy5GYWxzZS4gLlRydWUuJyxcbiAgICBrZXl3b3JkOiAna2luZCBkbyB3aGlsZSBwcml2YXRlIGNhbGwgaW50cmluc2ljIHdoZXJlIGVsc2V3aGVyZSAnICtcbiAgICAgICd0eXBlIGVuZHR5cGUgZW5kbW9kdWxlIGVuZHNlbGVjdCBlbmRpbnRlcmZhY2UgZW5kIGVuZGRvIGVuZGlmIGlmIGZvcmFsbCBlbmRmb3JhbGwgb25seSBjb250YWlucyBkZWZhdWx0IHJldHVybiBzdG9wIHRoZW4gJyArXG4gICAgICAncHVibGljIHN1YnJvdXRpbmV8MTAgZnVuY3Rpb24gcHJvZ3JhbSAuYW5kLiAub3IuIC5ub3QuIC5sZS4gLmVxLiAuZ2UuIC5ndC4gLmx0LiAnICtcbiAgICAgICdnb3RvIHNhdmUgZWxzZSB1c2UgbW9kdWxlIHNlbGVjdCBjYXNlICcgK1xuICAgICAgJ2FjY2VzcyBibGFuayBkaXJlY3QgZXhpc3QgZmlsZSBmbXQgZm9ybSBmb3JtYXR0ZWQgaW9zdGF0IG5hbWUgbmFtZWQgbmV4dHJlYyBudW1iZXIgb3BlbmVkIHJlYyByZWNsIHNlcXVlbnRpYWwgc3RhdHVzIHVuZm9ybWF0dGVkIHVuaXQgJyArXG4gICAgICAnY29udGludWUgZm9ybWF0IHBhdXNlIGN5Y2xlIGV4aXQgJyArXG4gICAgICAnY19udWxsX2NoYXIgY19hbGVydCBjX2JhY2tzcGFjZSBjX2Zvcm1fZmVlZCBmbHVzaCB3YWl0IGRlY2ltYWwgcm91bmQgaW9tc2cgJyArXG4gICAgICAnc3luY2hyb25vdXMgbm9wYXNzIG5vbl9vdmVycmlkYWJsZSBwYXNzIHByb3RlY3RlZCB2b2xhdGlsZSBhYnN0cmFjdCBleHRlbmRzIGltcG9ydCAnICtcbiAgICAgICdub25faW50cmluc2ljIHZhbHVlIGRlZmVycmVkIGdlbmVyaWMgZmluYWwgZW51bWVyYXRvciBjbGFzcyBhc3NvY2lhdGUgYmluZCBlbnVtICcgK1xuICAgICAgJ2NfaW50IGNfc2hvcnQgY19sb25nIGNfbG9uZ19sb25nIGNfc2lnbmVkX2NoYXIgY19zaXplX3QgY19pbnQ4X3QgY19pbnQxNl90IGNfaW50MzJfdCBjX2ludDY0X3QgY19pbnRfbGVhc3Q4X3QgY19pbnRfbGVhc3QxNl90ICcgK1xuICAgICAgJ2NfaW50X2xlYXN0MzJfdCBjX2ludF9sZWFzdDY0X3QgY19pbnRfZmFzdDhfdCBjX2ludF9mYXN0MTZfdCBjX2ludF9mYXN0MzJfdCBjX2ludF9mYXN0NjRfdCBjX2ludG1heF90IENfaW50cHRyX3QgY19mbG9hdCBjX2RvdWJsZSAnICtcbiAgICAgICdjX2xvbmdfZG91YmxlIGNfZmxvYXRfY29tcGxleCBjX2RvdWJsZV9jb21wbGV4IGNfbG9uZ19kb3VibGVfY29tcGxleCBjX2Jvb2wgY19jaGFyIGNfbnVsbF9wdHIgY19udWxsX2Z1bnB0ciAnICtcbiAgICAgICdjX25ld19saW5lIGNfY2FycmlhZ2VfcmV0dXJuIGNfaG9yaXpvbnRhbF90YWIgY192ZXJ0aWNhbF90YWIgaXNvX2NfYmluZGluZyBjX2xvYyBjX2Z1bmxvYyBjX2Fzc29jaWF0ZWQgIGNfZl9wb2ludGVyICcgK1xuICAgICAgJ2NfcHRyIGNfZnVucHRyIGlzb19mb3J0cmFuX2VudiBjaGFyYWN0ZXJfc3RvcmFnZV9zaXplIGVycm9yX3VuaXQgZmlsZV9zdG9yYWdlX3NpemUgaW5wdXRfdW5pdCBpb3N0YXRfZW5kIGlvc3RhdF9lb3IgJyArXG4gICAgICAnbnVtZXJpY19zdG9yYWdlX3NpemUgb3V0cHV0X3VuaXQgY19mX3Byb2Nwb2ludGVyIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgJyArXG4gICAgICAnaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgbmV3dW5pdCBjb250aWd1b3VzIHJlY3Vyc2l2ZSAnICtcbiAgICAgICdwYWQgcG9zaXRpb24gYWN0aW9uIGRlbGltIHJlYWR3cml0ZSBlb3IgYWR2YW5jZSBubWwgaW50ZXJmYWNlIHByb2NlZHVyZSBuYW1lbGlzdCBpbmNsdWRlIHNlcXVlbmNlIGVsZW1lbnRhbCBwdXJlICcgK1xuICAgICAgJ2ludGVnZXIgcmVhbCBjaGFyYWN0ZXIgY29tcGxleCBsb2dpY2FsIGRpbWVuc2lvbiBhbGxvY2F0YWJsZXwxMCBwYXJhbWV0ZXIgJyArXG4gICAgICAnZXh0ZXJuYWwgaW1wbGljaXR8MTAgbm9uZSBkb3VibGUgcHJlY2lzaW9uIGFzc2lnbiBpbnRlbnQgb3B0aW9uYWwgcG9pbnRlciAnICtcbiAgICAgICd0YXJnZXQgaW4gb3V0IGNvbW1vbiBlcXVpdmFsZW5jZSBkYXRhICcgK1xuICAgICAgLy8gSVJQRjkwIHNwZWNpYWwga2V5d29yZHNcbiAgICAgICdiZWdpbl9wcm92aWRlciAmYmVnaW5fcHJvdmlkZXIgZW5kX3Byb3ZpZGVyIGJlZ2luX3NoZWxsIGVuZF9zaGVsbCBiZWdpbl90ZW1wbGF0ZSBlbmRfdGVtcGxhdGUgc3Vic3QgYXNzZXJ0IHRvdWNoICcgK1xuICAgICAgJ3NvZnRfdG91Y2ggcHJvdmlkZSBub19kZXAgZnJlZSBpcnBfaWYgaXJwX2Vsc2UgaXJwX2VuZGlmIGlycF93cml0ZSBpcnBfcmVhZCcsXG4gICAgYnVpbHRfaW46ICdhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50ICcgK1xuICAgICAgJ2Rsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgJyArXG4gICAgICAnYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hICcgK1xuICAgICAgJ2lxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgJyArXG4gICAgICAncW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgJyArXG4gICAgICAnbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgJyArXG4gICAgICAnYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgJyArXG4gICAgICAnZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCAnICtcbiAgICAgICdtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0ICcgK1xuICAgICAgJ3JhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kICcgK1xuICAgICAgJ3NldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgJyArXG4gICAgICAnZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kICcgK1xuICAgICAgJ2llZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgJyArXG4gICAgICAnaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mJyAgK1xuICAgICAgJ2Fjb3NoIGFzaW5oIGF0YW5oIGJlc3NlbF9qMCBiZXNzZWxfajEgYmVzc2VsX2puIGJlc3NlbF95MCBiZXNzZWxfeTEgYmVzc2VsX3luIGVyZiBlcmZjIGVyZmNfc2NhbGVkIGdhbW1hIGxvZ19nYW1tYSBoeXBvdCBub3JtMiAnICtcbiAgICAgICdhdG9taWNfZGVmaW5lIGF0b21pY19yZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUgbGVhZHogdHJhaWx6IHN0b3JhZ2Vfc2l6ZSBtZXJnZV9iaXRzICcgK1xuICAgICAgJ2JnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciAnICtcbiAgICAgICdudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2UgJyArXG4gICAgICAvLyBJUlBGOTAgc3BlY2lhbCBidWlsdF9pbnNcbiAgICAgICdJUlBfQUxJR04gaXJwX2hlcmUnXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogRl9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez1cXFxcbl0nLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCBQQVJBTVNdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG4gICAgICBobGpzLkNPTU1FTlQoJ2JlZ2luX2RvYycsICdlbmRfZG9jJywge3JlbGV2YW5jZTogMTB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoPz1cXFxcYnxcXFxcK3xcXFxcLXxcXFxcLikoPz1cXFxcLlxcXFxkfFxcXFxkKSg/OlxcXFxkKyk/KD86XFxcXC4/XFxcXGQqKSg/OltkZV1bKy1dP1xcXFxkKyk/XFxcXGJcXFxcLj8nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyDQntC/0YDQtdC00LXQu9C10L3QuNC1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QslxuICB2YXIgVU5ERVJTQ09SRV9JREVOVF9SRSA9IFwiW0EtWmEtetCQLdCv0LAt0Y/RkdCBXyFdW0EtWmEtetCQLdCv0LAt0Y/RkdCBXzAtOV0qXCI7XG5cbiAgLy8g0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDQuNC80LXQvSDRhNGD0L3QutGG0LjQuVxuICB2YXIgRlVOQ1RJT05fTkFNRV9JREVOVF9SRSA9IFwiW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSpcIjtcblxuICAvLyBrZXl3b3JkIDog0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwXG4gIHZhciBLRVlXT1JEID1cbiAgICBcImFuZCDQuCBlbHNlINC40L3QsNGH0LUgZW5kZXhjZXB0IGVuZGZpbmFsbHkgZW5kZm9yZWFjaCDQutC+0L3QtdGG0LLRgdC1IGVuZGlmINC60L7QvdC10YbQtdGB0LvQuCBlbmR3aGlsZSDQutC+0L3QtdGG0L/QvtC60LAgXCIgK1xuICAgIFwiZXhjZXB0IGV4aXRmb3IgZmluYWxseSBmb3JlYWNoINCy0YHQtSBpZiDQtdGB0LvQuCBpbiDQsiBub3Qg0L3QtSBvciDQuNC70LggdHJ5IHdoaWxlINC/0L7QutCwIFwiO1xuXG4gIC8vIFNZU1JFUyBDb25zdGFudHNcbiAgdmFyIHN5c3Jlc19jb25zdGFudHMgPVxuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTX1JJR0hUX1RZUEVfRURJVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNfUklHSFRfVFlQRV9GVUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU19SSUdIVF9UWVBFX1ZJRVcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19NT0RFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfTk9fQUNDRVNTX1ZJRVcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19OT19BQ0NFU1NfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0FERF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19BRERfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0NIQU5HRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19DSEFOR0VfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0RFTEVURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19ERUxFVEVfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0VYRUNVVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfRVhFQ1VURV9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfTk9fQUNDRVNTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX05PX0FDQ0VTU19SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfUkFUSUZZX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1JBVElGWV9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfVklFVyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfVklFV19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19WSUVXX1JFUVVJU0lURV9ZRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfQ0hBTkdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9DSEFOR0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRVhJU1RTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9FWElTVFNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRlVMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRlVMTF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9WSUVXIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FCT1JUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9BQ0NFUFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FERF9BVFRBQ0hNRU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DSEFOR0VfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ0hBTkdFX0tJTkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NIQU5HRV9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DT05USU5VRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ09QWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ1JFQVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DUkVBVEVfVkVSU0lPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfREVMRVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9ERUxFVEVfQVRUQUNITUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfREVMRVRFX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0RJU0FCTEVfREVMRUdBVEVfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRU5BQkxFX0RFTEVHQVRFX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VOQ1JZUFRJT05fQllfQ0VSVElGSUNBVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VOQ1JZUFRJT05fQllfQ0VSVElGSUNBVEVfQU5EX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FTkNSWVBUSU9OX0JZX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FWFBPUlRfV0lUSF9MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FWFBPUlRfV0lUSE9VVF9MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9JTVBPUlRfV0lUSF9VTkxPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0lNUE9SVF9XSVRIT1VUX1VOTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTElGRV9DWUNMRV9TVEFHRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTE9DS19GT1JfU0VSVkVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9MT0NLX01PRElGWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTUFSS19BU19SRUFERUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01BUktfQVNfVU5SRUFERUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01PRElGWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTU9ESUZZX0NBUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01PVkVfVE9fQVJDSElWRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfT0ZGX0VOQ1JZUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1BBU1NXT1JEX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUEVSRk9STSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUkVDT1ZFUl9GUk9NX0xPQ0FMX0NPUFkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1JFU1RBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1JFU1RPUkVfRlJPTV9BUkNISVZFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9SRVZJU0lPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfU0VORF9CWV9NQUlMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9TSUdOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9TVEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVU5MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9VTkxPQ0tfRlJPTV9TRVJWRVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1ZFUlNJT05fU1RBVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1ZFUlNJT05fVklTSUJJTElUWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVklFVyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVklFV19TSEFET1dfQ09QWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfV09SS0ZMT1dfREVTQ1JJUFRJT05fTU9ESUZZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9XUklURV9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJVkVfVkVSU0lPTl9TVEFURV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRERfUkVGRVJFTkNFX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURESVRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FERElUSU9OQUxfUEFSQU1TX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRElUSU9OQUxfSk9CX0VORF9EQVRFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRElUSU9OQUxfSk9CX1JFQURfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FESVRJT05BTF9KT0JfU1RBUlRfREFURV9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURJVElPTkFMX0pPQl9TVEFURV9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9BRERJTkdfVVNFUl9UT19HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQURESU5HX1VTRVJfVE9fR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fQ09NUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fQ09NUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fVVNFUl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fVVNFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9EQVRBQkFTRV9VU0VSX0NSRUFUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RBVEFCQVNFX1VTRVJfQ1JFQVRJT05fQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RBVEFCQVNFX1VTRVJfREVMRVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREFUQUJBU0VfVVNFUl9ERUxFVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fQ09NUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fQ09NUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fVVNFUl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fVVNFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9VU0VSX0ZST01fR1JPVVBfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX1VTRVJfRlJPTV9HUk9VUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19GSUxURVJFUl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfRklMVEVSRVJfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfRklMVEVSRVJfUkVTVFJJQ1RJT05fQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX0ZJTFRFUkVSX1JFU1RSSUNUSU9OX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX1BSSVZJTEVHRV9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfUFJJVklMRUdFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX1JJR0hUU19BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfUklHSFRTX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX01BSU5fU0VSVkVSX0NIQU5HRURfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX01BSU5fU0VSVkVSX0NIQU5HRURfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfSVNfUFVCTElDX0NIQU5HRURfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX1BVQkxJQ19DSEFOR0VEX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX0ZJTFRFUkVSX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19GSUxURVJFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19GSUxURVJFUl9SRVNUUklDVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfRklMVEVSRVJfUkVTVFJJQ1RJT05fQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfUFJJVklMRUdFX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19QUklWSUxFR0VfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfUklHSFRTX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19SSUdIVFNfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfU0VSVkVSX0xPR0lOX0NSRUFUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1NFUlZFUl9MT0dJTl9DUkVBVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfU0VSVkVSX0xPR0lOX0RFTEVUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1NFUlZFUl9MT0dJTl9ERUxFVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfQ0FURUdPUllfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NBVEVHT1JZX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NPTVBfVElUTEVfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NPTVBfVElUTEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfRlVMTF9OQU1FX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19GVUxMX05BTUVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfR1JPVVBfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0dST1VQX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1BBUkVOVF9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfUEFSRU5UX0dST1VQX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfQVVUSF9UWVBFX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0FVVEhfVFlQRV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0xPR0lOX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0xPR0lOX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfU1RBVFVTX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX1NUQVRVU19BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VU0VSX1BBU1NXT1JEX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VU0VSX1BBU1NXT1JEX0NIQU5HRV9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FMTF9BQ0NFUFRfQ09ORElUSU9OX1JVUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUxMX1VTRVJTX0dST1VQIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BTExfVVNFUlNfR1JPVVBfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUxMX1VTRVJTX1NFUlZFUl9HUk9VUF9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BTExPV0VEX0FDQ0VTU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FMTE9XRURfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVBQX1ZJRVdFUl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BUFBST1ZJTkdfU0lHTkFUVVJFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FQUFJPVklOR19TSUdOQVRVUkVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FTU0lTVEFOVF9TVUJTVElUVUVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVNTSVNUQU5UX1NVQlNUSVRVRV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0NPTVBPTkVOVF9UT0tFTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfRE9DIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9FRE9DIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9GT0xERVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0pPQiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfUkVGRVJFTkNFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9UQVNLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX0VOQ09ERURfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhfRU5DT0RFRF9QQVNTV09SRF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX05PVkVMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUSF9QQVNTV09SRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUSF9QQVNTV09SRF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX1dJTkRPV1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhFTlRJQ0FUSU5HX1NJR05BVFVSRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIRU5USUNBVElOR19TSUdOQVRVUkVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9fRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT19OVU1FUkFUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9fU1RST05HX0VOVU1fTUVUSE9EX0ZMQUcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1RFWFRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX0FMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfQUxMX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX1NJR04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX1NJR05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfV09SSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfV09SS19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0VfQU5ZV0hFUkVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNFX09OX1NJR05JTkdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNFX09OX1dPUktfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQkVHSU5fREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQkxBQ0tfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9CTFVFX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQlROX1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTENVTEFURURfUk9MRV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTExfVFlQRV9WQVJJQUJMRV9CVVRUT05fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTExfVFlQRV9WQVJJQUJMRV9QUk9HUkFNX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DQU5DRUxfTUVTU0FHRV9GVU5DVElPTl9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBUkRfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0FSRF9SRUZFUkVOQ0VfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DRVJUSUZJQ0FURV9UWVBFX1JFUVVJU0lURV9FTkNSWVBUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DRVJUSUZJQ0FURV9UWVBFX1JFUVVJU0lURV9TSUdOX0FORF9FTkNSWVBUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DRVJUSUZJQ0FURV9UWVBFX1JFUVVJU0lURV9TSUdOX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9EQVRFX1BBUkFNX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX0ZMT0FUX1BBUkFNX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX0lOVEVHRVJfUEFSQU1fVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0hFQ0tfUEFSQU1fVkFMVUVfUElDS19QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9SRUVGUkVOQ0VfUEFSQU1fVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0xPU0VEX1JFQ09SRF9GTEFHX1ZBTFVFX0ZFTUlOSU5FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DTE9TRURfUkVDT1JEX0ZMQUdfVkFMVUVfTUFTQ1VMSU5FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0FETUlOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0RFVkVMT1BFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9ET0NTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0VET0NfQ0FSRFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfRVhURVJOQUxfRVhFQ1VUQUJMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9PVEhFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfUkVQT1JUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX1NDUklQVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9VUkwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX0FDQ0VTUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfRVhDTFVERV9DT01QT05FTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX1JFQ09SRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NTUVOVF9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NTU9OX1NFVFRJTkdTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QX0NPREVfR1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfR1JPVVBfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfQURNSU5fQ09NUE9ORU5UUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfREVWRUxPUEVSX0NPTVBPTkVOVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0RPQ1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0VET0NfQ0FSRFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0VET0NTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9FWFRFUk5BTF9FWEVDVVRBQkxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9PVEhFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfUkVGRVJFTkNFX1RZUEVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9SRUZFUkVOQ0VTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9SRVBPUlRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9TQ1JJUFRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9VUkwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVFNfUkVNT1RFX1NFUlZFUlNfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05ESVRJT05fQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTlNUX0ZJUk1fU1RBVFVTX0NPTU1PTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OU1RfRklSTV9TVEFUVVNfSU5ESVZJRFVBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OU1RfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTlNUX1BPU0lUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05TVF9TRVJWRVJfU1RBVFVTX0RPTlRfUkVQTElDQVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05TVF9TRVJWRVJfU1RBVFVTX1JFUExJQ0FURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OVEVOVFNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9CT09MRUFOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfREFURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX0ZMT0FUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfSU5URUdFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX1BJQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9TVFJJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9URVhUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfVkFSSUFOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9DTE9TRV9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9GT1JNQVRfREFURV9PTkxZX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfT1BFTl9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfVFlQRV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRFVElNRV9GT1JNQVRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFQV9BQ0NFU1NfUklHSFRTX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVNDUklQVElPTl9MT0NBTElaRV9JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVTQ1JJUFRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVDFfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUMl9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVQzX1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVDRfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUNV9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVQ2X1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVEFJTF9EQVRBU0VUX0tFWV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUQUlMX1BJQ0tfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVEFJTF9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9fTk9UX1VTRV9BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET19OT1RfVVNFX0FDQ0VTU19UWVBFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RPX05PVF9VU0VfT05fVklFV19BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET19OT1RfVVNFX09OX1ZJRVdfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9DVU1FTlRfU1RPUkFHRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9DVU1FTlRfVEVNUExBVEVTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9VQkxFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JfQ0xPU0VfRklMRV9PQlNFUlZfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JfQ0xPU0VfUFJPQ0VTU19PQlNFUlZfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19BUFBMSUNBVElPTl9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX0NSRUFURV9TRVZFUkFMX1BST0NFU1NFU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19FWFRFTlNJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUlNfT0JTRVJWRVJfQllfUFJPQ0VTU19UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX1JFUExBQ0VfU1BFQ19DSEFSU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19VU0VfUExVR0lOU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19WSUVXX0RPQ1VNRU5UX09QRU5FRF9UT19FRElUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfQ0FSRF9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX0NBUkRfVFlQRVNfTElOS19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19DRVJUSUZJQ0FURV9BTkRfUEFTU1dPUkRfRU5DT0RFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfQ0VSVElGSUNBVEVfRU5DT0RFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19LSU5EX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX0tJTkRTX0JZX1RFTVBMQVRFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX01BTkFHRV9BQ0NFU1NfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19OT05FX0VOQ09ERV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX05VTUJFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19QQVNTV09SRF9FTkNPREVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19SRUFET05MWV9BQ0NFU1NfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TSEVMTF9MSUZFX1RZUEVfVklFV19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TSVpFX1JFU1RSSUNUSU9OX1BSSU9SSVRZX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfQ0hFQ0tfQUNDRVNTX1JJR0hUU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX0NPTVBVVEVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9EQVRBQkFTRV9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfRURJVF9JTl9TVE9SQUdFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfTE9DQUxfUEFUSF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX1NIQVJFRF9TT1VSQ0VfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19URU1QTEFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19UWVBFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19WRVJTSU9OX0FDVElWRV9TVEFHRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1ZFUlNJT05fREVTSUdOX1NUQUdFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfVkVSU0lPTl9PQlNPTEVURV9TVEFHRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1dSSVRFX0FDQ0VTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NVTUVOVF9DQVJEX1JFUVVJU0lURVNfUkVGRVJFTkNFX0NPREVfU0VMRUNURURfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FTkNPREVfQ0VSVElGSUNBVEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FTkRfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRU5VTUVSQVRJT05fVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhFQ1VURV9BQ0NFU1NfUklHSFRTX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhFQ1VUSVZFX0ZJTEVfU1RPUkFHRV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWElTVF9DT05TVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhJU1RfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9MT0NLX1RZUEVfQVNLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWFBPUlRfTE9DS19UWVBFX1dJVEhfTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhQT1JUX0xPQ0tfVFlQRV9XSVRIT1VUX0xPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9WRVJTSU9OX1RZUEVfQVNLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWFBPUlRfVkVSU0lPTl9UWVBFX0xBU1QgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9WRVJTSU9OX1RZUEVfTEFTVF9BQ1RJVkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYVEVOU0lPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1RZUEVfQ09NTU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9UWVBFX0NPTU1PTl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GSUxURVJfVFlQRV9VU0VSX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9UWVBFX1VTRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1ZBTFVFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GTE9BVF9OVU1CRVJfRk9STUFUX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZMT0FUX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfQVVUSE9SX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfS0lORF9BTllfT0JKRUNUUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfQ09NUE9ORU5UUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfRURPQ1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX0pPQlMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX1RBU0tTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9DT01NT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX0NPTVBPTkVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfRkFWT1JJVEVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9JTkJPWCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfT1VUQk9YIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9RVUlDS19MQVVOQ0ggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX1NFQVJDSCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfU0hPUlRDVVRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9VU0VSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GUk9NX0RJQ1RJT05BUllfRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVMTF9TVUJTVElUVVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTExfU1VCU1RJVFVURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX0NBTkNFTF9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX0NBVEVHT1JZX1NZU1RFTSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fQ0FURUdPUllfVVNFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fRkFJTFVSRV9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX1NBVkVfUkVTVUxUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HRU5FUkFURURfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUkVFTl9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0FDQ09VTlRfVFlQRV9WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9DQVRFR09SWV9OT1JNQUxfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfQ0FURUdPUllfTk9STUFMX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0NBVEVHT1JZX1NFUlZJQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfQ0FURUdPUllfU0VSVklDRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9DT01NT05fQ0FURUdPUllfRklFTERfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0ZVTExfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfUklHSFRTX1RfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX1NFUlZFUl9DT0RFU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfU0VSVkVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX1NFUlZJQ0VfQ0FURUdPUllfRklFTERfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX1VTRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISURERU5fTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISUdIX0xWTF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSElTVE9SWV9BQ1RJT05fQ1JFQVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hJU1RPUllfQUNUSU9OX0RFTEVURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISVNUT1JZX0FDVElPTl9FRElUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hPVVJfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lEU1BTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTUFHRV9NT0RFX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTUFHRV9NT0RFX0dSRVlTQ0FMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU1BR0VfTU9ERV9NT05PQ0hST01FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTVBPUlRBTkNFX0hJR0ggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lNUE9SVEFOQ0VfTE9XIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTVBPUlRBTkNFX05PUk1BTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5fREVTSUdOX1ZFUlNJT05fU1RBVEVfUElDS19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5DT01JTkdfV09SS19SVUxFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5UX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5UX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTlRFR0VSX05VTUJFUl9GT1JNQVRfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5URUdFUl9UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX0dFTkVSQVRFRF9SRVFVSVNJVEVfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1BVQkxJQ19ST0xFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JU19SRU1PVEVfVVNFUl9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSVNfUkVNT1RFX1VTRVJfUE9TSVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1NUT1JFRF9SRVFVSVNJVEVfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1NUT1JFRF9SRVFVSVNJVEVfU1RPUkVEX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JVEFMSUNfTElGRV9DWUNMRV9TVEFHRV9EUkFXX1NUWUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9KT0JfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9LSU5EX0NPTlRST0xfSk9CIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9KT0JfS0lORF9KT0IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9LSU5EX05PVElDRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX1NUQVRFX0FCT1JURUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9TVEFURV9DT01QTEVURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX1NUQVRFX1dPUktJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX0NSRUFURV9TSEFET1dfQ09QSUVTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19ERUZBVUxUX0VET0NfTElGRV9TVEFHRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19BTExfVEVQTEFURVNfQUxMT1dFRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19BTExPV19MSUZFX0NZQ0xFX1NUQUdFX0NIQU5HSU5HX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX0FMTE9XX01VTFRJUExFX0FDVElWRV9WRVJTSU9OU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19TSEFSRV9BQ0NFU19SSUdIVFNfQllfREVGQVVMVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX1RFTVBMQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX1NJR05FUlNfUkVRVUlTSVRFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LT0RfSU5QVVRfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTEFTVF9VUERBVEVfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElGRV9DWUNMRV9TVEFSVF9TVEFHRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElMQUNfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0NPTVBPTkVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9ET0NVTUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9FRE9DIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0ZPTERFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9KT0IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfUkVGRVJFTkNFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX1RBU0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfUkVGX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJU1RfUkVGRVJFTkNFX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTE9DQUxJWkFUSU9OX0RJQ1RJT05BUllfTUFJTl9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01BSU5fVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NQU5VQUxfRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFTVEVSX0NPTVBfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFTVEVSX1RBQkxFX1JFQ19JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFYSU1JWkVEX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01FU1NBR0VfQVRURU5USU9OX0NBUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01FU1NBR0VfQ09ORklSTUFUSU9OX0NBUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01FU1NBR0VfRVJST1JfQ0FQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVTU0FHRV9JTkZPUk1BVElPTl9DQVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NSU5JTUlaRURfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NSU5VVEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTU9EVUxFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NT05JVE9SSU5HX0JMT0NLX0RFU0NSSVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NT05USF9GT1JNQVRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVfTE9DQUxJWkVfSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVfU0lOR1VMQVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVBTl9JTlBVVF9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ORUdBVElWRV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk8gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PX1BJQ0tfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PX1NJR05BVFVSRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PTkVfQUNDRVNTX1JJR0hUU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PTk9QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9OT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX01BU0NVTElORSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9STUFMX0FDQ0VTU19SSUdIVFNfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1JNQUxfTElGRV9DWUNMRV9TVEFHRV9EUkFXX1NUWUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1JNQUxfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RfQUxMT1dFRF9BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RfQUxMT1dFRF9BQ0NFU1NfVFlQRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RJQ0VfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTV9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTV9TVFJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTUVSQVRJT05fQVVUT19OT1RfU1RST05HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUkFUSU9OX0FVVE9fU1RST05HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUkFUSU9OX0ZST01fRElDVE9OQVJZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUkFUSU9OX01BTlVBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTlVNRVJJQ19UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTVJFUV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT0JTT0xFVEVfVkVSU0lPTl9TVEFURV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUVfRkVNSU5JTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9NQVNDVUxJTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QVElPTkFMX0ZPUk1fQ09NUF9SRVFDT0RFX1BSRUZJWCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1JBTkdFX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1JJR0lOQUxSRUZfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VUkZJUk1fUkVGX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VUkZJUk1fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VUkZJUk1fVkFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PVVRHT0lOR19XT1JLX1JVTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX05FR0FUSVZFX1JFU1VMVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUElDS19QT1NJVElWRV9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BJQ0tfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUExBTl9TVEFUVVNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BMQVRGT1JNX1ZFUlNJT05fQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUExVR0lOU19TRVRUSU5HU19ERVNDUklQVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUE9TSVRJVkVfUElDS19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUE9XRVJfVE9fQ1JFQVRFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QT1dFUl9UT19TSUdOX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QUklPUklUWV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUVVBTElGSUVEX1RBU0tfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUVVBTElGSUVEX1RBU0tfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUNTVEFUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRURfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZfSURfVF9SRUZfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZfUkVRVUlTSVRFU19SRUZFUkVOQ0VfQ09ERV9TRUxFQ1RFRF9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9SRUNPUkRfSElTVE9SWV9DUkVBVEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9SRUNPUkRfSElTVE9SWV9ERUxFVEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9SRUNPUkRfSElTVE9SWV9NT0RJRllfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9UWVBFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZFUkVOQ0VTX0FERF9QQVJBTVNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRVNfRElTUExBWV9SRVFVSVNJVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFTU9URV9TRVJWRVJfU1RBVFVTX1dPUktJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFTU9URV9TRVJWRVJfVFlQRV9NQUlOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRU1PVEVfU0VSVkVSX1RZUEVfU0VDT05EQVJZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRU1PVEVfVVNFUl9GTEFHX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUE9SVF9BUFBfRURJVE9SX0lOVEVSTkFMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVBPUlRfQkFTRV9SRVBPUlRfSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUE9SVF9CQVNFX1JFUE9SVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVQT1JUX1NDUklQVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVQT1JUX1RFTVBMQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVBPUlRfVklFV0VSX0NPREVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9BTExPV19DT01QT05FTlRfREVGQVVMVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX0FMTE9XX1JFQ09SRF9ERUZBVUxUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfQUxMT1dfU0VSVkVSX0NPTVBPTkVOVF9ERUZBVUxUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9BVkFJTEFCTEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX01PREVfRURJVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9ISURERU5fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX01PREVfTk9UX0FWQUlMQUJMRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9OVU1CRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9TRUNUSU9OX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfVFlQRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9CWV9VTklUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX0RBVEVfRlVMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9EQVRFX1RJTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfTEVGVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9SSUdIVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9XSVRIT1VUX1VOSVQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9OVU1CRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX0FDVElPTlMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX0JVVFRPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fQlVUVE9OUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fQ0FSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTAgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTEgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTYgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyNCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUzIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFNSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU2IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFOCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU5IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVTX1BTRVVET1JFRkVSRU5DRV9SRVFVSVNJVEVfTlVNQkVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SSUdIVF9BTElHTk1FTlRfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9MRVNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JPVVRFX1NURVBfQUZURVJfUlVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST1VURV9TVEVQX0FORF9DT05ESVRJT05fUlVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST1VURV9TVEVQX09SX0NPTkRJVElPTl9SVVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JPVVRFX1RZUEVfQ09NUExFWCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9VVEVfVFlQRV9QQVJBTExFTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9VVEVfVFlQRV9TRVJJQUwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NCREFUQVNFVERFU0NfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NCREFUQVNFVERFU0NfUE9TSVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NCVklFV1NERVNDX1BPU0lUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TQ1JJUFRfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSF9CWV9URVhUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19DT01QT05FTlRfQ09OVEVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfQ1JJVEVSSUFfQUNUSU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0VET0NfQ09OVEVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfRk9MREVSX0NPTlRFTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0pPQl9DT05URU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfVEFTS19DT05URU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNPTkRfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfQUNUSU9OU19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfQ0FSRF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzFfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF8yX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfM19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF81X1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfNl9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VMRUNUX1JFRkVSRU5DRV9NT0RFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFTEVDVF9UWVBFX1NFTEVDVEFCTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFTEVDVF9UWVBFX1NFTEVDVEFCTEVfT05MWV9DSElMRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VMRUNUX1RZUEVfU0VMRUNUQUJMRV9XSVRIX0NISUxEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUxFQ1RfVFlQRV9VTlNMRUNUQUJMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VSVkVSX1RZUEVfTUFJTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VSVklDRV9VU0VSX0NBVEVHT1JZX0ZJRUxEX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRVRUSU5HU19VU0VSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TSUdOQVRVUkVfQU5EX0VOQ09ERV9DRVJUSUZJQ0FURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NJR05BVFVSRV9DRVJUSUZJQ0FURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NJTkdVTEFSX1RJVExFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TUUxfU0VSVkVSX0FVVEhFTlRJRklDQVRJT05fRkxBR19WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TUUxfU0VSVkVSX0VOQ09ERV9BVVRIRU5USUZJQ0FUSU9OX0ZMQUdfVkFMVUVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBTkRBUlRfUk9VVEVfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQU5EQVJUX1JPVVRFX1JFRkVSRU5DRV9DT01NRU5UX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFOREFSVF9ST1VURVNfR1JPVVBTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFURV9SRVFfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVEVfUkVRVUlTSVRFX0FDVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVEVfUkVRVUlTSVRFX0NMT1NFRF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRJQ19ST0xFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1BMQU5fREVGQVVMVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX0FVVE9DTEVBTklORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX0JMVUVfU1FVQVJFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfQ09NUExFVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9HUkVFTl9TUVVBUkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9PUkFOR0VfU1FVQVJFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfUFVSUExFX1NRVUFSRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX1JFRF9TUVVBUkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9TVVNQRU5EIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfWUVMTE9XX1NRVUFSRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1REUk9VVEVfU0hPV19UT19VU0VSU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RPUkFHRV9UWVBFX0ZJTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUT1JBR0VfVFlQRV9TUUxfU0VSVkVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJS0VPVVRfTElGRV9DWUNMRV9TVEFHRV9EUkFXX1NUWUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJTkdfRk9STUFUX0xFRlRfQUxJR05fQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RSSU5HX0ZPUk1BVF9SSUdIVF9BTElHTl9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJTkdfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUUklOR19SRVFVSVNJVEVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RSSU5HX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1VCU1RJVFVURVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NVQlRBU0tfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NZU1RFTV9TRVRUSU5HX0NVUlJFTlRfVVNFUl9QQVJBTV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1lTVEVNX1NFVFRJTkdfRU1QVFlfVkFMVUVfUEFSQU1fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NZU1RFTV9WRVJTSU9OX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfQUNDRVNTX1RZUEVfQUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0FDQ0VTU19UWVBFX0FMTF9NRU1CRVJTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0FDQ0VTU19UWVBFX01BTlVBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19FTkNPREVfVFlQRV9DRVJUSUZJQ0FUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0VOQ09ERV9UWVBFX0NFUlRJRklDQVRJT05fQU5EX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0VOQ09ERV9UWVBFX05PTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfRU5DT0RFX1RZUEVfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfUk9VVEVfQUxMX0NPTkRJVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19ST1VURV9BTkRfQ09ORElUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1JPVVRFX09SX0NPTkRJVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9BQk9SVEVEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0NPTVBMRVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0NPTlRJTlVFRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9DT05UUk9MIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0lOSVQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfV09SS0lORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19USVRMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19UWVBFU19HUk9VUFNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfVFlQRVNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFTVBMQVRFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9EQVRFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0RFVl9EQVRBQkFTRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0RFVl9TWVNURU1fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX0RBVEFCQVNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19NQUlOX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19NQUlOX0RCX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19TRUNPTkRfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX1NFQ09ORF9EQl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0VETVNfU1lTVEVNX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfTlVNRVJJQ19SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVYVF9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFWFRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFWFRfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFWFRfVFlQRV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UWVBFX0NPREVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOREVGSU5FRF9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOSVRTX1NFQ1RJT05fSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOSVRTX1NFQ1RJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOU1RPUkVEX0RBVEFfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOU1RPUkVEX0RBVEFfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRV9BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9BQ0NPVU5UX1RZUEVfVkFMVUVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9BRERJVElPTkFMX0lORk9STUFUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0FORF9HUk9VUF9JRF9GUk9NX1BTRVVET1JFRkVSRU5DRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9DQVRFR09SWV9OT1JNQUwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfU1RBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfU1VCSkVDVF9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0NFUlRJRklDQVRFX1RIVU1CUFJJTlRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ09NTU9OX0NBVEVHT1JZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0NPTU1PTl9DQVRFR09SWV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0ZVTExfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9HUk9VUF9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0xPR0lOX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1JFTU9URV9DT05UUk9MTEVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1JFTU9URV9TWVNURU1fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfUklHSFRTX1RfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU0VSVkVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU0VSVklDRV9DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TRVJWSUNFX0NBVEVHT1JZX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0FETUlOSVNUUkFUT1JfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfQURNSU5JU1RSQVRPUl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19ERVZFTE9QRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfREVWRUxPUEVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0RJU0FCTEVEX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0RJU0FCTEVEX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX1NZU1RFTV9ERVZFTE9QRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfVVNFUl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19VU0VSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX1VTRVJfTkFNRV9ERVBSRUNBVEVEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1RZUEVfRklFTERfVkFMVUVfVVNFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19DT05UUk9MTEVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19JU19NQUlOX1NFUlZFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1JFR0lTVFJBVElPTl9DRVJUSUZJQ0FURVNfQUNUSU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19TWVNURU1fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1VTRVJfQUNDRVNTX1JJR0hUU19UWVBSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19VU0VSX0FVVEhFTlRJQ0FUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19VU0VSX0NPTVBPTkVOVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfVVNFUl9HUk9VUF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfVklFV19DRVJUSUZJQ0FURVNfQUNUSU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1ZJRVdfREVGQVVMVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9WSUVXX0RFRkFVTFRfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVklFV0VSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XQUlUSU5HX0JMT0NLX0RFU0NSSVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XSVpBUkRfRk9STV9MQUJFTF9URVNUX1NUUklORyAgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dJWkFSRF9RVUVSWV9QQVJBTV9IRUlHSFRfRVRBTE9OX1NUUklORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV0laQVJEX1JFRkVSRU5DRV9DT01NRU5UX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1JVTEVTX0RFU0NSSVBUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1RJTUVfQ0FMRU5EQVJfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktfV09SS0ZMT1dfSEFSRF9ST1VURV9UWVBFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1dPUktGTE9XX0hBUkRfUk9VVEVfVFlQRV9WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1dPUktGTE9XX0hBUkRfUk9VVEVfVFlQRV9WQUxVRV9DT0RFX1JVUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV09SS19XT1JLRkxPV19TT0ZUX1JPVVRFX1RZUEVfVkFMVUVfQ09ERV9SVVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktGTE9XX1JPVVRFX1RZUFJfSEFSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV09SS0ZMT1dfUk9VVEVfVFlQUl9TT0ZUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9YTUxfRU5DT0RJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1hSRUNfU1RBVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWFJFQ0lEX0ZJRUxEX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTX05PXzJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFU19OT19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTX05PX1RfUkVGX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFU19QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ZRVNfVkFMVUUgXCI7XG5cbiAgLy8gQmFzZSBjb25zdGFudFxuICB2YXIgYmFzZV9jb25zdGFudHMgPSBcIkNSIEZBTFNFIG5pbCBOT19WQUxVRSBOVUxMIFRBQiBUUlVFIFlFU19WQUxVRSBcIjtcblxuICAvLyBCYXNlIGdyb3VwIG5hbWVcbiAgdmFyIGJhc2VfZ3JvdXBfbmFtZV9jb25zdGFudHMgPVxuICAgIFwiQURNSU5JU1RSQVRPUlNfR1JPVVBfTkFNRSBDVVNUT01JWkVSU19HUk9VUF9OQU1FIERFVkVMT1BFUlNfR1JPVVBfTkFNRSBTRVJWSUNFX1VTRVJTX0dST1VQX05BTUUgXCI7XG5cbiAgLy8gRGVjaXNpb24gYmxvY2sgcHJvcGVydGllc1xuICB2YXIgZGVjaXNpb25fYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiREVDSVNJT05fQkxPQ0tfRklSU1RfT1BFUkFORF9QUk9QRVJUWSBERUNJU0lPTl9CTE9DS19OQU1FX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX09QRVJBVElPTl9QUk9QRVJUWSBcIiArXG4gICAgXCJERUNJU0lPTl9CTE9DS19SRVNVTFRfVFlQRV9QUk9QRVJUWSBERUNJU0lPTl9CTE9DS19TRUNPTkRfT1BFUkFORF9QUk9QRVJUWSBcIjtcblxuICAvLyBGaWxlIGV4dGVuc2lvblxuICB2YXIgZmlsZV9leHRlbnNpb25fY29uc3RhbnRzID1cbiAgICBcIkFOWV9GSUxFX0VYVEVOVElPTiBDT01QUkVTU0VEX0RPQ1VNRU5UX0VYVEVOU0lPTiBFWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT04gXCIgK1xuICAgIFwiU0hPUlRfQ09NUFJFU1NFRF9ET0NVTUVOVF9FWFRFTlNJT04gU0hPUlRfRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OIFwiO1xuXG4gIC8vIEpvYiBibG9jayBwcm9wZXJ0aWVzXG4gIHZhciBqb2JfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiSk9CX0JMT0NLX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FGVEVSX1FVRVJZX1BBUkFNRVRFUlNfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FUVEFDSE1FTlRfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19HUk9VUF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0JFRk9SRV9RVUVSWV9QQVJBTUVURVJTX0VWRU5UIFwiICtcbiAgICBcIkpPQl9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0NSRUFURURfSk9CU19QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0VYRUNVVElPTl9SRVNVTFRTX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19JU19QQVJBTExFTF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfSVNfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19KT0JfVEVYVF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfTkVFRF9TSUdOX09OX1BFUkZPUk1fUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX1BFUkZPUk1FUl9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIjtcblxuICAvLyBMYW5ndWFnZSBjb2RlXG4gIHZhciBsYW5ndWFnZV9jb2RlX2NvbnN0YW50cyA9IFwiRU5HTElTSF9MQU5HVUFHRV9DT0RFIFJVU1NJQU5fTEFOR1VBR0VfQ09ERSBcIjtcblxuICAvLyBMYXVuY2hpbmcgZXh0ZXJuYWwgYXBwbGljYXRpb25zXG4gIHZhciBsYXVuY2hpbmdfZXh0ZXJuYWxfYXBwbGljYXRpb25zX2NvbnN0YW50cyA9XG4gICAgXCJzbUhpZGRlbiBzbU1heGltaXplZCBzbU1pbmltaXplZCBzbU5vcm1hbCB3bU5vIHdtWWVzIFwiO1xuXG4gIC8vIExpbmsga2luZFxuICB2YXIgbGlua19raW5kX2NvbnN0YW50cyA9XG4gICAgXCJDT01QT05FTlRfVE9LRU5fTElOS19LSU5EIFwiICtcbiAgICBcIkRPQ1VNRU5UX0xJTktfS0lORCBcIiArXG4gICAgXCJFRE9DVU1FTlRfTElOS19LSU5EIFwiICtcbiAgICBcIkZPTERFUl9MSU5LX0tJTkQgXCIgK1xuICAgIFwiSk9CX0xJTktfS0lORCBcIiArXG4gICAgXCJSRUZFUkVOQ0VfTElOS19LSU5EIFwiICtcbiAgICBcIlRBU0tfTElOS19LSU5EIFwiO1xuXG4gIC8vIExvY2sgdHlwZVxuICB2YXIgbG9ja190eXBlX2NvbnN0YW50cyA9XG4gICAgXCJDT01QT05FTlRfVE9LRU5fTE9DS19UWVBFIEVET0NVTUVOVF9WRVJTSU9OX0xPQ0tfVFlQRSBcIjtcblxuICAvLyBNb25pdG9yIGJsb2NrIHByb3BlcnRpZXNcbiAgdmFyIG1vbml0b3JfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiTU9OSVRPUl9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX0lOVEVSVkFMX1BST1BFUlRZIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfSU5URVJWQUxfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19TRUFSQ0hfU0NSSVBUX1BST1BFUlRZIFwiO1xuXG4gIC8vIE5vdGljZSBibG9jayBwcm9wZXJ0aWVzXG4gIHZhciBub3RpY2VfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiTk9USUNFX0JMT0NLX0FGVEVSX0ZJTklTSF9FVkVOVCBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVF9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX0dST1VQX1BST1BFUlRZIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19BVFRBQ0hNRU5UU19SSUdIVFNfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19DUkVBVEVEX05PVElDRVNfUFJPUEVSVFkgXCIgK1xuICAgIFwiTk9USUNFX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19JU19SRUxBVElWRV9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfTk9USUNFX1RFWFRfUFJPUEVSVFkgXCIgK1xuICAgIFwiTk9USUNFX0JMT0NLX1BFUkZPUk1FUl9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIjtcblxuICAvLyBPYmplY3QgZXZlbnRzXG4gIHZhciBvYmplY3RfZXZlbnRzX2NvbnN0YW50cyA9XG4gICAgXCJkc2VBZnRlckNhbmNlbCBcIiArXG4gICAgXCJkc2VBZnRlckNsb3NlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VBZnRlckluc2VydCBcIiArXG4gICAgXCJkc2VBZnRlck9wZW4gXCIgK1xuICAgIFwiZHNlQWZ0ZXJTY3JvbGwgXCIgK1xuICAgIFwiZHNlQWZ0ZXJVcGRhdGUgXCIgK1xuICAgIFwiZHNlQWZ0ZXJVcGRhdGVPdXRPZlRyYW5zYWN0aW9uIFwiICtcbiAgICBcImRzZUJlZm9yZUNhbmNlbCBcIiArXG4gICAgXCJkc2VCZWZvcmVDbG9zZSBcIiArXG4gICAgXCJkc2VCZWZvcmVEZWxldGUgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGV0YWlsVXBkYXRlIFwiICtcbiAgICBcImRzZUJlZm9yZUluc2VydCBcIiArXG4gICAgXCJkc2VCZWZvcmVPcGVuIFwiICtcbiAgICBcImRzZUJlZm9yZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPbkFueVJlcXVpc2l0ZUNoYW5nZSBcIiArXG4gICAgXCJkc2VPbkNsb3NlUmVjb3JkIFwiICtcbiAgICBcImRzZU9uRGVsZXRlRXJyb3IgXCIgK1xuICAgIFwiZHNlT25PcGVuUmVjb3JkIFwiICtcbiAgICBcImRzZU9uUHJlcGFyZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPblVwZGF0ZUVycm9yIFwiICtcbiAgICBcImRzZU9uVXBkYXRlUmF0aWZpZWRSZWNvcmQgXCIgK1xuICAgIFwiZHNlT25WYWxpZERlbGV0ZSBcIiArXG4gICAgXCJkc2VPblZhbGlkVXBkYXRlIFwiICtcbiAgICBcInJlT25DaGFuZ2UgXCIgK1xuICAgIFwicmVPbkNoYW5nZVZhbHVlcyBcIiArXG4gICAgXCJTRUxFQ1RJT05fQkVHSU5fUk9VVEVfRVZFTlQgXCIgK1xuICAgIFwiU0VMRUNUSU9OX0VORF9ST1VURV9FVkVOVCBcIjtcblxuICAvLyBPYmplY3QgcGFyYW1zXG4gIHZhciBvYmplY3RfcGFyYW1zX2NvbnN0YW50cyA9XG4gICAgXCJDVVJSRU5UX1BFUklPRF9JU19SRVFVSVJFRCBcIiArXG4gICAgXCJQUkVWSU9VU19DQVJEX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTSE9XX1JFQ09SRF9QUk9QRVJUSUVTX0ZPUk0gXCI7XG5cbiAgLy8gT3RoZXJcbiAgdmFyIG90aGVyX2NvbnN0YW50cyA9XG4gICAgXCJBQ0NFU1NfUklHSFRTX1NFVFRJTkdfRElBTE9HX0NPREUgXCIgK1xuICAgIFwiQURNSU5JU1RSQVRPUl9VU0VSX0NPREUgXCIgK1xuICAgIFwiQU5BTFlUSUNfUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiYXNydEhpZGVMb2NhbCBcIiArXG4gICAgXCJhc3J0SGlkZVJlbW90ZSBcIiArXG4gICAgXCJDQUxDVUxBVEVEX1JPTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIkNPTVBPTkVOVFNfUkVGRVJFTkNFX0RFVkVMT1BFUl9WSUVXX0NPREUgXCIgK1xuICAgIFwiRENUU19URVNUX1BST1RPQ09MU19GT0xERVJfUEFUSCBcIiArXG4gICAgXCJFX0VET0NfVkVSU0lPTl9BTFJFQURZX0FQUFJPVklOR0xZX1NJR05FRCBcIiArXG4gICAgXCJFX0VET0NfVkVSU0lPTl9BTFJFQURZX0FQUFJPVklOR0xZX1NJR05FRF9CWV9VU0VSIFwiICtcbiAgICBcIkVfRURPQ19WRVJTSU9OX0FMUkVEWV9TSUdORUQgXCIgK1xuICAgIFwiRV9FRE9DX1ZFUlNJT05fQUxSRURZX1NJR05FRF9CWV9VU0VSIFwiICtcbiAgICBcIkVET0NfVFlQRVNfQ09ERV9SRVFVSVNJVEVfRklFTERfTkFNRSBcIiArXG4gICAgXCJFRE9DVU1FTlRTX0FMSUFTX05BTUUgXCIgK1xuICAgIFwiRklMRVNfRk9MREVSX1BBVEggXCIgK1xuICAgIFwiRklMVEVSX09QRVJBTkRTX0RFTElNSVRFUiBcIiArXG4gICAgXCJGSUxURVJfT1BFUkFUSU9OU19ERUxJTUlURVIgXCIgK1xuICAgIFwiRk9STUNBUkRfTkFNRSBcIiArXG4gICAgXCJGT1JNTElTVF9OQU1FIFwiICtcbiAgICBcIkdFVF9FWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT05fQ1JFQVRJT05fTU9ERSBcIiArXG4gICAgXCJHRVRfRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OX0lNUE9SVF9NT0RFIFwiICtcbiAgICBcIklOVEVHUkFURURfUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiSVNfQlVJTERFUl9BUFBMSUNBVElPTl9ST0xFIFwiICtcbiAgICBcIklTX0JVSUxERVJfQVBQTElDQVRJT05fUk9MRTIgXCIgK1xuICAgIFwiSVNfQlVJTERFUl9VU0VSUyBcIiArXG4gICAgXCJJU0JTWVNERVYgXCIgK1xuICAgIFwiTE9HX0ZPTERFUl9QQVRIIFwiICtcbiAgICBcIm1iQ2FuY2VsIFwiICtcbiAgICBcIm1iTm8gXCIgK1xuICAgIFwibWJOb1RvQWxsIFwiICtcbiAgICBcIm1iT0sgXCIgK1xuICAgIFwibWJZZXMgXCIgK1xuICAgIFwibWJZZXNUb0FsbCBcIiArXG4gICAgXCJNRU1PUllfREFUQVNFVF9ERVNSSVBUSU9OU19GSUxFTkFNRSBcIiArXG4gICAgXCJtck5vIFwiICtcbiAgICBcIm1yTm9Ub0FsbCBcIiArXG4gICAgXCJtclllcyBcIiArXG4gICAgXCJtclllc1RvQWxsIFwiICtcbiAgICBcIk1VTFRJUExFX1NFTEVDVF9ESUFMT0dfQ09ERSBcIiArXG4gICAgXCJOT05PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfRkVNSU5JTkUgXCIgK1xuICAgIFwiTk9OT1BFUkFUSU5HX1JFQ09SRF9GTEFHX01BU0NVTElORSBcIiArXG4gICAgXCJPUEVSQVRJTkdfUkVDT1JEX0ZMQUdfRkVNSU5JTkUgXCIgK1xuICAgIFwiT1BFUkFUSU5HX1JFQ09SRF9GTEFHX01BU0NVTElORSBcIiArXG4gICAgXCJQUk9GSUxJTkdfU0VUVElOR1NfQ09NTU9OX1NFVFRJTkdTX0NPREVfVkFMVUUgXCIgK1xuICAgIFwiUFJPR1JBTV9JTklUSUFURURfTE9PS1VQX0FDVElPTiBcIiArXG4gICAgXCJyYXREZWxldGUgXCIgK1xuICAgIFwicmF0RWRpdCBcIiArXG4gICAgXCJyYXRJbnNlcnQgXCIgK1xuICAgIFwiUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiUkVRVUlSRURfUElDS19WQUxVRVNfVkFSSUFCTEUgXCIgK1xuICAgIFwicm1DYXJkIFwiICtcbiAgICBcInJtTGlzdCBcIiArXG4gICAgXCJTQlJURV9QUk9HSURfREVWIFwiICtcbiAgICBcIlNCUlRFX1BST0dJRF9SRUxFQVNFIFwiICtcbiAgICBcIlNUQVRJQ19ST0xFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTVVBQUkVTU19FTVBUWV9URU1QTEFURV9DUkVBVElPTiBcIiArXG4gICAgXCJTWVNURU1fVVNFUl9DT0RFIFwiICtcbiAgICBcIlVQREFURV9ESUFMT0dfREFUQVNFVCBcIiArXG4gICAgXCJVU0VEX0lOX09CSkVDVF9ISU5UX1BBUkFNIFwiICtcbiAgICBcIlVTRVJfSU5JVElBVEVEX0xPT0tVUF9BQ1RJT04gXCIgK1xuICAgIFwiVVNFUl9OQU1FX0ZPUk1BVCBcIiArXG4gICAgXCJVU0VSX1NFTEVDVElPTl9SRVNUUklDVElPTlMgXCIgK1xuICAgIFwiV09SS0ZMT1dfVEVTVF9QUk9UT0NPTFNfRk9MREVSX1BBVEggXCIgK1xuICAgIFwiRUxTX1NVQlRZUEVfQ09OVFJPTF9OQU1FIFwiICtcbiAgICBcIkVMU19GT0xERVJfS0lORF9DT05UUk9MX05BTUUgXCIgK1xuICAgIFwiUkVQRUFUX1BST0NFU1NfQ1VSUkVOVF9PQkpFQ1RfRVhDRVBUSU9OX05BTUUgXCI7XG5cbiAgLy8gUHJpdmlsZWdlc1xuICB2YXIgcHJpdmlsZWdlc19jb25zdGFudHMgPVxuICAgIFwiUFJJVklMRUdFX0NPTVBPTkVOVF9GVUxMX0FDQ0VTUyBcIiArXG4gICAgXCJQUklWSUxFR0VfREVWRUxPUE1FTlRfRVhQT1JUIFwiICtcbiAgICBcIlBSSVZJTEVHRV9ERVZFTE9QTUVOVF9JTVBPUlQgXCIgK1xuICAgIFwiUFJJVklMRUdFX0RPQ1VNRU5UX0RFTEVURSBcIiArXG4gICAgXCJQUklWSUxFR0VfRVNEIFwiICtcbiAgICBcIlBSSVZJTEVHRV9GT0xERVJfREVMRVRFIFwiICtcbiAgICBcIlBSSVZJTEVHRV9NQU5BR0VfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJQUklWSUxFR0VfTUFOQUdFX1JFUExJQ0FUSU9OIFwiICtcbiAgICBcIlBSSVZJTEVHRV9NQU5BR0VfU0VTU0lPTl9TRVJWRVIgXCIgK1xuICAgIFwiUFJJVklMRUdFX09CSkVDVF9GVUxMX0FDQ0VTUyBcIiArXG4gICAgXCJQUklWSUxFR0VfT0JKRUNUX1ZJRVcgXCIgK1xuICAgIFwiUFJJVklMRUdFX1JFU0VSVkVfTElDRU5TRSBcIiArXG4gICAgXCJQUklWSUxFR0VfU1lTVEVNX0NVU1RPTUlaRSBcIiArXG4gICAgXCJQUklWSUxFR0VfU1lTVEVNX0RFVkVMT1AgXCIgK1xuICAgIFwiUFJJVklMRUdFX1NZU1RFTV9JTlNUQUxMIFwiICtcbiAgICBcIlBSSVZJTEVHRV9UQVNLX0RFTEVURSBcIiArXG4gICAgXCJQUklWSUxFR0VfVVNFUl9QTFVHSU5fU0VUVElOR1NfQ1VTVE9NSVpFIFwiICtcbiAgICBcIlBSSVZJTEVHRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCI7XG5cbiAgLy8gUHNldWRvcmVmZXJlbmNlIGNvZGVcbiAgdmFyIHBzZXVkb3JlZmVyZW5jZV9jb2RlX2NvbnN0YW50cyA9XG4gICAgXCJBQ0NFU1NfVFlQRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiQUxMX0FWQUlMQUJMRV9DT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkFMTF9BVkFJTEFCTEVfUFJJVklMRUdFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJBTExfUkVQTElDQVRFX0NPTVBPTkVOVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiQVZBSUxBQkxFX0RFVkVMT1BFUlNfQ09NUE9ORU5UU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJDT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkZJTFRSQVRFUl9TRVRUSU5HU19DT05GTElDVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiR1JPVVBTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlJFQ0VJVkVfUFJPVE9DT0xfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiUkVGRVJFTkNFX1JFUVVJU0lURV9QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRUZFUkVOQ0VfUkVRVUlTSVRFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRUZUWVBFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRVBMSUNBVElPTl9TRUFOQ0VTX0RJQVJZX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNFTkRfUFJPVE9DT0xfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1VCU1RJVFVURVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTVEVNX1NFVFRJTkdTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlVOSVRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlVTRVJTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlZJRVdFUlNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCI7XG5cbiAgLy8gUmVxdWlzaXRlIElTQkNlcnRpZmljYXRlVHlwZSB2YWx1ZXNcbiAgdmFyIHJlcXVpc2l0ZV9JU0JDZXJ0aWZpY2F0ZVR5cGVfdmFsdWVzX2NvbnN0YW50cyA9XG4gICAgXCJDRVJUSUZJQ0FURV9UWVBFX0VOQ1JZUFQgXCIgK1xuICAgIFwiQ0VSVElGSUNBVEVfVFlQRV9TSUdOIFwiICtcbiAgICBcIkNFUlRJRklDQVRFX1RZUEVfU0lHTl9BTkRfRU5DUllQVCBcIjtcblxuICAvLyBSZXF1aXNpdGUgSVNCRURvY1N0b3JhZ2VUeXBlIHZhbHVlc1xuICB2YXIgcmVxdWlzaXRlX0lTQkVEb2NTdG9yYWdlVHlwZV92YWx1ZXNfY29uc3RhbnRzID1cbiAgICBcIlNUT1JBR0VfVFlQRV9GSUxFIFwiICtcbiAgICBcIlNUT1JBR0VfVFlQRV9OQVNfQ0lGUyBcIiArXG4gICAgXCJTVE9SQUdFX1RZUEVfU0FQRVJJT04gXCIgK1xuICAgIFwiU1RPUkFHRV9UWVBFX1NRTF9TRVJWRVIgXCI7XG5cbiAgLy8gUmVxdWlzaXRlIENvbXBUeXBlMiB2YWx1ZXNcbiAgdmFyIHJlcXVpc2l0ZV9jb21wVHlwZTJfdmFsdWVzX2NvbnN0YW50cyA9XG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX0RPQ1VNRU5UU19WQUxVRSBcIiArXG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX1RBU0tTX1ZBTFVFIFwiICtcbiAgICBcIkNPTVBUWVBFMl9SRVFVSVNJVEVfRk9MREVSU19WQUxVRSBcIiArXG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX1JFRkVSRU5DRVNfVkFMVUUgXCI7XG5cbiAgLy8gUmVxdWlzaXRlIG5hbWVcbiAgdmFyIHJlcXVpc2l0ZV9uYW1lX2NvbnN0YW50cyA9XG4gICAgXCJTWVNSRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfQ09NUFRZUEUyIFwiICtcbiAgICBcIlNZU1JFUV9DT05TVF9BVkFJTEFCTEVfRk9SX1dFQiBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfQ09NTU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0NPTlNUX0NPTU1PTl9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfRklSTV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9DT05TVF9GSVJNX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfRklSTV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfU0VSVkVSX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfQ09OVEVOVFMgXCIgK1xuICAgIFwiU1lTUkVRX0RBVEVfT1BFTiBcIiArXG4gICAgXCJTWVNSRVFfREFURV9DTE9TRSBcIiArXG4gICAgXCJTWVNSRVFfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVRX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9ET1VCTEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfQUNDRVNTX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfQVVUSE9SIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0NSRUFURUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfREVMRUdBVEVfUklHSFRTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0VESVRPUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19FTkNPREVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19FTkNSWVBUSU9OX1BMVUdJTl9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0VOQ1JZUFRJT05fUExVR0lOX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfRVhQT1JUX0RBVEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfRVhQT1JURVIgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19MSUZFX1NUQUdFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfTE9DS0VEX0ZPUl9TRVJWRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19NT0RJRklFRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX05PVEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfUVVBTElGSUVEX0lEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NFU1NJT05fS0VZIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NFU1NJT05fS0VZX0VOQ1JZUFRJT05fUExVR0lOX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU0VTU0lPTl9LRVlfRU5DUllQVElPTl9QTFVHSU5fVkVSU0lPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TSUdOQVRVUkVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TSUdORUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19BUkNISVZFX1NUT1JBR0UgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfQ0hFQ0tfUklHSFRTIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0NPTVBVVEVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfRURJVF9JTl9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0VYRUNVVElWRV9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0ZVTkNUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0lOSVRJQUxJWkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0xPQ0FMX1BBVEggXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfU0FQRVJJT05fREFUQUJBU0VfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TRUFSQ0hfQllfVEVYVCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TRVJWRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TSEFSRURfU09VUkNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19URVhUX01PRElGSUVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfQUNUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfREVTQ1JJUFRJT05fTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfT05fRVhFQ1VURSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0FDVF9PTl9FWEVDVVRFX0VYSVNUUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0FDVF9TRUNUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfQUREX1BBUkFNUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9FVkVOVF9URVhUIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfTkFNRV9JTl9TSU5HVUxBUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX05BTUVfSU5fU0lOR1VMQVJfTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9OQU1FX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfTlVNRVJBVElPTl9NRVRIT0QgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9QU0VVRE9fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9ERVNDUklQVElPTl9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9JU19MRUFESU5HIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfUkVRX0lTX1JFUVVJUkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfUkVRX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9PTl9DSEFOR0UgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fQ0hBTkdFX0VYSVNUUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9PTl9TRUxFQ1QgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fU0VMRUNUX0tJTkQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfSVNfTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfTkFNRV9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0FVVEhPUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0NSQyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0RBVEEgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVkVSU0lPTl9FRElUT1IgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVkVSU0lPTl9FWFBPUlRfREFURSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0VYUE9SVEVSIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fSElEREVOIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fTElGRV9TVEFHRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX01PRElGSUVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fTk9URSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1NJR05BVFVSRV9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fU0lHTkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fU0laRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1NPVVJDRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1RFWFRfTU9ESUZJRUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NLSU5EX0RFRkFVTFRfVkVSU0lPTl9TVEFURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9GT0xERVJfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19DT01NRU5UIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0dST1VQIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0dST1VQX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX0ZVTkNfR1JPVVBfTlVNQkVSIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0hFTFAgXCIgK1xuICAgIFwiU1lTUkVRX0ZVTkNfUEFSQU1fREVGX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1BBUkFNX0lERU5UIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1BBUkFNX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1RFWFQgXCIgK1xuICAgIFwiU1lTUkVRX0dST1VQX0NBVEVHT1JZIFwiICtcbiAgICBcIlNZU1JFUV9JRCBcIiArXG4gICAgXCJTWVNSRVFfTEFTVF9VUERBVEUgXCIgK1xuICAgIFwiU1lTUkVRX0xFQURFUl9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVRX0xJTkVfTlVNQkVSIFwiICtcbiAgICBcIlNZU1JFUV9NQUlOX1JFQ09SRF9JRCBcIiArXG4gICAgXCJTWVNSRVFfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfTkFNRV9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfTk9URSBcIiArXG4gICAgXCJTWVNSRVFfT1JJR0lOQUxfUkVDT1JEIFwiICtcbiAgICBcIlNZU1JFUV9PVVJfRklSTSBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX0JBVENIX0xPR0lORyBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX0JBVENIX1NJWkUgXCIgK1xuICAgIFwiU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19QUk9GSUxJTkdfRU5BQkxFRCBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX1NRTF9QUk9GSUxJTkdfRU5BQkxFRCBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX1NUQVJUX0xPR0dFRCBcIiArXG4gICAgXCJTWVNSRVFfUkVDT1JEX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9GSUVMRF9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX0ZPUk1BVCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9HRU5FUkFURUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfTEVOR1RIIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX1BSRUNJU0lPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9TVE9SRUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfVE9LRU5TIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfVklFVyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX0FDVF9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9BQ1RfT05fRVhFQ1VURSBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX09OX0VYRUNVVEVfRVhJU1RTIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9BQ1RfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUREX1BBUkFNUyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQ09NTU9OX1NFVFRJTkdTIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9ESVNQTEFZX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9FVkVOVF9URVhUIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9NQUlOX0xFQURJTkdfUkVGIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0lOX1NJTkdVTEFSIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0lOX1NJTkdVTEFSX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OVU1FUkFUSU9OX01FVEhPRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9SRVFfSVNfQ09OVFJPTCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0ZJTFRFUiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0xFQURJTkcgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9JU19SRVFVSVJFRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX09OX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX09OX0NIQU5HRV9FWElTVFMgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9TRUxFQ1QgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9TRUxFQ1RfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX1NFQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1ZJRVdfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9WSUVXX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1ZJRVdfSVNfTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfVklFV19OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9WSUVXX05BTUVfTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRkVSRU5DRV9UWVBFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9TVEFURSBcIiArXG4gICAgXCJTWVNSRVFfU1RBVNCVIFwiICtcbiAgICBcIlNZU1JFUV9TWVNURU1fU0VUVElOR1NfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVRX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX1VOSVQgXCIgK1xuICAgIFwiU1lTUkVRX1VOSVRfSUQgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJfR1JPVVBTX0dST1VQX0ZVTExfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUl9HUk9VUFNfR1JPVVBfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUl9HUk9VUFNfR1JPVVBfU0VSVkVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0FVVEhFTlRJQ0FUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19DT01QT05FTlRfVVNFUl9JU19QVUJMSUMgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0RPTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfRlVMTF9VU0VSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0dST1VQIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19JU19NQUlOX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfTE9HSU4gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1JFRkVSRU5DRV9VU0VSX0lTX1BVQkxJQyBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfU1RBVFVTIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX0lORk8gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfUExVR0lOX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfUExVR0lOX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfU1RBVEUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfU1VCSkVDVF9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1RIVU1CUFJJTlQgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfREVGQVVMVF9DRVJUSUZJQ0FURSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9HTE9CQUxfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9MT0dJTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9NQUlOX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9XT1JLX1JVTEVTX0ZPTERFUl9JRCBcIjtcblxuICAvLyBSZXN1bHRcbiAgdmFyIHJlc3VsdF9jb25zdGFudHMgPSBcIlJFU1VMVF9WQVJfTkFNRSBSRVNVTFRfVkFSX05BTUVfRU5HIFwiO1xuXG4gIC8vIFJ1bGUgaWRlbnRpZmljYXRpb25cbiAgdmFyIHJ1bGVfaWRlbnRpZmljYXRpb25fY29uc3RhbnRzID1cbiAgICBcIkFVVE9fTlVNRVJBVElPTl9SVUxFX0lEIFwiICtcbiAgICBcIkNBTlRfQ0hBTkdFX0lEX1JFUVVJU0lURV9SVUxFX0lEIFwiICtcbiAgICBcIkNBTlRfQ0hBTkdFX09VUkZJUk1fUkVRVUlTSVRFX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfQ0hBTkdJTkdfUkVGRVJFTkNFX1JFQ09SRF9VU0VfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19DT0RFX1JFUVVJU0lURV9SVUxFX0lEIFwiICtcbiAgICBcIkNIRUNLX0RFTEVUSU5HX1JFRkVSRU5DRV9SRUNPUkRfVVNFX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfRklMVFJBVEVSX0NIQU5HRVNfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19SRUNPUkRfSU5URVJWQUxfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19SRUZFUkVOQ0VfSU5URVJWQUxfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19SRVFVSVJFRF9EQVRBX0ZVTExORVNTX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfUkVRVUlSRURfUkVRVUlTSVRFU19GVUxMTkVTU19SVUxFX0lEIFwiICtcbiAgICBcIk1BS0VfUkVDT1JEX1VOUkFUSUZJRURfUlVMRV9JRCBcIiArXG4gICAgXCJSRVNUT1JFX0FVVE9fTlVNRVJBVElPTl9SVUxFX0lEIFwiICtcbiAgICBcIlNFVF9GSVJNX0NPTlRFWFRfRlJPTV9SRUNPUkRfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfRklSU1RfUkVDT1JEX0lOX0xJU1RfRk9STV9SVUxFX0lEIFwiICtcbiAgICBcIlNFVF9JRFNQU19WQUxVRV9SVUxFX0lEIFwiICtcbiAgICBcIlNFVF9ORVhUX0NPREVfVkFMVUVfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfT1VSRklSTV9CT1VORFNfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfT1VSRklSTV9SRVFVSVNJVEVfUlVMRV9JRCBcIjtcblxuICAvLyBTY3JpcHQgYmxvY2sgcHJvcGVydGllc1xuICB2YXIgc2NyaXB0X2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzID1cbiAgICBcIlNDUklQVF9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX0JFRk9SRV9TVEFSVF9FVkVOVCBcIiArXG4gICAgXCJTQ1JJUFRfQkxPQ0tfRVhFQ1VUSU9OX1JFU1VMVFNfUFJPUEVSVFkgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX05BTUVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX1NDUklQVF9QUk9QRVJUWSBcIjtcblxuICAvLyBTdWJ0YXNrIGJsb2NrIHByb3BlcnRpZXNcbiAgdmFyIHN1YnRhc2tfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiU1VCVEFTS19CTE9DS19BQk9SVF9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FGVEVSX0ZJTklTSF9FVkVOVCBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FTU0lHTl9QQVJBTVNfRVZFTlQgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19BVFRBQ0hNRU5UU19QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19HUk9VUF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQ1JFQVRFRF9UQVNLX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQ1JFQVRJT05fRVZFTlQgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0lNUE9SVEFOQ0VfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19JTklUSUFUT1JfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19JU19SRUxBVElWRV9BQk9SVF9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfSk9CU19UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1BBUkFMTEVMX1JPVVRFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfUEVSRk9STUVSU19QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1JFTEFUSVZFX0FCT1JUX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19SRUxBVElWRV9ERUFETElORV9UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfUkVRVUlSRV9TSUdOX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfU1RBTkRBUkRfUk9VVEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19TVEFSVF9FVkVOVCBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1NURVBfQ09OVFJPTF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1NVQkpFQ1RfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19UQVNLX0NPTlRST0xfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19URVhUX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfVU5MT0NLX0FUVEFDSE1FTlRTX09OX1NUT1BfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19VU0VfU1RBTkRBUkRfUk9VVEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19XQUlUX0ZPUl9UQVNLX0NPTVBMRVRFX1BST1BFUlRZIFwiO1xuXG4gIC8vIFN5c3RlbSBjb21wb25lbnRcbiAgdmFyIHN5c3RlbV9jb21wb25lbnRfY29uc3RhbnRzID1cbiAgICBcIlNZU0NPTVBfQ09OVFJPTF9KT0JTIFwiICtcbiAgICBcIlNZU0NPTVBfRk9MREVSUyBcIiArXG4gICAgXCJTWVNDT01QX0pPQlMgXCIgK1xuICAgIFwiU1lTQ09NUF9OT1RJQ0VTIFwiICtcbiAgICBcIlNZU0NPTVBfVEFTS1MgXCI7XG5cbiAgLy8gU3lzdGVtIGRpYWxvZ3NcbiAgdmFyIHN5c3RlbV9kaWFsb2dzX2NvbnN0YW50cyA9XG4gICAgXCJTWVNETEdfQ1JFQVRFX0VET0NVTUVOVCBcIiArXG4gICAgXCJTWVNETEdfQ1JFQVRFX0VET0NVTUVOVF9WRVJTSU9OIFwiICtcbiAgICBcIlNZU0RMR19DVVJSRU5UX1BFUklPRCBcIiArXG4gICAgXCJTWVNETEdfRURJVF9GVU5DVElPTl9IRUxQIFwiICtcbiAgICBcIlNZU0RMR19FRE9DVU1FTlRfS0lORFNfRk9SX1RFTVBMQVRFIFwiICtcbiAgICBcIlNZU0RMR19FWFBPUlRfTVVMVElQTEVfRURPQ1VNRU5UUyBcIiArXG4gICAgXCJTWVNETEdfRVhQT1JUX1NJTkdMRV9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX0lNUE9SVF9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX01VTFRJUExFX1NFTEVDVCBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfREVGQVVMVF9SSUdIVFMgXCIgK1xuICAgIFwiU1lTRExHX1NFVFVQX0ZJTFRFUl9DT05ESVRJT04gXCIgK1xuICAgIFwiU1lTRExHX1NFVFVQX1NJR05fUklHSFRTIFwiICtcbiAgICBcIlNZU0RMR19TRVRVUF9UQVNLX09CU0VSVkVSUyBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfVEFTS19ST1VURSBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfVVNFUlNfTElTVCBcIiArXG4gICAgXCJTWVNETEdfU0lHTl9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX1NJR05fTVVMVElQTEVfRURPQ1VNRU5UUyBcIjtcblxuICAvLyBTeXN0ZW0gcmVmZXJlbmNlIG5hbWVzXG4gIHZhciBzeXN0ZW1fcmVmZXJlbmNlX25hbWVzX2NvbnN0YW50cyA9XG4gICAgXCJTWVNSRUZfQUNDRVNTX1JJR0hUU19UWVBFUyBcIiArXG4gICAgXCJTWVNSRUZfQURNSU5JU1RSQVRJT05fSElTVE9SWSBcIiArXG4gICAgXCJTWVNSRUZfQUxMX0FWQUlMQUJMRV9DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9BTExfQVZBSUxBQkxFX1BSSVZJTEVHRVMgXCIgK1xuICAgIFwiU1lTUkVGX0FMTF9SRVBMSUNBVElOR19DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9BVkFJTEFCTEVfREVWRUxPUEVSU19DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9DQUxFTkRBUl9FVkVOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0NPTVBPTkVOVF9UT0tFTl9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9DT01QT05FTlRfVE9LRU5TIFwiICtcbiAgICBcIlNZU1JFRl9DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9DT05TVEFOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0RBVEFfUkVDRUlWRV9QUk9UT0NPTCBcIiArXG4gICAgXCJTWVNSRUZfREFUQV9TRU5EX1BST1RPQ09MIFwiICtcbiAgICBcIlNZU1JFRl9ESUFMT0dTIFwiICtcbiAgICBcIlNZU1JFRl9ESUFMT0dTX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VESVRPUlMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NfQ0FSRFMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NfVFlQRVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEX1RZUEVTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfQ0FSRF9UWVBFU19SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9LSU5EUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9TSUdOQVRVUkVTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfVEVNUExBVEVTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfVEVYVF9TVE9SQUdFUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX1ZJRVdTIFwiICtcbiAgICBcIlNZU1JFRl9GSUxURVJFUl9TRVRVUF9DT05GTElDVFMgXCIgK1xuICAgIFwiU1lTUkVGX0ZJTFRSQVRFUl9TRVRUSU5HX0NPTkZMSUNUUyBcIiArXG4gICAgXCJTWVNSRUZfRk9MREVSX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX0ZPTERFUlMgXCIgK1xuICAgIFwiU1lTUkVGX0ZVTkNUSU9OX0dST1VQUyBcIiArXG4gICAgXCJTWVNSRUZfRlVOQ1RJT05fUEFSQU1TIFwiICtcbiAgICBcIlNZU1JFRl9GVU5DVElPTlMgXCIgK1xuICAgIFwiU1lTUkVGX0pPQl9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9MSU5LUyBcIiArXG4gICAgXCJTWVNSRUZfTE9DQUxJWkFUSU9OX0RJQ1RJT05BUlkgXCIgK1xuICAgIFwiU1lTUkVGX0xPQ0FMSVpBVElPTl9MQU5HVUFHRVMgXCIgK1xuICAgIFwiU1lTUkVGX01PRFVMRVMgXCIgK1xuICAgIFwiU1lTUkVGX1BSSVZJTEVHRVMgXCIgK1xuICAgIFwiU1lTUkVGX1JFQ09SRF9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9SRUZFUkVOQ0VfUkVRVUlTSVRFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFX1RZUEVfVklFV1MgXCIgK1xuICAgIFwiU1lTUkVGX1JFRkVSRU5DRV9UWVBFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFU19SRVFVSVNJVEVTIFwiICtcbiAgICBcIlNZU1JFRl9SRU1PVEVfU0VSVkVSUyBcIiArXG4gICAgXCJTWVNSRUZfUkVQTElDQVRJT05fU0VTU0lPTlNfTE9HIFwiICtcbiAgICBcIlNZU1JFRl9SRVBMSUNBVElPTl9TRVNTSU9OU19QUk9UT0NPTCBcIiArXG4gICAgXCJTWVNSRUZfUkVQT1JUUyBcIiArXG4gICAgXCJTWVNSRUZfUk9MRVMgXCIgK1xuICAgIFwiU1lTUkVGX1JPVVRFX0JMT0NLX0dST1VQUyBcIiArXG4gICAgXCJTWVNSRUZfUk9VVEVfQkxPQ0tTIFwiICtcbiAgICBcIlNZU1JFRl9TQ1JJUFRTIFwiICtcbiAgICBcIlNZU1JFRl9TRUFSQ0hFUyBcIiArXG4gICAgXCJTWVNSRUZfU0VSVkVSX0VWRU5UUyBcIiArXG4gICAgXCJTWVNSRUZfU0VSVkVSX0VWRU5UU19ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9TVEFOREFSRF9ST1VURV9HUk9VUFMgXCIgK1xuICAgIFwiU1lTUkVGX1NUQU5EQVJEX1JPVVRFUyBcIiArXG4gICAgXCJTWVNSRUZfU1RBVFVTRVMgXCIgK1xuICAgIFwiU1lTUkVGX1NZU1RFTV9TRVRUSU5HUyBcIiArXG4gICAgXCJTWVNSRUZfVEFTS19ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX0tJTkRfR1JPVVBTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX0tJTkRTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX1JJR0hUUyBcIiArXG4gICAgXCJTWVNSRUZfVEFTS19TSUdOQVRVUkVTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLUyBcIiArXG4gICAgXCJTWVNSRUZfVU5JVFMgXCIgK1xuICAgIFwiU1lTUkVGX1VTRVJfR1JPVVBTIFwiICtcbiAgICBcIlNZU1JFRl9VU0VSX0dST1VQU19SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVGX1VTRVJfU1VCU1RJVFVUSU9OIFwiICtcbiAgICBcIlNZU1JFRl9VU0VSUyBcIiArXG4gICAgXCJTWVNSRUZfVVNFUlNfUkVGRVJFTkNFIFwiICtcbiAgICBcIlNZU1JFRl9WSUVXRVJTIFwiICtcbiAgICBcIlNZU1JFRl9XT1JLSU5HX1RJTUVfQ0FMRU5EQVJTIFwiO1xuXG4gIC8vIFRhYmxlIG5hbWVcbiAgdmFyIHRhYmxlX25hbWVfY29uc3RhbnRzID1cbiAgICBcIkFDQ0VTU19SSUdIVFNfVEFCTEVfTkFNRSBcIiArXG4gICAgXCJFRE1TX0FDQ0VTU19UQUJMRV9OQU1FIFwiICtcbiAgICBcIkVET0NfVFlQRVNfVEFCTEVfTkFNRSBcIjtcblxuICAvLyBUZXN0XG4gIHZhciB0ZXN0X2NvbnN0YW50cyA9XG4gICAgXCJURVNUX0RFVl9EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfREVWX1NZU1RFTV9DT0RFIFwiICtcbiAgICBcIlRFU1RfRURNU19EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfRURNU19NQUlOX0NPREUgXCIgK1xuICAgIFwiVEVTVF9FRE1TX01BSU5fREJfTkFNRSBcIiArXG4gICAgXCJURVNUX0VETVNfU0VDT05EX0NPREUgXCIgK1xuICAgIFwiVEVTVF9FRE1TX1NFQ09ORF9EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfRURNU19TWVNURU1fQ09ERSBcIiArXG4gICAgXCJURVNUX0lTQjVfTUFJTl9DT0RFIFwiICtcbiAgICBcIlRFU1RfSVNCNV9TRUNPTkRfQ09ERSBcIiArXG4gICAgXCJURVNUX1NRTF9TRVJWRVJfMjAwNV9OQU1FIFwiICtcbiAgICBcIlRFU1RfU1FMX1NFUlZFUl9OQU1FIFwiO1xuXG4gIC8vIFVzaW5nIHRoZSBkaWFsb2cgd2luZG93c1xuICB2YXIgdXNpbmdfdGhlX2RpYWxvZ193aW5kb3dzX2NvbnN0YW50cyA9XG4gICAgXCJBVFRFTlRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJjYnNDb21tYW5kTGlua3MgXCIgK1xuICAgIFwiY2JzRGVmYXVsdCBcIiArXG4gICAgXCJDT05GSVJNQVRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJFUlJPUl9DQVBUSU9OIFwiICtcbiAgICBcIklORk9STUFUSU9OX0NBUFRJT04gXCIgK1xuICAgIFwibXJDYW5jZWwgXCIgK1xuICAgIFwibXJPayBcIjtcblxuICAvLyBVc2luZyB0aGUgZG9jdW1lbnRcbiAgdmFyIHVzaW5nX3RoZV9kb2N1bWVudF9jb25zdGFudHMgPVxuICAgIFwiRURPQ19WRVJTSU9OX0FDVElWRV9TVEFHRV9DT0RFIFwiICtcbiAgICBcIkVET0NfVkVSU0lPTl9ERVNJR05fU1RBR0VfQ09ERSBcIiArXG4gICAgXCJFRE9DX1ZFUlNJT05fT0JTT0xFVEVfU1RBR0VfQ09ERSBcIjtcblxuICAvLyBVc2luZyB0aGUgRUEgYW5kIGVuY3J5cHRpb25cbiAgdmFyIHVzaW5nX3RoZV9FQV9hbmRfZW5jcnlwdGlvbl9jb25zdGFudHMgPVxuICAgIFwiY3BEYXRhRW5jaXBoZXJtZW50RW5hYmxlZCBcIiArXG4gICAgXCJjcERpZ2l0YWxTaWduYXR1cmVFbmFibGVkIFwiICtcbiAgICBcImNwSUQgXCIgK1xuICAgIFwiY3BJc3N1ZXIgXCIgK1xuICAgIFwiY3BQbHVnaW5WZXJzaW9uIFwiICtcbiAgICBcImNwU2VyaWFsIFwiICtcbiAgICBcImNwU3ViamVjdE5hbWUgXCIgK1xuICAgIFwiY3BTdWJqU2ltcGxlTmFtZSBcIiArXG4gICAgXCJjcFZhbGlkRnJvbURhdGUgXCIgK1xuICAgIFwiY3BWYWxpZFRvRGF0ZSBcIjtcblxuICAvLyBVc2luZyB0aGUgSVNCTC1lZGl0b3JcbiAgdmFyIHVzaW5nX3RoZV9JU0JMX2VkaXRvcl9jb25zdGFudHMgPVxuICAgIFwiSVNCTF9TWU5UQVggXCIgKyBcIk5PX1NZTlRBWCBcIiArIFwiWE1MX1NZTlRBWCBcIjtcblxuICAvLyBXYWl0IGJsb2NrIHByb3BlcnRpZXNcbiAgdmFyIHdhaXRfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiV0FJVF9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiV0FJVF9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiV0FJVF9CTE9DS19ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJXQUlUX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIldBSVRfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJXQUlUX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCI7XG5cbiAgLy8gU1lTUkVTIENvbW1vblxuICB2YXIgc3lzcmVzX2NvbW1vbl9jb25zdGFudHMgPVxuICAgIFwiU1lTUkVTX0NPTU1PTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1QgXCIgK1xuICAgIFwiU1lTUkVTX01CRlVOQyBcIiArXG4gICAgXCJTWVNSRVNfU0JEQVRBIFwiICtcbiAgICBcIlNZU1JFU19TQkdVSSBcIiArXG4gICAgXCJTWVNSRVNfU0JJTlRGIFwiICtcbiAgICBcIlNZU1JFU19TQlJFRkRTQyBcIiArXG4gICAgXCJTWVNSRVNfU1FMRVJST1JTIFwiICtcbiAgICBcIlNZU1JFU19TWVNDT01QIFwiO1xuXG4gIC8vINCa0L7QvdGB0YLQsNC90YLRiyA9PT4gYnVpbHRfaW5cbiAgdmFyIENPTlNUQU5UUyA9XG4gICAgc3lzcmVzX2NvbnN0YW50cyArXG4gICAgYmFzZV9jb25zdGFudHMgK1xuICAgIGJhc2VfZ3JvdXBfbmFtZV9jb25zdGFudHMgK1xuICAgIGRlY2lzaW9uX2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzICtcbiAgICBmaWxlX2V4dGVuc2lvbl9jb25zdGFudHMgK1xuICAgIGpvYl9ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyArXG4gICAgbGFuZ3VhZ2VfY29kZV9jb25zdGFudHMgK1xuICAgIGxhdW5jaGluZ19leHRlcm5hbF9hcHBsaWNhdGlvbnNfY29uc3RhbnRzICtcbiAgICBsaW5rX2tpbmRfY29uc3RhbnRzICtcbiAgICBsb2NrX3R5cGVfY29uc3RhbnRzICtcbiAgICBtb25pdG9yX2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzICtcbiAgICBub3RpY2VfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIG9iamVjdF9ldmVudHNfY29uc3RhbnRzICtcbiAgICBvYmplY3RfcGFyYW1zX2NvbnN0YW50cyArXG4gICAgb3RoZXJfY29uc3RhbnRzICtcbiAgICBwcml2aWxlZ2VzX2NvbnN0YW50cyArXG4gICAgcHNldWRvcmVmZXJlbmNlX2NvZGVfY29uc3RhbnRzICtcbiAgICByZXF1aXNpdGVfSVNCQ2VydGlmaWNhdGVUeXBlX3ZhbHVlc19jb25zdGFudHMgK1xuICAgIHJlcXVpc2l0ZV9JU0JFRG9jU3RvcmFnZVR5cGVfdmFsdWVzX2NvbnN0YW50cyArXG4gICAgcmVxdWlzaXRlX2NvbXBUeXBlMl92YWx1ZXNfY29uc3RhbnRzICtcbiAgICByZXF1aXNpdGVfbmFtZV9jb25zdGFudHMgK1xuICAgIHJlc3VsdF9jb25zdGFudHMgK1xuICAgIHJ1bGVfaWRlbnRpZmljYXRpb25fY29uc3RhbnRzICtcbiAgICBzY3JpcHRfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIHN1YnRhc2tfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIHN5c3RlbV9jb21wb25lbnRfY29uc3RhbnRzICtcbiAgICBzeXN0ZW1fZGlhbG9nc19jb25zdGFudHMgK1xuICAgIHN5c3RlbV9yZWZlcmVuY2VfbmFtZXNfY29uc3RhbnRzICtcbiAgICB0YWJsZV9uYW1lX2NvbnN0YW50cyArXG4gICAgdGVzdF9jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9kaWFsb2dfd2luZG93c19jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9kb2N1bWVudF9jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9FQV9hbmRfZW5jcnlwdGlvbl9jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9JU0JMX2VkaXRvcl9jb25zdGFudHMgK1xuICAgIHdhaXRfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIHN5c3Jlc19jb21tb25fY29uc3RhbnRzO1xuXG4gIC8vIGVudW0gVEFjY291bnRUeXBlXG4gIHZhciBUQWNjb3VudFR5cGUgPSBcImF0VXNlciBhdEdyb3VwIGF0Um9sZSBcIjtcblxuICAvLyBlbnVtIFRBY3Rpb25FbmFibGVkTW9kZVxuICB2YXIgVEFjdGlvbkVuYWJsZWRNb2RlID1cbiAgICBcImFlbUVuYWJsZWRBbHdheXMgXCIgK1xuICAgIFwiYWVtRGlzYWJsZWRBbHdheXMgXCIgK1xuICAgIFwiYWVtRW5hYmxlZE9uQnJvd3NlIFwiICtcbiAgICBcImFlbUVuYWJsZWRPbkVkaXQgXCIgK1xuICAgIFwiYWVtRGlzYWJsZWRPbkJyb3dzZUVtcHR5IFwiO1xuXG4gIC8vIGVudW0gVEFkZFBvc2l0aW9uXG4gIHZhciBUQWRkUG9zaXRpb24gPSBcImFwQmVnaW4gYXBFbmQgXCI7XG5cbiAgLy8gZW51bSBUQWxpZ25tZW50XG4gIHZhciBUQWxpZ25tZW50ID0gXCJhbExlZnQgYWxSaWdodCBcIjtcblxuICAvLyBlbnVtIFRBcmVhU2hvd01vZGVcbiAgdmFyIFRBcmVhU2hvd01vZGUgPVxuICAgIFwiYXNtTmV2ZXIgXCIgK1xuICAgIFwiYXNtTm9CdXRDdXN0b21pemUgXCIgK1xuICAgIFwiYXNtQXNMYXN0VGltZSBcIiArXG4gICAgXCJhc21ZZXNCdXRDdXN0b21pemUgXCIgK1xuICAgIFwiYXNtQWx3YXlzIFwiO1xuXG4gIC8vIGVudW0gVENlcnRpZmljYXRlSW52YWxpZGF0aW9uUmVhc29uXG4gIHZhciBUQ2VydGlmaWNhdGVJbnZhbGlkYXRpb25SZWFzb24gPSBcImNpckNvbW1vbiBjaXJSZXZva2VkIFwiO1xuXG4gIC8vIGVudW0gVENlcnRpZmljYXRlVHlwZVxuICB2YXIgVENlcnRpZmljYXRlVHlwZSA9IFwiY3RTaWduYXR1cmUgY3RFbmNvZGUgY3RTaWduYXR1cmVFbmNvZGUgXCI7XG5cbiAgLy8gZW51bSBUQ2hlY2tMaXN0Qm94SXRlbVN0YXRlXG4gIHZhciBUQ2hlY2tMaXN0Qm94SXRlbVN0YXRlID0gXCJjbGJVbmNoZWNrZWQgY2xiQ2hlY2tlZCBjbGJHcmF5ZWQgXCI7XG5cbiAgLy8gZW51bSBUQ2xvc2VPbkVzY1xuICB2YXIgVENsb3NlT25Fc2MgPSBcImNlSVNCIGNlQWx3YXlzIGNlTmV2ZXIgXCI7XG5cbiAgLy8gZW51bSBUQ29tcFR5cGVcbiAgdmFyIFRDb21wVHlwZSA9XG4gICAgXCJjdERvY3VtZW50IFwiICtcbiAgICBcImN0UmVmZXJlbmNlIFwiICtcbiAgICBcImN0U2NyaXB0IFwiICtcbiAgICBcImN0VW5rbm93biBcIiArXG4gICAgXCJjdFJlcG9ydCBcIiArXG4gICAgXCJjdERpYWxvZyBcIiArXG4gICAgXCJjdEZ1bmN0aW9uIFwiICtcbiAgICBcImN0Rm9sZGVyIFwiICtcbiAgICBcImN0RURvY3VtZW50IFwiICtcbiAgICBcImN0VGFzayBcIiArXG4gICAgXCJjdEpvYiBcIiArXG4gICAgXCJjdE5vdGljZSBcIiArXG4gICAgXCJjdENvbnRyb2xKb2IgXCI7XG5cbiAgLy8gZW51bSBUQ29uZGl0aW9uRm9ybWF0XG4gIHZhciBUQ29uZGl0aW9uRm9ybWF0ID0gXCJjZkludGVybmFsIGNmRGlzcGxheSBcIjtcblxuICAvLyBlbnVtIFRDb25uZWN0aW9uSW50ZW50XG4gIHZhciBUQ29ubmVjdGlvbkludGVudCA9IFwiY2lVbnNwZWNpZmllZCBjaVdyaXRlIGNpUmVhZCBcIjtcblxuICAvLyBlbnVtIFRDb250ZW50S2luZFxuICB2YXIgVENvbnRlbnRLaW5kID1cbiAgICBcImNrRm9sZGVyIFwiICtcbiAgICBcImNrRURvY3VtZW50IFwiICtcbiAgICBcImNrVGFzayBcIiArXG4gICAgXCJja0pvYiBcIiArXG4gICAgXCJja0NvbXBvbmVudFRva2VuIFwiICtcbiAgICBcImNrQW55IFwiICtcbiAgICBcImNrUmVmZXJlbmNlIFwiICtcbiAgICBcImNrU2NyaXB0IFwiICtcbiAgICBcImNrUmVwb3J0IFwiICtcbiAgICBcImNrRGlhbG9nIFwiO1xuXG4gIC8vIGVudW0gVENvbnRyb2xUeXBlXG4gIHZhciBUQ29udHJvbFR5cGUgPVxuICAgIFwiY3RJU0JMRWRpdG9yIFwiICtcbiAgICBcImN0QmV2ZWwgXCIgK1xuICAgIFwiY3RCdXR0b24gXCIgK1xuICAgIFwiY3RDaGVja0xpc3RCb3ggXCIgK1xuICAgIFwiY3RDb21ib0JveCBcIiArXG4gICAgXCJjdENvbWJvRWRpdCBcIiArXG4gICAgXCJjdEdyaWQgXCIgK1xuICAgIFwiY3REQkNoZWNrQm94IFwiICtcbiAgICBcImN0REJDb21ib0JveCBcIiArXG4gICAgXCJjdERCRWRpdCBcIiArXG4gICAgXCJjdERCRWxsaXBzaXMgXCIgK1xuICAgIFwiY3REQk1lbW8gXCIgK1xuICAgIFwiY3REQk5hdmlnYXRvciBcIiArXG4gICAgXCJjdERCUmFkaW9Hcm91cCBcIiArXG4gICAgXCJjdERCU3RhdHVzTGFiZWwgXCIgK1xuICAgIFwiY3RFZGl0IFwiICtcbiAgICBcImN0R3JvdXBCb3ggXCIgK1xuICAgIFwiY3RJbnBsYWNlSGludCBcIiArXG4gICAgXCJjdE1lbW8gXCIgK1xuICAgIFwiY3RQYW5lbCBcIiArXG4gICAgXCJjdExpc3RCb3ggXCIgK1xuICAgIFwiY3RSYWRpb0J1dHRvbiBcIiArXG4gICAgXCJjdFJpY2hFZGl0IFwiICtcbiAgICBcImN0VGFiU2hlZXQgXCIgK1xuICAgIFwiY3RXZWJCcm93c2VyIFwiICtcbiAgICBcImN0SW1hZ2UgXCIgK1xuICAgIFwiY3RIeXBlckxpbmsgXCIgK1xuICAgIFwiY3RMYWJlbCBcIiArXG4gICAgXCJjdERCTXVsdGlFbGxpcHNpcyBcIiArXG4gICAgXCJjdFJpYmJvbiBcIiArXG4gICAgXCJjdFJpY2hWaWV3IFwiICtcbiAgICBcImN0SW5uZXJQYW5lbCBcIiArXG4gICAgXCJjdFBhbmVsR3JvdXAgXCIgK1xuICAgIFwiY3RCaXRCdXR0b24gXCI7XG5cbiAgLy8gZW51bSBUQ3JpdGVyaW9uQ29udGVudFR5cGVcbiAgdmFyIFRDcml0ZXJpb25Db250ZW50VHlwZSA9XG4gICAgXCJjY3REYXRlIFwiICtcbiAgICBcImNjdEludGVnZXIgXCIgK1xuICAgIFwiY2N0TnVtZXJpYyBcIiArXG4gICAgXCJjY3RQaWNrIFwiICtcbiAgICBcImNjdFJlZmVyZW5jZSBcIiArXG4gICAgXCJjY3RTdHJpbmcgXCIgK1xuICAgIFwiY2N0VGV4dCBcIjtcblxuICAvLyBlbnVtIFRDdWx0dXJlVHlwZVxuICB2YXIgVEN1bHR1cmVUeXBlID0gXCJjbHRJbnRlcm5hbCBjbHRQcmltYXJ5IGNsdEdVSSBcIjtcblxuICAvLyBlbnVtIFREYXRhU2V0RXZlbnRUeXBlXG4gIHZhciBURGF0YVNldEV2ZW50VHlwZSA9XG4gICAgXCJkc2VCZWZvcmVPcGVuIFwiICtcbiAgICBcImRzZUFmdGVyT3BlbiBcIiArXG4gICAgXCJkc2VCZWZvcmVDbG9zZSBcIiArXG4gICAgXCJkc2VBZnRlckNsb3NlIFwiICtcbiAgICBcImRzZU9uVmFsaWREZWxldGUgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VPbkRlbGV0ZUVycm9yIFwiICtcbiAgICBcImRzZUJlZm9yZUluc2VydCBcIiArXG4gICAgXCJkc2VBZnRlckluc2VydCBcIiArXG4gICAgXCJkc2VPblZhbGlkVXBkYXRlIFwiICtcbiAgICBcImRzZUJlZm9yZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPblVwZGF0ZVJhdGlmaWVkUmVjb3JkIFwiICtcbiAgICBcImRzZUFmdGVyVXBkYXRlIFwiICtcbiAgICBcImRzZUFmdGVyVXBkYXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VPblVwZGF0ZUVycm9yIFwiICtcbiAgICBcImRzZUFmdGVyU2Nyb2xsIFwiICtcbiAgICBcImRzZU9uT3BlblJlY29yZCBcIiArXG4gICAgXCJkc2VPbkNsb3NlUmVjb3JkIFwiICtcbiAgICBcImRzZUJlZm9yZUNhbmNlbCBcIiArXG4gICAgXCJkc2VBZnRlckNhbmNlbCBcIiArXG4gICAgXCJkc2VPblVwZGF0ZURlYWRsb2NrRXJyb3IgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGV0YWlsVXBkYXRlIFwiICtcbiAgICBcImRzZU9uUHJlcGFyZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPbkFueVJlcXVpc2l0ZUNoYW5nZSBcIjtcblxuICAvLyBlbnVtIFREYXRhU2V0U3RhdGVcbiAgdmFyIFREYXRhU2V0U3RhdGUgPSBcImRzc0VkaXQgZHNzSW5zZXJ0IGRzc0Jyb3dzZSBkc3NJbkFjdGl2ZSBcIjtcblxuICAvLyBlbnVtIFREYXRlRm9ybWF0VHlwZVxuICB2YXIgVERhdGVGb3JtYXRUeXBlID0gXCJkZnREYXRlIGRmdFNob3J0RGF0ZSBkZnREYXRlVGltZSBkZnRUaW1lU3RhbXAgXCI7XG5cbiAgLy8gZW51bSBURGF0ZU9mZnNldFR5cGVcbiAgdmFyIFREYXRlT2Zmc2V0VHlwZSA9IFwiZG90RGF5cyBkb3RIb3VycyBkb3RNaW51dGVzIGRvdFNlY29uZHMgXCI7XG5cbiAgLy8gZW51bSBURGF0ZVRpbWVLaW5kXG4gIHZhciBURGF0ZVRpbWVLaW5kID0gXCJkdGtuZExvY2FsIGR0a25kVVRDIFwiO1xuXG4gIC8vIGVudW0gVERlYUFjY2Vzc1JpZ2h0c1xuICB2YXIgVERlYUFjY2Vzc1JpZ2h0cyA9IFwiYXJOb25lIGFyVmlldyBhckVkaXQgYXJGdWxsIFwiO1xuXG4gIC8vIGVudW0gVERvY3VtZW50RGVmYXVsdEFjdGlvblxuICB2YXIgVERvY3VtZW50RGVmYXVsdEFjdGlvbiA9IFwiZGRhVmlldyBkZGFFZGl0IFwiO1xuXG4gIC8vIGVudW0gVEVkaXRNb2RlXG4gIHZhciBURWRpdE1vZGUgPVxuICAgIFwiZW1Mb2NrIFwiICtcbiAgICBcImVtRWRpdCBcIiArXG4gICAgXCJlbVNpZ24gXCIgK1xuICAgIFwiZW1FeHBvcnRXaXRoTG9jayBcIiArXG4gICAgXCJlbUltcG9ydFdpdGhVbmxvY2sgXCIgK1xuICAgIFwiZW1DaGFuZ2VWZXJzaW9uTm90ZSBcIiArXG4gICAgXCJlbU9wZW5Gb3JNb2RpZnkgXCIgK1xuICAgIFwiZW1DaGFuZ2VMaWZlU3RhZ2UgXCIgK1xuICAgIFwiZW1EZWxldGUgXCIgK1xuICAgIFwiZW1DcmVhdGVWZXJzaW9uIFwiICtcbiAgICBcImVtSW1wb3J0IFwiICtcbiAgICBcImVtVW5sb2NrRXhwb3J0ZWRXaXRoTG9jayBcIiArXG4gICAgXCJlbVN0YXJ0IFwiICtcbiAgICBcImVtQWJvcnQgXCIgK1xuICAgIFwiZW1SZUluaXQgXCIgK1xuICAgIFwiZW1NYXJrQXNSZWFkZWQgXCIgK1xuICAgIFwiZW1NYXJrQXNVbnJlYWRlZCBcIiArXG4gICAgXCJlbVBlcmZvcm0gXCIgK1xuICAgIFwiZW1BY2NlcHQgXCIgK1xuICAgIFwiZW1SZXN1bWUgXCIgK1xuICAgIFwiZW1DaGFuZ2VSaWdodHMgXCIgK1xuICAgIFwiZW1FZGl0Um91dGUgXCIgK1xuICAgIFwiZW1FZGl0T2JzZXJ2ZXIgXCIgK1xuICAgIFwiZW1SZWNvdmVyeUZyb21Mb2NhbENvcHkgXCIgK1xuICAgIFwiZW1DaGFuZ2VXb3JrQWNjZXNzVHlwZSBcIiArXG4gICAgXCJlbUNoYW5nZUVuY29kZVR5cGVUb0NlcnRpZmljYXRlIFwiICtcbiAgICBcImVtQ2hhbmdlRW5jb2RlVHlwZVRvUGFzc3dvcmQgXCIgK1xuICAgIFwiZW1DaGFuZ2VFbmNvZGVUeXBlVG9Ob25lIFwiICtcbiAgICBcImVtQ2hhbmdlRW5jb2RlVHlwZVRvQ2VydGlmaWNhdGVQYXNzd29yZCBcIiArXG4gICAgXCJlbUNoYW5nZVN0YW5kYXJkUm91dGUgXCIgK1xuICAgIFwiZW1HZXRUZXh0IFwiICtcbiAgICBcImVtT3BlbkZvclZpZXcgXCIgK1xuICAgIFwiZW1Nb3ZlVG9TdG9yYWdlIFwiICtcbiAgICBcImVtQ3JlYXRlT2JqZWN0IFwiICtcbiAgICBcImVtQ2hhbmdlVmVyc2lvbkhpZGRlbiBcIiArXG4gICAgXCJlbURlbGV0ZVZlcnNpb24gXCIgK1xuICAgIFwiZW1DaGFuZ2VMaWZlQ3ljbGVTdGFnZSBcIiArXG4gICAgXCJlbUFwcHJvdmluZ1NpZ24gXCIgK1xuICAgIFwiZW1FeHBvcnQgXCIgK1xuICAgIFwiZW1Db250aW51ZSBcIiArXG4gICAgXCJlbUxvY2tGcm9tRWRpdCBcIiArXG4gICAgXCJlbVVuTG9ja0ZvckVkaXQgXCIgK1xuICAgIFwiZW1Mb2NrRm9yU2VydmVyIFwiICtcbiAgICBcImVtVW5sb2NrRnJvbVNlcnZlciBcIiArXG4gICAgXCJlbURlbGVnYXRlQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcImVtUmVFbmNvZGUgXCI7XG5cbiAgLy8gZW51bSBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlXG4gIHZhciBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlID0gXCJlY290RmlsZSBlY290UHJvY2VzcyBcIjtcblxuICAvLyBlbnVtIFRFZG1zQXBwbGljYXRpb25BY3Rpb25cbiAgdmFyIFRFZG1zQXBwbGljYXRpb25BY3Rpb24gPSBcImVhR2V0IGVhQ29weSBlYUNyZWF0ZSBlYUNyZWF0ZVN0YW5kYXJkUm91dGUgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50TG9ja1R5cGVcbiAgdmFyIFRFRG9jdW1lbnRMb2NrVHlwZSA9IFwiZWRsdEFsbCBlZGx0Tm90aGluZyBlZGx0UXVlcnkgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RlcFNob3dNb2RlXG4gIHZhciBURURvY3VtZW50U3RlcFNob3dNb2RlID0gXCJlc3NtVGV4dCBlc3NtQ2FyZCBcIjtcblxuICAvLyBlbnVtIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGVcbiAgdmFyIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGUgPSBcImVzdnRMYXN0IGVzdnRMYXN0QWN0aXZlIGVzdnRTcGVjaWZpZWQgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RvcmFnZUZ1bmN0aW9uXG4gIHZhciBURURvY3VtZW50U3RvcmFnZUZ1bmN0aW9uID0gXCJlZHNmRXhlY3V0aXZlIGVkc2ZBcmNoaXZlIFwiO1xuXG4gIC8vIGVudW0gVEVEb2N1bWVudFN0b3JhZ2VUeXBlXG4gIHZhciBURURvY3VtZW50U3RvcmFnZVR5cGUgPSBcImVkc3RTUUxTZXJ2ZXIgZWRzdEZpbGUgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50VmVyc2lvblNvdXJjZVR5cGVcbiAgdmFyIFRFRG9jdW1lbnRWZXJzaW9uU291cmNlVHlwZSA9XG4gICAgXCJlZHZzdE5vbmUgZWR2c3RFRG9jdW1lbnRWZXJzaW9uQ29weSBlZHZzdEZpbGUgZWR2c3RUZW1wbGF0ZSBlZHZzdFNjYW5uZWRGaWxlIFwiO1xuXG4gIC8vIGVudW0gVEVEb2N1bWVudFZlcnNpb25TdGF0ZVxuICB2YXIgVEVEb2N1bWVudFZlcnNpb25TdGF0ZSA9IFwidnNEZWZhdWx0IHZzRGVzaWduIHZzQWN0aXZlIHZzT2Jzb2xldGUgXCI7XG5cbiAgLy8gZW51bSBURW5jb2RlVHlwZVxuICB2YXIgVEVuY29kZVR5cGUgPSBcImV0Tm9uZSBldENlcnRpZmljYXRlIGV0UGFzc3dvcmQgZXRDZXJ0aWZpY2F0ZVBhc3N3b3JkIFwiO1xuXG4gIC8vIGVudW0gVEV4Y2VwdGlvbkNhdGVnb3J5XG4gIHZhciBURXhjZXB0aW9uQ2F0ZWdvcnkgPSBcImVjRXhjZXB0aW9uIGVjV2FybmluZyBlY0luZm9ybWF0aW9uIFwiO1xuXG4gIC8vIGVudW0gVEV4cG9ydGVkU2lnbmF0dXJlc1R5cGVcbiAgdmFyIFRFeHBvcnRlZFNpZ25hdHVyZXNUeXBlID0gXCJlc3RBbGwgZXN0QXBwcm92aW5nT25seSBcIjtcblxuICAvLyBlbnVtIFRFeHBvcnRlZFZlcnNpb25UeXBlXG4gIHZhciBURXhwb3J0ZWRWZXJzaW9uVHlwZSA9IFwiZXZ0TGFzdCBldnRMYXN0QWN0aXZlIGV2dFF1ZXJ5IFwiO1xuXG4gIC8vIGVudW0gVEZpZWxkRGF0YVR5cGVcbiAgdmFyIFRGaWVsZERhdGFUeXBlID1cbiAgICBcImZkdFN0cmluZyBcIiArXG4gICAgXCJmZHROdW1lcmljIFwiICtcbiAgICBcImZkdEludGVnZXIgXCIgK1xuICAgIFwiZmR0RGF0ZSBcIiArXG4gICAgXCJmZHRUZXh0IFwiICtcbiAgICBcImZkdFVua25vd24gXCIgK1xuICAgIFwiZmR0V2lkZVN0cmluZyBcIiArXG4gICAgXCJmZHRMYXJnZUludGVnZXIgXCI7XG5cbiAgLy8gZW51bSBURm9sZGVyVHlwZVxuICB2YXIgVEZvbGRlclR5cGUgPVxuICAgIFwiZnRJbmJveCBcIiArXG4gICAgXCJmdE91dGJveCBcIiArXG4gICAgXCJmdEZhdm9yaXRlcyBcIiArXG4gICAgXCJmdENvbW1vbkZvbGRlciBcIiArXG4gICAgXCJmdFVzZXJGb2xkZXIgXCIgK1xuICAgIFwiZnRDb21wb25lbnRzIFwiICtcbiAgICBcImZ0UXVpY2tMYXVuY2ggXCIgK1xuICAgIFwiZnRTaG9ydGN1dHMgXCIgK1xuICAgIFwiZnRTZWFyY2ggXCI7XG5cbiAgLy8gZW51bSBUR3JpZFJvd0hlaWdodFxuICB2YXIgVEdyaWRSb3dIZWlnaHQgPSBcImdyaEF1dG8gXCIgKyBcImdyaFgxIFwiICsgXCJncmhYMiBcIiArIFwiZ3JoWDMgXCI7XG5cbiAgLy8gZW51bSBUSHlwZXJsaW5rVHlwZVxuICB2YXIgVEh5cGVybGlua1R5cGUgPSBcImhsdFRleHQgXCIgKyBcImhsdFJURiBcIiArIFwiaGx0SFRNTCBcIjtcblxuICAvLyBlbnVtIFRJbWFnZUZpbGVGb3JtYXRcbiAgdmFyIFRJbWFnZUZpbGVGb3JtYXQgPVxuICAgIFwiaWZmQk1QIFwiICtcbiAgICBcImlmZkpQRUcgXCIgK1xuICAgIFwiaWZmTXVsdGlQYWdlVElGRiBcIiArXG4gICAgXCJpZmZTaW5nbGVQYWdlVElGRiBcIiArXG4gICAgXCJpZmZUSUZGIFwiICtcbiAgICBcImlmZlBORyBcIjtcblxuICAvLyBlbnVtIFRJbWFnZU1vZGVcbiAgdmFyIFRJbWFnZU1vZGUgPSBcImltOGJHcmF5c2NhbGUgXCIgKyBcImltMjRiUkdCIFwiICsgXCJpbTFiTW9ub2Nocm9tZSBcIjtcblxuICAvLyBlbnVtIFRJbWFnZVR5cGVcbiAgdmFyIFRJbWFnZVR5cGUgPSBcIml0Qk1QIFwiICsgXCJpdEpQRUcgXCIgKyBcIml0V01GIFwiICsgXCJpdFBORyBcIjtcblxuICAvLyBlbnVtIFRJbnBsYWNlSGludEtpbmRcbiAgdmFyIFRJbnBsYWNlSGludEtpbmQgPVxuICAgIFwiaWtoSW5mb3JtYXRpb24gXCIgKyBcImlraFdhcm5pbmcgXCIgKyBcImlraEVycm9yIFwiICsgXCJpa2hOb0ljb24gXCI7XG5cbiAgLy8gZW51bSBUSVNCTENvbnRleHRcbiAgdmFyIFRJU0JMQ29udGV4dCA9XG4gICAgXCJpY1Vua25vd24gXCIgK1xuICAgIFwiaWNTY3JpcHQgXCIgK1xuICAgIFwiaWNGdW5jdGlvbiBcIiArXG4gICAgXCJpY0ludGVncmF0ZWRSZXBvcnQgXCIgK1xuICAgIFwiaWNBbmFseXRpY1JlcG9ydCBcIiArXG4gICAgXCJpY0RhdGFTZXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNBY3Rpb25IYW5kbGVyIFwiICtcbiAgICBcImljRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0xvb2tVcEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0JlZm9yZVNlYXJjaEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1JvbGVDYWxjdWxhdGlvbiBcIiArXG4gICAgXCJpY1NlbGVjdFJvdXRlRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQmxvY2tQcm9wZXJ0eUNhbGN1bGF0aW9uIFwiICtcbiAgICBcImljQmxvY2tRdWVyeVBhcmFtc0V2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0NoYW5nZVNlYXJjaFJlc3VsdEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0Jsb2NrRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljU3ViVGFza0luaXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNFRG9jRGF0YVNldEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0VEb2NMb29rVXBFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNFRG9jQWN0aW9uSGFuZGxlciBcIiArXG4gICAgXCJpY0VEb2NGb3JtRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRURvY1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1N0cnVjdHVyZWRDb252ZXJzaW9uUnVsZSBcIiArXG4gICAgXCJpY1N0cnVjdHVyZWRDb252ZXJzaW9uRXZlbnRCZWZvcmUgXCIgK1xuICAgIFwiaWNTdHJ1Y3R1cmVkQ29udmVyc2lvbkV2ZW50QWZ0ZXIgXCIgK1xuICAgIFwiaWNXaXphcmRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXaXphcmRGaW5pc2hFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXaXphcmRTdGVwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljV2l6YXJkU3RlcEZpbmlzaEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1dpemFyZEFjdGlvbkVuYWJsZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1dpemFyZEFjdGlvbkV4ZWN1dGVFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNDcmVhdGVKb2JzSGFuZGxlciBcIiArXG4gICAgXCJpY0NyZWF0ZU5vdGljZXNIYW5kbGVyIFwiICtcbiAgICBcImljQmVmb3JlTG9va1VwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQWZ0ZXJMb29rVXBFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNUYXNrQWJvcnRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXb3JrZmxvd0Jsb2NrQWN0aW9uSGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ0RhdGFTZXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNEaWFsb2dBY3Rpb25IYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nTG9va1VwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nUmVxdWlzaXRlQ2hhbmdlRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ1ZhbGlkQ2xvc2VFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNCbG9ja0Zvcm1FdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNUYXNrRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1JlZmVyZW5jZU1ldGhvZCBcIiArXG4gICAgXCJpY0VEb2NNZXRob2QgXCIgK1xuICAgIFwiaWNEaWFsb2dNZXRob2QgXCIgK1xuICAgIFwiaWNQcm9jZXNzTWVzc2FnZUhhbmRsZXIgXCI7XG5cbiAgLy8gZW51bSBUSXRlbVNob3dcbiAgdmFyIFRJdGVtU2hvdyA9IFwiaXNTaG93IFwiICsgXCJpc0hpZGUgXCIgKyBcImlzQnlVc2VyU2V0dGluZ3MgXCI7XG5cbiAgLy8gZW51bSBUSm9iS2luZFxuICB2YXIgVEpvYktpbmQgPSBcImprSm9iIFwiICsgXCJqa05vdGljZSBcIiArIFwiamtDb250cm9sSm9iIFwiO1xuXG4gIC8vIGVudW0gVEpvaW5UeXBlXG4gIHZhciBUSm9pblR5cGUgPSBcImp0SW5uZXIgXCIgKyBcImp0TGVmdCBcIiArIFwianRSaWdodCBcIiArIFwianRGdWxsIFwiICsgXCJqdENyb3NzIFwiO1xuXG4gIC8vIGVudW0gVExhYmVsUG9zXG4gIHZhciBUTGFiZWxQb3MgPSBcImxicEFib3ZlIFwiICsgXCJsYnBCZWxvdyBcIiArIFwibGJwTGVmdCBcIiArIFwibGJwUmlnaHQgXCI7XG5cbiAgLy8gZW51bSBUTGljZW5zaW5nVHlwZVxuICB2YXIgVExpY2Vuc2luZ1R5cGUgPSBcImVsdFBlckNvbm5lY3Rpb24gXCIgKyBcImVsdFBlclVzZXIgXCI7XG5cbiAgLy8gZW51bSBUTGlmZUN5Y2xlU3RhZ2VGb250Q29sb3JcbiAgdmFyIFRMaWZlQ3ljbGVTdGFnZUZvbnRDb2xvciA9XG4gICAgXCJzZmNVbmRlZmluZWQgXCIgK1xuICAgIFwic2ZjQmxhY2sgXCIgK1xuICAgIFwic2ZjR3JlZW4gXCIgK1xuICAgIFwic2ZjUmVkIFwiICtcbiAgICBcInNmY0JsdWUgXCIgK1xuICAgIFwic2ZjT3JhbmdlIFwiICtcbiAgICBcInNmY0xpbGFjIFwiO1xuXG4gIC8vIGVudW0gVExpZmVDeWNsZVN0YWdlRm9udFN0eWxlXG4gIHZhciBUTGlmZUN5Y2xlU3RhZ2VGb250U3R5bGUgPSBcInNmc0l0YWxpYyBcIiArIFwic2ZzU3RyaWtlb3V0IFwiICsgXCJzZnNOb3JtYWwgXCI7XG5cbiAgLy8gZW51bSBUTG9ja2FibGVEZXZlbG9wbWVudENvbXBvbmVudFR5cGVcbiAgdmFyIFRMb2NrYWJsZURldmVsb3BtZW50Q29tcG9uZW50VHlwZSA9XG4gICAgXCJsZGN0U3RhbmRhcmRSb3V0ZSBcIiArXG4gICAgXCJsZGN0V2l6YXJkIFwiICtcbiAgICBcImxkY3RTY3JpcHQgXCIgK1xuICAgIFwibGRjdEZ1bmN0aW9uIFwiICtcbiAgICBcImxkY3RSb3V0ZUJsb2NrIFwiICtcbiAgICBcImxkY3RJbnRlZ3JhdGVkUmVwb3J0IFwiICtcbiAgICBcImxkY3RBbmFseXRpY1JlcG9ydCBcIiArXG4gICAgXCJsZGN0UmVmZXJlbmNlVHlwZSBcIiArXG4gICAgXCJsZGN0RURvY3VtZW50VHlwZSBcIiArXG4gICAgXCJsZGN0RGlhbG9nIFwiICtcbiAgICBcImxkY3RTZXJ2ZXJFdmVudHMgXCI7XG5cbiAgLy8gZW51bSBUTWF4UmVjb3JkQ291bnRSZXN0cmljdGlvblR5cGVcbiAgdmFyIFRNYXhSZWNvcmRDb3VudFJlc3RyaWN0aW9uVHlwZSA9XG4gICAgXCJtcmNydE5vbmUgXCIgKyBcIm1yY3J0VXNlciBcIiArIFwibXJjcnRNYXhpbWFsIFwiICsgXCJtcmNydEN1c3RvbSBcIjtcblxuICAvLyBlbnVtIFRSYW5nZVZhbHVlVHlwZVxuICB2YXIgVFJhbmdlVmFsdWVUeXBlID1cbiAgICBcInZ0RXF1YWwgXCIgKyBcInZ0R3JlYXRlck9yRXF1YWwgXCIgKyBcInZ0TGVzc09yRXF1YWwgXCIgKyBcInZ0UmFuZ2UgXCI7XG5cbiAgLy8gZW51bSBUUmVsYXRpdmVEYXRlXG4gIHZhciBUUmVsYXRpdmVEYXRlID1cbiAgICBcInJkWWVzdGVyZGF5IFwiICtcbiAgICBcInJkVG9kYXkgXCIgK1xuICAgIFwicmRUb21vcnJvdyBcIiArXG4gICAgXCJyZFRoaXNXZWVrIFwiICtcbiAgICBcInJkVGhpc01vbnRoIFwiICtcbiAgICBcInJkVGhpc1llYXIgXCIgK1xuICAgIFwicmROZXh0TW9udGggXCIgK1xuICAgIFwicmROZXh0V2VlayBcIiArXG4gICAgXCJyZExhc3RXZWVrIFwiICtcbiAgICBcInJkTGFzdE1vbnRoIFwiO1xuXG4gIC8vIGVudW0gVFJlcG9ydERlc3RpbmF0aW9uXG4gIHZhciBUUmVwb3J0RGVzdGluYXRpb24gPSBcInJkV2luZG93IFwiICsgXCJyZEZpbGUgXCIgKyBcInJkUHJpbnRlciBcIjtcblxuICAvLyBlbnVtIFRSZXFEYXRhVHlwZVxuICB2YXIgVFJlcURhdGFUeXBlID1cbiAgICBcInJkdFN0cmluZyBcIiArXG4gICAgXCJyZHROdW1lcmljIFwiICtcbiAgICBcInJkdEludGVnZXIgXCIgK1xuICAgIFwicmR0RGF0ZSBcIiArXG4gICAgXCJyZHRSZWZlcmVuY2UgXCIgK1xuICAgIFwicmR0QWNjb3VudCBcIiArXG4gICAgXCJyZHRUZXh0IFwiICtcbiAgICBcInJkdFBpY2sgXCIgK1xuICAgIFwicmR0VW5rbm93biBcIiArXG4gICAgXCJyZHRMYXJnZUludGVnZXIgXCIgK1xuICAgIFwicmR0RG9jdW1lbnQgXCI7XG5cbiAgLy8gZW51bSBUUmVxdWlzaXRlRXZlbnRUeXBlXG4gIHZhciBUUmVxdWlzaXRlRXZlbnRUeXBlID0gXCJyZU9uQ2hhbmdlIFwiICsgXCJyZU9uQ2hhbmdlVmFsdWVzIFwiO1xuXG4gIC8vIGVudW0gVFNCVGltZVR5cGVcbiAgdmFyIFRTQlRpbWVUeXBlID0gXCJ0dEdsb2JhbCBcIiArIFwidHRMb2NhbCBcIiArIFwidHRVc2VyIFwiICsgXCJ0dFN5c3RlbSBcIjtcblxuICAvLyBlbnVtIFRTZWFyY2hTaG93TW9kZVxuICB2YXIgVFNlYXJjaFNob3dNb2RlID1cbiAgICBcInNzbUJyb3dzZSBcIiArIFwic3NtU2VsZWN0IFwiICsgXCJzc21NdWx0aVNlbGVjdCBcIiArIFwic3NtQnJvd3NlTW9kYWwgXCI7XG5cbiAgLy8gZW51bSBUU2VsZWN0TW9kZVxuICB2YXIgVFNlbGVjdE1vZGUgPSBcInNtU2VsZWN0IFwiICsgXCJzbUxpa2UgXCIgKyBcInNtQ2FyZCBcIjtcblxuICAvLyBlbnVtIFRTaWduYXR1cmVUeXBlXG4gIHZhciBUU2lnbmF0dXJlVHlwZSA9IFwic3ROb25lIFwiICsgXCJzdEF1dGhlbnRpY2F0aW5nIFwiICsgXCJzdEFwcHJvdmluZyBcIjtcblxuICAvLyBlbnVtIFRTaWduZXJDb250ZW50VHlwZVxuICB2YXIgVFNpZ25lckNvbnRlbnRUeXBlID0gXCJzY3RTdHJpbmcgXCIgKyBcInNjdFN0cmVhbSBcIjtcblxuICAvLyBlbnVtIFRTdHJpbmdzU29ydFR5cGVcbiAgdmFyIFRTdHJpbmdzU29ydFR5cGUgPSBcInNzdEFuc2lTb3J0IFwiICsgXCJzc3ROYXR1cmFsU29ydCBcIjtcblxuICAvLyBlbnVtIFRTdHJpbmdWYWx1ZVR5cGVcbiAgdmFyIFRTdHJpbmdWYWx1ZVR5cGUgPSBcInN2dEVxdWFsIFwiICsgXCJzdnRDb250YWluIFwiO1xuXG4gIC8vIGVudW0gVFN0cnVjdHVyZWRPYmplY3RBdHRyaWJ1dGVUeXBlXG4gIHZhciBUU3RydWN0dXJlZE9iamVjdEF0dHJpYnV0ZVR5cGUgPVxuICAgIFwic29hdFN0cmluZyBcIiArXG4gICAgXCJzb2F0TnVtZXJpYyBcIiArXG4gICAgXCJzb2F0SW50ZWdlciBcIiArXG4gICAgXCJzb2F0RGF0ZXRpbWUgXCIgK1xuICAgIFwic29hdFJlZmVyZW5jZVJlY29yZCBcIiArXG4gICAgXCJzb2F0VGV4dCBcIiArXG4gICAgXCJzb2F0UGljayBcIiArXG4gICAgXCJzb2F0Qm9vbGVhbiBcIiArXG4gICAgXCJzb2F0RURvY3VtZW50IFwiICtcbiAgICBcInNvYXRBY2NvdW50IFwiICtcbiAgICBcInNvYXRJbnRlZ2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJzb2F0TnVtZXJpY0NvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdFN0cmluZ0NvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdFBpY2tDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXREYXRldGltZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdEJvb2xlYW5Db2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRSZWZlcmVuY2VSZWNvcmRDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRFRG9jdW1lbnRDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRBY2NvdW50Q29sbGVjdGlvbiBcIiArXG4gICAgXCJzb2F0Q29udGVudHMgXCIgK1xuICAgIFwic29hdFVua25vd24gXCI7XG5cbiAgLy8gZW51bSBUVGFza0Fib3J0UmVhc29uXG4gIHZhciBUVGFza0Fib3J0UmVhc29uID0gXCJ0YXJBYm9ydEJ5VXNlciBcIiArIFwidGFyQWJvcnRCeVdvcmtmbG93RXhjZXB0aW9uIFwiO1xuXG4gIC8vIGVudW0gVFRleHRWYWx1ZVR5cGVcbiAgdmFyIFRUZXh0VmFsdWVUeXBlID0gXCJ0dnRBbGxXb3JkcyBcIiArIFwidHZ0RXhhY3RQaHJhc2UgXCIgKyBcInR2dEFueVdvcmQgXCI7XG5cbiAgLy8gZW51bSBUVXNlck9iamVjdFN0YXR1c1xuICB2YXIgVFVzZXJPYmplY3RTdGF0dXMgPVxuICAgIFwidXNOb25lIFwiICtcbiAgICBcInVzQ29tcGxldGVkIFwiICtcbiAgICBcInVzUmVkU3F1YXJlIFwiICtcbiAgICBcInVzQmx1ZVNxdWFyZSBcIiArXG4gICAgXCJ1c1llbGxvd1NxdWFyZSBcIiArXG4gICAgXCJ1c0dyZWVuU3F1YXJlIFwiICtcbiAgICBcInVzT3JhbmdlU3F1YXJlIFwiICtcbiAgICBcInVzUHVycGxlU3F1YXJlIFwiICtcbiAgICBcInVzRm9sbG93VXAgXCI7XG5cbiAgLy8gZW51bSBUVXNlclR5cGVcbiAgdmFyIFRVc2VyVHlwZSA9XG4gICAgXCJ1dFVua25vd24gXCIgK1xuICAgIFwidXRVc2VyIFwiICtcbiAgICBcInV0RGV2ZWxvcGVyIFwiICtcbiAgICBcInV0QWRtaW5pc3RyYXRvciBcIiArXG4gICAgXCJ1dFN5c3RlbURldmVsb3BlciBcIiArXG4gICAgXCJ1dERpc2Nvbm5lY3RlZCBcIjtcblxuICAvLyBlbnVtIFRWYWx1ZXNCdWlsZFR5cGVcbiAgdmFyIFRWYWx1ZXNCdWlsZFR5cGUgPVxuICAgIFwiYnRBbmQgXCIgKyBcImJ0RGV0YWlsQW5kIFwiICsgXCJidE9yIFwiICsgXCJidE5vdE9yIFwiICsgXCJidE9ubHkgXCI7XG5cbiAgLy8gZW51bSBUVmlld01vZGVcbiAgdmFyIFRWaWV3TW9kZSA9IFwidm1WaWV3IFwiICsgXCJ2bVNlbGVjdCBcIiArIFwidm1OYXZpZ2F0aW9uIFwiO1xuXG4gIC8vIGVudW0gVFZpZXdTZWxlY3Rpb25Nb2RlXG4gIHZhciBUVmlld1NlbGVjdGlvbk1vZGUgPVxuICAgIFwidnNtU2luZ2xlIFwiICsgXCJ2c21NdWx0aXBsZSBcIiArIFwidnNtTXVsdGlwbGVDaGVjayBcIiArIFwidnNtTm9TZWxlY3Rpb24gXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkQWN0aW9uVHlwZVxuICB2YXIgVFdpemFyZEFjdGlvblR5cGUgPVxuICAgIFwid2ZhdFByZXZpb3VzIFwiICsgXCJ3ZmF0TmV4dCBcIiArIFwid2ZhdENhbmNlbCBcIiArIFwid2ZhdEZpbmlzaCBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRGb3JtRWxlbWVudFByb3BlcnR5XG4gIHZhciBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eSA9XG4gICAgXCJ3ZmVwVW5kZWZpbmVkIFwiICtcbiAgICBcIndmZXBUZXh0MyBcIiArXG4gICAgXCJ3ZmVwVGV4dDYgXCIgK1xuICAgIFwid2ZlcFRleHQ5IFwiICtcbiAgICBcIndmZXBTcGluRWRpdCBcIiArXG4gICAgXCJ3ZmVwRHJvcERvd24gXCIgK1xuICAgIFwid2ZlcFJhZGlvR3JvdXAgXCIgK1xuICAgIFwid2ZlcEZsYWcgXCIgK1xuICAgIFwid2ZlcFRleHQxMiBcIiArXG4gICAgXCJ3ZmVwVGV4dDE1IFwiICtcbiAgICBcIndmZXBUZXh0MTggXCIgK1xuICAgIFwid2ZlcFRleHQyMSBcIiArXG4gICAgXCJ3ZmVwVGV4dDI0IFwiICtcbiAgICBcIndmZXBUZXh0MjcgXCIgK1xuICAgIFwid2ZlcFRleHQzMCBcIiArXG4gICAgXCJ3ZmVwUmFkaW9Hcm91cENvbHVtbjEgXCIgK1xuICAgIFwid2ZlcFJhZGlvR3JvdXBDb2x1bW4yIFwiICtcbiAgICBcIndmZXBSYWRpb0dyb3VwQ29sdW1uMyBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRGb3JtRWxlbWVudFR5cGVcbiAgdmFyIFRXaXphcmRGb3JtRWxlbWVudFR5cGUgPVxuICAgIFwid2ZldFF1ZXJ5UGFyYW1ldGVyIFwiICsgXCJ3ZmV0VGV4dCBcIiArIFwid2ZldERlbGltaXRlciBcIiArIFwid2ZldExhYmVsIFwiO1xuXG4gIC8vIGVudW0gVFdpemFyZFBhcmFtVHlwZVxuICB2YXIgVFdpemFyZFBhcmFtVHlwZSA9XG4gICAgXCJ3cHRTdHJpbmcgXCIgK1xuICAgIFwid3B0SW50ZWdlciBcIiArXG4gICAgXCJ3cHROdW1lcmljIFwiICtcbiAgICBcIndwdEJvb2xlYW4gXCIgK1xuICAgIFwid3B0RGF0ZVRpbWUgXCIgK1xuICAgIFwid3B0UGljayBcIiArXG4gICAgXCJ3cHRUZXh0IFwiICtcbiAgICBcIndwdFVzZXIgXCIgK1xuICAgIFwid3B0VXNlckxpc3QgXCIgK1xuICAgIFwid3B0RURvY3VtZW50SW5mbyBcIiArXG4gICAgXCJ3cHRFRG9jdW1lbnRJbmZvTGlzdCBcIiArXG4gICAgXCJ3cHRSZWZlcmVuY2VSZWNvcmRJbmZvIFwiICtcbiAgICBcIndwdFJlZmVyZW5jZVJlY29yZEluZm9MaXN0IFwiICtcbiAgICBcIndwdEZvbGRlckluZm8gXCIgK1xuICAgIFwid3B0VGFza0luZm8gXCIgK1xuICAgIFwid3B0Q29udGVudHMgXCIgK1xuICAgIFwid3B0RmlsZU5hbWUgXCIgK1xuICAgIFwid3B0RGF0ZSBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRTdGVwUmVzdWx0XG4gIHZhciBUV2l6YXJkU3RlcFJlc3VsdCA9XG4gICAgXCJ3c3JDb21wbGV0ZSBcIiArXG4gICAgXCJ3c3JHb05leHQgXCIgK1xuICAgIFwid3NyR29QcmV2aW91cyBcIiArXG4gICAgXCJ3c3JDdXN0b20gXCIgK1xuICAgIFwid3NyQ2FuY2VsIFwiICtcbiAgICBcIndzckdvRmluYWwgXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkU3RlcFR5cGVcbiAgdmFyIFRXaXphcmRTdGVwVHlwZSA9XG4gICAgXCJ3c3RGb3JtIFwiICtcbiAgICBcIndzdEVEb2N1bWVudCBcIiArXG4gICAgXCJ3c3RUYXNrQ2FyZCBcIiArXG4gICAgXCJ3c3RSZWZlcmVuY2VSZWNvcmRDYXJkIFwiICtcbiAgICBcIndzdEZpbmFsIFwiO1xuXG4gIC8vIGVudW0gVFdvcmtBY2Nlc3NUeXBlXG4gIHZhciBUV29ya0FjY2Vzc1R5cGUgPSBcIndhQWxsIFwiICsgXCJ3YVBlcmZvcm1lcnMgXCIgKyBcIndhTWFudWFsIFwiO1xuXG4gIC8vIGVudW0gVFdvcmtmbG93QmxvY2tUeXBlXG4gIHZhciBUV29ya2Zsb3dCbG9ja1R5cGUgPVxuICAgIFwid3NiU3RhcnQgXCIgK1xuICAgIFwid3NiRmluaXNoIFwiICtcbiAgICBcIndzYk5vdGljZSBcIiArXG4gICAgXCJ3c2JTdGVwIFwiICtcbiAgICBcIndzYkRlY2lzaW9uIFwiICtcbiAgICBcIndzYldhaXQgXCIgK1xuICAgIFwid3NiTW9uaXRvciBcIiArXG4gICAgXCJ3c2JTY3JpcHQgXCIgK1xuICAgIFwid3NiQ29ubmVjdG9yIFwiICtcbiAgICBcIndzYlN1YlRhc2sgXCIgK1xuICAgIFwid3NiTGlmZUN5Y2xlU3RhZ2UgXCIgK1xuICAgIFwid3NiUGF1c2UgXCI7XG5cbiAgLy8gZW51bSBUV29ya2Zsb3dEYXRhVHlwZVxuICB2YXIgVFdvcmtmbG93RGF0YVR5cGUgPVxuICAgIFwid2R0SW50ZWdlciBcIiArXG4gICAgXCJ3ZHRGbG9hdCBcIiArXG4gICAgXCJ3ZHRTdHJpbmcgXCIgK1xuICAgIFwid2R0UGljayBcIiArXG4gICAgXCJ3ZHREYXRlVGltZSBcIiArXG4gICAgXCJ3ZHRCb29sZWFuIFwiICtcbiAgICBcIndkdFRhc2sgXCIgK1xuICAgIFwid2R0Sm9iIFwiICtcbiAgICBcIndkdEZvbGRlciBcIiArXG4gICAgXCJ3ZHRFRG9jdW1lbnQgXCIgK1xuICAgIFwid2R0UmVmZXJlbmNlUmVjb3JkIFwiICtcbiAgICBcIndkdFVzZXIgXCIgK1xuICAgIFwid2R0R3JvdXAgXCIgK1xuICAgIFwid2R0Um9sZSBcIiArXG4gICAgXCJ3ZHRJbnRlZ2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRGbG9hdENvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0U3RyaW5nQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRQaWNrQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHREYXRlVGltZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Qm9vbGVhbkNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0VGFza0NvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Sm9iQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRGb2xkZXJDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdEVEb2N1bWVudENvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0UmVmZXJlbmNlUmVjb3JkQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRVc2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRHcm91cENvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Um9sZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Q29udGVudHMgXCIgK1xuICAgIFwid2R0VXNlckxpc3QgXCIgK1xuICAgIFwid2R0U2VhcmNoRGVzY3JpcHRpb24gXCIgK1xuICAgIFwid2R0RGVhZExpbmUgXCIgK1xuICAgIFwid2R0UGlja1NldCBcIiArXG4gICAgXCJ3ZHRBY2NvdW50Q29sbGVjdGlvbiBcIjtcblxuICAvLyBlbnVtIFRXb3JrSW1wb3J0YW5jZVxuICB2YXIgVFdvcmtJbXBvcnRhbmNlID0gXCJ3aUxvdyBcIiArIFwid2lOb3JtYWwgXCIgKyBcIndpSGlnaCBcIjtcblxuICAvLyBlbnVtIFRXb3JrUm91dGVUeXBlXG4gIHZhciBUV29ya1JvdXRlVHlwZSA9IFwid3J0U29mdCBcIiArIFwid3J0SGFyZCBcIjtcblxuICAvLyBlbnVtIFRXb3JrU3RhdGVcbiAgdmFyIFRXb3JrU3RhdGUgPVxuICAgIFwid3NJbml0IFwiICtcbiAgICBcIndzUnVubmluZyBcIiArXG4gICAgXCJ3c0RvbmUgXCIgK1xuICAgIFwid3NDb250cm9sbGVkIFwiICtcbiAgICBcIndzQWJvcnRlZCBcIiArXG4gICAgXCJ3c0NvbnRpbnVlZCBcIjtcblxuICAvLyBlbnVtIFRXb3JrVGV4dEJ1aWxkaW5nTW9kZVxuICB2YXIgVFdvcmtUZXh0QnVpbGRpbmdNb2RlID1cbiAgICBcInd0bUZ1bGwgXCIgKyBcInd0bUZyb21DdXJyZW50IFwiICsgXCJ3dG1Pbmx5Q3VycmVudCBcIjtcblxuICAvLyDQn9C10YDQtdGH0LjRgdC70LXQvdC40Y9cbiAgdmFyIEVOVU1TID1cbiAgICBUQWNjb3VudFR5cGUgK1xuICAgIFRBY3Rpb25FbmFibGVkTW9kZSArXG4gICAgVEFkZFBvc2l0aW9uICtcbiAgICBUQWxpZ25tZW50ICtcbiAgICBUQXJlYVNob3dNb2RlICtcbiAgICBUQ2VydGlmaWNhdGVJbnZhbGlkYXRpb25SZWFzb24gK1xuICAgIFRDZXJ0aWZpY2F0ZVR5cGUgK1xuICAgIFRDaGVja0xpc3RCb3hJdGVtU3RhdGUgK1xuICAgIFRDbG9zZU9uRXNjICtcbiAgICBUQ29tcFR5cGUgK1xuICAgIFRDb25kaXRpb25Gb3JtYXQgK1xuICAgIFRDb25uZWN0aW9uSW50ZW50ICtcbiAgICBUQ29udGVudEtpbmQgK1xuICAgIFRDb250cm9sVHlwZSArXG4gICAgVENyaXRlcmlvbkNvbnRlbnRUeXBlICtcbiAgICBUQ3VsdHVyZVR5cGUgK1xuICAgIFREYXRhU2V0RXZlbnRUeXBlICtcbiAgICBURGF0YVNldFN0YXRlICtcbiAgICBURGF0ZUZvcm1hdFR5cGUgK1xuICAgIFREYXRlT2Zmc2V0VHlwZSArXG4gICAgVERhdGVUaW1lS2luZCArXG4gICAgVERlYUFjY2Vzc1JpZ2h0cyArXG4gICAgVERvY3VtZW50RGVmYXVsdEFjdGlvbiArXG4gICAgVEVkaXRNb2RlICtcbiAgICBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlICtcbiAgICBURWRtc0FwcGxpY2F0aW9uQWN0aW9uICtcbiAgICBURURvY3VtZW50TG9ja1R5cGUgK1xuICAgIFRFRG9jdW1lbnRTdGVwU2hvd01vZGUgK1xuICAgIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGUgK1xuICAgIFRFRG9jdW1lbnRTdG9yYWdlRnVuY3Rpb24gK1xuICAgIFRFRG9jdW1lbnRTdG9yYWdlVHlwZSArXG4gICAgVEVEb2N1bWVudFZlcnNpb25Tb3VyY2VUeXBlICtcbiAgICBURURvY3VtZW50VmVyc2lvblN0YXRlICtcbiAgICBURW5jb2RlVHlwZSArXG4gICAgVEV4Y2VwdGlvbkNhdGVnb3J5ICtcbiAgICBURXhwb3J0ZWRTaWduYXR1cmVzVHlwZSArXG4gICAgVEV4cG9ydGVkVmVyc2lvblR5cGUgK1xuICAgIFRGaWVsZERhdGFUeXBlICtcbiAgICBURm9sZGVyVHlwZSArXG4gICAgVEdyaWRSb3dIZWlnaHQgK1xuICAgIFRIeXBlcmxpbmtUeXBlICtcbiAgICBUSW1hZ2VGaWxlRm9ybWF0ICtcbiAgICBUSW1hZ2VNb2RlICtcbiAgICBUSW1hZ2VUeXBlICtcbiAgICBUSW5wbGFjZUhpbnRLaW5kICtcbiAgICBUSVNCTENvbnRleHQgK1xuICAgIFRJdGVtU2hvdyArXG4gICAgVEpvYktpbmQgK1xuICAgIFRKb2luVHlwZSArXG4gICAgVExhYmVsUG9zICtcbiAgICBUTGljZW5zaW5nVHlwZSArXG4gICAgVExpZmVDeWNsZVN0YWdlRm9udENvbG9yICtcbiAgICBUTGlmZUN5Y2xlU3RhZ2VGb250U3R5bGUgK1xuICAgIFRMb2NrYWJsZURldmVsb3BtZW50Q29tcG9uZW50VHlwZSArXG4gICAgVE1heFJlY29yZENvdW50UmVzdHJpY3Rpb25UeXBlICtcbiAgICBUUmFuZ2VWYWx1ZVR5cGUgK1xuICAgIFRSZWxhdGl2ZURhdGUgK1xuICAgIFRSZXBvcnREZXN0aW5hdGlvbiArXG4gICAgVFJlcURhdGFUeXBlICtcbiAgICBUUmVxdWlzaXRlRXZlbnRUeXBlICtcbiAgICBUU0JUaW1lVHlwZSArXG4gICAgVFNlYXJjaFNob3dNb2RlICtcbiAgICBUU2VsZWN0TW9kZSArXG4gICAgVFNpZ25hdHVyZVR5cGUgK1xuICAgIFRTaWduZXJDb250ZW50VHlwZSArXG4gICAgVFN0cmluZ3NTb3J0VHlwZSArXG4gICAgVFN0cmluZ1ZhbHVlVHlwZSArXG4gICAgVFN0cnVjdHVyZWRPYmplY3RBdHRyaWJ1dGVUeXBlICtcbiAgICBUVGFza0Fib3J0UmVhc29uICtcbiAgICBUVGV4dFZhbHVlVHlwZSArXG4gICAgVFVzZXJPYmplY3RTdGF0dXMgK1xuICAgIFRVc2VyVHlwZSArXG4gICAgVFZhbHVlc0J1aWxkVHlwZSArXG4gICAgVFZpZXdNb2RlICtcbiAgICBUVmlld1NlbGVjdGlvbk1vZGUgK1xuICAgIFRXaXphcmRBY3Rpb25UeXBlICtcbiAgICBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eSArXG4gICAgVFdpemFyZEZvcm1FbGVtZW50VHlwZSArXG4gICAgVFdpemFyZFBhcmFtVHlwZSArXG4gICAgVFdpemFyZFN0ZXBSZXN1bHQgK1xuICAgIFRXaXphcmRTdGVwVHlwZSArXG4gICAgVFdvcmtBY2Nlc3NUeXBlICtcbiAgICBUV29ya2Zsb3dCbG9ja1R5cGUgK1xuICAgIFRXb3JrZmxvd0RhdGFUeXBlICtcbiAgICBUV29ya0ltcG9ydGFuY2UgK1xuICAgIFRXb3JrUm91dGVUeXBlICtcbiAgICBUV29ya1N0YXRlICtcbiAgICBUV29ya1RleHRCdWlsZGluZ01vZGU7XG5cbiAgLy8g0KHQuNGB0YLQtdC80L3Ri9C1INGE0YPQvdC60YbQuNC4ID09PiBTWVNGVU5DVElPTlNcbiAgdmFyIHN5c3RlbV9mdW5jdGlvbnMgPVxuICAgIFwiQWRkU3ViU3RyaW5nIFwiICtcbiAgICBcIkFkanVzdExpbmVCcmVha3MgXCIgK1xuICAgIFwiQW1vdW50SW5Xb3JkcyBcIiArXG4gICAgXCJBbmFseXNpcyBcIiArXG4gICAgXCJBcnJheURpbUNvdW50IFwiICtcbiAgICBcIkFycmF5SGlnaEJvdW5kIFwiICtcbiAgICBcIkFycmF5TG93Qm91bmQgXCIgK1xuICAgIFwiQXJyYXlPZiBcIiArXG4gICAgXCJBcnJheVJlRGltIFwiICtcbiAgICBcIkFzc2VydCBcIiArXG4gICAgXCJBc3NpZ25lZCBcIiArXG4gICAgXCJCZWdpbk9mTW9udGggXCIgK1xuICAgIFwiQmVnaW5PZlBlcmlvZCBcIiArXG4gICAgXCJCdWlsZFByb2ZpbGluZ09wZXJhdGlvbkFuYWx5c2lzIFwiICtcbiAgICBcIkNhbGxQcm9jZWR1cmUgXCIgK1xuICAgIFwiQ2FuUmVhZEZpbGUgXCIgK1xuICAgIFwiQ0FycmF5RWxlbWVudCBcIiArXG4gICAgXCJDRGF0YVNldFJlcXVpc2l0ZSBcIiArXG4gICAgXCJDaGFuZ2VEYXRlIFwiICtcbiAgICBcIkNoYW5nZVJlZmVyZW5jZURhdGFzZXQgXCIgK1xuICAgIFwiQ2hhciBcIiArXG4gICAgXCJDaGFyUG9zIFwiICtcbiAgICBcIkNoZWNrUGFyYW0gXCIgK1xuICAgIFwiQ2hlY2tQYXJhbVZhbHVlIFwiICtcbiAgICBcIkNvbXBhcmVTdHJpbmdzIFwiICtcbiAgICBcIkNvbnN0YW50RXhpc3RzIFwiICtcbiAgICBcIkNvbnRyb2xTdGF0ZSBcIiArXG4gICAgXCJDb252ZXJ0RGF0ZVN0ciBcIiArXG4gICAgXCJDb3B5IFwiICtcbiAgICBcIkNvcHlGaWxlIFwiICtcbiAgICBcIkNyZWF0ZUFycmF5IFwiICtcbiAgICBcIkNyZWF0ZUNhY2hlZFJlZmVyZW5jZSBcIiArXG4gICAgXCJDcmVhdGVDb25uZWN0aW9uIFwiICtcbiAgICBcIkNyZWF0ZURpYWxvZyBcIiArXG4gICAgXCJDcmVhdGVEdWFsTGlzdERpYWxvZyBcIiArXG4gICAgXCJDcmVhdGVFZGl0b3IgXCIgK1xuICAgIFwiQ3JlYXRlRXhjZXB0aW9uIFwiICtcbiAgICBcIkNyZWF0ZUZpbGUgXCIgK1xuICAgIFwiQ3JlYXRlRm9sZGVyRGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZUlucHV0RGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZUxpbmtGaWxlIFwiICtcbiAgICBcIkNyZWF0ZUxpc3QgXCIgK1xuICAgIFwiQ3JlYXRlTG9jayBcIiArXG4gICAgXCJDcmVhdGVNZW1vcnlEYXRhU2V0IFwiICtcbiAgICBcIkNyZWF0ZU9iamVjdCBcIiArXG4gICAgXCJDcmVhdGVPcGVuRGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZVByb2dyZXNzIFwiICtcbiAgICBcIkNyZWF0ZVF1ZXJ5IFwiICtcbiAgICBcIkNyZWF0ZVJlZmVyZW5jZSBcIiArXG4gICAgXCJDcmVhdGVSZXBvcnQgXCIgK1xuICAgIFwiQ3JlYXRlU2F2ZURpYWxvZyBcIiArXG4gICAgXCJDcmVhdGVTY3JpcHQgXCIgK1xuICAgIFwiQ3JlYXRlU1FMUGl2b3RGdW5jdGlvbiBcIiArXG4gICAgXCJDcmVhdGVTdHJpbmdMaXN0IFwiICtcbiAgICBcIkNyZWF0ZVRyZWVMaXN0U2VsZWN0RGlhbG9nIFwiICtcbiAgICBcIkNTZWxlY3RTUUwgXCIgK1xuICAgIFwiQ1NRTCBcIiArXG4gICAgXCJDU3ViU3RyaW5nIFwiICtcbiAgICBcIkN1cnJlbnRVc2VySUQgXCIgK1xuICAgIFwiQ3VycmVudFVzZXJOYW1lIFwiICtcbiAgICBcIkN1cnJlbnRWZXJzaW9uIFwiICtcbiAgICBcIkRhdGFTZXRMb2NhdGVFeCBcIiArXG4gICAgXCJEYXRlRGlmZiBcIiArXG4gICAgXCJEYXRlVGltZURpZmYgXCIgK1xuICAgIFwiRGF0ZVRvU3RyIFwiICtcbiAgICBcIkRheU9mV2VlayBcIiArXG4gICAgXCJEZWxldGVGaWxlIFwiICtcbiAgICBcIkRpcmVjdG9yeUV4aXN0cyBcIiArXG4gICAgXCJEaXNhYmxlQ2hlY2tBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiRGlzYWJsZUNoZWNrRnVsbFNob3dpbmdSZXN0cmljdGlvbiBcIiArXG4gICAgXCJEaXNhYmxlTWFzc1Rhc2tTZW5kaW5nUmVzdHJpY3Rpb25zIFwiICtcbiAgICBcIkRyb3BUYWJsZSBcIiArXG4gICAgXCJEdXBlU3RyaW5nIFwiICtcbiAgICBcIkVkaXRUZXh0IFwiICtcbiAgICBcIkVuYWJsZUNoZWNrQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIkVuYWJsZUNoZWNrRnVsbFNob3dpbmdSZXN0cmljdGlvbiBcIiArXG4gICAgXCJFbmFibGVNYXNzVGFza1NlbmRpbmdSZXN0cmljdGlvbnMgXCIgK1xuICAgIFwiRW5kT2ZNb250aCBcIiArXG4gICAgXCJFbmRPZlBlcmlvZCBcIiArXG4gICAgXCJFeGNlcHRpb25FeGlzdHMgXCIgK1xuICAgIFwiRXhjZXB0aW9uc09mZiBcIiArXG4gICAgXCJFeGNlcHRpb25zT24gXCIgK1xuICAgIFwiRXhlY3V0ZSBcIiArXG4gICAgXCJFeGVjdXRlUHJvY2VzcyBcIiArXG4gICAgXCJFeGl0IFwiICtcbiAgICBcIkV4cGFuZEVudmlyb25tZW50VmFyaWFibGVzIFwiICtcbiAgICBcIkV4dHJhY3RGaWxlRHJpdmUgXCIgK1xuICAgIFwiRXh0cmFjdEZpbGVFeHQgXCIgK1xuICAgIFwiRXh0cmFjdEZpbGVOYW1lIFwiICtcbiAgICBcIkV4dHJhY3RGaWxlUGF0aCBcIiArXG4gICAgXCJFeHRyYWN0UGFyYW1zIFwiICtcbiAgICBcIkZpbGVFeGlzdHMgXCIgK1xuICAgIFwiRmlsZVNpemUgXCIgK1xuICAgIFwiRmluZEZpbGUgXCIgK1xuICAgIFwiRmluZFN1YlN0cmluZyBcIiArXG4gICAgXCJGaXJtQ29udGV4dCBcIiArXG4gICAgXCJGb3JjZURpcmVjdG9yaWVzIFwiICtcbiAgICBcIkZvcm1hdCBcIiArXG4gICAgXCJGb3JtYXREYXRlIFwiICtcbiAgICBcIkZvcm1hdE51bWVyaWMgXCIgK1xuICAgIFwiRm9ybWF0U1FMRGF0ZSBcIiArXG4gICAgXCJGb3JtYXRTdHJpbmcgXCIgK1xuICAgIFwiRnJlZUV4Y2VwdGlvbiBcIiArXG4gICAgXCJHZXRDb21wb25lbnQgXCIgK1xuICAgIFwiR2V0Q29tcG9uZW50TGF1bmNoUGFyYW0gXCIgK1xuICAgIFwiR2V0Q29uc3RhbnQgXCIgK1xuICAgIFwiR2V0TGFzdEV4Y2VwdGlvbiBcIiArXG4gICAgXCJHZXRSZWZlcmVuY2VSZWNvcmQgXCIgK1xuICAgIFwiR2V0UmVmVHlwZUJ5UmVmSUQgXCIgK1xuICAgIFwiR2V0VGFibGVJRCBcIiArXG4gICAgXCJHZXRUZW1wRm9sZGVyIFwiICtcbiAgICBcIklmVGhlbiBcIiArXG4gICAgXCJJbiBcIiArXG4gICAgXCJJbmRleE9mIFwiICtcbiAgICBcIklucHV0RGlhbG9nIFwiICtcbiAgICBcIklucHV0RGlhbG9nRXggXCIgK1xuICAgIFwiSW50ZXJhY3RpdmVNb2RlIFwiICtcbiAgICBcIklzRmlsZUxvY2tlZCBcIiArXG4gICAgXCJJc0dyYXBoaWNGaWxlIFwiICtcbiAgICBcIklzTnVtZXJpYyBcIiArXG4gICAgXCJMZW5ndGggXCIgK1xuICAgIFwiTG9hZFN0cmluZyBcIiArXG4gICAgXCJMb2FkU3RyaW5nRm10IFwiICtcbiAgICBcIkxvY2FsVGltZVRvVVRDIFwiICtcbiAgICBcIkxvd2VyQ2FzZSBcIiArXG4gICAgXCJNYXggXCIgK1xuICAgIFwiTWVzc2FnZUJveCBcIiArXG4gICAgXCJNZXNzYWdlQm94RXggXCIgK1xuICAgIFwiTWltZURlY29kZUJpbmFyeSBcIiArXG4gICAgXCJNaW1lRGVjb2RlU3RyaW5nIFwiICtcbiAgICBcIk1pbWVFbmNvZGVCaW5hcnkgXCIgK1xuICAgIFwiTWltZUVuY29kZVN0cmluZyBcIiArXG4gICAgXCJNaW4gXCIgK1xuICAgIFwiTW9uZXlJbldvcmRzIFwiICtcbiAgICBcIk1vdmVGaWxlIFwiICtcbiAgICBcIk5ld0lEIFwiICtcbiAgICBcIk5vdyBcIiArXG4gICAgXCJPcGVuRmlsZSBcIiArXG4gICAgXCJPcmQgXCIgK1xuICAgIFwiUHJlY2lzaW9uIFwiICtcbiAgICBcIlJhaXNlIFwiICtcbiAgICBcIlJlYWRDZXJ0aWZpY2F0ZUZyb21GaWxlIFwiICtcbiAgICBcIlJlYWRGaWxlIFwiICtcbiAgICBcIlJlZmVyZW5jZUNvZGVCeUlEIFwiICtcbiAgICBcIlJlZmVyZW5jZU51bWJlciBcIiArXG4gICAgXCJSZWZlcmVuY2VSZXF1aXNpdGVNb2RlIFwiICtcbiAgICBcIlJlZmVyZW5jZVJlcXVpc2l0ZVZhbHVlIFwiICtcbiAgICBcIlJlZ2lvbkRhdGVTZXR0aW5ncyBcIiArXG4gICAgXCJSZWdpb25OdW1iZXJTZXR0aW5ncyBcIiArXG4gICAgXCJSZWdpb25UaW1lU2V0dGluZ3MgXCIgK1xuICAgIFwiUmVnUmVhZCBcIiArXG4gICAgXCJSZWdXcml0ZSBcIiArXG4gICAgXCJSZW5hbWVGaWxlIFwiICtcbiAgICBcIlJlcGxhY2UgXCIgK1xuICAgIFwiUm91bmQgXCIgK1xuICAgIFwiU2VsZWN0U2VydmVyQ29kZSBcIiArXG4gICAgXCJTZWxlY3RTUUwgXCIgK1xuICAgIFwiU2VydmVyRGF0ZVRpbWUgXCIgK1xuICAgIFwiU2V0Q29uc3RhbnQgXCIgK1xuICAgIFwiU2V0TWFuYWdlZEZvbGRlckZpZWxkc1N0YXRlIFwiICtcbiAgICBcIlNob3dDb25zdGFudHNJbnB1dERpYWxvZyBcIiArXG4gICAgXCJTaG93TWVzc2FnZSBcIiArXG4gICAgXCJTbGVlcCBcIiArXG4gICAgXCJTcGxpdCBcIiArXG4gICAgXCJTUUwgXCIgK1xuICAgIFwiU1FMMlhMU1RBQiBcIiArXG4gICAgXCJTUUxQcm9maWxpbmdTZW5kUmVwb3J0IFwiICtcbiAgICBcIlN0clRvRGF0ZSBcIiArXG4gICAgXCJTdWJTdHJpbmcgXCIgK1xuICAgIFwiU3ViU3RyaW5nQ291bnQgXCIgK1xuICAgIFwiU3lzdGVtU2V0dGluZyBcIiArXG4gICAgXCJUaW1lIFwiICtcbiAgICBcIlRpbWVEaWZmIFwiICtcbiAgICBcIlRvZGF5IFwiICtcbiAgICBcIlRyYW5zbGl0ZXJhdGUgXCIgK1xuICAgIFwiVHJpbSBcIiArXG4gICAgXCJVcHBlckNhc2UgXCIgK1xuICAgIFwiVXNlclN0YXR1cyBcIiArXG4gICAgXCJVVENUb0xvY2FsVGltZSBcIiArXG4gICAgXCJWYWxpZGF0ZVhNTCBcIiArXG4gICAgXCJWYXJJc0NsZWFyIFwiICtcbiAgICBcIlZhcklzRW1wdHkgXCIgK1xuICAgIFwiVmFySXNOdWxsIFwiICtcbiAgICBcIldvcmtUaW1lRGlmZiBcIiArXG4gICAgXCJXcml0ZUZpbGUgXCIgK1xuICAgIFwiV3JpdGVGaWxlRXggXCIgK1xuICAgIFwiV3JpdGVPYmplY3RIaXN0b3J5IFwiICtcbiAgICBcItCQ0L3QsNC70LjQtyBcIiArXG4gICAgXCLQkdCw0LfQsNCU0LDQvdC90YvRhSBcIiArXG4gICAgXCLQkdC70L7QutCV0YHRgtGMIFwiICtcbiAgICBcItCR0LvQvtC60JXRgdGC0YzQoNCw0YHRiCBcIiArXG4gICAgXCLQkdC70L7QutCY0L3RhNC+IFwiICtcbiAgICBcItCR0LvQvtC60KHQvdGP0YLRjCBcIiArXG4gICAgXCLQkdC70L7QutCh0L3Rj9GC0YzQoNCw0YHRiCBcIiArXG4gICAgXCLQkdC70L7QutCj0YHRgtCw0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCS0LLQvtC0IFwiICtcbiAgICBcItCS0LLQvtC00JzQtdC90Y4gXCIgK1xuICAgIFwi0JLQtdC00KEgXCIgK1xuICAgIFwi0JLQtdC00KHQv9GAIFwiICtcbiAgICBcItCS0LXRgNGF0L3Rj9GP0JPRgNCw0L3QuNGG0LDQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQktC90LXRiNCf0YDQvtCz0YAgXCIgK1xuICAgIFwi0JLQvtGB0YHRgiBcIiArXG4gICAgXCLQktGA0LXQvNC10L3QvdCw0Y/Qn9Cw0L/QutCwIFwiICtcbiAgICBcItCS0YDQtdC80Y8gXCIgK1xuICAgIFwi0JLRi9Cx0L7RgFNRTCBcIiArXG4gICAgXCLQktGL0LHRgNCw0YLRjNCX0LDQv9C40YHRjCBcIiArXG4gICAgXCLQktGL0LTQtdC70LjRgtGM0KHRgtGAIFwiICtcbiAgICBcItCS0YvQt9Cy0LDRgtGMIFwiICtcbiAgICBcItCS0YvQv9C+0LvQvdC40YLRjCBcIiArXG4gICAgXCLQktGL0L/Qn9GA0L7Qs9GAIFwiICtcbiAgICBcItCT0YDQsNGE0LjRh9C10YHQutC40LnQpNCw0LnQuyBcIiArXG4gICAgXCLQk9GA0YPQv9C/0LDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviBcIiArXG4gICAgXCLQlNCw0YLQsNCS0YDQtdC80Y/QodC10YDQsiBcIiArXG4gICAgXCLQlNC10L3RjNCd0LXQtNC10LvQuCBcIiArXG4gICAgXCLQlNC40LDQu9C+0LPQlNCw0J3QtdGCIFwiICtcbiAgICBcItCU0LvQuNC90LDQodGC0YAgXCIgK1xuICAgIFwi0JTQvtCx0J/QvtC00YHRgtGAIFwiICtcbiAgICBcItCV0J/Rg9GB0YLQviBcIiArXG4gICAgXCLQldGB0LvQuNCi0L4gXCIgK1xuICAgIFwi0JXQp9C40YHQu9C+IFwiICtcbiAgICBcItCX0LDQvNCf0L7QtNGB0YLRgCBcIiArXG4gICAgXCLQl9Cw0L/QuNGB0YzQodC/0YDQsNCy0L7Rh9C90LjQutCwIFwiICtcbiAgICBcItCX0L3QsNGH0J/QvtC70Y/QodC/0YAgXCIgK1xuICAgIFwi0JjQlNCi0LjQv9Ch0L/RgCBcIiArXG4gICAgXCLQmNC30LLQu9C10YfRjNCU0LjRgdC6IFwiICtcbiAgICBcItCY0LfQstC70LXRh9GM0JjQvNGP0KTQsNC50LvQsCBcIiArXG4gICAgXCLQmNC30LLQu9C10YfRjNCf0YPRgtGMIFwiICtcbiAgICBcItCY0LfQstC70LXRh9GM0KDQsNGB0YjQuNGA0LXQvdC40LUgXCIgK1xuICAgIFwi0JjQt9C80JTQsNGCIFwiICtcbiAgICBcItCY0LfQvNC10L3QuNGC0YzQoNCw0LfQvNC10YDQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQmNC30LzQtdGA0LXQvdC40LnQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQmNC80Y/QntGA0LMgXCIgK1xuICAgIFwi0JjQvNGP0J/QvtC70Y/QodC/0YAgXCIgK1xuICAgIFwi0JjQvdC00LXQutGBIFwiICtcbiAgICBcItCY0L3QtNC40LrQsNGC0L7RgNCX0LDQutGA0YvRgtGMIFwiICtcbiAgICBcItCY0L3QtNC40LrQsNGC0L7RgNCe0YLQutGA0YvRgtGMIFwiICtcbiAgICBcItCY0L3QtNC40LrQsNGC0L7RgNCo0LDQsyBcIiArXG4gICAgXCLQmNC90YLQtdGA0LDQutGC0LjQstC90YvQudCg0LXQttC40LwgXCIgK1xuICAgIFwi0JjRgtC+0LPQotCx0LvQodC/0YAgXCIgK1xuICAgIFwi0JrQvtC00JLQuNC00JLQtdC00KHQv9GAIFwiICtcbiAgICBcItCa0L7QtNCS0LjQtNCh0L/RgNCf0L7QmNCUIFwiICtcbiAgICBcItCa0L7QtNCf0L5BbmFsaXQgXCIgK1xuICAgIFwi0JrQvtC00KHQuNC80LLQvtC70LAgXCIgK1xuICAgIFwi0JrQvtC00KHQv9GAIFwiICtcbiAgICBcItCa0L7Qu9Cf0L7QtNGB0YLRgCBcIiArXG4gICAgXCLQmtC+0LvQn9GA0L7QvyBcIiArXG4gICAgXCLQmtC+0L3QnNC10YEgXCIgK1xuICAgIFwi0JrQvtC90YHRgiBcIiArXG4gICAgXCLQmtC+0L3RgdGC0JXRgdGC0YwgXCIgK1xuICAgIFwi0JrQvtC90YHRgtCX0L3QsNGHIFwiICtcbiAgICBcItCa0L7QvdCi0YDQsNC9IFwiICtcbiAgICBcItCa0L7Qv9C40YDQvtCy0LDRgtGM0KTQsNC50LsgXCIgK1xuICAgIFwi0JrQvtC/0LjRj9Ch0YLRgCBcIiArXG4gICAgXCLQmtCf0LXRgNC40L7QtCBcIiArXG4gICAgXCLQmtCh0YLRgNCi0LHQu9Ch0L/RgCBcIiArXG4gICAgXCLQnNCw0LrRgSBcIiArXG4gICAgXCLQnNCw0LrRgdCh0YLRgNCi0LHQu9Ch0L/RgCBcIiArXG4gICAgXCLQnNCw0YHRgdC40LIgXCIgK1xuICAgIFwi0JzQtdC90Y4gXCIgK1xuICAgIFwi0JzQtdC90Y7QoNCw0YHRiCBcIiArXG4gICAgXCLQnNC40L0gXCIgK1xuICAgIFwi0J3QsNCx0L7RgNCU0LDQvdC90YvRhdCd0LDQudGC0LjQoNCw0YHRiCBcIiArXG4gICAgXCLQndCw0LjQvNCS0LjQtNCh0L/RgCBcIiArXG4gICAgXCLQndCw0LjQvNCf0L5BbmFsaXQgXCIgK1xuICAgIFwi0J3QsNC40LzQodC/0YAgXCIgK1xuICAgIFwi0J3QsNGB0YLRgNC+0LjRgtGM0J/QtdGA0LXQstC+0LTRi9Ch0YLRgNC+0LogXCIgK1xuICAgIFwi0J3QsNGH0JzQtdGBIFwiICtcbiAgICBcItCd0LDRh9Ci0YDQsNC9IFwiICtcbiAgICBcItCd0LjQttC90Y/Rj9CT0YDQsNC90LjRhtCw0JzQsNGB0YHQuNCy0LAgXCIgK1xuICAgIFwi0J3QvtC80LXRgNCh0L/RgCBcIiArXG4gICAgXCLQndCf0LXRgNC40L7QtCBcIiArXG4gICAgXCLQntC60L3QviBcIiArXG4gICAgXCLQntC60YAgXCIgK1xuICAgIFwi0J7QutGA0YPQttC10L3QuNC1IFwiICtcbiAgICBcItCe0YLQu9CY0L3RhNCU0L7QsdCw0LLQuNGC0YwgXCIgK1xuICAgIFwi0J7RgtC70JjQvdGE0KPQtNCw0LvQuNGC0YwgXCIgK1xuICAgIFwi0J7RgtGH0LXRgiBcIiArXG4gICAgXCLQntGC0YfQtdGC0JDQvdCw0LsgXCIgK1xuICAgIFwi0J7RgtGH0LXRgtCY0L3RgiBcIiArXG4gICAgXCLQn9Cw0L/QutCw0KHRg9GJ0LXRgdGC0LLRg9C10YIgXCIgK1xuICAgIFwi0J/QsNGD0LfQsCBcIiArXG4gICAgXCLQn9CS0YvQsdC+0YBTUUwgXCIgK1xuICAgIFwi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YzQpNCw0LnQuyBcIiArXG4gICAgXCLQn9C10YDQtdC80LXQvdC90YvQtSBcIiArXG4gICAgXCLQn9C10YDQtdC80LXRgdGC0LjRgtGM0KTQsNC50LsgXCIgK1xuICAgIFwi0J/QvtC00YHRgtGAIFwiICtcbiAgICBcItCf0L7QuNGB0LrQn9C+0LTRgdGC0YAgXCIgK1xuICAgIFwi0J/QvtC40YHQutCh0YLRgCBcIiArXG4gICAgXCLQn9C+0LvRg9GH0LjRgtGM0JjQlNCi0LDQsdC70LjRhtGLIFwiICtcbiAgICBcItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+IFwiICtcbiAgICBcItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNCY0JQgXCIgK1xuICAgIFwi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0JjQvNGPIFwiICtcbiAgICBcItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNCh0YLQsNGC0YPRgSBcIiArXG4gICAgXCLQn9GA0LXRgNCy0LDRgtGMIFwiICtcbiAgICBcItCf0YDQvtCy0LXRgNC40YLRjNCf0LDRgNCw0LzQtdGC0YAgXCIgK1xuICAgIFwi0J/RgNC+0LLQtdGA0LjRgtGM0J/QsNGA0LDQvNC10YLRgNCX0L3QsNGHIFwiICtcbiAgICBcItCf0YDQvtCy0LXRgNC40YLRjNCj0YHQu9C+0LLQuNC1IFwiICtcbiAgICBcItCg0LDQt9Cx0KHRgtGAIFwiICtcbiAgICBcItCg0LDQt9C90JLRgNC10LzRjyBcIiArXG4gICAgXCLQoNCw0LfQvdCU0LDRgiBcIiArXG4gICAgXCLQoNCw0LfQvdCU0LDRgtCw0JLRgNC10LzRjyBcIiArXG4gICAgXCLQoNCw0LfQvdCg0LDQsdCS0YDQtdC80Y8gXCIgK1xuICAgIFwi0KDQtdCz0KPRgdGC0JLRgNC10LwgXCIgK1xuICAgIFwi0KDQtdCz0KPRgdGC0JTQsNGCIFwiICtcbiAgICBcItCg0LXQs9Cj0YHRgtCn0YHQuyBcIiArXG4gICAgXCLQoNC10LTQotC10LrRgdGCIFwiICtcbiAgICBcItCg0LXQtdGB0YLRgNCX0LDQv9C40YHRjCBcIiArXG4gICAgXCLQoNC10LXRgdGC0YDQodC/0LjRgdC+0LrQmNC80LXQvdCf0LDRgNCw0LwgXCIgK1xuICAgIFwi0KDQtdC10YHRgtGA0KfRgtC10L3QuNC1IFwiICtcbiAgICBcItCg0LXQutCy0KHQv9GAIFwiICtcbiAgICBcItCg0LXQutCy0KHQv9GA0J/RgCBcIiArXG4gICAgXCLQodC10LPQvtC00L3RjyBcIiArXG4gICAgXCLQodC10LnRh9Cw0YEgXCIgK1xuICAgIFwi0KHQtdGA0LLQtdGAIFwiICtcbiAgICBcItCh0LXRgNCy0LXRgNCf0YDQvtGG0LXRgdGB0JjQlCBcIiArXG4gICAgXCLQodC10YDRgtC40YTQuNC60LDRgtCk0LDQudC70KHRh9C40YLQsNGC0YwgXCIgK1xuICAgIFwi0KHQttCf0YDQvtCxIFwiICtcbiAgICBcItCh0LjQvNCy0L7QuyBcIiArXG4gICAgXCLQodC40YHRgtC10LzQsNCU0LjRgNC10LrRgtGD0LzQmtC+0LQgXCIgK1xuICAgIFwi0KHQuNGB0YLQtdC80LDQmNC90YTQvtGA0LzQsNGG0LjRjyBcIiArXG4gICAgXCLQodC40YHRgtC10LzQsNCa0L7QtCBcIiArXG4gICAgXCLQodC+0LTQtdGA0LbQuNGCIFwiICtcbiAgICBcItCh0L7QtdC00LjQvdC10L3QuNC10JfQsNC60YDRi9GC0YwgXCIgK1xuICAgIFwi0KHQvtC10LTQuNC90LXQvdC40LXQntGC0LrRgNGL0YLRjCBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCU0LjQsNC70L7QsyBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCU0LjQsNC70L7Qs9CS0YvQsdC+0YDQsNCY0LfQlNCy0YPRhdCh0L/QuNGB0LrQvtCyIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0JLRi9Cx0L7RgNCw0J/QsNC/0LrQuCBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCU0LjQsNC70L7Qs9Ce0YLQutGA0YvRgtC40Y/QpNCw0LnQu9CwIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0KHQvtGF0YDQsNC90LXQvdC40Y/QpNCw0LnQu9CwIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JfQsNC/0YDQvtGBIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JjQvdC00LjQutCw0YLQvtGAIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JjRgdC60LvRjtGH0LXQvdC40LUgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQmtGN0YjQuNGA0L7QstCw0L3QvdGL0LnQodC/0YDQsNCy0L7Rh9C90LjQuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCc0LDRgdGB0LjQsiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCd0LDQsdC+0YDQlNCw0L3QvdGL0YUgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQntCx0YrQtdC60YIgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQntGC0YfQtdGCIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0J/QsNC/0LrRgyBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCg0LXQtNCw0LrRgtC+0YAgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQodC+0LXQtNC40L3QtdC90LjQtSBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QutCh0YLRgNC+0LogXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQodC/0YDQsNCy0L7Rh9C90LjQuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0YbQtdC90LDRgNC40LkgXCIgK1xuICAgIFwi0KHQvtC30LTQodC/0YAgXCIgK1xuICAgIFwi0KHQvtGB0YLQodC/0YAgXCIgK1xuICAgIFwi0KHQvtGF0YAgXCIgK1xuICAgIFwi0KHQvtGF0YDQodC/0YAgXCIgK1xuICAgIFwi0KHQv9C40YHQvtC60KHQuNGB0YLQtdC8IFwiICtcbiAgICBcItCh0L/RgCBcIiArXG4gICAgXCLQodC/0YDQsNCy0L7Rh9C90LjQuiBcIiArXG4gICAgXCLQodC/0YDQkdC70L7QutCV0YHRgtGMIFwiICtcbiAgICBcItCh0L/RgNCR0LvQvtC60KHQvdGP0YLRjCBcIiArXG4gICAgXCLQodC/0YDQkdC70L7QutCh0L3Rj9GC0YzQoNCw0YHRiCBcIiArXG4gICAgXCLQodC/0YDQkdC70L7QutCj0YHRgtCw0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCh0L/RgNCY0LfQvNCd0LDQsdCU0LDQvSBcIiArXG4gICAgXCLQodC/0YDQmtC+0LQgXCIgK1xuICAgIFwi0KHQv9GA0J3QvtC80LXRgCBcIiArXG4gICAgXCLQodC/0YDQntCx0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCh0L/RgNCe0YLQutGA0YvRgtGMIFwiICtcbiAgICBcItCh0L/RgNCe0YLQvNC10L3QuNGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0J/QsNGA0LDQvCBcIiArXG4gICAgXCLQodC/0YDQn9C+0LvQtdCX0L3QsNGHIFwiICtcbiAgICBcItCh0L/RgNCf0L7Qu9C10JjQvNGPIFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCyIFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0JLQstC10LTQl9C9IFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0J3QvtCy0YvQtSBcIiArXG4gICAgXCLQodC/0YDQoNC10LrQstCf0YAgXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQn9GA0LXQtNCX0L0gXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQoNC10LbQuNC8IFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0KLQuNC/0KLQtdC60YHRgiBcIiArXG4gICAgXCLQodC/0YDQodC+0LfQtNCw0YLRjCBcIiArXG4gICAgXCLQodC/0YDQodC+0YHRgiBcIiArXG4gICAgXCLQodC/0YDQodC+0YXRgNCw0L3QuNGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70JjRgtC+0LMgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGAIFwiICtcbiAgICBcItCh0L/RgNCi0LHQu9Ch0YLRgNCa0L7QuyBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQnNCw0LrRgSBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQnNC40L0gXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0J/RgNC10LQgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0KHQu9C10LQgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0KHQvtC30LQgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0KPQtCBcIiArXG4gICAgXCLQodC/0YDQotC10LrQn9GA0LXQtNGB0YIgXCIgK1xuICAgIFwi0KHQv9GA0KPQtNCw0LvQuNGC0YwgXCIgK1xuICAgIFwi0KHRgNCw0LLQvdC40YLRjNCh0YLRgCBcIiArXG4gICAgXCLQodGC0YDQktC10YDRhdCg0LXQs9C40YHRgtGAIFwiICtcbiAgICBcItCh0YLRgNCd0LjQttC90KDQtdCz0LjRgdGC0YAgXCIgK1xuICAgIFwi0KHRgtGA0KLQsdC70KHQv9GAIFwiICtcbiAgICBcItCh0YPQvNCf0YDQvtC/IFwiICtcbiAgICBcItCh0YbQtdC90LDRgNC40LkgXCIgK1xuICAgIFwi0KHRhtC10L3QsNGA0LjQudCf0LDRgNCw0LwgXCIgK1xuICAgIFwi0KLQtdC60JLQtdGA0YHQuNGPIFwiICtcbiAgICBcItCi0LXQutCe0YDQsyBcIiArXG4gICAgXCLQotC+0YfQvSBcIiArXG4gICAgXCLQotGA0LDQvSBcIiArXG4gICAgXCLQotGA0LDQvdGB0LvQuNGC0LXRgNCw0YbQuNGPIFwiICtcbiAgICBcItCj0LTQsNC70LjRgtGM0KLQsNCx0LvQuNGG0YMgXCIgK1xuICAgIFwi0KPQtNCw0LvQuNGC0YzQpNCw0LnQuyBcIiArXG4gICAgXCLQo9C00KHQv9GAIFwiICtcbiAgICBcItCj0LTQodGC0YDQotCx0LvQodC/0YAgXCIgK1xuICAgIFwi0KPRgdGCIFwiICtcbiAgICBcItCj0YHRgtCw0L3QvtCy0LrQuNCa0L7QvdGB0YLQsNC90YIgXCIgK1xuICAgIFwi0KTQsNC50LvQkNGC0YDQuNCx0YPRgtCh0YfQuNGC0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JDRgtGA0LjQsdGD0YLQo9GB0YLQsNC90L7QstC40YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9CS0YDQtdC80Y8gXCIgK1xuICAgIFwi0KTQsNC50LvQktGA0LXQvNGP0KPRgdGC0LDQvdC+0LLQuNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQktGL0LHRgNCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9CX0LDQvdGP0YIgXCIgK1xuICAgIFwi0KTQsNC50LvQl9Cw0L/QuNGB0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JjRgdC60LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JrQvtC/0LjRgNC+0LLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQnNC+0LbQvdC+0KfQuNGC0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70J7RgtC60YDRi9GC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cf0LXRgNC10LrQvtC00LjRgNC+0LLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQn9C10YDQtdC80LXRgdGC0LjRgtGMIFwiICtcbiAgICBcItCk0LDQudC70J/RgNC+0YHQvNC+0YLRgNC10YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cg0LDQt9C80LXRgCBcIiArXG4gICAgXCLQpNCw0LnQu9Ch0L7Qt9C00LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70KHRgdGL0LvQutCw0KHQvtC30LTQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQodGD0YnQtdGB0YLQstGD0LXRgiBcIiArXG4gICAgXCLQpNCw0LnQu9Ch0YfQuNGC0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70KPQtNCw0LvQuNGC0YwgXCIgK1xuICAgIFwi0KTQvNGCU1FM0JTQsNGCIFwiICtcbiAgICBcItCk0LzRgtCU0LDRgiBcIiArXG4gICAgXCLQpNC80YLQodGC0YAgXCIgK1xuICAgIFwi0KTQvNGC0KfRgdC7IFwiICtcbiAgICBcItCk0L7RgNC80LDRgiBcIiArXG4gICAgXCLQptCc0LDRgdGB0LjQstCt0LvQtdC80LXQvdGCIFwiICtcbiAgICBcItCm0J3QsNCx0L7RgNCU0LDQvdC90YvRhdCg0LXQutCy0LjQt9C40YIgXCIgK1xuICAgIFwi0KbQn9C+0LTRgdGC0YAgXCI7XG5cbiAgLy8g0J/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0LUg0L/QtdGA0LXQvNC10L3QvdGL0LUgPT0+IGJ1aWx0X2luXG4gIHZhciBwcmVkZWZpbmVkX3ZhcmlhYmxlcyA9XG4gICAgXCJBbHRTdGF0ZSBcIiArXG4gICAgXCJBcHBsaWNhdGlvbiBcIiArXG4gICAgXCJDYWxsVHlwZSBcIiArXG4gICAgXCJDb21wb25lbnRUb2tlbnMgXCIgK1xuICAgIFwiQ3JlYXRlZEpvYnMgXCIgK1xuICAgIFwiQ3JlYXRlZE5vdGljZXMgXCIgK1xuICAgIFwiQ29udHJvbFN0YXRlIFwiICtcbiAgICBcIkRpYWxvZ1Jlc3VsdCBcIiArXG4gICAgXCJEaWFsb2dzIFwiICtcbiAgICBcIkVEb2N1bWVudHMgXCIgK1xuICAgIFwiRURvY3VtZW50VmVyc2lvblNvdXJjZSBcIiArXG4gICAgXCJGb2xkZXJzIFwiICtcbiAgICBcIkdsb2JhbElEcyBcIiArXG4gICAgXCJKb2IgXCIgK1xuICAgIFwiSm9icyBcIiArXG4gICAgXCJJbnB1dFZhbHVlIFwiICtcbiAgICBcIkxvb2tVcFJlZmVyZW5jZSBcIiArXG4gICAgXCJMb29rVXBSZXF1aXNpdGVOYW1lcyBcIiArXG4gICAgXCJMb29rVXBTZWFyY2ggXCIgK1xuICAgIFwiT2JqZWN0IFwiICtcbiAgICBcIlBhcmVudENvbXBvbmVudCBcIiArXG4gICAgXCJQcm9jZXNzZXMgXCIgK1xuICAgIFwiUmVmZXJlbmNlcyBcIiArXG4gICAgXCJSZXF1aXNpdGUgXCIgK1xuICAgIFwiUmVwb3J0TmFtZSBcIiArXG4gICAgXCJSZXBvcnRzIFwiICtcbiAgICBcIlJlc3VsdCBcIiArXG4gICAgXCJTY3JpcHRzIFwiICtcbiAgICBcIlNlYXJjaGVzIFwiICtcbiAgICBcIlNlbGVjdGVkQXR0YWNobWVudHMgXCIgK1xuICAgIFwiU2VsZWN0ZWRJdGVtcyBcIiArXG4gICAgXCJTZWxlY3RNb2RlIFwiICtcbiAgICBcIlNlbmRlciBcIiArXG4gICAgXCJTZXJ2ZXJFdmVudHMgXCIgK1xuICAgIFwiU2VydmljZUZhY3RvcnkgXCIgK1xuICAgIFwiU2hpZnRTdGF0ZSBcIiArXG4gICAgXCJTdWJUYXNrIFwiICtcbiAgICBcIlN5c3RlbURpYWxvZ3MgXCIgK1xuICAgIFwiVGFza3MgXCIgK1xuICAgIFwiV2l6YXJkIFwiICtcbiAgICBcIldpemFyZHMgXCIgK1xuICAgIFwiV29yayBcIiArXG4gICAgXCLQktGL0LfQvtCy0KHQv9C+0YHQvtCxIFwiICtcbiAgICBcItCY0LzRj9Ce0YLRh9C10YLQsCBcIiArXG4gICAgXCLQoNC10LrQstCX0L3QsNGHIFwiO1xuXG4gIC8vINCY0L3RgtC10YDRhNC10LnRgdGLID09PiB0eXBlXG4gIHZhciBpbnRlcmZhY2VzID1cbiAgICBcIklBcHBsaWNhdGlvbiBcIiArXG4gICAgXCJJQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIklBY2NvdW50UmVwb3NpdG9yeSBcIiArXG4gICAgXCJJQWNjb3VudFNlbGVjdGlvblJlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJJQWN0aW9uIFwiICtcbiAgICBcIklBY3Rpb25MaXN0IFwiICtcbiAgICBcIklBZG1pbmlzdHJhdGlvbkhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJQW5jaG9ycyBcIiArXG4gICAgXCJJQXBwbGljYXRpb24gXCIgK1xuICAgIFwiSUFyY2hpdmVJbmZvIFwiICtcbiAgICBcIklBdHRhY2htZW50IFwiICtcbiAgICBcIklBdHRhY2htZW50TGlzdCBcIiArXG4gICAgXCJJQ2hlY2tMaXN0Qm94IFwiICtcbiAgICBcIklDaGVja1BvaW50ZWRMaXN0IFwiICtcbiAgICBcIklDb2x1bW4gXCIgK1xuICAgIFwiSUNvbXBvbmVudCBcIiArXG4gICAgXCJJQ29tcG9uZW50RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSUNvbXBvbmVudFRva2VuIFwiICtcbiAgICBcIklDb21wb25lbnRUb2tlbkZhY3RvcnkgXCIgK1xuICAgIFwiSUNvbXBvbmVudFRva2VuSW5mbyBcIiArXG4gICAgXCJJQ29tcFJlY29yZEluZm8gXCIgK1xuICAgIFwiSUNvbm5lY3Rpb24gXCIgK1xuICAgIFwiSUNvbnRlbnRzIFwiICtcbiAgICBcIklDb250cm9sIFwiICtcbiAgICBcIklDb250cm9sSm9iIFwiICtcbiAgICBcIklDb250cm9sSm9iSW5mbyBcIiArXG4gICAgXCJJQ29udHJvbExpc3QgXCIgK1xuICAgIFwiSUNyeXB0byBcIiArXG4gICAgXCJJQ3J5cHRvMiBcIiArXG4gICAgXCJJQ3VzdG9tSm9iIFwiICtcbiAgICBcIklDdXN0b21Kb2JJbmZvIFwiICtcbiAgICBcIklDdXN0b21MaXN0Qm94IFwiICtcbiAgICBcIklDdXN0b21PYmplY3RXaXphcmRTdGVwIFwiICtcbiAgICBcIklDdXN0b21Xb3JrIFwiICtcbiAgICBcIklDdXN0b21Xb3JrSW5mbyBcIiArXG4gICAgXCJJRGF0YVNldCBcIiArXG4gICAgXCJJRGF0YVNldEFjY2Vzc0luZm8gXCIgK1xuICAgIFwiSURhdGFTaWduZXIgXCIgK1xuICAgIFwiSURhdGVDcml0ZXJpb24gXCIgK1xuICAgIFwiSURhdGVSZXF1aXNpdGUgXCIgK1xuICAgIFwiSURhdGVSZXF1aXNpdGVEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJRGF0ZVZhbHVlIFwiICtcbiAgICBcIklEZWFBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiSURlYU9iamVjdEluZm8gXCIgK1xuICAgIFwiSURldmVsb3BtZW50Q29tcG9uZW50TG9jayBcIiArXG4gICAgXCJJRGlhbG9nIFwiICtcbiAgICBcIklEaWFsb2dGYWN0b3J5IFwiICtcbiAgICBcIklEaWFsb2dQaWNrUmVxdWlzaXRlSXRlbXMgXCIgK1xuICAgIFwiSURpYWxvZ3NGYWN0b3J5IFwiICtcbiAgICBcIklESUNTRmFjdG9yeSBcIiArXG4gICAgXCJJRG9jUmVxdWlzaXRlIFwiICtcbiAgICBcIklEb2N1bWVudEluZm8gXCIgK1xuICAgIFwiSUR1YWxMaXN0RGlhbG9nIFwiICtcbiAgICBcIklFQ2VydGlmaWNhdGUgXCIgK1xuICAgIFwiSUVDZXJ0aWZpY2F0ZUluZm8gXCIgK1xuICAgIFwiSUVDZXJ0aWZpY2F0ZXMgXCIgK1xuICAgIFwiSUVkaXRDb250cm9sIFwiICtcbiAgICBcIklFZGl0b3JGb3JtIFwiICtcbiAgICBcIklFZG1zRXhwbG9yZXIgXCIgK1xuICAgIFwiSUVkbXNPYmplY3QgXCIgK1xuICAgIFwiSUVkbXNPYmplY3REZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJRWRtc09iamVjdEZhY3RvcnkgXCIgK1xuICAgIFwiSUVkbXNPYmplY3RJbmZvIFwiICtcbiAgICBcIklFRG9jdW1lbnQgXCIgK1xuICAgIFwiSUVEb2N1bWVudEFjY2Vzc1JpZ2h0cyBcIiArXG4gICAgXCJJRURvY3VtZW50RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSUVEb2N1bWVudEVkaXRvciBcIiArXG4gICAgXCJJRURvY3VtZW50RmFjdG9yeSBcIiArXG4gICAgXCJJRURvY3VtZW50SW5mbyBcIiArXG4gICAgXCJJRURvY3VtZW50U3RvcmFnZSBcIiArXG4gICAgXCJJRURvY3VtZW50VmVyc2lvbiBcIiArXG4gICAgXCJJRURvY3VtZW50VmVyc2lvbkxpc3REaWFsb2cgXCIgK1xuICAgIFwiSUVEb2N1bWVudFZlcnNpb25Tb3VyY2UgXCIgK1xuICAgIFwiSUVEb2N1bWVudFdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSUVEb2NWZXJTaWduYXR1cmUgXCIgK1xuICAgIFwiSUVEb2NWZXJzaW9uU3RhdGUgXCIgK1xuICAgIFwiSUVuYWJsZWRNb2RlIFwiICtcbiAgICBcIklFbmNvZGVQcm92aWRlciBcIiArXG4gICAgXCJJRW5jcnlwdGVyIFwiICtcbiAgICBcIklFdmVudCBcIiArXG4gICAgXCJJRXZlbnRMaXN0IFwiICtcbiAgICBcIklFeGNlcHRpb24gXCIgK1xuICAgIFwiSUV4dGVybmFsRXZlbnRzIFwiICtcbiAgICBcIklFeHRlcm5hbEhhbmRsZXIgXCIgK1xuICAgIFwiSUZhY3RvcnkgXCIgK1xuICAgIFwiSUZpZWxkIFwiICtcbiAgICBcIklGaWxlRGlhbG9nIFwiICtcbiAgICBcIklGb2xkZXIgXCIgK1xuICAgIFwiSUZvbGRlckRlc2NyaXB0aW9uIFwiICtcbiAgICBcIklGb2xkZXJEaWFsb2cgXCIgK1xuICAgIFwiSUZvbGRlckZhY3RvcnkgXCIgK1xuICAgIFwiSUZvbGRlckluZm8gXCIgK1xuICAgIFwiSUZvckVhY2ggXCIgK1xuICAgIFwiSUZvcm0gXCIgK1xuICAgIFwiSUZvcm1UaXRsZSBcIiArXG4gICAgXCJJRm9ybVdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSUdsb2JhbElERmFjdG9yeSBcIiArXG4gICAgXCJJR2xvYmFsSURJbmZvIFwiICtcbiAgICBcIklHcmlkIFwiICtcbiAgICBcIklIYXNoZXIgXCIgK1xuICAgIFwiSUhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJSHlwZXJMaW5rQ29udHJvbCBcIiArXG4gICAgXCJJSW1hZ2VCdXR0b24gXCIgK1xuICAgIFwiSUltYWdlQ29udHJvbCBcIiArXG4gICAgXCJJSW5uZXJQYW5lbCBcIiArXG4gICAgXCJJSW5wbGFjZUhpbnQgXCIgK1xuICAgIFwiSUludGVnZXJDcml0ZXJpb24gXCIgK1xuICAgIFwiSUludGVnZXJMaXN0IFwiICtcbiAgICBcIklJbnRlZ2VyUmVxdWlzaXRlIFwiICtcbiAgICBcIklJbnRlZ2VyVmFsdWUgXCIgK1xuICAgIFwiSUlTQkxFZGl0b3JGb3JtIFwiICtcbiAgICBcIklKb2IgXCIgK1xuICAgIFwiSUpvYkRlc2NyaXB0aW9uIFwiICtcbiAgICBcIklKb2JGYWN0b3J5IFwiICtcbiAgICBcIklKb2JGb3JtIFwiICtcbiAgICBcIklKb2JJbmZvIFwiICtcbiAgICBcIklMYWJlbENvbnRyb2wgXCIgK1xuICAgIFwiSUxhcmdlSW50ZWdlckNyaXRlcmlvbiBcIiArXG4gICAgXCJJTGFyZ2VJbnRlZ2VyUmVxdWlzaXRlIFwiICtcbiAgICBcIklMYXJnZUludGVnZXJWYWx1ZSBcIiArXG4gICAgXCJJTGljZW5zZUluZm8gXCIgK1xuICAgIFwiSUxpZmVDeWNsZVN0YWdlIFwiICtcbiAgICBcIklMaXN0IFwiICtcbiAgICBcIklMaXN0Qm94IFwiICtcbiAgICBcIklMb2NhbElESW5mbyBcIiArXG4gICAgXCJJTG9jYWxpemF0aW9uIFwiICtcbiAgICBcIklMb2NrIFwiICtcbiAgICBcIklNZW1vcnlEYXRhU2V0IFwiICtcbiAgICBcIklNZXNzYWdpbmdGYWN0b3J5IFwiICtcbiAgICBcIklNZXRhZGF0YVJlcG9zaXRvcnkgXCIgK1xuICAgIFwiSU5vdGljZSBcIiArXG4gICAgXCJJTm90aWNlSW5mbyBcIiArXG4gICAgXCJJTnVtZXJpY0NyaXRlcmlvbiBcIiArXG4gICAgXCJJTnVtZXJpY1JlcXVpc2l0ZSBcIiArXG4gICAgXCJJTnVtZXJpY1ZhbHVlIFwiICtcbiAgICBcIklPYmplY3QgXCIgK1xuICAgIFwiSU9iamVjdERlc2NyaXB0aW9uIFwiICtcbiAgICBcIklPYmplY3RJbXBvcnRlciBcIiArXG4gICAgXCJJT2JqZWN0SW5mbyBcIiArXG4gICAgXCJJT2JzZXJ2ZXIgXCIgK1xuICAgIFwiSVBhbmVsR3JvdXAgXCIgK1xuICAgIFwiSVBpY2tDcml0ZXJpb24gXCIgK1xuICAgIFwiSVBpY2tQcm9wZXJ0eSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklQaWNrUmVxdWlzaXRlSXRlbSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZUl0ZW1zIFwiICtcbiAgICBcIklQaWNrVmFsdWUgXCIgK1xuICAgIFwiSVByaXZpbGVnZSBcIiArXG4gICAgXCJJUHJpdmlsZWdlTGlzdCBcIiArXG4gICAgXCJJUHJvY2VzcyBcIiArXG4gICAgXCJJUHJvY2Vzc0ZhY3RvcnkgXCIgK1xuICAgIFwiSVByb2Nlc3NNZXNzYWdlIFwiICtcbiAgICBcIklQcm9ncmVzcyBcIiArXG4gICAgXCJJUHJvcGVydHkgXCIgK1xuICAgIFwiSVByb3BlcnR5Q2hhbmdlRXZlbnQgXCIgK1xuICAgIFwiSVF1ZXJ5IFwiICtcbiAgICBcIklSZWZlcmVuY2UgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUNyaXRlcmlvbiBcIiArXG4gICAgXCJJUmVmZXJlbmNlRW5hYmxlZE1vZGUgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUZhY3RvcnkgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJUmVmZXJlbmNlSW5mbyBcIiArXG4gICAgXCJJUmVmZXJlbmNlUmVjb3JkQ2FyZFdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSVJlZmVyZW5jZVJlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklSZWZlcmVuY2VzRmFjdG9yeSBcIiArXG4gICAgXCJJUmVmZXJlbmNlVmFsdWUgXCIgK1xuICAgIFwiSVJlZlJlcXVpc2l0ZSBcIiArXG4gICAgXCJJUmVwb3J0IFwiICtcbiAgICBcIklSZXBvcnRGYWN0b3J5IFwiICtcbiAgICBcIklSZXF1aXNpdGUgXCIgK1xuICAgIFwiSVJlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklSZXF1aXNpdGVEZXNjcmlwdGlvbkxpc3QgXCIgK1xuICAgIFwiSVJlcXVpc2l0ZUZhY3RvcnkgXCIgK1xuICAgIFwiSVJpY2hFZGl0IFwiICtcbiAgICBcIklSb3V0ZVN0ZXAgXCIgK1xuICAgIFwiSVJ1bGUgXCIgK1xuICAgIFwiSVJ1bGVMaXN0IFwiICtcbiAgICBcIklTY2hlbWVCbG9jayBcIiArXG4gICAgXCJJU2NyaXB0IFwiICtcbiAgICBcIklTY3JpcHRGYWN0b3J5IFwiICtcbiAgICBcIklTZWFyY2hDcml0ZXJpYSBcIiArXG4gICAgXCJJU2VhcmNoQ3JpdGVyaW9uIFwiICtcbiAgICBcIklTZWFyY2hEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJU2VhcmNoRmFjdG9yeSBcIiArXG4gICAgXCJJU2VhcmNoRm9sZGVySW5mbyBcIiArXG4gICAgXCJJU2VhcmNoRm9yT2JqZWN0RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVNlYXJjaFJlc3VsdFJlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJJU2VjdXJlZENvbnRleHQgXCIgK1xuICAgIFwiSVNlbGVjdERpYWxvZyBcIiArXG4gICAgXCJJU2VydmVyRXZlbnQgXCIgK1xuICAgIFwiSVNlcnZlckV2ZW50RmFjdG9yeSBcIiArXG4gICAgXCJJU2VydmljZURpYWxvZyBcIiArXG4gICAgXCJJU2VydmljZUZhY3RvcnkgXCIgK1xuICAgIFwiSVNpZ25hdHVyZSBcIiArXG4gICAgXCJJU2lnblByb3ZpZGVyIFwiICtcbiAgICBcIklTaWduUHJvdmlkZXIyIFwiICtcbiAgICBcIklTaWduUHJvdmlkZXIzIFwiICtcbiAgICBcIklTaW1wbGVDcml0ZXJpb24gXCIgK1xuICAgIFwiSVN0cmluZ0NyaXRlcmlvbiBcIiArXG4gICAgXCJJU3RyaW5nTGlzdCBcIiArXG4gICAgXCJJU3RyaW5nUmVxdWlzaXRlIFwiICtcbiAgICBcIklTdHJpbmdSZXF1aXNpdGVEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJU3RyaW5nVmFsdWUgXCIgK1xuICAgIFwiSVN5c3RlbURpYWxvZ3NGYWN0b3J5IFwiICtcbiAgICBcIklTeXN0ZW1JbmZvIFwiICtcbiAgICBcIklUYWJTaGVldCBcIiArXG4gICAgXCJJVGFzayBcIiArXG4gICAgXCJJVGFza0Fib3J0UmVhc29uSW5mbyBcIiArXG4gICAgXCJJVGFza0NhcmRXaXphcmRTdGVwIFwiICtcbiAgICBcIklUYXNrRGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVRhc2tGYWN0b3J5IFwiICtcbiAgICBcIklUYXNrSW5mbyBcIiArXG4gICAgXCJJVGFza1JvdXRlIFwiICtcbiAgICBcIklUZXh0Q3JpdGVyaW9uIFwiICtcbiAgICBcIklUZXh0UmVxdWlzaXRlIFwiICtcbiAgICBcIklUZXh0VmFsdWUgXCIgK1xuICAgIFwiSVRyZWVMaXN0U2VsZWN0RGlhbG9nIFwiICtcbiAgICBcIklVc2VyIFwiICtcbiAgICBcIklVc2VyTGlzdCBcIiArXG4gICAgXCJJVmFsdWUgXCIgK1xuICAgIFwiSVZpZXcgXCIgK1xuICAgIFwiSVdlYkJyb3dzZXJDb250cm9sIFwiICtcbiAgICBcIklXaXphcmQgXCIgK1xuICAgIFwiSVdpemFyZEFjdGlvbiBcIiArXG4gICAgXCJJV2l6YXJkRmFjdG9yeSBcIiArXG4gICAgXCJJV2l6YXJkRm9ybUVsZW1lbnQgXCIgK1xuICAgIFwiSVdpemFyZFBhcmFtIFwiICtcbiAgICBcIklXaXphcmRQaWNrUGFyYW0gXCIgK1xuICAgIFwiSVdpemFyZFJlZmVyZW5jZVBhcmFtIFwiICtcbiAgICBcIklXaXphcmRTdGVwIFwiICtcbiAgICBcIklXb3JrQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIklXb3JrRGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVdvcmtmbG93QXNrYWJsZVBhcmFtIFwiICtcbiAgICBcIklXb3JrZmxvd0Fza2FibGVQYXJhbXMgXCIgK1xuICAgIFwiSVdvcmtmbG93QmxvY2sgXCIgK1xuICAgIFwiSVdvcmtmbG93QmxvY2tSZXN1bHQgXCIgK1xuICAgIFwiSVdvcmtmbG93RW5hYmxlZE1vZGUgXCIgK1xuICAgIFwiSVdvcmtmbG93UGFyYW0gXCIgK1xuICAgIFwiSVdvcmtmbG93UGlja1BhcmFtIFwiICtcbiAgICBcIklXb3JrZmxvd1JlZmVyZW5jZVBhcmFtIFwiICtcbiAgICBcIklXb3JrU3RhdGUgXCIgK1xuICAgIFwiSVdvcmtUcmVlQ3VzdG9tTm9kZSBcIiArXG4gICAgXCJJV29ya1RyZWVKb2JOb2RlIFwiICtcbiAgICBcIklXb3JrVHJlZVRhc2tOb2RlIFwiICtcbiAgICBcIklYTUxFZGl0b3JGb3JtIFwiICtcbiAgICBcIlNCQ3J5cHRvIFwiO1xuXG4gIC8vIGJ1aWx0X2luIDog0LLRgdGC0YDQvtC10L3QvdGL0LUg0LjQu9C4INCx0LjQsdC70LjQvtGC0LXRh9C90YvQtSDQvtCx0YrQtdC60YLRiyAo0LrQvtC90YHRgtCw0L3RgtGLLCDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8pXG4gIHZhciBCVUlMVElOID0gQ09OU1RBTlRTICsgRU5VTVM7XG5cbiAgLy8gY2xhc3M6INCy0YHRgtGA0L7QtdC90L3Ri9C1INC90LDQsdC+0YDRiyDQt9C90LDRh9C10L3QuNC5LCDRgdC40YHRgtC10LzQvdGL0LUg0L7QsdGK0LXQutGC0YssINGE0LDQsdGA0LjQutC4XG4gIHZhciBDTEFTUyA9IHByZWRlZmluZWRfdmFyaWFibGVzO1xuXG4gIC8vIGxpdGVyYWwgOiDQv9GA0LjQvNC40YLQuNCy0L3Ri9C1INGC0LjQv9GLXG4gIHZhciBMSVRFUkFMID0gXCJudWxsIHRydWUgZmFsc2UgbmlsIFwiO1xuXG4gIC8vIG51bWJlciA6INGH0LjRgdC70LBcbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm51bWJlclwiLFxuICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgLy8gc3RyaW5nIDog0YHRgtGA0L7QutC4XG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW3sgYmVnaW46ICdcIicsIGVuZDogJ1wiJyB9LCB7IGJlZ2luOiBcIidcIiwgZW5kOiBcIidcIiB9XSxcbiAgfTtcblxuICAvLyDQotC+0LrQtdC90YtcbiAgdmFyIERPQ1RBR1MgPSB7XG4gICAgY2xhc3NOYW1lOiBcImRvY3RhZ1wiLFxuICAgIGJlZ2luOiBcIlxcXFxiKD86VE9ET3xET05FfEJFR0lOfEVORHxTVFVCfENIR3xGSVhNRXxOT1RFfEJVR3xYWFgpXFxcXGJcIixcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgLy8g0J7QtNC90L7RgdGC0YDQvtGH0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40LlcbiAgdmFyIElTQkxfTElORV9DT01NRU5UX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIixcbiAgICBiZWdpbjogXCIvL1wiLFxuICAgIGVuZDogXCIkXCIsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5QSFJBU0FMX1dPUkRTX01PREUsIERPQ1RBR1NdLFxuICB9O1xuXG4gIC8vINCc0L3QvtCz0L7RgdGC0YDQvtGH0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40LlcbiAgdmFyIElTQkxfQkxPQ0tfQ09NTUVOVF9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgYmVnaW46IFwiL1xcXFwqXCIsXG4gICAgZW5kOiBcIlxcXFwqL1wiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW2hsanMuUEhSQVNBTF9XT1JEU19NT0RFLCBET0NUQUdTXSxcbiAgfTtcblxuICAvLyBjb21tZW50IDog0LrQvtC80LzQtdC90YLQsNGA0LjQuFxuICB2YXIgQ09NTUVOVFMgPSB7XG4gICAgdmFyaWFudHM6IFtJU0JMX0xJTkVfQ09NTUVOVF9NT0RFLCBJU0JMX0JMT0NLX0NPTU1FTlRfTU9ERV0sXG4gIH07XG5cbiAgLy8ga2V5d29yZHMgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LBcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IEtFWVdPUkQsXG4gICAgYnVpbHRfaW46IEJVSUxUSU4sXG4gICAgY2xhc3M6IENMQVNTLFxuICAgIGxpdGVyYWw6IExJVEVSQUwsXG4gIH07XG5cbiAgLy8gbWV0aG9kcyA6INC80LXRgtC+0LTRi1xuICB2YXIgTUVUSE9EUyA9IHtcbiAgICBiZWdpbjogXCJcXFxcLlxcXFxzKlwiICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgLy8gdHlwZSA6INCy0YHRgtGA0L7QtdC90L3Ri9C1INGC0LjQv9GLXG4gIHZhciBUWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6IFwidHlwZVwiLFxuICAgIGJlZ2luOiBcIjpbIFxcXFx0XSooXCIgKyBpbnRlcmZhY2VzLnRyaW0oKS5yZXBsYWNlKC9cXHMvZywgXCJ8XCIpICsgXCIpXCIsXG4gICAgZW5kOiBcIlsgXFxcXHRdKj1cIixcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICB9O1xuXG4gIC8vIHZhcmlhYmxlcyA6INC/0LXRgNC10LzQtdC90L3Ri9C1XG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlXCIsXG4gICAgbGV4ZW1lczogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbVFlQRVMsIE1FVEhPRFNdLFxuICB9O1xuXG4gIC8vINCY0LzQtdC90LAg0YTRg9C90LrRhtC40LlcbiAgdmFyIEZVTkNUSU9OX1RJVExFID0gRlVOQ1RJT05fTkFNRV9JREVOVF9SRSArIFwiXFxcXChcIjtcblxuICB2YXIgVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6IFwidGl0bGVcIixcbiAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBidWlsdF9pbjogc3lzdGVtX2Z1bmN0aW9ucyxcbiAgICB9LFxuICAgIGJlZ2luOiBGVU5DVElPTl9USVRMRSxcbiAgICBlbmQ6IFwiXFxcXChcIixcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICB9O1xuXG4gIC8vIGZ1bmN0aW9uIDog0YTRg9C90LrRhtC40LhcbiAgdmFyIEZVTkNUSU9OUyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZnVuY3Rpb25cIixcbiAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgZW5kOiBcIlxcXFwpJFwiLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IFwiW1xcXFxbXFxcXF1cXFxcfFxcXFwkXFxcXD8lLH4jQF1cIixcbiAgICBjb250YWluczogW1RJVExFX01PREUsIE1FVEhPRFMsIFZBUklBQkxFUywgU1RSSU5HUywgTlVNQkVSUywgQ09NTUVOVFNdLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogW1wiaXNibFwiXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IFwiXFxcXCR8XFxcXD98JXwsfDskfH58I3xAfDwvXCIsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEZVTkNUSU9OUyxcbiAgICAgIFRZUEVTLFxuICAgICAgTUVUSE9EUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgQ09NTUVOVFMsXG4gICAgXSxcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBKQVZBX0lERU5UX1JFID0gJ1tcXHUwMEMwLVxcdTAyQjhhLXpBLVpfJF1bXFx1MDBDMC1cXHUwMkI4YS16QS1aXyQwLTldKic7XG4gIHZhciBHRU5FUklDX0lERU5UX1JFID0gSkFWQV9JREVOVF9SRSArICcoPCcgKyBKQVZBX0lERU5UX1JFICsgJyhcXFxccyosXFxcXHMqJyArIEpBVkFfSURFTlRfUkUgKyAnKSo+KT8nO1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHZhciBzdGF0aWMgbnVsbCBpZiBjb25zdCAnICtcbiAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHZvaWQgJyArXG4gICAgJ2VudW0gZWxzZSBicmVhayB0cmFuc2llbnQgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0ICcgK1xuICAgICdwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByb3RlY3RlZCBwdWJsaWMgcHJpdmF0ZSAnICtcbiAgICAnbW9kdWxlIHJlcXVpcmVzIGV4cG9ydHMgZG8nO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvdGVjaG5vdGVzL2d1aWRlcy9sYW5ndWFnZS91bmRlcnNjb3Jlcy1saXRlcmFscy5odG1sXG4gIHZhciBKQVZBX05VTUJFUl9SRSA9ICdcXFxcYicgK1xuICAgICcoJyArXG4gICAgICAnMFtiQl0oWzAxXStbMDFfXStbMDFdK3xbMDFdKyknICsgLy8gMGIuLi5cbiAgICAgICd8JyArXG4gICAgICAnMFt4WF0oW2EtZkEtRjAtOV0rW2EtZkEtRjAtOV9dK1thLWZBLUYwLTldK3xbYS1mQS1GMC05XSspJyArIC8vIDB4Li4uXG4gICAgICAnfCcgK1xuICAgICAgJygnICtcbiAgICAgICAgJyhbXFxcXGRdK1tcXFxcZF9dK1tcXFxcZF0rfFtcXFxcZF0rKShcXFxcLihbXFxcXGRdK1tcXFxcZF9dK1tcXFxcZF0rfFtcXFxcZF0rKSk/JyArXG4gICAgICAgICd8JyArXG4gICAgICAgICdcXFxcLihbXFxcXGRdK1tcXFxcZF9dK1tcXFxcZF0rfFtcXFxcZF0rKScgK1xuICAgICAgJyknICtcbiAgICAgICcoW2VFXVstK10/XFxcXGQrKT8nICsgLy8gb2N0YWwsIGRlY2ltYWwsIGZsb2F0XG4gICAgJyknICtcbiAgICAnW2xMZkZdPyc7XG4gIHZhciBKQVZBX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IEpBVkFfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydqc3AnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLzxcXC98Iy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2UgOiAwLFxuICAgICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBlYXQgdXAgQCdzIGluIGVtYWlscyB0byBwcmV2ZW50IHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBkb2N0YWdzXG4gICAgICAgICAgICAgIGJlZ2luOiAvXFx3K0AvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6IC9bezs9XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgaWxsZWdhbDogL1s6XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgR0VORVJJQ19JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIEpBVkFfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEZSQUdNRU5UID0ge1xuICAgIGJlZ2luOiAnPD4nLFxuICAgIGVuZDogJzwvPidcbiAgfTtcbiAgdmFyIFhNTF9UQUcgPSB7XG4gICAgYmVnaW46IC88W0EtWmEtejAtOVxcXFwuXzotXSsvLFxuICAgIGVuZDogL1xcL1tBLVphLXowLTlcXFxcLl86LV0rPnxcXC8+L1xuICB9O1xuICB2YXIgSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaW4gb2YgaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoICcgK1xuICAgICAgJ2luc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgJyArXG4gICAgICAnbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBzdGF0aWMgJyArXG4gICAgICAvLyBFQ01BU2NyaXB0IDYgbW9kdWxlcyBpbXBvcnRcbiAgICAgICdpbXBvcnQgZnJvbSBhcydcbiAgICAsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eScsXG4gICAgYnVpbHRfaW46XG4gICAgICAnZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgJyArXG4gICAgICAnZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgJyArXG4gICAgICAnRXZhbEVycm9yIEludGVybmFsRXJyb3IgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yICcgK1xuICAgICAgJ1R5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5ICcgK1xuICAgICAgJ0Zsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5ICcgK1xuICAgICAgJ1VpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgQXJyYXlCdWZmZXIgRGF0YVZpZXcgSlNPTiBJbnRsIGFyZ3VtZW50cyByZXF1aXJlICcgK1xuICAgICAgJ21vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBTeW1ib2wgU2V0IE1hcCBXZWFrU2V0IFdlYWtNYXAgUHJveHkgUmVmbGVjdCAnICtcbiAgICAgICdQcm9taXNlJ1xuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcYigwW2JCXVswMV0rKW4/JyB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbb09dWzAtN10rKW4/JyB9LFxuICAgICAgeyBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICduPycgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW10gIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgdmFyIEhUTUxfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdodG1sYCcsIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJywgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgfVxuICB9O1xuICB2YXIgQ1NTX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnY3NzYCcsIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJywgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2NzcycsXG4gICAgfVxuICB9O1xuICB2YXIgVEVNUExBVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBIVE1MX1RFTVBMQVRFLFxuICAgIENTU19URU1QTEFURSxcbiAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIGhsanMuUkVHRVhQX01PREVcbiAgXTtcbiAgdmFyIFBBUkFNU19DT05UQUlOUyA9IFNVQlNULmNvbnRhaW5zLmNvbmNhdChbXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREVcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2pzJywgJ2pzeCcsICdtanMnLCAnY2pzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eIyEvLCBlbmQ6IC8kL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBIVE1MX1RFTVBMQVRFLFxuICAgICAgQ1NTX1RFTVBMQVRFLFxuICAgICAgVEVNUExBVEVfU1RSSU5HLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZSA6IDAsXG4gICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJyxcbiAgICAgICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx7JyxcbiAgICAgICAgICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgICAgYmVnaW46IElERU5UX1JFICsgJyg/PVxcXFxzKigtKXwkKScsXG4gICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBlYXQgc3BhY2VzIChub3QgbmV3bGluZXMpIHNvIHdlIGNhbiBmaW5kXG4gICAgICAgICAgICAgICAgLy8gdHlwZXMgb3IgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46IC8oPz1bXlxcbl0pXFxzLyxcbiAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSLFxuICAgICAgeyAvLyBvYmplY3QgYXR0ciBjb250YWluZXJcbiAgICAgICAgYmVnaW46IC9beyxcXG5dXFxzKi8sIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnYXR0cicsIGJlZ2luOiBJREVOVF9SRSwgcmVsZXZhbmNlOiAwfV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46ICcoXFxcXCguKj9cXFxcKXwnICsgSURFTlRfUkUgKyAnKVxcXFxzKj0+JywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyo9PicsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogSURFTlRfUkVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoXFxzKlxcKS8sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgYmVnaW46IC9cXHMvLFxuICAgICAgICAgICAgZW5kOiAvXFxzKi8sXG4gICAgICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBKU1hcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46IEZSQUdNRU5ULmJlZ2luLCBlbmQ6IEZSQUdNRU5ULmVuZCB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiBYTUxfVEFHLmJlZ2luLCBlbmQ6IFhNTF9UQUcuZW5kIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFhNTF9UQUcuYmVnaW4sIGVuZDogWE1MX1RBRy5lbmQsIHNraXA6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IElERU5UX1JFfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvXFxbfCUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9LFxuICAgICAgaGxqcy5NRVRIT0RfR1VBUkQsXG4gICAgICB7IC8vIEVTNiBjbGFzc1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsIGVuZDogL1t7Oz1dLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29uc3RydWN0b3IgZ2V0IHNldCcsIGVuZDogL1xcey8sIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jKD8hISkvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIFBBUkFNID0ge1xuICAgIGJlZ2luOiAvW1xcdy1dKyAqPS8sIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW3tjbGFzc05hbWU6ICdhdHRyJywgYmVnaW46IC9bXFx3LV0rL31dXG4gIH07XG4gIHZhciBQQVJBTVNCTE9DSyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbUEFSQU1dLFxuICAgIHJlbGV2YW5jZSA6IDBcbiAgfTtcbiAgdmFyIE9QRVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC86W1xcd1xcLS5dKy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBQQVRIID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cXEIoKFtcXC8uXSlbXFx3XFwtLlxcLz1dKykrLyxcbiAgfTtcbiAgdmFyIENPTU1BTkRfUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC8tLVtcXHdcXC09XFwvXSsvLFxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnd2lsZGZseS1jbGknXSxcbiAgICBsZXhlbWVzOiAnW2EtelxcLV0rJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2FsaWFzIGJhdGNoIGNkIGNsZWFyIGNvbW1hbmQgY29ubmVjdCBjb25uZWN0aW9uLWZhY3RvcnkgY29ubmVjdGlvbi1pbmZvIGRhdGEtc291cmNlIGRlcGxveSAnICtcbiAgICAgICdkZXBsb3ltZW50LWluZm8gZGVwbG95bWVudC1vdmVybGF5IGVjaG8gZWNoby1kbXIgaGVscCBoaXN0b3J5IGlmIGpkYmMtZHJpdmVyLWluZm8gam1zLXF1ZXVlfDIwIGptcy10b3BpY3wyMCBscyAnICtcbiAgICAgICdwYXRjaCBwd2QgcXVpdCByZWFkLWF0dHJpYnV0ZSByZWFkLW9wZXJhdGlvbiByZWxvYWQgcm9sbG91dC1wbGFuIHJ1bi1iYXRjaCBzZXQgc2h1dGRvd24gdHJ5IHVuYWxpYXMgJyArXG4gICAgICAndW5kZXBsb3kgdW5zZXQgdmVyc2lvbiB4YS1kYXRhLXNvdXJjZScsIC8vIG1vZHVsZVxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBDT01NQU5EX1BBUkFNUyxcbiAgICAgIE9QRVJBVElPTixcbiAgICAgIFBBVEgsXG4gICAgICBQQVJBTVNCTE9DS1xuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIExJVEVSQUxTID0ge2xpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwnfTtcbiAgdmFyIEFMTE9XRURfQ09NTUVOVFMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgXVxuICB2YXIgVFlQRVMgPSBbXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgXTtcbiAgdmFyIFZBTFVFX0NPTlRBSU5FUiA9IHtcbiAgICBlbmQ6ICcsJywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFRZUEVTLFxuICAgIGtleXdvcmRzOiBMSVRFUkFMU1xuICB9O1xuICB2YXIgT0JKRUNUID0ge1xuICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFZBTFVFX0NPTlRBSU5FUiwge2JlZ2luOiAvOi99KVxuICAgIF0uY29uY2F0KEFMTE9XRURfQ09NTUVOVFMpLFxuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgdmFyIEFSUkFZID0ge1xuICAgIGJlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoVkFMVUVfQ09OVEFJTkVSKV0sIC8vIGluaGVyaXQgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyB0aGF0IG1ha2VzIHNoYXJlZCBtb2RlcyB3aXRoIGVuZHNXaXRoUGFyZW50IGNvbXBpbGUgb25seSB0aGUgZW5kaW5nIG9mIG9uZSBvZiB0aGUgcGFyZW50c1xuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgVFlQRVMucHVzaChPQkpFQ1QsIEFSUkFZKTtcbiAgQUxMT1dFRF9DT01NRU5UUy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICBUWVBFUy5wdXNoKHJ1bGUpXG4gIH0pXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFRZUEVTLFxuICAgIGtleXdvcmRzOiBMSVRFUkFMUyxcbiAgICBpbGxlZ2FsOiAnXFxcXFMnXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBTaW5jZSB0aGVyZSBhcmUgbnVtZXJvdXMgc3BlY2lhbCBuYW1lcyBpbiBKdWxpYSwgaXQgaXMgdG9vIG11Y2ggdHJvdWJsZVxuICAvLyB0byBtYWludGFpbiB0aGVtIGJ5IGhhbmQuIEhlbmNlIHRoZXNlIG5hbWVzIChpLmUuIGtleXdvcmRzLCBsaXRlcmFscyBhbmRcbiAgLy8gYnVpbHQtaW5zKSBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKdWxpYSB2MC42IGl0c2VsZiB0aHJvdWdoXG4gIC8vIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBmb3IgZWFjaC5cblxuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgLy8gIyBrZXl3b3JkIGdlbmVyYXRvciwgbXVsdGktd29yZCBrZXl3b3JkcyBoYW5kbGVkIG1hbnVhbGx5IGJlbG93XG4gICAgLy8gZm9yZWFjaChwcmludGxuLCBbXCJpblwiLCBcImlzYVwiLCBcIndoZXJlXCJdKVxuICAgIC8vIGZvciBrdyBpbiBCYXNlLlJFUExDb21wbGV0aW9ucy5jb21wbGV0ZV9rZXl3b3JkKFwiXCIpXG4gICAgLy8gICAgIGlmICEoY29udGFpbnMoa3csIFwiIFwiKSB8fCBrdyA9PSBcInN0cnVjdFwiKVxuICAgIC8vICAgICAgICAgcHJpbnRsbihrdylcbiAgICAvLyAgICAgZW5kXG4gICAgLy8gZW5kXG4gICAga2V5d29yZDpcbiAgICAgICdpbiBpc2Egd2hlcmUgJyArXG4gICAgICAnYmFyZW1vZHVsZSBiZWdpbiBicmVhayBjYXRjaCBjY2FsbCBjb25zdCBjb250aW51ZSBkbyBlbHNlIGVsc2VpZiBlbmQgZXhwb3J0IGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uICcgK1xuICAgICAgJ2dsb2JhbCBpZiBpbXBvcnQgaW1wb3J0YWxsIGxldCBsb2NhbCBtYWNybyBtb2R1bGUgcXVvdGUgcmV0dXJuIHRydWUgdHJ5IHVzaW5nIHdoaWxlICcgK1xuICAgICAgLy8gbGVnYWN5LCB0byBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IHJlbGVhc2VcbiAgICAgICd0eXBlIGltbXV0YWJsZSBhYnN0cmFjdCBiaXRzdHlwZSB0eXBlYWxpYXMgJyxcblxuICAgIC8vICMgbGl0ZXJhbCBnZW5lcmF0b3JcbiAgICAvLyBwcmludGxuKFwidHJ1ZVwiKVxuICAgIC8vIHByaW50bG4oXCJmYWxzZVwiKVxuICAgIC8vIGZvciBuYW1lIGluIEJhc2UuUkVQTENvbXBsZXRpb25zLmNvbXBsZXRpb25zKFwiXCIsIDApWzFdXG4gICAgLy8gICAgIHRyeVxuICAgIC8vICAgICAgICAgdiA9IGV2YWwoU3ltYm9sKG5hbWUpKVxuICAgIC8vICAgICAgICAgaWYgISh2IGlzYSBGdW5jdGlvbiB8fCB2IGlzYSBUeXBlIHx8IHYgaXNhIFR5cGVWYXIgfHwgdiBpc2EgTW9kdWxlIHx8IHYgaXNhIENvbG9uKVxuICAgIC8vICAgICAgICAgICAgIHByaW50bG4obmFtZSlcbiAgICAvLyAgICAgICAgIGVuZFxuICAgIC8vICAgICBlbmRcbiAgICAvLyBlbmRcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgJyArXG4gICAgICAnQVJHUyBDX05VTEwgRGV2TnVsbCBFTkRJQU5fQk9NIEVOViBJIEluZiBJbmYxNiBJbmYzMiBJbmY2NCBJbnNlcnRpb25Tb3J0IEpVTElBX0hPTUUgTE9BRF9QQVRIIE1lcmdlU29ydCAnICtcbiAgICAgICdOYU4gTmFOMTYgTmFOMzIgTmFONjQgUFJPR1JBTV9GSUxFIFF1aWNrU29ydCBSb3VuZERvd24gUm91bmRGcm9tWmVybyBSb3VuZE5lYXJlc3QgUm91bmROZWFyZXN0VGllc0F3YXkgJyArXG4gICAgICAnUm91bmROZWFyZXN0VGllc1VwIFJvdW5kVG9aZXJvIFJvdW5kVXAgU1RERVJSIFNURElOIFNURE9VVCBWRVJTSU9OIGNhdGFsYW4gZXwwIGV1fDAgZXVsZXJnYW1tYSBnb2xkZW4gaW0gJyArXG4gICAgICAnbm90aGluZyBwaSDOsyDPgCDPhiAnLFxuXG4gICAgLy8gIyBidWlsdF9pbiBnZW5lcmF0b3I6XG4gICAgLy8gZm9yIG5hbWUgaW4gQmFzZS5SRVBMQ29tcGxldGlvbnMuY29tcGxldGlvbnMoXCJcIiwgMClbMV1cbiAgICAvLyAgICAgdHJ5XG4gICAgLy8gICAgICAgICB2ID0gZXZhbChTeW1ib2wobmFtZSkpXG4gICAgLy8gICAgICAgICBpZiB2IGlzYSBUeXBlIHx8IHYgaXNhIFR5cGVWYXJcbiAgICAvLyAgICAgICAgICAgICBwcmludGxuKG5hbWUpXG4gICAgLy8gICAgICAgICBlbmRcbiAgICAvLyAgICAgZW5kXG4gICAgLy8gZW5kXG4gICAgYnVpbHRfaW46XG4gICAgICAnQU5ZIEFic3RyYWN0QXJyYXkgQWJzdHJhY3RDaGFubmVsIEFic3RyYWN0RmxvYXQgQWJzdHJhY3RNYXRyaXggQWJzdHJhY3RSTkcgQWJzdHJhY3RTZXJpYWxpemVyIEFic3RyYWN0U2V0ICcgK1xuICAgICAgJ0Fic3RyYWN0U3BhcnNlQXJyYXkgQWJzdHJhY3RTcGFyc2VNYXRyaXggQWJzdHJhY3RTcGFyc2VWZWN0b3IgQWJzdHJhY3RTdHJpbmcgQWJzdHJhY3RVbml0UmFuZ2UgQWJzdHJhY3RWZWNPck1hdCAnICtcbiAgICAgICdBYnN0cmFjdFZlY3RvciBBbnkgQXJndW1lbnRFcnJvciBBcnJheSBBc3NlcnRpb25FcnJvciBBc3NvY2lhdGl2ZSBCYXNlNjREZWNvZGVQaXBlIEJhc2U2NEVuY29kZVBpcGUgQmlkaWFnb25hbCAnK1xuICAgICAgJ0JpZ0Zsb2F0IEJpZ0ludCBCaXRBcnJheSBCaXRNYXRyaXggQml0VmVjdG9yIEJvb2wgQm91bmRzRXJyb3IgQnVmZmVyU3RyZWFtIENhY2hpbmdQb29sIENhcHR1cmVkRXhjZXB0aW9uICcgK1xuICAgICAgJ0NhcnRlc2lhbkluZGV4IENhcnRlc2lhblJhbmdlIENjaGFyIENkb3VibGUgQ2Zsb2F0IENoYW5uZWwgQ2hhciBDaW50IENpbnRtYXhfdCBDbG9uZyBDbG9uZ2xvbmcgQ2x1c3Rlck1hbmFnZXIgJyArXG4gICAgICAnQ21kIENvZGVJbmZvIENvbG9uIENvbXBsZXggQ29tcGxleDEyOCBDb21wbGV4MzIgQ29tcGxleDY0IENvbXBvc2l0ZUV4Y2VwdGlvbiBDb25kaXRpb24gQ29uakFycmF5IENvbmpNYXRyaXggJyArXG4gICAgICAnQ29ualZlY3RvciBDcHRyZGlmZl90IENzaG9ydCBDc2l6ZV90IENzc2l6ZV90IENzdHJpbmcgQ3VjaGFyIEN1aW50IEN1aW50bWF4X3QgQ3Vsb25nIEN1bG9uZ2xvbmcgQ3VzaG9ydCBDd2NoYXJfdCAnICtcbiAgICAgICdDd3N0cmluZyBEYXRhVHlwZSBEYXRlIERhdGVGb3JtYXQgRGF0ZVRpbWUgRGVuc2VBcnJheSBEZW5zZU1hdHJpeCBEZW5zZVZlY09yTWF0IERlbnNlVmVjdG9yIERpYWdvbmFsIERpY3QgJyArXG4gICAgICAnRGltZW5zaW9uTWlzbWF0Y2ggRGltcyBEaXJlY3RJbmRleFN0cmluZyBEaXNwbGF5IERpdmlkZUVycm9yIERvbWFpbkVycm9yIEVPRkVycm9yIEVhY2hMaW5lIEVudW0gRW51bWVyYXRlICcgK1xuICAgICAgJ0Vycm9yRXhjZXB0aW9uIEV4Y2VwdGlvbiBFeHBvbmVudGlhbEJhY2tPZmYgRXhwciBGYWN0b3JpemF0aW9uIEZpbGVNb25pdG9yIEZsb2F0MTYgRmxvYXQzMiBGbG9hdDY0IEZ1bmN0aW9uICcgK1xuICAgICAgJ0Z1dHVyZSBHbG9iYWxSZWYgR290b05vZGUgSFRNTCBIZXJtaXRpYW4gSU8gSU9CdWZmZXIgSU9Db250ZXh0IElPU3RyZWFtIElQQWRkciBJUHY0IElQdjYgSW5kZXhDYXJ0ZXNpYW4gSW5kZXhMaW5lYXIgJyArXG4gICAgICAnSW5kZXhTdHlsZSBJbmV4YWN0RXJyb3IgSW5pdEVycm9yIEludCBJbnQxMjggSW50MTYgSW50MzIgSW50NjQgSW50OCBJbnRTZXQgSW50ZWdlciBJbnRlcnJ1cHRFeGNlcHRpb24gJyArXG4gICAgICAnSW52YWxpZFN0YXRlRXhjZXB0aW9uIElycmF0aW9uYWwgS2V5RXJyb3IgTGFiZWxOb2RlIExpblNwYWNlIExpbmVOdW1iZXJOb2RlIExvYWRFcnJvciBMb3dlclRyaWFuZ3VsYXIgTUlNRSBNYXRyaXggJyArXG4gICAgICAnTWVyc2VubmVUd2lzdGVyIE1ldGhvZCBNZXRob2RFcnJvciBNZXRob2RUYWJsZSBNb2R1bGUgTlR1cGxlIE5ld3Zhck5vZGUgTnVsbEV4Y2VwdGlvbiBOdWxsYWJsZSBOdW1iZXIgT2JqZWN0SWREaWN0ICcgK1xuICAgICAgJ09yZGluYWxSYW5nZSBPdXRPZk1lbW9yeUVycm9yIE92ZXJmbG93RXJyb3IgUGFpciBQYXJzZUVycm9yIFBhcnRpYWxRdWlja1NvcnQgUGVybXV0ZWREaW1zQXJyYXkgUGlwZSAnICtcbiAgICAgICdQb2xsaW5nRmlsZVdhdGNoZXIgUHJvY2Vzc0V4aXRlZEV4Y2VwdGlvbiBQdHIgUXVvdGVOb2RlIFJhbmRvbURldmljZSBSYW5nZSBSYW5nZUluZGV4IFJhdGlvbmFsIFJhd0ZEICcgK1xuICAgICAgJ1JlYWRPbmx5TWVtb3J5RXJyb3IgUmVhbCBSZWVudHJhbnRMb2NrIFJlZiBSZWdleCBSZWdleE1hdGNoIFJlbW90ZUNoYW5uZWwgUmVtb3RlRXhjZXB0aW9uIFJldlN0cmluZyBSb3VuZGluZ01vZGUgJyArXG4gICAgICAnUm93VmVjdG9yIFNTQVZhbHVlIFNlZ21lbnRhdGlvbkZhdWx0IFNlcmlhbGl6YXRpb25TdGF0ZSBTZXQgU2hhcmVkQXJyYXkgU2hhcmVkTWF0cml4IFNoYXJlZFZlY3RvciBTaWduZWQgJyArXG4gICAgICAnU2ltcGxlVmVjdG9yIFNsb3QgU2xvdE51bWJlciBTcGFyc2VNYXRyaXhDU0MgU3BhcnNlVmVjdG9yIFN0YWNrRnJhbWUgU3RhY2tPdmVyZmxvd0Vycm9yIFN0YWNrVHJhY2UgU3RlcFJhbmdlICcgK1xuICAgICAgJ1N0ZXBSYW5nZUxlbiBTdHJpZGVkQXJyYXkgU3RyaWRlZE1hdHJpeCBTdHJpZGVkVmVjT3JNYXQgU3RyaWRlZFZlY3RvciBTdHJpbmcgU3ViQXJyYXkgU3ViU3RyaW5nIFN5bVRyaWRpYWdvbmFsICcgK1xuICAgICAgJ1N5bWJvbCBTeW1tZXRyaWMgU3lzdGVtRXJyb3IgVENQU29ja2V0IFRhc2sgVGV4dCBUZXh0RGlzcGxheSBUaW1lciBUcmlkaWFnb25hbCBUdXBsZSBUeXBlIFR5cGVFcnJvciBUeXBlTWFwRW50cnkgJyArXG4gICAgICAnVHlwZU1hcExldmVsIFR5cGVOYW1lIFR5cGVWYXIgVHlwZWRTbG90IFVEUFNvY2tldCBVSW50IFVJbnQxMjggVUludDE2IFVJbnQzMiBVSW50NjQgVUludDggVW5kZWZSZWZFcnJvciBVbmRlZlZhckVycm9yICcgK1xuICAgICAgJ1VuaWNvZGVFcnJvciBVbmlmb3JtU2NhbGluZyBVbmlvbiBVbmlvbkFsbCBVbml0UmFuZ2UgVW5zaWduZWQgVXBwZXJUcmlhbmd1bGFyIFZhbCBWYXJhcmcgVmVjRWxlbWVudCBWZWNPck1hdCBWZWN0b3IgJyArXG4gICAgICAnVmVyc2lvbk51bWJlciBWb2lkIFdlYWtLZXlEaWN0IFdlYWtSZWYgV29ya2VyQ29uZmlnIFdvcmtlclBvb2wgJ1xuICB9O1xuXG4gIC8vIHJlZjogaHR0cDovL2p1bGlhLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvbWFudWFsL3ZhcmlhYmxlcy8jYWxsb3dlZC12YXJpYWJsZS1uYW1lc1xuICB2YXIgVkFSSUFCTEVfTkFNRV9SRSA9ICdbQS1aYS16X1xcXFx1MDBBMS1cXFxcdUZGRkZdW0EtWmEtel8wLTlcXFxcdTAwQTEtXFxcXHVGRkZGXSonO1xuXG4gIC8vIHBsYWNlaG9sZGVyIGZvciByZWN1cnNpdmUgc2VsZi1yZWZlcmVuY2VcbiAgdmFyIERFRkFVTFQgPSB7XG4gICAgbGV4ZW1lczogVkFSSUFCTEVfTkFNRV9SRSwga2V5d29yZHM6IEtFWVdPUkRTLCBpbGxlZ2FsOiAvPFxcLy9cbiAgfTtcblxuICAvLyByZWY6IGh0dHA6Ly9qdWxpYS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L21hbnVhbC9pbnRlZ2Vycy1hbmQtZmxvYXRpbmctcG9pbnQtbnVtYmVycy9cbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIC8vIHN1cHBvcnRlZCBudW1lcmljIGxpdGVyYWxzOlxuICAgIC8vICAqIGJpbmFyeSBsaXRlcmFsIChlLmcuIDB4MTApXG4gICAgLy8gICogb2N0YWwgbGl0ZXJhbCAoZS5nLiAwbzc2NTQzMjEwKVxuICAgIC8vICAqIGhleGFkZWNpbWFsIGxpdGVyYWwgKGUuZy4gMHhmZWRjYmE4NzY1NDMyMTApXG4gICAgLy8gICogaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbCAoZS5nLiAweDFwMCwgMHgxLjJwMilcbiAgICAvLyAgKiBkZWNpbWFsIGxpdGVyYWwgKGUuZy4gOTg3NjU0MzIxMCwgMTAwXzAwMF8wMDApXG4gICAgLy8gICogZmxvYXRpbmcgcG9pbnRlIGxpdGVyYWwgKGUuZy4gMS4yLCAxLjJmLCAuMiwgMS4sIDEuMmUxMCwgMS4yZS0xMClcbiAgICBiZWdpbjogLyhcXGIweFtcXGRfXSooXFwuW1xcZF9dKik/fDB4XFwuXFxkW1xcZF9dKilwWy0rXT9cXGQrfFxcYjBbYm94XVthLWZBLUYwLTldW2EtZkEtRjAtOV9dKnwoXFxiXFxkW1xcZF9dKihcXC5bXFxkX10qKT98XFwuXFxkW1xcZF9dKikoW2VFZkZdWy0rXT9cXGQrKT8vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBDSEFSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nKC58XFxcXFt4WHVVXVthLXpBLVowLTldKyknL1xuICB9O1xuXG4gIHZhciBJTlRFUlBPTEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG5cbiAgdmFyIElOVEVSUE9MQVRFRF9WQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICdcXFxcJCcgKyBWQVJJQUJMRV9OQU1FX1JFXG4gIH07XG5cbiAgLy8gVE9ETzogbmVhdGx5IGVzY2FwZSBub3JtYWwgY29kZSBpbiBzdHJpbmcgbGl0ZXJhbFxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIElOVEVSUE9MQVRJT04sIElOVEVSUE9MQVRFRF9WQVJJQUJMRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHcqXCJcIlwiLywgZW5kOiAvXCJcIlwiXFx3Ki8sIHJlbGV2YW5jZTogMTAgfSxcbiAgICAgIHsgYmVnaW46IC9cXHcqXCIvLCBlbmQ6IC9cIlxcdyovIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIENPTU1BTkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgSU5URVJQT0xBVElPTiwgSU5URVJQT0xBVEVEX1ZBUklBQkxFXSxcbiAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJ1xuICB9O1xuXG4gIHZhciBNQUNST0NBTEwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIFZBUklBQkxFX05BTUVfUkVcbiAgfTtcblxuICB2YXIgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJyM9JywgZW5kOiAnPSMnLCByZWxldmFuY2U6IDEwIH0sXG4gICAgICB7IGJlZ2luOiAnIycsIGVuZDogJyQnIH1cbiAgICBdXG4gIH07XG5cbiAgREVGQVVMVC5jb250YWlucyA9IFtcbiAgICBOVU1CRVIsXG4gICAgQ0hBUixcbiAgICBTVFJJTkcsXG4gICAgQ09NTUFORCxcbiAgICBNQUNST0NBTEwsXG4gICAgQ09NTUVOVCxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgYmVnaW46XG4gICAgICAgICdcXFxcYigoKGFic3RyYWN0fHByaW1pdGl2ZSlcXFxccyspdHlwZXwobXV0YWJsZVxcXFxzKyk/c3RydWN0KVxcXFxiJ1xuICAgIH0sXG4gICAge2JlZ2luOiAvPDovfSAgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgXTtcbiAgSU5URVJQT0xBVElPTi5jb250YWlucyA9IERFRkFVTFQuY29udGFpbnM7XG5cbiAgcmV0dXJuIERFRkFVTFQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15qdWxpYT4vLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyBlbmQgdGhlIGhpZ2hsaWdodGluZyBpZiB3ZSBhcmUgb24gYSBuZXcgbGluZSBhbmQgdGhlIGxpbmUgZG9lcyBub3QgaGF2ZSBhdFxuICAgICAgICAgIC8vIGxlYXN0IHNpeCBzcGFjZXMgaW4gdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIGVuZDogL14oPyFbIF17Nn0pLyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ2p1bGlhJ1xuICAgICAgfSxcbiAgICAgIC8vIGpsZG9jdGVzdCBNYXJrZG93biBibG9ja3MgYXJlIHVzZWQgaW4gdGhlIEp1bGlhIG1hbnVhbCBhbmQgcGFja2FnZSBkb2NzIGluZGljYXRlXG4gICAgICAvLyBjb2RlIHNuaXBwZXRzIHRoYXQgc2hvdWxkIGJlIHZlcmlmaWVkIHdoZW4gdGhlIGRvY3VtZW50YXRpb24gaXMgYnVpbHQuIFRoZXkgY2FuIGJlXG4gICAgICAvLyBlaXRoZXIgUkVQTC1saWtlIG9yIHNjcmlwdC1saWtlLCBidXQgYXJlIHVzdWFsbHkgUkVQTC1saWtlIGFuZCB0aGVyZWZvcmUgd2UgYXBwbHlcbiAgICAgIC8vIGp1bGlhLXJlcGwgaGlnaGxpZ2h0aW5nIHRvIHRoZW0uIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIERvY3VtZW50ZXInc1xuICAgICAgLy8gbWFudWFsOiBodHRwczovL2p1bGlhZG9jcy5naXRodWIuaW8vRG9jdW1lbnRlci5qbC9sYXRlc3QvbWFuL2RvY3Rlc3RzLmh0bWxcbiAgICAgIGFsaWFzZXM6IFsnamxkb2N0ZXN0J11cbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFzIHZhbCB2YXIgdmFyYXJnIGdldCBzZXQgY2xhc3Mgb2JqZWN0IG9wZW4gcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIG5vaW5saW5lICcgK1xuICAgICAgJ2Nyb3NzaW5saW5lIGR5bmFtaWMgZmluYWwgZW51bSBpZiBlbHNlIGRvIHdoaWxlIGZvciB3aGVuIHRocm93IHRyeSBjYXRjaCBmaW5hbGx5ICcgK1xuICAgICAgJ2ltcG9ydCBwYWNrYWdlIGlzIGluIGZ1biBvdmVycmlkZSBjb21wYW5pb24gcmVpZmllZCBpbmxpbmUgbGF0ZWluaXQgaW5pdCAnICtcbiAgICAgICdpbnRlcmZhY2UgYW5ub3RhdGlvbiBkYXRhIHNlYWxlZCBpbnRlcm5hbCBpbmZpeCBvcGVyYXRvciBvdXQgYnkgY29uc3RydWN0b3Igc3VwZXIgJyArXG4gICAgICAndGFpbHJlYyB3aGVyZSBjb25zdCBpbm5lciBzdXNwZW5kIHR5cGVhbGlhcyBleHRlcm5hbCBleHBlY3QgYWN0dWFsICcgK1xuICAgICAgLy8gdG8gYmUgZGVsZXRlZCBzb29uXG4gICAgICAndHJhaXQgdm9sYXRpbGUgdHJhbnNpZW50IG5hdGl2ZSBkZWZhdWx0JyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdCeXRlIFNob3J0IENoYXIgSW50IExvbmcgQm9vbGVhbiBGbG9hdCBEb3VibGUgVm9pZCBVbml0IE5vdGhpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBudWxsJ1xuICB9O1xuICB2YXIgS0VZV09SRFNfV0lUSF9MQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogL1xcYihicmVha3xjb250aW51ZXxyZXR1cm58dGhpcylcXGIvLFxuICAgIHN0YXJ0czoge1xuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgYmVnaW46IC9AXFx3Ky9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcbiAgdmFyIExBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnQCdcbiAgfTtcblxuICAvLyBmb3Igc3RyaW5nIHRlbXBsYXRlc1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAnXFxcXCR7JywgZW5kOiAnfScsIGNvbnRhaW5zOiBbaGxqcy5DX05VTUJFUl9NT0RFXVxuICB9O1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLCBiZWdpbjogJ1xcXFwkJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCIoPz1bXlwiXSknLFxuICAgICAgICBjb250YWluczogW1ZBUklBQkxFLCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICAvLyBDYW4ndCB1c2UgYnVpbHQtaW4gbW9kZXMgZWFzaWx5LCBhcyB3ZSB3YW50IHRvIHVzZSBTVFJJTkcgaW4gdGhlIG1ldGFcbiAgICAgIC8vIGNvbnRleHQgYXMgJ21ldGEtc3RyaW5nJyBhbmQgdGhlcmUncyBubyBzeW50YXggdG8gcmVtb3ZlIGV4cGxpY2l0bHkgc2V0XG4gICAgICAvLyBjbGFzc05hbWVzIGluIGJ1aWx0LWluIG1vZGVzLlxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgVkFSSUFCTEUsIFNVQlNUXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMucHVzaChTVFJJTkcpXG5cbiAgdmFyIEFOTk9UQVRJT05fVVNFX1NJVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnQCg/OmZpbGV8cHJvcGVydHl8ZmllbGR8Z2V0fHNldHxyZWNlaXZlcnxwYXJhbXxzZXRwYXJhbXxkZWxlZ2F0ZSlcXFxccyo6KD86XFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpPydcbiAgfTtcbiAgdmFyIEFOTk9UQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnQCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChTVFJJTkcsIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZyd9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8va290bGlubGFuZy5vcmcvZG9jcy9yZWZlcmVuY2Uvd2hhdHNuZXcxMS5odG1sI3VuZGVyc2NvcmVzLWluLW51bWVyaWMtbGl0ZXJhbHNcbiAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2MgYWJvdmUsIHRoZSBudW1iZXIgbW9kZSBvZiBrb3RsaW4gaXMgdGhlIHNhbWUgYXMgamF2YSA4LFxuICAvLyBzbyB0aGUgY29kZSBiZWxvdyBpcyBjb3BpZWQgZnJvbSBqYXZhLmpzXG4gIHZhciBLT1RMSU5fTlVNQkVSX1JFID0gJ1xcXFxiJyArXG4gICAgJygnICtcbiAgICAgICcwW2JCXShbMDFdK1swMV9dK1swMV0rfFswMV0rKScgKyAvLyAwYi4uLlxuICAgICAgJ3wnICtcbiAgICAgICcwW3hYXShbYS1mQS1GMC05XStbYS1mQS1GMC05X10rW2EtZkEtRjAtOV0rfFthLWZBLUYwLTldKyknICsgLy8gMHguLi5cbiAgICAgICd8JyArXG4gICAgICAnKCcgK1xuICAgICAgICAnKFtcXFxcZF0rW1xcXFxkX10rW1xcXFxkXSt8W1xcXFxkXSspKFxcXFwuKFtcXFxcZF0rW1xcXFxkX10rW1xcXFxkXSt8W1xcXFxkXSspKT8nICtcbiAgICAgICAgJ3wnICtcbiAgICAgICAgJ1xcXFwuKFtcXFxcZF0rW1xcXFxkX10rW1xcXFxkXSt8W1xcXFxkXSspJyArXG4gICAgICAnKScgK1xuICAgICAgJyhbZUVdWy0rXT9cXFxcZCspPycgKyAvLyBvY3RhbCwgZGVjaW1hbCwgZmxvYXRcbiAgICAnKScgK1xuICAgICdbbExmRl0/JztcbiAgdmFyIEtPVExJTl9OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBLT1RMSU5fTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgS09UTElOX05FU1RFRF9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICcvXFxcXConLCAnXFxcXCovJyxcbiAgICB7IGNvbnRhaW5zOiBbIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUgXSB9XG4gICk7XG4gIHZhciBLT1RMSU5fUEFSRU5fVFlQRSA9IHtcbiAgICB2YXJpYW50czogW1xuXHQgIHsgY2xhc3NOYW1lOiAndHlwZScsXG5cdCAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG5cdCAgfSxcblx0ICB7IGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcblx0ICAgIGNvbnRhaW5zOiBbXSAvL2RlZmluZWQgbGF0ZXJcblx0ICB9XG5cdF1cbiAgfTtcbiAgdmFyIEtPVExJTl9QQVJFTl9UWVBFMiA9IEtPVExJTl9QQVJFTl9UWVBFO1xuICBLT1RMSU5fUEFSRU5fVFlQRTIudmFyaWFudHNbMV0uY29udGFpbnMgPSBbIEtPVExJTl9QQVJFTl9UWVBFIF07XG4gIEtPVExJTl9QQVJFTl9UWVBFLnZhcmlhbnRzWzFdLmNvbnRhaW5zID0gWyBLT1RMSU5fUEFSRU5fVFlQRTIgXTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsna3QnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnMgOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICBjb250YWlucyA6IFt7XG4gICAgICAgICAgICBjbGFzc05hbWUgOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIGJlZ2luIDogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVCxcbiAgICAgIEtFWVdPUkRTX1dJVEhfTEFCRUwsXG4gICAgICBMQUJFTCxcbiAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICBBTk5PVEFUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW4nLCBlbmQ6ICdbKF18JCcsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGlsbGVnYWw6IC9mdW5cXHMrKDwuKj4pP1teXFxzXFwoXSsoXFxzK1teXFxzXFwoXSspXFxzKj0vLFxuICAgICAgICByZWxldmFuY2U6IDUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi8sIGtleXdvcmRzOiAncmVpZmllZCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvOi8sIGVuZDogL1s9LFxcL10vLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAgS09UTElOX1BBUkVOX1RZUEUsXG4gICAgICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgICAgICBLT1RMSU5fTkVTVEVEX0NPTU1FTlRcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVCxcbiAgICAgICAgICAgICAgQU5OT1RBVElPTl9VU0VfU0lURSxcbiAgICAgICAgICAgICAgQU5OT1RBVElPTixcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UgdHJhaXQnLCBlbmQ6IC9bOlxceyhdfCQvLCAvLyByZW1vdmUgJ3RyYWl0JyB3aGVuIHJlbW92ZWQgZnJvbSBLRVlXT1JEU1xuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ3B1YmxpYyBwcm90ZWN0ZWQgaW50ZXJuYWwgcHJpdmF0ZSBjb25zdHJ1Y3Rvcid9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi8sIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogL1ssOl1cXHMqLywgZW5kOiAvWzxcXCgsXXwkLywgZXhjbHVkZUJlZ2luOiB0cnVlLCByZXR1cm5FbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICAgICAgQU5OT1RBVElPTlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IFwiXiMhL3Vzci9iaW4vZW52XCIsIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxuJ1xuICAgICAgfSxcbiAgICAgIEtPVExJTl9OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBMQVNTT19JREVOVF9SRSA9ICdbYS16QS1aX11bXFxcXHcuXSonO1xuICB2YXIgTEFTU09fQU5HTEVfUkUgPSAnPFxcXFw/KGxhc3NvKHNjcmlwdCk/fD0pJztcbiAgdmFyIExBU1NPX0NMT1NFX1JFID0gJ1xcXFxdfFxcXFw/Pic7XG4gIHZhciBMQVNTT19LRVlXT1JEUyA9IHtcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2Ugbm9uZSBtaW5pbWFsIGZ1bGwgYWxsIHZvaWQgYW5kIG9yIG5vdCAnICtcbiAgICAgICdidyBuYncgZXcgbmV3IGNuIG5jbiBsdCBsdGUgZ3QgZ3RlIGVxIG5lcSByeCBucnggZnQnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2FycmF5IGRhdGUgZGVjaW1hbCBkdXJhdGlvbiBpbnRlZ2VyIG1hcCBwYWlyIHN0cmluZyB0YWcgeG1sIG51bGwgJyArXG4gICAgICAnYm9vbGVhbiBieXRlcyBrZXl3b3JkIGxpc3QgbG9jYWxlIHF1ZXVlIHNldCBzdGFjayBzdGF0aWNhcnJheSAnICtcbiAgICAgICdsb2NhbCB2YXIgdmFyaWFibGUgZ2xvYmFsIGRhdGEgc2VsZiBpbmhlcml0ZWQgY3VycmVudGNhcHR1cmUgZ2l2ZW5ibG9jaycsXG4gICAga2V5d29yZDpcbiAgICAgICdjYWNoZSBkYXRhYmFzZV9uYW1lcyBkYXRhYmFzZV9zY2hlbWFuYW1lcyBkYXRhYmFzZV90YWJsZW5hbWVzICcgK1xuICAgICAgJ2RlZmluZV90YWcgZGVmaW5lX3R5cGUgZW1haWxfYmF0Y2ggZW5jb2RlX3NldCBodG1sX2NvbW1lbnQgaGFuZGxlICcgK1xuICAgICAgJ2hhbmRsZV9lcnJvciBoZWFkZXIgaWYgaW5saW5lIGl0ZXJhdGUgbGpheF90YXJnZXQgbGluayAnICtcbiAgICAgICdsaW5rX2N1cnJlbnRhY3Rpb24gbGlua19jdXJyZW50Z3JvdXAgbGlua19jdXJyZW50cmVjb3JkIGxpbmtfZGV0YWlsICcgK1xuICAgICAgJ2xpbmtfZmlyc3Rncm91cCBsaW5rX2ZpcnN0cmVjb3JkIGxpbmtfbGFzdGdyb3VwIGxpbmtfbGFzdHJlY29yZCAnICtcbiAgICAgICdsaW5rX25leHRncm91cCBsaW5rX25leHRyZWNvcmQgbGlua19wcmV2Z3JvdXAgbGlua19wcmV2cmVjb3JkIGxvZyAnICtcbiAgICAgICdsb29wIG5hbWVzcGFjZV91c2luZyBvdXRwdXRfbm9uZSBwb3J0YWwgcHJpdmF0ZSBwcm90ZWN0IHJlY29yZHMgJyArXG4gICAgICAncmVmZXJlciByZWZlcnJlciByZXBlYXRpbmcgcmVzdWx0c2V0IHJvd3Mgc2VhcmNoX2FyZ3MgJyArXG4gICAgICAnc2VhcmNoX2FyZ3VtZW50cyBzZWxlY3Qgc29ydF9hcmdzIHNvcnRfYXJndW1lbnRzIHRocmVhZF9hdG9taWMgJyArXG4gICAgICAndmFsdWVfbGlzdCB3aGlsZSBhYm9ydCBjYXNlIGVsc2UgZmFpbF9pZiBmYWlsX2lmbm90IGZhaWwgaWZfZW1wdHkgJyArXG4gICAgICAnaWZfZmFsc2UgaWZfbnVsbCBpZl90cnVlIGxvb3BfYWJvcnQgbG9vcF9jb250aW51ZSBsb29wX2NvdW50IHBhcmFtcyAnICtcbiAgICAgICdwYXJhbXNfdXAgcmV0dXJuIHJldHVybl92YWx1ZSBydW5fY2hpbGRyZW4gc29hcF9kZWZpbmV0YWcgJyArXG4gICAgICAnc29hcF9sYXN0cmVxdWVzdCBzb2FwX2xhc3RyZXNwb25zZSB0YWdfbmFtZSBhc2NlbmRpbmcgYXZlcmFnZSBieSAnICtcbiAgICAgICdkZWZpbmUgZGVzY2VuZGluZyBkbyBlcXVhbHMgZnJvemVuIGdyb3VwIGhhbmRsZV9mYWlsdXJlIGltcG9ydCBpbiAnICtcbiAgICAgICdpbnRvIGpvaW4gbGV0IG1hdGNoIG1heCBtaW4gb24gb3JkZXIgcGFyZW50IHByb3RlY3RlZCBwcm92aWRlIHB1YmxpYyAnICtcbiAgICAgICdyZXF1aXJlIHJldHVybmhvbWUgc2tpcCBzcGxpdF90aHJlYWQgc3VtIHRha2UgdGhyZWFkIHRvIHRyYWl0IHR5cGUgJyArXG4gICAgICAnd2hlcmUgd2l0aCB5aWVsZCB5aWVsZGhvbWUnXG4gIH07XG4gIHZhciBIVE1MX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzwhLS0nLFxuICAgICctLT4nLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgdmFyIExBU1NPX05PUFJPQ0VTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ1xcXFxbbm9wcm9jZXNzXFxcXF0nLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnXFxcXFsvbm9wcm9jZXNzXFxcXF0nLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgfVxuICB9O1xuICB2YXIgTEFTU09fU1RBUlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdcXFxcWy9ub3Byb2Nlc3N8JyArIExBU1NPX0FOR0xFX1JFXG4gIH07XG4gIHZhciBMQVNTT19EQVRBTUVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCcnICsgTEFTU09fSURFTlRfUkUgKyAnXFwnJ1xuICB9O1xuICB2YXIgTEFTU09fQ09ERSA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLCB7YmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnfCgtP2luZmluaXR5fE5hTilcXFxcYid9KSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJ1xuICAgIH0sXG4gICAgeyAvLyB2YXJpYWJsZXNcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1sjJF0nICsgTEFTU09fSURFTlRfUkVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnIycsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiAnOjpcXFxccyonLCBlbmQ6IExBU1NPX0lERU5UX1JFLFxuICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJy0oPyFpbmZpbml0eSknICsgTEFTU09fSURFTlRfUkUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJyhcXFxcLlxcXFwuXFxcXC4pJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogLygtPnxcXC4pXFxzKi8sXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW0xBU1NPX0RBVEFNRU1CRVJdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJyxcbiAgICAgIHJldHVybkVuZDogdHJ1ZSwgZW5kOiAnXFxcXCh8PT4nLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBMQVNTT19JREVOVF9SRSArICcoPSg/IT4pKT98Wy0rKi8lXSg/IT4pJ30pXG4gICAgICBdXG4gICAgfVxuICBdO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbHMnLCAnbGFzc29zY3JpcHQnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IExBU1NPX0lERU5UX1JFICsgJ3wmW2xnXXQ7JyxcbiAgICBrZXl3b3JkczogTEFTU09fS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiBMQVNTT19DTE9TRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IHsgLy8gbWFya3VwXG4gICAgICAgICAgZW5kOiAnXFxcXFt8JyArIExBU1NPX0FOR0xFX1JFLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBMQVNTT19OT1BST0NFU1MsXG4gICAgICBMQVNTT19TVEFSVCxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXFxcXFtub19zcXVhcmVfYnJhY2tldHMnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICdcXFxcWy9ub19zcXVhcmVfYnJhY2tldHNcXFxcXScsIC8vIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgbGFuZ3VhZ2VcbiAgICAgICAgICBsZXhlbWVzOiBMQVNTT19JREVOVF9SRSArICd8JltsZ110OycsXG4gICAgICAgICAga2V5d29yZHM6IExBU1NPX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogTEFTU09fQ0xPU0VfUkUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXFtub3Byb2Nlc3NcXFxcXXwnICsgTEFTU09fQU5HTEVfUkUsXG4gICAgICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbSFRNTF9DT01NRU5UXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTEFTU09fTk9QUk9DRVNTLFxuICAgICAgICAgICAgTEFTU09fU1RBUlRcbiAgICAgICAgICBdLmNvbmNhdChMQVNTT19DT0RFKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiMhJywgZW5kOidsYXNzbzkkJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIF0uY29uY2F0KExBU1NPX0NPREUpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXmRuJywgZW5kOiAnOiAnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBzdGFydHM6IHtlbmQ6ICckJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHcnLCBlbmQ6ICc6ICcsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN0YXJ0czoge2VuZDogJyQnLCByZWxldmFuY2U6IDB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdeLScsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICcjKycgKyAnW0EtWmEtel8wLTldKicgKyAnXFxcXCgnLFxuICAgICAgICBlbmQ6JyB7JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICcjKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnW0EtWmEtel9dW0EtWmEtel8wLTldKidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgICAgICAgIGVuZDogJ1wiJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnW0EtWmEtel9dW0EtWmEtel8wLTldKidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSAgICAgICAgPSAnW1xcXFx3LV0rJzsgLy8geWVzLCBMZXNzIGlkZW50aWZpZXJzIG1heSBiZWdpbiB3aXRoIGEgZGlnaXRcbiAgdmFyIElOVEVSUF9JREVOVF9SRSA9ICcoJyArIElERU5UX1JFICsgJ3xAeycgKyBJREVOVF9SRSArICd9KSc7XG5cbiAgLyogR2VuZXJpYyBNb2RlcyAqL1xuXG4gIHZhciBSVUxFUyA9IFtdLCBWQUxVRSA9IFtdOyAvLyBmb3J3YXJkIGRlZi4gZm9yIHJlY3Vyc2l2ZSBtb2Rlc1xuXG4gIHZhciBTVFJJTkdfTU9ERSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIHtcbiAgICAvLyBMZXNzIHN0cmluZ3MgYXJlIG5vdCBtdWx0aWxpbmUgKGFsc28gaW5jbHVkZSAnficgZm9yIG1vcmUgY29uc2lzdGVudCBjb2xvcmluZyBvZiBcImVzY2FwZWRcIiBzdHJpbmdzKVxuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAnfj8nICsgYyArICcuKj8nICsgY1xuICB9O307XG5cbiAgdmFyIElERU5UX01PREUgPSBmdW5jdGlvbihuYW1lLCBiZWdpbiwgcmVsZXZhbmNlKSB7IHJldHVybiB7XG4gICAgY2xhc3NOYW1lOiBuYW1lLCBiZWdpbjogYmVnaW4sIHJlbGV2YW5jZTogcmVsZXZhbmNlXG4gIH07fTtcblxuICB2YXIgUEFSRU5TX01PREUgPSB7XG4gICAgLy8gdXNlZCBvbmx5IHRvIHByb3Blcmx5IGJhbGFuY2UgbmVzdGVkIHBhcmVucyBpbnNpZGUgbWl4aW4gY2FsbCwgZGVmLiBhcmcgbGlzdFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiBWQUxVRSwgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLy8gZ2VuZXJpYyBMZXNzIGhpZ2hsaWdodGVyICh1c2VkIGFsbW9zdCBldmVyeXdoZXJlIGV4Y2VwdCBzZWxlY3RvcnMpOlxuICBWQUxVRS5wdXNoKFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIFNUUklOR19NT0RFKFwiJ1wiKSxcbiAgICBTVFJJTkdfTU9ERSgnXCInKSxcbiAgICBobGpzLkNTU19OVU1CRVJfTU9ERSwgLy8gZml4bWU6IGl0IGRvZXMgbm90IGluY2x1ZGUgZG90IGZvciBudW1iZXJzIGxpa2UgLjVlbSA6KFxuICAgIHtcbiAgICAgIGJlZ2luOiAnKHVybHxkYXRhLXVyaSlcXFxcKCcsXG4gICAgICBzdGFydHM6IHtjbGFzc05hbWU6ICdzdHJpbmcnLCBlbmQ6ICdbXFxcXClcXFxcbl0nLCBleGNsdWRlRW5kOiB0cnVlfVxuICAgIH0sXG4gICAgSURFTlRfTU9ERSgnbnVtYmVyJywgJyNbMC05QS1GYS1mXStcXFxcYicpLFxuICAgIFBBUkVOU19NT0RFLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0BAPycgKyBJREVOVF9SRSwgMTApLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0B7JyAgKyBJREVOVF9SRSArICd9JyksXG4gICAgSURFTlRfTU9ERSgnYnVpbHRfaW4nLCAnfj9gW15gXSo/YCcpLCAvLyBpbmxpbmUgamF2YXNjcmlwdCAob3Igd2hhdGV2ZXIgaG9zdCBsYW5ndWFnZSkgKm11bHRpbGluZSogc3RyaW5nXG4gICAgeyAvLyBAbWVkaWEgZmVhdHVyZXMgKGl04oCZcyBoZXJlIHRvIG5vdCBkdXBsaWNhdGUgdGhpbmdzIGluIEFUX1JVTEVfTU9ERSB3aXRoIGV4dHJhIFBBUkVOU19NT0RFIG92ZXJyaWRpbmcpOlxuICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJywgYmVnaW46IElERU5UX1JFICsgJ1xcXFxzKjonLCBlbmQ6ICc6JywgcmV0dXJuQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICchaW1wb3J0YW50J1xuICAgIH1cbiAgKTtcblxuICB2YXIgVkFMVUVfV0lUSF9SVUxFU0VUUyA9IFZBTFVFLmNvbmNhdCh7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsIGNvbnRhaW5zOiBSVUxFU1xuICB9KTtcblxuICB2YXIgTUlYSU5fR1VBUkRfTU9ERSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnd2hlbicsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luS2V5d29yZHM6ICdhbmQgbm90J31dLmNvbmNhdChWQUxVRSkgLy8gdXNpbmcgdGhpcyBmb3JtIHRvIG92ZXJyaWRlIFZBTFVF4oCZcyAnZnVuY3Rpb24nIG1hdGNoXG4gIH07XG5cbiAgLyogUnVsZS1MZXZlbCBNb2RlcyAqL1xuXG4gIHZhciBSVUxFX01PREUgPSB7XG4gICAgYmVnaW46IElOVEVSUF9JREVOVF9SRSArICdcXFxccyo6JywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJ1s7fV0nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLCBlbmQ6ICc6JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGlsbGVnYWw6ICdbPD0kXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBWQUxVRVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBVF9SVUxFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAKGltcG9ydHxtZWRpYXxjaGFyc2V0fGZvbnQtZmFjZXwoLVthLXpdKy0pP2tleWZyYW1lc3xzdXBwb3J0c3xkb2N1bWVudHxuYW1lc3BhY2V8cGFnZXx2aWV3cG9ydHxob3N0KVxcXFxiJyxcbiAgICBzdGFydHM6IHtlbmQ6ICdbO3t9XScsIHJldHVybkVuZDogdHJ1ZSwgY29udGFpbnM6IFZBTFVFLCByZWxldmFuY2U6IDB9XG4gIH07XG5cbiAgLy8gdmFyaWFibGUgZGVmaW5pdGlvbnMgYW5kIGNhbGxzXG4gIHZhciBWQVJfUlVMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gdXNpbmcgbW9yZSBzdHJpY3QgcGF0dGVybiBmb3IgaGlnaGVyIHJlbGV2YW5jZSB0byBpbmNyZWFzZSBjaGFuY2VzIG9mIExlc3MgZGV0ZWN0aW9uLlxuICAgICAgLy8gdGhpcyBpcyAqdGhlIG9ubHkqIExlc3Mgc3BlY2lmaWMgc3RhdGVtZW50IHVzZWQgaW4gbW9zdCBvZiB0aGUgc291cmNlcywgc28uLi5cbiAgICAgIC8vICh3ZeKAmWxsIHN0aWxsIG9mdGVuIGxvb3NlIHRvIHRoZSBjc3MtcGFyc2VyIHVubGVzcyB0aGVyZSdzICcvLycgY29tbWVudCxcbiAgICAgIC8vIHNpbXBseSBiZWNhdXNlIDEgdmFyaWFibGUganVzdCBjYW4ndCBiZWF0IDk5IHByb3BlcnRpZXMgOilcbiAgICAgIHtiZWdpbjogJ0AnICsgSURFTlRfUkUgKyAnXFxcXHMqOicsIHJlbGV2YW5jZTogMTV9LFxuICAgICAge2JlZ2luOiAnQCcgKyBJREVOVF9SRX1cbiAgICBdLFxuICAgIHN0YXJ0czoge2VuZDogJ1s7fV0nLCByZXR1cm5FbmQ6IHRydWUsIGNvbnRhaW5zOiBWQUxVRV9XSVRIX1JVTEVTRVRTfVxuICB9O1xuXG4gIHZhciBTRUxFQ1RPUl9NT0RFID0ge1xuICAgIC8vIGZpcnN0IHBhcnNlIHVuYW1iaWd1b3VzIHNlbGVjdG9ycyAoaS5lLiB0aG9zZSBub3Qgc3RhcnRpbmcgd2l0aCB0YWcpXG4gICAgLy8gdGhlbiBmYWxsIGludG8gdGhlIHNjYXJ5IGxvb2thaGVhZC1kaXNjcmltaW5hdG9yIHZhcmlhbnQuXG4gICAgLy8gdGhpcyBtb2RlIGFsc28gaGFuZGxlcyBtaXhpbiBkZWZpbml0aW9ucyBhbmQgY2FsbHNcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAnW1xcXFwuIzomXFxcXFs+XScsIGVuZDogJ1s7e31dJyAgLy8gbWl4aW4gY2FsbHMgZW5kIHdpdGggJzsnXG4gICAgICB9LCB7XG4gICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLCBlbmQ6ICd7J1xuICAgIH1dLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJldHVybkVuZDogICB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPD1cXCckXCJdJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBNSVhJTl9HVUFSRF9NT0RFLFxuICAgICAgSURFTlRfTU9ERSgna2V5d29yZCcsICAnYWxsXFxcXGInKSxcbiAgICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0B7JyAgKyBJREVOVF9SRSArICd9JyksICAgICAvLyBvdGhlcndpc2UgaXTigJlzIGlkZW50aWZpZWQgYXMgdGFnXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAgSU5URVJQX0lERU5UX1JFICsgJyU/JywgMCksIC8vICclJyBmb3IgbW9yZSBjb25zaXN0ZW50IGNvbG9yaW5nIG9mIEBrZXlmcmFtZXMgXCJ0YWdzXCJcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWlkJywgJyMnICsgSU5URVJQX0lERU5UX1JFKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWNsYXNzJywgJ1xcXFwuJyArIElOVEVSUF9JREVOVF9SRSwgMCksXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAgJyYnLCAwKSxcbiAgICAgIHtjbGFzc05hbWU6ICdzZWxlY3Rvci1hdHRyJywgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJ30sXG4gICAgICB7Y2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJywgYmVnaW46IC86KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcIicuXSsvfSxcbiAgICAgIHtiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU30sIC8vIGFyZ3VtZW50IGxpc3Qgb2YgcGFyYW1ldHJpYyBtaXhpbnNcbiAgICAgIHtiZWdpbjogJyFpbXBvcnRhbnQnfSAvLyBlYXQgIWltcG9ydGFudCBhZnRlciBtaXhpbiBjYWxsIG9yIGl0IHdpbGwgYmUgY29sb3JlZCBhcyB0YWdcbiAgICBdXG4gIH07XG5cbiAgUlVMRVMucHVzaChcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBBVF9SVUxFX01PREUsXG4gICAgVkFSX1JVTEVfTU9ERSxcbiAgICBSVUxFX01PREUsXG4gICAgU0VMRUNUT1JfTU9ERVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnWz0+XFwnLzwoJFwiXScsXG4gICAgY29udGFpbnM6IFJVTEVTXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTElTUF9JREVOVF9SRSA9ICdbYS16QS1aX1xcXFwtXFxcXCtcXFxcKlxcXFwvXFxcXDxcXFxcPVxcXFw+XFxcXCZcXFxcI11bYS16QS1aMC05X1xcXFwtXFxcXCtcXFxcKlxcXFwvXFxcXDxcXFxcPVxcXFw+XFxcXCZcXFxcIyFdKic7XG4gIHZhciBNRUNfUkUgPSAnXFxcXHxbXl0qP1xcXFx8JztcbiAgdmFyIExJU1BfU0lNUExFX05VTUJFUl9SRSA9ICcoXFxcXC18XFxcXCspP1xcXFxkKyhcXFxcLlxcXFxkK3xcXFxcL1xcXFxkKyk/KChkfGV8ZnxsfHN8RHxFfEZ8THxTKShcXFxcK3xcXFxcLSk/XFxcXGQrKT8nO1xuICB2YXIgU0hFQkFORyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsIGVuZDogJyQnXG4gIH07XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAnXFxcXGIodHsxfXxuaWwpXFxcXGInXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiBMSVNQX1NJTVBMRV9OVU1CRVJfUkUsIHJlbGV2YW5jZTogMH0sXG4gICAgICB7YmVnaW46ICcjKGJ8QilbMC0xXSsoL1swLTFdKyk/J30sXG4gICAgICB7YmVnaW46ICcjKG98TylbMC03XSsoL1swLTddKyk/J30sXG4gICAgICB7YmVnaW46ICcjKHh8WClbMC05YS1mQS1GXSsoL1swLTlhLWZBLUZdKyk/J30sXG4gICAgICB7YmVnaW46ICcjKGN8QylcXFxcKCcgKyBMSVNQX1NJTVBMRV9OVU1CRVJfUkUgKyAnICsnICsgTElTUF9TSU1QTEVfTlVNQkVSX1JFLCBlbmQ6ICdcXFxcKSd9XG4gICAgXVxuICB9O1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSk7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JywgJyQnLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGJlZ2luOiAnXFxcXConLCBlbmQ6ICdcXFxcKidcbiAgfTtcbiAgdmFyIEtFWVdPUkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1s6Jl0nICsgTElTUF9JREVOVF9SRVxuICB9O1xuICB2YXIgSURFTlQgPSB7XG4gICAgYmVnaW46IExJU1BfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBNRUMgPSB7XG4gICAgYmVnaW46IE1FQ19SRVxuICB9O1xuICB2YXIgUVVPVEVEX0xJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogWydzZWxmJywgTElURVJBTCwgU1RSSU5HLCBOVU1CRVIsIElERU5UXVxuICB9O1xuICB2YXIgUVVPVEVEID0ge1xuICAgIGNvbnRhaW5zOiBbTlVNQkVSLCBTVFJJTkcsIFZBUklBQkxFLCBLRVlXT1JELCBRVU9URURfTElTVCwgSURFTlRdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW1xcJ2BdXFxcXCgnLCBlbmQ6ICdcXFxcKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXChxdW90ZSAnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGtleXdvcmRzOiB7bmFtZTogJ3F1b3RlJ31cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnJyArIE1FQ19SRVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFRF9BVE9NID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXCcnICsgTElTUF9JREVOVF9SRX0sXG4gICAgICB7YmVnaW46ICcjXFwnJyArIExJU1BfSURFTlRfUkUgKyAnKDo6JyArIExJU1BfSURFTlRfUkUgKyAnKSonfVxuICAgIF1cbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKFxcXFxzKicsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgTElTVC5jb250YWlucyA9IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtiZWdpbjogTElTUF9JREVOVF9SRX0sXG4gICAgICAgIHtiZWdpbjogTUVDX1JFfVxuICAgICAgXVxuICAgIH0sXG4gICAgQk9EWVxuICBdO1xuICBCT0RZLmNvbnRhaW5zID0gW1FVT1RFRCwgUVVPVEVEX0FUT00sIExJU1QsIExJVEVSQUwsIE5VTUJFUiwgU1RSSU5HLCBDT01NRU5ULCBWQVJJQUJMRSwgS0VZV09SRCwgTUVDLCBJREVOVF07XG5cbiAgcmV0dXJuIHtcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgTlVNQkVSLFxuICAgICAgU0hFQkFORyxcbiAgICAgIExJVEVSQUwsXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01NRU5ULFxuICAgICAgUVVPVEVELFxuICAgICAgUVVPVEVEX0FUT00sXG4gICAgICBMSVNULFxuICAgICAgSURFTlRcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxcYihbZ3Rwc11bQS1aXXsxfVthLXpBLVowLTldKikoXFxcXFsuK1xcXFxdKT8oPzpcXFxccyo/KSd9LFxuICAgICAge2JlZ2luOiAnXFxcXCRfW0EtWl0rJ31cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgaGxqcy5DT01NRU5UKCdbXjpdLy8nLCAnJCcpXG4gIF07XG4gIHZhciBUSVRMRTEgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJ1xcXFxiXypyaWdbQS1aXStbQS1aYS16MC05X1xcXFwtXSonfSxcbiAgICAgIHtiZWdpbjogJ1xcXFxiX1thLXowLTlcXFxcLV0rJ31cbiAgICBdXG4gIH0pO1xuICB2YXIgVElUTEUyID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnXFxcXGIoW0EtWmEtejAtOV9cXFxcLV0rKVxcXFxiJ30pO1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnJF9DT09LSUUgJF9GSUxFUyAkX0dFVCAkX0dFVF9CSU5BUlkgJF9HRVRfUkFXICRfUE9TVCAkX1BPU1RfQklOQVJZICRfUE9TVF9SQVcgJF9TRVNTSU9OICRfU0VSVkVSICcgK1xuICAgICAgICAnY29kZXBvaW50IGNvZGVwb2ludHMgc2VnbWVudCBzZWdtZW50cyBjb2RldW5pdCBjb2RldW5pdHMgc2VudGVuY2Ugc2VudGVuY2VzIHRydWVXb3JkIHRydWVXb3JkcyBwYXJhZ3JhcGggJyArXG4gICAgICAgICdhZnRlciBieXRlIGJ5dGVzIGVuZ2xpc2ggdGhlIHVudGlsIGh0dHAgZm9yZXZlciBkZXNjZW5kaW5nIHVzaW5nIGxpbmUgcmVhbDggd2l0aCBzZXZlbnRoICcgK1xuICAgICAgICAnZm9yIHN0ZG91dCBmaW5hbGx5IGVsZW1lbnQgd29yZCB3b3JkcyBmb3VydGggYmVmb3JlIGJsYWNrIG5pbnRoIHNpeHRoIGNoYXJhY3RlcnMgY2hhcnMgc3RkZXJyICcgK1xuICAgICAgICAndUludDEgdUludDFzIHVJbnQyIHVJbnQycyBzdGRpbiBzdHJpbmcgbGluZXMgcmVsYXRpdmUgcmVsIGFueSBmaWZ0aCBpdGVtcyBmcm9tIG1pZGRsZSBtaWQgJyArXG4gICAgICAgICdhdCBlbHNlIG9mIGNhdGNoIHRoZW4gdGhpcmQgaXQgZmlsZSBtaWxsaXNlY29uZHMgc2Vjb25kcyBzZWNvbmQgc2VjcyBzZWMgaW50MSBpbnQxcyBpbnQ0ICcgK1xuICAgICAgICAnaW50NHMgaW50ZXJuZXQgaW50MiBpbnQycyBub3JtYWwgdGV4dCBpdGVtIGxhc3QgbG9uZyBkZXRhaWxlZCBlZmZlY3RpdmUgdUludDQgdUludDRzIHJlcGVhdCAnICtcbiAgICAgICAgJ2VuZCByZXBlYXQgVVJMIGluIHRyeSBpbnRvIHN3aXRjaCB0byB3b3JkcyBodHRwcyB0b2tlbiBiaW5maWxlIGVhY2ggdGVudGggYXMgdGlja3MgdGljayAnICtcbiAgICAgICAgJ3N5c3RlbSByZWFsNCBieSBkYXRlSXRlbXMgd2l0aG91dCBjaGFyIGNoYXJhY3RlciBhc2NlbmRpbmcgZWlnaHRoIHdob2xlIGRhdGVUaW1lIG51bWVyaWMgc2hvcnQgJyArXG4gICAgICAgICdmaXJzdCBmdHAgaW50ZWdlciBhYmJyZXZpYXRlZCBhYmJyIGFiYnJldiBwcml2YXRlIGNhc2Ugd2hpbGUgaWYgJyArXG4gICAgICAgICdkaXYgbW9kIHdyYXAgYW5kIG9yIGJpdEFuZCBiaXROb3QgYml0T3IgYml0WG9yIGFtb25nIG5vdCBpbiBhIGFuIHdpdGhpbiAnICtcbiAgICAgICAgJ2NvbnRhaW5zIGVuZHMgd2l0aCBiZWdpbnMgdGhlIGtleXMgb2Yga2V5cycsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnU0lYIFRFTiBGT1JNRkVFRCBOSU5FIFpFUk8gTk9ORSBTUEFDRSBGT1VSIEZBTFNFIENPTE9OIENSTEYgUEkgQ09NTUEgRU5ET0ZGSUxFIEVPRiBFSUdIVCBGSVZFICcgK1xuICAgICAgICAnUVVPVEUgRU1QVFkgT05FIFRSVUUgUkVUVVJOIENSIExJTkVGRUVEIFJJR0hUIEJBQ0tTTEFTSCBOVUxMIFNFVkVOIFRBQiBUSFJFRSBUV08gJyArXG4gICAgICAgICdzaXggdGVuIGZvcm1mZWVkIG5pbmUgemVybyBub25lIHNwYWNlIGZvdXIgZmFsc2UgY29sb24gY3JsZiBwaSBjb21tYSBlbmRvZmZpbGUgZW9mIGVpZ2h0IGZpdmUgJyArXG4gICAgICAgICdxdW90ZSBlbXB0eSBvbmUgdHJ1ZSByZXR1cm4gY3IgbGluZWZlZWQgcmlnaHQgYmFja3NsYXNoIG51bGwgc2V2ZW4gdGFiIHRocmVlIHR3byAnICtcbiAgICAgICAgJ1JJVkVSU0lPTiBSSVNUQVRFIEZJTEVfUkVBRF9NT0RFIEZJTEVfV1JJVEVfTU9ERSBGSUxFX1dSSVRFX01PREUgRElSX1dSSVRFX01PREUgRklMRV9SRUFEX1VNQVNLICcgK1xuICAgICAgICAnRklMRV9XUklURV9VTUFTSyBESVJfUkVBRF9VTUFTSyBESVJfV1JJVEVfVU1BU0snLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdwdXQgYWJzIGFjb3MgYWxpYXNSZWZlcmVuY2UgYW5udWl0eSBhcnJheURlY29kZSBhcnJheUVuY29kZSBhc2luIGF0YW4gYXRhbjIgYXZlcmFnZSBhdmcgYXZnRGV2IGJhc2U2NERlY29kZSAnICtcbiAgICAgICAgJ2Jhc2U2NEVuY29kZSBiYXNlQ29udmVydCBiaW5hcnlEZWNvZGUgYmluYXJ5RW5jb2RlIGJ5dGVPZmZzZXQgYnl0ZVRvTnVtIGNhY2hlZFVSTCBjYWNoZWRVUkxzIGNoYXJUb051bSAnICtcbiAgICAgICAgJ2NpcGhlck5hbWVzIGNvZGVwb2ludE9mZnNldCBjb2RlcG9pbnRQcm9wZXJ0eSBjb2RlcG9pbnRUb051bSBjb2RldW5pdE9mZnNldCBjb21tYW5kTmFtZXMgY29tcG91bmQgY29tcHJlc3MgJyArXG4gICAgICAgICdjb25zdGFudE5hbWVzIGNvcyBkYXRlIGRhdGVGb3JtYXQgZGVjb21wcmVzcyBkaWZmZXJlbmNlIGRpcmVjdG9yaWVzICcgK1xuICAgICAgICAnZGlza1NwYWNlIEROU1NlcnZlcnMgZXhwIGV4cDEgZXhwMiBleHAxMCBleHRlbnRzIGZpbGVzIGZsdXNoRXZlbnRzIGZvbGRlcnMgZm9ybWF0IGZ1bmN0aW9uTmFtZXMgZ2VvbWV0cmljTWVhbiBnbG9iYWwgJyArXG4gICAgICAgICdnbG9iYWxzIGhhc01lbW9yeSBoYXJtb25pY01lYW4gaG9zdEFkZHJlc3MgaG9zdEFkZHJlc3NUb05hbWUgaG9zdE5hbWUgaG9zdE5hbWVUb0FkZHJlc3MgaXNOdW1iZXIgSVNPVG9NYWMgaXRlbU9mZnNldCAnICtcbiAgICAgICAgJ2tleXMgbGVuIGxlbmd0aCBsaWJVUkxFcnJvckRhdGEgbGliVXJsRm9ybURhdGEgbGliVVJMZnRwQ29tbWFuZCBsaWJVUkxMYXN0SFRUUEhlYWRlcnMgbGliVVJMTGFzdFJISGVhZGVycyAnICtcbiAgICAgICAgJ2xpYlVybE11bHRpcGFydEZvcm1BZGRQYXJ0IGxpYlVybE11bHRpcGFydEZvcm1EYXRhIGxpYlVSTFZlcnNpb24gbGluZU9mZnNldCBsbiBsbjEgbG9jYWxOYW1lcyBsb2cgbG9nMiBsb2cxMCAnICtcbiAgICAgICAgJ2xvbmdGaWxlUGF0aCBsb3dlciBtYWNUb0lTTyBtYXRjaENodW5rIG1hdGNoVGV4dCBtYXRyaXhNdWx0aXBseSBtYXggbWQ1RGlnZXN0IG1lZGlhbiBtZXJnZSBtZXNzYWdlQXV0aGVudGljYXRpb25Db2RlIG1lc3NhZ2VEaWdlc3QgbWlsbGlzZWMgJyArXG4gICAgICAgICdtaWxsaXNlY3MgbWlsbGlzZWNvbmQgbWlsbGlzZWNvbmRzIG1pbiBtb250aE5hbWVzIG5hdGl2ZUNoYXJUb051bSBub3JtYWxpemVUZXh0IG51bSBudW1iZXIgbnVtVG9CeXRlIG51bVRvQ2hhciAnICtcbiAgICAgICAgJ251bVRvQ29kZXBvaW50IG51bVRvTmF0aXZlQ2hhciBvZmZzZXQgb3BlbiBvcGVuZmlsZXMgb3BlblByb2Nlc3NlcyBvcGVuUHJvY2Vzc0lEcyBvcGVuU29ja2V0cyAnICtcbiAgICAgICAgJ3BhcmFncmFwaE9mZnNldCBwYXJhbUNvdW50IHBhcmFtIHBhcmFtcyBwZWVyQWRkcmVzcyBwZW5kaW5nTWVzc2FnZXMgcGxhdGZvcm0gcG9wU3RkRGV2IHBvcHVsYXRpb25TdGFuZGFyZERldmlhdGlvbiAnICtcbiAgICAgICAgJ3BvcHVsYXRpb25WYXJpYW5jZSBwb3BWYXJpYW5jZSBwcm9jZXNzSUQgcmFuZG9tIHJhbmRvbUJ5dGVzIHJlcGxhY2VUZXh0IHJlc3VsdCByZXZDcmVhdGVYTUxUcmVlIHJldkNyZWF0ZVhNTFRyZWVGcm9tRmlsZSAnICtcbiAgICAgICAgJ3JldkN1cnJlbnRSZWNvcmQgcmV2Q3VycmVudFJlY29yZElzRmlyc3QgcmV2Q3VycmVudFJlY29yZElzTGFzdCByZXZEYXRhYmFzZUNvbHVtbkNvdW50IHJldkRhdGFiYXNlQ29sdW1uSXNOdWxsICcgK1xuICAgICAgICAncmV2RGF0YWJhc2VDb2x1bW5MZW5ndGhzIHJldkRhdGFiYXNlQ29sdW1uTmFtZXMgcmV2RGF0YWJhc2VDb2x1bW5OYW1lZCByZXZEYXRhYmFzZUNvbHVtbk51bWJlcmVkICcgK1xuICAgICAgICAncmV2RGF0YWJhc2VDb2x1bW5UeXBlcyByZXZEYXRhYmFzZUNvbm5lY3RSZXN1bHQgcmV2RGF0YWJhc2VDdXJzb3JzIHJldkRhdGFiYXNlSUQgcmV2RGF0YWJhc2VUYWJsZU5hbWVzICcgK1xuICAgICAgICAncmV2RGF0YWJhc2VUeXBlIHJldkRhdGFGcm9tUXVlcnkgcmV2ZGJfY2xvc2VDdXJzb3IgcmV2ZGJfY29sdW1uYnludW1iZXIgcmV2ZGJfY29sdW1uY291bnQgcmV2ZGJfY29sdW1uaXNudWxsICcgK1xuICAgICAgICAncmV2ZGJfY29sdW1ubGVuZ3RocyByZXZkYl9jb2x1bW5uYW1lcyByZXZkYl9jb2x1bW50eXBlcyByZXZkYl9jb21taXQgcmV2ZGJfY29ubmVjdCByZXZkYl9jb25uZWN0aW9ucyAnICtcbiAgICAgICAgJ3JldmRiX2Nvbm5lY3Rpb25lcnIgcmV2ZGJfY3VycmVudHJlY29yZCByZXZkYl9jdXJzb3Jjb25uZWN0aW9uIHJldmRiX2N1cnNvcmVyciByZXZkYl9jdXJzb3JzIHJldmRiX2RidHlwZSAnICtcbiAgICAgICAgJ3JldmRiX2Rpc2Nvbm5lY3QgcmV2ZGJfZXhlY3V0ZSByZXZkYl9pc2VvZiByZXZkYl9pc2JvZiByZXZkYl9tb3ZlZmlyc3QgcmV2ZGJfbW92ZWxhc3QgcmV2ZGJfbW92ZW5leHQgJyArXG4gICAgICAgICdyZXZkYl9tb3ZlcHJldiByZXZkYl9xdWVyeSByZXZkYl9xdWVyeWxpc3QgcmV2ZGJfcmVjb3JkY291bnQgcmV2ZGJfcm9sbGJhY2sgcmV2ZGJfdGFibGVuYW1lcyAnICtcbiAgICAgICAgJ3JldkdldERhdGFiYXNlRHJpdmVyUGF0aCByZXZOdW1iZXJPZlJlY29yZHMgcmV2T3BlbkRhdGFiYXNlIHJldk9wZW5EYXRhYmFzZXMgcmV2UXVlcnlEYXRhYmFzZSAnICtcbiAgICAgICAgJ3JldlF1ZXJ5RGF0YWJhc2VCbG9iIHJldlF1ZXJ5UmVzdWx0IHJldlF1ZXJ5SXNBdFN0YXJ0IHJldlF1ZXJ5SXNBdEVuZCByZXZVbml4RnJvbU1hY1BhdGggcmV2WE1MQXR0cmlidXRlICcgK1xuICAgICAgICAncmV2WE1MQXR0cmlidXRlcyByZXZYTUxBdHRyaWJ1dGVWYWx1ZXMgcmV2WE1MQ2hpbGRDb250ZW50cyByZXZYTUxDaGlsZE5hbWVzIHJldlhNTENyZWF0ZVRyZWVGcm9tRmlsZVdpdGhOYW1lc3BhY2VzICcgK1xuICAgICAgICAncmV2WE1MQ3JlYXRlVHJlZVdpdGhOYW1lc3BhY2VzIHJldlhNTERhdGFGcm9tWFBhdGhRdWVyeSByZXZYTUxFdmFsdWF0ZVhQYXRoIHJldlhNTEZpcnN0Q2hpbGQgcmV2WE1MTWF0Y2hpbmdOb2RlICcgK1xuICAgICAgICAncmV2WE1MTmV4dFNpYmxpbmcgcmV2WE1MTm9kZUNvbnRlbnRzIHJldlhNTE51bWJlck9mQ2hpbGRyZW4gcmV2WE1MUGFyZW50IHJldlhNTFByZXZpb3VzU2libGluZyAnICtcbiAgICAgICAgJ3JldlhNTFJvb3ROb2RlIHJldlhNTFJQQ19DcmVhdGVSZXF1ZXN0IHJldlhNTFJQQ19Eb2N1bWVudHMgcmV2WE1MUlBDX0Vycm9yICcgK1xuICAgICAgICAncmV2WE1MUlBDX0dldEhvc3QgcmV2WE1MUlBDX0dldE1ldGhvZCByZXZYTUxSUENfR2V0UGFyYW0gcmV2WE1MVGV4dCByZXZYTUxSUENfRXhlY3V0ZSAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19HZXRQYXJhbUNvdW50IHJldlhNTFJQQ19HZXRQYXJhbU5vZGUgcmV2WE1MUlBDX0dldFBhcmFtVHlwZSByZXZYTUxSUENfR2V0UGF0aCByZXZYTUxSUENfR2V0UG9ydCAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19HZXRQcm90b2NvbCByZXZYTUxSUENfR2V0UmVxdWVzdCByZXZYTUxSUENfR2V0UmVzcG9uc2UgcmV2WE1MUlBDX0dldFNvY2tldCByZXZYTUxUcmVlICcgK1xuICAgICAgICAncmV2WE1MVHJlZXMgcmV2WE1MVmFsaWRhdGVEVEQgcmV2WmlwRGVzY3JpYmVJdGVtIHJldlppcEVudW1lcmF0ZUl0ZW1zIHJldlppcE9wZW5BcmNoaXZlcyByb3VuZCBzYW1wVmFyaWFuY2UgJyArXG4gICAgICAgICdzZWMgc2VjcyBzZWNvbmRzIHNlbnRlbmNlT2Zmc2V0IHNoYTFEaWdlc3Qgc2hlbGwgc2hvcnRGaWxlUGF0aCBzaW4gc3BlY2lhbEZvbGRlclBhdGggc3FydCBzdGFuZGFyZERldmlhdGlvbiBzdGF0Um91bmQgJyArXG4gICAgICAgICdzdGREZXYgc3VtIHN5c0Vycm9yIHN5c3RlbVZlcnNpb24gdGFuIHRlbXBOYW1lIHRleHREZWNvZGUgdGV4dEVuY29kZSB0aWNrIHRpY2tzIHRpbWUgdG8gdG9rZW5PZmZzZXQgdG9Mb3dlciB0b1VwcGVyICcgK1xuICAgICAgICAndHJhbnNwb3NlIHRydWV3b3JkT2Zmc2V0IHRydW5jIHVuaURlY29kZSB1bmlFbmNvZGUgdXBwZXIgVVJMRGVjb2RlIFVSTEVuY29kZSBVUkxTdGF0dXMgdXVpZCB2YWx1ZSB2YXJpYWJsZU5hbWVzICcgK1xuICAgICAgICAndmFyaWFuY2UgdmVyc2lvbiB3YWl0RGVwdGggd2Vla2RheU5hbWVzIHdvcmRPZmZzZXQgeHNsdEFwcGx5U3R5bGVzaGVldCB4c2x0QXBwbHlTdHlsZXNoZWV0RnJvbUZpbGUgeHNsdExvYWRTdHlsZXNoZWV0ICcgK1xuICAgICAgICAneHNsdExvYWRTdHlsZXNoZWV0RnJvbUZpbGUgYWRkIGJyZWFrcG9pbnQgY2FuY2VsIGNsZWFyIGxvY2FsIHZhcmlhYmxlIGZpbGUgd29yZCBsaW5lIGZvbGRlciBkaXJlY3RvcnkgVVJMIGNsb3NlIHNvY2tldCBwcm9jZXNzICcgK1xuICAgICAgICAnY29tYmluZSBjb25zdGFudCBjb252ZXJ0IGNyZWF0ZSBuZXcgYWxpYXMgZm9sZGVyIGRpcmVjdG9yeSBkZWNyeXB0IGRlbGV0ZSB2YXJpYWJsZSB3b3JkIGxpbmUgZm9sZGVyICcgK1xuICAgICAgICAnZGlyZWN0b3J5IFVSTCBkaXNwYXRjaCBkaXZpZGUgZG8gZW5jcnlwdCBmaWx0ZXIgZ2V0IGluY2x1ZGUgaW50ZXJzZWN0IGtpbGwgbGliVVJMRG93bmxvYWRUb0ZpbGUgJyArXG4gICAgICAgICdsaWJVUkxGb2xsb3dIdHRwUmVkaXJlY3RzIGxpYlVSTGZ0cFVwbG9hZCBsaWJVUkxmdHBVcGxvYWRGaWxlIGxpYlVSTHJlc2V0QWxsIGxpYlVybFNldEF1dGhDYWxsYmFjayBsaWJVUkxTZXREcml2ZXIgJyArXG4gICAgICAgICdsaWJVUkxTZXRDdXN0b21IVFRQSGVhZGVycyBsaWJVcmxTZXRFeHBlY3QxMDAgbGliVVJMU2V0RlRQTGlzdENvbW1hbmQgbGliVVJMU2V0RlRQTW9kZSBsaWJVUkxTZXRGVFBTdG9wVGltZSAnICtcbiAgICAgICAgJ2xpYlVSTFNldFN0YXR1c0NhbGxiYWNrIGxvYWQgZXh0ZW5zaW9uIGxvYWRlZEV4dGVuc2lvbnMgbXVsdGlwbHkgc29ja2V0IHByZXBhcmUgcHJvY2VzcyBwb3N0IHNlZWsgcmVsIHJlbGF0aXZlIHJlYWQgZnJvbSBwcm9jZXNzIHJlbmFtZSAnICtcbiAgICAgICAgJ3JlcGxhY2UgcmVxdWlyZSByZXNldEFsbCByZXNvbHZlIHJldkFkZFhNTE5vZGUgcmV2QXBwZW5kWE1MIHJldkNsb3NlQ3Vyc29yIHJldkNsb3NlRGF0YWJhc2UgcmV2Q29tbWl0RGF0YWJhc2UgJyArXG4gICAgICAgICdyZXZDb3B5RmlsZSByZXZDb3B5Rm9sZGVyIHJldkNvcHlYTUxOb2RlIHJldkRlbGV0ZUZvbGRlciByZXZEZWxldGVYTUxOb2RlIHJldkRlbGV0ZUFsbFhNTFRyZWVzICcgK1xuICAgICAgICAncmV2RGVsZXRlWE1MVHJlZSByZXZFeGVjdXRlU1FMIHJldkdvVVJMIHJldkluc2VydFhNTE5vZGUgcmV2TW92ZUZvbGRlciByZXZNb3ZlVG9GaXJzdFJlY29yZCByZXZNb3ZlVG9MYXN0UmVjb3JkICcgK1xuICAgICAgICAncmV2TW92ZVRvTmV4dFJlY29yZCByZXZNb3ZlVG9QcmV2aW91c1JlY29yZCByZXZNb3ZlVG9SZWNvcmQgcmV2TW92ZVhNTE5vZGUgcmV2UHV0SW50b1hNTE5vZGUgcmV2Um9sbEJhY2tEYXRhYmFzZSAnICtcbiAgICAgICAgJ3JldlNldERhdGFiYXNlRHJpdmVyUGF0aCByZXZTZXRYTUxBdHRyaWJ1dGUgcmV2WE1MUlBDX0FkZFBhcmFtIHJldlhNTFJQQ19EZWxldGVBbGxEb2N1bWVudHMgcmV2WE1MQWRkRFREICcgK1xuICAgICAgICAncmV2WE1MUlBDX0ZyZWUgcmV2WE1MUlBDX0ZyZWVBbGwgcmV2WE1MUlBDX0RlbGV0ZURvY3VtZW50IHJldlhNTFJQQ19EZWxldGVQYXJhbSByZXZYTUxSUENfU2V0SG9zdCAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19TZXRNZXRob2QgcmV2WE1MUlBDX1NldFBvcnQgcmV2WE1MUlBDX1NldFByb3RvY29sIHJldlhNTFJQQ19TZXRTb2NrZXQgcmV2WmlwQWRkSXRlbVdpdGhEYXRhICcgK1xuICAgICAgICAncmV2WmlwQWRkSXRlbVdpdGhGaWxlIHJldlppcEFkZFVuY29tcHJlc3NlZEl0ZW1XaXRoRGF0YSByZXZaaXBBZGRVbmNvbXByZXNzZWRJdGVtV2l0aEZpbGUgcmV2WmlwQ2FuY2VsICcgK1xuICAgICAgICAncmV2WmlwQ2xvc2VBcmNoaXZlIHJldlppcERlbGV0ZUl0ZW0gcmV2WmlwRXh0cmFjdEl0ZW1Ub0ZpbGUgcmV2WmlwRXh0cmFjdEl0ZW1Ub1ZhcmlhYmxlIHJldlppcFNldFByb2dyZXNzQ2FsbGJhY2sgJyArXG4gICAgICAgICdyZXZaaXBSZW5hbWVJdGVtIHJldlppcFJlcGxhY2VJdGVtV2l0aERhdGEgcmV2WmlwUmVwbGFjZUl0ZW1XaXRoRmlsZSByZXZaaXBPcGVuQXJjaGl2ZSBzZW5kIHNldCBzb3J0IHNwbGl0IHN0YXJ0IHN0b3AgJyArXG4gICAgICAgICdzdWJ0cmFjdCBzeW1tZXRyaWMgdW5pb24gdW5sb2FkIHZlY3RvckRvdFByb2R1Y3Qgd2FpdCB3cml0ZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJlbmRcXFxcc2lmXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFRJVExFMixcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgVElUTEUxXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYmVuZFxcXFxzKycsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2VuZCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEUyLFxuICAgICAgICAgIFRJVExFMVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjb21tYW5kIG9uJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgVElUTEUyLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBUSVRMRTFcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc8XFxcXD8ocmV2fGxjfGxpdmVjb2RlKScsXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnPFxcXFw/JyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcPz4nIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIFRJVExFMVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpLFxuICAgIGlsbGVnYWw6ICc7JHxeXFxcXFt8Xj18Jnx7J1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAvLyBKUyBrZXl3b3Jkc1xuICAgICAgJ2luIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIGNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgd2l0aCAnICtcbiAgICAgIC8vIExpdmVTY3JpcHQga2V5d29yZHNcbiAgICAgICd0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IGl0IHRoYXQgb3RoZXJ3aXNlIGZyb20gdG8gdGlsIGZhbGx0aHJvdWdoIHN1cGVyICcgK1xuICAgICAgJ2Nhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBsaXN0IG1hcCAnICtcbiAgICAgICdfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZicsXG4gICAgbGl0ZXJhbDpcbiAgICAgIC8vIEpTIGxpdGVyYWxzXG4gICAgICAndHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCAnICtcbiAgICAgIC8vIExpdmVTY3JpcHQgbGl0ZXJhbHNcbiAgICAgICd5ZXMgbm8gb24gb2ZmIGl0IHRoYXQgdm9pZCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnbnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCdcbiAgfTtcbiAgdmFyIEpTX0lERU5UX1JFID0gJ1tBLVphLXokX10oPzpcXC1bMC05QS1aYS16JF9dfFswLTlBLVphLXokX10pKic7XG4gIHZhciBUSVRMRSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSlNfSURFTlRfUkV9KTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogLyNcXHsvLCBlbmQ6IC99LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIFNVQlNUX1NJTVBMRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jW0EtWmEteiRfXS8sIGVuZDogLyg/OlxcLVswLTlBLVphLXokX118WzAtOUEtWmEteiRfXSkqLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIEVYUFJFU1NJT05TID0gW1xuICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbeFhdW2EtZkEtRjAtOV9dKyl8KFxcXFxiXFxcXGQoXFxcXGR8X1xcXFxkKSooXFxcXC4oXFxcXGQoXFxcXGR8X1xcXFxkKSopPyk/KF8qW2VFXShbLStdXFxcXGQoX1xcXFxkfFxcXFxkKSopPyk/W19hLXpdKiknLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgc3RhcnRzOiB7ZW5kOiAnKFxcXFxzKi8pPycsIHJlbGV2YW5jZTogMH0gLy8gYSBudW1iZXIgdHJpZXMgdG8gZWF0IHRoZSBmb2xsb3dpbmcgc2xhc2ggdG8gcHJldmVudCB0cmVhdGluZyBpdCBhcyBhIHJlZ2V4cFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycvLCBlbmQ6IC8nLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCJcIlwiLywgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIFNVQlNUX1NJTVBMRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNULCBTVUJTVF9TSU1QTEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1xcXFwvLCBlbmQ6IC8oXFxzfCQpLyxcbiAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcvLycsIGVuZDogJy8vW2dpbV0qJyxcbiAgICAgICAgICBjb250YWluczogW1NVQlNULCBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLy8gcmVnZXggY2FuJ3Qgc3RhcnQgd2l0aCBzcGFjZSB0byBwYXJzZSB4IC8gMiAvIDMgYXMgdHdvIGRpdmlzaW9uc1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggKiwgYW5kIGl0IHN1cHBvcnRzIGFuIFwiaWxsZWdhbFwiIGluIHRoZSBtYWluIG1vZGVcbiAgICAgICAgICBiZWdpbjogL1xcLyg/IVsgKl0pKFxcXFxcXC98LikqP1xcL1tnaW1dKig/PVxcVykvXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBKU19JREVOVF9SRVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICdgYCcsIGVuZDogJ2BgJyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnamF2YXNjcmlwdCdcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAvKiBXZSBuZWVkIGFub3RoZXIgY29udGFpbmVkIG5hbWVsZXNzIG1vZGUgdG8gbm90IGhhdmUgZXZlcnkgbmVzdGVkXG4gICAgcGFpciBvZiBwYXJlbnMgdG8gYmUgY2FsbGVkIFwicGFyYW1zXCIgKi9cbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFNZTUJPTFMgPSB7XG4gICAgYmVnaW46ICcoIz0+fD0+fFxcXFx8Pj58LT8tPnxcXFxcIS0+KSdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbHMnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05TLmNvbmNhdChbXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwvXFxcXConLCAnXFxcXCpcXFxcLycpLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIFNZTUJPTFMsIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcoJyArIEpTX0lERU5UX1JFICsgJ1xcXFxzKig/Oj18Oj0pXFxcXHMqKT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlxcXFwtPlxcXFwqPycsIGVuZDogJ1xcXFwtPlxcXFwqPydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBKU19JREVOVF9SRSArICdcXFxccyooPzo9fDo9KVxcXFxzKik/IT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlstfl17MSwyfT5cXFxcKj8nLCBlbmQ6ICdbLX5dezEsMn0+XFxcXCo/J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcoJyArIEpTX0lERU5UX1JFICsgJ1xcXFxzKig/Oj18Oj0pXFxcXHMqKT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQiE/Wy1+XXsxLDJ9PlxcXFwqPycsIGVuZDogJyE/Wy1+XXsxLDJ9PlxcXFwqPydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzJyxcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgaWxsZWdhbDogL1s6PVwiXFxbXFxdXS8sXG4gICAgICAgICAgICBjb250YWluczogW1RJVExFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgVElUTEVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEpTX0lERU5UX1JFICsgJzonLCBlbmQ6ICc6JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSlcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBpZGVudGlmaWVyID0gJyhbLWEtekEtWiQuX11bXFxcXHdcXFxcLSQuXSopJztcbiAgcmV0dXJuIHtcbiAgICAvL2xleGVtZXM6ICdbLiVdPycgKyBobGpzLklERU5UX1JFLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2JlZ2luIGVuZCB0cnVlIGZhbHNlIGRlY2xhcmUgZGVmaW5lIGdsb2JhbCAnICtcbiAgICAgICdjb25zdGFudCBwcml2YXRlIGxpbmtlcl9wcml2YXRlIGludGVybmFsICcgK1xuICAgICAgJ2F2YWlsYWJsZV9leHRlcm5hbGx5IGxpbmtvbmNlIGxpbmtvbmNlX29kciB3ZWFrICcgK1xuICAgICAgJ3dlYWtfb2RyIGFwcGVuZGluZyBkbGxpbXBvcnQgZGxsZXhwb3J0IGNvbW1vbiAnICtcbiAgICAgICdkZWZhdWx0IGhpZGRlbiBwcm90ZWN0ZWQgZXh0ZXJuX3dlYWsgZXh0ZXJuYWwgJyArXG4gICAgICAndGhyZWFkX2xvY2FsIHplcm9pbml0aWFsaXplciB1bmRlZiBudWxsIHRvIHRhaWwgJyArXG4gICAgICAndGFyZ2V0IHRyaXBsZSBkYXRhbGF5b3V0IHZvbGF0aWxlIG51dyBuc3cgbm5hbiAnICtcbiAgICAgICduaW5mIG5zeiBhcmNwIGZhc3QgZXhhY3QgaW5ib3VuZHMgYWxpZ24gJyArXG4gICAgICAnYWRkcnNwYWNlIHNlY3Rpb24gYWxpYXMgbW9kdWxlIGFzbSBzaWRlZWZmZWN0ICcgK1xuICAgICAgJ2djIGRiZyBsaW5rZXJfcHJpdmF0ZV93ZWFrIGF0dHJpYnV0ZXMgYmxvY2thZGRyZXNzICcgK1xuICAgICAgJ2luaXRpYWxleGVjIGxvY2FsZHluYW1pYyBsb2NhbGV4ZWMgcHJlZml4IHVubmFtZWRfYWRkciAnICtcbiAgICAgICdjY2MgZmFzdGNjIGNvbGRjYyB4ODZfc3RkY2FsbGNjIHg4Nl9mYXN0Y2FsbGNjICcgK1xuICAgICAgJ2FybV9hcGNzY2MgYXJtX2FhcGNzY2MgYXJtX2FhcGNzX3ZmcGNjIHB0eF9kZXZpY2UgJyArXG4gICAgICAncHR4X2tlcm5lbCBpbnRlbF9vY2xfYmljYyBtc3A0MzBfaW50cmNjIHNwaXJfZnVuYyAnICtcbiAgICAgICdzcGlyX2tlcm5lbCB4ODZfNjRfc3lzdmNjIHg4Nl82NF93aW42NGNjIHg4Nl90aGlzY2FsbGNjICcgK1xuICAgICAgJ2NjIGMgc2lnbmV4dCB6ZXJvZXh0IGlucmVnIHNyZXQgbm91bndpbmQgJyArXG4gICAgICAnbm9yZXR1cm4gbm9hbGlhcyBub2NhcHR1cmUgYnl2YWwgbmVzdCByZWFkbm9uZSAnICtcbiAgICAgICdyZWFkb25seSBpbmxpbmVoaW50IG5vaW5saW5lIGFsd2F5c2lubGluZSBvcHRzaXplIHNzcCAnICtcbiAgICAgICdzc3ByZXEgbm9yZWR6b25lIG5vaW1wbGljaXRmbG9hdCBuYWtlZCBidWlsdGluIGNvbGQgJyArXG4gICAgICAnbm9idWlsdGluIG5vZHVwbGljYXRlIG5vbmxhenliaW5kIG9wdG5vbmUgcmV0dXJuc190d2ljZSAnICtcbiAgICAgICdzYW5pdGl6ZV9hZGRyZXNzIHNhbml0aXplX21lbW9yeSBzYW5pdGl6ZV90aHJlYWQgc3Nwc3Ryb25nICcgK1xuICAgICAgJ3V3dGFibGUgcmV0dXJuZWQgdHlwZSBvcGFxdWUgZXEgbmUgc2x0IHNndCAnICtcbiAgICAgICdzbGUgc2dlIHVsdCB1Z3QgdWxlIHVnZSBvZXEgb25lIG9sdCBvZ3QgJyArXG4gICAgICAnb2xlIG9nZSBvcmQgdW5vIHVlcSB1bmUgeCBhY3FfcmVsIGFjcXVpcmUgJyArXG4gICAgICAnYWxpZ25zdGFjayBhdG9taWMgY2F0Y2ggY2xlYW51cCBmaWx0ZXIgaW50ZWxkaWFsZWN0ICcgK1xuICAgICAgJ21heCBtaW4gbW9ub3RvbmljIG5hbmQgcGVyc29uYWxpdHkgcmVsZWFzZSBzZXFfY3N0ICcgK1xuICAgICAgJ3NpbmdsZXRocmVhZCB1bWF4IHVtaW4gdW5vcmRlcmVkIHhjaGcgYWRkIGZhZGQgJyArXG4gICAgICAnc3ViIGZzdWIgbXVsIGZtdWwgdWRpdiBzZGl2IGZkaXYgdXJlbSBzcmVtICcgK1xuICAgICAgJ2ZyZW0gc2hsIGxzaHIgYXNociBhbmQgb3IgeG9yIGljbXAgZmNtcCAnICtcbiAgICAgICdwaGkgY2FsbCB0cnVuYyB6ZXh0IHNleHQgZnB0cnVuYyBmcGV4dCB1aXRvZnAgJyArXG4gICAgICAnc2l0b2ZwIGZwdG91aSBmcHRvc2kgaW50dG9wdHIgcHRydG9pbnQgYml0Y2FzdCAnICtcbiAgICAgICdhZGRyc3BhY2VjYXN0IHNlbGVjdCB2YV9hcmcgcmV0IGJyIHN3aXRjaCBpbnZva2UgJyArXG4gICAgICAndW53aW5kIHVucmVhY2hhYmxlIGluZGlyZWN0YnIgbGFuZGluZ3BhZCByZXN1bWUgJyArXG4gICAgICAnbWFsbG9jIGFsbG9jYSBmcmVlIGxvYWQgc3RvcmUgZ2V0ZWxlbWVudHB0ciAnICtcbiAgICAgICdleHRyYWN0ZWxlbWVudCBpbnNlcnRlbGVtZW50IHNodWZmbGV2ZWN0b3IgZ2V0cmVzdWx0ICcgK1xuICAgICAgJ2V4dHJhY3R2YWx1ZSBpbnNlcnR2YWx1ZSBhdG9taWNybXcgY21weGNoZyBmZW5jZSAnICtcbiAgICAgICdhcmdtZW1vbmx5IGRvdWJsZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnaVxcXFxkKydcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JywgJ1xcXFxuJywge3JlbGV2YW5jZTogMH1cbiAgICAgICksXG4gICAgICAvLyBEb3VibGUgcXVvdGUgc3RyaW5nXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIERvdWJsZS1xdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ1wiJywgZW5kOiAnW15cXFxcXFxcXF1cIicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ0AnICsgaWRlbnRpZmllciB9LFxuICAgICAgICAgIHsgYmVnaW46ICdAXFxcXGQrJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICchJyArIGlkZW50aWZpZXIgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnIVxcXFxkKycgKyBpZGVudGlmaWVyIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnJScgKyBpZGVudGlmaWVyIH0sXG4gICAgICAgICAgeyBiZWdpbjogJyVcXFxcZCsnIH0sXG4gICAgICAgICAgeyBiZWdpbjogJyNcXFxcZCsnIH0sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7IGJlZ2luOiAnMFt4WF1bYS1mQS1GMC05XSsnIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAnLT9cXFxcZCsoPzpbLl1cXFxcZCspPyg/OltlRV1bLStdP1xcXFxkKyg/OlsuXVxcXFxkKyk/KT8nIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgICB2YXIgTFNMX1NUUklOR19FU0NBUEVfQ0hBUlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgYmVnaW46IC9cXFxcW3RuXCJcXFxcXS9cbiAgICB9O1xuXG4gICAgdmFyIExTTF9TVFJJTkdTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgTFNMX1NUUklOR19FU0NBUEVfQ0hBUlNcbiAgICAgICAgXVxuICAgIH07XG5cbiAgICB2YXIgTFNMX05VTUJFUlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFXG4gICAgfTtcblxuICAgIHZhciBMU0xfQ09OU1RBTlRTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86UEl8VFdPX1BJfFBJX0JZX1RXT3xERUdfVE9fUkFEfFJBRF9UT19ERUd8U1FSVDIpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpYUF9FUlJPUl8oPzpFWFBFUklFTkNFU19ESVNBQkxFRHxFWFBFUklFTkNFXyg/OkRJU0FCTEVEfFNVU1BFTkRFRCl8SU5WQUxJRF8oPzpFWFBFUklFTkNFfFBBUkFNRVRFUlMpfEtFWV9OT1RfRk9VTkR8TUFUVVJJVFlfRVhDRUVERUR8Tk9ORXxOT1RfKD86Rk9VTkR8UEVSTUlUVEVEKD86X0xBTkQpPyl8Tk9fRVhQRVJJRU5DRXxRVU9UQV9FWENFRURFRHxSRVRSWV9VUERBVEV8U1RPUkFHRV9FWENFUFRJT058U1RPUkVfRElTQUJMRUR8VEhST1RUTEVEfFVOS05PV05fRVJST1IpfEpTT05fQVBQRU5EfFNUQVRVU18oPzpQSFlTSUNTfFJPVEFURV9bWFlaXXxQSEFOVE9NfFNBTkRCT1h8QkxPQ0tfR1JBQig/Ol9PQkpFQ1QpP3woPzpESUV8UkVUVVJOKV9BVF9FREdFfENBU1RfU0hBRE9XU3xPS3xNQUxGT1JNRURfUEFSQU1TfFRZUEVfTUlTTUFUQ0h8Qk9VTkRTX0VSUk9SfE5PVF8oPzpGT1VORHxTVVBQT1JURUQpfElOVEVSTkFMX0VSUk9SfFdISVRFTElTVF9GQUlMRUQpfEFHRU5UKD86Xyg/OkJZXyg/OkxFR0FDWV98VVNFUilOQU1FfEZMWUlOR3xBVFRBQ0hNRU5UU3xTQ1JJUFRFRHxNT1VTRUxPT0t8U0lUVElOR3xPTl9PQkpFQ1R8QVdBWXxXQUxLSU5HfElOX0FJUnxUWVBJTkd8Q1JPVUNISU5HfEJVU1l8QUxXQVlTX1JVTnxBVVRPUElMT1R8TElTVF8oPzpQQVJDRUwoPzpfT1dORVIpP3xSRUdJT04pKSk/fENBTUVSQV8oPzpQSVRDSHxESVNUQU5DRXxCRUhJTkRORVNTXyg/OkFOR0xFfExBRyl8KD86Rk9DVVN8UE9TSVRJT04pKD86Xyg/OlRIUkVTSE9MRHxMT0NLRUR8TEFHKSk/fEZPQ1VTX09GRlNFVHxBQ1RJVkUpfEFOSU1fT058TE9PUHxSRVZFUlNFfFBJTkdfUE9OR3xTTU9PVEh8Uk9UQVRFfFNDQUxFfEFMTF9TSURFU3xMSU5LXyg/OlJPT1R8U0VUfEFMTF8oPzpPVEhFUlN8Q0hJTERSRU4pfFRISVMpfEFDVElWRXxQQVNTKD86SVZFfF8oPzpBTFdBWVN8SUZfTk9UX0hBTkRMRUR8TkVWRVIpKXxTQ1JJUFRFRHxDT05UUk9MXyg/OkZXRHxCQUNLfCg/OlJPVF8pPyg/OkxFRlR8UklHSFQpfFVQfERPV058KD86TUxfKT9MQlVUVE9OKXxQRVJNSVNTSU9OXyg/OlJFVFVSTl9PQkpFQ1RTfERFQklUfE9WRVJSSURFX0FOSU1BVElPTlN8U0lMRU5UX0VTVEFURV9NQU5BR0VNRU5UfFRBS0VfQ09OVFJPTFN8VFJJR0dFUl9BTklNQVRJT058QVRUQUNIfENIQU5HRV9MSU5LU3woPzpDT05UUk9MfFRSQUNLKV9DQU1FUkF8VEVMRVBPUlQpfElOVkVOVE9SWV8oPzpURVhUVVJFfFNPVU5EfE9CSkVDVHxTQ1JJUFR8TEFORE1BUkt8Q0xPVEhJTkd8Tk9URUNBUkR8Qk9EWVBBUlR8QU5JTUFUSU9OfEdFU1RVUkV8QUxMfE5PTkUpfENIQU5HRURfKD86SU5WRU5UT1JZfENPTE9SfFNIQVBFfFNDQUxFfFRFWFRVUkV8TElOS3xBTExPV0VEX0RST1B8T1dORVJ8UkVHSU9OKD86X1NUQVJUKT98VEVMRVBPUlR8TUVESUEpfE9CSkVDVF8oPzpDTElDS19BQ1RJT058SE9WRVJfSEVJR0hUfExBU1RfT1dORVJfSUR8KD86UEhZU0lDU3xTRVJWRVJ8U1RSRUFNSU5HKV9DT1NUfFVOS05PV05fREVUQUlMfENIQVJBQ1RFUl9USU1FfFBIQU5UT018UEhZU0lDU3xURU1QXyg/OkFUVEFDSEVEfE9OX1JFWil8TkFNRXxERVNDfFBPU3xQUklNXyg/OkNPVU5UfEVRVUlWQUxFTkNFKXxSRVRVUk5fKD86UEFSQ0VMKD86X09XTkVSKT98UkVHSU9OKXxSRVpaRVJfS0VZfFJPTz9UfFZFTE9DSVRZfE9NRUdBfE9XTkVSfEdST1VQKD86X1RBRyk/fENSRUFUT1J8QVRUQUNIRURfKD86UE9JTlR8U0xPVFNfQVZBSUxBQkxFKXxSRU5ERVJfV0VJR0hUfCg/OkJPRFlfU0hBUEV8UEFUSEZJTkRJTkcpX1RZUEV8KD86UlVOTklOR3xUT1RBTClfU0NSSVBUX0NPVU5UfFRPVEFMX0lOVkVOVE9SWV9DT1VOVHxTQ1JJUFRfKD86TUVNT1JZfFRJTUUpKXxUWVBFXyg/OklOVEVHRVJ8RkxPQVR8U1RSSU5HfEtFWXxWRUNUT1J8Uk9UQVRJT058SU5WQUxJRCl8KD86REVCVUd8UFVCTElDKV9DSEFOTkVMfEFUVEFDSF8oPzpBVkFUQVJfQ0VOVEVSfENIRVNUfEhFQUR8QkFDS3xQRUxWSVN8TU9VVEh8Q0hJTnxORUNLfE5PU0V8QkVMTFl8W0xSXSg/OlNIT1VMREVSfEhBTkR8Rk9PVHxFQVJ8RVlFfFtVTF0oPzpBUk18TEVHKXxISVApfCg/OkxFRlR8UklHSFQpX1BFQ3xIVURfKD86Q0VOVEVSX1sxMl18VE9QXyg/OlJJR0hUfENFTlRFUnxMRUZUKXxCT1RUT00oPzpfKD86UklHSFR8TEVGVCkpPyl8W0xSXUhBTkRfUklORzF8VEFJTF8oPzpCQVNFfFRJUCl8W0xSXVdJTkd8RkFDRV8oPzpKQVd8W0xSXUVBUnxbTFJdRVlFfFRPVU5HRSl8R1JPSU58SElORF9bTFJdRk9PVCl8TEFORF8oPzpMRVZFTHxSQUlTRXxMT1dFUnxTTU9PVEh8Tk9JU0V8UkVWRVJUKXxEQVRBXyg/Ok9OTElORXxOQU1FfEJPUk58U0lNXyg/OlBPU3xTVEFUVVN8UkFUSU5HKXxQQVlJTkZPKXxQQVlNRU5UX0lORk9fKD86T05fRklMRXxVU0VEKXxSRU1PVEVfREFUQV8oPzpDSEFOTkVMfFJFUVVFU1R8UkVQTFkpfFBTWVNfKD86UEFSVF8oPzpCRl8oPzpaRVJPfE9ORSg/Ol9NSU5VU18oPzpERVNUX0NPTE9SfFNPVVJDRV8oQUxQSEF8Q09MT1IpKSk/fERFU1RfQ09MT1J8U09VUkNFXyhBTFBIQXxDT0xPUikpfEJMRU5EX0ZVTkNfKERFU1R8U09VUkNFKXxGTEFHU3woPzpTVEFSVHxFTkQpXyg/OkNPTE9SfEFMUEhBfFNDQUxFfEdMT1cpfE1BWF9BR0V8KD86UklCQk9OfFdJTkR8SU5URVJQXyg/OkNPTE9SfFNDQUxFKXxCT1VOQ0V8Rk9MTE9XXyg/OlNSQ3xWRUxPQ0lUWSl8VEFSR0VUXyg/OlBPU3xMSU5FQVIpfEVNSVNTSVZFKV9NQVNLKXxTUkNfKD86TUFYX0FHRXxQQVRURVJOfEFOR0xFXyg/OkJFR0lOfEVORCl8QlVSU1RfKD86UkFURXxQQVJUX0NPVU5UfFJBRElVU3xTUEVFRF8oPzpNSU58TUFYKSl8QUNDRUx8VEVYVFVSRXxUQVJHRVRfS0VZfE9NRUdBfFBBVFRFUk5fKD86RFJPUHxFWFBMT0RFfEFOR0xFKD86X0NPTkUoPzpfRU1QVFkpPyk/KSkpfFZFSElDTEVfKD86UkVGRVJFTkNFX0ZSQU1FfFRZUEVfKD86Tk9ORXxTTEVEfENBUnxCT0FUfEFJUlBMQU5FfEJBTExPT04pfCg/OkxJTkVBUnxBTkdVTEFSKV8oPzpGUklDVElPTl9USU1FU0NBTEV8TU9UT1JfRElSRUNUSU9OKXxMSU5FQVJfTU9UT1JfT0ZGU0VUfEhPVkVSXyg/OkhFSUdIVHxFRkZJQ0lFTkNZfFRJTUVTQ0FMRSl8QlVPWUFOQ1l8KD86TElORUFSfEFOR1VMQVIpXyg/OkRFRkxFQ1RJT05fKD86RUZGSUNJRU5DWXxUSU1FU0NBTEUpfE1PVE9SXyg/OkRFQ0FZXyk/VElNRVNDQUxFKXxWRVJUSUNBTF9BVFRSQUNUSU9OXyg/OkVGRklDSUVOQ1l8VElNRVNDQUxFKXxCQU5LSU5HXyg/OkVGRklDSUVOQ1l8TUlYfFRJTUVTQ0FMRSl8RkxBR18oPzpOT19ERUZMRUNUSU9OX1VQfExJTUlUXyg/OlJPTExfT05MWXxNT1RPUl9VUCl8SE9WRVJfKD86KD86V0FURVJ8VEVSUkFJTnxVUClfT05MWXxHTE9CQUxfSEVJR0hUKXxNT1VTRUxPT0tfKD86U1RFRVJ8QkFOSyl8Q0FNRVJBX0RFQ09VUExFRCkpfFBSSU1fKD86QUxMT1dfVU5TSVR8QUxQSEFfTU9ERSg/Ol8oPzpCTEVORHxFTUlTU0lWRXxNQVNLfE5PTkUpKT98Tk9STUFMfFNQRUNVTEFSfFRZUEUoPzpfKD86Qk9YfENZTElOREVSfFBSSVNNfFNQSEVSRXxUT1JVU3xUVUJFfFJJTkd8U0NVTFBUKSk/fEhPTEVfKD86REVGQVVMVHxDSVJDTEV8U1FVQVJFfFRSSUFOR0xFKXxNQVRFUklBTCg/Ol8oPzpTVE9ORXxNRVRBTHxHTEFTU3xXT09EfEZMRVNIfFBMQVNUSUN8UlVCQkVSKSk/fFNISU5ZXyg/Ok5PTkV8TE9XfE1FRElVTXxISUdIKXxCVU1QXyg/Ok5PTkV8QlJJR0hUfERBUkt8V09PRHxCQVJLfEJSSUNLU3xDSEVDS0VSfENPTkNSRVRFfFRJTEV8U1RPTkV8RElTS1N8R1JBVkVMfEJMT0JTfFNJRElOR3xMQVJHRVRJTEV8U1RVQ0NPfFNVQ1RJT058V0VBVkUpfFRFWEdFTl8oPzpERUZBVUxUfFBMQU5BUil8U0NSSVBURURfU0lUX09OTFl8U0NVTFBUXyg/OlRZUEVfKD86U1BIRVJFfFRPUlVTfFBMQU5FfENZTElOREVSfE1BU0spfEZMQUdfKD86TUlSUk9SfElOVkVSVCkpfFBIWVNJQ1MoPzpfKD86U0hBUEVfKD86Q09OVkVYfE5PTkV8UFJJTXxUWVBFKSkpP3woPzpQT1N8Uk9UKV9MT0NBTHxTTElDRXxURVhUfEZMRVhJQkxFfFBPSU5UX0xJR0hUfFRFTVBfT05fUkVafFBIQU5UT018UE9TSVRJT058U0lUX1RBUkdFVHxTSVpFfFJPVEFUSU9OfFRFWFRVUkV8TkFNRXxPTUVHQXxERVNDfExJTktfVEFSR0VUfENPTE9SfEJVTVBfU0hJTll8RlVMTEJSSUdIVHxURVhHRU58R0xPV3xNRURJQV8oPzpBTFRfSU1BR0VfRU5BQkxFfENPTlRST0xTfCg/OkNVUlJFTlR8SE9NRSlfVVJMfEFVVE9fKD86TE9PUHxQTEFZfFNDQUxFfFpPT00pfEZJUlNUX0NMSUNLX0lOVEVSQUNUfCg/OldJRFRIfEhFSUdIVClfUElYRUxTfFdISVRFTElTVCg/Ol9FTkFCTEUpP3xQRVJNU18oPzpJTlRFUkFDVHxDT05UUk9MKXxQQVJBTV9NQVh8Q09OVFJPTFNfKD86U1RBTkRBUkR8TUlOSSl8UEVSTV8oPzpOT05FfE9XTkVSfEdST1VQfEFOWU9ORSl8TUFYXyg/OlVSTF9MRU5HVEh8V0hJVEVMSVNUXyg/OlNJWkV8Q09VTlQpfCg/OldJRFRIfEhFSUdIVClfUElYRUxTKSkpfE1BU0tfKD86QkFTRXxPV05FUnxHUk9VUHxFVkVSWU9ORXxORVhUKXxQRVJNXyg/OlRSQU5TRkVSfE1PRElGWXxDT1BZfE1PVkV8QUxMKXxQQVJDRUxfKD86TUVESUFfQ09NTUFORF8oPzpTVE9QfFBBVVNFfFBMQVl8TE9PUHxURVhUVVJFfFVSTHxUSU1FfEFHRU5UfFVOTE9BRHxBVVRPX0FMSUdOfFRZUEV8U0laRXxERVNDfExPT1BfU0VUKXxGTEFHXyg/OkFMTE9XXyg/OkZMWXwoPzpHUk9VUF8pP1NDUklQVFN8TEFORE1BUkt8VEVSUkFGT1JNfERBTUFHRXxDUkVBVEVfKD86R1JPVVBfKT9PQkpFQ1RTKXxVU0VfKD86QUNDRVNTXyg/OkdST1VQfExJU1QpfEJBTl9MSVNUfExBTkRfUEFTU19MSVNUKXxMT0NBTF9TT1VORF9PTkxZfFJFU1RSSUNUX1BVU0hPQkpFQ1R8QUxMT1dfKD86R1JPVVB8QUxMKV9PQkpFQ1RfRU5UUlkpfENPVU5UXyg/OlRPVEFMfE9XTkVSfEdST1VQfE9USEVSfFNFTEVDVEVEfFRFTVApfERFVEFJTFNfKD86TkFNRXxERVNDfE9XTkVSfEdST1VQfEFSRUF8SUR8U0VFX0FWQVRBUlMpKXxMSVNUX1NUQVRfKD86TUFYfE1JTnxNRUFOfE1FRElBTnxTVERfREVWfFNVTSg/Ol9TUVVBUkVTKT98TlVNX0NPVU5UfEdFT01FVFJJQ19NRUFOfFJBTkdFKXxQQVlfKD86SElERXxERUZBVUxUKXxSRUdJT05fRkxBR18oPzpBTExPV19EQU1BR0V8RklYRURfU1VOfEJMT0NLX1RFUlJBRk9STXxTQU5EQk9YfERJU0FCTEVfKD86Q09MTElTSU9OU3xQSFlTSUNTKXxCTE9DS19GTFl8QUxMT1dfRElSRUNUX1RFTEVQT1JUfFJFU1RSSUNUX1BVU0hPQkpFQ1QpfEhUVFBfKD86TUVUSE9EfE1JTUVUWVBFfEJPRFlfKD86TUFYTEVOR1RIfFRSVU5DQVRFRCl8Q1VTVE9NX0hFQURFUnxQUkFHTUFfTk9fQ0FDSEV8VkVSQk9TRV9USFJPVFRMRXxWRVJJRllfQ0VSVCl8U0lUXyg/OklOVkFMSURfKD86QUdFTlR8TElOS19PQkpFQ1QpfE5PKD86VF9FWFBFUklFTkNFfF8oPzpBQ0NFU1N8RVhQRVJJRU5DRV9QRVJNSVNTSU9OfFNJVF9UQVJHRVQpKSl8U1RSSU5HXyg/OlRSSU0oPzpfKD86SEVBRHxUQUlMKSk/KXxDTElDS19BQ1RJT05fKD86Tk9ORXxUT1VDSHxTSVR8QlVZfFBBWXxPUEVOKD86X01FRElBKT98UExBWXxaT09NKXxUT1VDSF9JTlZBTElEX0ZBQ0V8UFJPRklMRV8oPzpOT05FfFNDUklQVF9NRU1PUlkpfFJDXyg/OkRBVEFfRkxBR1N8REVURUNUX1BIQU5UT018R0VUXyg/OkxJTktfTlVNfE5PUk1BTHxST09UX0tFWSl8TUFYX0hJVFN8UkVKRUNUXyg/OlRZUEVTfEFHRU5UU3woPzpOT04pP1BIWVNJQ0FMfExBTkQpKXxSQ0VSUl8oPzpDQVNUX1RJTUVfRVhDRUVERUR8U0lNX1BFUkZfTE9XfFVOS05PV04pfEVTVEFURV9BQ0NFU1NfKD86QUxMT1dFRF8oPzpBR0VOVHxHUk9VUClfKD86QUREfFJFTU9WRSl8QkFOTkVEX0FHRU5UXyg/OkFERHxSRU1PVkUpKXxERU5TSVRZfEZSSUNUSU9OfFJFU1RJVFVUSU9OfEdSQVZJVFlfTVVMVElQTElFUnxLRk1fKD86Q09NTUFORHxDTURfKD86UExBWXxTVE9QfFBBVVNFKXxNT0RFfEZPUldBUkR8TE9PUHxQSU5HX1BPTkd8UkVWRVJTRXxEQVRBfFJPVEFUSU9OfFRSQU5TTEFUSU9OKXxFUlJfKD86R0VORVJJQ3xQQVJDRUxfUEVSTUlTU0lPTlN8TUFMRk9STUVEX1BBUkFNU3xSVU5USU1FX1BFUk1JU1NJT05TfFRIUk9UVExFRCl8Q0hBUkFDVEVSXyg/OkNNRF8oPzooPzpTTU9PVEhfKT9TVE9QfEpVTVApfERFU0lSRURfKD86VFVSTl8pP1NQRUVEfFJBRElVU3xTVEFZX1dJVEhJTl9QQVJDRUx8TEVOR1RIfE9SSUVOVEFUSU9OfEFDQ09VTlRfRk9SX1NLSVBQRURfRlJBTUVTfEFWT0lEQU5DRV9NT0RFfFRZUEUoPzpfKD86W0FCQ0RdfE5PTkUpKT98TUFYXyg/OkRFQ0VMfFRVUk5fUkFESVVTfCg/OkFDQ0VMfFNQRUVEKSkpfFBVUlNVSVRfKD86T0ZGU0VUfEZVWlpfRkFDVE9SfEdPQUxfVE9MRVJBTkNFfElOVEVSQ0VQVCl8UkVRVUlSRV9MSU5FX09GX1NJR0hUfEZPUkNFX0RJUkVDVF9QQVRIfFZFUlRJQ0FMfEhPUklaT05UQUx8QVZPSURfKD86Q0hBUkFDVEVSU3xEWU5BTUlDX09CU1RBQ0xFU3xOT05FKXxQVV8oPzpFVkFERV8oPzpISURERU58U1BPVFRFRCl8RkFJTFVSRV8oPzpEWU5BTUlDX1BBVEhGSU5ESU5HX0RJU0FCTEVEfElOVkFMSURfKD86R09BTHxTVEFSVCl8Tk9fKD86TkFWTUVTSHxWQUxJRF9ERVNUSU5BVElPTil8T1RIRVJ8VEFSR0VUX0dPTkV8KD86UEFSQ0VMXyk/VU5SRUFDSEFCTEUpfCg/OkdPQUx8U0xPV0RPV05fRElTVEFOQ0UpX1JFQUNIRUQpfFRSQVZFUlNBTF9UWVBFKD86Xyg/OkZBU1R8Tk9ORXxTTE9XKSk/fENPTlRFTlRfVFlQRV8oPzpBVE9NfEZPUk18SFRNTHxKU09OfExMU0R8UlNTfFRFWFR8WEhUTUx8WE1MKXxHQ05QXyg/OlJBRElVU3xTVEFUSUMpfCg/OlBBVFJPTHxXQU5ERVIpX1BBVVNFX0FUX1dBWVBPSU5UU3xPUFRfKD86QVZBVEFSfENIQVJBQ1RFUnxFWENMVVNJT05fVk9MVU1FfExFR0FDWV9MSU5LU0VUfE1BVEVSSUFMX1ZPTFVNRXxPVEhFUnxTVEFUSUNfT0JTVEFDTEV8V0FMS0FCTEUpfFNJTV9TVEFUX1BDVF9DSEFSU19TVEVQUEVEKVxcXFxiJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86RkFMU0V8VFJVRSlcXFxcYidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OlpFUk9fUk9UQVRJT04pXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpFT0Z8SlNPTl8oPzpBUlJBWXxERUxFVEV8RkFMU0V8SU5WQUxJRHxOVUxMfE5VTUJFUnxPQkpFQ1R8U1RSSU5HfFRSVUUpfE5VTExfS0VZfFRFWFRVUkVfKD86QkxBTkt8REVGQVVMVHxNRURJQXxQTFlXT09EfFRSQU5TUEFSRU5UKXxVUkxfUkVRVUVTVF8oPzpHUkFOVEVEfERFTklFRCkpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpaRVJPX1ZFQ1RPUnxUT1VDSF9JTlZBTElEXyg/OlRFWENPT1JEfFZFQ1RPUikpXFxcXGInXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgdmFyIExTTF9GVU5DVElPTlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYig/OmxsKD86QWdlbnRJbkV4cGVyaWVuY2V8KD86Q3JlYXRlfERhdGFTaXplfERlbGV0ZXxLZXlDb3VudHxLZXlzfFJlYWR8VXBkYXRlKUtleVZhbHVlfEdldEV4cGVyaWVuY2UoPzpEZXRhaWxzfEVycm9yTWVzc2FnZSl8UmV0dXJuT2JqZWN0c0J5KD86SUR8T3duZXIpfEpzb24oPzoyTGlzdHxbR1NdZXRWYWx1ZXxWYWx1ZVR5cGUpfFNpbnxDb3N8VGFufEF0YW4yfFNxcnR8UG93fEFic3xGYWJzfEZyYW5kfEZsb29yfENlaWx8Um91bmR8VmVjKD86TWFnfE5vcm18RGlzdCl8Um90KD86QmV0d2VlbnwyKD86RXVsZXJ8RndkfExlZnR8VXApKXwoPzpFdWxlcnxBeGVzKTJSb3R8V2hpc3BlcnwoPzpSZWdpb258T3duZXIpP1NheXxTaG91dHxMaXN0ZW4oPzpDb250cm9sfFJlbW92ZSk/fFNlbnNvcig/OlJlcGVhdHxSZW1vdmUpP3xEZXRlY3RlZCg/Ok5hbWV8S2V5fE93bmVyfFR5cGV8UG9zfFZlbHxHcmFifFJvdHxHcm91cHxMaW5rTnVtYmVyKXxEaWV8R3JvdW5kfFdpbmR8KD86W0dTXWV0KSg/OkFuaW1hdGlvbk92ZXJyaWRlfE1lbW9yeUxpbWl0fFByaW1NZWRpYVBhcmFtc3xQYXJjZWxNdXNpY1VSTHxPYmplY3QoPzpEZXNjfE5hbWUpfFBoeXNpY3NNYXRlcmlhbHxTdGF0dXN8U2NhbGV8Q29sb3J8QWxwaGF8VGV4dHVyZXxQb3N8Um90fEZvcmNlfFRvcnF1ZSl8UmVzZXRBbmltYXRpb25PdmVycmlkZXwoPzpTY2FsZXxPZmZzZXR8Um90YXRlKVRleHR1cmV8KD86Um90KT9UYXJnZXQoPzpSZW1vdmUpP3woPzpTdG9wKT9Nb3ZlVG9UYXJnZXR8QXBwbHkoPzpSb3RhdGlvbmFsKT9JbXB1bHNlfFNldCg/OktleWZyYW1lZE1vdGlvbnxDb250ZW50VHlwZXxSZWdpb25Qb3N8KD86QW5ndWxhcik/VmVsb2NpdHl8QnVveWFuY3l8SG92ZXJIZWlnaHR8Rm9yY2VBbmRUb3JxdWV8VGltZXJFdmVudHxTY3JpcHRTdGF0ZXxEYW1hZ2V8VGV4dHVyZUFuaW18U291bmQoPzpRdWV1ZWluZ3xSYWRpdXMpfFZlaGljbGUoPzpUeXBlfCg/OkZsb2F0fFZlY3RvcnxSb3RhdGlvbilQYXJhbSl8KD86VG91Y2h8U2l0KT9UZXh0fENhbWVyYSg/OkV5ZXxBdClPZmZzZXR8UHJpbWl0aXZlUGFyYW1zfENsaWNrQWN0aW9ufExpbmsoPzpBbHBoYXxDb2xvcnxQcmltaXRpdmVQYXJhbXMoPzpGYXN0KT98VGV4dHVyZSg/OkFuaW0pP3xDYW1lcmF8TWVkaWEpfFJlbW90ZVNjcmlwdEFjY2Vzc1BpbnxQYXlQcmljZXxMb2NhbFJvdCl8U2NhbGVCeUZhY3RvcnxHZXQoPzooPzpNYXh8TWluKVNjYWxlRmFjdG9yfENsb3Nlc3ROYXZQb2ludHxTdGF0aWNQYXRofFNpbVN0YXRzfEVudnxQcmltaXRpdmVQYXJhbXN8TGluayg/OlByaW1pdGl2ZVBhcmFtc3xOdW1iZXIoPzpPZlNpZGVzKT98S2V5fE5hbWV8TWVkaWEpfEhUVFBIZWFkZXJ8RnJlZVVSTHN8T2JqZWN0KD86RGV0YWlsc3xQZXJtTWFza3xQcmltQ291bnQpfFBhcmNlbCg/Ok1heFByaW1zfERldGFpbHN8UHJpbSg/OkNvdW50fE93bmVycykpfEF0dGFjaGVkKD86TGlzdCk/fCg/OlNQTWF4fEZyZWV8VXNlZClNZW1vcnl8UmVnaW9uKD86TmFtZXxUaW1lRGlsYXRpb258RlBTfENvcm5lcnxBZ2VudENvdW50KXxSb290KD86UG9zaXRpb258Um90YXRpb24pfFVuaXhUaW1lfCg/OlBhcmNlbHxSZWdpb24pRmxhZ3N8KD86V2FsbHxHTVQpY2xvY2t8U2ltdWxhdG9ySG9zdG5hbWV8Qm91bmRpbmdCb3h8R2VvbWV0cmljQ2VudGVyfENyZWF0b3J8TnVtYmVyT2YoPzpQcmltc3xOb3RlY2FyZExpbmVzfFNpZGVzKXxBbmltYXRpb24oPzpMaXN0KT98KD86Q2FtZXJhfExvY2FsKSg/OlBvc3xSb3QpfFZlbHxBY2NlbHxPbWVnYXxUaW1lKD86c3RhbXB8T2ZEYXkpfCg/Ok9iamVjdHxDZW50ZXJPZik/TWFzc3xNYXNzTUtTfEVuZXJneXxPd25lcnwoPzpPd25lcik/S2V5fFN1bkRpcmVjdGlvbnxUZXh0dXJlKD86T2Zmc2V0fFNjYWxlfFJvdCl8SW52ZW50b3J5KD86TnVtYmVyfE5hbWV8S2V5fFR5cGV8Q3JlYXRvcnxQZXJtTWFzayl8UGVybWlzc2lvbnMoPzpLZXkpP3xTdGFydFBhcmFtZXRlcnxMaXN0KD86TGVuZ3RofEVudHJ5VHlwZSl8RGF0ZXxBZ2VudCg/OlNpemV8SW5mb3xMYW5ndWFnZXxMaXN0KXxMYW5kT3duZXJBdHxOb3RlY2FyZExpbmV8U2NyaXB0KD86TmFtZXxTdGF0ZSkpfCg/OkdldHxSZXNldHxHZXRBbmRSZXNldClUaW1lfFBsYXlTb3VuZCg/OlNsYXZlKT98TG9vcFNvdW5kKD86TWFzdGVyfFNsYXZlKT98KD86VHJpZ2dlcnxTdG9wfFByZWxvYWQpU291bmR8KD86KD86R2V0fERlbGV0ZSlTdWJ8SW5zZXJ0KVN0cmluZ3xUbyg/OlVwcGVyfExvd2VyKXxHaXZlKD86SW52ZW50b3J5TGlzdHxNb25leSl8UmV6T2JqZWN0fCg/OlN0b3ApP0xvb2tBdHxTbGVlcHxDb2xsaXNpb25GaWx0ZXJ8KD86VGFrZXxSZWxlYXNlKUNvbnRyb2xzfERldGFjaEZyb21BdmF0YXJ8QXR0YWNoVG9BdmF0YXIoPzpUZW1wKT98SW5zdGFudE1lc3NhZ2V8KD86R2V0TmV4dCk/RW1haWx8U3RvcEhvdmVyfE1pbkV2ZW50RGVsYXl8Um90TG9va0F0fFN0cmluZyg/Okxlbmd0aHxUcmltKXwoPzpTdGFydHxTdG9wKUFuaW1hdGlvbnxUYXJnZXRPbWVnYXxSZXF1ZXN0KD86RXhwZXJpZW5jZSk/UGVybWlzc2lvbnN8KD86Q3JlYXRlfEJyZWFrKUxpbmt8QnJlYWtBbGxMaW5rc3woPzpHaXZlfFJlbW92ZSlJbnZlbnRvcnl8V2F0ZXJ8UGFzc1RvdWNoZXN8UmVxdWVzdCg/OkFnZW50fEludmVudG9yeSlEYXRhfFRlbGVwb3J0QWdlbnQoPzpIb21lfEdsb2JhbENvb3Jkcyk/fE1vZGlmeUxhbmR8Q29sbGlzaW9uU291bmR8UmVzZXRTY3JpcHR8TWVzc2FnZUxpbmtlZHxQdXNoT2JqZWN0fFBhc3NDb2xsaXNpb25zfEF4aXNBbmdsZTJSb3R8Um90Mig/OkF4aXN8QW5nbGUpfEEoPzpjb3N8c2luKXxBbmdsZUJldHdlZW58QWxsb3dJbnZlbnRvcnlEcm9wfFN1YlN0cmluZ0luZGV4fExpc3QyKD86Q1NWfEludGVnZXJ8SnNvbnxGbG9hdHxTdHJpbmd8S2V5fFZlY3RvcnxSb3R8TGlzdCg/OlN0cmlkZWQpPyl8RGVsZXRlU3ViTGlzdHxMaXN0KD86U3RhdGlzdGljc3xTb3J0fFJhbmRvbWl6ZXwoPzpJbnNlcnR8RmluZHxSZXBsYWNlKUxpc3QpfEVkZ2VPZldvcmxkfEFkanVzdFNvdW5kVm9sdW1lfEtleTJOYW1lfFRyaWdnZXJTb3VuZExpbWl0ZWR8RWplY3RGcm9tTGFuZHwoPzpDU1Z8UGFyc2VTdHJpbmcpMkxpc3R8T3Zlck15TGFuZHxTYW1lR3JvdXB8VW5TaXR8R3JvdW5kKD86U2xvcGV8Tm9ybWFsfENvbnRvdXIpfEdyb3VuZFJlcGVsfCg/OlNldHxSZW1vdmUpVmVoaWNsZUZsYWdzfFNpdE9uTGlua3woPzpBdmF0YXJPbik/KD86TGluayk/U2l0VGFyZ2V0fFNjcmlwdCg/OkRhbmdlcnxQcm9maWxlcil8RGlhbG9nfFZvbHVtZURldGVjdHxSZXNldE90aGVyU2NyaXB0fFJlbW90ZUxvYWRTY3JpcHRQaW58KD86T3BlbnxDbG9zZSlSZW1vdGVEYXRhQ2hhbm5lbHxTZW5kUmVtb3RlRGF0YXxSZW1vdGVEYXRhUmVwbHl8KD86SW50ZWdlcnxTdHJpbmcpVG9CYXNlNjR8WG9yQmFzZTY0fExvZyg/OjEwKT98QmFzZTY0VG8oPzpTdHJpbmd8SW50ZWdlcil8UGFyc2VTdHJpbmdLZWVwTnVsbHN8UmV6QXRSb290fFJlcXVlc3RTaW11bGF0b3JEYXRhfEZvcmNlTW91c2Vsb29rfCg/OkxvYWR8UmVsZWFzZXwoPzpFfFVuZSlzY2FwZSlVUkx8UGFyY2VsTWVkaWEoPzpDb21tYW5kTGlzdHxRdWVyeSl8TW9kUG93fE1hcERlc3RpbmF0aW9ufCg/OlJlbW92ZUZyb218QWRkVG98UmVzZXQpTGFuZCg/OlBhc3N8QmFuKUxpc3R8KD86U2V0fENsZWFyKUNhbWVyYVBhcmFtc3xIVFRQKD86UmVxdWVzdHxSZXNwb25zZSl8VGV4dEJveHxEZXRlY3RlZFRvdWNoKD86VVZ8RmFjZXxQb3N8KD86TnxCaW4pb3JtYWx8U1QpfCg/Ok1ENXxTSEExfER1bXBMaXN0MilTdHJpbmd8UmVxdWVzdCg/OlNlY3VyZSk/VVJMfENsZWFyKD86UHJpbXxMaW5rKU1lZGlhfCg/OkxpbmspP1BhcnRpY2xlU3lzdGVtfCg/OkdldHxSZXF1ZXN0KSg/OlVzZXJuYW1lfERpc3BsYXlOYW1lKXxSZWdpb25TYXlUb3xDYXN0UmF5fEdlbmVyYXRlS2V5fFRyYW5zZmVyTGluZGVuRG9sbGFyc3xNYW5hZ2VFc3RhdGVBY2Nlc3N8KD86Q3JlYXRlfERlbGV0ZSlDaGFyYWN0ZXJ8RXhlY0NoYXJhY3RlckNtZHxFdmFkZXxGbGVlRnJvbXxOYXZpZ2F0ZVRvfFBhdHJvbFBvaW50c3xQdXJzdWV8VXBkYXRlQ2hhcmFjdGVyfFdhbmRlcldpdGhpbikpXFxcXGInXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGlsbGVnYWw6ICc6JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIExTTF9TVFJJTkdTLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnLy8nLCAnJCcpLFxuICAgICAgICAgICAgICAgICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTFNMX05VTUJFUlMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OnN0YXRlfGRlZmF1bHQpXFxcXGInXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpzdGF0ZV8oPzplbnRyeXxleGl0KXx0b3VjaCg/Ol8oPzpzdGFydHxlbmQpKT98KD86bGFuZF8pP2NvbGxpc2lvbig/Ol8oPzpzdGFydHxlbmQpKT98dGltZXJ8bGlzdGVufCg/Om5vXyk/c2Vuc29yfGNvbnRyb2x8KD86bm90Xyk/YXRfKD86cm90Xyk/dGFyZ2V0fG1vbmV5fGVtYWlsfGV4cGVyaWVuY2VfcGVybWlzc2lvbnMoPzpfZGVuaWVkKT98cnVuX3RpbWVfcGVybWlzc2lvbnN8Y2hhbmdlZHxhdHRhY2h8ZGF0YXNlcnZlcnxtb3ZpbmdfKD86c3RhcnR8ZW5kKXxsaW5rX21lc3NhZ2V8KD86b258b2JqZWN0KV9yZXp8cmVtb3RlX2RhdGF8aHR0cF9yZSg/OnNwb25zZXxxdWVzdCl8cGF0aF91cGRhdGV8dHJhbnNhY3Rpb25fcmVzdWx0KVxcXFxiJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIExTTF9GVU5DVElPTlMsXG4gICAgICAgICAgICBMU0xfQ09OU1RBTlRTLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzppbnRlZ2VyfGZsb2F0fHN0cmluZ3xrZXl8dmVjdG9yfHF1YXRlcm5pb258cm90YXRpb258bGlzdClcXFxcYidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgT1BFTklOR19MT05HX0JSQUNLRVQgPSAnXFxcXFs9KlxcXFxbJztcbiAgdmFyIENMT1NJTkdfTE9OR19CUkFDS0VUID0gJ1xcXFxdPSpcXFxcXSc7XG4gIHZhciBMT05HX0JSQUNLRVRTID0ge1xuICAgIGJlZ2luOiBPUEVOSU5HX0xPTkdfQlJBQ0tFVCwgZW5kOiBDTE9TSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICBjb250YWluczogWydzZWxmJ11cbiAgfTtcbiAgdmFyIENPTU1FTlRTID0gW1xuICAgIGhsanMuQ09NTUVOVCgnLS0oPyEnICsgT1BFTklOR19MT05HX0JSQUNLRVQgKyAnKScsICckJyksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJy0tJyArIE9QRU5JTkdfTE9OR19CUkFDS0VULFxuICAgICAgQ0xPU0lOR19MT05HX0JSQUNLRVQsXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5zOiBbTE9OR19CUkFDS0VUU10sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICApXG4gIF07XG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiBcInRydWUgZmFsc2UgbmlsXCIsXG4gICAgICBrZXl3b3JkOiBcImFuZCBicmVhayBkbyBlbHNlIGVsc2VpZiBlbmQgZm9yIGdvdG8gaWYgaW4gbG9jYWwgbm90IG9yIHJlcGVhdCByZXR1cm4gdGhlbiB1bnRpbCB3aGlsZVwiLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8vTWV0YXRhZ3MgYW5kIGdsb2JhbHM6XG4gICAgICAgICdfRyBfRU5WIF9WRVJTSU9OIF9faW5kZXggX19uZXdpbmRleCBfX21vZGUgX19jYWxsIF9fbWV0YXRhYmxlIF9fdG9zdHJpbmcgX19sZW4gJyArXG4gICAgICAgICdfX2djIF9fYWRkIF9fc3ViIF9fbXVsIF9fZGl2IF9fbW9kIF9fcG93IF9fY29uY2F0IF9fdW5tIF9fZXEgX19sdCBfX2xlIGFzc2VydCAnICtcbiAgICAgICAgLy9TdGFuZGFyZCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzOlxuICAgICAgICAnY29sbGVjdGdhcmJhZ2UgZG9maWxlIGVycm9yIGdldGZlbnYgZ2V0bWV0YXRhYmxlIGlwYWlycyBsb2FkIGxvYWRmaWxlIGxvYWRzdHJpbmcnICtcbiAgICAgICAgJ21vZHVsZSBuZXh0IHBhaXJzIHBjYWxsIHByaW50IHJhd2VxdWFsIHJhd2dldCByYXdzZXQgcmVxdWlyZSBzZWxlY3Qgc2V0ZmVudicgK1xuICAgICAgICAnc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBhcmcgc2VsZicgK1xuICAgICAgICAvL0xpYnJhcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcyAob25lIGxpbmUgcGVyIGxpYnJhcnkpOlxuICAgICAgICAnY29yb3V0aW5lIHJlc3VtZSB5aWVsZCBzdGF0dXMgd3JhcCBjcmVhdGUgcnVubmluZyBkZWJ1ZyBnZXR1cHZhbHVlICcgK1xuICAgICAgICAnZGVidWcgc2V0aG9vayBnZXRtZXRhdGFibGUgZ2V0aG9vayBzZXRtZXRhdGFibGUgc2V0bG9jYWwgdHJhY2ViYWNrIHNldGZlbnYgZ2V0aW5mbyBzZXR1cHZhbHVlIGdldGxvY2FsIGdldHJlZ2lzdHJ5IGdldGZlbnYgJyArXG4gICAgICAgICdpbyBsaW5lcyB3cml0ZSBjbG9zZSBmbHVzaCBvcGVuIG91dHB1dCB0eXBlIHJlYWQgc3RkZXJyIHN0ZGluIGlucHV0IHN0ZG91dCBwb3BlbiB0bXBmaWxlICcgK1xuICAgICAgICAnbWF0aCBsb2cgbWF4IGFjb3MgaHVnZSBsZGV4cCBwaSBjb3MgdGFuaCBwb3cgZGVnIHRhbiBjb3NoIHNpbmggcmFuZG9tIHJhbmRvbXNlZWQgZnJleHAgY2VpbCBmbG9vciByYWQgYWJzIHNxcnQgbW9kZiBhc2luIG1pbiBtb2QgZm1vZCBsb2cxMCBhdGFuMiBleHAgc2luIGF0YW4gJyArXG4gICAgICAgICdvcyBleGl0IHNldGxvY2FsZSBkYXRlIGdldGVudiBkaWZmdGltZSByZW1vdmUgdGltZSBjbG9jayB0bXBuYW1lIHJlbmFtZSBleGVjdXRlIHBhY2thZ2UgcHJlbG9hZCBsb2FkbGliIGxvYWRlZCBsb2FkZXJzIGNwYXRoIGNvbmZpZyBwYXRoIHNlZWFsbCAnICtcbiAgICAgICAgJ3N0cmluZyBzdWIgdXBwZXIgbGVuIGdmaW5kIHJlcCBmaW5kIG1hdGNoIGNoYXIgZHVtcCBnbWF0Y2ggcmV2ZXJzZSBieXRlIGZvcm1hdCBnc3ViIGxvd2VyICcgK1xuICAgICAgICAndGFibGUgc2V0biBpbnNlcnQgZ2V0biBmb3JlYWNoaSBtYXhuIGZvcmVhY2ggY29uY2F0IHNvcnQgcmVtb3ZlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IENPTU1FTlRTLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJyhbX2EtekEtWl1cXFxcdypcXFxcLikqKFtfYS16QS1aXVxcXFx3KjopP1tfYS16QS1aXVxcXFx3Kid9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IENPTU1FTlRTXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChDT01NRU5UUylcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogT1BFTklOR19MT05HX0JSQUNLRVQsIGVuZDogQ0xPU0lOR19MT05HX0JSQUNLRVQsXG4gICAgICAgIGNvbnRhaW5zOiBbTE9OR19CUkFDS0VUU10sXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfVxuICAgIF0pXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvKiBWYXJpYWJsZXM6IHNpbXBsZSAoZWcgJCh2YXIpKSBhbmQgc3BlY2lhbCAoZWcgJEApICovXG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcJFxcXFwoJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkW0AlPD9cXF5cXCtcXCpdL1xuICAgICAgfSxcbiAgICBdXG4gIH07XG4gIC8qIFF1b3RlZCBzdHJpbmcgd2l0aCB2YXJpYWJsZXMgaW5zaWRlICovXG4gIHZhciBRVU9URV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBWQVJJQUJMRSxcbiAgICBdXG4gIH07XG4gIC8qIEZ1bmN0aW9uOiAkKGZ1bmMgYXJnLC4uLikgKi9cbiAgdmFyIEZVTkMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkXFwoW1xcdy1dK1xccy8sIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnc3Vic3QgcGF0c3Vic3Qgc3RyaXAgZmluZHN0cmluZyBmaWx0ZXIgZmlsdGVyLW91dCBzb3J0ICcgK1xuICAgICAgICAnd29yZCB3b3JkbGlzdCBmaXJzdHdvcmQgbGFzdHdvcmQgZGlyIG5vdGRpciBzdWZmaXggYmFzZW5hbWUgJyArXG4gICAgICAgICdhZGRzdWZmaXggYWRkcHJlZml4IGpvaW4gd2lsZGNhcmQgcmVhbHBhdGggYWJzcGF0aCBlcnJvciB3YXJuaW5nICcgK1xuICAgICAgICAnc2hlbGwgb3JpZ2luIGZsYXZvciBmb3JlYWNoIGlmIG9yIGFuZCBjYWxsIGV2YWwgZmlsZSB2YWx1ZScsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgXVxuICB9O1xuICAvKiBWYXJpYWJsZSBhc3NpZ25tZW50ICovXG4gIHZhciBBU1NJR05NRU5UID0ge1xuICAgIGJlZ2luOiAnXicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqKD89WzorP10/PSknXG4gIH07XG4gIC8qIE1ldGEgdGFyZ2V0cyAoLlBIT05ZKSAqL1xuICB2YXIgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL15cXC5QSE9OWTovLCBlbmQ6IC8kLyxcbiAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnLlBIT05ZJ30sXG4gICAgbGV4ZW1lczogL1tcXC5cXHddKy9cbiAgfTtcbiAgLyogVGFyZ2V0cyAqL1xuICB2YXIgVEFSR0VUID0ge1xuICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgIGJlZ2luOiAvXlteXFxzXSs6LywgZW5kOiAvJC8sXG4gICAgY29udGFpbnM6IFtWQVJJQUJMRSxdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtaycsICdtYWsnXSxcbiAgICBrZXl3b3JkczpcbiAgICAgICdkZWZpbmUgZW5kZWYgdW5kZWZpbmUgaWZkZWYgaWZuZGVmIGlmZXEgaWZuZXEgZWxzZSBlbmRpZiAnICtcbiAgICAgICdpbmNsdWRlIC1pbmNsdWRlIHNpbmNsdWRlIG92ZXJyaWRlIGV4cG9ydCB1bmV4cG9ydCBwcml2YXRlIHZwYXRoJyxcbiAgICBsZXhlbWVzOiAvW1xcdy1dKy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEZVTkMsXG4gICAgICBBU1NJR05NRU5ULFxuICAgICAgTUVUQSxcbiAgICAgIFRBUkdFVCxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbW1hJywgJ3dsJ10sXG4gICAgbGV4ZW1lczogJyhcXFxcJHxcXFxcYiknICsgaGxqcy5JREVOVF9SRSArICdcXFxcYicsXG4gICAgLy9cbiAgICAvLyBUaGUgbGlzdCBvZiBcImtleXdvcmRzXCIgKFN5c3RlbWAgc3ltYm9scykgd2FzIGRldGVybWluZWQgYnkgZXZhbHVhdGluZyB0aGUgZm9sbG93aW5nIFdvbGZyYW0gTGFuZ3VhZ2UgY29kZSBpbiBNYXRoZW1hdGljYSAxMi4wOlxuICAgIC8vXG4gICAgLy8gU3RyaW5nUmlmZmxlW1xuICAgIC8vICAgXCInXCIgPD4gU3RyaW5nUmlmZmxlWyMsIFwiIFwiXSA8PiBcIidcIiAmIC9AXG4gICAgLy8gICAgIFZhbHVlc1tHcm91cEJ5W1xuICAgIC8vICAgICAgIFNlbGVjdFtOYW1lc1tcIlN5c3RlbWAqXCJdLFxuICAgIC8vICAgICAgIFN0cmluZ1N0YXJ0c1FbIywgQ2hhcmFjdGVyUmFuZ2VbXCJBXCIsIFwiWlwiXSB8IFwiJFwiXSAmXSxcbiAgICAvLyAgICAgICBGaXJzdFtDaGFyYWN0ZXJzWyNdXSAmXV0sIFwiICtcXG5cIl1cbiAgICAvL1xuICAgIGtleXdvcmRzOiAnQUFTVHJpYW5nbGUgQWJlbGlhbkdyb3VwIEFib3J0IEFib3J0S2VybmVscyBBYm9ydFByb3RlY3QgQWJvcnRTY2hlZHVsZWRUYXNrIEFib3ZlIEFicyBBYnNBcmcgQWJzQXJnUGxvdCBBYnNvbHV0ZSBBYnNvbHV0ZUNvcnJlbGF0aW9uIEFic29sdXRlQ29ycmVsYXRpb25GdW5jdGlvbiBBYnNvbHV0ZUN1cnJlbnRWYWx1ZSBBYnNvbHV0ZURhc2hpbmcgQWJzb2x1dGVGaWxlTmFtZSBBYnNvbHV0ZU9wdGlvbnMgQWJzb2x1dGVQb2ludFNpemUgQWJzb2x1dGVUaGlja25lc3MgQWJzb2x1dGVUaW1lIEFic29sdXRlVGltaW5nIEFjY2VwdGFuY2VUaHJlc2hvbGQgQWNjb3VudGluZ0Zvcm0gQWNjdW11bGF0ZSBBY2N1cmFjeSBBY2N1cmFjeUdvYWwgQWN0aW9uRGVsYXkgQWN0aW9uTWVudSBBY3Rpb25NZW51Qm94IEFjdGlvbk1lbnVCb3hPcHRpb25zIEFjdGl2YXRlIEFjdGl2ZSBBY3RpdmVDbGFzc2lmaWNhdGlvbiBBY3RpdmVDbGFzc2lmaWNhdGlvbk9iamVjdCBBY3RpdmVJdGVtIEFjdGl2ZVByZWRpY3Rpb24gQWN0aXZlUHJlZGljdGlvbk9iamVjdCBBY3RpdmVTdHlsZSBBY3ljbGljR3JhcGhRIEFkZE9uSGVscFBhdGggQWRkU2lkZXMgQWRkVG8gQWRkVG9TZWFyY2hJbmRleCBBZGRVc2VycyBBZGphY2VuY3lHcmFwaCBBZGphY2VuY3lMaXN0IEFkamFjZW5jeU1hdHJpeCBBZGp1c3RtZW50Qm94IEFkanVzdG1lbnRCb3hPcHRpb25zIEFkanVzdFRpbWVTZXJpZXNGb3JlY2FzdCBBZG1pbmlzdHJhdGl2ZURpdmlzaW9uRGF0YSBBZmZpbmVIYWxmU3BhY2UgQWZmaW5lU3BhY2UgQWZmaW5lU3RhdGVTcGFjZU1vZGVsIEFmZmluZVRyYW5zZm9ybSBBZnRlciBBZ2dyZWdhdGVkRW50aXR5Q2xhc3MgQWdncmVnYXRpb25MYXllciBBaXJjcmFmdERhdGEgQWlycG9ydERhdGEgQWlyUHJlc3N1cmVEYXRhIEFpclRlbXBlcmF0dXJlRGF0YSBBaXJ5QWkgQWlyeUFpUHJpbWUgQWlyeUFpWmVybyBBaXJ5QmkgQWlyeUJpUHJpbWUgQWlyeUJpWmVybyBBbGdlYnJhaWNJbnRlZ2VyUSBBbGdlYnJhaWNOdW1iZXIgQWxnZWJyYWljTnVtYmVyRGVub21pbmF0b3IgQWxnZWJyYWljTnVtYmVyTm9ybSBBbGdlYnJhaWNOdW1iZXJQb2x5bm9taWFsIEFsZ2VicmFpY051bWJlclRyYWNlIEFsZ2VicmFpY1J1bGVzIEFsZ2VicmFpY1J1bGVzRGF0YSBBbGdlYnJhaWNzIEFsZ2VicmFpY1VuaXRRIEFsaWdubWVudCBBbGlnbm1lbnRNYXJrZXIgQWxpZ25tZW50UG9pbnQgQWxsIEFsbG93QWR1bHRDb250ZW50IEFsbG93ZWRDbG91ZEV4dHJhUGFyYW1ldGVycyBBbGxvd2VkQ2xvdWRQYXJhbWV0ZXJFeHRlbnNpb25zIEFsbG93ZWREaW1lbnNpb25zIEFsbG93ZWRGcmVxdWVuY3lSYW5nZSBBbGxvd2VkSGVhZHMgQWxsb3dHcm91cENsb3NlIEFsbG93SW5jb21wbGV0ZSBBbGxvd0lubGluZUNlbGxzIEFsbG93S2VybmVsSW5pdGlhbGl6YXRpb24gQWxsb3dMb29zZUdyYW1tYXIgQWxsb3dSZXZlcnNlR3JvdXBDbG9zZSBBbGxvd1NjcmlwdExldmVsQ2hhbmdlIEFsbFRydWUgQWxwaGFiZXQgQWxwaGFiZXRpY09yZGVyIEFscGhhYmV0aWNTb3J0IEFscGhhQ2hhbm5lbCBBbHRlcm5hdGVJbWFnZSBBbHRlcm5hdGluZ0ZhY3RvcmlhbCBBbHRlcm5hdGluZ0dyb3VwIEFsdGVybmF0aXZlSHlwb3RoZXNpcyBBbHRlcm5hdGl2ZXMgQWx0aXR1ZGVNZXRob2QgQW1iaWVudExpZ2h0IEFtYmlndWl0eUZ1bmN0aW9uIEFtYmlndWl0eUxpc3QgQW5hbHl0aWMgQW5hdG9teURhdGEgQW5hdG9teUZvcm0gQW5hdG9teVBsb3QzRCBBbmF0b215U2tpblN0eWxlIEFuYXRvbXlTdHlsaW5nIEFuY2hvcmVkU2VhcmNoIEFuZCBBbmRlcnNvbkRhcmxpbmdUZXN0IEFuZ2VySiBBbmdsZUJpc2VjdG9yIEFuZ2xlQnJhY2tldCBBbmdsZVBhdGggQW5nbGVQYXRoM0QgQW5nbGVWZWN0b3IgQW5ndWxhckdhdWdlIEFuaW1hdGUgQW5pbWF0aW9uQ3ljbGVPZmZzZXQgQW5pbWF0aW9uQ3ljbGVSZXBldGl0aW9ucyBBbmltYXRpb25EaXJlY3Rpb24gQW5pbWF0aW9uRGlzcGxheVRpbWUgQW5pbWF0aW9uUmF0ZSBBbmltYXRpb25SZXBldGl0aW9ucyBBbmltYXRpb25SdW5uaW5nIEFuaW1hdGlvblJ1blRpbWUgQW5pbWF0aW9uVGltZUluZGV4IEFuaW1hdG9yIEFuaW1hdG9yQm94IEFuaW1hdG9yQm94T3B0aW9ucyBBbmltYXRvckVsZW1lbnRzIEFubm90YXRlIEFubm90YXRpb24gQW5ub3RhdGlvbkRlbGV0ZSBBbm5vdGF0aW9uTmFtZXMgQW5ub3RhdGlvblJ1bGVzIEFubm90YXRpb25WYWx1ZSBBbm51aXR5IEFubnVpdHlEdWUgQW5udWx1cyBBbm9tYWx5RGV0ZWN0aW9uIEFub21hbHlEZXRlY3RvckZ1bmN0aW9uIEFub255bW91cyBBbnRpYWxpYXNpbmcgQW50aWhlcm1pdGlhbk1hdHJpeFEgQW50aXN5bW1ldHJpYyBBbnRpc3ltbWV0cmljTWF0cml4USBBbnRvbnltcyBBbnlPcmRlciBBbnlTdWJzZXQgQW55VHJ1ZSBBcGFydCBBcGFydFNxdWFyZUZyZWUgQVBJRnVuY3Rpb24gQXBwZWFyYW5jZSBBcHBlYXJhbmNlRWxlbWVudHMgQXBwZWFyYW5jZVJ1bGVzIEFwcGVsbEYxIEFwcGVuZCBBcHBlbmRDaGVjayBBcHBlbmRMYXllciBBcHBlbmRUbyBBcHBsaWNhdGlvbklkZW50aWZpY2F0aW9uS2V5IEFwcGx5IEFwcGx5U2lkZXMgQXJjQ29zIEFyY0Nvc2ggQXJjQ290IEFyY0NvdGggQXJjQ3NjIEFyY0NzY2ggQXJjQ3VydmF0dXJlIEFSQ0hQcm9jZXNzIEFyY0xlbmd0aCBBcmNTZWMgQXJjU2VjaCBBcmNTaW4gQXJjU2luRGlzdHJpYnV0aW9uIEFyY1NpbmggQXJjVGFuIEFyY1RhbmggQXJlYSBBcmcgQXJnTWF4IEFyZ01pbiBBcmd1bWVudENvdW50USBBUklNQVByb2Nlc3MgQXJpdGhtZXRpY0dlb21ldHJpY01lYW4gQVJNQVByb2Nlc3MgQXJvdW5kIEFyb3VuZFJlcGxhY2UgQVJQcm9jZXNzIEFycmF5IEFycmF5Q29tcG9uZW50cyBBcnJheURlcHRoIEFycmF5RmlsdGVyIEFycmF5RmxhdHRlbiBBcnJheU1lc2ggQXJyYXlQYWQgQXJyYXlQbG90IEFycmF5USBBcnJheVJlc2FtcGxlIEFycmF5UmVzaGFwZSBBcnJheVJ1bGVzIEFycmF5cyBBcnJvdyBBcnJvdzNEQm94IEFycm93Qm94IEFycm93aGVhZHMgQVNBVHJpYW5nbGUgQXNrIEFza0FwcGVuZCBBc2tDb25maXJtIEFza0Rpc3BsYXkgQXNrZWRRIEFza2VkVmFsdWUgQXNrRnVuY3Rpb24gQXNrU3RhdGUgQXNrVGVtcGxhdGVEaXNwbGF5IEFzcGVjdFJhdGlvIEFzcGVjdFJhdGlvRml4ZWQgQXNzZXJ0IEFzc29jaWF0ZVRvIEFzc29jaWF0aW9uIEFzc29jaWF0aW9uRm9ybWF0IEFzc29jaWF0aW9uTWFwIEFzc29jaWF0aW9uUSBBc3NvY2lhdGlvblRocmVhZCBBc3N1bWVEZXRlcm1pbmlzdGljIEFzc3VtaW5nIEFzc3VtcHRpb25zIEFzdHJvbm9taWNhbERhdGEgQXN5bXB0b3RpY0RTb2x2ZVZhbHVlIEFzeW1wdG90aWNFcXVhbCBBc3ltcHRvdGljRXF1aXZhbGVudCBBc3ltcHRvdGljR3JlYXRlciBBc3ltcHRvdGljR3JlYXRlckVxdWFsIEFzeW1wdG90aWNJbnRlZ3JhdGUgQXN5bXB0b3RpY0xlc3MgQXN5bXB0b3RpY0xlc3NFcXVhbCBBc3ltcHRvdGljT3V0cHV0VHJhY2tlciBBc3ltcHRvdGljUlNvbHZlVmFsdWUgQXN5bXB0b3RpY1NvbHZlIEFzeW1wdG90aWNTdW0gQXN5bmNocm9ub3VzIEFzeW5jaHJvbm91c1Rhc2tPYmplY3QgQXN5bmNocm9ub3VzVGFza3MgQXRvbSBBdG9tQ29vcmRpbmF0ZXMgQXRvbUNvdW50IEF0b21EaWFncmFtQ29vcmRpbmF0ZXMgQXRvbUxpc3QgQXRvbVEgQXR0ZW50aW9uTGF5ZXIgQXR0cmlidXRlcyBBdWRpbyBBdWRpb0FtcGxpZnkgQXVkaW9Bbm5vdGF0ZSBBdWRpb0Fubm90YXRpb25Mb29rdXAgQXVkaW9CbG9ja01hcCBBdWRpb0NhcHR1cmUgQXVkaW9DaGFubmVsQXNzaWdubWVudCBBdWRpb0NoYW5uZWxDb21iaW5lIEF1ZGlvQ2hhbm5lbE1peCBBdWRpb0NoYW5uZWxzIEF1ZGlvQ2hhbm5lbFNlcGFyYXRlIEF1ZGlvRGF0YSBBdWRpb0RlbGF5IEF1ZGlvRGVsZXRlIEF1ZGlvRGV2aWNlIEF1ZGlvRGlzdGFuY2UgQXVkaW9GYWRlIEF1ZGlvRnJlcXVlbmN5U2hpZnQgQXVkaW9HZW5lcmF0b3IgQXVkaW9JZGVudGlmeSBBdWRpb0lucHV0RGV2aWNlIEF1ZGlvSW5zZXJ0IEF1ZGlvSW50ZXJ2YWxzIEF1ZGlvSm9pbiBBdWRpb0xhYmVsIEF1ZGlvTGVuZ3RoIEF1ZGlvTG9jYWxNZWFzdXJlbWVudHMgQXVkaW9Mb29waW5nIEF1ZGlvTG91ZG5lc3MgQXVkaW9NZWFzdXJlbWVudHMgQXVkaW9Ob3JtYWxpemUgQXVkaW9PdXRwdXREZXZpY2UgQXVkaW9PdmVybGF5IEF1ZGlvUGFkIEF1ZGlvUGFuIEF1ZGlvUGFydGl0aW9uIEF1ZGlvUGF1c2UgQXVkaW9QaXRjaFNoaWZ0IEF1ZGlvUGxheSBBdWRpb1Bsb3QgQXVkaW9RIEF1ZGlvUmVjb3JkIEF1ZGlvUmVwbGFjZSBBdWRpb1Jlc2FtcGxlIEF1ZGlvUmV2ZXJiIEF1ZGlvU2FtcGxlUmF0ZSBBdWRpb1NwZWN0cmFsTWFwIEF1ZGlvU3BlY3RyYWxUcmFuc2Zvcm1hdGlvbiBBdWRpb1NwbGl0IEF1ZGlvU3RvcCBBdWRpb1N0cmVhbSBBdWRpb1N0cmVhbXMgQXVkaW9UaW1lU3RyZXRjaCBBdWRpb1RyaW0gQXVkaW9UeXBlIEF1Z21lbnRlZFBvbHloZWRyb24gQXVnbWVudGVkU3ltbWV0cmljUG9seW5vbWlhbCBBdXRoZW50aWNhdGUgQXV0aGVudGljYXRpb24gQXV0aGVudGljYXRpb25EaWFsb2cgQXV0b0FjdGlvbiBBdXRvY29tcGxldGUgQXV0b2NvbXBsZXRpb25GdW5jdGlvbiBBdXRvQ29weSBBdXRvY29ycmVsYXRpb25UZXN0IEF1dG9EZWxldGUgQXV0b0V2YWx1YXRlRXZlbnRzIEF1dG9HZW5lcmF0ZWRQYWNrYWdlIEF1dG9JbmRlbnQgQXV0b0luZGVudFNwYWNpbmdzIEF1dG9JdGFsaWNXb3JkcyBBdXRvbG9hZFBhdGggQXV0b01hdGNoIEF1dG9tYXRpYyBBdXRvbWF0aWNJbWFnZVNpemUgQXV0b011bHRpcGxpY2F0aW9uU3ltYm9sIEF1dG9OdW1iZXJGb3JtYXR0aW5nIEF1dG9PcGVuTm90ZWJvb2tzIEF1dG9PcGVuUGFsZXR0ZXMgQXV0b1F1b3RlQ2hhcmFjdGVycyBBdXRvUmVmcmVzaGVkIEF1dG9SZW1vdmUgQXV0b3J1blNlcXVlbmNpbmcgQXV0b1NjYWxpbmcgQXV0b1Njcm9sbCBBdXRvU3BhY2luZyBBdXRvU3R5bGVPcHRpb25zIEF1dG9TdHlsZVdvcmRzIEF1dG9TdWJtaXR0aW5nIEF4ZXMgQXhlc0VkZ2UgQXhlc0xhYmVsIEF4ZXNPcmlnaW4gQXhlc1N0eWxlIEF4aW9tYXRpY1RoZW9yeSBBeGlzJyArXG4gICAgICAnQmFieU1vbnN0ZXJHcm91cEIgQmFjayBCYWNrZ3JvdW5kIEJhY2tncm91bmRBcHBlYXJhbmNlIEJhY2tncm91bmRUYXNrc1NldHRpbmdzIEJhY2tzbGFzaCBCYWNrc3Vic3RpdHV0aW9uIEJhY2t3YXJkIEJhbGwgQmFuZCBCYW5kcGFzc0ZpbHRlciBCYW5kc3RvcEZpbHRlciBCYXJhYmFzaUFsYmVydEdyYXBoRGlzdHJpYnV0aW9uIEJhckNoYXJ0IEJhckNoYXJ0M0QgQmFyY29kZUltYWdlIEJhcmNvZGVSZWNvZ25pemUgQmFyaW5naGF1c0hlbnplVGVzdCBCYXJMZWdlbmQgQmFybG93UHJvc2NoYW5JbXBvcnRhbmNlIEJhcm5lc0cgQmFyT3JpZ2luIEJhclNwYWNpbmcgQmFydGxldHRIYW5uV2luZG93IEJhcnRsZXR0V2luZG93IEJhc2VEZWNvZGUgQmFzZUVuY29kZSBCYXNlRm9ybSBCYXNlbGluZSBCYXNlbGluZVBvc2l0aW9uIEJhc2VTdHlsZSBCYXNpY1JlY3VycmVudExheWVyIEJhdGNoTm9ybWFsaXphdGlvbkxheWVyIEJhdGNoU2l6ZSBCYXRlc0Rpc3RyaWJ1dGlvbiBCYXR0bGVMZW1hcmllV2F2ZWxldCBCYXllc2lhbk1heGltaXphdGlvbiBCYXllc2lhbk1heGltaXphdGlvbk9iamVjdCBCYXllc2lhbk1pbmltaXphdGlvbiBCYXllc2lhbk1pbmltaXphdGlvbk9iamVjdCBCZWNhdXNlIEJlY2ttYW5uRGlzdHJpYnV0aW9uIEJlZXAgQmVmb3JlIEJlZ2luIEJlZ2luRGlhbG9nUGFja2V0IEJlZ2luRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCBCZWdpblBhY2thZ2UgQmVsbEIgQmVsbFkgQmVsb3cgQmVuZm9yZERpc3RyaWJ1dGlvbiBCZW5pbmlEaXN0cmlidXRpb24gQmVua3RhbmRlckdpYnJhdERpc3RyaWJ1dGlvbiBCZW5rdGFuZGVyV2VpYnVsbERpc3RyaWJ1dGlvbiBCZXJub3VsbGlCIEJlcm5vdWxsaURpc3RyaWJ1dGlvbiBCZXJub3VsbGlHcmFwaERpc3RyaWJ1dGlvbiBCZXJub3VsbGlQcm9jZXNzIEJlcm5zdGVpbkJhc2lzIEJlc3NlbEZpbHRlck1vZGVsIEJlc3NlbEkgQmVzc2VsSiBCZXNzZWxKWmVybyBCZXNzZWxLIEJlc3NlbFkgQmVzc2VsWVplcm8gQmV0YSBCZXRhQmlub21pYWxEaXN0cmlidXRpb24gQmV0YURpc3RyaWJ1dGlvbiBCZXRhTmVnYXRpdmVCaW5vbWlhbERpc3RyaWJ1dGlvbiBCZXRhUHJpbWVEaXN0cmlidXRpb24gQmV0YVJlZ3VsYXJpemVkIEJldHdlZW4gQmV0d2Vlbm5lc3NDZW50cmFsaXR5IEJldmVsZWRQb2x5aGVkcm9uIEJlemllckN1cnZlIEJlemllckN1cnZlM0RCb3ggQmV6aWVyQ3VydmUzREJveE9wdGlvbnMgQmV6aWVyQ3VydmVCb3ggQmV6aWVyQ3VydmVCb3hPcHRpb25zIEJlemllckZ1bmN0aW9uIEJpbGF0ZXJhbEZpbHRlciBCaW5hcml6ZSBCaW5hcnlEZXNlcmlhbGl6ZSBCaW5hcnlEaXN0YW5jZSBCaW5hcnlGb3JtYXQgQmluYXJ5SW1hZ2VRIEJpbmFyeVJlYWQgQmluYXJ5UmVhZExpc3QgQmluYXJ5U2VyaWFsaXplIEJpbmFyeVdyaXRlIEJpbkNvdW50cyBCaW5MaXN0cyBCaW5vbWlhbCBCaW5vbWlhbERpc3RyaWJ1dGlvbiBCaW5vbWlhbFByb2Nlc3MgQmlub3JtYWxEaXN0cmlidXRpb24gQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldCBCaXBhcnRpdGVHcmFwaFEgQmlxdWFkcmF0aWNGaWx0ZXJNb2RlbCBCaXJuYmF1bUltcG9ydGFuY2UgQmlybmJhdW1TYXVuZGVyc0Rpc3RyaWJ1dGlvbiBCaXRBbmQgQml0Q2xlYXIgQml0R2V0IEJpdExlbmd0aCBCaXROb3QgQml0T3IgQml0U2V0IEJpdFNoaWZ0TGVmdCBCaXRTaGlmdFJpZ2h0IEJpdFhvciBCaXdlaWdodExvY2F0aW9uIEJpd2VpZ2h0TWlkdmFyaWFuY2UgQmxhY2sgQmxhY2ttYW5IYXJyaXNXaW5kb3cgQmxhY2ttYW5OdXR0YWxsV2luZG93IEJsYWNrbWFuV2luZG93IEJsYW5rIEJsYW5rRm9ybSBCbGFua051bGxTZXF1ZW5jZSBCbGFua1NlcXVlbmNlIEJsZW5kIEJsb2NrIEJsb2NrY2hhaW5BZGRyZXNzRGF0YSBCbG9ja2NoYWluQmFzZSBCbG9ja2NoYWluQmxvY2tEYXRhIEJsb2NrY2hhaW5Db250cmFjdFZhbHVlIEJsb2NrY2hhaW5EYXRhIEJsb2NrY2hhaW5HZXQgQmxvY2tjaGFpbktleUVuY29kZSBCbG9ja2NoYWluUHV0IEJsb2NrY2hhaW5Ub2tlbkRhdGEgQmxvY2tjaGFpblRyYW5zYWN0aW9uIEJsb2NrY2hhaW5UcmFuc2FjdGlvbkRhdGEgQmxvY2tjaGFpblRyYW5zYWN0aW9uU2lnbiBCbG9ja2NoYWluVHJhbnNhY3Rpb25TdWJtaXQgQmxvY2tNYXAgQmxvY2tSYW5kb20gQmxvbXF2aXN0QmV0YSBCbG9tcXZpc3RCZXRhVGVzdCBCbHVlIEJsdXIgQm9kZVBsb3QgQm9obWFuV2luZG93IEJvbGQgQm9uZCBCb25kQ291bnQgQm9uZExpc3QgQm9uZFEgQm9va21hcmtzIEJvb2xlIEJvb2xlYW5Db25zZWN1dGl2ZUZ1bmN0aW9uIEJvb2xlYW5Db252ZXJ0IEJvb2xlYW5Db3VudGluZ0Z1bmN0aW9uIEJvb2xlYW5GdW5jdGlvbiBCb29sZWFuR3JhcGggQm9vbGVhbk1heHRlcm1zIEJvb2xlYW5NaW5pbWl6ZSBCb29sZWFuTWludGVybXMgQm9vbGVhblEgQm9vbGVhblJlZ2lvbiBCb29sZWFucyBCb29sZWFuU3RyaW5ncyBCb29sZWFuVGFibGUgQm9vbGVhblZhcmlhYmxlcyBCb3JkZXJEaW1lbnNpb25zIEJvcmVsVGFubmVyRGlzdHJpYnV0aW9uIEJvdHRvbSBCb3R0b21IYXRUcmFuc2Zvcm0gQm91bmRhcnlEaXNjcmV0aXplR3JhcGhpY3MgQm91bmRhcnlEaXNjcmV0aXplUmVnaW9uIEJvdW5kYXJ5TWVzaCBCb3VuZGFyeU1lc2hSZWdpb24gQm91bmRhcnlNZXNoUmVnaW9uUSBCb3VuZGFyeVN0eWxlIEJvdW5kZWRSZWdpb25RIEJvdW5kaW5nUmVnaW9uIEJvdW5kcyBCb3ggQm94QmFzZWxpbmVTaGlmdCBCb3hEYXRhIEJveERpbWVuc2lvbnMgQm94ZWQgQm94ZXMgQm94Rm9ybSBCb3hGb3JtRm9ybWF0VHlwZXMgQm94RnJhbWUgQm94SUQgQm94TWFyZ2lucyBCb3hNYXRyaXggQm94T2JqZWN0IEJveFJhdGlvcyBCb3hSb3RhdGlvbiBCb3hSb3RhdGlvblBvaW50IEJveFN0eWxlIEJveFdoaXNrZXJDaGFydCBCcmEgQnJhY2tldGluZ0JhciBCcmFLZXQgQnJheUN1cnRpc0Rpc3RhbmNlIEJyZWFkdGhGaXJzdFNjYW4gQnJlYWsgQnJpZGdlRGF0YSBCcmlnaHRuZXNzRXF1YWxpemUgQnJvYWRjYXN0U3RhdGlvbkRhdGEgQnJvd24gQnJvd25Gb3JzeXRoZVRlc3QgQnJvd25pYW5CcmlkZ2VQcm9jZXNzIEJyb3dzZXJDYXRlZ29yeSBCU3BsaW5lQmFzaXMgQlNwbGluZUN1cnZlIEJTcGxpbmVDdXJ2ZTNEQm94IEJTcGxpbmVDdXJ2ZTNEQm94T3B0aW9ucyBCU3BsaW5lQ3VydmVCb3ggQlNwbGluZUN1cnZlQm94T3B0aW9ucyBCU3BsaW5lRnVuY3Rpb24gQlNwbGluZVN1cmZhY2UgQlNwbGluZVN1cmZhY2UzREJveCBCU3BsaW5lU3VyZmFjZTNEQm94T3B0aW9ucyBCdWJibGVDaGFydCBCdWJibGVDaGFydDNEIEJ1YmJsZVNjYWxlIEJ1YmJsZVNpemVzIEJ1aWxkaW5nRGF0YSBCdWxsZXRHYXVnZSBCdXNpbmVzc0RheVEgQnV0dGVyZmx5R3JhcGggQnV0dGVyd29ydGhGaWx0ZXJNb2RlbCBCdXR0b24gQnV0dG9uQmFyIEJ1dHRvbkJveCBCdXR0b25Cb3hPcHRpb25zIEJ1dHRvbkNlbGwgQnV0dG9uQ29udGVudHMgQnV0dG9uRGF0YSBCdXR0b25FdmFsdWF0b3IgQnV0dG9uRXhwYW5kYWJsZSBCdXR0b25GcmFtZSBCdXR0b25GdW5jdGlvbiBCdXR0b25NYXJnaW5zIEJ1dHRvbk1pbkhlaWdodCBCdXR0b25Ob3RlIEJ1dHRvbk5vdGVib29rIEJ1dHRvblNvdXJjZSBCdXR0b25TdHlsZSBCdXR0b25TdHlsZU1lbnVMaXN0aW5nIEJ5dGUgQnl0ZUFycmF5IEJ5dGVBcnJheUZvcm1hdCBCeXRlQXJyYXlRIEJ5dGVBcnJheVRvU3RyaW5nIEJ5dGVDb3VudCBCeXRlT3JkZXJpbmcnICtcbiAgICAgICdDIENhY2hlZFZhbHVlIENhY2hlR3JhcGhpY3MgQ2FjaGVQZXJzaXN0ZW5jZSBDYWxlbmRhckNvbnZlcnQgQ2FsZW5kYXJEYXRhIENhbGVuZGFyVHlwZSBDYWxsb3V0IENhbGxvdXRNYXJrZXIgQ2FsbG91dFN0eWxlIENhbGxQYWNrZXQgQ2FuYmVycmFEaXN0YW5jZSBDYW5jZWwgQ2FuY2VsQnV0dG9uIENhbmRsZXN0aWNrQ2hhcnQgQ2Fub25pY2FsR3JhcGggQ2Fub25pY2FsaXplUG9seWdvbiBDYW5vbmljYWxpemVQb2x5aGVkcm9uIENhbm9uaWNhbE5hbWUgQ2Fub25pY2FsV2FycGluZ0NvcnJlc3BvbmRlbmNlIENhbm9uaWNhbFdhcnBpbmdEaXN0YW5jZSBDYW50b3JNZXNoIENhbnRvclN0YWlyY2FzZSBDYXAgQ2FwRm9ybSBDYXBpdGFsRGlmZmVyZW50aWFsRCBDYXBpdGFsaXplIENhcHN1bGVTaGFwZSBDYXB0dXJlUnVubmluZyBDYXJkaW5hbEJTcGxpbmVCYXNpcyBDYXJsZW1hbkxpbmVhcml6ZSBDYXJtaWNoYWVsTGFtYmRhIENhc2VPcmRlcmluZyBDYXNlcyBDYXNlU2Vuc2l0aXZlIENhc2hmbG93IENhc29yYXRpYW4gQ2F0YWxhbiBDYXRhbGFuTnVtYmVyIENhdGNoIENhdGVuYXRlIENhdGVuYXRlTGF5ZXIgQ2F1Y2h5RGlzdHJpYnV0aW9uIENhdWNoeVdpbmRvdyBDYXlsZXlHcmFwaCBDREYgQ0RGRGVwbG95IENERkluZm9ybWF0aW9uIENERldhdmVsZXQgQ2VpbGluZyBDZWxlc3RpYWxTeXN0ZW0gQ2VsbCBDZWxsQXV0b092ZXJ3cml0ZSBDZWxsQmFzZWxpbmUgQ2VsbEJvdW5kaW5nQm94IENlbGxCcmFja2V0T3B0aW9ucyBDZWxsQ2hhbmdlVGltZXMgQ2VsbENvbnRlbnRzIENlbGxDb250ZXh0IENlbGxEaW5nYmF0IENlbGxEeW5hbWljRXhwcmVzc2lvbiBDZWxsRWRpdER1cGxpY2F0ZSBDZWxsRWxlbWVudHNCb3VuZGluZ0JveCBDZWxsRWxlbWVudFNwYWNpbmdzIENlbGxFcGlsb2cgQ2VsbEV2YWx1YXRpb25EdXBsaWNhdGUgQ2VsbEV2YWx1YXRpb25GdW5jdGlvbiBDZWxsRXZhbHVhdGlvbkxhbmd1YWdlIENlbGxFdmVudEFjdGlvbnMgQ2VsbEZyYW1lIENlbGxGcmFtZUNvbG9yIENlbGxGcmFtZUxhYmVsTWFyZ2lucyBDZWxsRnJhbWVMYWJlbHMgQ2VsbEZyYW1lTWFyZ2lucyBDZWxsR3JvdXAgQ2VsbEdyb3VwRGF0YSBDZWxsR3JvdXBpbmcgQ2VsbEdyb3VwaW5nUnVsZXMgQ2VsbEhvcml6b250YWxTY3JvbGxpbmcgQ2VsbElEIENlbGxMYWJlbCBDZWxsTGFiZWxBdXRvRGVsZXRlIENlbGxMYWJlbE1hcmdpbnMgQ2VsbExhYmVsUG9zaXRpb25pbmcgQ2VsbExhYmVsU3R5bGUgQ2VsbExhYmVsVGVtcGxhdGUgQ2VsbE1hcmdpbnMgQ2VsbE9iamVjdCBDZWxsT3BlbiBDZWxsUHJpbnQgQ2VsbFByb2xvZyBDZWxscyBDZWxsU2l6ZSBDZWxsU3R5bGUgQ2VsbFRhZ3MgQ2VsbHVsYXJBdXRvbWF0b24gQ2Vuc29yZWREaXN0cmlidXRpb24gQ2Vuc29yaW5nIENlbnRlciBDZW50ZXJBcnJheSBDZW50ZXJEb3QgQ2VudHJhbEZlYXR1cmUgQ2VudHJhbE1vbWVudCBDZW50cmFsTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uIENlcHN0cm9ncmFtIENlcHN0cm9ncmFtQXJyYXkgQ2Vwc3RydW1BcnJheSBDRm9ybSBDaGFtcGVybm93bmVOdW1iZXIgQ2hhbmdlT3B0aW9ucyBDaGFubmVsQmFzZSBDaGFubmVsQnJva2VyQWN0aW9uIENoYW5uZWxEYXRhYmluIENoYW5uZWxIaXN0b3J5TGVuZ3RoIENoYW5uZWxMaXN0ZW4gQ2hhbm5lbExpc3RlbmVyIENoYW5uZWxMaXN0ZW5lcnMgQ2hhbm5lbExpc3RlbmVyV2FpdCBDaGFubmVsT2JqZWN0IENoYW5uZWxQcmVTZW5kRnVuY3Rpb24gQ2hhbm5lbFJlY2VpdmVyRnVuY3Rpb24gQ2hhbm5lbFNlbmQgQ2hhbm5lbFN1YnNjcmliZXJzIENoYW5WZXNlQmluYXJpemUgQ2hhcmFjdGVyIENoYXJhY3RlckNvdW50cyBDaGFyYWN0ZXJFbmNvZGluZyBDaGFyYWN0ZXJFbmNvZGluZ3NQYXRoIENoYXJhY3RlcmlzdGljRnVuY3Rpb24gQ2hhcmFjdGVyaXN0aWNQb2x5bm9taWFsIENoYXJhY3Rlck5hbWUgQ2hhcmFjdGVyUmFuZ2UgQ2hhcmFjdGVycyBDaGFydEJhc2VTdHlsZSBDaGFydEVsZW1lbnREYXRhIENoYXJ0RWxlbWVudERhdGFGdW5jdGlvbiBDaGFydEVsZW1lbnRGdW5jdGlvbiBDaGFydEVsZW1lbnRzIENoYXJ0TGFiZWxzIENoYXJ0TGF5b3V0IENoYXJ0TGVnZW5kcyBDaGFydFN0eWxlIENoZWJ5c2hldjFGaWx0ZXJNb2RlbCBDaGVieXNoZXYyRmlsdGVyTW9kZWwgQ2hlYnlzaGV2RGlzdGFuY2UgQ2hlYnlzaGV2VCBDaGVieXNoZXZVIENoZWNrIENoZWNrQWJvcnQgQ2hlY2tBbGwgQ2hlY2tib3ggQ2hlY2tib3hCYXIgQ2hlY2tib3hCb3ggQ2hlY2tib3hCb3hPcHRpb25zIENoZW1pY2FsRGF0YSBDaGVzc2JvYXJkRGlzdGFuY2UgQ2hpRGlzdHJpYnV0aW9uIENoaW5lc2VSZW1haW5kZXIgQ2hpU3F1YXJlRGlzdHJpYnV0aW9uIENob2ljZUJ1dHRvbnMgQ2hvaWNlRGlhbG9nIENob2xlc2t5RGVjb21wb3NpdGlvbiBDaG9wIENocm9tYXRpY2l0eVBsb3QgQ2hyb21hdGljaXR5UGxvdDNEIENocm9tYXRpY1BvbHlub21pYWwgQ2lyY2xlIENpcmNsZUJveCBDaXJjbGVEb3QgQ2lyY2xlTWludXMgQ2lyY2xlUGx1cyBDaXJjbGVQb2ludHMgQ2lyY2xlVGhyb3VnaCBDaXJjbGVUaW1lcyBDaXJjdWxhbnRHcmFwaCBDaXJjdWxhck9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb24gQ2lyY3VsYXJRdWF0ZXJuaW9uTWF0cml4RGlzdHJpYnV0aW9uIENpcmN1bGFyUmVhbE1hdHJpeERpc3RyaWJ1dGlvbiBDaXJjdWxhclN5bXBsZWN0aWNNYXRyaXhEaXN0cmlidXRpb24gQ2lyY3VsYXJVbml0YXJ5TWF0cml4RGlzdHJpYnV0aW9uIENpcmN1bXNwaGVyZSBDaXR5RGF0YSBDbGFzc2lmaWVyRnVuY3Rpb24gQ2xhc3NpZmllckluZm9ybWF0aW9uIENsYXNzaWZpZXJNZWFzdXJlbWVudHMgQ2xhc3NpZmllck1lYXN1cmVtZW50c09iamVjdCBDbGFzc2lmeSBDbGFzc1ByaW9ycyBDbGVhciBDbGVhckFsbCBDbGVhckF0dHJpYnV0ZXMgQ2xlYXJDb29raWVzIENsZWFyUGVybWlzc2lvbnMgQ2xlYXJTeXN0ZW1DYWNoZSBDbGVic2NoR29yZGFuIENsaWNrUGFuZSBDbGlwIENsaXBib2FyZE5vdGVib29rIENsaXBGaWxsIENsaXBwaW5nU3R5bGUgQ2xpcFBsYW5lcyBDbGlwUGxhbmVzU3R5bGUgQ2xpcFJhbmdlIENsb2NrIENsb2NrR2F1Z2UgQ2xvY2t3aXNlQ29udG91ckludGVncmFsIENsb3NlIENsb3NlZCBDbG9zZUtlcm5lbHMgQ2xvc2VuZXNzQ2VudHJhbGl0eSBDbG9zaW5nIENsb3NpbmdBdXRvU2F2ZSBDbG9zaW5nRXZlbnQgQ2xvdWRBY2NvdW50RGF0YSBDbG91ZEJhc2UgQ2xvdWRDb25uZWN0IENsb3VkRGVwbG95IENsb3VkRGlyZWN0b3J5IENsb3VkRGlzY29ubmVjdCBDbG91ZEV2YWx1YXRlIENsb3VkRXhwb3J0IENsb3VkRXhwcmVzc2lvbiBDbG91ZEV4cHJlc3Npb25zIENsb3VkRnVuY3Rpb24gQ2xvdWRHZXQgQ2xvdWRJbXBvcnQgQ2xvdWRMb2dnaW5nRGF0YSBDbG91ZE9iamVjdCBDbG91ZE9iamVjdEluZm9ybWF0aW9uIENsb3VkT2JqZWN0SW5mb3JtYXRpb25EYXRhIENsb3VkT2JqZWN0TmFtZUZvcm1hdCBDbG91ZE9iamVjdHMgQ2xvdWRPYmplY3RVUkxUeXBlIENsb3VkUHVibGlzaCBDbG91ZFB1dCBDbG91ZFJlbmRlcmluZ01ldGhvZCBDbG91ZFNhdmUgQ2xvdWRTaGFyZSBDbG91ZFN1Ym1pdCBDbG91ZFN5bWJvbCBDbG91ZFVuc2hhcmUgQ2x1c3RlckNsYXNzaWZ5IENsdXN0ZXJEaXNzaW1pbGFyaXR5RnVuY3Rpb24gQ2x1c3RlcmluZ0NvbXBvbmVudHMgQ2x1c3RlcmluZ1RyZWUgQ01ZS0NvbG9yIENvYXJzZSBDb2RlQXNzaXN0T3B0aW9ucyBDb2VmZmljaWVudCBDb2VmZmljaWVudEFycmF5cyBDb2VmZmljaWVudERvbWFpbiBDb2VmZmljaWVudExpc3QgQ29lZmZpY2llbnRSdWxlcyBDb2lmbGV0V2F2ZWxldCBDb2xsZWN0IENvbG9uIENvbG9uRm9ybSBDb2xvckJhbGFuY2UgQ29sb3JDb21iaW5lIENvbG9yQ29udmVydCBDb2xvckNvdmVyYWdlIENvbG9yRGF0YSBDb2xvckRhdGFGdW5jdGlvbiBDb2xvckRldGVjdCBDb2xvckRpc3RhbmNlIENvbG9yRnVuY3Rpb24gQ29sb3JGdW5jdGlvblNjYWxpbmcgQ29sb3JpemUgQ29sb3JOZWdhdGUgQ29sb3JPdXRwdXQgQ29sb3JQcm9maWxlRGF0YSBDb2xvclEgQ29sb3JRdWFudGl6ZSBDb2xvclJlcGxhY2UgQ29sb3JSdWxlcyBDb2xvclNlbGVjdG9yU2V0dGluZ3MgQ29sb3JTZXBhcmF0ZSBDb2xvclNldHRlciBDb2xvclNldHRlckJveCBDb2xvclNldHRlckJveE9wdGlvbnMgQ29sb3JTbGlkZXIgQ29sb3JzTmVhciBDb2xvclNwYWNlIENvbG9yVG9uZU1hcHBpbmcgQ29sdW1uIENvbHVtbkFsaWdubWVudHMgQ29sdW1uQmFja2dyb3VuZHMgQ29sdW1uRm9ybSBDb2x1bW5MaW5lcyBDb2x1bW5zRXF1YWwgQ29sdW1uU3BhY2luZ3MgQ29sdW1uV2lkdGhzIENvbWJpbmVkRW50aXR5Q2xhc3MgQ29tYmluZXJGdW5jdGlvbiBDb21ldERhdGEgQ29tbW9uRGVmYXVsdEZvcm1hdFR5cGVzIENvbW1vbmVzdCBDb21tb25lc3RGaWx0ZXIgQ29tbW9uTmFtZSBDb21tb25Vbml0cyBDb21tdW5pdHlCb3VuZGFyeVN0eWxlIENvbW11bml0eUdyYXBoUGxvdCBDb21tdW5pdHlMYWJlbHMgQ29tbXVuaXR5UmVnaW9uU3R5bGUgQ29tcGFueURhdGEgQ29tcGF0aWJsZVVuaXRRIENvbXBpbGF0aW9uT3B0aW9ucyBDb21waWxhdGlvblRhcmdldCBDb21waWxlIENvbXBpbGVkIENvbXBpbGVkQ29kZUZ1bmN0aW9uIENvbXBpbGVkRnVuY3Rpb24gQ29tcGlsZXJPcHRpb25zIENvbXBsZW1lbnQgQ29tcGxldGVHcmFwaCBDb21wbGV0ZUdyYXBoUSBDb21wbGV0ZUthcnlUcmVlIENvbXBsZXRpb25zTGlzdFBhY2tldCBDb21wbGV4IENvbXBsZXhlcyBDb21wbGV4RXhwYW5kIENvbXBsZXhJbmZpbml0eSBDb21wbGV4aXR5RnVuY3Rpb24gQ29tcGxleExpc3RQbG90IENvbXBsZXhQbG90IENvbXBsZXhQbG90M0QgQ29tcG9uZW50TWVhc3VyZW1lbnRzIENvbXBvbmVudHdpc2VDb250ZXh0TWVudSBDb21wb3NlIENvbXBvc2VMaXN0IENvbXBvc2VTZXJpZXMgQ29tcG9zaXRlUSBDb21wb3NpdGlvbiBDb21wb3VuZEVsZW1lbnQgQ29tcG91bmRFeHByZXNzaW9uIENvbXBvdW5kUG9pc3NvbkRpc3RyaWJ1dGlvbiBDb21wb3VuZFBvaXNzb25Qcm9jZXNzIENvbXBvdW5kUmVuZXdhbFByb2Nlc3MgQ29tcHJlc3MgQ29tcHJlc3NlZERhdGEgQ29tcHV0ZVVuY2VydGFpbnR5IENvbmRpdGlvbiBDb25kaXRpb25hbEV4cHJlc3Npb24gQ29uZGl0aW9uZWQgQ29uZSBDb25lQm94IENvbmZpZGVuY2VMZXZlbCBDb25maWRlbmNlUmFuZ2UgQ29uZmlkZW5jZVRyYW5zZm9ybSBDb25maWd1cmF0aW9uUGF0aCBDb25mb3JtQXVkaW8gQ29uZm9ybUltYWdlcyBDb25ncnVlbnQgQ29uaWNIdWxsUmVnaW9uIENvbmljSHVsbFJlZ2lvbjNEQm94IENvbmljSHVsbFJlZ2lvbkJveCBDb25pY09wdGltaXphdGlvbiBDb25qdWdhdGUgQ29uanVnYXRlVHJhbnNwb3NlIENvbmp1bmN0aW9uIENvbm5lY3QgQ29ubmVjdGVkQ29tcG9uZW50cyBDb25uZWN0ZWRHcmFwaENvbXBvbmVudHMgQ29ubmVjdGVkR3JhcGhRIENvbm5lY3RlZE1lc2hDb21wb25lbnRzIENvbm5lY3RlZE1vbGVjdWxlQ29tcG9uZW50cyBDb25uZWN0ZWRNb2xlY3VsZVEgQ29ubmVjdGlvblNldHRpbmdzIENvbm5lY3RMaWJyYXJ5Q2FsbGJhY2tGdW5jdGlvbiBDb25uZWN0U3lzdGVtTW9kZWxDb21wb25lbnRzIENvbm5lc1dpbmRvdyBDb25vdmVyVGVzdCBDb25zb2xlTWVzc2FnZSBDb25zb2xlTWVzc2FnZVBhY2tldCBDb25zb2xlUHJpbnQgQ29uc3RhbnQgQ29uc3RhbnRBcnJheSBDb25zdGFudEFycmF5TGF5ZXIgQ29uc3RhbnRJbWFnZSBDb25zdGFudFBsdXNMYXllciBDb25zdGFudFJlZ2lvblEgQ29uc3RhbnRzIENvbnN0YW50VGltZXNMYXllciBDb25zdGVsbGF0aW9uRGF0YSBDb25zdHJhaW5lZE1heCBDb25zdHJhaW5lZE1pbiBDb25zdHJ1Y3QgQ29udGFpbmluZyBDb250YWluc0FsbCBDb250YWluc0FueSBDb250YWluc0V4YWN0bHkgQ29udGFpbnNOb25lIENvbnRhaW5zT25seSBDb250ZW50RmllbGRPcHRpb25zIENvbnRlbnRMb2NhdGlvbkZ1bmN0aW9uIENvbnRlbnRPYmplY3QgQ29udGVudFBhZGRpbmcgQ29udGVudHNCb3VuZGluZ0JveCBDb250ZW50U2VsZWN0YWJsZSBDb250ZW50U2l6ZSBDb250ZXh0IENvbnRleHRNZW51IENvbnRleHRzIENvbnRleHRUb0ZpbGVOYW1lIENvbnRpbnVhdGlvbiBDb250aW51ZSBDb250aW51ZWRGcmFjdGlvbiBDb250aW51ZWRGcmFjdGlvbksgQ29udGludW91c0FjdGlvbiBDb250aW51b3VzTWFya292UHJvY2VzcyBDb250aW51b3VzVGFzayBDb250aW51b3VzVGltZU1vZGVsUSBDb250aW51b3VzV2F2ZWxldERhdGEgQ29udGludW91c1dhdmVsZXRUcmFuc2Zvcm0gQ29udG91ckRldGVjdCBDb250b3VyR3JhcGhpY3MgQ29udG91ckludGVncmFsIENvbnRvdXJMYWJlbHMgQ29udG91ckxpbmVzIENvbnRvdXJQbG90IENvbnRvdXJQbG90M0QgQ29udG91cnMgQ29udG91clNoYWRpbmcgQ29udG91clNtb290aGluZyBDb250b3VyU3R5bGUgQ29udHJhaGFybW9uaWNNZWFuIENvbnRyYXN0aXZlTG9zc0xheWVyIENvbnRyb2wgQ29udHJvbEFjdGl2ZSBDb250cm9sQWxpZ25tZW50IENvbnRyb2xHcm91cENvbnRlbnRzQm94IENvbnRyb2xsYWJpbGl0eUdyYW1pYW4gQ29udHJvbGxhYmlsaXR5TWF0cml4IENvbnRyb2xsYWJsZURlY29tcG9zaXRpb24gQ29udHJvbGxhYmxlTW9kZWxRIENvbnRyb2xsZXJEdXJhdGlvbiBDb250cm9sbGVySW5mb3JtYXRpb24gQ29udHJvbGxlckluZm9ybWF0aW9uRGF0YSBDb250cm9sbGVyTGlua2luZyBDb250cm9sbGVyTWFuaXB1bGF0ZSBDb250cm9sbGVyTWV0aG9kIENvbnRyb2xsZXJQYXRoIENvbnRyb2xsZXJTdGF0ZSBDb250cm9sUGxhY2VtZW50IENvbnRyb2xzUmVuZGVyaW5nIENvbnRyb2xUeXBlIENvbnZlcmdlbnRzIENvbnZlcnNpb25PcHRpb25zIENvbnZlcnNpb25SdWxlcyBDb252ZXJ0VG9CaXRtYXBQYWNrZXQgQ29udmVydFRvUG9zdFNjcmlwdCBDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0IENvbnZleEh1bGxNZXNoIENvbnZleFBvbHlnb25RIENvbnZleFBvbHloZWRyb25RIENvbnZvbHV0aW9uTGF5ZXIgQ29udm9sdmUgQ29ud2F5R3JvdXBDbzEgQ29ud2F5R3JvdXBDbzIgQ29ud2F5R3JvdXBDbzMgQ29va2llRnVuY3Rpb24gQ29va2llcyBDb29yZGluYXRlQm91bmRpbmdCb3ggQ29vcmRpbmF0ZUJvdW5kaW5nQm94QXJyYXkgQ29vcmRpbmF0ZUJvdW5kcyBDb29yZGluYXRlQm91bmRzQXJyYXkgQ29vcmRpbmF0ZUNoYXJ0RGF0YSBDb29yZGluYXRlc1Rvb2xPcHRpb25zIENvb3JkaW5hdGVUcmFuc2Zvcm0gQ29vcmRpbmF0ZVRyYW5zZm9ybURhdGEgQ29wcmltZVEgQ29wcm9kdWN0IENvcHVsYURpc3RyaWJ1dGlvbiBDb3B5YWJsZSBDb3B5RGF0YWJpbiBDb3B5RGlyZWN0b3J5IENvcHlGaWxlIENvcHlUYWcgQ29weVRvQ2xpcGJvYXJkIENvcm5lckZpbHRlciBDb3JuZXJOZWlnaGJvcnMgQ29ycmVsYXRpb24gQ29ycmVsYXRpb25EaXN0YW5jZSBDb3JyZWxhdGlvbkZ1bmN0aW9uIENvcnJlbGF0aW9uVGVzdCBDb3MgQ29zaCBDb3NoSW50ZWdyYWwgQ29zaW5lRGlzdGFuY2UgQ29zaW5lV2luZG93IENvc0ludGVncmFsIENvdCBDb3RoIENvdW50IENvdW50RGlzdGluY3QgQ291bnREaXN0aW5jdEJ5IENvdW50ZXJBc3NpZ25tZW50cyBDb3VudGVyQm94IENvdW50ZXJCb3hPcHRpb25zIENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWwgQ291bnRlckV2YWx1YXRvciBDb3VudGVyRnVuY3Rpb24gQ291bnRlckluY3JlbWVudHMgQ291bnRlclN0eWxlIENvdW50ZXJTdHlsZU1lbnVMaXN0aW5nIENvdW50Um9vdHMgQ291bnRyeURhdGEgQ291bnRzIENvdW50c0J5IENvdmFyaWFuY2UgQ292YXJpYW5jZUVzdGltYXRvckZ1bmN0aW9uIENvdmFyaWFuY2VGdW5jdGlvbiBDb3hpYW5EaXN0cmlidXRpb24gQ294SW5nZXJzb2xsUm9zc1Byb2Nlc3MgQ294TW9kZWwgQ294TW9kZWxGaXQgQ3JhbWVyVm9uTWlzZXNUZXN0IENyZWF0ZUFyY2hpdmUgQ3JlYXRlQ2VsbElEIENyZWF0ZUNoYW5uZWwgQ3JlYXRlQ2xvdWRFeHByZXNzaW9uIENyZWF0ZURhdGFiaW4gQ3JlYXRlRGF0YVN5c3RlbU1vZGVsIENyZWF0ZURpYWxvZyBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRG9jdW1lbnQgQ3JlYXRlRmlsZSBDcmVhdGVJbnRlcm1lZGlhdGVEaXJlY3RvcmllcyBDcmVhdGVNYW5hZ2VkTGlicmFyeUV4cHJlc3Npb24gQ3JlYXRlTm90ZWJvb2sgQ3JlYXRlUGFsZXR0ZSBDcmVhdGVQYWxldHRlUGFja2V0IENyZWF0ZVBlcm1pc3Npb25zR3JvdXAgQ3JlYXRlU2NoZWR1bGVkVGFzayBDcmVhdGVTZWFyY2hJbmRleCBDcmVhdGVTeXN0ZW1Nb2RlbCBDcmVhdGVUZW1wb3JhcnkgQ3JlYXRlVVVJRCBDcmVhdGVXaW5kb3cgQ3JpdGVyaW9uRnVuY3Rpb24gQ3JpdGljYWxpdHlGYWlsdXJlSW1wb3J0YW5jZSBDcml0aWNhbGl0eVN1Y2Nlc3NJbXBvcnRhbmNlIENyaXRpY2FsU2VjdGlvbiBDcm9zcyBDcm9zc0VudHJvcHlMb3NzTGF5ZXIgQ3Jvc3NpbmdDb3VudCBDcm9zc2luZ0RldGVjdCBDcm9zc2luZ1BvbHlnb24gQ3Jvc3NNYXRyaXggQ3NjIENzY2ggQ1RDTG9zc0xheWVyIEN1YmUgQ3ViZVJvb3QgQ3ViaWNzIEN1Ym9pZCBDdWJvaWRCb3ggQ3VtdWxhbnQgQ3VtdWxhbnRHZW5lcmF0aW5nRnVuY3Rpb24gQ3VwIEN1cENhcCBDdXJsIEN1cmx5RG91YmxlUXVvdGUgQ3VybHlRdW90ZSBDdXJyZW5jeUNvbnZlcnQgQ3VycmVudERhdGUgQ3VycmVudEltYWdlIEN1cnJlbnRseVNwZWFraW5nUGFja2V0IEN1cnJlbnROb3RlYm9va0ltYWdlIEN1cnJlbnRTY3JlZW5JbWFnZSBDdXJyZW50VmFsdWUgQ3VycnkgQ3VydmF0dXJlRmxvd0ZpbHRlciBDdXJ2ZUNsb3NlZCBDeWFuIEN5Y2xlR3JhcGggQ3ljbGVJbmRleFBvbHlub21pYWwgQ3ljbGVzIEN5Y2xpY0dyb3VwIEN5Y2xvdG9taWMgQ3lsaW5kZXIgQ3lsaW5kZXJCb3ggQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uJyArXG4gICAgICAnRCBEYWd1bURpc3RyaWJ1dGlvbiBEYW1EYXRhIERhbWVyYXVMZXZlbnNodGVpbkRpc3RhbmNlIERhbXBpbmdGYWN0b3IgRGFya2VyIERhc2hlZCBEYXNoaW5nIERhdGFiYXNlQ29ubmVjdCBEYXRhYmFzZURpc2Nvbm5lY3QgRGF0YWJhc2VSZWZlcmVuY2UgRGF0YWJpbiBEYXRhYmluQWRkIERhdGFiaW5SZW1vdmUgRGF0YWJpbnMgRGF0YWJpblVwbG9hZCBEYXRhQ29tcHJlc3Npb24gRGF0YURpc3RyaWJ1dGlvbiBEYXRhUmFuZ2UgRGF0YVJldmVyc2VkIERhdGFzZXQgRGF0ZSBEYXRlQm91bmRzIERhdGVkIERhdGVEZWxpbWl0ZXJzIERhdGVEaWZmZXJlbmNlIERhdGVkVW5pdCBEYXRlRm9ybWF0IERhdGVGdW5jdGlvbiBEYXRlSGlzdG9ncmFtIERhdGVMaXN0IERhdGVMaXN0TG9nUGxvdCBEYXRlTGlzdFBsb3QgRGF0ZUxpc3RTdGVwUGxvdCBEYXRlT2JqZWN0IERhdGVPYmplY3RRIERhdGVPdmVybGFwc1EgRGF0ZVBhdHRlcm4gRGF0ZVBsdXMgRGF0ZVJhbmdlIERhdGVSZWR1Y3Rpb24gRGF0ZVN0cmluZyBEYXRlVGlja3NGb3JtYXQgRGF0ZVZhbHVlIERhdGVXaXRoaW5RIERhdWJlY2hpZXNXYXZlbGV0IERhdmlzRGlzdHJpYnV0aW9uIERhd3NvbkYgRGF5Q291bnQgRGF5Q291bnRDb252ZW50aW9uIERheUhlbWlzcGhlcmUgRGF5bGlnaHRRIERheU1hdGNoUSBEYXlOYW1lIERheU5pZ2h0VGVybWluYXRvciBEYXlQbHVzIERheVJhbmdlIERheVJvdW5kIERlQnJ1aWpuR3JhcGggRGVCcnVpam5TZXF1ZW5jZSBEZWJ1ZyBEZWJ1Z1RhZyBEZWNhcGl0YWxpemUgRGVjaW1hbCBEZWNpbWFsRm9ybSBEZWNsYXJlS25vd25TeW1ib2xzIERlY2xhcmVQYWNrYWdlIERlY29tcG9zZSBEZWNvbnZvbHV0aW9uTGF5ZXIgRGVjcmVtZW50IERlY3J5cHQgRGVjcnlwdEZpbGUgRGVkZWtpbmRFdGEgRGVlcFNwYWNlUHJvYmVEYXRhIERlZmF1bHQgRGVmYXVsdEF4ZXNTdHlsZSBEZWZhdWx0QmFzZVN0eWxlIERlZmF1bHRCb3hTdHlsZSBEZWZhdWx0QnV0dG9uIERlZmF1bHRDb2xvciBEZWZhdWx0Q29udHJvbFBsYWNlbWVudCBEZWZhdWx0RHVwbGljYXRlQ2VsbFN0eWxlIERlZmF1bHREdXJhdGlvbiBEZWZhdWx0RWxlbWVudCBEZWZhdWx0RmFjZUdyaWRzU3R5bGUgRGVmYXVsdEZpZWxkSGludFN0eWxlIERlZmF1bHRGb250IERlZmF1bHRGb250UHJvcGVydGllcyBEZWZhdWx0Rm9ybWF0VHlwZSBEZWZhdWx0Rm9ybWF0VHlwZUZvclN0eWxlIERlZmF1bHRGcmFtZVN0eWxlIERlZmF1bHRGcmFtZVRpY2tzU3R5bGUgRGVmYXVsdEdyaWRMaW5lc1N0eWxlIERlZmF1bHRJbmxpbmVGb3JtYXRUeXBlIERlZmF1bHRJbnB1dEZvcm1hdFR5cGUgRGVmYXVsdExhYmVsU3R5bGUgRGVmYXVsdE1lbnVTdHlsZSBEZWZhdWx0TmF0dXJhbExhbmd1YWdlIERlZmF1bHROZXdDZWxsU3R5bGUgRGVmYXVsdE5ld0lubGluZUNlbGxTdHlsZSBEZWZhdWx0Tm90ZWJvb2sgRGVmYXVsdE9wdGlvbnMgRGVmYXVsdE91dHB1dEZvcm1hdFR5cGUgRGVmYXVsdFByaW50UHJlY2lzaW9uIERlZmF1bHRTdHlsZSBEZWZhdWx0U3R5bGVEZWZpbml0aW9ucyBEZWZhdWx0VGV4dEZvcm1hdFR5cGUgRGVmYXVsdFRleHRJbmxpbmVGb3JtYXRUeXBlIERlZmF1bHRUaWNrc1N0eWxlIERlZmF1bHRUb29sdGlwU3R5bGUgRGVmYXVsdFZhbHVlIERlZmF1bHRWYWx1ZXMgRGVmZXIgRGVmaW5lRXh0ZXJuYWwgRGVmaW5lSW5wdXRTdHJlYW1NZXRob2QgRGVmaW5lT3V0cHV0U3RyZWFtTWV0aG9kIERlZmluZVJlc291cmNlRnVuY3Rpb24gRGVmaW5pdGlvbiBEZWdyZWUgRGVncmVlQ2VudHJhbGl0eSBEZWdyZWVHcmFwaERpc3RyaWJ1dGlvbiBEZWdyZWVMZXhpY29ncmFwaGljIERlZ3JlZVJldmVyc2VMZXhpY29ncmFwaGljIERFaWdlbnN5c3RlbSBERWlnZW52YWx1ZXMgRGVpbml0aWFsaXphdGlvbiBEZWwgRGVsYXVuYXlNZXNoIERlbGF5ZWQgRGVsZXRhYmxlIERlbGV0ZSBEZWxldGVBbm9tYWxpZXMgRGVsZXRlQm9yZGVyQ29tcG9uZW50cyBEZWxldGVDYXNlcyBEZWxldGVDaGFubmVsIERlbGV0ZUNsb3VkRXhwcmVzc2lvbiBEZWxldGVDb250ZW50cyBEZWxldGVEaXJlY3RvcnkgRGVsZXRlRHVwbGljYXRlcyBEZWxldGVEdXBsaWNhdGVzQnkgRGVsZXRlRmlsZSBEZWxldGVNaXNzaW5nIERlbGV0ZU9iamVjdCBEZWxldGVQZXJtaXNzaW9uc0tleSBEZWxldGVTZWFyY2hJbmRleCBEZWxldGVTbWFsbENvbXBvbmVudHMgRGVsZXRlU3RvcHdvcmRzIERlbGV0ZVdpdGhDb250ZW50cyBEZWxldGlvbldhcm5pbmcgRGVsaW1pdGVkQXJyYXkgRGVsaW1pdGVkU2VxdWVuY2UgRGVsaW1pdGVyIERlbGltaXRlckZsYXNoVGltZSBEZWxpbWl0ZXJNYXRjaGluZyBEZWxpbWl0ZXJzIERlbGl2ZXJ5RnVuY3Rpb24gRGVuZHJvZ3JhbSBEZW5vbWluYXRvciBEZW5zaXR5R3JhcGhpY3MgRGVuc2l0eUhpc3RvZ3JhbSBEZW5zaXR5UGxvdCBEZW5zaXR5UGxvdDNEIERlcGVuZGVudFZhcmlhYmxlcyBEZXBsb3kgRGVwbG95ZWQgRGVwdGggRGVwdGhGaXJzdFNjYW4gRGVyaXZhdGl2ZSBEZXJpdmF0aXZlRmlsdGVyIERlcml2ZWRLZXkgRGVzY3JpcHRvclN0YXRlU3BhY2UgRGVzaWduTWF0cml4IERlc3Ryb3lBZnRlckV2YWx1YXRpb24gRGV0IERldmljZUNsb3NlIERldmljZUNvbmZpZ3VyZSBEZXZpY2VFeGVjdXRlIERldmljZUV4ZWN1dGVBc3luY2hyb25vdXMgRGV2aWNlT2JqZWN0IERldmljZU9wZW4gRGV2aWNlT3BlblEgRGV2aWNlUmVhZCBEZXZpY2VSZWFkQnVmZmVyIERldmljZVJlYWRMYXRlc3QgRGV2aWNlUmVhZExpc3QgRGV2aWNlUmVhZFRpbWVTZXJpZXMgRGV2aWNlcyBEZXZpY2VTdHJlYW1zIERldmljZVdyaXRlIERldmljZVdyaXRlQnVmZmVyIERHYXVzc2lhbldhdmVsZXQgRGlhY3JpdGljYWxQb3NpdGlvbmluZyBEaWFnb25hbCBEaWFnb25hbGl6YWJsZU1hdHJpeFEgRGlhZ29uYWxNYXRyaXggRGlhZ29uYWxNYXRyaXhRIERpYWxvZyBEaWFsb2dJbmRlbnQgRGlhbG9nSW5wdXQgRGlhbG9nTGV2ZWwgRGlhbG9nTm90ZWJvb2sgRGlhbG9nUHJvbG9nIERpYWxvZ1JldHVybiBEaWFsb2dTeW1ib2xzIERpYW1vbmQgRGlhbW9uZE1hdHJpeCBEaWNlRGlzc2ltaWxhcml0eSBEaWN0aW9uYXJ5TG9va3VwIERpY3Rpb25hcnlXb3JkUSBEaWZmZXJlbmNlRGVsdGEgRGlmZmVyZW5jZU9yZGVyIERpZmZlcmVuY2VRdW90aWVudCBEaWZmZXJlbmNlUm9vdCBEaWZmZXJlbmNlUm9vdFJlZHVjZSBEaWZmZXJlbmNlcyBEaWZmZXJlbnRpYWxEIERpZmZlcmVudGlhbFJvb3QgRGlmZmVyZW50aWFsUm9vdFJlZHVjZSBEaWZmZXJlbnRpYXRvckZpbHRlciBEaWdpdGFsU2lnbmF0dXJlIERpZ2l0QmxvY2sgRGlnaXRCbG9ja01pbmltdW0gRGlnaXRDaGFyYWN0ZXIgRGlnaXRDb3VudCBEaWdpdFEgRGloZWRyYWxBbmdsZSBEaWhlZHJhbEdyb3VwIERpbGF0aW9uIERpbWVuc2lvbmFsQ29tYmluYXRpb25zIERpbWVuc2lvbmFsTWVzaENvbXBvbmVudHMgRGltZW5zaW9uUmVkdWNlIERpbWVuc2lvblJlZHVjZXJGdW5jdGlvbiBEaW1lbnNpb25SZWR1Y3Rpb24gRGltZW5zaW9ucyBEaXJhY0NvbWIgRGlyYWNEZWx0YSBEaXJlY3RlZEVkZ2UgRGlyZWN0ZWRFZGdlcyBEaXJlY3RlZEdyYXBoIERpcmVjdGVkR3JhcGhRIERpcmVjdGVkSW5maW5pdHkgRGlyZWN0aW9uIERpcmVjdGl2ZSBEaXJlY3RvcnkgRGlyZWN0b3J5TmFtZSBEaXJlY3RvcnlRIERpcmVjdG9yeVN0YWNrIERpcmljaGxldEJldGEgRGlyaWNobGV0Q2hhcmFjdGVyIERpcmljaGxldENvbmRpdGlvbiBEaXJpY2hsZXRDb252b2x2ZSBEaXJpY2hsZXREaXN0cmlidXRpb24gRGlyaWNobGV0RXRhIERpcmljaGxldEwgRGlyaWNobGV0TGFtYmRhIERpcmljaGxldFRyYW5zZm9ybSBEaXJpY2hsZXRXaW5kb3cgRGlzYWJsZUNvbnNvbGVQcmludFBhY2tldCBEaXNhYmxlRm9ybWF0dGluZyBEaXNjcmV0ZUNoaXJwWlRyYW5zZm9ybSBEaXNjcmV0ZUNvbnZvbHZlIERpc2NyZXRlRGVsdGEgRGlzY3JldGVIYWRhbWFyZFRyYW5zZm9ybSBEaXNjcmV0ZUluZGljYXRvciBEaXNjcmV0ZUxpbWl0IERpc2NyZXRlTFFFc3RpbWF0b3JHYWlucyBEaXNjcmV0ZUxRUmVndWxhdG9yR2FpbnMgRGlzY3JldGVMeWFwdW5vdlNvbHZlIERpc2NyZXRlTWFya292UHJvY2VzcyBEaXNjcmV0ZU1heExpbWl0IERpc2NyZXRlTWluTGltaXQgRGlzY3JldGVQbG90IERpc2NyZXRlUGxvdDNEIERpc2NyZXRlUmF0aW8gRGlzY3JldGVSaWNjYXRpU29sdmUgRGlzY3JldGVTaGlmdCBEaXNjcmV0ZVRpbWVNb2RlbFEgRGlzY3JldGVVbmlmb3JtRGlzdHJpYnV0aW9uIERpc2NyZXRlVmFyaWFibGVzIERpc2NyZXRlV2F2ZWxldERhdGEgRGlzY3JldGVXYXZlbGV0UGFja2V0VHJhbnNmb3JtIERpc2NyZXRlV2F2ZWxldFRyYW5zZm9ybSBEaXNjcmV0aXplR3JhcGhpY3MgRGlzY3JldGl6ZVJlZ2lvbiBEaXNjcmltaW5hbnQgRGlzam9pbnRRIERpc2p1bmN0aW9uIERpc2sgRGlza0JveCBEaXNrTWF0cml4IERpc2tTZWdtZW50IERpc3BhdGNoIERpc3BhdGNoUSBEaXNwZXJzaW9uRXN0aW1hdG9yRnVuY3Rpb24gRGlzcGxheSBEaXNwbGF5QWxsU3RlcHMgRGlzcGxheUVuZFBhY2tldCBEaXNwbGF5Rmx1c2hJbWFnZVBhY2tldCBEaXNwbGF5Rm9ybSBEaXNwbGF5RnVuY3Rpb24gRGlzcGxheVBhY2tldCBEaXNwbGF5UnVsZXMgRGlzcGxheVNldFNpemVQYWNrZXQgRGlzcGxheVN0cmluZyBEaXNwbGF5VGVtcG9yYXJ5IERpc3BsYXlXaXRoIERpc3BsYXlXaXRoUmVmIERpc3BsYXlXaXRoVmFyaWFibGUgRGlzdGFuY2VGdW5jdGlvbiBEaXN0YW5jZU1hdHJpeCBEaXN0YW5jZVRyYW5zZm9ybSBEaXN0cmlidXRlIERpc3RyaWJ1dGVkIERpc3RyaWJ1dGVkQ29udGV4dHMgRGlzdHJpYnV0ZURlZmluaXRpb25zIERpc3RyaWJ1dGlvbkNoYXJ0IERpc3RyaWJ1dGlvbkRvbWFpbiBEaXN0cmlidXRpb25GaXRUZXN0IERpc3RyaWJ1dGlvblBhcmFtZXRlckFzc3VtcHRpb25zIERpc3RyaWJ1dGlvblBhcmFtZXRlclEgRGl0aGVyaW5nIERpdiBEaXZlcmdlbmNlIERpdmlkZSBEaXZpZGVCeSBEaXZpZGVycyBEaXZpZGVTaWRlcyBEaXZpc2libGUgRGl2aXNvcnMgRGl2aXNvclNpZ21hIERpdmlzb3JTdW0gRE1TTGlzdCBETVNTdHJpbmcgRG8gRG9ja2VkQ2VsbHMgRG9jdW1lbnRHZW5lcmF0b3IgRG9jdW1lbnRHZW5lcmF0b3JJbmZvcm1hdGlvbiBEb2N1bWVudEdlbmVyYXRvckluZm9ybWF0aW9uRGF0YSBEb2N1bWVudEdlbmVyYXRvcnMgRG9jdW1lbnROb3RlYm9vayBEb2N1bWVudFdlaWdodGluZ1J1bGVzIERvZGVjYWhlZHJvbiBEb21haW5SZWdpc3RyYXRpb25JbmZvcm1hdGlvbiBEb21pbmFudENvbG9ycyBET1NUZXh0Rm9ybWF0IERvdCBEb3REYXNoZWQgRG90RXF1YWwgRG90TGF5ZXIgRG90UGx1c0xheWVyIERvdHRlZCBEb3VibGVCcmFja2V0aW5nQmFyIERvdWJsZUNvbnRvdXJJbnRlZ3JhbCBEb3VibGVEb3duQXJyb3cgRG91YmxlTGVmdEFycm93IERvdWJsZUxlZnRSaWdodEFycm93IERvdWJsZUxlZnRUZWUgRG91YmxlTG9uZ0xlZnRBcnJvdyBEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3cgRG91YmxlTG9uZ1JpZ2h0QXJyb3cgRG91YmxlUmlnaHRBcnJvdyBEb3VibGVSaWdodFRlZSBEb3VibGVVcEFycm93IERvdWJsZVVwRG93bkFycm93IERvdWJsZVZlcnRpY2FsQmFyIERvdWJseUluZmluaXRlIERvd24gRG93bkFycm93IERvd25BcnJvd0JhciBEb3duQXJyb3dVcEFycm93IERvd25MZWZ0UmlnaHRWZWN0b3IgRG93bkxlZnRUZWVWZWN0b3IgRG93bkxlZnRWZWN0b3IgRG93bkxlZnRWZWN0b3JCYXIgRG93blJpZ2h0VGVlVmVjdG9yIERvd25SaWdodFZlY3RvciBEb3duUmlnaHRWZWN0b3JCYXIgRG93bnNhbXBsZSBEb3duVGVlIERvd25UZWVBcnJvdyBEb3duVmFsdWVzIERyYWdBbmREcm9wIERyYXdFZGdlcyBEcmF3RnJvbnRGYWNlcyBEcmF3SGlnaGxpZ2h0ZWQgRHJvcCBEcm9wb3V0TGF5ZXIgRFNvbHZlIERTb2x2ZVZhbHVlIER0IER1YWxMaW5lYXJQcm9ncmFtbWluZyBEdWFsUG9seWhlZHJvbiBEdWFsU3lzdGVtc01vZGVsIER1bXBHZXQgRHVtcFNhdmUgRHVwbGljYXRlRnJlZVEgRHVyYXRpb24gRHluYW1pYyBEeW5hbWljQm94IER5bmFtaWNCb3hPcHRpb25zIER5bmFtaWNFdmFsdWF0aW9uVGltZW91dCBEeW5hbWljR2VvR3JhcGhpY3MgRHluYW1pY0ltYWdlIER5bmFtaWNMb2NhdGlvbiBEeW5hbWljTW9kdWxlIER5bmFtaWNNb2R1bGVCb3ggRHluYW1pY01vZHVsZUJveE9wdGlvbnMgRHluYW1pY01vZHVsZVBhcmVudCBEeW5hbWljTW9kdWxlVmFsdWVzIER5bmFtaWNOYW1lIER5bmFtaWNOYW1lc3BhY2UgRHluYW1pY1JlZmVyZW5jZSBEeW5hbWljU2V0dGluZyBEeW5hbWljVXBkYXRpbmcgRHluYW1pY1dyYXBwZXIgRHluYW1pY1dyYXBwZXJCb3ggRHluYW1pY1dyYXBwZXJCb3hPcHRpb25zJyArXG4gICAgICAnRSBFYXJ0aEltcGFjdERhdGEgRWFydGhxdWFrZURhdGEgRWNjZW50cmljaXR5Q2VudHJhbGl0eSBFY2hvIEVjaG9GdW5jdGlvbiBFY2xpcHNlVHlwZSBFZGdlQWRkIEVkZ2VCZXR3ZWVubmVzc0NlbnRyYWxpdHkgRWRnZUNhcGFjaXR5IEVkZ2VDYXBGb3JtIEVkZ2VDb2xvciBFZGdlQ29ubmVjdGl2aXR5IEVkZ2VDb250cmFjdCBFZGdlQ29zdCBFZGdlQ291bnQgRWRnZUNvdmVyUSBFZGdlQ3ljbGVNYXRyaXggRWRnZURhc2hpbmcgRWRnZURlbGV0ZSBFZGdlRGV0ZWN0IEVkZ2VGb3JtIEVkZ2VJbmRleCBFZGdlSm9pbkZvcm0gRWRnZUxhYmVsaW5nIEVkZ2VMYWJlbHMgRWRnZUxhYmVsU3R5bGUgRWRnZUxpc3QgRWRnZU9wYWNpdHkgRWRnZVEgRWRnZVJlbmRlcmluZ0Z1bmN0aW9uIEVkZ2VSdWxlcyBFZGdlU2hhcGVGdW5jdGlvbiBFZGdlU3R5bGUgRWRnZVRoaWNrbmVzcyBFZGdlV2VpZ2h0IEVkZ2VXZWlnaHRlZEdyYXBoUSBFZGl0YWJsZSBFZGl0QnV0dG9uU2V0dGluZ3MgRWRpdENlbGxUYWdzU2V0dGluZ3MgRWRpdERpc3RhbmNlIEVmZmVjdGl2ZUludGVyZXN0IEVpZ2Vuc3lzdGVtIEVpZ2VudmFsdWVzIEVpZ2VudmVjdG9yQ2VudHJhbGl0eSBFaWdlbnZlY3RvcnMgRWxlbWVudCBFbGVtZW50RGF0YSBFbGVtZW50d2lzZUxheWVyIEVsaWRlZEZvcm1zIEVsaW1pbmF0ZSBFbGltaW5hdGlvbk9yZGVyIEVsbGlwc29pZCBFbGxpcHRpY0UgRWxsaXB0aWNFeHAgRWxsaXB0aWNFeHBQcmltZSBFbGxpcHRpY0YgRWxsaXB0aWNGaWx0ZXJNb2RlbCBFbGxpcHRpY0sgRWxsaXB0aWNMb2cgRWxsaXB0aWNOb21lUSBFbGxpcHRpY1BpIEVsbGlwdGljUmVkdWNlZEhhbGZQZXJpb2RzIEVsbGlwdGljVGhldGEgRWxsaXB0aWNUaGV0YVByaW1lIEVtYmVkQ29kZSBFbWJlZGRlZEhUTUwgRW1iZWRkZWRTZXJ2aWNlIEVtYmVkZGluZ0xheWVyIEVtYmVkZGluZ09iamVjdCBFbWl0U291bmQgRW1waGFzaXplU3ludGF4RXJyb3JzIEVtcGlyaWNhbERpc3RyaWJ1dGlvbiBFbXB0eSBFbXB0eUdyYXBoUSBFbXB0eVJlZ2lvbiBFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQgRW5hYmxlZCBFbmNvZGUgRW5jcnlwdCBFbmNyeXB0ZWRPYmplY3QgRW5jcnlwdEZpbGUgRW5kIEVuZEFkZCBFbmREaWFsb2dQYWNrZXQgRW5kRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCBFbmRPZkJ1ZmZlciBFbmRPZkZpbGUgRW5kT2ZMaW5lIEVuZE9mU3RyaW5nIEVuZFBhY2thZ2UgRW5naW5lRW52aXJvbm1lbnQgRW5naW5lZXJpbmdGb3JtIEVudGVyIEVudGVyRXhwcmVzc2lvblBhY2tldCBFbnRlclRleHRQYWNrZXQgRW50aXR5IEVudGl0eUNsYXNzIEVudGl0eUNsYXNzTGlzdCBFbnRpdHlDb3BpZXMgRW50aXR5RnVuY3Rpb24gRW50aXR5R3JvdXAgRW50aXR5SW5zdGFuY2UgRW50aXR5TGlzdCBFbnRpdHlQcmVmZXRjaCBFbnRpdHlQcm9wZXJ0aWVzIEVudGl0eVByb3BlcnR5IEVudGl0eVByb3BlcnR5Q2xhc3MgRW50aXR5UmVnaXN0ZXIgRW50aXR5U3RvcmUgRW50aXR5U3RvcmVzIEVudGl0eVR5cGVOYW1lIEVudGl0eVVucmVnaXN0ZXIgRW50aXR5VmFsdWUgRW50cm9weSBFbnRyb3B5RmlsdGVyIEVudmlyb25tZW50IEVwaWxvZyBFcGlsb2dGdW5jdGlvbiBFcXVhbCBFcXVhbENvbHVtbnMgRXF1YWxSb3dzIEVxdWFsVGlsZGUgRXF1YWxUbyBFcXVhdGVkVG8gRXF1aWxpYnJpdW0gRXF1aXJpcHBsZUZpbHRlcktlcm5lbCBFcXVpdmFsZW50IEVyZiBFcmZjIEVyZmkgRXJsYW5nQiBFcmxhbmdDIEVybGFuZ0Rpc3RyaWJ1dGlvbiBFcm9zaW9uIEVycm9yQm94IEVycm9yQm94T3B0aW9ucyBFcnJvck5vcm0gRXJyb3JQYWNrZXQgRXJyb3JzRGlhbG9nU2V0dGluZ3MgRXNjYXBlUmFkaXVzIEVzdGltYXRlZEJhY2tncm91bmQgRXN0aW1hdGVkRGlzdHJpYnV0aW9uIEVzdGltYXRlZFByb2Nlc3MgRXN0aW1hdG9yR2FpbnMgRXN0aW1hdG9yUmVndWxhdG9yIEV1Y2xpZGVhbkRpc3RhbmNlIEV1bGVyQW5nbGVzIEV1bGVyQ2hhcmFjdGVyaXN0aWMgRXVsZXJFIEV1bGVyR2FtbWEgRXVsZXJpYW5HcmFwaFEgRXVsZXJNYXRyaXggRXVsZXJQaGkgRXZhbHVhdGFibGUgRXZhbHVhdGUgRXZhbHVhdGVkIEV2YWx1YXRlUGFja2V0IEV2YWx1YXRlU2NoZWR1bGVkVGFzayBFdmFsdWF0aW9uQm94IEV2YWx1YXRpb25DZWxsIEV2YWx1YXRpb25Db21wbGV0aW9uQWN0aW9uIEV2YWx1YXRpb25EYXRhIEV2YWx1YXRpb25FbGVtZW50cyBFdmFsdWF0aW9uRW52aXJvbm1lbnQgRXZhbHVhdGlvbk1vZGUgRXZhbHVhdGlvbk1vbml0b3IgRXZhbHVhdGlvbk5vdGVib29rIEV2YWx1YXRpb25PYmplY3QgRXZhbHVhdGlvbk9yZGVyIEV2YWx1YXRvciBFdmFsdWF0b3JOYW1lcyBFdmVuUSBFdmVudERhdGEgRXZlbnRFdmFsdWF0b3IgRXZlbnRIYW5kbGVyIEV2ZW50SGFuZGxlclRhZyBFdmVudExhYmVscyBFdmVudFNlcmllcyBFeGFjdEJsYWNrbWFuV2luZG93IEV4YWN0TnVtYmVyUSBFeGFjdFJvb3RJc29sYXRpb24gRXhhbXBsZURhdGEgRXhjZXB0IEV4Y2x1ZGVkRm9ybXMgRXhjbHVkZWRMaW5lcyBFeGNsdWRlZFBoeXNpY2FsUXVhbnRpdGllcyBFeGNsdWRlUG9kcyBFeGNsdXNpb25zIEV4Y2x1c2lvbnNTdHlsZSBFeGlzdHMgRXhpdCBFeGl0RGlhbG9nIEV4b3BsYW5ldERhdGEgRXhwIEV4cGFuZCBFeHBhbmRBbGwgRXhwYW5kRGVub21pbmF0b3IgRXhwYW5kRmlsZU5hbWUgRXhwYW5kTnVtZXJhdG9yIEV4cGVjdGF0aW9uIEV4cGVjdGF0aW9uRSBFeHBlY3RlZFZhbHVlIEV4cEdhbW1hRGlzdHJpYnV0aW9uIEV4cEludGVncmFsRSBFeHBJbnRlZ3JhbEVpIEV4cGlyYXRpb25EYXRlIEV4cG9uZW50IEV4cG9uZW50RnVuY3Rpb24gRXhwb25lbnRpYWxEaXN0cmlidXRpb24gRXhwb25lbnRpYWxGYW1pbHkgRXhwb25lbnRpYWxHZW5lcmF0aW5nRnVuY3Rpb24gRXhwb25lbnRpYWxNb3ZpbmdBdmVyYWdlIEV4cG9uZW50aWFsUG93ZXJEaXN0cmlidXRpb24gRXhwb25lbnRQb3NpdGlvbiBFeHBvbmVudFN0ZXAgRXhwb3J0IEV4cG9ydEF1dG9SZXBsYWNlbWVudHMgRXhwb3J0Qnl0ZUFycmF5IEV4cG9ydEZvcm0gRXhwb3J0UGFja2V0IEV4cG9ydFN0cmluZyBFeHByZXNzaW9uIEV4cHJlc3Npb25DZWxsIEV4cHJlc3Npb25QYWNrZXQgRXhwcmVzc2lvblVVSUQgRXhwVG9UcmlnIEV4dGVuZGVkRW50aXR5Q2xhc3MgRXh0ZW5kZWRHQ0QgRXh0ZW5zaW9uIEV4dGVudEVsZW1lbnRGdW5jdGlvbiBFeHRlbnRNYXJrZXJzIEV4dGVudFNpemUgRXh0ZXJuYWxCdW5kbGUgRXh0ZXJuYWxDYWxsIEV4dGVybmFsRGF0YUNoYXJhY3RlckVuY29kaW5nIEV4dGVybmFsRXZhbHVhdGUgRXh0ZXJuYWxGdW5jdGlvbiBFeHRlcm5hbEZ1bmN0aW9uTmFtZSBFeHRlcm5hbE9iamVjdCBFeHRlcm5hbE9wdGlvbnMgRXh0ZXJuYWxTZXNzaW9uT2JqZWN0IEV4dGVybmFsU2Vzc2lvbnMgRXh0ZXJuYWxUeXBlU2lnbmF0dXJlIEV4dGVybmFsVmFsdWUgRXh0cmFjdCBFeHRyYWN0QXJjaGl2ZSBFeHRyYWN0TGF5ZXIgRXh0cmVtZVZhbHVlRGlzdHJpYnV0aW9uJyArXG4gICAgICAnRmFjZUZvcm0gRmFjZUdyaWRzIEZhY2VHcmlkc1N0eWxlIEZhY2lhbEZlYXR1cmVzIEZhY3RvciBGYWN0b3JDb21wbGV0ZSBGYWN0b3JpYWwgRmFjdG9yaWFsMiBGYWN0b3JpYWxNb21lbnQgRmFjdG9yaWFsTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uIEZhY3RvcmlhbFBvd2VyIEZhY3RvckludGVnZXIgRmFjdG9yTGlzdCBGYWN0b3JTcXVhcmVGcmVlIEZhY3RvclNxdWFyZUZyZWVMaXN0IEZhY3RvclRlcm1zIEZhY3RvclRlcm1zTGlzdCBGYWlsIEZhaWx1cmUgRmFpbHVyZUFjdGlvbiBGYWlsdXJlRGlzdHJpYnV0aW9uIEZhaWx1cmVRIEZhbHNlIEZhcmV5U2VxdWVuY2UgRkFSSU1BUHJvY2VzcyBGZWF0dXJlRGlzdGFuY2UgRmVhdHVyZUV4dHJhY3QgRmVhdHVyZUV4dHJhY3Rpb24gRmVhdHVyZUV4dHJhY3RvciBGZWF0dXJlRXh0cmFjdG9yRnVuY3Rpb24gRmVhdHVyZU5hbWVzIEZlYXR1cmVOZWFyZXN0IEZlYXR1cmVTcGFjZVBsb3QgRmVhdHVyZVNwYWNlUGxvdDNEIEZlYXR1cmVUeXBlcyBGRURpc2FibGVDb25zb2xlUHJpbnRQYWNrZXQgRmVlZGJhY2tMaW5lYXJpemUgRmVlZGJhY2tTZWN0b3IgRmVlZGJhY2tTZWN0b3JTdHlsZSBGZWVkYmFja1R5cGUgRkVFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQgRmV0YWxHcm93dGhEYXRhIEZpYm9uYWNjaSBGaWJvbm9yaWFsIEZpZWxkQ29tcGxldGlvbkZ1bmN0aW9uIEZpZWxkSGludCBGaWVsZEhpbnRTdHlsZSBGaWVsZE1hc2tlZCBGaWVsZFNpemUgRmlsZSBGaWxlQmFzZU5hbWUgRmlsZUJ5dGVDb3VudCBGaWxlQ29udmVydCBGaWxlRGF0ZSBGaWxlRXhpc3RzUSBGaWxlRXh0ZW5zaW9uIEZpbGVGb3JtYXQgRmlsZUhhbmRsZXIgRmlsZUhhc2ggRmlsZUluZm9ybWF0aW9uIEZpbGVOYW1lIEZpbGVOYW1lRGVwdGggRmlsZU5hbWVEaWFsb2dTZXR0aW5ncyBGaWxlTmFtZURyb3AgRmlsZU5hbWVGb3JtcyBGaWxlTmFtZUpvaW4gRmlsZU5hbWVzIEZpbGVOYW1lU2V0dGVyIEZpbGVOYW1lU3BsaXQgRmlsZU5hbWVUYWtlIEZpbGVQcmludCBGaWxlU2l6ZSBGaWxlU3lzdGVtTWFwIEZpbGVTeXN0ZW1TY2FuIEZpbGVUZW1wbGF0ZSBGaWxlVGVtcGxhdGVBcHBseSBGaWxlVHlwZSBGaWxsZWRDdXJ2ZSBGaWxsZWRDdXJ2ZUJveCBGaWxsZWRDdXJ2ZUJveE9wdGlvbnMgRmlsbGluZyBGaWxsaW5nU3R5bGUgRmlsbGluZ1RyYW5zZm9ybSBGaWx0ZXJlZEVudGl0eUNsYXNzIEZpbHRlclJ1bGVzIEZpbmFuY2lhbEJvbmQgRmluYW5jaWFsRGF0YSBGaW5hbmNpYWxEZXJpdmF0aXZlIEZpbmFuY2lhbEluZGljYXRvciBGaW5kIEZpbmRBbm9tYWxpZXMgRmluZEFyZ01heCBGaW5kQXJnTWluIEZpbmRDaGFubmVscyBGaW5kQ2xpcXVlIEZpbmRDbHVzdGVycyBGaW5kQ29va2llcyBGaW5kQ3VydmVQYXRoIEZpbmRDeWNsZSBGaW5kRGV2aWNlcyBGaW5kRGlzdHJpYnV0aW9uIEZpbmREaXN0cmlidXRpb25QYXJhbWV0ZXJzIEZpbmREaXZpc2lvbnMgRmluZEVkZ2VDb3ZlciBGaW5kRWRnZUN1dCBGaW5kRWRnZUluZGVwZW5kZW50UGF0aHMgRmluZEVxdWF0aW9uYWxQcm9vZiBGaW5kRXVsZXJpYW5DeWNsZSBGaW5kRXh0ZXJuYWxFdmFsdWF0b3JzIEZpbmRGYWNlcyBGaW5kRmlsZSBGaW5kRml0IEZpbmRGb3JtdWxhIEZpbmRGdW5kYW1lbnRhbEN5Y2xlcyBGaW5kR2VuZXJhdGluZ0Z1bmN0aW9uIEZpbmRHZW9Mb2NhdGlvbiBGaW5kR2VvbWV0cmljQ29uamVjdHVyZXMgRmluZEdlb21ldHJpY1RyYW5zZm9ybSBGaW5kR3JhcGhDb21tdW5pdGllcyBGaW5kR3JhcGhJc29tb3JwaGlzbSBGaW5kR3JhcGhQYXJ0aXRpb24gRmluZEhhbWlsdG9uaWFuQ3ljbGUgRmluZEhhbWlsdG9uaWFuUGF0aCBGaW5kSGlkZGVuTWFya292U3RhdGVzIEZpbmRJbmRlcGVuZGVudEVkZ2VTZXQgRmluZEluZGVwZW5kZW50VmVydGV4U2V0IEZpbmRJbnN0YW5jZSBGaW5kSW50ZWdlck51bGxWZWN0b3IgRmluZEtDbGFuIEZpbmRLQ2xpcXVlIEZpbmRLQ2x1YiBGaW5kS1BsZXggRmluZExpYnJhcnkgRmluZExpbmVhclJlY3VycmVuY2UgRmluZExpc3QgRmluZE1hdGNoaW5nQ29sb3IgRmluZE1heGltdW0gRmluZE1heGltdW1GbG93IEZpbmRNYXhWYWx1ZSBGaW5kTWVzaERlZmVjdHMgRmluZE1pbmltdW0gRmluZE1pbmltdW1Db3N0RmxvdyBGaW5kTWluaW11bUN1dCBGaW5kTWluVmFsdWUgRmluZE1vbGVjdWxlU3Vic3RydWN0dXJlIEZpbmRQYXRoIEZpbmRQZWFrcyBGaW5kUGVybXV0YXRpb24gRmluZFBvc3RtYW5Ub3VyIEZpbmRQcm9jZXNzUGFyYW1ldGVycyBGaW5kUmVwZWF0IEZpbmRSb290IEZpbmRTZXF1ZW5jZUZ1bmN0aW9uIEZpbmRTZXR0aW5ncyBGaW5kU2hvcnRlc3RQYXRoIEZpbmRTaG9ydGVzdFRvdXIgRmluZFNwYW5uaW5nVHJlZSBGaW5kU3lzdGVtTW9kZWxFcXVpbGlicml1bSBGaW5kVGV4dHVhbEFuc3dlciBGaW5kVGhyZXNob2xkIEZpbmRUcmFuc2llbnRSZXBlYXQgRmluZFZlcnRleENvdmVyIEZpbmRWZXJ0ZXhDdXQgRmluZFZlcnRleEluZGVwZW5kZW50UGF0aHMgRmluZSBGaW5pc2hEeW5hbWljIEZpbml0ZUFiZWxpYW5Hcm91cENvdW50IEZpbml0ZUdyb3VwQ291bnQgRmluaXRlR3JvdXBEYXRhIEZpcnN0IEZpcnN0Q2FzZSBGaXJzdFBhc3NhZ2VUaW1lRGlzdHJpYnV0aW9uIEZpcnN0UG9zaXRpb24gRmlzY2hlckdyb3VwRmkyMiBGaXNjaGVyR3JvdXBGaTIzIEZpc2NoZXJHcm91cEZpMjRQcmltZSBGaXNoZXJIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvbiBGaXNoZXJSYXRpb1Rlc3QgRmlzaGVyWkRpc3RyaWJ1dGlvbiBGaXQgRml0QWxsIEZpdFJlZ3VsYXJpemF0aW9uIEZpdHRlZE1vZGVsIEZpeGVkT3JkZXIgRml4ZWRQb2ludCBGaXhlZFBvaW50TGlzdCBGbGFzaFNlbGVjdGlvbiBGbGF0IEZsYXR0ZW4gRmxhdHRlbkF0IEZsYXR0ZW5MYXllciBGbGF0VG9wV2luZG93IEZsaXBWaWV3IEZsb29yIEZsb3dQb2x5bm9taWFsIEZsdXNoUHJpbnRPdXRwdXRQYWNrZXQgRm9sZCBGb2xkTGlzdCBGb2xkUGFpciBGb2xkUGFpckxpc3QgRm9sbG93UmVkaXJlY3RzIEZvbnQgRm9udENvbG9yIEZvbnRGYW1pbHkgRm9udEZvcm0gRm9udE5hbWUgRm9udE9wYWNpdHkgRm9udFBvc3RTY3JpcHROYW1lIEZvbnRQcm9wZXJ0aWVzIEZvbnRSZWVuY29kaW5nIEZvbnRTaXplIEZvbnRTbGFudCBGb250U3Vic3RpdHV0aW9ucyBGb250VHJhY2tpbmcgRm9udFZhcmlhdGlvbnMgRm9udFdlaWdodCBGb3IgRm9yQWxsIEZvcm1hdCBGb3JtYXRSdWxlcyBGb3JtYXRUeXBlIEZvcm1hdFR5cGVBdXRvQ29udmVydCBGb3JtYXRWYWx1ZXMgRm9ybUJveCBGb3JtQm94T3B0aW9ucyBGb3JtQ29udHJvbCBGb3JtRnVuY3Rpb24gRm9ybUxheW91dEZ1bmN0aW9uIEZvcm1PYmplY3QgRm9ybVBhZ2UgRm9ybVRoZW1lIEZvcm11bGFEYXRhIEZvcm11bGFMb29rdXAgRm9ydHJhbkZvcm0gRm9yd2FyZCBGb3J3YXJkQmFja3dhcmQgRm91cmllciBGb3VyaWVyQ29lZmZpY2llbnQgRm91cmllckNvc0NvZWZmaWNpZW50IEZvdXJpZXJDb3NTZXJpZXMgRm91cmllckNvc1RyYW5zZm9ybSBGb3VyaWVyRENUIEZvdXJpZXJEQ1RGaWx0ZXIgRm91cmllckRDVE1hdHJpeCBGb3VyaWVyRFNUIEZvdXJpZXJEU1RNYXRyaXggRm91cmllck1hdHJpeCBGb3VyaWVyUGFyYW1ldGVycyBGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gRm91cmllclNlcmllcyBGb3VyaWVyU2luQ29lZmZpY2llbnQgRm91cmllclNpblNlcmllcyBGb3VyaWVyU2luVHJhbnNmb3JtIEZvdXJpZXJUcmFuc2Zvcm0gRm91cmllclRyaWdTZXJpZXMgRnJhY3Rpb25hbEJyb3duaWFuTW90aW9uUHJvY2VzcyBGcmFjdGlvbmFsR2F1c3NpYW5Ob2lzZVByb2Nlc3MgRnJhY3Rpb25hbFBhcnQgRnJhY3Rpb25Cb3ggRnJhY3Rpb25Cb3hPcHRpb25zIEZyYWN0aW9uTGluZSBGcmFtZSBGcmFtZUJveCBGcmFtZUJveE9wdGlvbnMgRnJhbWVkIEZyYW1lSW5zZXQgRnJhbWVMYWJlbCBGcmFtZWxlc3MgRnJhbWVNYXJnaW5zIEZyYW1lUmF0ZSBGcmFtZVN0eWxlIEZyYW1lVGlja3MgRnJhbWVUaWNrc1N0eWxlIEZSYXRpb0Rpc3RyaWJ1dGlvbiBGcmVjaGV0RGlzdHJpYnV0aW9uIEZyZWVRIEZyZW5ldFNlcnJldFN5c3RlbSBGcmVxdWVuY3lTYW1wbGluZ0ZpbHRlcktlcm5lbCBGcmVzbmVsQyBGcmVzbmVsRiBGcmVzbmVsRyBGcmVzbmVsUyBGcmlkYXkgRnJvYmVuaXVzTnVtYmVyIEZyb2Jlbml1c1NvbHZlIEZyb21BYnNvbHV0ZVRpbWUgRnJvbUNoYXJhY3RlckNvZGUgRnJvbUNvZWZmaWNpZW50UnVsZXMgRnJvbUNvbnRpbnVlZEZyYWN0aW9uIEZyb21EYXRlIEZyb21EaWdpdHMgRnJvbURNUyBGcm9tRW50aXR5IEZyb21KdWxpYW5EYXRlIEZyb21MZXR0ZXJOdW1iZXIgRnJvbVBvbGFyQ29vcmRpbmF0ZXMgRnJvbVJvbWFuTnVtZXJhbCBGcm9tU3BoZXJpY2FsQ29vcmRpbmF0ZXMgRnJvbVVuaXhUaW1lIEZyb250IEZyb250RW5kRHluYW1pY0V4cHJlc3Npb24gRnJvbnRFbmRFdmVudEFjdGlvbnMgRnJvbnRFbmRFeGVjdXRlIEZyb250RW5kT2JqZWN0IEZyb250RW5kUmVzb3VyY2UgRnJvbnRFbmRSZXNvdXJjZVN0cmluZyBGcm9udEVuZFN0YWNrU2l6ZSBGcm9udEVuZFRva2VuIEZyb250RW5kVG9rZW5FeGVjdXRlIEZyb250RW5kVmFsdWVDYWNoZSBGcm9udEVuZFZlcnNpb24gRnJvbnRGYWNlQ29sb3IgRnJvbnRGYWNlT3BhY2l0eSBGdWxsIEZ1bGxBeGVzIEZ1bGxEZWZpbml0aW9uIEZ1bGxGb3JtIEZ1bGxHcmFwaGljcyBGdWxsSW5mb3JtYXRpb25PdXRwdXRSZWd1bGF0b3IgRnVsbE9wdGlvbnMgRnVsbFJlZ2lvbiBGdWxsU2ltcGxpZnkgRnVuY3Rpb24gRnVuY3Rpb25Db21waWxlIEZ1bmN0aW9uQ29tcGlsZUV4cG9ydCBGdW5jdGlvbkNvbXBpbGVFeHBvcnRCeXRlQXJyYXkgRnVuY3Rpb25Db21waWxlRXhwb3J0TGlicmFyeSBGdW5jdGlvbkNvbXBpbGVFeHBvcnRTdHJpbmcgRnVuY3Rpb25Eb21haW4gRnVuY3Rpb25FeHBhbmQgRnVuY3Rpb25JbnRlcnBvbGF0aW9uIEZ1bmN0aW9uUGVyaW9kIEZ1bmN0aW9uUmFuZ2UgRnVuY3Rpb25TcGFjZSBGdXNzZWxsVmVzZWx5SW1wb3J0YW5jZScgK1xuICAgICAgJ0dhYm9yRmlsdGVyIEdhYm9yTWF0cml4IEdhYm9yV2F2ZWxldCBHYWluTWFyZ2lucyBHYWluUGhhc2VNYXJnaW5zIEdhbGF4eURhdGEgR2FsbGVyeVZpZXcgR2FtbWEgR2FtbWFEaXN0cmlidXRpb24gR2FtbWFSZWd1bGFyaXplZCBHYXBQZW5hbHR5IEdBUkNIUHJvY2VzcyBHYXRlZFJlY3VycmVudExheWVyIEdhdGhlciBHYXRoZXJCeSBHYXVnZUZhY2VFbGVtZW50RnVuY3Rpb24gR2F1Z2VGYWNlU3R5bGUgR2F1Z2VGcmFtZUVsZW1lbnRGdW5jdGlvbiBHYXVnZUZyYW1lU2l6ZSBHYXVnZUZyYW1lU3R5bGUgR2F1Z2VMYWJlbHMgR2F1Z2VNYXJrZXJzIEdhdWdlU3R5bGUgR2F1c3NpYW5GaWx0ZXIgR2F1c3NpYW5JbnRlZ2VycyBHYXVzc2lhbk1hdHJpeCBHYXVzc2lhbk9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb24gR2F1c3NpYW5TeW1wbGVjdGljTWF0cml4RGlzdHJpYnV0aW9uIEdhdXNzaWFuVW5pdGFyeU1hdHJpeERpc3RyaWJ1dGlvbiBHYXVzc2lhbldpbmRvdyBHQ0QgR2VnZW5iYXVlckMgR2VuZXJhbCBHZW5lcmFsaXplZExpbmVhck1vZGVsRml0IEdlbmVyYXRlQXN5bW1ldHJpY0tleVBhaXIgR2VuZXJhdGVDb25kaXRpb25zIEdlbmVyYXRlZENlbGwgR2VuZXJhdGVkRG9jdW1lbnRCaW5kaW5nIEdlbmVyYXRlRGVyaXZlZEtleSBHZW5lcmF0ZURpZ2l0YWxTaWduYXR1cmUgR2VuZXJhdGVEb2N1bWVudCBHZW5lcmF0ZWRQYXJhbWV0ZXJzIEdlbmVyYXRlZFF1YW50aXR5TWFnbml0dWRlcyBHZW5lcmF0ZUhUVFBSZXNwb25zZSBHZW5lcmF0ZVNlY3VyZWRBdXRoZW50aWNhdGlvbktleSBHZW5lcmF0ZVN5bW1ldHJpY0tleSBHZW5lcmF0aW5nRnVuY3Rpb24gR2VuZXJhdG9yRGVzY3JpcHRpb24gR2VuZXJhdG9ySGlzdG9yeUxlbmd0aCBHZW5lcmF0b3JPdXRwdXRUeXBlIEdlbmVyaWMgR2VuZXJpY0N5bGluZHJpY2FsRGVjb21wb3NpdGlvbiBHZW5vbWVEYXRhIEdlbm9tZUxvb2t1cCBHZW9BbnRpcG9kZSBHZW9BcmVhIEdlb0FycmF5U2l6ZSBHZW9CYWNrZ3JvdW5kIEdlb0JvdW5kaW5nQm94IEdlb0JvdW5kcyBHZW9Cb3VuZHNSZWdpb24gR2VvQnViYmxlQ2hhcnQgR2VvQ2VudGVyIEdlb0NpcmNsZSBHZW9kZXNpY0Nsb3NpbmcgR2VvZGVzaWNEaWxhdGlvbiBHZW9kZXNpY0Vyb3Npb24gR2VvZGVzaWNPcGVuaW5nIEdlb0Rlc3RpbmF0aW9uIEdlb2Rlc3lEYXRhIEdlb0RpcmVjdGlvbiBHZW9EaXNrIEdlb0Rpc3BsYWNlbWVudCBHZW9EaXN0YW5jZSBHZW9EaXN0YW5jZUxpc3QgR2VvRWxldmF0aW9uRGF0YSBHZW9FbnRpdGllcyBHZW9HcmFwaGljcyBHZW9ncmF2aXR5TW9kZWxEYXRhIEdlb0dyaWREaXJlY3Rpb25EaWZmZXJlbmNlIEdlb0dyaWRMaW5lcyBHZW9HcmlkTGluZXNTdHlsZSBHZW9HcmlkUG9zaXRpb24gR2VvR3JpZFJhbmdlIEdlb0dyaWRSYW5nZVBhZGRpbmcgR2VvR3JpZFVuaXRBcmVhIEdlb0dyaWRVbml0RGlzdGFuY2UgR2VvR3JpZFZlY3RvciBHZW9Hcm91cCBHZW9IZW1pc3BoZXJlIEdlb0hlbWlzcGhlcmVCb3VuZGFyeSBHZW9IaXN0b2dyYW0gR2VvSWRlbnRpZnkgR2VvSW1hZ2UgR2VvTGFiZWxzIEdlb0xlbmd0aCBHZW9MaXN0UGxvdCBHZW9Mb2NhdGlvbiBHZW9sb2dpY2FsUGVyaW9kRGF0YSBHZW9tYWduZXRpY01vZGVsRGF0YSBHZW9NYXJrZXIgR2VvbWV0cmljQXNzZXJ0aW9uIEdlb21ldHJpY0Jyb3duaWFuTW90aW9uUHJvY2VzcyBHZW9tZXRyaWNEaXN0cmlidXRpb24gR2VvbWV0cmljTWVhbiBHZW9tZXRyaWNNZWFuRmlsdGVyIEdlb21ldHJpY1NjZW5lIEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uIEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uM0RCb3ggR2VvbWV0cmljVHJhbnNmb3JtYXRpb24zREJveE9wdGlvbnMgR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3ggR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3hPcHRpb25zIEdlb01vZGVsIEdlb05lYXJlc3QgR2VvUGF0aCBHZW9Qb3NpdGlvbiBHZW9Qb3NpdGlvbkVOVSBHZW9Qb3NpdGlvblhZWiBHZW9Qcm9qZWN0aW9uIEdlb1Byb2plY3Rpb25EYXRhIEdlb1JhbmdlIEdlb1JhbmdlUGFkZGluZyBHZW9SZWdpb25WYWx1ZVBsb3QgR2VvUmVzb2x1dGlvbiBHZW9TY2FsZUJhciBHZW9TZXJ2ZXIgR2VvU21vb3RoSGlzdG9ncmFtIEdlb1N0cmVhbVBsb3QgR2VvU3R5bGluZyBHZW9TdHlsaW5nSW1hZ2VGdW5jdGlvbiBHZW9WYXJpYW50IEdlb1ZlY3RvciBHZW9WZWN0b3JFTlUgR2VvVmVjdG9yUGxvdCBHZW9WZWN0b3JYWVogR2VvVmlzaWJsZVJlZ2lvbiBHZW9WaXNpYmxlUmVnaW9uQm91bmRhcnkgR2VvV2l0aGluUSBHZW9ab29tTGV2ZWwgR2VzdHVyZUhhbmRsZXIgR2VzdHVyZUhhbmRsZXJUYWcgR2V0IEdldEJvdW5kaW5nQm94U2l6ZVBhY2tldCBHZXRDb250ZXh0IEdldEVudmlyb25tZW50IEdldEZpbGVOYW1lIEdldEZyb250RW5kT3B0aW9uc0RhdGFQYWNrZXQgR2V0TGluZWJyZWFrSW5mb3JtYXRpb25QYWNrZXQgR2V0TWVudXNQYWNrZXQgR2V0UGFnZUJyZWFrSW5mb3JtYXRpb25QYWNrZXQgR2xhaXNoZXIgR2xvYmFsQ2x1c3RlcmluZ0NvZWZmaWNpZW50IEdsb2JhbFByZWZlcmVuY2VzIEdsb2JhbFNlc3Npb24gR2xvdyBHb2xkZW5BbmdsZSBHb2xkZW5SYXRpbyBHb21wZXJ0ek1ha2VoYW1EaXN0cmlidXRpb24gR29vZG1hbktydXNrYWxHYW1tYSBHb29kbWFuS3J1c2thbEdhbW1hVGVzdCBHb3RvIEdyYWQgR3JhZGllbnQgR3JhZGllbnRGaWx0ZXIgR3JhZGllbnRPcmllbnRhdGlvbkZpbHRlciBHcmFtbWFyQXBwbHkgR3JhbW1hclJ1bGVzIEdyYW1tYXJUb2tlbiBHcmFwaCBHcmFwaDNEIEdyYXBoQXNzb3J0YXRpdml0eSBHcmFwaEF1dG9tb3JwaGlzbUdyb3VwIEdyYXBoQ2VudGVyIEdyYXBoQ29tcGxlbWVudCBHcmFwaERhdGEgR3JhcGhEZW5zaXR5IEdyYXBoRGlhbWV0ZXIgR3JhcGhEaWZmZXJlbmNlIEdyYXBoRGlzam9pbnRVbmlvbiBHcmFwaERpc3RhbmNlIEdyYXBoRGlzdGFuY2VNYXRyaXggR3JhcGhFbGVtZW50RGF0YSBHcmFwaEVtYmVkZGluZyBHcmFwaEhpZ2hsaWdodCBHcmFwaEhpZ2hsaWdodFN0eWxlIEdyYXBoSHViIEdyYXBoaWNzIEdyYXBoaWNzM0QgR3JhcGhpY3MzREJveCBHcmFwaGljczNEQm94T3B0aW9ucyBHcmFwaGljc0FycmF5IEdyYXBoaWNzQmFzZWxpbmUgR3JhcGhpY3NCb3ggR3JhcGhpY3NCb3hPcHRpb25zIEdyYXBoaWNzQ29sb3IgR3JhcGhpY3NDb2x1bW4gR3JhcGhpY3NDb21wbGV4IEdyYXBoaWNzQ29tcGxleDNEQm94IEdyYXBoaWNzQ29tcGxleDNEQm94T3B0aW9ucyBHcmFwaGljc0NvbXBsZXhCb3ggR3JhcGhpY3NDb21wbGV4Qm94T3B0aW9ucyBHcmFwaGljc0NvbnRlbnRzIEdyYXBoaWNzRGF0YSBHcmFwaGljc0dyaWQgR3JhcGhpY3NHcmlkQm94IEdyYXBoaWNzR3JvdXAgR3JhcGhpY3NHcm91cDNEQm94IEdyYXBoaWNzR3JvdXAzREJveE9wdGlvbnMgR3JhcGhpY3NHcm91cEJveCBHcmFwaGljc0dyb3VwQm94T3B0aW9ucyBHcmFwaGljc0dyb3VwaW5nIEdyYXBoaWNzSGlnaGxpZ2h0Q29sb3IgR3JhcGhpY3NSb3cgR3JhcGhpY3NTcGFjaW5nIEdyYXBoaWNzU3R5bGUgR3JhcGhJbnRlcnNlY3Rpb24gR3JhcGhMYXlvdXQgR3JhcGhMaW5rRWZmaWNpZW5jeSBHcmFwaFBlcmlwaGVyeSBHcmFwaFBsb3QgR3JhcGhQbG90M0QgR3JhcGhQb3dlciBHcmFwaFByb3BlcnR5RGlzdHJpYnV0aW9uIEdyYXBoUSBHcmFwaFJhZGl1cyBHcmFwaFJlY2lwcm9jaXR5IEdyYXBoUm9vdCBHcmFwaFN0eWxlIEdyYXBoVW5pb24gR3JheSBHcmF5TGV2ZWwgR3JlYXRlciBHcmVhdGVyRXF1YWwgR3JlYXRlckVxdWFsTGVzcyBHcmVhdGVyRXF1YWxUaGFuIEdyZWF0ZXJGdWxsRXF1YWwgR3JlYXRlckdyZWF0ZXIgR3JlYXRlckxlc3MgR3JlYXRlclNsYW50RXF1YWwgR3JlYXRlclRoYW4gR3JlYXRlclRpbGRlIEdyZWVuIEdyZWVuRnVuY3Rpb24gR3JpZCBHcmlkQmFzZWxpbmUgR3JpZEJveCBHcmlkQm94QWxpZ25tZW50IEdyaWRCb3hCYWNrZ3JvdW5kIEdyaWRCb3hEaXZpZGVycyBHcmlkQm94RnJhbWUgR3JpZEJveEl0ZW1TaXplIEdyaWRCb3hJdGVtU3R5bGUgR3JpZEJveE9wdGlvbnMgR3JpZEJveFNwYWNpbmdzIEdyaWRDcmVhdGlvblNldHRpbmdzIEdyaWREZWZhdWx0RWxlbWVudCBHcmlkRWxlbWVudFN0eWxlT3B0aW9ucyBHcmlkRnJhbWUgR3JpZEZyYW1lTWFyZ2lucyBHcmlkR3JhcGggR3JpZExpbmVzIEdyaWRMaW5lc1N0eWxlIEdyb2VibmVyQmFzaXMgR3JvdXBBY3Rpb25CYXNlIEdyb3VwQnkgR3JvdXBDZW50cmFsaXplciBHcm91cEVsZW1lbnRGcm9tV29yZCBHcm91cEVsZW1lbnRQb3NpdGlvbiBHcm91cEVsZW1lbnRRIEdyb3VwRWxlbWVudHMgR3JvdXBFbGVtZW50VG9Xb3JkIEdyb3VwR2VuZXJhdG9ycyBHcm91cGluZ3MgR3JvdXBNdWx0aXBsaWNhdGlvblRhYmxlIEdyb3VwT3JiaXRzIEdyb3VwT3JkZXIgR3JvdXBQYWdlQnJlYWtXaXRoaW4gR3JvdXBTZXR3aXNlU3RhYmlsaXplciBHcm91cFN0YWJpbGl6ZXIgR3JvdXBTdGFiaWxpemVyQ2hhaW4gR3JvdXBUb2dldGhlckdyb3VwaW5nIEdyb3VwVG9nZXRoZXJOZXN0ZWRHcm91cGluZyBHcm93Q3V0Q29tcG9uZW50cyBHdWRlcm1hbm5pYW4gR3VpZGVkRmlsdGVyIEd1bWJlbERpc3RyaWJ1dGlvbicgK1xuICAgICAgJ0hhYXJXYXZlbGV0IEhhZGFtYXJkTWF0cml4IEhhbGZMaW5lIEhhbGZOb3JtYWxEaXN0cmlidXRpb24gSGFsZlBsYW5lIEhhbGZTcGFjZSBIYW1pbHRvbmlhbkdyYXBoUSBIYW1taW5nRGlzdGFuY2UgSGFtbWluZ1dpbmRvdyBIYW5kbGVyRnVuY3Rpb25zIEhhbmRsZXJGdW5jdGlvbnNLZXlzIEhhbmtlbEgxIEhhbmtlbEgyIEhhbmtlbE1hdHJpeCBIYW5rZWxUcmFuc2Zvcm0gSGFublBvaXNzb25XaW5kb3cgSGFubldpbmRvdyBIYXJhZGFOb3J0b25Hcm91cEhOIEhhcmFyeUdyYXBoIEhhcm1vbmljTWVhbiBIYXJtb25pY01lYW5GaWx0ZXIgSGFybW9uaWNOdW1iZXIgSGFzaCBIYXZlcnNpbmUgSGF6YXJkRnVuY3Rpb24gSGVhZCBIZWFkQ29tcG9zZSBIZWFkZXJMaW5lcyBIZWFkcyBIZWF2aXNpZGVMYW1iZGEgSGVhdmlzaWRlUGkgSGVhdmlzaWRlVGhldGEgSGVsZEdyb3VwSGUgSGVsZFBhcnQgSGVscEJyb3dzZXJMb29rdXAgSGVscEJyb3dzZXJOb3RlYm9vayBIZWxwQnJvd3NlclNldHRpbmdzIEhlcmUgSGVybWl0ZURlY29tcG9zaXRpb24gSGVybWl0ZUggSGVybWl0aWFuTWF0cml4USBIZXNzZW5iZXJnRGVjb21wb3NpdGlvbiBIZXNzaWFuIEhleGFkZWNpbWFsQ2hhcmFjdGVyIEhleGFoZWRyb24gSGV4YWhlZHJvbkJveCBIZXhhaGVkcm9uQm94T3B0aW9ucyBIaWRkZW5NYXJrb3ZQcm9jZXNzIEhpZGRlblN1cmZhY2UgSGlnaGxpZ2h0ZWQgSGlnaGxpZ2h0R3JhcGggSGlnaGxpZ2h0SW1hZ2UgSGlnaGxpZ2h0TWVzaCBIaWdocGFzc0ZpbHRlciBIaWdtYW5TaW1zR3JvdXBIUyBIaWxiZXJ0Q3VydmUgSGlsYmVydEZpbHRlciBIaWxiZXJ0TWF0cml4IEhpc3RvZ3JhbSBIaXN0b2dyYW0zRCBIaXN0b2dyYW1EaXN0cmlidXRpb24gSGlzdG9ncmFtTGlzdCBIaXN0b2dyYW1UcmFuc2Zvcm0gSGlzdG9ncmFtVHJhbnNmb3JtSW50ZXJwb2xhdGlvbiBIaXN0b3JpY2FsUGVyaW9kRGF0YSBIaXRNaXNzVHJhbnNmb3JtIEhJVFNDZW50cmFsaXR5IEhqb3J0aERpc3RyaWJ1dGlvbiBIb2RnZUR1YWwgSG9lZmZkaW5nRCBIb2VmZmRpbmdEVGVzdCBIb2xkIEhvbGRBbGwgSG9sZEFsbENvbXBsZXRlIEhvbGRDb21wbGV0ZSBIb2xkRmlyc3QgSG9sZEZvcm0gSG9sZFBhdHRlcm4gSG9sZFJlc3QgSG9saWRheUNhbGVuZGFyIEhvbWVEaXJlY3RvcnkgSG9tZVBhZ2UgSG9yaXpvbnRhbCBIb3Jpem9udGFsRm9ybSBIb3Jpem9udGFsR2F1Z2UgSG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uIEhvcm5lckZvcm0gSG9zdExvb2t1cCBIb3RlbGxpbmdUU3F1YXJlRGlzdHJpYnV0aW9uIEhveXREaXN0cmlidXRpb24gSFRNTFNhdmUgSFRUUEVycm9yUmVzcG9uc2UgSFRUUFJlZGlyZWN0IEhUVFBSZXF1ZXN0IEhUVFBSZXF1ZXN0RGF0YSBIVFRQUmVzcG9uc2UgSHVlIEh1bWFuR3Jvd3RoRGF0YSBIdW1wRG93bkh1bXAgSHVtcEVxdWFsIEh1cndpdHpMZXJjaFBoaSBIdXJ3aXR6WmV0YSBIeXBlcmJvbGljRGlzdHJpYnV0aW9uIEh5cGVyY3ViZUdyYXBoIEh5cGVyZXhwb25lbnRpYWxEaXN0cmlidXRpb24gSHlwZXJmYWN0b3JpYWwgSHlwZXJnZW9tZXRyaWMwRjEgSHlwZXJnZW9tZXRyaWMwRjFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpYzFGMSBIeXBlcmdlb21ldHJpYzFGMVJlZ3VsYXJpemVkIEh5cGVyZ2VvbWV0cmljMkYxIEh5cGVyZ2VvbWV0cmljMkYxUmVndWxhcml6ZWQgSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb24gSHlwZXJnZW9tZXRyaWNQRlEgSHlwZXJnZW9tZXRyaWNQRlFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpY1UgSHlwZXJsaW5rIEh5cGVybGlua0NyZWF0aW9uU2V0dGluZ3MgSHlwZXJwbGFuZSBIeXBoZW5hdGlvbiBIeXBoZW5hdGlvbk9wdGlvbnMgSHlwb2V4cG9uZW50aWFsRGlzdHJpYnV0aW9uIEh5cG90aGVzaXNUZXN0RGF0YScgK1xuICAgICAgJ0kgSWNvbkRhdGEgSWNvbml6ZSBJY29uaXplZE9iamVjdCBJY29uUnVsZXMgSWNvc2FoZWRyb24gSWRlbnRpdHkgSWRlbnRpdHlNYXRyaXggSWYgSWdub3JlQ2FzZSBJZ25vcmVEaWFjcml0aWNzIElnbm9yZVB1bmN0dWF0aW9uIElnbm9yZVNwZWxsQ2hlY2sgSWdub3JpbmdJbmFjdGl2ZSBJbSBJbWFnZSBJbWFnZTNEIEltYWdlM0RQcm9qZWN0aW9uIEltYWdlM0RTbGljZXMgSW1hZ2VBY2N1bXVsYXRlIEltYWdlQWRkIEltYWdlQWRqdXN0IEltYWdlQWxpZ24gSW1hZ2VBcHBseSBJbWFnZUFwcGx5SW5kZXhlZCBJbWFnZUFzcGVjdFJhdGlvIEltYWdlQXNzZW1ibGUgSW1hZ2VBdWdtZW50YXRpb25MYXllciBJbWFnZUJvdW5kaW5nQm94ZXMgSW1hZ2VDYWNoZSBJbWFnZUNhY2hlVmFsaWQgSW1hZ2VDYXB0dXJlIEltYWdlQ2FwdHVyZUZ1bmN0aW9uIEltYWdlQ2FzZXMgSW1hZ2VDaGFubmVscyBJbWFnZUNsaXAgSW1hZ2VDb2xsYWdlIEltYWdlQ29sb3JTcGFjZSBJbWFnZUNvbXBvc2UgSW1hZ2VDb250YWluc1EgSW1hZ2VDb250ZW50cyBJbWFnZUNvbnZvbHZlIEltYWdlQ29vY2N1cnJlbmNlIEltYWdlQ29ybmVycyBJbWFnZUNvcnJlbGF0ZSBJbWFnZUNvcnJlc3BvbmRpbmdQb2ludHMgSW1hZ2VDcm9wIEltYWdlRGF0YSBJbWFnZURlY29udm9sdmUgSW1hZ2VEZW1vc2FpYyBJbWFnZURpZmZlcmVuY2UgSW1hZ2VEaW1lbnNpb25zIEltYWdlRGlzcGxhY2VtZW50cyBJbWFnZURpc3RhbmNlIEltYWdlRWZmZWN0IEltYWdlRXhwb3N1cmVDb21iaW5lIEltYWdlRmVhdHVyZVRyYWNrIEltYWdlRmlsZUFwcGx5IEltYWdlRmlsZUZpbHRlciBJbWFnZUZpbGVTY2FuIEltYWdlRmlsdGVyIEltYWdlRm9jdXNDb21iaW5lIEltYWdlRm9yZXN0aW5nQ29tcG9uZW50cyBJbWFnZUZvcm1hdHRpbmdXaWR0aCBJbWFnZUZvcndhcmRUcmFuc2Zvcm1hdGlvbiBJbWFnZUdyYXBoaWNzIEltYWdlSGlzdG9ncmFtIEltYWdlSWRlbnRpZnkgSW1hZ2VJbnN0YW5jZVEgSW1hZ2VLZXlwb2ludHMgSW1hZ2VMZXZlbHMgSW1hZ2VMaW5lcyBJbWFnZU1hcmdpbnMgSW1hZ2VNYXJrZXIgSW1hZ2VNYXJrZXJzIEltYWdlTWVhc3VyZW1lbnRzIEltYWdlTWVzaCBJbWFnZU11bHRpcGx5IEltYWdlT2Zmc2V0IEltYWdlUGFkIEltYWdlUGFkZGluZyBJbWFnZVBhcnRpdGlvbiBJbWFnZVBlcmlvZG9ncmFtIEltYWdlUGVyc3BlY3RpdmVUcmFuc2Zvcm1hdGlvbiBJbWFnZVBvc2l0aW9uIEltYWdlUHJldmlld0Z1bmN0aW9uIEltYWdlUHlyYW1pZCBJbWFnZVB5cmFtaWRBcHBseSBJbWFnZVEgSW1hZ2VSYW5nZUNhY2hlIEltYWdlUmVjb2xvciBJbWFnZVJlZmxlY3QgSW1hZ2VSZWdpb24gSW1hZ2VSZXNpemUgSW1hZ2VSZXNvbHV0aW9uIEltYWdlUmVzdHlsZSBJbWFnZVJvdGF0ZSBJbWFnZVJvdGF0ZWQgSW1hZ2VTYWxpZW5jeUZpbHRlciBJbWFnZVNjYWxlZCBJbWFnZVNjYW4gSW1hZ2VTaXplIEltYWdlU2l6ZUFjdGlvbiBJbWFnZVNpemVDYWNoZSBJbWFnZVNpemVNdWx0aXBsaWVycyBJbWFnZVNpemVSYXcgSW1hZ2VTdWJ0cmFjdCBJbWFnZVRha2UgSW1hZ2VUcmFuc2Zvcm1hdGlvbiBJbWFnZVRyaW0gSW1hZ2VUeXBlIEltYWdlVmFsdWUgSW1hZ2VWYWx1ZVBvc2l0aW9ucyBJbWFnaW5nRGV2aWNlIEltcGxpY2l0UmVnaW9uIEltcGxpZXMgSW1wb3J0IEltcG9ydEF1dG9SZXBsYWNlbWVudHMgSW1wb3J0Qnl0ZUFycmF5IEltcG9ydE9wdGlvbnMgSW1wb3J0U3RyaW5nIEltcHJvdmVtZW50SW1wb3J0YW5jZSBJbiBJbmFjdGl2YXRlIEluYWN0aXZlIEluY2lkZW5jZUdyYXBoIEluY2lkZW5jZUxpc3QgSW5jaWRlbmNlTWF0cml4IEluY2x1ZGVBcm9tYXRpY0JvbmRzIEluY2x1ZGVDb25zdGFudEJhc2lzIEluY2x1ZGVEZWZpbml0aW9ucyBJbmNsdWRlRGlyZWN0b3JpZXMgSW5jbHVkZUZpbGVFeHRlbnNpb24gSW5jbHVkZUdlbmVyYXRvclRhc2tzIEluY2x1ZGVIeWRyb2dlbnMgSW5jbHVkZUluZmxlY3Rpb25zIEluY2x1ZGVNZXRhSW5mb3JtYXRpb24gSW5jbHVkZVBvZHMgSW5jbHVkZVF1YW50aXRpZXMgSW5jbHVkZVJlbGF0ZWRUYWJsZXMgSW5jbHVkZVNpbmd1bGFyVGVybSBJbmNsdWRlV2luZG93VGltZXMgSW5jcmVtZW50IEluZGVmaW5pdGVNYXRyaXhRIEluZGVudCBJbmRlbnRpbmdOZXdsaW5lU3BhY2luZ3MgSW5kZW50TWF4RnJhY3Rpb24gSW5kZXBlbmRlbmNlVGVzdCBJbmRlcGVuZGVudEVkZ2VTZXRRIEluZGVwZW5kZW50UGh5c2ljYWxRdWFudGl0eSBJbmRlcGVuZGVudFVuaXQgSW5kZXBlbmRlbnRVbml0RGltZW5zaW9uIEluZGVwZW5kZW50VmVydGV4U2V0USBJbmRldGVybWluYXRlIEluZGV0ZXJtaW5hdGVUaHJlc2hvbGQgSW5kZXhDcmVhdGlvbk9wdGlvbnMgSW5kZXhlZCBJbmRleEdyYXBoIEluZGV4VGFnIEluZXF1YWxpdHkgSW5leGFjdE51bWJlclEgSW5leGFjdE51bWJlcnMgSW5maW5pdGVMaW5lIEluZmluaXRlUGxhbmUgSW5maW5pdHkgSW5maXggSW5mbGF0aW9uQWRqdXN0IEluZmxhdGlvbk1ldGhvZCBJbmZvcm1hdGlvbiBJbmZvcm1hdGlvbkRhdGEgSW5mb3JtYXRpb25EYXRhR3JpZCBJbmhlcml0ZWQgSW5oZXJpdFNjb3BlIEluaG9tb2dlbmVvdXNQb2lzc29uUHJvY2VzcyBJbml0aWFsRXZhbHVhdGlvbkhpc3RvcnkgSW5pdGlhbGl6YXRpb24gSW5pdGlhbGl6YXRpb25DZWxsIEluaXRpYWxpemF0aW9uQ2VsbEV2YWx1YXRpb24gSW5pdGlhbGl6YXRpb25DZWxsV2FybmluZyBJbml0aWFsaXphdGlvbk9iamVjdHMgSW5pdGlhbGl6YXRpb25WYWx1ZSBJbml0aWFsaXplIEluaXRpYWxTZWVkaW5nIElubGluZUNvdW50ZXJBc3NpZ25tZW50cyBJbmxpbmVDb3VudGVySW5jcmVtZW50cyBJbmxpbmVSdWxlcyBJbm5lciBJbm5lclBvbHlnb24gSW5uZXJQb2x5aGVkcm9uIElucGFpbnQgSW5wdXQgSW5wdXRBbGlhc2VzIElucHV0QXNzdW1wdGlvbnMgSW5wdXRBdXRvUmVwbGFjZW1lbnRzIElucHV0RmllbGQgSW5wdXRGaWVsZEJveCBJbnB1dEZpZWxkQm94T3B0aW9ucyBJbnB1dEZvcm0gSW5wdXRHcm91cGluZyBJbnB1dE5hbWVQYWNrZXQgSW5wdXROb3RlYm9vayBJbnB1dFBhY2tldCBJbnB1dFNldHRpbmdzIElucHV0U3RyZWFtIElucHV0U3RyaW5nIElucHV0U3RyaW5nUGFja2V0IElucHV0VG9Cb3hGb3JtUGFja2V0IEluc2VydCBJbnNlcnRpb25GdW5jdGlvbiBJbnNlcnRpb25Qb2ludE9iamVjdCBJbnNlcnRMaW5lYnJlYWtzIEluc2VydFJlc3VsdHMgSW5zZXQgSW5zZXQzREJveCBJbnNldDNEQm94T3B0aW9ucyBJbnNldEJveCBJbnNldEJveE9wdGlvbnMgSW5zcGhlcmUgSW5zdGFsbCBJbnN0YWxsU2VydmljZSBJbnN0YW5jZU5vcm1hbGl6YXRpb25MYXllciBJblN0cmluZyBJbnRlZ2VyIEludGVnZXJEaWdpdHMgSW50ZWdlckV4cG9uZW50IEludGVnZXJMZW5ndGggSW50ZWdlck5hbWUgSW50ZWdlclBhcnQgSW50ZWdlclBhcnRpdGlvbnMgSW50ZWdlclEgSW50ZWdlclJldmVyc2UgSW50ZWdlcnMgSW50ZWdlclN0cmluZyBJbnRlZ3JhbCBJbnRlZ3JhdGUgSW50ZXJhY3RpdmUgSW50ZXJhY3RpdmVUcmFkaW5nQ2hhcnQgSW50ZXJsYWNlZCBJbnRlcmxlYXZpbmcgSW50ZXJuYWxseUJhbGFuY2VkRGVjb21wb3NpdGlvbiBJbnRlcnBvbGF0aW5nRnVuY3Rpb24gSW50ZXJwb2xhdGluZ1BvbHlub21pYWwgSW50ZXJwb2xhdGlvbiBJbnRlcnBvbGF0aW9uT3JkZXIgSW50ZXJwb2xhdGlvblBvaW50cyBJbnRlcnBvbGF0aW9uUHJlY2lzaW9uIEludGVycHJldGF0aW9uIEludGVycHJldGF0aW9uQm94IEludGVycHJldGF0aW9uQm94T3B0aW9ucyBJbnRlcnByZXRhdGlvbkZ1bmN0aW9uIEludGVycHJldGVyIEludGVycHJldFRlbXBsYXRlIEludGVycXVhcnRpbGVSYW5nZSBJbnRlcnJ1cHQgSW50ZXJydXB0U2V0dGluZ3MgSW50ZXJzZWN0aW5nUSBJbnRlcnNlY3Rpb24gSW50ZXJ2YWwgSW50ZXJ2YWxJbnRlcnNlY3Rpb24gSW50ZXJ2YWxNYXJrZXJzIEludGVydmFsTWFya2Vyc1N0eWxlIEludGVydmFsTWVtYmVyUSBJbnRlcnZhbFNsaWRlciBJbnRlcnZhbFVuaW9uIEludG8gSW52ZXJzZSBJbnZlcnNlQmV0YVJlZ3VsYXJpemVkIEludmVyc2VDREYgSW52ZXJzZUNoaVNxdWFyZURpc3RyaWJ1dGlvbiBJbnZlcnNlQ29udGludW91c1dhdmVsZXRUcmFuc2Zvcm0gSW52ZXJzZURpc3RhbmNlVHJhbnNmb3JtIEludmVyc2VFbGxpcHRpY05vbWVRIEludmVyc2VFcmYgSW52ZXJzZUVyZmMgSW52ZXJzZUZvdXJpZXIgSW52ZXJzZUZvdXJpZXJDb3NUcmFuc2Zvcm0gSW52ZXJzZUZvdXJpZXJTZXF1ZW5jZVRyYW5zZm9ybSBJbnZlcnNlRm91cmllclNpblRyYW5zZm9ybSBJbnZlcnNlRm91cmllclRyYW5zZm9ybSBJbnZlcnNlRnVuY3Rpb24gSW52ZXJzZUZ1bmN0aW9ucyBJbnZlcnNlR2FtbWFEaXN0cmlidXRpb24gSW52ZXJzZUdhbW1hUmVndWxhcml6ZWQgSW52ZXJzZUdhdXNzaWFuRGlzdHJpYnV0aW9uIEludmVyc2VHdWRlcm1hbm5pYW4gSW52ZXJzZUhhbmtlbFRyYW5zZm9ybSBJbnZlcnNlSGF2ZXJzaW5lIEludmVyc2VJbWFnZVB5cmFtaWQgSW52ZXJzZUphY29iaUNEIEludmVyc2VKYWNvYmlDTiBJbnZlcnNlSmFjb2JpQ1MgSW52ZXJzZUphY29iaURDIEludmVyc2VKYWNvYmlETiBJbnZlcnNlSmFjb2JpRFMgSW52ZXJzZUphY29iaU5DIEludmVyc2VKYWNvYmlORCBJbnZlcnNlSmFjb2JpTlMgSW52ZXJzZUphY29iaVNDIEludmVyc2VKYWNvYmlTRCBJbnZlcnNlSmFjb2JpU04gSW52ZXJzZUxhcGxhY2VUcmFuc2Zvcm0gSW52ZXJzZU1lbGxpblRyYW5zZm9ybSBJbnZlcnNlUGVybXV0YXRpb24gSW52ZXJzZVJhZG9uIEludmVyc2VSYWRvblRyYW5zZm9ybSBJbnZlcnNlU2VyaWVzIEludmVyc2VTaG9ydFRpbWVGb3VyaWVyIEludmVyc2VTcGVjdHJvZ3JhbSBJbnZlcnNlU3Vydml2YWxGdW5jdGlvbiBJbnZlcnNlVHJhbnNmb3JtZWRSZWdpb24gSW52ZXJzZVdhdmVsZXRUcmFuc2Zvcm0gSW52ZXJzZVdlaWVyc3RyYXNzUCBJbnZlcnNlV2lzaGFydE1hdHJpeERpc3RyaWJ1dGlvbiBJbnZlcnNlWlRyYW5zZm9ybSBJbnZpc2libGUgSW52aXNpYmxlQXBwbGljYXRpb24gSW52aXNpYmxlVGltZXMgSVBBZGRyZXNzIElycmVkdWNpYmxlUG9seW5vbWlhbFEgSXNsYW5kRGF0YSBJc29sYXRpbmdJbnRlcnZhbCBJc29tb3JwaGljR3JhcGhRIElzb3RvcGVEYXRhIEl0YWxpYyBJdGVtIEl0ZW1Bc3BlY3RSYXRpbyBJdGVtQm94IEl0ZW1Cb3hPcHRpb25zIEl0ZW1TaXplIEl0ZW1TdHlsZSBJdG9Qcm9jZXNzJyArXG4gICAgICAnSmFjY2FyZERpc3NpbWlsYXJpdHkgSmFjb2JpQW1wbGl0dWRlIEphY29iaWFuIEphY29iaUNEIEphY29iaUNOIEphY29iaUNTIEphY29iaURDIEphY29iaUROIEphY29iaURTIEphY29iaU5DIEphY29iaU5EIEphY29iaU5TIEphY29iaVAgSmFjb2JpU0MgSmFjb2JpU0QgSmFjb2JpU04gSmFjb2JpU3ltYm9sIEphY29iaVpldGEgSmFua29Hcm91cEoxIEphbmtvR3JvdXBKMiBKYW5rb0dyb3VwSjMgSmFua29Hcm91cEo0IEphcnF1ZUJlcmFBTE1UZXN0IEpvaG5zb25EaXN0cmlidXRpb24gSm9pbiBKb2luQWNyb3NzIEpvaW5lZCBKb2luZWRDdXJ2ZSBKb2luZWRDdXJ2ZUJveCBKb2luZWRDdXJ2ZUJveE9wdGlvbnMgSm9pbkZvcm0gSm9yZGFuRGVjb21wb3NpdGlvbiBKb3JkYW5Nb2RlbERlY29tcG9zaXRpb24gSnVsaWFuRGF0ZSBKdWxpYVNldEJvZXR0Y2hlciBKdWxpYVNldEl0ZXJhdGlvbkNvdW50IEp1bGlhU2V0UGxvdCBKdWxpYVNldFBvaW50cycgK1xuICAgICAgJ0sgS2FnaUNoYXJ0IEthaXNlckJlc3NlbFdpbmRvdyBLYWlzZXJXaW5kb3cgS2FsbWFuRXN0aW1hdG9yIEthbG1hbkZpbHRlciBLYXJodW5lbkxvZXZlRGVjb21wb3NpdGlvbiBLYXJ5VHJlZSBLYXR6Q2VudHJhbGl0eSBLQ29yZUNvbXBvbmVudHMgS0Rpc3RyaWJ1dGlvbiBLRWRnZUNvbm5lY3RlZENvbXBvbmVudHMgS0VkZ2VDb25uZWN0ZWRHcmFwaFEgS2VsdmluQmVpIEtlbHZpbkJlciBLZWx2aW5LZWkgS2VsdmluS2VyIEtlbmRhbGxUYXUgS2VuZGFsbFRhdVRlc3QgS2VybmVsRXhlY3V0ZSBLZXJuZWxGdW5jdGlvbiBLZXJuZWxNaXh0dXJlRGlzdHJpYnV0aW9uIEtlcm5lbHMgS2V0IEtleSBLZXlDb2xsaXNpb25GdW5jdGlvbiBLZXlDb21wbGVtZW50IEtleURyb3AgS2V5RHJvcEZyb20gS2V5RXhpc3RzUSBLZXlGcmVlUSBLZXlJbnRlcnNlY3Rpb24gS2V5TWFwIEtleU1lbWJlclEgS2V5cG9pbnRTdHJlbmd0aCBLZXlzIEtleVNlbGVjdCBLZXlTb3J0IEtleVNvcnRCeSBLZXlUYWtlIEtleVVuaW9uIEtleVZhbHVlTWFwIEtleVZhbHVlUGF0dGVybiBLaGluY2hpbiBLaWxsUHJvY2VzcyBLaXJjaGhvZmZHcmFwaCBLaXJjaGhvZmZNYXRyaXggS2xlaW5JbnZhcmlhbnRKIEtuYXBzYWNrU29sdmUgS25pZ2h0VG91ckdyYXBoIEtub3REYXRhIEtub3duVW5pdFEgS29jaEN1cnZlIEtvbG1vZ29yb3ZTbWlybm92VGVzdCBLcm9uZWNrZXJEZWx0YSBLcm9uZWNrZXJNb2RlbERlY29tcG9zaXRpb24gS3JvbmVja2VyUHJvZHVjdCBLcm9uZWNrZXJTeW1ib2wgS3VpcGVyVGVzdCBLdW1hcmFzd2FteURpc3RyaWJ1dGlvbiBLdXJ0b3NpcyBLdXdhaGFyYUZpbHRlciBLVmVydGV4Q29ubmVjdGVkQ29tcG9uZW50cyBLVmVydGV4Q29ubmVjdGVkR3JhcGhRJyArXG4gICAgICAnTEFCQ29sb3IgTGFiZWwgTGFiZWxlZCBMYWJlbGVkU2xpZGVyIExhYmVsaW5nRnVuY3Rpb24gTGFiZWxpbmdTaXplIExhYmVsU3R5bGUgTGFiZWxWaXNpYmlsaXR5IExhZ3VlcnJlTCBMYWtlRGF0YSBMYW1iZGFDb21wb25lbnRzIExhbWJlcnRXIExhbWluYURhdGEgTGFuY3pvc1dpbmRvdyBMYW5kYXVEaXN0cmlidXRpb24gTGFuZ3VhZ2UgTGFuZ3VhZ2VDYXRlZ29yeSBMYW5ndWFnZURhdGEgTGFuZ3VhZ2VJZGVudGlmeSBMYW5ndWFnZU9wdGlvbnMgTGFwbGFjZURpc3RyaWJ1dGlvbiBMYXBsYWNlVHJhbnNmb3JtIExhcGxhY2lhbiBMYXBsYWNpYW5GaWx0ZXIgTGFwbGFjaWFuR2F1c3NpYW5GaWx0ZXIgTGFyZ2UgTGFyZ2VyIExhc3QgTGF0aXR1ZGUgTGF0aXR1ZGVMb25naXR1ZGUgTGF0dGljZURhdGEgTGF0dGljZVJlZHVjZSBMYXVuY2ggTGF1bmNoS2VybmVscyBMYXllcmVkR3JhcGhQbG90IExheWVyU2l6ZUZ1bmN0aW9uIExheW91dEluZm9ybWF0aW9uIExDSENvbG9yIExDTSBMZWFkZXJTaXplIExlYWZDb3VudCBMZWFwWWVhclEgTGVhcm5EaXN0cmlidXRpb24gTGVhcm5lZERpc3RyaWJ1dGlvbiBMZWFybmluZ1JhdGUgTGVhcm5pbmdSYXRlTXVsdGlwbGllcnMgTGVhc3RTcXVhcmVzIExlYXN0U3F1YXJlc0ZpbHRlcktlcm5lbCBMZWZ0IExlZnRBcnJvdyBMZWZ0QXJyb3dCYXIgTGVmdEFycm93UmlnaHRBcnJvdyBMZWZ0RG93blRlZVZlY3RvciBMZWZ0RG93blZlY3RvciBMZWZ0RG93blZlY3RvckJhciBMZWZ0UmlnaHRBcnJvdyBMZWZ0UmlnaHRWZWN0b3IgTGVmdFRlZSBMZWZ0VGVlQXJyb3cgTGVmdFRlZVZlY3RvciBMZWZ0VHJpYW5nbGUgTGVmdFRyaWFuZ2xlQmFyIExlZnRUcmlhbmdsZUVxdWFsIExlZnRVcERvd25WZWN0b3IgTGVmdFVwVGVlVmVjdG9yIExlZnRVcFZlY3RvciBMZWZ0VXBWZWN0b3JCYXIgTGVmdFZlY3RvciBMZWZ0VmVjdG9yQmFyIExlZ2VuZEFwcGVhcmFuY2UgTGVnZW5kZWQgTGVnZW5kRnVuY3Rpb24gTGVnZW5kTGFiZWwgTGVnZW5kTGF5b3V0IExlZ2VuZE1hcmdpbnMgTGVnZW5kTWFya2VycyBMZWdlbmRNYXJrZXJTaXplIExlZ2VuZHJlUCBMZWdlbmRyZVEgTGVnZW5kcmVUeXBlIExlbmd0aCBMZW5ndGhXaGlsZSBMZXJjaFBoaSBMZXNzIExlc3NFcXVhbCBMZXNzRXF1YWxHcmVhdGVyIExlc3NFcXVhbFRoYW4gTGVzc0Z1bGxFcXVhbCBMZXNzR3JlYXRlciBMZXNzTGVzcyBMZXNzU2xhbnRFcXVhbCBMZXNzVGhhbiBMZXNzVGlsZGUgTGV0dGVyQ2hhcmFjdGVyIExldHRlckNvdW50cyBMZXR0ZXJOdW1iZXIgTGV0dGVyUSBMZXZlbCBMZXZlbmVUZXN0IExldmlDaXZpdGFUZW5zb3IgTGV2eURpc3RyaWJ1dGlvbiBMZXhpY29ncmFwaGljIExpYnJhcnlEYXRhVHlwZSBMaWJyYXJ5RnVuY3Rpb24gTGlicmFyeUZ1bmN0aW9uRXJyb3IgTGlicmFyeUZ1bmN0aW9uSW5mb3JtYXRpb24gTGlicmFyeUZ1bmN0aW9uTG9hZCBMaWJyYXJ5RnVuY3Rpb25VbmxvYWQgTGlicmFyeUxvYWQgTGlicmFyeVVubG9hZCBMaWNlbnNlSUQgTGlmdGluZ0ZpbHRlckRhdGEgTGlmdGluZ1dhdmVsZXRUcmFuc2Zvcm0gTGlnaHRCbHVlIExpZ2h0QnJvd24gTGlnaHRDeWFuIExpZ2h0ZXIgTGlnaHRHcmF5IExpZ2h0R3JlZW4gTGlnaHRpbmcgTGlnaHRpbmdBbmdsZSBMaWdodE1hZ2VudGEgTGlnaHRPcmFuZ2UgTGlnaHRQaW5rIExpZ2h0UHVycGxlIExpZ2h0UmVkIExpZ2h0U291cmNlcyBMaWdodFllbGxvdyBMaWtlbGlob29kIExpbWl0IExpbWl0c1Bvc2l0aW9uaW5nIExpbWl0c1Bvc2l0aW9uaW5nVG9rZW5zIExpbmRsZXlEaXN0cmlidXRpb24gTGluZSBMaW5lM0RCb3ggTGluZTNEQm94T3B0aW9ucyBMaW5lYXJGaWx0ZXIgTGluZWFyRnJhY3Rpb25hbE9wdGltaXphdGlvbiBMaW5lYXJGcmFjdGlvbmFsVHJhbnNmb3JtIExpbmVhckdyYWRpZW50SW1hZ2UgTGluZWFyaXppbmdUcmFuc2Zvcm1hdGlvbkRhdGEgTGluZWFyTGF5ZXIgTGluZWFyTW9kZWxGaXQgTGluZWFyT2Zmc2V0RnVuY3Rpb24gTGluZWFyT3B0aW1pemF0aW9uIExpbmVhclByb2dyYW1taW5nIExpbmVhclJlY3VycmVuY2UgTGluZWFyU29sdmUgTGluZWFyU29sdmVGdW5jdGlvbiBMaW5lQm94IExpbmVCb3hPcHRpb25zIExpbmVCcmVhayBMaW5lYnJlYWtBZGp1c3RtZW50cyBMaW5lQnJlYWtDaGFydCBMaW5lYnJlYWtTZW1pY29sb25XZWlnaHRpbmcgTGluZUJyZWFrV2l0aGluIExpbmVDb2xvciBMaW5lR3JhcGggTGluZUluZGVudCBMaW5lSW5kZW50TWF4RnJhY3Rpb24gTGluZUludGVncmFsQ29udm9sdXRpb25QbG90IExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uU2NhbGUgTGluZUxlZ2VuZCBMaW5lT3BhY2l0eSBMaW5lU3BhY2luZyBMaW5lV3JhcFBhcnRzIExpbmtBY3RpdmF0ZSBMaW5rQ2xvc2UgTGlua0Nvbm5lY3QgTGlua0Nvbm5lY3RlZFEgTGlua0NyZWF0ZSBMaW5rRXJyb3IgTGlua0ZsdXNoIExpbmtGdW5jdGlvbiBMaW5rSG9zdCBMaW5rSW50ZXJydXB0IExpbmtMYXVuY2ggTGlua01vZGUgTGlua09iamVjdCBMaW5rT3BlbiBMaW5rT3B0aW9ucyBMaW5rUGF0dGVybnMgTGlua1Byb3RvY29sIExpbmtSYW5rQ2VudHJhbGl0eSBMaW5rUmVhZCBMaW5rUmVhZEhlbGQgTGlua1JlYWR5USBMaW5rcyBMaW5rU2VydmljZSBMaW5rV3JpdGUgTGlua1dyaXRlSGVsZCBMaW91dmlsbGVMYW1iZGEgTGlzdCBMaXN0YWJsZSBMaXN0QW5pbWF0ZSBMaXN0Q29udG91clBsb3QgTGlzdENvbnRvdXJQbG90M0QgTGlzdENvbnZvbHZlIExpc3RDb3JyZWxhdGUgTGlzdEN1cnZlUGF0aFBsb3QgTGlzdERlY29udm9sdmUgTGlzdERlbnNpdHlQbG90IExpc3REZW5zaXR5UGxvdDNEIExpc3RlbiBMaXN0Rm9ybWF0IExpc3RGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gTGlzdEludGVycG9sYXRpb24gTGlzdExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uUGxvdCBMaXN0TGluZVBsb3QgTGlzdExvZ0xpbmVhclBsb3QgTGlzdExvZ0xvZ1Bsb3QgTGlzdExvZ1Bsb3QgTGlzdFBpY2tlciBMaXN0UGlja2VyQm94IExpc3RQaWNrZXJCb3hCYWNrZ3JvdW5kIExpc3RQaWNrZXJCb3hPcHRpb25zIExpc3RQbGF5IExpc3RQbG90IExpc3RQbG90M0QgTGlzdFBvaW50UGxvdDNEIExpc3RQb2xhclBsb3QgTGlzdFEgTGlzdFNsaWNlQ29udG91clBsb3QzRCBMaXN0U2xpY2VEZW5zaXR5UGxvdDNEIExpc3RTbGljZVZlY3RvclBsb3QzRCBMaXN0U3RlcFBsb3QgTGlzdFN0cmVhbURlbnNpdHlQbG90IExpc3RTdHJlYW1QbG90IExpc3RTdXJmYWNlUGxvdDNEIExpc3RWZWN0b3JEZW5zaXR5UGxvdCBMaXN0VmVjdG9yUGxvdCBMaXN0VmVjdG9yUGxvdDNEIExpc3RaVHJhbnNmb3JtIExpdGVyYWwgTGl0ZXJhbFNlYXJjaCBMb2NhbEFkYXB0aXZlQmluYXJpemUgTG9jYWxDYWNoZSBMb2NhbENsdXN0ZXJpbmdDb2VmZmljaWVudCBMb2NhbGl6ZURlZmluaXRpb25zIExvY2FsaXplVmFyaWFibGVzIExvY2FsT2JqZWN0IExvY2FsT2JqZWN0cyBMb2NhbFJlc3BvbnNlTm9ybWFsaXphdGlvbkxheWVyIExvY2FsU3VibWl0IExvY2FsU3ltYm9sIExvY2FsVGltZSBMb2NhbFRpbWVab25lIExvY2F0aW9uRXF1aXZhbGVuY2VUZXN0IExvY2F0aW9uVGVzdCBMb2NhdG9yIExvY2F0b3JBdXRvQ3JlYXRlIExvY2F0b3JCb3ggTG9jYXRvckJveE9wdGlvbnMgTG9jYXRvckNlbnRlcmluZyBMb2NhdG9yUGFuZSBMb2NhdG9yUGFuZUJveCBMb2NhdG9yUGFuZUJveE9wdGlvbnMgTG9jYXRvclJlZ2lvbiBMb2NrZWQgTG9nIExvZzEwIExvZzIgTG9nQmFybmVzRyBMb2dHYW1tYSBMb2dHYW1tYURpc3RyaWJ1dGlvbiBMb2dpY2FsRXhwYW5kIExvZ0ludGVncmFsIExvZ2lzdGljRGlzdHJpYnV0aW9uIExvZ2lzdGljU2lnbW9pZCBMb2dpdE1vZGVsRml0IExvZ0xpa2VsaWhvb2QgTG9nTGluZWFyUGxvdCBMb2dMb2dpc3RpY0Rpc3RyaWJ1dGlvbiBMb2dMb2dQbG90IExvZ011bHRpbm9ybWFsRGlzdHJpYnV0aW9uIExvZ05vcm1hbERpc3RyaWJ1dGlvbiBMb2dQbG90IExvZ1JhbmtUZXN0IExvZ1Nlcmllc0Rpc3RyaWJ1dGlvbiBMb25nRXF1YWwgTG9uZ2VzdCBMb25nZXN0Q29tbW9uU2VxdWVuY2UgTG9uZ2VzdENvbW1vblNlcXVlbmNlUG9zaXRpb25zIExvbmdlc3RDb21tb25TdWJzZXF1ZW5jZSBMb25nZXN0Q29tbW9uU3Vic2VxdWVuY2VQb3NpdGlvbnMgTG9uZ2VzdE1hdGNoIExvbmdlc3RPcmRlcmVkU2VxdWVuY2UgTG9uZ0Zvcm0gTG9uZ2l0dWRlIExvbmdMZWZ0QXJyb3cgTG9uZ0xlZnRSaWdodEFycm93IExvbmdSaWdodEFycm93IExvbmdTaG9ydFRlcm1NZW1vcnlMYXllciBMb29rdXAgTG9vcGJhY2sgTG9vcEZyZWVHcmFwaFEgTG9zc0Z1bmN0aW9uIExvd2VyQ2FzZVEgTG93ZXJMZWZ0QXJyb3cgTG93ZXJSaWdodEFycm93IExvd2VyVHJpYW5ndWxhcml6ZSBMb3dlclRyaWFuZ3VsYXJNYXRyaXhRIExvd3Bhc3NGaWx0ZXIgTFFFc3RpbWF0b3JHYWlucyBMUUdSZWd1bGF0b3IgTFFPdXRwdXRSZWd1bGF0b3JHYWlucyBMUVJlZ3VsYXRvckdhaW5zIExVQmFja1N1YnN0aXR1dGlvbiBMdWNhc0wgTHVjY2lvU2FtaUNvbXBvbmVudHMgTFVEZWNvbXBvc2l0aW9uIEx1bmFyRWNsaXBzZSBMVVZDb2xvciBMeWFwdW5vdlNvbHZlIEx5b25zR3JvdXBMeScgK1xuICAgICAgJ01hY2hpbmVJRCBNYWNoaW5lTmFtZSBNYWNoaW5lTnVtYmVyUSBNYWNoaW5lUHJlY2lzaW9uIE1hY2ludG9zaFN5c3RlbVBhZ2VTZXR1cCBNYWdlbnRhIE1hZ25pZmljYXRpb24gTWFnbmlmeSBNYWlsQWRkcmVzc1ZhbGlkYXRpb24gTWFpbEV4ZWN1dGUgTWFpbEZvbGRlciBNYWlsSXRlbSBNYWlsUmVjZWl2ZXJGdW5jdGlvbiBNYWlsUmVzcG9uc2VGdW5jdGlvbiBNYWlsU2VhcmNoIE1haWxTZXJ2ZXJDb25uZWN0IE1haWxTZXJ2ZXJDb25uZWN0aW9uIE1haWxTZXR0aW5ncyBNYWluU29sdmUgTWFpbnRhaW5EeW5hbWljQ2FjaGVzIE1ham9yaXR5IE1ha2VCb3hlcyBNYWtlRXhwcmVzc2lvbiBNYWtlUnVsZXMgTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uSUQgTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uUSBNYW5kZWxicm90U2V0Qm9ldHRjaGVyIE1hbmRlbGJyb3RTZXREaXN0YW5jZSBNYW5kZWxicm90U2V0SXRlcmF0aW9uQ291bnQgTWFuZGVsYnJvdFNldE1lbWJlclEgTWFuZGVsYnJvdFNldFBsb3QgTWFuZ29sZHRMYW1iZGEgTWFuaGF0dGFuRGlzdGFuY2UgTWFuaXB1bGF0ZSBNYW5pcHVsYXRvciBNYW5uZWRTcGFjZU1pc3Npb25EYXRhIE1hbm5XaGl0bmV5VGVzdCBNYW50aXNzYUV4cG9uZW50IE1hbnVhbCBNYXAgTWFwQWxsIE1hcEF0IE1hcEluZGV4ZWQgTUFQcm9jZXNzIE1hcFRocmVhZCBNYXJjaGVua29QYXN0dXJEaXN0cmlidXRpb24gTWFyY3VtUSBNYXJkaWFDb21iaW5lZFRlc3QgTWFyZGlhS3VydG9zaXNUZXN0IE1hcmRpYVNrZXduZXNzVGVzdCBNYXJnaW5hbERpc3RyaWJ1dGlvbiBNYXJrb3ZQcm9jZXNzUHJvcGVydGllcyBNYXNraW5nIE1hdGNoaW5nRGlzc2ltaWxhcml0eSBNYXRjaExvY2FsTmFtZVEgTWF0Y2hMb2NhbE5hbWVzIE1hdGNoUSBNYXRlcmlhbCBNYXRoZW1hdGljYWxGdW5jdGlvbkRhdGEgTWF0aGVtYXRpY2FOb3RhdGlvbiBNYXRoaWV1QyBNYXRoaWV1Q2hhcmFjdGVyaXN0aWNBIE1hdGhpZXVDaGFyYWN0ZXJpc3RpY0IgTWF0aGlldUNoYXJhY3RlcmlzdGljRXhwb25lbnQgTWF0aGlldUNQcmltZSBNYXRoaWV1R3JvdXBNMTEgTWF0aGlldUdyb3VwTTEyIE1hdGhpZXVHcm91cE0yMiBNYXRoaWV1R3JvdXBNMjMgTWF0aGlldUdyb3VwTTI0IE1hdGhpZXVTIE1hdGhpZXVTUHJpbWUgTWF0aE1MRm9ybSBNYXRoTUxUZXh0IE1hdHJpY2VzIE1hdHJpeEV4cCBNYXRyaXhGb3JtIE1hdHJpeEZ1bmN0aW9uIE1hdHJpeExvZyBNYXRyaXhOb3JtYWxEaXN0cmlidXRpb24gTWF0cml4UGxvdCBNYXRyaXhQb3dlciBNYXRyaXhQcm9wZXJ0eURpc3RyaWJ1dGlvbiBNYXRyaXhRIE1hdHJpeFJhbmsgTWF0cml4VERpc3RyaWJ1dGlvbiBNYXggTWF4QmVuZCBNYXhDZWxsTWVhc3VyZSBNYXhDb2xvckRpc3RhbmNlIE1heERldGVjdCBNYXhEdXJhdGlvbiBNYXhFeHRyYUJhbmR3aWR0aHMgTWF4RXh0cmFDb25kaXRpb25zIE1heEZlYXR1cmVEaXNwbGFjZW1lbnQgTWF4RmVhdHVyZXMgTWF4RmlsdGVyIE1heGltYWxCeSBNYXhpbWl6ZSBNYXhJdGVtcyBNYXhJdGVyYXRpb25zIE1heExpbWl0IE1heE1lbW9yeVVzZWQgTWF4TWl4dHVyZUtlcm5lbHMgTWF4T3ZlcmxhcEZyYWN0aW9uIE1heFBsb3RQb2ludHMgTWF4UG9pbnRzIE1heFJlY3Vyc2lvbiBNYXhTdGFibGVEaXN0cmlidXRpb24gTWF4U3RlcEZyYWN0aW9uIE1heFN0ZXBzIE1heFN0ZXBTaXplIE1heFRyYWluaW5nUm91bmRzIE1heFZhbHVlIE1heHdlbGxEaXN0cmlidXRpb24gTWF4V29yZEdhcCBNY0xhdWdobGluR3JvdXBNY0wgTWVhbiBNZWFuQWJzb2x1dGVMb3NzTGF5ZXIgTWVhbkFyb3VuZCBNZWFuQ2x1c3RlcmluZ0NvZWZmaWNpZW50IE1lYW5EZWdyZWVDb25uZWN0aXZpdHkgTWVhbkRldmlhdGlvbiBNZWFuRmlsdGVyIE1lYW5HcmFwaERpc3RhbmNlIE1lYW5OZWlnaGJvckRlZ3JlZSBNZWFuU2hpZnQgTWVhblNoaWZ0RmlsdGVyIE1lYW5TcXVhcmVkTG9zc0xheWVyIE1lZGlhbiBNZWRpYW5EZXZpYXRpb24gTWVkaWFuRmlsdGVyIE1lZGljYWxUZXN0RGF0YSBNZWRpdW0gTWVpamVyRyBNZWlqZXJHUmVkdWNlIE1laXhuZXJEaXN0cmlidXRpb24gTWVsbGluQ29udm9sdmUgTWVsbGluVHJhbnNmb3JtIE1lbWJlclEgTWVtb3J5QXZhaWxhYmxlIE1lbW9yeUNvbnN0cmFpbmVkIE1lbW9yeUNvbnN0cmFpbnQgTWVtb3J5SW5Vc2UgTWVuZ2VyTWVzaCBNZW51IE1lbnVBcHBlYXJhbmNlIE1lbnVDb21tYW5kS2V5IE1lbnVFdmFsdWF0b3IgTWVudUl0ZW0gTWVudUxpc3QgTWVudVBhY2tldCBNZW51U29ydGluZ1ZhbHVlIE1lbnVTdHlsZSBNZW51VmlldyBNZXJnZSBNZXJnZURpZmZlcmVuY2VzIE1lcmdpbmdGdW5jdGlvbiBNZXJzZW5uZVByaW1lRXhwb25lbnQgTWVyc2VubmVQcmltZUV4cG9uZW50USBNZXNoIE1lc2hDZWxsQ2VudHJvaWQgTWVzaENlbGxDb3VudCBNZXNoQ2VsbEhpZ2hsaWdodCBNZXNoQ2VsbEluZGV4IE1lc2hDZWxsTGFiZWwgTWVzaENlbGxNYXJrZXIgTWVzaENlbGxNZWFzdXJlIE1lc2hDZWxsUXVhbGl0eSBNZXNoQ2VsbHMgTWVzaENlbGxTaGFwZUZ1bmN0aW9uIE1lc2hDZWxsU3R5bGUgTWVzaENvb3JkaW5hdGVzIE1lc2hGdW5jdGlvbnMgTWVzaFByaW1pdGl2ZXMgTWVzaFF1YWxpdHlHb2FsIE1lc2hSYW5nZSBNZXNoUmVmaW5lbWVudEZ1bmN0aW9uIE1lc2hSZWdpb24gTWVzaFJlZ2lvblEgTWVzaFNoYWRpbmcgTWVzaFN0eWxlIE1lc3NhZ2UgTWVzc2FnZURpYWxvZyBNZXNzYWdlTGlzdCBNZXNzYWdlTmFtZSBNZXNzYWdlT2JqZWN0IE1lc3NhZ2VPcHRpb25zIE1lc3NhZ2VQYWNrZXQgTWVzc2FnZXMgTWVzc2FnZXNOb3RlYm9vayBNZXRhQ2hhcmFjdGVycyBNZXRhSW5mb3JtYXRpb24gTWV0ZW9yU2hvd2VyRGF0YSBNZXRob2QgTWV0aG9kT3B0aW9ucyBNZXhpY2FuSGF0V2F2ZWxldCBNZXllcldhdmVsZXQgTWlkcG9pbnQgTWluIE1pbkNvbG9yRGlzdGFuY2UgTWluRGV0ZWN0IE1pbmVyYWxEYXRhIE1pbkZpbHRlciBNaW5pbWFsQnkgTWluaW1hbFBvbHlub21pYWwgTWluaW1hbFN0YXRlU3BhY2VNb2RlbCBNaW5pbWl6ZSBNaW5pbXVtVGltZUluY3JlbWVudCBNaW5JbnRlcnZhbFNpemUgTWlua293c2tpUXVlc3Rpb25NYXJrIE1pbkxpbWl0IE1pbk1heCBNaW5vclBsYW5ldERhdGEgTWlub3JzIE1pblJlY3Vyc2lvbiBNaW5TaXplIE1pblN0YWJsZURpc3RyaWJ1dGlvbiBNaW51cyBNaW51c1BsdXMgTWluVmFsdWUgTWlzc2luZyBNaXNzaW5nQmVoYXZpb3IgTWlzc2luZ0RhdGFNZXRob2QgTWlzc2luZ0RhdGFSdWxlcyBNaXNzaW5nUSBNaXNzaW5nU3RyaW5nIE1pc3NpbmdTdHlsZSBNaXNzaW5nVmFsdWVQYXR0ZXJuIE1pdHRhZ0xlZmZsZXJFIE1peGVkRnJhY3Rpb25QYXJ0cyBNaXhlZEdyYXBoUSBNaXhlZE1hZ25pdHVkZSBNaXhlZFJhZGl4IE1peGVkUmFkaXhRdWFudGl0eSBNaXhlZFVuaXQgTWl4dHVyZURpc3RyaWJ1dGlvbiBNb2QgTW9kYWwgTW9kZSBNb2R1bGFyIE1vZHVsYXJJbnZlcnNlIE1vZHVsYXJMYW1iZGEgTW9kdWxlIE1vZHVsdXMgTW9lYml1c011IE1vbGVjdWxlIE1vbGVjdWxlQ29udGFpbnNRIE1vbGVjdWxlRXF1aXZhbGVudFEgTW9sZWN1bGVHcmFwaCBNb2xlY3VsZU1vZGlmeSBNb2xlY3VsZVBhdHRlcm4gTW9sZWN1bGVQbG90IE1vbGVjdWxlUGxvdDNEIE1vbGVjdWxlUHJvcGVydHkgTW9sZWN1bGVRIE1vbGVjdWxlVmFsdWUgTW9tZW50IE1vbWVudGFyeSBNb21lbnRDb252ZXJ0IE1vbWVudEV2YWx1YXRlIE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvbiBNb21lbnRPZkluZXJ0aWEgTW9uZGF5IE1vbml0b3IgTW9ub21pYWxMaXN0IE1vbm9taWFsT3JkZXIgTW9uc3Rlckdyb3VwTSBNb29uUGhhc2UgTW9vblBvc2l0aW9uIE1vcmxldFdhdmVsZXQgTW9ycGhvbG9naWNhbEJpbmFyaXplIE1vcnBob2xvZ2ljYWxCcmFuY2hQb2ludHMgTW9ycGhvbG9naWNhbENvbXBvbmVudHMgTW9ycGhvbG9naWNhbEV1bGVyTnVtYmVyIE1vcnBob2xvZ2ljYWxHcmFwaCBNb3JwaG9sb2dpY2FsUGVyaW1ldGVyIE1vcnBob2xvZ2ljYWxUcmFuc2Zvcm0gTW9ydGFsaXR5RGF0YSBNb3N0IE1vdW50YWluRGF0YSBNb3VzZUFubm90YXRpb24gTW91c2VBcHBlYXJhbmNlIE1vdXNlQXBwZWFyYW5jZVRhZyBNb3VzZUJ1dHRvbnMgTW91c2VvdmVyIE1vdXNlUG9pbnRlck5vdGUgTW91c2VQb3NpdGlvbiBNb3ZpZURhdGEgTW92aW5nQXZlcmFnZSBNb3ZpbmdNYXAgTW92aW5nTWVkaWFuIE1veWFsRGlzdHJpYnV0aW9uIE11bHRpY29sdW1uIE11bHRpZWRnZVN0eWxlIE11bHRpZ3JhcGhRIE11bHRpbGF1bmNoV2FybmluZyBNdWx0aUxldHRlckl0YWxpY3MgTXVsdGlMZXR0ZXJTdHlsZSBNdWx0aWxpbmVGdW5jdGlvbiBNdWx0aW5vbWlhbCBNdWx0aW5vbWlhbERpc3RyaWJ1dGlvbiBNdWx0aW5vcm1hbERpc3RyaWJ1dGlvbiBNdWx0aXBsaWNhdGl2ZU9yZGVyIE11bHRpcGxpY2l0eSBNdWx0aXBseVNpZGVzIE11bHRpc2VsZWN0aW9uIE11bHRpdmFyaWF0ZUh5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIE11bHRpdmFyaWF0ZVBvaXNzb25EaXN0cmlidXRpb24gTXVsdGl2YXJpYXRlVERpc3RyaWJ1dGlvbicgK1xuICAgICAgJ04gTmFrYWdhbWlEaXN0cmlidXRpb24gTmFtZVEgTmFtZXMgTmFtZXNwYWNlQm94IE5hbWVzcGFjZUJveE9wdGlvbnMgTmFuZCBOQXJnTWF4IE5BcmdNaW4gTkJlcm5vdWxsaUIgTkJvZHlTaW11bGF0aW9uIE5Cb2R5U2ltdWxhdGlvbkRhdGEgTkNhY2hlIE5ERWlnZW5zeXN0ZW0gTkRFaWdlbnZhbHVlcyBORFNvbHZlIE5EU29sdmVWYWx1ZSBOZWFyZXN0IE5lYXJlc3RGdW5jdGlvbiBOZWFyZXN0TmVpZ2hib3JHcmFwaCBOZWFyZXN0VG8gTmVidWxhRGF0YSBOZWVkQ3VycmVudEZyb250RW5kUGFja2FnZVBhY2tldCBOZWVkQ3VycmVudEZyb250RW5kU3ltYm9sc1BhY2tldCBOZWVkbGVtYW5XdW5zY2hTaW1pbGFyaXR5IE5lZWRzIE5lZ2F0aXZlIE5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb24gTmVnYXRpdmVEZWZpbml0ZU1hdHJpeFEgTmVnYXRpdmVJbnRlZ2VycyBOZWdhdGl2ZU11bHRpbm9taWFsRGlzdHJpYnV0aW9uIE5lZ2F0aXZlUmF0aW9uYWxzIE5lZ2F0aXZlUmVhbHMgTmVnYXRpdmVTZW1pZGVmaW5pdGVNYXRyaXhRIE5laWdoYm9yaG9vZERhdGEgTmVpZ2hib3Job29kR3JhcGggTmVzdCBOZXN0ZWRHcmVhdGVyR3JlYXRlciBOZXN0ZWRMZXNzTGVzcyBOZXN0ZWRTY3JpcHRSdWxlcyBOZXN0R3JhcGggTmVzdExpc3QgTmVzdFdoaWxlIE5lc3RXaGlsZUxpc3QgTmV0QXBwZW5kIE5ldEJpZGlyZWN0aW9uYWxPcGVyYXRvciBOZXRDaGFpbiBOZXREZWNvZGVyIE5ldERlbGV0ZSBOZXREcm9wIE5ldEVuY29kZXIgTmV0RXZhbHVhdGlvbk1vZGUgTmV0RXh0cmFjdCBOZXRGbGF0dGVuIE5ldEZvbGRPcGVyYXRvciBOZXRHcmFwaCBOZXRJbmZvcm1hdGlvbiBOZXRJbml0aWFsaXplIE5ldEluc2VydCBOZXRJbnNlcnRTaGFyZWRBcnJheXMgTmV0Sm9pbiBOZXRNYXBPcGVyYXRvciBOZXRNYXBUaHJlYWRPcGVyYXRvciBOZXRNZWFzdXJlbWVudHMgTmV0TW9kZWwgTmV0TmVzdE9wZXJhdG9yIE5ldFBhaXJFbWJlZGRpbmdPcGVyYXRvciBOZXRQb3J0IE5ldFBvcnRHcmFkaWVudCBOZXRQcmVwZW5kIE5ldFJlbmFtZSBOZXRSZXBsYWNlIE5ldFJlcGxhY2VQYXJ0IE5ldFNoYXJlZEFycmF5IE5ldFN0YXRlT2JqZWN0IE5ldFRha2UgTmV0VHJhaW4gTmV0VHJhaW5SZXN1bHRzT2JqZWN0IE5ldHdvcmtQYWNrZXRDYXB0dXJlIE5ldHdvcmtQYWNrZXRSZWNvcmRpbmcgTmV0d29ya1BhY2tldFJlY29yZGluZ0R1cmluZyBOZXR3b3JrUGFja2V0VHJhY2UgTmV1bWFublZhbHVlIE5ldmlsbGVUaGV0YUMgTmV2aWxsZVRoZXRhRCBOZXZpbGxlVGhldGFOIE5ldmlsbGVUaGV0YVMgTmV3UHJpbWl0aXZlU3R5bGUgTkV4cGVjdGF0aW9uIE5leHQgTmV4dENlbGwgTmV4dERhdGUgTmV4dFByaW1lIE5leHRTY2hlZHVsZWRUYXNrVGltZSBOSG9sZEFsbCBOSG9sZEZpcnN0IE5Ib2xkUmVzdCBOaWNob2xzR3JpZExpbmVzIE5pY2hvbHNQbG90IE5pZ2h0SGVtaXNwaGVyZSBOSW50ZWdyYXRlIE5NYXhpbWl6ZSBOTWF4VmFsdWUgTk1pbmltaXplIE5NaW5WYWx1ZSBOb21pbmFsVmFyaWFibGVzIE5vbkFzc29jaWF0aXZlIE5vbmNlbnRyYWxCZXRhRGlzdHJpYnV0aW9uIE5vbmNlbnRyYWxDaGlTcXVhcmVEaXN0cmlidXRpb24gTm9uY2VudHJhbEZSYXRpb0Rpc3RyaWJ1dGlvbiBOb25jZW50cmFsU3R1ZGVudFREaXN0cmlidXRpb24gTm9uQ29tbXV0YXRpdmVNdWx0aXBseSBOb25Db25zdGFudHMgTm9uZGltZW5zaW9uYWxpemF0aW9uVHJhbnNmb3JtIE5vbmUgTm9uZVRydWUgTm9ubGluZWFyTW9kZWxGaXQgTm9ubGluZWFyU3RhdGVTcGFjZU1vZGVsIE5vbmxvY2FsTWVhbnNGaWx0ZXIgTm9uTmVnYXRpdmUgTm9uTmVnYXRpdmVJbnRlZ2VycyBOb25OZWdhdGl2ZVJhdGlvbmFscyBOb25OZWdhdGl2ZVJlYWxzIE5vblBvc2l0aXZlIE5vblBvc2l0aXZlSW50ZWdlcnMgTm9uUG9zaXRpdmVSYXRpb25hbHMgTm9uUG9zaXRpdmVSZWFscyBOb3IgTm9ybHVuZEIgTm9ybSBOb3JtYWwgTm9ybWFsRGlzdHJpYnV0aW9uIE5vcm1hbEdyb3VwaW5nIE5vcm1hbGl6YXRpb25MYXllciBOb3JtYWxpemUgTm9ybWFsaXplZCBOb3JtYWxpemVkU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIE5vcm1hbE1hdHJpeFEgTm9ybWFsc0Z1bmN0aW9uIE5vcm1GdW5jdGlvbiBOb3QgTm90Q29uZ3J1ZW50IE5vdEN1cENhcCBOb3REb3VibGVWZXJ0aWNhbEJhciBOb3RlYm9vayBOb3RlYm9va0FwcGx5IE5vdGVib29rQXV0b1NhdmUgTm90ZWJvb2tDbG9zZSBOb3RlYm9va0NvbnZlcnRTZXR0aW5ncyBOb3RlYm9va0NyZWF0ZSBOb3RlYm9va0NyZWF0ZVJldHVybk9iamVjdCBOb3RlYm9va0RlZmF1bHQgTm90ZWJvb2tEZWxldGUgTm90ZWJvb2tEaXJlY3RvcnkgTm90ZWJvb2tEeW5hbWljRXhwcmVzc2lvbiBOb3RlYm9va0V2YWx1YXRlIE5vdGVib29rRXZlbnRBY3Rpb25zIE5vdGVib29rRmlsZU5hbWUgTm90ZWJvb2tGaW5kIE5vdGVib29rRmluZFJldHVybk9iamVjdCBOb3RlYm9va0dldCBOb3RlYm9va0dldExheW91dEluZm9ybWF0aW9uUGFja2V0IE5vdGVib29rR2V0TWlzc3BlbGxpbmdzUGFja2V0IE5vdGVib29rSW1wb3J0IE5vdGVib29rSW5mb3JtYXRpb24gTm90ZWJvb2tJbnRlcmZhY2VPYmplY3QgTm90ZWJvb2tMb2NhdGUgTm90ZWJvb2tPYmplY3QgTm90ZWJvb2tPcGVuIE5vdGVib29rT3BlblJldHVybk9iamVjdCBOb3RlYm9va1BhdGggTm90ZWJvb2tQcmludCBOb3RlYm9va1B1dCBOb3RlYm9va1B1dFJldHVybk9iamVjdCBOb3RlYm9va1JlYWQgTm90ZWJvb2tSZXNldEdlbmVyYXRlZENlbGxzIE5vdGVib29rcyBOb3RlYm9va1NhdmUgTm90ZWJvb2tTYXZlQXMgTm90ZWJvb2tTZWxlY3Rpb24gTm90ZWJvb2tTZXR1cExheW91dEluZm9ybWF0aW9uUGFja2V0IE5vdGVib29rc01lbnUgTm90ZWJvb2tUZW1wbGF0ZSBOb3RlYm9va1dyaXRlIE5vdEVsZW1lbnQgTm90RXF1YWxUaWxkZSBOb3RFeGlzdHMgTm90R3JlYXRlciBOb3RHcmVhdGVyRXF1YWwgTm90R3JlYXRlckZ1bGxFcXVhbCBOb3RHcmVhdGVyR3JlYXRlciBOb3RHcmVhdGVyTGVzcyBOb3RHcmVhdGVyU2xhbnRFcXVhbCBOb3RHcmVhdGVyVGlsZGUgTm90aGluZyBOb3RIdW1wRG93bkh1bXAgTm90SHVtcEVxdWFsIE5vdGlmaWNhdGlvbkZ1bmN0aW9uIE5vdExlZnRUcmlhbmdsZSBOb3RMZWZ0VHJpYW5nbGVCYXIgTm90TGVmdFRyaWFuZ2xlRXF1YWwgTm90TGVzcyBOb3RMZXNzRXF1YWwgTm90TGVzc0Z1bGxFcXVhbCBOb3RMZXNzR3JlYXRlciBOb3RMZXNzTGVzcyBOb3RMZXNzU2xhbnRFcXVhbCBOb3RMZXNzVGlsZGUgTm90TmVzdGVkR3JlYXRlckdyZWF0ZXIgTm90TmVzdGVkTGVzc0xlc3MgTm90UHJlY2VkZXMgTm90UHJlY2VkZXNFcXVhbCBOb3RQcmVjZWRlc1NsYW50RXF1YWwgTm90UHJlY2VkZXNUaWxkZSBOb3RSZXZlcnNlRWxlbWVudCBOb3RSaWdodFRyaWFuZ2xlIE5vdFJpZ2h0VHJpYW5nbGVCYXIgTm90UmlnaHRUcmlhbmdsZUVxdWFsIE5vdFNxdWFyZVN1YnNldCBOb3RTcXVhcmVTdWJzZXRFcXVhbCBOb3RTcXVhcmVTdXBlcnNldCBOb3RTcXVhcmVTdXBlcnNldEVxdWFsIE5vdFN1YnNldCBOb3RTdWJzZXRFcXVhbCBOb3RTdWNjZWVkcyBOb3RTdWNjZWVkc0VxdWFsIE5vdFN1Y2NlZWRzU2xhbnRFcXVhbCBOb3RTdWNjZWVkc1RpbGRlIE5vdFN1cGVyc2V0IE5vdFN1cGVyc2V0RXF1YWwgTm90VGlsZGUgTm90VGlsZGVFcXVhbCBOb3RUaWxkZUZ1bGxFcXVhbCBOb3RUaWxkZVRpbGRlIE5vdFZlcnRpY2FsQmFyIE5vdyBOb1doaXRlc3BhY2UgTlByb2JhYmlsaXR5IE5Qcm9kdWN0IE5Qcm9kdWN0RmFjdG9ycyBOUm9vdHMgTlNvbHZlIE5TdW0gTlN1bVRlcm1zIE51Y2xlYXJFeHBsb3Npb25EYXRhIE51Y2xlYXJSZWFjdG9yRGF0YSBOdWxsIE51bGxSZWNvcmRzIE51bGxTcGFjZSBOdWxsV29yZHMgTnVtYmVyIE51bWJlckNvbXBvc2UgTnVtYmVyRGVjb21wb3NlIE51bWJlckV4cGFuZCBOdW1iZXJGaWVsZENsYXNzTnVtYmVyIE51bWJlckZpZWxkRGlzY3JpbWluYW50IE51bWJlckZpZWxkRnVuZGFtZW50YWxVbml0cyBOdW1iZXJGaWVsZEludGVncmFsQmFzaXMgTnVtYmVyRmllbGROb3JtUmVwcmVzZW50YXRpdmVzIE51bWJlckZpZWxkUmVndWxhdG9yIE51bWJlckZpZWxkUm9vdHNPZlVuaXR5IE51bWJlckZpZWxkU2lnbmF0dXJlIE51bWJlckZvcm0gTnVtYmVyRm9ybWF0IE51bWJlckxpbmVQbG90IE51bWJlck1hcmtzIE51bWJlck11bHRpcGxpZXIgTnVtYmVyUGFkZGluZyBOdW1iZXJQb2ludCBOdW1iZXJRIE51bWJlclNlcGFyYXRvciBOdW1iZXJTaWducyBOdW1iZXJTdHJpbmcgTnVtZXJhdG9yIE51bWVyYXRvckRlbm9taW5hdG9yIE51bWVyaWNhbE9yZGVyIE51bWVyaWNhbFNvcnQgTnVtZXJpY0FycmF5IE51bWVyaWNBcnJheVEgTnVtZXJpY0FycmF5VHlwZSBOdW1lcmljRnVuY3Rpb24gTnVtZXJpY1EgTnV0dGFsbFdpbmRvdyBOVmFsdWVzIE55cXVpc3RHcmlkTGluZXMgTnlxdWlzdFBsb3QnICtcbiAgICAgICdPIE9ic2VydmFiaWxpdHlHcmFtaWFuIE9ic2VydmFiaWxpdHlNYXRyaXggT2JzZXJ2YWJsZURlY29tcG9zaXRpb24gT2JzZXJ2YWJsZU1vZGVsUSBPY2VhbkRhdGEgT2N0YWhlZHJvbiBPZGRRIE9mZiBPZmZzZXQgT0xFRGF0YSBPbiBPTmFuR3JvdXBPTiBPbmNlIE9uZUlkZW50aXR5IE9wYWNpdHkgT3BhY2l0eUZ1bmN0aW9uIE9wYWNpdHlGdW5jdGlvblNjYWxpbmcgT3BlbiBPcGVuQXBwZW5kIE9wZW5lciBPcGVuZXJCb3ggT3BlbmVyQm94T3B0aW9ucyBPcGVuZXJWaWV3IE9wZW5GdW5jdGlvbkluc3BlY3RvclBhY2tldCBPcGVuaW5nIE9wZW5SZWFkIE9wZW5TcGVjaWFsT3B0aW9ucyBPcGVuVGVtcG9yYXJ5IE9wZW5Xcml0ZSBPcGVyYXRlIE9wZXJhdGluZ1N5c3RlbSBPcHRpbXVtRmxvd0RhdGEgT3B0aW9uYWwgT3B0aW9uYWxFbGVtZW50IE9wdGlvbkluc3BlY3RvclNldHRpbmdzIE9wdGlvblEgT3B0aW9ucyBPcHRpb25zUGFja2V0IE9wdGlvbnNQYXR0ZXJuIE9wdGlvblZhbHVlIE9wdGlvblZhbHVlQm94IE9wdGlvblZhbHVlQm94T3B0aW9ucyBPciBPcmFuZ2UgT3JkZXIgT3JkZXJEaXN0cmlidXRpb24gT3JkZXJlZFEgT3JkZXJpbmcgT3JkZXJpbmdCeSBPcmRlcmluZ0xheWVyIE9yZGVybGVzcyBPcmRlcmxlc3NQYXR0ZXJuU2VxdWVuY2UgT3Juc3RlaW5VaGxlbmJlY2tQcm9jZXNzIE9ydGhvZ29uYWxpemUgT3J0aG9nb25hbE1hdHJpeFEgT3V0IE91dGVyIE91dGVyUG9seWdvbiBPdXRlclBvbHloZWRyb24gT3V0cHV0QXV0b092ZXJ3cml0ZSBPdXRwdXRDb250cm9sbGFiaWxpdHlNYXRyaXggT3V0cHV0Q29udHJvbGxhYmxlTW9kZWxRIE91dHB1dEZvcm0gT3V0cHV0Rm9ybURhdGEgT3V0cHV0R3JvdXBpbmcgT3V0cHV0TWF0aEVkaXRFeHByZXNzaW9uIE91dHB1dE5hbWVQYWNrZXQgT3V0cHV0UmVzcG9uc2UgT3V0cHV0U2l6ZUxpbWl0IE91dHB1dFN0cmVhbSBPdmVyIE92ZXJCYXIgT3ZlckRvdCBPdmVyZmxvdyBPdmVySGF0IE92ZXJsYXBzIE92ZXJsYXkgT3ZlcmxheUJveCBPdmVybGF5Qm94T3B0aW9ucyBPdmVyc2NyaXB0IE92ZXJzY3JpcHRCb3ggT3ZlcnNjcmlwdEJveE9wdGlvbnMgT3ZlclRpbGRlIE92ZXJWZWN0b3IgT3ZlcndyaXRlVGFyZ2V0IE93ZW5UIE93blZhbHVlcycgK1xuICAgICAgJ1BhY2thZ2UgUGFja2luZ01ldGhvZCBQYWRkZWRGb3JtIFBhZGRpbmcgUGFkZGluZ0xheWVyIFBhZGRpbmdTaXplIFBhZGVBcHByb3hpbWFudCBQYWRMZWZ0IFBhZFJpZ2h0IFBhZ2VCcmVha0Fib3ZlIFBhZ2VCcmVha0JlbG93IFBhZ2VCcmVha1dpdGhpbiBQYWdlRm9vdGVyTGluZXMgUGFnZUZvb3RlcnMgUGFnZUhlYWRlckxpbmVzIFBhZ2VIZWFkZXJzIFBhZ2VIZWlnaHQgUGFnZVJhbmtDZW50cmFsaXR5IFBhZ2VUaGVtZSBQYWdlV2lkdGggUGFnaW5hdGlvbiBQYWlyZWRCYXJDaGFydCBQYWlyZWRIaXN0b2dyYW0gUGFpcmVkU21vb3RoSGlzdG9ncmFtIFBhaXJlZFRUZXN0IFBhaXJlZFpUZXN0IFBhbGV0dGVOb3RlYm9vayBQYWxldHRlUGF0aCBQYWxpbmRyb21lUSBQYW5lIFBhbmVCb3ggUGFuZUJveE9wdGlvbnMgUGFuZWwgUGFuZWxCb3ggUGFuZWxCb3hPcHRpb25zIFBhbmVsZWQgUGFuZVNlbGVjdG9yIFBhbmVTZWxlY3RvckJveCBQYW5lU2VsZWN0b3JCb3hPcHRpb25zIFBhcGVyV2lkdGggUGFyYWJvbGljQ3lsaW5kZXJEIFBhcmFncmFwaEluZGVudCBQYXJhZ3JhcGhTcGFjaW5nIFBhcmFsbGVsQXJyYXkgUGFyYWxsZWxDb21iaW5lIFBhcmFsbGVsRG8gUGFyYWxsZWxlcGlwZWQgUGFyYWxsZWxFdmFsdWF0ZSBQYXJhbGxlbGl6YXRpb24gUGFyYWxsZWxpemUgUGFyYWxsZWxNYXAgUGFyYWxsZWxOZWVkcyBQYXJhbGxlbG9ncmFtIFBhcmFsbGVsUHJvZHVjdCBQYXJhbGxlbFN1Ym1pdCBQYXJhbGxlbFN1bSBQYXJhbGxlbFRhYmxlIFBhcmFsbGVsVHJ5IFBhcmFtZXRlciBQYXJhbWV0ZXJFc3RpbWF0b3IgUGFyYW1ldGVyTWl4dHVyZURpc3RyaWJ1dGlvbiBQYXJhbWV0ZXJWYXJpYWJsZXMgUGFyYW1ldHJpY0Z1bmN0aW9uIFBhcmFtZXRyaWNORFNvbHZlIFBhcmFtZXRyaWNORFNvbHZlVmFsdWUgUGFyYW1ldHJpY1Bsb3QgUGFyYW1ldHJpY1Bsb3QzRCBQYXJhbWV0cmljUmVnaW9uIFBhcmVudEJveCBQYXJlbnRDZWxsIFBhcmVudENvbm5lY3QgUGFyZW50RGlyZWN0b3J5IFBhcmVudEZvcm0gUGFyZW50aGVzaXplIFBhcmVudExpc3QgUGFyZW50Tm90ZWJvb2sgUGFyZXRvRGlzdHJpYnV0aW9uIFBhcmV0b1BpY2thbmRzRGlzdHJpYnV0aW9uIFBhcmtEYXRhIFBhcnQgUGFydEJlaGF2aW9yIFBhcnRpYWxDb3JyZWxhdGlvbkZ1bmN0aW9uIFBhcnRpYWxEIFBhcnRpY2xlQWNjZWxlcmF0b3JEYXRhIFBhcnRpY2xlRGF0YSBQYXJ0aXRpb24gUGFydGl0aW9uR3JhbnVsYXJpdHkgUGFydGl0aW9uc1AgUGFydGl0aW9uc1EgUGFydExheWVyIFBhcnRPZlNwZWVjaCBQYXJ0UHJvdGVjdGlvbiBQYXJ6ZW5XaW5kb3cgUGFzY2FsRGlzdHJpYnV0aW9uIFBhc3NFdmVudHNEb3duIFBhc3NFdmVudHNVcCBQYXN0ZSBQYXN0ZUF1dG9RdW90ZUNoYXJhY3RlcnMgUGFzdGVCb3hGb3JtSW5saW5lQ2VsbHMgUGFzdGVCdXR0b24gUGF0aCBQYXRoR3JhcGggUGF0aEdyYXBoUSBQYXR0ZXJuIFBhdHRlcm5TZXF1ZW5jZSBQYXR0ZXJuVGVzdCBQYXVsaU1hdHJpeCBQYXVsV2F2ZWxldCBQYXVzZSBQYXVzZWRUaW1lIFBERiBQZWFrRGV0ZWN0IFBlYW5vQ3VydmUgUGVhcnNvbkNoaVNxdWFyZVRlc3QgUGVhcnNvbkNvcnJlbGF0aW9uVGVzdCBQZWFyc29uRGlzdHJpYnV0aW9uIFBlcmNlbnRGb3JtIFBlcmZlY3ROdW1iZXIgUGVyZmVjdE51bWJlclEgUGVyZm9ybWFuY2VHb2FsIFBlcmltZXRlciBQZXJpb2RpY0JvdW5kYXJ5Q29uZGl0aW9uIFBlcmlvZGljSW50ZXJwb2xhdGlvbiBQZXJpb2RvZ3JhbSBQZXJpb2RvZ3JhbUFycmF5IFBlcm1hbmVudCBQZXJtaXNzaW9ucyBQZXJtaXNzaW9uc0dyb3VwIFBlcm1pc3Npb25zR3JvdXBNZW1iZXJRIFBlcm1pc3Npb25zR3JvdXBzIFBlcm1pc3Npb25zS2V5IFBlcm1pc3Npb25zS2V5cyBQZXJtdXRhdGlvbkN5Y2xlcyBQZXJtdXRhdGlvbkN5Y2xlc1EgUGVybXV0YXRpb25Hcm91cCBQZXJtdXRhdGlvbkxlbmd0aCBQZXJtdXRhdGlvbkxpc3QgUGVybXV0YXRpb25MaXN0USBQZXJtdXRhdGlvbk1heCBQZXJtdXRhdGlvbk1pbiBQZXJtdXRhdGlvbk9yZGVyIFBlcm11dGF0aW9uUG93ZXIgUGVybXV0YXRpb25Qcm9kdWN0IFBlcm11dGF0aW9uUmVwbGFjZSBQZXJtdXRhdGlvbnMgUGVybXV0YXRpb25TdXBwb3J0IFBlcm11dGUgUGVyb25hTWFsaWtGaWx0ZXIgUGVycGVuZGljdWxhciBQZXJwZW5kaWN1bGFyQmlzZWN0b3IgUGVyc2lzdGVuY2VMb2NhdGlvbiBQZXJzaXN0ZW5jZVRpbWUgUGVyc2lzdGVudE9iamVjdCBQZXJzaXN0ZW50T2JqZWN0cyBQZXJzaXN0ZW50VmFsdWUgUGVyc29uRGF0YSBQRVJURGlzdHJpYnV0aW9uIFBldGVyc2VuR3JhcGggUGhhc2VNYXJnaW5zIFBoYXNlUmFuZ2UgUGh5c2ljYWxTeXN0ZW1EYXRhIFBpIFBpY2sgUElERGF0YSBQSUREZXJpdmF0aXZlRmlsdGVyIFBJREZlZWRmb3J3YXJkIFBJRFR1bmUgUGllY2V3aXNlIFBpZWNld2lzZUV4cGFuZCBQaWVDaGFydCBQaWVDaGFydDNEIFBpbGxhaVRyYWNlIFBpbGxhaVRyYWNlVGVzdCBQaW5nVGltZSBQaW5rIFBpdGNoUmVjb2duaXplIFBpdm90aW5nIFBpeGVsQ29uc3RyYWluZWQgUGl4ZWxWYWx1ZSBQaXhlbFZhbHVlUG9zaXRpb25zIFBsYWNlZCBQbGFjZWhvbGRlciBQbGFjZWhvbGRlclJlcGxhY2UgUGxhaW4gUGxhbmFyQW5nbGUgUGxhbmFyR3JhcGggUGxhbmFyR3JhcGhRIFBsYW5ja1JhZGlhdGlvbkxhdyBQbGFuZUN1cnZlRGF0YSBQbGFuZXRhcnlNb29uRGF0YSBQbGFuZXREYXRhIFBsYW50RGF0YSBQbGF5IFBsYXlSYW5nZSBQbG90IFBsb3QzRCBQbG90M01hdHJpeCBQbG90RGl2aXNpb24gUGxvdEpvaW5lZCBQbG90TGFiZWwgUGxvdExhYmVscyBQbG90TGF5b3V0IFBsb3RMZWdlbmRzIFBsb3RNYXJrZXJzIFBsb3RQb2ludHMgUGxvdFJhbmdlIFBsb3RSYW5nZUNsaXBwaW5nIFBsb3RSYW5nZUNsaXBQbGFuZXNTdHlsZSBQbG90UmFuZ2VQYWRkaW5nIFBsb3RSZWdpb24gUGxvdFN0eWxlIFBsb3RUaGVtZSBQbHVyYWxpemUgUGx1cyBQbHVzTWludXMgUG9jaGhhbW1lciBQb2RTdGF0ZXMgUG9kV2lkdGggUG9pbnQgUG9pbnQzREJveCBQb2ludDNEQm94T3B0aW9ucyBQb2ludEJveCBQb2ludEJveE9wdGlvbnMgUG9pbnRGaWd1cmVDaGFydCBQb2ludExlZ2VuZCBQb2ludFNpemUgUG9pc3NvbkNvbnN1bERpc3RyaWJ1dGlvbiBQb2lzc29uRGlzdHJpYnV0aW9uIFBvaXNzb25Qcm9jZXNzIFBvaXNzb25XaW5kb3cgUG9sYXJBeGVzIFBvbGFyQXhlc09yaWdpbiBQb2xhckdyaWRMaW5lcyBQb2xhclBsb3QgUG9sYXJUaWNrcyBQb2xlWmVyb01hcmtlcnMgUG9seWFBZXBwbGlEaXN0cmlidXRpb24gUG9seUdhbW1hIFBvbHlnb24gUG9seWdvbjNEQm94IFBvbHlnb24zREJveE9wdGlvbnMgUG9seWdvbmFsTnVtYmVyIFBvbHlnb25BbmdsZSBQb2x5Z29uQm94IFBvbHlnb25Cb3hPcHRpb25zIFBvbHlnb25Db29yZGluYXRlcyBQb2x5Z29uRGVjb21wb3NpdGlvbiBQb2x5Z29uSG9sZVNjYWxlIFBvbHlnb25JbnRlcnNlY3Rpb25zIFBvbHlnb25TY2FsZSBQb2x5aGVkcm9uIFBvbHloZWRyb25BbmdsZSBQb2x5aGVkcm9uQ29vcmRpbmF0ZXMgUG9seWhlZHJvbkRhdGEgUG9seWhlZHJvbkRlY29tcG9zaXRpb24gUG9seWhlZHJvbkdlbnVzIFBvbHlMb2cgUG9seW5vbWlhbEV4dGVuZGVkR0NEIFBvbHlub21pYWxGb3JtIFBvbHlub21pYWxHQ0QgUG9seW5vbWlhbExDTSBQb2x5bm9taWFsTW9kIFBvbHlub21pYWxRIFBvbHlub21pYWxRdW90aWVudCBQb2x5bm9taWFsUXVvdGllbnRSZW1haW5kZXIgUG9seW5vbWlhbFJlZHVjZSBQb2x5bm9taWFsUmVtYWluZGVyIFBvbHlub21pYWxzIFBvb2xpbmdMYXllciBQb3B1cE1lbnUgUG9wdXBNZW51Qm94IFBvcHVwTWVudUJveE9wdGlvbnMgUG9wdXBWaWV3IFBvcHVwV2luZG93IFBvc2l0aW9uIFBvc2l0aW9uSW5kZXggUG9zaXRpdmUgUG9zaXRpdmVEZWZpbml0ZU1hdHJpeFEgUG9zaXRpdmVJbnRlZ2VycyBQb3NpdGl2ZVJhdGlvbmFscyBQb3NpdGl2ZVJlYWxzIFBvc2l0aXZlU2VtaWRlZmluaXRlTWF0cml4USBQb3NzaWJsZVplcm9RIFBvc3RmaXggUG9zdFNjcmlwdCBQb3dlciBQb3dlckRpc3RyaWJ1dGlvbiBQb3dlckV4cGFuZCBQb3dlck1vZCBQb3dlck1vZExpc3QgUG93ZXJSYW5nZSBQb3dlclNwZWN0cmFsRGVuc2l0eSBQb3dlcnNSZXByZXNlbnRhdGlvbnMgUG93ZXJTeW1tZXRyaWNQb2x5bm9taWFsIFByZWNlZGVuY2UgUHJlY2VkZW5jZUZvcm0gUHJlY2VkZXMgUHJlY2VkZXNFcXVhbCBQcmVjZWRlc1NsYW50RXF1YWwgUHJlY2VkZXNUaWxkZSBQcmVjaXNpb24gUHJlY2lzaW9uR29hbCBQcmVEZWNyZW1lbnQgUHJlZGljdCBQcmVkaWN0aW9uUm9vdCBQcmVkaWN0b3JGdW5jdGlvbiBQcmVkaWN0b3JJbmZvcm1hdGlvbiBQcmVkaWN0b3JNZWFzdXJlbWVudHMgUHJlZGljdG9yTWVhc3VyZW1lbnRzT2JqZWN0IFByZWVtcHRQcm90ZWN0IFByZWZlcmVuY2VzUGF0aCBQcmVmaXggUHJlSW5jcmVtZW50IFByZXBlbmQgUHJlcGVuZExheWVyIFByZXBlbmRUbyBQcmVwcm9jZXNzaW5nUnVsZXMgUHJlc2VydmVDb2xvciBQcmVzZXJ2ZUltYWdlT3B0aW9ucyBQcmV2aW91cyBQcmV2aW91c0NlbGwgUHJldmlvdXNEYXRlIFByaWNlR3JhcGhEaXN0cmlidXRpb24gUHJpbWFyeVBsYWNlaG9sZGVyIFByaW1lIFByaW1lTnUgUHJpbWVPbWVnYSBQcmltZVBpIFByaW1lUG93ZXJRIFByaW1lUSBQcmltZXMgUHJpbWVaZXRhUCBQcmltaXRpdmVQb2x5bm9taWFsUSBQcmltaXRpdmVSb290IFByaW1pdGl2ZVJvb3RMaXN0IFByaW5jaXBhbENvbXBvbmVudHMgUHJpbmNpcGFsVmFsdWUgUHJpbnQgUHJpbnRhYmxlQVNDSUlRIFByaW50QWN0aW9uIFByaW50Rm9ybSBQcmludGluZ0NvcGllcyBQcmludGluZ09wdGlvbnMgUHJpbnRpbmdQYWdlUmFuZ2UgUHJpbnRpbmdTdGFydGluZ1BhZ2VOdW1iZXIgUHJpbnRpbmdTdHlsZUVudmlyb25tZW50IFByaW50b3V0M0QgUHJpbnRvdXQzRFByZXZpZXdlciBQcmludFByZWNpc2lvbiBQcmludFRlbXBvcmFyeSBQcmlzbSBQcmlzbUJveCBQcmlzbUJveE9wdGlvbnMgUHJpdmF0ZUNlbGxPcHRpb25zIFByaXZhdGVFdmFsdWF0aW9uT3B0aW9ucyBQcml2YXRlRm9udE9wdGlvbnMgUHJpdmF0ZUZyb250RW5kT3B0aW9ucyBQcml2YXRlS2V5IFByaXZhdGVOb3RlYm9va09wdGlvbnMgUHJpdmF0ZVBhdGhzIFByb2JhYmlsaXR5IFByb2JhYmlsaXR5RGlzdHJpYnV0aW9uIFByb2JhYmlsaXR5UGxvdCBQcm9iYWJpbGl0eVByIFByb2JhYmlsaXR5U2NhbGVQbG90IFByb2JpdE1vZGVsRml0IFByb2Nlc3NDb25uZWN0aW9uIFByb2Nlc3NEaXJlY3RvcnkgUHJvY2Vzc0Vudmlyb25tZW50IFByb2Nlc3NlcyBQcm9jZXNzRXN0aW1hdG9yIFByb2Nlc3NJbmZvcm1hdGlvbiBQcm9jZXNzT2JqZWN0IFByb2Nlc3NQYXJhbWV0ZXJBc3N1bXB0aW9ucyBQcm9jZXNzUGFyYW1ldGVyUSBQcm9jZXNzU3RhdGVEb21haW4gUHJvY2Vzc1N0YXR1cyBQcm9jZXNzVGltZURvbWFpbiBQcm9kdWN0IFByb2R1Y3REaXN0cmlidXRpb24gUHJvZHVjdExvZyBQcm9ncmVzc0luZGljYXRvciBQcm9ncmVzc0luZGljYXRvckJveCBQcm9ncmVzc0luZGljYXRvckJveE9wdGlvbnMgUHJvamVjdGlvbiBQcm9sb2cgUHJvbXB0Rm9ybSBQcm9vZk9iamVjdCBQcm9wZXJ0aWVzIFByb3BlcnR5IFByb3BlcnR5TGlzdCBQcm9wZXJ0eVZhbHVlIFByb3BvcnRpb24gUHJvcG9ydGlvbmFsIFByb3RlY3QgUHJvdGVjdGVkIFByb3RlaW5EYXRhIFBydW5pbmcgUHNldWRvSW52ZXJzZSBQc3ljaHJvbWV0cmljUHJvcGVydHlEYXRhIFB1YmxpY0tleSBQdWJsaXNoZXJJRCBQdWxzYXJEYXRhIFB1bmN0dWF0aW9uQ2hhcmFjdGVyIFB1cnBsZSBQdXQgUHV0QXBwZW5kIFB5cmFtaWQgUHlyYW1pZEJveCBQeXJhbWlkQm94T3B0aW9ucycgK1xuICAgICAgJ1FCaW5vbWlhbCBRRmFjdG9yaWFsIFFHYW1tYSBRSHlwZXJnZW9tZXRyaWNQRlEgUW5EaXNwZXJzaW9uIFFQb2NoaGFtbWVyIFFQb2x5R2FtbWEgUVJEZWNvbXBvc2l0aW9uIFF1YWRyYXRpY0lycmF0aW9uYWxRIFF1YWRyYXRpY09wdGltaXphdGlvbiBRdWFudGlsZSBRdWFudGlsZVBsb3QgUXVhbnRpdHkgUXVhbnRpdHlBcnJheSBRdWFudGl0eURpc3RyaWJ1dGlvbiBRdWFudGl0eUZvcm0gUXVhbnRpdHlNYWduaXR1ZGUgUXVhbnRpdHlRIFF1YW50aXR5VW5pdCBRdWFudGl0eVZhcmlhYmxlIFF1YW50aXR5VmFyaWFibGVDYW5vbmljYWxVbml0IFF1YW50aXR5VmFyaWFibGVEaW1lbnNpb25zIFF1YW50aXR5VmFyaWFibGVJZGVudGlmaWVyIFF1YW50aXR5VmFyaWFibGVQaHlzaWNhbFF1YW50aXR5IFF1YXJ0aWNzIFF1YXJ0aWxlRGV2aWF0aW9uIFF1YXJ0aWxlcyBRdWFydGlsZVNrZXduZXNzIFF1ZXJ5IFF1ZXVlaW5nTmV0d29ya1Byb2Nlc3MgUXVldWVpbmdQcm9jZXNzIFF1ZXVlUHJvcGVydGllcyBRdWlldCBRdWl0IFF1b3RpZW50IFF1b3RpZW50UmVtYWluZGVyJyArXG4gICAgICAnUmFkaWFsR3JhZGllbnRJbWFnZSBSYWRpYWxpdHlDZW50cmFsaXR5IFJhZGljYWxCb3ggUmFkaWNhbEJveE9wdGlvbnMgUmFkaW9CdXR0b24gUmFkaW9CdXR0b25CYXIgUmFkaW9CdXR0b25Cb3ggUmFkaW9CdXR0b25Cb3hPcHRpb25zIFJhZG9uIFJhZG9uVHJhbnNmb3JtIFJhbWFudWphblRhdSBSYW1hbnVqYW5UYXVMIFJhbWFudWphblRhdVRoZXRhIFJhbWFudWphblRhdVogUmFtcCBSYW5kb20gUmFuZG9tQ2hvaWNlIFJhbmRvbUNvbG9yIFJhbmRvbUNvbXBsZXggUmFuZG9tRW50aXR5IFJhbmRvbUZ1bmN0aW9uIFJhbmRvbUdlb1Bvc2l0aW9uIFJhbmRvbUdyYXBoIFJhbmRvbUltYWdlIFJhbmRvbUluc3RhbmNlIFJhbmRvbUludGVnZXIgUmFuZG9tUGVybXV0YXRpb24gUmFuZG9tUG9pbnQgUmFuZG9tUG9seWdvbiBSYW5kb21Qb2x5aGVkcm9uIFJhbmRvbVByaW1lIFJhbmRvbVJlYWwgUmFuZG9tU2FtcGxlIFJhbmRvbVNlZWQgUmFuZG9tU2VlZGluZyBSYW5kb21WYXJpYXRlIFJhbmRvbVdhbGtQcm9jZXNzIFJhbmRvbVdvcmQgUmFuZ2UgUmFuZ2VGaWx0ZXIgUmFuZ2VTcGVjaWZpY2F0aW9uIFJhbmtlZE1heCBSYW5rZWRNaW4gUmFyZXJQcm9iYWJpbGl0eSBSYXN0ZXIgUmFzdGVyM0QgUmFzdGVyM0RCb3ggUmFzdGVyM0RCb3hPcHRpb25zIFJhc3RlckFycmF5IFJhc3RlckJveCBSYXN0ZXJCb3hPcHRpb25zIFJhc3Rlcml6ZSBSYXN0ZXJTaXplIFJhdGlvbmFsIFJhdGlvbmFsRnVuY3Rpb25zIFJhdGlvbmFsaXplIFJhdGlvbmFscyBSYXRpb3MgUmF3QXJyYXkgUmF3Qm94ZXMgUmF3RGF0YSBSYXdNZWRpdW0gUmF5bGVpZ2hEaXN0cmlidXRpb24gUmUgUmVhZCBSZWFkQnl0ZUFycmF5IFJlYWRMaW5lIFJlYWRMaXN0IFJlYWRQcm90ZWN0ZWQgUmVhZFN0cmluZyBSZWFsIFJlYWxBYnMgUmVhbEJsb2NrRGlhZ29uYWxGb3JtIFJlYWxEaWdpdHMgUmVhbEV4cG9uZW50IFJlYWxzIFJlYWxTaWduIFJlYXAgUmVjb2duaXRpb25QcmlvciBSZWNvZ25pdGlvblRocmVzaG9sZCBSZWNvcmQgUmVjb3JkTGlzdHMgUmVjb3JkU2VwYXJhdG9ycyBSZWN0YW5nbGUgUmVjdGFuZ2xlQm94IFJlY3RhbmdsZUJveE9wdGlvbnMgUmVjdGFuZ2xlQ2hhcnQgUmVjdGFuZ2xlQ2hhcnQzRCBSZWN0YW5ndWxhclJlcGVhdGluZ0VsZW1lbnQgUmVjdXJyZW5jZUZpbHRlciBSZWN1cnJlbmNlVGFibGUgUmVjdXJyaW5nRGlnaXRzRm9ybSBSZWQgUmVkdWNlIFJlZkJveCBSZWZlcmVuY2VMaW5lU3R5bGUgUmVmZXJlbmNlTWFya2VycyBSZWZlcmVuY2VNYXJrZXJTdHlsZSBSZWZpbmUgUmVmbGVjdGlvbk1hdHJpeCBSZWZsZWN0aW9uVHJhbnNmb3JtIFJlZnJlc2ggUmVmcmVzaFJhdGUgUmVnaW9uIFJlZ2lvbkJpbmFyaXplIFJlZ2lvbkJvdW5kYXJ5IFJlZ2lvbkJvdW5kcyBSZWdpb25DZW50cm9pZCBSZWdpb25EaWZmZXJlbmNlIFJlZ2lvbkRpbWVuc2lvbiBSZWdpb25EaXNqb2ludCBSZWdpb25EaXN0YW5jZSBSZWdpb25EaXN0YW5jZUZ1bmN0aW9uIFJlZ2lvbkVtYmVkZGluZ0RpbWVuc2lvbiBSZWdpb25FcXVhbCBSZWdpb25GdW5jdGlvbiBSZWdpb25JbWFnZSBSZWdpb25JbnRlcnNlY3Rpb24gUmVnaW9uTWVhc3VyZSBSZWdpb25NZW1iZXIgUmVnaW9uTWVtYmVyRnVuY3Rpb24gUmVnaW9uTW9tZW50IFJlZ2lvbk5lYXJlc3QgUmVnaW9uTmVhcmVzdEZ1bmN0aW9uIFJlZ2lvblBsb3QgUmVnaW9uUGxvdDNEIFJlZ2lvblByb2R1Y3QgUmVnaW9uUSBSZWdpb25SZXNpemUgUmVnaW9uU2l6ZSBSZWdpb25TeW1tZXRyaWNEaWZmZXJlbmNlIFJlZ2lvblVuaW9uIFJlZ2lvbldpdGhpbiBSZWdpc3RlckV4dGVybmFsRXZhbHVhdG9yIFJlZ3VsYXJFeHByZXNzaW9uIFJlZ3VsYXJpemF0aW9uIFJlZ3VsYXJseVNhbXBsZWRRIFJlZ3VsYXJQb2x5Z29uIFJlSW0gUmVJbUxhYmVscyBSZUltUGxvdCBSZUltU3R5bGUgUmVpbnN0YWxsIFJlbGF0aW9uYWxEYXRhYmFzZSBSZWxhdGlvbkdyYXBoIFJlbGVhc2UgUmVsZWFzZUhvbGQgUmVsaWFiaWxpdHlEaXN0cmlidXRpb24gUmVsaWVmSW1hZ2UgUmVsaWVmUGxvdCBSZW1vdGVBdXRob3JpemF0aW9uQ2FjaGluZyBSZW1vdGVDb25uZWN0IFJlbW90ZUNvbm5lY3Rpb25PYmplY3QgUmVtb3RlRmlsZSBSZW1vdGVSdW4gUmVtb3RlUnVuUHJvY2VzcyBSZW1vdmUgUmVtb3ZlQWxwaGFDaGFubmVsIFJlbW92ZUFzeW5jaHJvbm91c1Rhc2sgUmVtb3ZlQXVkaW9TdHJlYW0gUmVtb3ZlQmFja2dyb3VuZCBSZW1vdmVDaGFubmVsTGlzdGVuZXIgUmVtb3ZlQ2hhbm5lbFN1YnNjcmliZXJzIFJlbW92ZWQgUmVtb3ZlRGlhY3JpdGljcyBSZW1vdmVJbnB1dFN0cmVhbU1ldGhvZCBSZW1vdmVPdXRwdXRTdHJlYW1NZXRob2QgUmVtb3ZlUHJvcGVydHkgUmVtb3ZlU2NoZWR1bGVkVGFzayBSZW1vdmVVc2VycyBSZW5hbWVEaXJlY3RvcnkgUmVuYW1lRmlsZSBSZW5kZXJBbGwgUmVuZGVyaW5nT3B0aW9ucyBSZW5ld2FsUHJvY2VzcyBSZW5rb0NoYXJ0IFJlcGFpck1lc2ggUmVwZWF0ZWQgUmVwZWF0ZWROdWxsIFJlcGVhdGVkU3RyaW5nIFJlcGVhdGVkVGltaW5nIFJlcGVhdGluZ0VsZW1lbnQgUmVwbGFjZSBSZXBsYWNlQWxsIFJlcGxhY2VIZWxkUGFydCBSZXBsYWNlSW1hZ2VWYWx1ZSBSZXBsYWNlTGlzdCBSZXBsYWNlUGFydCBSZXBsYWNlUGl4ZWxWYWx1ZSBSZXBsYWNlUmVwZWF0ZWQgUmVwbGljYXRlTGF5ZXIgUmVxdWlyZWRQaHlzaWNhbFF1YW50aXRpZXMgUmVzYW1wbGluZyBSZXNhbXBsaW5nQWxnb3JpdGhtRGF0YSBSZXNhbXBsaW5nTWV0aG9kIFJlc2NhbGUgUmVzY2FsaW5nVHJhbnNmb3JtIFJlc2V0RGlyZWN0b3J5IFJlc2V0TWVudXNQYWNrZXQgUmVzZXRTY2hlZHVsZWRUYXNrIFJlc2hhcGVMYXllciBSZXNpZHVlIFJlc2l6ZUxheWVyIFJlc29sdmUgUmVzb3VyY2VBY3F1aXJlIFJlc291cmNlRGF0YSBSZXNvdXJjZUZ1bmN0aW9uIFJlc291cmNlT2JqZWN0IFJlc291cmNlUmVnaXN0ZXIgUmVzb3VyY2VSZW1vdmUgUmVzb3VyY2VTZWFyY2ggUmVzb3VyY2VTdWJtaXNzaW9uT2JqZWN0IFJlc291cmNlU3VibWl0IFJlc291cmNlU3lzdGVtQmFzZSBSZXNvdXJjZVVwZGF0ZSBSZXNwb25zZUZvcm0gUmVzdCBSZXN0YXJ0SW50ZXJ2YWwgUmVzdHJpY3RlZCBSZXN1bHRhbnQgUmVzdW1lUGFja2V0IFJldHVybiBSZXR1cm5FbnRlcnNJbnB1dCBSZXR1cm5FeHByZXNzaW9uUGFja2V0IFJldHVybklucHV0Rm9ybVBhY2tldCBSZXR1cm5QYWNrZXQgUmV0dXJuUmVjZWlwdEZ1bmN0aW9uIFJldHVyblRleHRQYWNrZXQgUmV2ZXJzZSBSZXZlcnNlQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldCBSZXZlcnNlRWxlbWVudCBSZXZlcnNlRXF1aWxpYnJpdW0gUmV2ZXJzZUdyYXBoIFJldmVyc2VTb3J0IFJldmVyc2VTb3J0QnkgUmV2ZXJzZVVwRXF1aWxpYnJpdW0gUmV2b2x1dGlvbkF4aXMgUmV2b2x1dGlvblBsb3QzRCBSR0JDb2xvciBSaWNjYXRpU29sdmUgUmljZURpc3RyaWJ1dGlvbiBSaWRnZUZpbHRlciBSaWVtYW5uUiBSaWVtYW5uU2llZ2VsVGhldGEgUmllbWFublNpZWdlbFogUmllbWFublhpIFJpZmZsZSBSaWdodCBSaWdodEFycm93IFJpZ2h0QXJyb3dCYXIgUmlnaHRBcnJvd0xlZnRBcnJvdyBSaWdodENvbXBvc2l0aW9uIFJpZ2h0Q29zZXRSZXByZXNlbnRhdGl2ZSBSaWdodERvd25UZWVWZWN0b3IgUmlnaHREb3duVmVjdG9yIFJpZ2h0RG93blZlY3RvckJhciBSaWdodFRlZSBSaWdodFRlZUFycm93IFJpZ2h0VGVlVmVjdG9yIFJpZ2h0VHJpYW5nbGUgUmlnaHRUcmlhbmdsZUJhciBSaWdodFRyaWFuZ2xlRXF1YWwgUmlnaHRVcERvd25WZWN0b3IgUmlnaHRVcFRlZVZlY3RvciBSaWdodFVwVmVjdG9yIFJpZ2h0VXBWZWN0b3JCYXIgUmlnaHRWZWN0b3IgUmlnaHRWZWN0b3JCYXIgUmlza0FjaGlldmVtZW50SW1wb3J0YW5jZSBSaXNrUmVkdWN0aW9uSW1wb3J0YW5jZSBSb2dlcnNUYW5pbW90b0Rpc3NpbWlsYXJpdHkgUm9sbFBpdGNoWWF3QW5nbGVzIFJvbGxQaXRjaFlhd01hdHJpeCBSb21hbk51bWVyYWwgUm9vdCBSb290QXBwcm94aW1hbnQgUm9vdEludGVydmFscyBSb290TG9jdXNQbG90IFJvb3RNZWFuU3F1YXJlIFJvb3RPZlVuaXR5USBSb290UmVkdWNlIFJvb3RzIFJvb3RTdW0gUm90YXRlIFJvdGF0ZUxhYmVsIFJvdGF0ZUxlZnQgUm90YXRlUmlnaHQgUm90YXRpb25BY3Rpb24gUm90YXRpb25Cb3ggUm90YXRpb25Cb3hPcHRpb25zIFJvdGF0aW9uTWF0cml4IFJvdGF0aW9uVHJhbnNmb3JtIFJvdW5kIFJvdW5kSW1wbGllcyBSb3VuZGluZ1JhZGl1cyBSb3cgUm93QWxpZ25tZW50cyBSb3dCYWNrZ3JvdW5kcyBSb3dCb3ggUm93SGVpZ2h0cyBSb3dMaW5lcyBSb3dNaW5IZWlnaHQgUm93UmVkdWNlIFJvd3NFcXVhbCBSb3dTcGFjaW5ncyBSU29sdmUgUlNvbHZlVmFsdWUgUnVkaW5TaGFwaXJvIFJ1ZHZhbGlzR3JvdXBSdSBSdWxlIFJ1bGVDb25kaXRpb24gUnVsZURlbGF5ZWQgUnVsZUZvcm0gUnVsZVBsb3QgUnVsZXJVbml0cyBSdW4gUnVuUHJvY2VzcyBSdW5TY2hlZHVsZWRUYXNrIFJ1blRocm91Z2ggUnVudGltZUF0dHJpYnV0ZXMgUnVudGltZU9wdGlvbnMgUnVzc2VsbFJhb0Rpc3NpbWlsYXJpdHknICtcbiAgICAgICdTYW1lUSBTYW1lVGVzdCBTYW1wbGVkRW50aXR5Q2xhc3MgU2FtcGxlRGVwdGggU2FtcGxlZFNvdW5kRnVuY3Rpb24gU2FtcGxlZFNvdW5kTGlzdCBTYW1wbGVSYXRlIFNhbXBsaW5nUGVyaW9kIFNBUklNQVByb2Nlc3MgU0FSTUFQcm9jZXNzIFNBU1RyaWFuZ2xlIFNhdGVsbGl0ZURhdGEgU2F0aXNmaWFiaWxpdHlDb3VudCBTYXRpc2ZpYWJpbGl0eUluc3RhbmNlcyBTYXRpc2ZpYWJsZVEgU2F0dXJkYXkgU2F2ZSBTYXZlYWJsZSBTYXZlQXV0b0RlbGV0ZSBTYXZlQ29ubmVjdGlvbiBTYXZlRGVmaW5pdGlvbnMgU2F2aXR6a3lHb2xheU1hdHJpeCBTYXd0b290aFdhdmUgU2NhbGUgU2NhbGVkIFNjYWxlRGl2aXNpb25zIFNjYWxlZE1vdXNlUG9zaXRpb24gU2NhbGVPcmlnaW4gU2NhbGVQYWRkaW5nIFNjYWxlUmFuZ2VzIFNjYWxlUmFuZ2VTdHlsZSBTY2FsaW5nRnVuY3Rpb25zIFNjYWxpbmdNYXRyaXggU2NhbGluZ1RyYW5zZm9ybSBTY2FuIFNjaGVkdWxlZFRhc2sgU2NoZWR1bGVkVGFza0FjdGl2ZVEgU2NoZWR1bGVkVGFza0luZm9ybWF0aW9uIFNjaGVkdWxlZFRhc2tJbmZvcm1hdGlvbkRhdGEgU2NoZWR1bGVkVGFza09iamVjdCBTY2hlZHVsZWRUYXNrcyBTY2h1ckRlY29tcG9zaXRpb24gU2NpZW50aWZpY0Zvcm0gU2NpZW50aWZpY05vdGF0aW9uVGhyZXNob2xkIFNjb3JlckdpIFNjb3JlckdpUHJpbWUgU2NvcmVySGkgU2NvcmVySGlQcmltZSBTY3JlZW5SZWN0YW5nbGUgU2NyZWVuU3R5bGVFbnZpcm9ubWVudCBTY3JpcHRCYXNlbGluZVNoaWZ0cyBTY3JpcHRGb3JtIFNjcmlwdExldmVsIFNjcmlwdE1pblNpemUgU2NyaXB0UnVsZXMgU2NyaXB0U2l6ZU11bHRpcGxpZXJzIFNjcm9sbGJhcnMgU2Nyb2xsaW5nT3B0aW9ucyBTY3JvbGxQb3NpdGlvbiBTZWFyY2hBZGp1c3RtZW50IFNlYXJjaEluZGV4T2JqZWN0IFNlYXJjaEluZGljZXMgU2VhcmNoUXVlcnlTdHJpbmcgU2VhcmNoUmVzdWx0T2JqZWN0IFNlYyBTZWNoIFNlY2hEaXN0cmlidXRpb24gU2Vjb25kT3JkZXJDb25lT3B0aW1pemF0aW9uIFNlY3Rpb25Hcm91cGluZyBTZWN0b3JDaGFydCBTZWN0b3JDaGFydDNEIFNlY3Rvck9yaWdpbiBTZWN0b3JTcGFjaW5nIFNlY3VyZWRBdXRoZW50aWNhdGlvbktleSBTZWN1cmVkQXV0aGVudGljYXRpb25LZXlzIFNlZWRSYW5kb20gU2VsZWN0IFNlbGVjdGFibGUgU2VsZWN0Q29tcG9uZW50cyBTZWxlY3RlZENlbGxzIFNlbGVjdGVkTm90ZWJvb2sgU2VsZWN0Rmlyc3QgU2VsZWN0aW9uIFNlbGVjdGlvbkFuaW1hdGUgU2VsZWN0aW9uQ2VsbCBTZWxlY3Rpb25DZWxsQ3JlYXRlQ2VsbCBTZWxlY3Rpb25DZWxsRGVmYXVsdFN0eWxlIFNlbGVjdGlvbkNlbGxQYXJlbnRTdHlsZSBTZWxlY3Rpb25DcmVhdGVDZWxsIFNlbGVjdGlvbkRlYnVnZ2VyVGFnIFNlbGVjdGlvbkR1cGxpY2F0ZUNlbGwgU2VsZWN0aW9uRXZhbHVhdGUgU2VsZWN0aW9uRXZhbHVhdGVDcmVhdGVDZWxsIFNlbGVjdGlvbk1vdmUgU2VsZWN0aW9uUGxhY2Vob2xkZXIgU2VsZWN0aW9uU2V0U3R5bGUgU2VsZWN0V2l0aENvbnRlbnRzIFNlbGZMb29wcyBTZWxmTG9vcFN0eWxlIFNlbWFudGljSW1wb3J0IFNlbWFudGljSW1wb3J0U3RyaW5nIFNlbWFudGljSW50ZXJwcmV0YXRpb24gU2VtaWFsZ2VicmFpY0NvbXBvbmVudEluc3RhbmNlcyBTZW1pZGVmaW5pdGVPcHRpbWl6YXRpb24gU2VuZE1haWwgU2VuZE1lc3NhZ2UgU2VxdWVuY2UgU2VxdWVuY2VBbGlnbm1lbnQgU2VxdWVuY2VBdHRlbnRpb25MYXllciBTZXF1ZW5jZUNhc2VzIFNlcXVlbmNlQ291bnQgU2VxdWVuY2VGb2xkIFNlcXVlbmNlRm9sZExpc3QgU2VxdWVuY2VGb3JtIFNlcXVlbmNlSG9sZCBTZXF1ZW5jZUxhc3RMYXllciBTZXF1ZW5jZU1vc3RMYXllciBTZXF1ZW5jZVBvc2l0aW9uIFNlcXVlbmNlUHJlZGljdCBTZXF1ZW5jZVByZWRpY3RvckZ1bmN0aW9uIFNlcXVlbmNlUmVwbGFjZSBTZXF1ZW5jZVJlc3RMYXllciBTZXF1ZW5jZVJldmVyc2VMYXllciBTZXF1ZW5jZVNwbGl0IFNlcmllcyBTZXJpZXNDb2VmZmljaWVudCBTZXJpZXNEYXRhIFNlcnZpY2VDb25uZWN0IFNlcnZpY2VEaXNjb25uZWN0IFNlcnZpY2VFeGVjdXRlIFNlcnZpY2VPYmplY3QgU2VydmljZVJlcXVlc3QgU2VydmljZVJlc3BvbnNlIFNlcnZpY2VTdWJtaXQgU2Vzc2lvblN1Ym1pdCBTZXNzaW9uVGltZSBTZXQgU2V0QWNjdXJhY3kgU2V0QWxwaGFDaGFubmVsIFNldEF0dHJpYnV0ZXMgU2V0YmFja3MgU2V0Qm94Rm9ybU5hbWVzUGFja2V0IFNldENsb3VkRGlyZWN0b3J5IFNldENvb2tpZXMgU2V0RGVsYXllZCBTZXREaXJlY3RvcnkgU2V0RW52aXJvbm1lbnQgU2V0RXZhbHVhdGlvbk5vdGVib29rIFNldEZpbGVEYXRlIFNldEZpbGVMb2FkaW5nQ29udGV4dCBTZXROb3RlYm9va1N0YXR1c0xpbmUgU2V0T3B0aW9ucyBTZXRPcHRpb25zUGFja2V0IFNldFBlcm1pc3Npb25zIFNldFByZWNpc2lvbiBTZXRQcm9wZXJ0eSBTZXRTZWN1cmVkQXV0aGVudGljYXRpb25LZXkgU2V0U2VsZWN0ZWROb3RlYm9vayBTZXRTaGFyZWRGdW5jdGlvbiBTZXRTaGFyZWRWYXJpYWJsZSBTZXRTcGVlY2hQYXJhbWV0ZXJzUGFja2V0IFNldFN0cmVhbVBvc2l0aW9uIFNldFN5c3RlbU1vZGVsIFNldFN5c3RlbU9wdGlvbnMgU2V0dGVyIFNldHRlckJhciBTZXR0ZXJCb3ggU2V0dGVyQm94T3B0aW9ucyBTZXR0aW5nIFNldFVzZXJzIFNldFZhbHVlIFNoYWRpbmcgU2hhbGxvdyBTaGFubm9uV2F2ZWxldCBTaGFwaXJvV2lsa1Rlc3QgU2hhcmUgU2hhcmluZ0xpc3QgU2hhcnBlbiBTaGVhcmluZ01hdHJpeCBTaGVhcmluZ1RyYW5zZm9ybSBTaGVsbFJlZ2lvbiBTaGVuQ2FzdGFuTWF0cml4IFNoaWZ0ZWRHb21wZXJ0ekRpc3RyaWJ1dGlvbiBTaGlmdFJlZ2lzdGVyU2VxdWVuY2UgU2hvcnQgU2hvcnREb3duQXJyb3cgU2hvcnRlc3QgU2hvcnRlc3RNYXRjaCBTaG9ydGVzdFBhdGhGdW5jdGlvbiBTaG9ydExlZnRBcnJvdyBTaG9ydFJpZ2h0QXJyb3cgU2hvcnRUaW1lRm91cmllciBTaG9ydFRpbWVGb3VyaWVyRGF0YSBTaG9ydFVwQXJyb3cgU2hvdyBTaG93QXV0b0NvbnZlcnQgU2hvd0F1dG9TcGVsbENoZWNrIFNob3dBdXRvU3R5bGVzIFNob3dDZWxsQnJhY2tldCBTaG93Q2VsbExhYmVsIFNob3dDZWxsVGFncyBTaG93Q2xvc2VkQ2VsbEFyZWEgU2hvd0NvZGVBc3Npc3QgU2hvd0NvbnRlbnRzIFNob3dDb250cm9scyBTaG93Q3Vyc29yVHJhY2tlciBTaG93R3JvdXBPcGVuQ2xvc2VJY29uIFNob3dHcm91cE9wZW5lciBTaG93SW52aXNpYmxlQ2hhcmFjdGVycyBTaG93UGFnZUJyZWFrcyBTaG93UHJlZGljdGl2ZUludGVyZmFjZSBTaG93U2VsZWN0aW9uIFNob3dTaG9ydEJveEZvcm0gU2hvd1NwZWNpYWxDaGFyYWN0ZXJzIFNob3dTdHJpbmdDaGFyYWN0ZXJzIFNob3dTeW50YXhTdHlsZXMgU2hyaW5raW5nRGVsYXkgU2hyaW5rV3JhcEJvdW5kaW5nQm94IFNpZGVyZWFsVGltZSBTaWVnZWxUaGV0YSBTaWVnZWxUdWtleVRlc3QgU2llcnBpbnNraUN1cnZlIFNpZXJwaW5za2lNZXNoIFNpZ24gU2lnbmF0dXJlIFNpZ25lZFJhbmtUZXN0IFNpZ25lZFJlZ2lvbkRpc3RhbmNlIFNpZ25pZmljYW5jZUxldmVsIFNpZ25QYWRkaW5nIFNpZ25UZXN0IFNpbWlsYXJpdHlSdWxlcyBTaW1wbGVHcmFwaCBTaW1wbGVHcmFwaFEgU2ltcGxlUG9seWdvblEgU2ltcGxlUG9seWhlZHJvblEgU2ltcGxleCBTaW1wbGlmeSBTaW4gU2luYyBTaW5naE1hZGRhbGFEaXN0cmlidXRpb24gU2luZ2xlRXZhbHVhdGlvbiBTaW5nbGVMZXR0ZXJJdGFsaWNzIFNpbmdsZUxldHRlclN0eWxlIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIFNpbmd1bGFyVmFsdWVMaXN0IFNpbmd1bGFyVmFsdWVQbG90IFNpbmd1bGFyVmFsdWVzIFNpbmggU2luaEludGVncmFsIFNpbkludGVncmFsIFNpeEpTeW1ib2wgU2tlbGV0b24gU2tlbGV0b25UcmFuc2Zvcm0gU2tlbGxhbURpc3RyaWJ1dGlvbiBTa2V3bmVzcyBTa2V3Tm9ybWFsRGlzdHJpYnV0aW9uIFNraW5TdHlsZSBTa2lwIFNsaWNlQ29udG91clBsb3QzRCBTbGljZURlbnNpdHlQbG90M0QgU2xpY2VEaXN0cmlidXRpb24gU2xpY2VWZWN0b3JQbG90M0QgU2xpZGVyIFNsaWRlcjJEIFNsaWRlcjJEQm94IFNsaWRlcjJEQm94T3B0aW9ucyBTbGlkZXJCb3ggU2xpZGVyQm94T3B0aW9ucyBTbGlkZVZpZXcgU2xvdCBTbG90U2VxdWVuY2UgU21hbGwgU21hbGxDaXJjbGUgU21hbGxlciBTbWl0aERlY29tcG9zaXRpb24gU21pdGhEZWxheUNvbXBlbnNhdG9yIFNtaXRoV2F0ZXJtYW5TaW1pbGFyaXR5IFNtb290aERlbnNpdHlIaXN0b2dyYW0gU21vb3RoSGlzdG9ncmFtIFNtb290aEhpc3RvZ3JhbTNEIFNtb290aEtlcm5lbERpc3RyaWJ1dGlvbiBTbkRpc3BlcnNpb24gU25pcHBldCBTbnViUG9seWhlZHJvbiBTb2NpYWxNZWRpYURhdGEgU29ja2V0IFNvY2tldENvbm5lY3QgU29ja2V0TGlzdGVuIFNvY2tldExpc3RlbmVyIFNvY2tldE9iamVjdCBTb2NrZXRPcGVuIFNvY2tldFJlYWRNZXNzYWdlIFNvY2tldFJlYWR5USBTb2NrZXRzIFNvY2tldFdhaXRBbGwgU29ja2V0V2FpdE5leHQgU29mdG1heExheWVyIFNva2FsU25lYXRoRGlzc2ltaWxhcml0eSBTb2xhckVjbGlwc2UgU29sYXJTeXN0ZW1GZWF0dXJlRGF0YSBTb2xpZEFuZ2xlIFNvbGlkRGF0YSBTb2xpZFJlZ2lvblEgU29sdmUgU29sdmVBbHdheXMgU29sdmVEZWxheWVkIFNvcnQgU29ydEJ5IFNvcnRlZEJ5IFNvcnRlZEVudGl0eUNsYXNzIFNvdW5kIFNvdW5kQW5kR3JhcGhpY3MgU291bmROb3RlIFNvdW5kVm9sdW1lIFNvdXJjZUxpbmsgU293IFNwYWNlIFNwYWNlQ3VydmVEYXRhIFNwYWNlRm9ybSBTcGFjZXIgU3BhY2luZ3MgU3BhbiBTcGFuQWRqdXN0bWVudHMgU3BhbkNoYXJhY3RlclJvdW5kaW5nIFNwYW5Gcm9tQWJvdmUgU3BhbkZyb21Cb3RoIFNwYW5Gcm9tTGVmdCBTcGFuTGluZVRoaWNrbmVzcyBTcGFuTWF4U2l6ZSBTcGFuTWluU2l6ZSBTcGFubmluZ0NoYXJhY3RlcnMgU3BhblN5bW1ldHJpYyBTcGFyc2VBcnJheSBTcGF0aWFsR3JhcGhEaXN0cmlidXRpb24gU3BhdGlhbE1lZGlhbiBTcGF0aWFsVHJhbnNmb3JtYXRpb25MYXllciBTcGVhayBTcGVha1RleHRQYWNrZXQgU3BlYXJtYW5SYW5rVGVzdCBTcGVhcm1hblJobyBTcGVjaWVzRGF0YSBTcGVjaWZpY2l0eUdvYWwgU3BlY3RyYWxMaW5lRGF0YSBTcGVjdHJvZ3JhbSBTcGVjdHJvZ3JhbUFycmF5IFNwZWN1bGFyaXR5IFNwZWVjaFJlY29nbml6ZSBTcGVlY2hTeW50aGVzaXplIFNwZWxsaW5nQ29ycmVjdGlvbiBTcGVsbGluZ0NvcnJlY3Rpb25MaXN0IFNwZWxsaW5nRGljdGlvbmFyaWVzIFNwZWxsaW5nRGljdGlvbmFyaWVzUGF0aCBTcGVsbGluZ09wdGlvbnMgU3BlbGxpbmdTdWdnZXN0aW9uc1BhY2tldCBTcGhlcmUgU3BoZXJlQm94IFNwaGVyZVBvaW50cyBTcGhlcmljYWxCZXNzZWxKIFNwaGVyaWNhbEJlc3NlbFkgU3BoZXJpY2FsSGFua2VsSDEgU3BoZXJpY2FsSGFua2VsSDIgU3BoZXJpY2FsSGFybW9uaWNZIFNwaGVyaWNhbFBsb3QzRCBTcGhlcmljYWxSZWdpb24gU3BoZXJpY2FsU2hlbGwgU3BoZXJvaWRhbEVpZ2VudmFsdWUgU3BoZXJvaWRhbEpvaW5pbmdGYWN0b3IgU3BoZXJvaWRhbFBTIFNwaGVyb2lkYWxQU1ByaW1lIFNwaGVyb2lkYWxRUyBTcGhlcm9pZGFsUVNQcmltZSBTcGhlcm9pZGFsUmFkaWFsRmFjdG9yIFNwaGVyb2lkYWxTMSBTcGhlcm9pZGFsUzFQcmltZSBTcGhlcm9pZGFsUzIgU3BoZXJvaWRhbFMyUHJpbWUgU3BsaWNlIFNwbGljZWREaXN0cmlidXRpb24gU3BsaW5lQ2xvc2VkIFNwbGluZURlZ3JlZSBTcGxpbmVLbm90cyBTcGxpbmVXZWlnaHRzIFNwbGl0IFNwbGl0QnkgU3Bva2VuU3RyaW5nIFNxcnQgU3FydEJveCBTcXJ0Qm94T3B0aW9ucyBTcXVhcmUgU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIFNxdWFyZUZyZWVRIFNxdWFyZUludGVyc2VjdGlvbiBTcXVhcmVNYXRyaXhRIFNxdWFyZVJlcGVhdGluZ0VsZW1lbnQgU3F1YXJlc1IgU3F1YXJlU3Vic2V0IFNxdWFyZVN1YnNldEVxdWFsIFNxdWFyZVN1cGVyc2V0IFNxdWFyZVN1cGVyc2V0RXF1YWwgU3F1YXJlVW5pb24gU3F1YXJlV2F2ZSBTU1NUcmlhbmdsZSBTdGFiaWxpdHlNYXJnaW5zIFN0YWJpbGl0eU1hcmdpbnNTdHlsZSBTdGFibGVEaXN0cmlidXRpb24gU3RhY2sgU3RhY2tCZWdpbiBTdGFja0NvbXBsZXRlIFN0YWNrZWREYXRlTGlzdFBsb3QgU3RhY2tlZExpc3RQbG90IFN0YWNrSW5oaWJpdCBTdGFkaXVtU2hhcGUgU3RhbmRhcmRBdG1vc3BoZXJlRGF0YSBTdGFuZGFyZERldmlhdGlvbiBTdGFuZGFyZERldmlhdGlvbkZpbHRlciBTdGFuZGFyZEZvcm0gU3RhbmRhcmRpemUgU3RhbmRhcmRpemVkIFN0YW5kYXJkT2NlYW5EYXRhIFN0YW5kYnlEaXN0cmlidXRpb24gU3RhciBTdGFyQ2x1c3RlckRhdGEgU3RhckRhdGEgU3RhckdyYXBoIFN0YXJ0QXN5bmNocm9ub3VzVGFzayBTdGFydEV4dGVybmFsU2Vzc2lvbiBTdGFydGluZ1N0ZXBTaXplIFN0YXJ0T2ZMaW5lIFN0YXJ0T2ZTdHJpbmcgU3RhcnRQcm9jZXNzIFN0YXJ0U2NoZWR1bGVkVGFzayBTdGFydHVwU291bmQgU3RhcnRXZWJTZXNzaW9uIFN0YXRlRGltZW5zaW9ucyBTdGF0ZUZlZWRiYWNrR2FpbnMgU3RhdGVPdXRwdXRFc3RpbWF0b3IgU3RhdGVSZXNwb25zZSBTdGF0ZVNwYWNlTW9kZWwgU3RhdGVTcGFjZVJlYWxpemF0aW9uIFN0YXRlU3BhY2VUcmFuc2Zvcm0gU3RhdGVUcmFuc2Zvcm1hdGlvbkxpbmVhcml6ZSBTdGF0aW9uYXJ5RGlzdHJpYnV0aW9uIFN0YXRpb25hcnlXYXZlbGV0UGFja2V0VHJhbnNmb3JtIFN0YXRpb25hcnlXYXZlbGV0VHJhbnNmb3JtIFN0YXR1c0FyZWEgU3RhdHVzQ2VudHJhbGl0eSBTdGVwTW9uaXRvciBTdGVyZW9jaGVtaXN0cnlFbGVtZW50cyBTdGllbHRqZXNHYW1tYSBTdGlybGluZ1MxIFN0aXJsaW5nUzIgU3RvcEFzeW5jaHJvbm91c1Rhc2sgU3RvcHBpbmdQb3dlckRhdGEgU3RvcFNjaGVkdWxlZFRhc2sgU3RyYXRhVmFyaWFibGVzIFN0cmF0b25vdmljaFByb2Nlc3MgU3RyZWFtQ29sb3JGdW5jdGlvbiBTdHJlYW1Db2xvckZ1bmN0aW9uU2NhbGluZyBTdHJlYW1EZW5zaXR5UGxvdCBTdHJlYW1NYXJrZXJzIFN0cmVhbVBsb3QgU3RyZWFtUG9pbnRzIFN0cmVhbVBvc2l0aW9uIFN0cmVhbXMgU3RyZWFtU2NhbGUgU3RyZWFtU3R5bGUgU3RyaW5nIFN0cmluZ0JyZWFrIFN0cmluZ0J5dGVDb3VudCBTdHJpbmdDYXNlcyBTdHJpbmdDb250YWluc1EgU3RyaW5nQ291bnQgU3RyaW5nRGVsZXRlIFN0cmluZ0Ryb3AgU3RyaW5nRW5kc1EgU3RyaW5nRXhwcmVzc2lvbiBTdHJpbmdFeHRyYWN0IFN0cmluZ0Zvcm0gU3RyaW5nRm9ybWF0IFN0cmluZ0ZyZWVRIFN0cmluZ0luc2VydCBTdHJpbmdKb2luIFN0cmluZ0xlbmd0aCBTdHJpbmdNYXRjaFEgU3RyaW5nUGFkTGVmdCBTdHJpbmdQYWRSaWdodCBTdHJpbmdQYXJ0IFN0cmluZ1BhcnRpdGlvbiBTdHJpbmdQb3NpdGlvbiBTdHJpbmdRIFN0cmluZ1JlcGVhdCBTdHJpbmdSZXBsYWNlIFN0cmluZ1JlcGxhY2VMaXN0IFN0cmluZ1JlcGxhY2VQYXJ0IFN0cmluZ1JldmVyc2UgU3RyaW5nUmlmZmxlIFN0cmluZ1JvdGF0ZUxlZnQgU3RyaW5nUm90YXRlUmlnaHQgU3RyaW5nU2tlbGV0b24gU3RyaW5nU3BsaXQgU3RyaW5nU3RhcnRzUSBTdHJpbmdUYWtlIFN0cmluZ1RlbXBsYXRlIFN0cmluZ1RvQnl0ZUFycmF5IFN0cmluZ1RvU3RyZWFtIFN0cmluZ1RyaW0gU3RyaXBCb3hlcyBTdHJpcE9uSW5wdXQgU3RyaXBXcmFwcGVyQm94ZXMgU3Ryb2tlRm9ybSBTdHJ1Y3R1cmFsSW1wb3J0YW5jZSBTdHJ1Y3R1cmVkQXJyYXkgU3RydWN0dXJlZFNlbGVjdGlvbiBTdHJ1dmVIIFN0cnV2ZUwgU3R1YiBTdHVkZW50VERpc3RyaWJ1dGlvbiBTdHlsZSBTdHlsZUJveCBTdHlsZUJveEF1dG9EZWxldGUgU3R5bGVEYXRhIFN0eWxlRGVmaW5pdGlvbnMgU3R5bGVGb3JtIFN0eWxlSGludHMgU3R5bGVLZXlNYXBwaW5nIFN0eWxlTWVudUxpc3RpbmcgU3R5bGVOYW1lRGlhbG9nU2V0dGluZ3MgU3R5bGVOYW1lcyBTdHlsZVByaW50IFN0eWxlU2hlZXRQYXRoIFN1YmRpdmlkZSBTdWJmYWN0b3JpYWwgU3ViZ3JhcGggU3ViTWludXMgU3ViUGx1cyBTdWJyZXN1bHRhbnRQb2x5bm9taWFsUmVtYWluZGVycyBTdWJyZXN1bHRhbnRQb2x5bm9taWFscyBTdWJyZXN1bHRhbnRzIFN1YnNjcmlwdCBTdWJzY3JpcHRCb3ggU3Vic2NyaXB0Qm94T3B0aW9ucyBTdWJzY3JpcHRlZCBTdWJzZXF1ZW5jZXMgU3Vic2V0IFN1YnNldEVxdWFsIFN1YnNldE1hcCBTdWJzZXRRIFN1YnNldHMgU3ViU3RhciBTdWJzdGl0dXRpb25TeXN0ZW0gU3Vic3VwZXJzY3JpcHQgU3Vic3VwZXJzY3JpcHRCb3ggU3Vic3VwZXJzY3JpcHRCb3hPcHRpb25zIFN1YnRyYWN0IFN1YnRyYWN0RnJvbSBTdWJ0cmFjdFNpZGVzIFN1YlZhbHVlcyBTdWNjZWVkcyBTdWNjZWVkc0VxdWFsIFN1Y2NlZWRzU2xhbnRFcXVhbCBTdWNjZWVkc1RpbGRlIFN1Y2Nlc3MgU3VjaFRoYXQgU3VtIFN1bUNvbnZlcmdlbmNlIFN1bW1hdGlvbkxheWVyIFN1bmRheSBTdW5Qb3NpdGlvbiBTdW5yaXNlIFN1bnNldCBTdXBlckRhZ2dlciBTdXBlck1pbnVzIFN1cGVybm92YURhdGEgU3VwZXJQbHVzIFN1cGVyc2NyaXB0IFN1cGVyc2NyaXB0Qm94IFN1cGVyc2NyaXB0Qm94T3B0aW9ucyBTdXBlcnNldCBTdXBlcnNldEVxdWFsIFN1cGVyU3RhciBTdXJkIFN1cmRGb3JtIFN1cmZhY2VBcmVhIFN1cmZhY2VDb2xvciBTdXJmYWNlRGF0YSBTdXJmYWNlR3JhcGhpY3MgU3Vydml2YWxEaXN0cmlidXRpb24gU3Vydml2YWxGdW5jdGlvbiBTdXJ2aXZhbE1vZGVsIFN1cnZpdmFsTW9kZWxGaXQgU3VzcGVuZFBhY2tldCBTdXp1a2lEaXN0cmlidXRpb24gU3V6dWtpR3JvdXBTdXogU3dhdGNoTGVnZW5kIFN3aXRjaCBTeW1ib2wgU3ltYm9sTmFtZSBTeW1sZXRXYXZlbGV0IFN5bW1ldHJpYyBTeW1tZXRyaWNHcm91cCBTeW1tZXRyaWNLZXkgU3ltbWV0cmljTWF0cml4USBTeW1tZXRyaWNQb2x5bm9taWFsIFN5bW1ldHJpY1JlZHVjdGlvbiBTeW1tZXRyaXplIFN5bW1ldHJpemVkQXJyYXkgU3ltbWV0cml6ZWRBcnJheVJ1bGVzIFN5bW1ldHJpemVkRGVwZW5kZW50Q29tcG9uZW50cyBTeW1tZXRyaXplZEluZGVwZW5kZW50Q29tcG9uZW50cyBTeW1tZXRyaXplZFJlcGxhY2VQYXJ0IFN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24gU3luY2hyb25vdXNVcGRhdGluZyBTeW5vbnltcyBTeW50YXggU3ludGF4Rm9ybSBTeW50YXhJbmZvcm1hdGlvbiBTeW50YXhMZW5ndGggU3ludGF4UGFja2V0IFN5bnRheFEgU3ludGhlc2l6ZU1pc3NpbmdWYWx1ZXMgU3lzdGVtRGlhbG9nSW5wdXQgU3lzdGVtRXhjZXB0aW9uIFN5c3RlbUdldCBTeXN0ZW1IZWxwUGF0aCBTeXN0ZW1JbmZvcm1hdGlvbiBTeXN0ZW1JbmZvcm1hdGlvbkRhdGEgU3lzdGVtSW5zdGFsbCBTeXN0ZW1Nb2RlbCBTeXN0ZW1Nb2RlbGVyIFN5c3RlbU1vZGVsRXhhbXBsZXMgU3lzdGVtTW9kZWxMaW5lYXJpemUgU3lzdGVtTW9kZWxQYXJhbWV0cmljU2ltdWxhdGUgU3lzdGVtTW9kZWxQbG90IFN5c3RlbU1vZGVsUHJvZ3Jlc3NSZXBvcnRpbmcgU3lzdGVtTW9kZWxSZWxpYWJpbGl0eSBTeXN0ZW1Nb2RlbHMgU3lzdGVtTW9kZWxTaW11bGF0ZSBTeXN0ZW1Nb2RlbFNpbXVsYXRlU2Vuc2l0aXZpdHkgU3lzdGVtTW9kZWxTaW11bGF0aW9uRGF0YSBTeXN0ZW1PcGVuIFN5c3RlbU9wdGlvbnMgU3lzdGVtUHJvY2Vzc0RhdGEgU3lzdGVtUHJvY2Vzc2VzIFN5c3RlbXNDb25uZWN0aW9uc01vZGVsIFN5c3RlbXNNb2RlbERlbGF5IFN5c3RlbXNNb2RlbERlbGF5QXBwcm94aW1hdGUgU3lzdGVtc01vZGVsRGVsZXRlIFN5c3RlbXNNb2RlbERpbWVuc2lvbnMgU3lzdGVtc01vZGVsRXh0cmFjdCBTeXN0ZW1zTW9kZWxGZWVkYmFja0Nvbm5lY3QgU3lzdGVtc01vZGVsTGFiZWxzIFN5c3RlbXNNb2RlbExpbmVhcml0eSBTeXN0ZW1zTW9kZWxNZXJnZSBTeXN0ZW1zTW9kZWxPcmRlciBTeXN0ZW1zTW9kZWxQYXJhbGxlbENvbm5lY3QgU3lzdGVtc01vZGVsU2VyaWVzQ29ubmVjdCBTeXN0ZW1zTW9kZWxTdGF0ZUZlZWRiYWNrQ29ubmVjdCBTeXN0ZW1zTW9kZWxWZWN0b3JSZWxhdGl2ZU9yZGVycyBTeXN0ZW1TdHViIFN5c3RlbVRlc3QnICtcbiAgICAgICdUYWIgVGFiRmlsbGluZyBUYWJsZSBUYWJsZUFsaWdubWVudHMgVGFibGVEZXB0aCBUYWJsZURpcmVjdGlvbnMgVGFibGVGb3JtIFRhYmxlSGVhZGluZ3MgVGFibGVTcGFjaW5nIFRhYmxlVmlldyBUYWJsZVZpZXdCb3ggVGFibGVWaWV3Qm94QmFja2dyb3VuZCBUYWJsZVZpZXdCb3hPcHRpb25zIFRhYlNwYWNpbmdzIFRhYlZpZXcgVGFiVmlld0JveCBUYWJWaWV3Qm94T3B0aW9ucyBUYWdCb3ggVGFnQm94Tm90ZSBUYWdCb3hPcHRpb25zIFRhZ2dpbmdSdWxlcyBUYWdTZXQgVGFnU2V0RGVsYXllZCBUYWdTdHlsZSBUYWdVbnNldCBUYWtlIFRha2VEcm9wIFRha2VMYXJnZXN0IFRha2VMYXJnZXN0QnkgVGFrZUxpc3QgVGFrZVNtYWxsZXN0IFRha2VTbWFsbGVzdEJ5IFRha2VXaGlsZSBUYWxseSBUYW4gVGFuaCBUYXJnZXREZXZpY2UgVGFyZ2V0RnVuY3Rpb25zIFRhcmdldFN5c3RlbSBUYXJnZXRVbml0cyBUYXNrQWJvcnQgVGFza0V4ZWN1dGUgVGFza09iamVjdCBUYXNrUmVtb3ZlIFRhc2tSZXN1bWUgVGFza3MgVGFza1N1c3BlbmQgVGFza1dhaXQgVGF1dG9sb2d5USBUZWxlZ3JhcGhQcm9jZXNzIFRlbXBsYXRlQXBwbHkgVGVtcGxhdGVBcmdCb3ggVGVtcGxhdGVCb3ggVGVtcGxhdGVCb3hPcHRpb25zIFRlbXBsYXRlRXZhbHVhdGUgVGVtcGxhdGVFeHByZXNzaW9uIFRlbXBsYXRlSWYgVGVtcGxhdGVPYmplY3QgVGVtcGxhdGVTZXF1ZW5jZSBUZW1wbGF0ZVNsb3QgVGVtcGxhdGVTbG90U2VxdWVuY2UgVGVtcGxhdGVVbmV2YWx1YXRlZCBUZW1wbGF0ZVZlcmJhdGltIFRlbXBsYXRlV2l0aCBUZW1wb3JhbERhdGEgVGVtcG9yYWxSZWd1bGFyaXR5IFRlbXBvcmFyeSBUZW1wb3JhcnlWYXJpYWJsZSBUZW5zb3JDb250cmFjdCBUZW5zb3JEaW1lbnNpb25zIFRlbnNvckV4cGFuZCBUZW5zb3JQcm9kdWN0IFRlbnNvclEgVGVuc29yUmFuayBUZW5zb3JSZWR1Y2UgVGVuc29yU3ltbWV0cnkgVGVuc29yVHJhbnNwb3NlIFRlbnNvcldlZGdlIFRlc3RJRCBUZXN0UmVwb3J0IFRlc3RSZXBvcnRPYmplY3QgVGVzdFJlc3VsdE9iamVjdCBUZXRyYWhlZHJvbiBUZXRyYWhlZHJvbkJveCBUZXRyYWhlZHJvbkJveE9wdGlvbnMgVGVYRm9ybSBUZVhTYXZlIFRleHQgVGV4dDNEQm94IFRleHQzREJveE9wdGlvbnMgVGV4dEFsaWdubWVudCBUZXh0QmFuZCBUZXh0Qm91bmRpbmdCb3ggVGV4dEJveCBUZXh0Q2FzZXMgVGV4dENlbGwgVGV4dENsaXBib2FyZFR5cGUgVGV4dENvbnRlbnRzIFRleHREYXRhIFRleHRFbGVtZW50IFRleHRGb3JtIFRleHRHcmlkIFRleHRKdXN0aWZpY2F0aW9uIFRleHRMaW5lIFRleHRQYWNrZXQgVGV4dFBhcmFncmFwaCBUZXh0UG9zaXRpb24gVGV4dFJlY29nbml6ZSBUZXh0U2VhcmNoIFRleHRTZWFyY2hSZXBvcnQgVGV4dFNlbnRlbmNlcyBUZXh0U3RyaW5nIFRleHRTdHJ1Y3R1cmUgVGV4dFN0eWxlIFRleHRUcmFuc2xhdGlvbiBUZXh0dXJlIFRleHR1cmVDb29yZGluYXRlRnVuY3Rpb24gVGV4dHVyZUNvb3JkaW5hdGVTY2FsaW5nIFRleHRXb3JkcyBUaGVyZWZvcmUgVGhlcm1vZHluYW1pY0RhdGEgVGhlcm1vbWV0ZXJHYXVnZSBUaGljayBUaGlja25lc3MgVGhpbiBUaGlubmluZyBUaGlzTGluayBUaG9tcHNvbkdyb3VwVGggVGhyZWFkIFRocmVhZGluZ0xheWVyIFRocmVlSlN5bWJvbCBUaHJlc2hvbGQgVGhyb3VnaCBUaHJvdyBUaHVlTW9yc2UgVGh1bWJuYWlsIFRodXJzZGF5IFRpY2tzIFRpY2tzU3R5bGUgVGlkZURhdGEgVGlsZGUgVGlsZGVFcXVhbCBUaWxkZUZ1bGxFcXVhbCBUaWxkZVRpbGRlIFRpbWVDb25zdHJhaW5lZCBUaW1lQ29uc3RyYWludCBUaW1lRGlyZWN0aW9uIFRpbWVGb3JtYXQgVGltZUdvYWwgVGltZWxpbmVQbG90IFRpbWVPYmplY3QgVGltZU9iamVjdFEgVGltZXMgVGltZXNCeSBUaW1lU2VyaWVzIFRpbWVTZXJpZXNBZ2dyZWdhdGUgVGltZVNlcmllc0ZvcmVjYXN0IFRpbWVTZXJpZXNJbnNlcnQgVGltZVNlcmllc0ludmVydGliaWxpdHkgVGltZVNlcmllc01hcCBUaW1lU2VyaWVzTWFwVGhyZWFkIFRpbWVTZXJpZXNNb2RlbCBUaW1lU2VyaWVzTW9kZWxGaXQgVGltZVNlcmllc1Jlc2FtcGxlIFRpbWVTZXJpZXNSZXNjYWxlIFRpbWVTZXJpZXNTaGlmdCBUaW1lU2VyaWVzVGhyZWFkIFRpbWVTZXJpZXNXaW5kb3cgVGltZVVzZWQgVGltZVZhbHVlIFRpbWVXYXJwaW5nQ29ycmVzcG9uZGVuY2UgVGltZVdhcnBpbmdEaXN0YW5jZSBUaW1lWm9uZSBUaW1lWm9uZUNvbnZlcnQgVGltZVpvbmVPZmZzZXQgVGltaW5nIFRpbnkgVGl0bGVHcm91cGluZyBUaXRzR3JvdXBUIFRvQm94ZXMgVG9DaGFyYWN0ZXJDb2RlIFRvQ29sb3IgVG9Db250aW51b3VzVGltZU1vZGVsIFRvRGF0ZSBUb2RheSBUb0Rpc2NyZXRlVGltZU1vZGVsIFRvRW50aXR5IFRvZXBsaXR6TWF0cml4IFRvRXhwcmVzc2lvbiBUb0ZpbGVOYW1lIFRvZ2V0aGVyIFRvZ2dsZSBUb2dnbGVGYWxzZSBUb2dnbGVyIFRvZ2dsZXJCYXIgVG9nZ2xlckJveCBUb2dnbGVyQm94T3B0aW9ucyBUb0hlbGRFeHByZXNzaW9uIFRvSW52ZXJ0aWJsZVRpbWVTZXJpZXMgVG9rZW5Xb3JkcyBUb2xlcmFuY2UgVG9Mb3dlckNhc2UgVG9tb3Jyb3cgVG9OdW1iZXJGaWVsZCBUb29CaWcgVG9vbHRpcCBUb29sdGlwQm94IFRvb2x0aXBCb3hPcHRpb25zIFRvb2x0aXBEZWxheSBUb29sdGlwU3R5bGUgVG9wIFRvcEhhdFRyYW5zZm9ybSBUb1BvbGFyQ29vcmRpbmF0ZXMgVG9wb2xvZ2ljYWxTb3J0IFRvUmFkaWNhbHMgVG9SdWxlcyBUb1NwaGVyaWNhbENvb3JkaW5hdGVzIFRvU3RyaW5nIFRvdGFsIFRvdGFsSGVpZ2h0IFRvdGFsTGF5ZXIgVG90YWxWYXJpYXRpb25GaWx0ZXIgVG90YWxXaWR0aCBUb3VjaFBvc2l0aW9uIFRvdWNoc2NyZWVuQXV0b1pvb20gVG91Y2hzY3JlZW5Db250cm9sUGxhY2VtZW50IFRvVXBwZXJDYXNlIFRyIFRyYWNlIFRyYWNlQWJvdmUgVHJhY2VBY3Rpb24gVHJhY2VCYWNrd2FyZCBUcmFjZURlcHRoIFRyYWNlRGlhbG9nIFRyYWNlRm9yd2FyZCBUcmFjZUludGVybmFsIFRyYWNlTGV2ZWwgVHJhY2VPZmYgVHJhY2VPbiBUcmFjZU9yaWdpbmFsIFRyYWNlUHJpbnQgVHJhY2VTY2FuIFRyYWNrZWRTeW1ib2xzIFRyYWNraW5nRnVuY3Rpb24gVHJhY3lXaWRvbURpc3RyaWJ1dGlvbiBUcmFkaW5nQ2hhcnQgVHJhZGl0aW9uYWxGb3JtIFRyYWRpdGlvbmFsRnVuY3Rpb25Ob3RhdGlvbiBUcmFkaXRpb25hbE5vdGF0aW9uIFRyYWRpdGlvbmFsT3JkZXIgVHJhaW5pbmdQcm9ncmVzc0NoZWNrcG9pbnRpbmcgVHJhaW5pbmdQcm9ncmVzc0Z1bmN0aW9uIFRyYWluaW5nUHJvZ3Jlc3NNZWFzdXJlbWVudHMgVHJhaW5pbmdQcm9ncmVzc1JlcG9ydGluZyBUcmFpbmluZ1N0b3BwaW5nQ3JpdGVyaW9uIFRyYW5zZmVyRnVuY3Rpb25DYW5jZWwgVHJhbnNmZXJGdW5jdGlvbkV4cGFuZCBUcmFuc2ZlckZ1bmN0aW9uRmFjdG9yIFRyYW5zZmVyRnVuY3Rpb25Nb2RlbCBUcmFuc2ZlckZ1bmN0aW9uUG9sZXMgVHJhbnNmZXJGdW5jdGlvblRyYW5zZm9ybSBUcmFuc2ZlckZ1bmN0aW9uWmVyb3MgVHJhbnNmb3JtYXRpb25DbGFzcyBUcmFuc2Zvcm1hdGlvbkZ1bmN0aW9uIFRyYW5zZm9ybWF0aW9uRnVuY3Rpb25zIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWVkRGlzdHJpYnV0aW9uIFRyYW5zZm9ybWVkRmllbGQgVHJhbnNmb3JtZWRQcm9jZXNzIFRyYW5zZm9ybWVkUmVnaW9uIFRyYW5zaXRpb25EaXJlY3Rpb24gVHJhbnNpdGlvbkR1cmF0aW9uIFRyYW5zaXRpb25FZmZlY3QgVHJhbnNpdGl2ZUNsb3N1cmVHcmFwaCBUcmFuc2l0aXZlUmVkdWN0aW9uR3JhcGggVHJhbnNsYXRlIFRyYW5zbGF0aW9uT3B0aW9ucyBUcmFuc2xhdGlvblRyYW5zZm9ybSBUcmFuc2xpdGVyYXRlIFRyYW5zcGFyZW50IFRyYW5zcGFyZW50Q29sb3IgVHJhbnNwb3NlIFRyYW5zcG9zZUxheWVyIFRyYXBTZWxlY3Rpb24gVHJhdmVsRGlyZWN0aW9ucyBUcmF2ZWxEaXJlY3Rpb25zRGF0YSBUcmF2ZWxEaXN0YW5jZSBUcmF2ZWxEaXN0YW5jZUxpc3QgVHJhdmVsTWV0aG9kIFRyYXZlbFRpbWUgVHJlZUZvcm0gVHJlZUdyYXBoIFRyZWVHcmFwaFEgVHJlZVBsb3QgVHJlbmRTdHlsZSBUcmlhbmdsZSBUcmlhbmdsZUNlbnRlciBUcmlhbmdsZUNvbnN0cnVjdCBUcmlhbmdsZU1lYXN1cmVtZW50IFRyaWFuZ2xlV2F2ZSBUcmlhbmd1bGFyRGlzdHJpYnV0aW9uIFRyaWFuZ3VsYXRlTWVzaCBUcmlnIFRyaWdFeHBhbmQgVHJpZ0ZhY3RvciBUcmlnRmFjdG9yTGlzdCBUcmlnZ2VyIFRyaWdSZWR1Y2UgVHJpZ1RvRXhwIFRyaW1tZWRNZWFuIFRyaW1tZWRWYXJpYW5jZSBUcm9waWNhbFN0b3JtRGF0YSBUcnVlIFRydWVRIFRydW5jYXRlZERpc3RyaWJ1dGlvbiBUcnVuY2F0ZWRQb2x5aGVkcm9uIFRzYWxsaXNRRXhwb25lbnRpYWxEaXN0cmlidXRpb24gVHNhbGxpc1FHYXVzc2lhbkRpc3RyaWJ1dGlvbiBUVGVzdCBUdWJlIFR1YmVCZXppZXJDdXJ2ZUJveCBUdWJlQmV6aWVyQ3VydmVCb3hPcHRpb25zIFR1YmVCb3ggVHViZUJveE9wdGlvbnMgVHViZUJTcGxpbmVDdXJ2ZUJveCBUdWJlQlNwbGluZUN1cnZlQm94T3B0aW9ucyBUdWVzZGF5IFR1a2V5TGFtYmRhRGlzdHJpYnV0aW9uIFR1a2V5V2luZG93IFR1bm5lbERhdGEgVHVwbGVzIFR1cmFuR3JhcGggVHVyaW5nTWFjaGluZSBUdXR0ZVBvbHlub21pYWwgVHdvV2F5UnVsZSBUeXBlZCBUeXBlU3BlY2lmaWVyJyArXG4gICAgICAnVW5hdGVRIFVuY29tcHJlc3MgVW5jb25zdHJhaW5lZFBhcmFtZXRlcnMgVW5kZWZpbmVkIFVuZGVyQmFyIFVuZGVyZmxvdyBVbmRlcmxpbmVkIFVuZGVyb3ZlcnNjcmlwdCBVbmRlcm92ZXJzY3JpcHRCb3ggVW5kZXJvdmVyc2NyaXB0Qm94T3B0aW9ucyBVbmRlcnNjcmlwdCBVbmRlcnNjcmlwdEJveCBVbmRlcnNjcmlwdEJveE9wdGlvbnMgVW5kZXJzZWFGZWF0dXJlRGF0YSBVbmRpcmVjdGVkRWRnZSBVbmRpcmVjdGVkR3JhcGggVW5kaXJlY3RlZEdyYXBoUSBVbmRvT3B0aW9ucyBVbmRvVHJhY2tlZFZhcmlhYmxlcyBVbmVxdWFsIFVuZXF1YWxUbyBVbmV2YWx1YXRlZCBVbmlmb3JtRGlzdHJpYnV0aW9uIFVuaWZvcm1HcmFwaERpc3RyaWJ1dGlvbiBVbmlmb3JtUG9seWhlZHJvbiBVbmlmb3JtU3VtRGlzdHJpYnV0aW9uIFVuaW5zdGFsbCBVbmlvbiBVbmlvblBsdXMgVW5pcXVlIFVuaXRhcnlNYXRyaXhRIFVuaXRCb3ggVW5pdENvbnZlcnQgVW5pdERpbWVuc2lvbnMgVW5pdGl6ZSBVbml0Um9vdFRlc3QgVW5pdFNpbXBsaWZ5IFVuaXRTdGVwIFVuaXRTeXN0ZW0gVW5pdFRyaWFuZ2xlIFVuaXRWZWN0b3IgVW5pdFZlY3RvckxheWVyIFVuaXR5RGltZW5zaW9ucyBVbml2ZXJzZU1vZGVsRGF0YSBVbml2ZXJzaXR5RGF0YSBVbml4VGltZSBVbnByb3RlY3QgVW5yZWdpc3RlckV4dGVybmFsRXZhbHVhdG9yIFVuc2FtZVEgVW5zYXZlZFZhcmlhYmxlcyBVbnNldCBVbnNldFNoYXJlZCBVbnRyYWNrZWRWYXJpYWJsZXMgVXAgVXBBcnJvdyBVcEFycm93QmFyIFVwQXJyb3dEb3duQXJyb3cgVXBkYXRlIFVwZGF0ZUR5bmFtaWNPYmplY3RzIFVwZGF0ZUR5bmFtaWNPYmplY3RzU3luY2hyb25vdXMgVXBkYXRlSW50ZXJ2YWwgVXBkYXRlU2VhcmNoSW5kZXggVXBEb3duQXJyb3cgVXBFcXVpbGlicml1bSBVcHBlckNhc2VRIFVwcGVyTGVmdEFycm93IFVwcGVyUmlnaHRBcnJvdyBVcHBlclRyaWFuZ3VsYXJpemUgVXBwZXJUcmlhbmd1bGFyTWF0cml4USBVcHNhbXBsZSBVcFNldCBVcFNldERlbGF5ZWQgVXBUZWUgVXBUZWVBcnJvdyBVcFRvIFVwVmFsdWVzIFVSTCBVUkxCdWlsZCBVUkxEZWNvZGUgVVJMRGlzcGF0Y2hlciBVUkxEb3dubG9hZCBVUkxEb3dubG9hZFN1Ym1pdCBVUkxFbmNvZGUgVVJMRXhlY3V0ZSBVUkxFeHBhbmQgVVJMRmV0Y2ggVVJMRmV0Y2hBc3luY2hyb25vdXMgVVJMUGFyc2UgVVJMUXVlcnlEZWNvZGUgVVJMUXVlcnlFbmNvZGUgVVJMUmVhZCBVUkxSZXNwb25zZVRpbWUgVVJMU2F2ZSBVUkxTYXZlQXN5bmNocm9ub3VzIFVSTFNob3J0ZW4gVVJMU3VibWl0IFVzZUdyYXBoaWNzUmFuZ2UgVXNlckRlZmluZWRXYXZlbGV0IFVzaW5nIFVzaW5nRnJvbnRFbmQgVXRpbGl0eUZ1bmN0aW9uJyArXG4gICAgICAnVjJHZXQgVmFsZW5jZUVycm9ySGFuZGxpbmcgVmFsaWRhdGlvbkxlbmd0aCBWYWxpZGF0aW9uU2V0IFZhbHVlIFZhbHVlQm94IFZhbHVlQm94T3B0aW9ucyBWYWx1ZURpbWVuc2lvbnMgVmFsdWVGb3JtIFZhbHVlUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uIFZhbHVlUSBWYWx1ZXMgVmFsdWVzRGF0YSBWYXJpYWJsZXMgVmFyaWFuY2UgVmFyaWFuY2VFcXVpdmFsZW5jZVRlc3QgVmFyaWFuY2VFc3RpbWF0b3JGdW5jdGlvbiBWYXJpYW5jZUdhbW1hRGlzdHJpYnV0aW9uIFZhcmlhbmNlVGVzdCBWZWN0b3JBbmdsZSBWZWN0b3JBcm91bmQgVmVjdG9yQ29sb3JGdW5jdGlvbiBWZWN0b3JDb2xvckZ1bmN0aW9uU2NhbGluZyBWZWN0b3JEZW5zaXR5UGxvdCBWZWN0b3JHbHlwaERhdGEgVmVjdG9yR3JlYXRlciBWZWN0b3JHcmVhdGVyRXF1YWwgVmVjdG9yTGVzcyBWZWN0b3JMZXNzRXF1YWwgVmVjdG9yTWFya2VycyBWZWN0b3JQbG90IFZlY3RvclBsb3QzRCBWZWN0b3JQb2ludHMgVmVjdG9yUSBWZWN0b3JzIFZlY3RvclNjYWxlIFZlY3RvclN0eWxlIFZlZSBWZXJiYXRpbSBWZXJib3NlIFZlcmJvc2VDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0IFZlcmlmaWNhdGlvblRlc3QgVmVyaWZ5Q29udmVyZ2VuY2UgVmVyaWZ5RGVyaXZlZEtleSBWZXJpZnlEaWdpdGFsU2lnbmF0dXJlIFZlcmlmeUludGVycHJldGF0aW9uIFZlcmlmeVNlY3VyaXR5Q2VydGlmaWNhdGVzIFZlcmlmeVNvbHV0aW9ucyBWZXJpZnlUZXN0QXNzdW1wdGlvbnMgVmVyc2lvbiBWZXJzaW9uTnVtYmVyIFZlcnRleEFkZCBWZXJ0ZXhDYXBhY2l0eSBWZXJ0ZXhDb2xvcnMgVmVydGV4Q29tcG9uZW50IFZlcnRleENvbm5lY3Rpdml0eSBWZXJ0ZXhDb250cmFjdCBWZXJ0ZXhDb29yZGluYXRlUnVsZXMgVmVydGV4Q29vcmRpbmF0ZXMgVmVydGV4Q29ycmVsYXRpb25TaW1pbGFyaXR5IFZlcnRleENvc2luZVNpbWlsYXJpdHkgVmVydGV4Q291bnQgVmVydGV4Q292ZXJRIFZlcnRleERhdGFDb29yZGluYXRlcyBWZXJ0ZXhEZWdyZWUgVmVydGV4RGVsZXRlIFZlcnRleERpY2VTaW1pbGFyaXR5IFZlcnRleEVjY2VudHJpY2l0eSBWZXJ0ZXhJbkNvbXBvbmVudCBWZXJ0ZXhJbkRlZ3JlZSBWZXJ0ZXhJbmRleCBWZXJ0ZXhKYWNjYXJkU2ltaWxhcml0eSBWZXJ0ZXhMYWJlbGluZyBWZXJ0ZXhMYWJlbHMgVmVydGV4TGFiZWxTdHlsZSBWZXJ0ZXhMaXN0IFZlcnRleE5vcm1hbHMgVmVydGV4T3V0Q29tcG9uZW50IFZlcnRleE91dERlZ3JlZSBWZXJ0ZXhRIFZlcnRleFJlbmRlcmluZ0Z1bmN0aW9uIFZlcnRleFJlcGxhY2UgVmVydGV4U2hhcGUgVmVydGV4U2hhcGVGdW5jdGlvbiBWZXJ0ZXhTaXplIFZlcnRleFN0eWxlIFZlcnRleFRleHR1cmVDb29yZGluYXRlcyBWZXJ0ZXhXZWlnaHQgVmVydGV4V2VpZ2h0ZWRHcmFwaFEgVmVydGljYWwgVmVydGljYWxCYXIgVmVydGljYWxGb3JtIFZlcnRpY2FsR2F1Z2UgVmVydGljYWxTZXBhcmF0b3IgVmVydGljYWxTbGlkZXIgVmVydGljYWxUaWxkZSBWaWV3QW5nbGUgVmlld0NlbnRlciBWaWV3TWF0cml4IFZpZXdQb2ludCBWaWV3UG9pbnRTZWxlY3RvclNldHRpbmdzIFZpZXdQb3J0IFZpZXdQcm9qZWN0aW9uIFZpZXdSYW5nZSBWaWV3VmVjdG9yIFZpZXdWZXJ0aWNhbCBWaXJ0dWFsR3JvdXBEYXRhIFZpc2libGUgVmlzaWJsZUNlbGwgVm9pY2VTdHlsZURhdGEgVm9pZ3REaXN0cmlidXRpb24gVm9sY2Fub0RhdGEgVm9sdW1lIFZvbk1pc2VzRGlzdHJpYnV0aW9uIFZvcm9ub2lNZXNoJyArXG4gICAgICAnV2FpdEFsbCBXYWl0QXN5bmNocm9ub3VzVGFzayBXYWl0TmV4dCBXYWl0VW50aWwgV2FrZWJ5RGlzdHJpYnV0aW9uIFdhbGxlbml1c0h5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIFdhcmluZ1l1bGVEaXN0cmlidXRpb24gV2FycGluZ0NvcnJlc3BvbmRlbmNlIFdhcnBpbmdEaXN0YW5jZSBXYXRlcnNoZWRDb21wb25lbnRzIFdhdHNvblVTcXVhcmVUZXN0IFdhdHRzU3Ryb2dhdHpHcmFwaERpc3RyaWJ1dGlvbiBXYXZlbGV0QmVzdEJhc2lzIFdhdmVsZXRGaWx0ZXJDb2VmZmljaWVudHMgV2F2ZWxldEltYWdlUGxvdCBXYXZlbGV0TGlzdFBsb3QgV2F2ZWxldE1hcEluZGV4ZWQgV2F2ZWxldE1hdHJpeFBsb3QgV2F2ZWxldFBoaSBXYXZlbGV0UHNpIFdhdmVsZXRTY2FsZSBXYXZlbGV0U2NhbG9ncmFtIFdhdmVsZXRUaHJlc2hvbGQgV2Vha2x5Q29ubmVjdGVkQ29tcG9uZW50cyBXZWFrbHlDb25uZWN0ZWRHcmFwaENvbXBvbmVudHMgV2Vha2x5Q29ubmVjdGVkR3JhcGhRIFdlYWtTdGF0aW9uYXJpdHkgV2VhdGhlckRhdGEgV2VhdGhlckZvcmVjYXN0RGF0YSBXZWJBdWRpb1NlYXJjaCBXZWJFbGVtZW50T2JqZWN0IFdlYmVyRSBXZWJFeGVjdXRlIFdlYkltYWdlIFdlYkltYWdlU2VhcmNoIFdlYlNlYXJjaCBXZWJTZXNzaW9uT2JqZWN0IFdlYlNlc3Npb25zIFdlYldpbmRvd09iamVjdCBXZWRnZSBXZWRuZXNkYXkgV2VpYnVsbERpc3RyaWJ1dGlvbiBXZWllcnN0cmFzc0UxIFdlaWVyc3RyYXNzRTIgV2VpZXJzdHJhc3NFMyBXZWllcnN0cmFzc0V0YTEgV2VpZXJzdHJhc3NFdGEyIFdlaWVyc3RyYXNzRXRhMyBXZWllcnN0cmFzc0hhbGZQZXJpb2RzIFdlaWVyc3RyYXNzSGFsZlBlcmlvZFcxIFdlaWVyc3RyYXNzSGFsZlBlcmlvZFcyIFdlaWVyc3RyYXNzSGFsZlBlcmlvZFczIFdlaWVyc3RyYXNzSW52YXJpYW50RzIgV2VpZXJzdHJhc3NJbnZhcmlhbnRHMyBXZWllcnN0cmFzc0ludmFyaWFudHMgV2VpZXJzdHJhc3NQIFdlaWVyc3RyYXNzUFByaW1lIFdlaWVyc3RyYXNzU2lnbWEgV2VpZXJzdHJhc3NaZXRhIFdlaWdodGVkQWRqYWNlbmN5R3JhcGggV2VpZ2h0ZWRBZGphY2VuY3lNYXRyaXggV2VpZ2h0ZWREYXRhIFdlaWdodGVkR3JhcGhRIFdlaWdodHMgV2VsY2hXaW5kb3cgV2hlZWxHcmFwaCBXaGVuRXZlbnQgV2hpY2ggV2hpbGUgV2hpdGUgV2hpdGVOb2lzZVByb2Nlc3MgV2hpdGVQb2ludCBXaGl0ZXNwYWNlIFdoaXRlc3BhY2VDaGFyYWN0ZXIgV2hpdHRha2VyTSBXaGl0dGFrZXJXIFdpZW5lckZpbHRlciBXaWVuZXJQcm9jZXNzIFdpZ25lckQgV2lnbmVyU2VtaWNpcmNsZURpc3RyaWJ1dGlvbiBXaWtpcGVkaWFEYXRhIFdpa2lwZWRpYVNlYXJjaCBXaWxrc1cgV2lsa3NXVGVzdCBXaW5kRGlyZWN0aW9uRGF0YSBXaW5kaW5nQ291bnQgV2luZGluZ1BvbHlnb24gV2luZG93Q2xpY2tTZWxlY3QgV2luZG93RWxlbWVudHMgV2luZG93RmxvYXRpbmcgV2luZG93RnJhbWUgV2luZG93RnJhbWVFbGVtZW50cyBXaW5kb3dNYXJnaW5zIFdpbmRvd01vdmFibGUgV2luZG93T3BhY2l0eSBXaW5kb3dQZXJzaXN0ZW50U3R5bGVzIFdpbmRvd1NlbGVjdGVkIFdpbmRvd1NpemUgV2luZG93U3RhdHVzQXJlYSBXaW5kb3dUaXRsZSBXaW5kb3dUb29sYmFycyBXaW5kb3dXaWR0aCBXaW5kU3BlZWREYXRhIFdpbmRWZWN0b3JEYXRhIFdpbnNvcml6ZWRNZWFuIFdpbnNvcml6ZWRWYXJpYW5jZSBXaXNoYXJ0TWF0cml4RGlzdHJpYnV0aW9uIFdpdGggV29sZnJhbUFscGhhIFdvbGZyYW1BbHBoYURhdGUgV29sZnJhbUFscGhhUXVhbnRpdHkgV29sZnJhbUFscGhhUmVzdWx0IFdvbGZyYW1MYW5ndWFnZURhdGEgV29yZCBXb3JkQm91bmRhcnkgV29yZENoYXJhY3RlciBXb3JkQ2xvdWQgV29yZENvdW50IFdvcmRDb3VudHMgV29yZERhdGEgV29yZERlZmluaXRpb24gV29yZEZyZXF1ZW5jeSBXb3JkRnJlcXVlbmN5RGF0YSBXb3JkTGlzdCBXb3JkT3JpZW50YXRpb24gV29yZFNlYXJjaCBXb3JkU2VsZWN0aW9uRnVuY3Rpb24gV29yZFNlcGFyYXRvcnMgV29yZFNwYWNpbmdzIFdvcmRTdGVtIFdvcmRUcmFuc2xhdGlvbiBXb3JraW5nUHJlY2lzaW9uIFdyYXBBcm91bmQgV3JpdGUgV3JpdGVMaW5lIFdyaXRlU3RyaW5nIFdyb25za2lhbicgK1xuICAgICAgJ1hNTEVsZW1lbnQgWE1MT2JqZWN0IFhNTFRlbXBsYXRlIFhub3IgWG9yIFhZWkNvbG9yJyArXG4gICAgICAnWWVsbG93IFllc3RlcmRheSBZdWxlRGlzc2ltaWxhcml0eScgK1xuICAgICAgJ1plcm5pa2VSIFplcm9TeW1tZXRyaWMgWmVyb1Rlc3QgWmVyb1dpZHRoVGltZXMgWmV0YSBaZXRhWmVybyBaSVBDb2RlRGF0YSBaaXBmRGlzdHJpYnV0aW9uIFpvb21DZW50ZXIgWm9vbUZhY3RvciBaVGVzdCBaVHJhbnNmb3JtJyArXG4gICAgICAnJEFib3J0ZWQgJEFjdGl2YXRpb25Hcm91cElEICRBY3RpdmF0aW9uS2V5ICRBY3RpdmF0aW9uVXNlclJlZ2lzdGVyZWQgJEFkZE9uc0RpcmVjdG9yeSAkQWxsb3dFeHRlcm5hbENoYW5uZWxGdW5jdGlvbnMgJEFzc2VydEZ1bmN0aW9uICRBc3N1bXB0aW9ucyAkQXN5bmNocm9ub3VzVGFzayAkQXVkaW9JbnB1dERldmljZXMgJEF1ZGlvT3V0cHV0RGV2aWNlcyAkQmFzZURpcmVjdG9yeSAkQmF0Y2hJbnB1dCAkQmF0Y2hPdXRwdXQgJEJsb2NrY2hhaW5CYXNlICRCb3hGb3JtcyAkQnl0ZU9yZGVyaW5nICRDYWNoZUJhc2VEaXJlY3RvcnkgJENhbmNlbGVkICRDaGFubmVsQmFzZSAkQ2hhcmFjdGVyRW5jb2RpbmcgJENoYXJhY3RlckVuY29kaW5ncyAkQ2xvdWRCYXNlICRDbG91ZENvbm5lY3RlZCAkQ2xvdWRDcmVkaXRzQXZhaWxhYmxlICRDbG91ZEV2YWx1YXRpb24gJENsb3VkRXhwcmVzc2lvbkJhc2UgJENsb3VkT2JqZWN0TmFtZUZvcm1hdCAkQ2xvdWRPYmplY3RVUkxUeXBlICRDbG91ZFJvb3REaXJlY3RvcnkgJENsb3VkU3ltYm9sQmFzZSAkQ2xvdWRVc2VySUQgJENsb3VkVXNlclVVSUQgJENsb3VkVmVyc2lvbiAkQ2xvdWRWZXJzaW9uTnVtYmVyICRDbG91ZFdvbGZyYW1FbmdpbmVWZXJzaW9uTnVtYmVyICRDb21tYW5kTGluZSAkQ29tcGlsYXRpb25UYXJnZXQgJENvbmRpdGlvbkhvbGQgJENvbmZpZ3VyZWRLZXJuZWxzICRDb250ZXh0ICRDb250ZXh0UGF0aCAkQ29udHJvbEFjdGl2ZVNldHRpbmcgJENvb2tpZXMgJENvb2tpZVN0b3JlICRDcmVhdGlvbkRhdGUgJEN1cnJlbnRMaW5rICRDdXJyZW50VGFzayAkQ3VycmVudFdlYlNlc3Npb24gJERhdGVTdHJpbmdGb3JtYXQgJERlZmF1bHRBdWRpb0lucHV0RGV2aWNlICREZWZhdWx0QXVkaW9PdXRwdXREZXZpY2UgJERlZmF1bHRGb250ICREZWZhdWx0RnJvbnRFbmQgJERlZmF1bHRJbWFnaW5nRGV2aWNlICREZWZhdWx0TG9jYWxCYXNlICREZWZhdWx0TWFpbGJveCAkRGVmYXVsdE5ldHdvcmtJbnRlcmZhY2UgJERlZmF1bHRQYXRoICREaXNwbGF5ICREaXNwbGF5RnVuY3Rpb24gJERpc3RyaWJ1dGVkQ29udGV4dHMgJER5bmFtaWNFdmFsdWF0aW9uICRFY2hvICRFbWJlZENvZGVFbnZpcm9ubWVudHMgJEVtYmVkZGFibGVTZXJ2aWNlcyAkRW50aXR5U3RvcmVzICRFcGlsb2cgJEV2YWx1YXRpb25DbG91ZEJhc2UgJEV2YWx1YXRpb25DbG91ZE9iamVjdCAkRXZhbHVhdGlvbkVudmlyb25tZW50ICRFeHBvcnRGb3JtYXRzICRGYWlsZWQgJEZpbmFuY2lhbERhdGFTb3VyY2UgJEZvbnRGYW1pbGllcyAkRm9ybWF0VHlwZSAkRnJvbnRFbmQgJEZyb250RW5kU2Vzc2lvbiAkR2VvRW50aXR5VHlwZXMgJEdlb0xvY2F0aW9uICRHZW9Mb2NhdGlvbkNpdHkgJEdlb0xvY2F0aW9uQ291bnRyeSAkR2VvTG9jYXRpb25QcmVjaXNpb24gJEdlb0xvY2F0aW9uU291cmNlICRIaXN0b3J5TGVuZ3RoICRIb21lRGlyZWN0b3J5ICRIVE1MRXhwb3J0UnVsZXMgJEhUVFBDb29raWVzICRIVFRQUmVxdWVzdCAkSWdub3JlRU9GICRJbWFnZUZvcm1hdHRpbmdXaWR0aCAkSW1hZ2luZ0RldmljZSAkSW1hZ2luZ0RldmljZXMgJEltcG9ydEZvcm1hdHMgJEluY29taW5nTWFpbFNldHRpbmdzICRJbml0aWFsRGlyZWN0b3J5ICRJbml0aWFsaXphdGlvbiAkSW5pdGlhbGl6YXRpb25Db250ZXh0cyAkSW5wdXQgJElucHV0RmlsZU5hbWUgJElucHV0U3RyZWFtTWV0aG9kcyAkSW5zcGVjdG9yICRJbnN0YWxsYXRpb25EYXRlICRJbnN0YWxsYXRpb25EaXJlY3RvcnkgJEludGVyZmFjZUVudmlyb25tZW50ICRJbnRlcnByZXRlclR5cGVzICRJdGVyYXRpb25MaW1pdCAkS2VybmVsQ291bnQgJEtlcm5lbElEICRMYW5ndWFnZSAkTGF1bmNoRGlyZWN0b3J5ICRMaWJyYXJ5UGF0aCAkTGljZW5zZUV4cGlyYXRpb25EYXRlICRMaWNlbnNlSUQgJExpY2Vuc2VQcm9jZXNzZXMgJExpY2Vuc2VTZXJ2ZXIgJExpY2Vuc2VTdWJwcm9jZXNzZXMgJExpY2Vuc2VUeXBlICRMaW5lICRMaW5rZWQgJExpbmtTdXBwb3J0ZWQgJExvYWRlZEZpbGVzICRMb2NhbEJhc2UgJExvY2FsU3ltYm9sQmFzZSAkTWFjaGluZUFkZHJlc3NlcyAkTWFjaGluZURvbWFpbiAkTWFjaGluZURvbWFpbnMgJE1hY2hpbmVFcHNpbG9uICRNYWNoaW5lSUQgJE1hY2hpbmVOYW1lICRNYWNoaW5lUHJlY2lzaW9uICRNYWNoaW5lVHlwZSAkTWF4RXh0cmFQcmVjaXNpb24gJE1heExpY2Vuc2VQcm9jZXNzZXMgJE1heExpY2Vuc2VTdWJwcm9jZXNzZXMgJE1heE1hY2hpbmVOdW1iZXIgJE1heE51bWJlciAkTWF4UGllY2V3aXNlQ2FzZXMgJE1heFByZWNpc2lvbiAkTWF4Um9vdERlZ3JlZSAkTWVzc2FnZUdyb3VwcyAkTWVzc2FnZUxpc3QgJE1lc3NhZ2VQcmVQcmludCAkTWVzc2FnZXMgJE1pbk1hY2hpbmVOdW1iZXIgJE1pbk51bWJlciAkTWlub3JSZWxlYXNlTnVtYmVyICRNaW5QcmVjaXNpb24gJE1vYmlsZVBob25lICRNb2R1bGVOdW1iZXIgJE5ldHdvcmtDb25uZWN0ZWQgJE5ldHdvcmtJbnRlcmZhY2VzICROZXR3b3JrTGljZW5zZSAkTmV3TWVzc2FnZSAkTmV3U3ltYm9sICROb3RlYm9va3MgJE5vVmFsdWUgJE51bWJlck1hcmtzICRPZmYgJE9wZXJhdGluZ1N5c3RlbSAkT3V0cHV0ICRPdXRwdXRGb3JtcyAkT3V0cHV0U2l6ZUxpbWl0ICRPdXRwdXRTdHJlYW1NZXRob2RzICRQYWNrYWdlcyAkUGFyZW50TGluayAkUGFyZW50UHJvY2Vzc0lEICRQYXNzd29yZEZpbGUgJFBhdGNoTGV2ZWxJRCAkUGF0aCAkUGF0aG5hbWVTZXBhcmF0b3IgJFBlcmZvcm1hbmNlR29hbCAkUGVybWlzc2lvbnMgJFBlcm1pc3Npb25zR3JvdXBCYXNlICRQZXJzaXN0ZW5jZUJhc2UgJFBlcnNpc3RlbmNlUGF0aCAkUGlwZVN1cHBvcnRlZCAkUGxvdFRoZW1lICRQb3N0ICRQcmUgJFByZWZlcmVuY2VzRGlyZWN0b3J5ICRQcmVJbml0aWFsaXphdGlvbiAkUHJlUHJpbnQgJFByZVJlYWQgJFByaW50Rm9ybXMgJFByaW50TGl0ZXJhbCAkUHJpbnRvdXQzRFByZXZpZXdlciAkUHJvY2Vzc0lEICRQcm9jZXNzb3JDb3VudCAkUHJvY2Vzc29yVHlwZSAkUHJvZHVjdEluZm9ybWF0aW9uICRQcm9ncmFtTmFtZSAkUHVibGlzaGVySUQgJFJhbmRvbVN0YXRlICRSZWN1cnNpb25MaW1pdCAkUmVnaXN0ZXJlZERldmljZUNsYXNzZXMgJFJlZ2lzdGVyZWRVc2VyTmFtZSAkUmVsZWFzZU51bWJlciAkUmVxdWVzdGVyQWRkcmVzcyAkUmVxdWVzdGVyV29sZnJhbUlEICRSZXF1ZXN0ZXJXb2xmcmFtVVVJRCAkUmVzb3VyY2VTeXN0ZW1CYXNlICRSb290RGlyZWN0b3J5ICRTY2hlZHVsZWRUYXNrICRTY3JpcHRDb21tYW5kTGluZSAkU2NyaXB0SW5wdXRTdHJpbmcgJFNlY3VyZWRBdXRoZW50aWNhdGlvbktleVRva2VucyAkU2VydmljZUNyZWRpdHNBdmFpbGFibGUgJFNlcnZpY2VzICRTZXNzaW9uSUQgJFNldFBhcmVudExpbmsgJFNoYXJlZEZ1bmN0aW9ucyAkU2hhcmVkVmFyaWFibGVzICRTb3VuZERpc3BsYXkgJFNvdW5kRGlzcGxheUZ1bmN0aW9uICRTb3VyY2VMaW5rICRTU0hBdXRoZW50aWNhdGlvbiAkU3VtbWFyeUJveERhdGFTaXplTGltaXQgJFN1cHByZXNzSW5wdXRGb3JtSGVhZHMgJFN5bmNocm9ub3VzRXZhbHVhdGlvbiAkU3ludGF4SGFuZGxlciAkU3lzdGVtICRTeXN0ZW1DaGFyYWN0ZXJFbmNvZGluZyAkU3lzdGVtSUQgJFN5c3RlbU1lbW9yeSAkU3lzdGVtU2hlbGwgJFN5c3RlbVRpbWVab25lICRTeXN0ZW1Xb3JkTGVuZ3RoICRUZW1wbGF0ZVBhdGggJFRlbXBvcmFyeURpcmVjdG9yeSAkVGVtcG9yYXJ5UHJlZml4ICRUZXN0RmlsZU5hbWUgJFRleHRTdHlsZSAkVGltZWRPdXQgJFRpbWVVbml0ICRUaW1lWm9uZSAkVGltZVpvbmVFbnRpdHkgJFRvcERpcmVjdG9yeSAkVHJhY2VPZmYgJFRyYWNlT24gJFRyYWNlUGF0dGVybiAkVHJhY2VQb3N0QWN0aW9uICRUcmFjZVByZUFjdGlvbiAkVW5pdFN5c3RlbSAkVXJnZW50ICRVc2VyQWRkT25zRGlyZWN0b3J5ICRVc2VyQWdlbnRMYW5ndWFnZXMgJFVzZXJBZ2VudE1hY2hpbmUgJFVzZXJBZ2VudE5hbWUgJFVzZXJBZ2VudE9wZXJhdGluZ1N5c3RlbSAkVXNlckFnZW50U3RyaW5nICRVc2VyQWdlbnRWZXJzaW9uICRVc2VyQmFzZURpcmVjdG9yeSAkVXNlckRvY3VtZW50c0RpcmVjdG9yeSAkVXNlcm5hbWUgJFVzZXJOYW1lICRVc2VyVVJMQmFzZSAkVmVyc2lvbiAkVmVyc2lvbk51bWJlciAkVm9pY2VTdHlsZXMgJFdvbGZyYW1JRCAkV29sZnJhbVVVSUQnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwoXFxcXConLCAnXFxcXCpcXFxcKScsIHtjb250YWluczogWydzZWxmJ119KSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLypcbiAgRm9ybWFsIHN5bnRheCBpcyBub3QgcHVibGlzaGVkLCBoZWxwZnVsIGxpbms6XG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3JuaWxvdmEtbC9tYXRsYWItSW50ZWxsaUotcGx1Z2luL2Jsb2IvbWFzdGVyL3NyYy9tYWluL2dyYW1tYXIvTWF0bGFiLmJuZlxuKi9cbmZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgVFJBTlNQT1NFX1JFID0gJyhcXCd8XFxcXC5cXCcpKyc7XG4gIHZhciBUUkFOU1BPU0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiBUUkFOU1BPU0VfUkUgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYnJlYWsgY2FzZSBjYXRjaCBjbGFzc2RlZiBjb250aW51ZSBlbHNlIGVsc2VpZiBlbmQgZW51bWVyYXRlZCBldmVudHMgZm9yIGZ1bmN0aW9uICcgK1xuICAgICAgICAnZ2xvYmFsIGlmIG1ldGhvZHMgb3RoZXJ3aXNlIHBhcmZvciBwZXJzaXN0ZW50IHByb3BlcnRpZXMgcmV0dXJuIHNwbWQgc3dpdGNoIHRyeSB3aGlsZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3NpbiBzaW5kIHNpbmggYXNpbiBhc2luZCBhc2luaCBjb3MgY29zZCBjb3NoIGFjb3MgYWNvc2QgYWNvc2ggdGFuIHRhbmQgdGFuaCBhdGFuICcgK1xuICAgICAgICAnYXRhbmQgYXRhbjIgYXRhbmggc2VjIHNlY2Qgc2VjaCBhc2VjIGFzZWNkIGFzZWNoIGNzYyBjc2NkIGNzY2ggYWNzYyBhY3NjZCBhY3NjaCBjb3QgJyArXG4gICAgICAgICdjb3RkIGNvdGggYWNvdCBhY290ZCBhY290aCBoeXBvdCBleHAgZXhwbTEgbG9nIGxvZzFwIGxvZzEwIGxvZzIgcG93MiByZWFscG93IHJlYWxsb2cgJyArXG4gICAgICAgICdyZWFsc3FydCBzcXJ0IG50aHJvb3QgbmV4dHBvdzIgYWJzIGFuZ2xlIGNvbXBsZXggY29uaiBpbWFnIHJlYWwgdW53cmFwIGlzcmVhbCAnICtcbiAgICAgICAgJ2NwbHhwYWlyIGZpeCBmbG9vciBjZWlsIHJvdW5kIG1vZCByZW0gc2lnbiBhaXJ5IGJlc3NlbGogYmVzc2VseSBiZXNzZWxoIGJlc3NlbGkgJyArXG4gICAgICAgICdiZXNzZWxrIGJldGEgYmV0YWluYyBiZXRhbG4gZWxsaXBqIGVsbGlwa2UgZXJmIGVyZmMgZXJmY3ggZXJmaW52IGV4cGludCBnYW1tYSAnICtcbiAgICAgICAgJ2dhbW1haW5jIGdhbW1hbG4gcHNpIGxlZ2VuZHJlIGNyb3NzIGRvdCBmYWN0b3IgaXNwcmltZSBwcmltZXMgZ2NkIGxjbSByYXQgcmF0cyBwZXJtcyAnICtcbiAgICAgICAgJ25jaG9vc2VrIGZhY3RvcmlhbCBjYXJ0MnNwaCBjYXJ0MnBvbCBwb2wyY2FydCBzcGgyY2FydCBoc3YycmdiIHJnYjJoc3YgemVyb3Mgb25lcyAnICtcbiAgICAgICAgJ2V5ZSByZXBtYXQgcmFuZCByYW5kbiBsaW5zcGFjZSBsb2dzcGFjZSBmcmVxc3BhY2UgbWVzaGdyaWQgYWNjdW1hcnJheSBzaXplIGxlbmd0aCAnICtcbiAgICAgICAgJ25kaW1zIG51bWVsIGRpc3AgaXNlbXB0eSBpc2VxdWFsIGlzZXF1YWx3aXRoZXF1YWxuYW5zIGNhdCByZXNoYXBlIGRpYWcgYmxrZGlhZyB0cmlsICcgK1xuICAgICAgICAndHJpdSBmbGlwbHIgZmxpcHVkIGZsaXBkaW0gcm90OTAgZmluZCBzdWIyaW5kIGluZDJzdWIgYnN4ZnVuIG5kZ3JpZCBwZXJtdXRlIGlwZXJtdXRlICcgK1xuICAgICAgICAnc2hpZnRkaW0gY2lyY3NoaWZ0IHNxdWVlemUgaXNzY2FsYXIgaXN2ZWN0b3IgYW5zIGVwcyByZWFsbWF4IHJlYWxtaW4gcGkgaSBpbmYgbmFuICcgK1xuICAgICAgICAnaXNuYW4gaXNpbmYgaXNmaW5pdGUgaiB3aHkgY29tcGFuIGdhbGxlcnkgaGFkYW1hcmQgaGFua2VsIGhpbGIgaW52aGlsYiBtYWdpYyBwYXNjYWwgJyArXG4gICAgICAgICdyb3NzZXIgdG9lcGxpdHogdmFuZGVyIHdpbGtpbnNvbiBtYXggbWluIG5hbm1heCBuYW5taW4gbWVhbiBuYW5tZWFuIHR5cGUgdGFibGUgJyArXG4gICAgICAgICdyZWFkdGFibGUgd3JpdGV0YWJsZSBzb3J0cm93cyBzb3J0IGZpZ3VyZSBwbG90IHBsb3QzIHNjYXR0ZXIgc2NhdHRlcjMgY2VsbGZ1biAnICtcbiAgICAgICAgJ2xlZ2VuZCBpbnRlcnNlY3QgaXNtZW1iZXIgcHJvY3J1c3RlcyBob2xkIG51bTJjZWxsICdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcoLy98XCJ8I3wvXFxcXCp8XFxcXHMrL1xcXFx3KyknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXSd9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvdHJ1ZXxmYWxzZS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgc3RhcnRzOiBUUkFOU1BPU0VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2EtekEtWl1bYS16QS1aXzAtOV0qJyArIFRSQU5TUE9TRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7YmVnaW46ICdcXCdcXCcnfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxdfH18XFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAge2JlZ2luOiAnXCJcIid9XG4gICAgICAgIF0sXG4gICAgICAgIHN0YXJ0czogVFJBTlNQT1NFXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXHMqXFxcXCVcXFxce1xcXFxzKiQnLCAnXlxcXFxzKlxcXFwlXFxcXH1cXFxccyokJyksXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwlJywgJyQnKVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9ICdpZiB0aGVuIGVsc2UgZWxzZWlmIGZvciB0aHJ1IGRvIHdoaWxlIHVubGVzcyBzdGVwIGluIGFuZCBvciBub3QnO1xuICB2YXIgTElURVJBTFMgPSAndHJ1ZSBmYWxzZSB1bmtub3duIGluZiBtaW5mIGluZCB1bmQgJWUgJWkgJXBpICVwaGkgJWdhbW1hJztcbiAgdmFyIEJVSUxUSU5fRlVOQ1RJT05TID1cbiAgICAgICAgJyBhYmFzZXAgYWJzIGFic2ludCBhYnNvbHV0ZV9yZWFsX3RpbWUgYWNvcyBhY29zaCBhY290IGFjb3RoIGFjc2MgYWNzY2ggYWN0aXZhdGUnXG4gICAgICArICcgYWRkY29sIGFkZF9lZGdlIGFkZF9lZGdlcyBhZGRtYXRyaWNlcyBhZGRyb3cgYWRkX3ZlcnRleCBhZGRfdmVydGljZXMgYWRqYWNlbmN5X21hdHJpeCdcbiAgICAgICsgJyBhZGpvaW4gYWRqb2ludCBhZiBhZ2QgYWlyeSBhaXJ5X2FpIGFpcnlfYmkgYWlyeV9kYWkgYWlyeV9kYmkgYWxnc3lzIGFsZ190eXBlJ1xuICAgICAgKyAnIGFsaWFzIGFsbHJvb3RzIGFscGhhY2hhcnAgYWxwaGFudW1lcmljcCBhbW9ydGl6YXRpb24gJWFuZCBhbm51aXR5X2Z2J1xuICAgICAgKyAnIGFubnVpdHlfcHYgYW50aWQgYW50aWRpZmYgQW50aURpZmZlcmVuY2UgYXBwZW5kIGFwcGVuZGZpbGUgYXBwbHkgYXBwbHkxIGFwcGx5MidcbiAgICAgICsgJyBhcHBseWIxIGFwcm9wb3MgYXJncyBhcml0X2Ftb3J0aXphdGlvbiBhcml0aG1ldGljIGFyaXRoc3VtIGFycmF5IGFycmF5YXBwbHknXG4gICAgICArICcgYXJyYXlpbmZvIGFycmF5bWFrZSBhcnJheXNldGFwcGx5IGFzY2lpIGFzZWMgYXNlY2ggYXNpbiBhc2luaCBhc2tpbnRlZ2VyJ1xuICAgICAgKyAnIGFza3NpZ24gYXNzb2MgYXNzb2NfbGVnZW5kcmVfcCBhc3NvY19sZWdlbmRyZV9xIGFzc3VtZSBhc3N1bWVfZXh0ZXJuYWxfYnl0ZV9vcmRlcidcbiAgICAgICsgJyBhc3ltcGEgYXQgYXRhbiBhdGFuMiBhdGFuaCBhdGVuc2ltcCBhdG9tIGF0dmFsdWUgYXVnY29lZm1hdHJpeCBhdWdtZW50ZWRfbGFncmFuZ2lhbl9tZXRob2QnXG4gICAgICArICcgYXYgYXZlcmFnZV9kZWdyZWUgYmFja3RyYWNlIGJhcnMgYmFyc3Bsb3QgYmFyc3Bsb3RfZGVzY3JpcHRpb24gYmFzZTY0IGJhc2U2NF9kZWNvZGUnXG4gICAgICArICcgYmFzaGluZGljZXMgYmF0Y2ggYmF0Y2hsb2FkIGJjMiBiZHZhYyBiZWxsbiBiZW5lZml0X2Nvc3QgYmVybiBiZXJucG9seSBiZXJuc3RlaW5fYXBwcm94J1xuICAgICAgKyAnIGJlcm5zdGVpbl9leHBhbmQgYmVybnN0ZWluX3BvbHkgYmVzc2VsIGJlc3NlbF9pIGJlc3NlbF9qIGJlc3NlbF9rIGJlc3NlbF9zaW1wbGlmeSdcbiAgICAgICsgJyBiZXNzZWxfeSBiZXRhIGJldGFfaW5jb21wbGV0ZSBiZXRhX2luY29tcGxldGVfZ2VuZXJhbGl6ZWQgYmV0YV9pbmNvbXBsZXRlX3JlZ3VsYXJpemVkJ1xuICAgICAgKyAnIGJlem91dCBiZmFsbHJvb3RzIGJmZmFjIGJmX2ZpbmRfcm9vdCBiZl9mbWluX2NvYnlsYSBiZmh6ZXRhIGJmbG9hdCBiZmxvYXRwJ1xuICAgICAgKyAnIGJmcHNpIGJmcHNpMCBiZnpldGEgYmljb25uZWN0ZWRfY29tcG9uZW50cyBiaW1ldHJpYyBiaW5vbWlhbCBiaXBhcnRpdGlvbidcbiAgICAgICsgJyBibG9jayBibG9ja21hdHJpeHAgYm9kZV9nYWluIGJvZGVfcGhhc2UgYm90aGNvZWYgYm94IGJveHBsb3QgYm94cGxvdF9kZXNjcmlwdGlvbidcbiAgICAgICsgJyBicmVhayBidWdfcmVwb3J0IGJ1aWxkX2luZm98MTAgYnVpbGRxIGJ1aWxkX3NhbXBsZSBidXJuIGNhYnMgY2FuZm9ybSBjYW50ZW4nXG4gICAgICArICcgY2FyZGluYWxpdHkgY2FyZyBjYXJ0YW4gY2FydGVzaWFuX3Byb2R1Y3QgY2F0Y2ggY2F1Y2h5X21hdHJpeCBjYmZmYWMgY2RmX2Jlcm5vdWxsaSdcbiAgICAgICsgJyBjZGZfYmV0YSBjZGZfYmlub21pYWwgY2RmX2NhdWNoeSBjZGZfY2hpMiBjZGZfY29udGludW91c191bmlmb3JtIGNkZl9kaXNjcmV0ZV91bmlmb3JtJ1xuICAgICAgKyAnIGNkZl9leHAgY2RmX2YgY2RmX2dhbW1hIGNkZl9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBjZGZfZ2VvbWV0cmljIGNkZl9ndW1iZWwnXG4gICAgICArICcgY2RmX2h5cGVyZ2VvbWV0cmljIGNkZl9sYXBsYWNlIGNkZl9sb2dpc3RpYyBjZGZfbG9nbm9ybWFsIGNkZl9uZWdhdGl2ZV9iaW5vbWlhbCdcbiAgICAgICsgJyBjZGZfbm9uY2VudHJhbF9jaGkyIGNkZl9ub25jZW50cmFsX3N0dWRlbnRfdCBjZGZfbm9ybWFsIGNkZl9wYXJldG8gY2RmX3BvaXNzb24nXG4gICAgICArICcgY2RmX3Jhbmtfc3VtIGNkZl9yYXlsZWlnaCBjZGZfc2lnbmVkX3JhbmsgY2RmX3N0dWRlbnRfdCBjZGZfd2VpYnVsbCBjZGlzcGxheSdcbiAgICAgICsgJyBjZWlsaW5nIGNlbnRyYWxfbW9tZW50IGNlcXVhbCBjZXF1YWxpZ25vcmUgY2YgY2ZkaXNyZXAgY2ZleHBhbmQgY2dlb2Rlc2ljJ1xuICAgICAgKyAnIGNncmVhdGVycCBjZ3JlYXRlcnBpZ25vcmUgY2hhbmdlbmFtZSBjaGFuZ2V2YXIgY2hhb3NnYW1lIGNoYXJhdCBjaGFyZnVuIGNoYXJmdW4yJ1xuICAgICAgKyAnIGNoYXJsaXN0IGNoYXJwIGNoYXJwb2x5IGNoZGlyIGNoZWJ5c2hldl90IGNoZWJ5c2hldl91IGNoZWNrZGl2IGNoZWNrX292ZXJsYXBzJ1xuICAgICAgKyAnIGNoaW5lc2UgY2hvbGVza3kgY2hyaXN0b2YgY2hyb21hdGljX2luZGV4IGNocm9tYXRpY19udW1iZXIgY2ludCBjaXJjdWxhbnRfZ3JhcGgnXG4gICAgICArICcgY2xlYXJfZWRnZV93ZWlnaHQgY2xlYXJfcnVsZXMgY2xlYXJfdmVydGV4X2xhYmVsIGNsZWJzY2hfZ29yZGFuIGNsZWJzY2hfZ3JhcGgnXG4gICAgICArICcgY2xlc3NwIGNsZXNzcGlnbm9yZSBjbG9zZSBjbG9zZWZpbGUgY21ldHJpYyBjb2VmZiBjb2VmbWF0cml4IGNvZ3JhZCBjb2wgY29sbGFwc2UnXG4gICAgICArICcgY29sbGVjdHRlcm1zIGNvbHVtbm9wIGNvbHVtbnNwYWNlIGNvbHVtbnN3YXAgY29sdW1udmVjdG9yIGNvbWJpbmF0aW9uIGNvbWJpbmUnXG4gICAgICArICcgY29tcDJwdWkgY29tcGFyZSBjb21wZmlsZSBjb21waWxlIGNvbXBpbGVfZmlsZSBjb21wbGVtZW50X2dyYXBoIGNvbXBsZXRlX2JpcGFydGl0ZV9ncmFwaCdcbiAgICAgICsgJyBjb21wbGV0ZV9ncmFwaCBjb21wbGV4X251bWJlcl9wIGNvbXBvbmVudHMgY29tcG9zZV9mdW5jdGlvbnMgY29uY2FuIGNvbmNhdCdcbiAgICAgICsgJyBjb25qdWdhdGUgY29ubWV0ZGVyaXYgY29ubmVjdGVkX2NvbXBvbmVudHMgY29ubmVjdF92ZXJ0aWNlcyBjb25zIGNvbnN0YW50J1xuICAgICAgKyAnIGNvbnN0YW50cCBjb25zdGl0dWVudCBjb25zdHZhbHVlIGNvbnQycGFydCBjb250ZW50IGNvbnRpbnVvdXNfZnJlcSBjb250b3J0aW9uJ1xuICAgICAgKyAnIGNvbnRvdXJfcGxvdCBjb250cmFjdCBjb250cmFjdF9lZGdlIGNvbnRyYWdyYWQgY29udHJpYl9vZGUgY29udmVydCBjb29yZCdcbiAgICAgICsgJyBjb3B5IGNvcHlfZmlsZSBjb3B5X2dyYXBoIGNvcHlsaXN0IGNvcHltYXRyaXggY29yIGNvcyBjb3NoIGNvdCBjb3RoIGNvdiBjb3YxJ1xuICAgICAgKyAnIGNvdmRpZmYgY292ZWN0IGNvdmVycyBjcmMyNHN1bSBjcmVhdGVfZ3JhcGggY3JlYXRlX2xpc3QgY3NjIGNzY2ggY3NldHVwIGNzcGxpbmUnXG4gICAgICArICcgY3RheWxvciBjdF9jb29yZHN5cyBjdHJhbnNmb3JtIGN0cmFuc3Bvc2UgY3ViZV9ncmFwaCBjdWJvY3RhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIGN1bmxpc3AgY3YgY3ljbGVfZGlncmFwaCBjeWNsZV9ncmFwaCBjeWxpbmRyaWNhbCBkYXlzMzYwIGRibGludCBkZWFjdGl2YXRlJ1xuICAgICAgKyAnIGRlY2xhcmUgZGVjbGFyZV9jb25zdHZhbHVlIGRlY2xhcmVfZGltZW5zaW9ucyBkZWNsYXJlX2Z1bmRhbWVudGFsX2RpbWVuc2lvbnMnXG4gICAgICArICcgZGVjbGFyZV9mdW5kYW1lbnRhbF91bml0cyBkZWNsYXJlX3F0eSBkZWNsYXJlX3RyYW5zbGF0ZWQgZGVjbGFyZV91bml0X2NvbnZlcnNpb24nXG4gICAgICArICcgZGVjbGFyZV91bml0cyBkZWNsYXJlX3dlaWdodHMgZGVjc3ltIGRlZmNvbiBkZWZpbmUgZGVmaW5lX2FsdF9kaXNwbGF5IGRlZmluZV92YXJpYWJsZSdcbiAgICAgICsgJyBkZWZpbnQgZGVmbWF0Y2ggZGVmcnVsZSBkZWZzdHJ1Y3QgZGVmdGF5bG9yIGRlZ3JlZV9zZXF1ZW5jZSBkZWwgZGVsZXRlIGRlbGV0ZW4nXG4gICAgICArICcgZGVsdGEgZGVtbyBkZW1vaXZyZSBkZW5vbSBkZXBlbmRzIGRlcml2ZGVncmVlIGRlcml2bGlzdCBkZXNjcmliZSBkZXNvbHZlJ1xuICAgICAgKyAnIGRldGVybWluYW50IGRmbG9hdCBkZ2F1c3NfYSBkZ2F1c3NfYiBkZ2VldiBkZ2VtbSBkZ2VxcmYgZGdlc3YgZGdlc3ZkIGRpYWcnXG4gICAgICArICcgZGlhZ21hdHJpeCBkaWFnX21hdHJpeCBkaWFnbWF0cml4cCBkaWFtZXRlciBkaWZmIGRpZ2l0Y2hhcnAgZGltYWNzX2V4cG9ydCdcbiAgICAgICsgJyBkaW1hY3NfaW1wb3J0IGRpbWVuc2lvbiBkaW1lbnNpb25sZXNzIGRpbWVuc2lvbnMgZGltZW5zaW9uc19hc19saXN0IGRpcmVjdCdcbiAgICAgICsgJyBkaXJlY3RvcnkgZGlzY3JldGVfZnJlcSBkaXNqb2luIGRpc2pvaW50cCBkaXNvbGF0ZSBkaXNwIGRpc3Bjb24gZGlzcGZvcm0nXG4gICAgICArICcgZGlzcGZ1biBkaXNwSm9yZGFuIGRpc3BsYXkgZGlzcHJ1bGUgZGlzcHRlcm1zIGRpc3RyaWIgZGl2aWRlIGRpdmlzb3JzIGRpdnN1bSdcbiAgICAgICsgJyBka3VtbWVyX20gZGt1bW1lcl91IGRsYW5nZSBkb2RlY2FoZWRyb25fZ3JhcGggZG90cHJvZHVjdCBkb3RzaW1wIGRwYXJ0J1xuICAgICAgKyAnIGRyYXcgZHJhdzJkIGRyYXczZCBkcmF3ZGYgZHJhd19maWxlIGRyYXdfZ3JhcGggZHNjYWxhciBlY2hlbG9uIGVkZ2VfY29sb3JpbmcnXG4gICAgICArICcgZWRnZV9jb25uZWN0aXZpdHkgZWRnZXMgZWlnZW5zX2J5X2phY29iaSBlaWdlbnZhbHVlcyBlaWdlbnZlY3RvcnMgZWlnaHRoJ1xuICAgICAgKyAnIGVpbnN0ZWluIGVpdmFscyBlaXZlY3RzIGVsYXBzZWRfcmVhbF90aW1lIGVsYXBzZWRfcnVuX3RpbWUgZWxlMmNvbXAgZWxlMnBvbHlub21lJ1xuICAgICAgKyAnIGVsZTJwdWkgZWxlbSBlbGVtZW50cCBlbGV2YXRpb25fZ3JpZCBlbGltIGVsaW1fYWxsYnV0IGVsaW1pbmF0ZSBlbGltaW5hdGVfdXNpbmcnXG4gICAgICArICcgZWxsaXBzZSBlbGxpcHRpY19lIGVsbGlwdGljX2VjIGVsbGlwdGljX2V1IGVsbGlwdGljX2YgZWxsaXB0aWNfa2MgZWxsaXB0aWNfcGknXG4gICAgICArICcgZW1hdHJpeCBlbXB0eV9ncmFwaCBlbXB0eXAgZW5kY29ucyBlbnRlcm1hdHJpeCBlbnRlcnRlbnNvciBlbnRpZXIgZXF1YWwgZXF1YWxwJ1xuICAgICAgKyAnIGVxdWl2X2NsYXNzZXMgZXJmIGVyZmMgZXJmX2dlbmVyYWxpemVkIGVyZmkgZXJyY2F0Y2ggZXJyb3IgZXJyb3Jtc2cgZXJyb3JzJ1xuICAgICAgKyAnIGV1bGVyIGV2IGV2YWxfc3RyaW5nIGV2ZW5wIGV2ZXJ5IGV2b2x1dGlvbiBldm9sdXRpb24yZCBldnVuZGlmZiBleGFtcGxlIGV4cCdcbiAgICAgICsgJyBleHBhbmQgZXhwYW5kd3J0IGV4cGFuZHdydF9mYWN0b3JlZCBleHBpbnQgZXhwaW50ZWdyYWxfY2hpIGV4cGludGVncmFsX2NpJ1xuICAgICAgKyAnIGV4cGludGVncmFsX2UgZXhwaW50ZWdyYWxfZTEgZXhwaW50ZWdyYWxfZWkgZXhwaW50ZWdyYWxfZV9zaW1wbGlmeSBleHBpbnRlZ3JhbF9saSdcbiAgICAgICsgJyBleHBpbnRlZ3JhbF9zaGkgZXhwaW50ZWdyYWxfc2kgZXhwbGljaXQgZXhwbG9zZSBleHBvbmVudGlhbGl6ZSBleHByZXNzIGV4cHQnXG4gICAgICArICcgZXhzZWMgZXh0ZGlmZiBleHRyYWN0X2xpbmVhcl9lcXVhdGlvbnMgZXh0cmVtYWxfc3Vic2V0IGV6Z2NkICVmIGY5MCBmYWNzdW0nXG4gICAgICArICcgZmFjdGNvbWIgZmFjdG9yIGZhY3RvcmZhY3N1bSBmYWN0b3JpYWwgZmFjdG9yb3V0IGZhY3RvcnN1bSBmYWN0cyBmYXN0X2NlbnRyYWxfZWxlbWVudHMnXG4gICAgICArICcgZmFzdF9saW5zb2x2ZSBmYXN0dGltZXMgZmVhdHVyZXAgZmVybmZhbGUgZmZ0IGZpYiBmaWJ0b3BoaSBmaWZ0aCBmaWxlbmFtZV9tZXJnZSdcbiAgICAgICsgJyBmaWxlX3NlYXJjaCBmaWxlX3R5cGUgZmlsbGFycmF5IGZpbmRkZSBmaW5kX3Jvb3QgZmluZF9yb290X2FicyBmaW5kX3Jvb3RfZXJyb3InXG4gICAgICArICcgZmluZF9yb290X3JlbCBmaXJzdCBmaXggZmxhdHRlbiBmbGVuZ3RoIGZsb2F0IGZsb2F0bnVtcCBmbG9vciBmbG93ZXJfc25hcmsnXG4gICAgICArICcgZmx1c2ggZmx1c2gxZGVyaXYgZmx1c2hkIGZsdXNobmQgZmx1c2hfb3V0cHV0IGZtaW5fY29ieWxhIGZvcmdldCBmb3J0cmFuJ1xuICAgICAgKyAnIGZvdXJjb3MgZm91cmV4cGFuZCBmb3VyaWVyIGZvdXJpZXJfZWxpbSBmb3VyaW50IGZvdXJpbnRjb3MgZm91cmludHNpbiBmb3Vyc2ltcCdcbiAgICAgICsgJyBmb3Vyc2luIGZvdXJ0aCBmcG9zaXRpb24gZnJhbWVfYnJhY2tldCBmcmVlb2YgZnJlc2hsaW5lIGZyZXNuZWxfYyBmcmVzbmVsX3MnXG4gICAgICArICcgZnJvbV9hZGphY2VuY3lfbWF0cml4IGZydWNodF9ncmFwaCBmdWxsX2xpc3RpZnkgZnVsbG1hcCBmdWxsbWFwbCBmdWxscmF0c2ltcCdcbiAgICAgICsgJyBmdWxscmF0c3Vic3QgZnVsbHNldGlmeSBmdW5jc29sdmUgZnVuZGFtZW50YWxfZGltZW5zaW9ucyBmdW5kYW1lbnRhbF91bml0cydcbiAgICAgICsgJyBmdW5kZWYgZnVubWFrZSBmdW5wIGZ2IGcwIGcxIGdhbW1hIGdhbW1hX2dyZWVrIGdhbW1hX2luY29tcGxldGUgZ2FtbWFfaW5jb21wbGV0ZV9nZW5lcmFsaXplZCdcbiAgICAgICsgJyBnYW1tYV9pbmNvbXBsZXRlX3JlZ3VsYXJpemVkIGdhdXNzIGdhdXNzX2EgZ2F1c3NfYiBnYXVzc3Byb2IgZ2NkIGdjZGV4IGdjZGl2aWRlJ1xuICAgICAgKyAnIGdjZmFjIGdjZmFjdG9yIGdkIGdlbmVyYWxpemVkX2xhbWJlcnRfdyBnZW5mYWN0IGdlbl9sYWd1ZXJyZSBnZW5tYXRyaXggZ2Vuc3ltJ1xuICAgICAgKyAnIGdlb19hbW9ydGl6YXRpb24gZ2VvX2FubnVpdHlfZnYgZ2VvX2FubnVpdHlfcHYgZ2VvbWFwIGdlb21ldHJpYyBnZW9tZXRyaWNfbWVhbidcbiAgICAgICsgJyBnZW9zdW0gZ2V0IGdldGN1cnJlbnRkaXJlY3RvcnkgZ2V0X2VkZ2Vfd2VpZ2h0IGdldGVudiBnZXRfbHVfZmFjdG9ycyBnZXRfb3V0cHV0X3N0cmVhbV9zdHJpbmcnXG4gICAgICArICcgZ2V0X3BpeGVsIGdldF9wbG90X29wdGlvbiBnZXRfdGV4X2Vudmlyb25tZW50IGdldF90ZXhfZW52aXJvbm1lbnRfZGVmYXVsdCdcbiAgICAgICsgJyBnZXRfdmVydGV4X2xhYmVsIGdmYWN0b3IgZ2ZhY3RvcnN1bSBnZ2YgZ2lydGggZ2xvYmFsX3ZhcmlhbmNlcyBnbiBnbnVwbG90X2Nsb3NlJ1xuICAgICAgKyAnIGdudXBsb3RfcmVwbG90IGdudXBsb3RfcmVzZXQgZ251cGxvdF9yZXN0YXJ0IGdudXBsb3Rfc3RhcnQgZ28gR29zcGVyIEdvc3BlclN1bSdcbiAgICAgICsgJyBncjJkIGdyM2QgZ3JhZGVmIGdyYW1zY2htaWR0IGdyYXBoNl9kZWNvZGUgZ3JhcGg2X2VuY29kZSBncmFwaDZfZXhwb3J0IGdyYXBoNl9pbXBvcnQnXG4gICAgICArICcgZ3JhcGhfY2VudGVyIGdyYXBoX2NoYXJwb2x5IGdyYXBoX2VpZ2VudmFsdWVzIGdyYXBoX2Zsb3cgZ3JhcGhfb3JkZXIgZ3JhcGhfcGVyaXBoZXJ5J1xuICAgICAgKyAnIGdyYXBoX3Byb2R1Y3QgZ3JhcGhfc2l6ZSBncmFwaF91bmlvbiBncmVhdF9yaG9tYmljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIGdyZWF0X3Job21iaWN1Ym9jdGFoZWRyb25fZ3JhcGgnXG4gICAgICArICcgZ3JpZF9ncmFwaCBncmluZCBncm9ibmVyX2Jhc2lzIGdyb3R6Y2hfZ3JhcGggaGFtaWx0b25fY3ljbGUgaGFtaWx0b25fcGF0aCdcbiAgICAgICsgJyBoYW5rZWwgaGFua2VsXzEgaGFua2VsXzIgaGFybW9uaWMgaGFybW9uaWNfbWVhbiBoYXYgaGVhd29vZF9ncmFwaCBoZXJtaXRlJ1xuICAgICAgKyAnIGhlc3NpYW4gaGdmcmVkIGhpbGJlcnRtYXAgaGlsYmVydF9tYXRyaXggaGlwb3cgaGlzdG9ncmFtIGhpc3RvZ3JhbV9kZXNjcmlwdGlvbidcbiAgICAgICsgJyBob2RnZSBob3JuZXIgaHlwZXJnZW9tZXRyaWMgaTAgaTEgJWliZXMgaWMxIGljMiBpY19jb252ZXJ0IGljaHIxIGljaHIyIGljb3NhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIGljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIGljdXJ2YXR1cmUgaWRlbnQgaWRlbnRmb3IgaWRlbnRpdHkgaWRpZmYgaWRpbSBpZHVtbXknXG4gICAgICArICcgaWVxbiAlaWYgaWZhY3RvcnMgaWZyYW1lcyBpZnMgaWdjZGV4IGlnZW9kZXNpY19jb29yZHMgaWx0IGltYWdlIGltYWdwYXJ0J1xuICAgICAgKyAnIGltZXRyaWMgaW1wbGljaXQgaW1wbGljaXRfZGVyaXZhdGl2ZSBpbXBsaWNpdF9wbG90IGluZGV4ZWRfdGVuc29yIGluZGljZXMnXG4gICAgICArICcgaW5kdWNlZF9zdWJncmFwaCBpbmZlcmVuY2VwIGluZmVyZW5jZV9yZXN1bHQgaW5maXggaW5mb19kaXNwbGF5IGluaXRfYXRlbnNvcidcbiAgICAgICsgJyBpbml0X2N0ZW5zb3IgaW5fbmVpZ2hib3JzIGlubmVycHJvZHVjdCBpbnBhcnQgaW5wcm9kIGlucnQgaW50ZWdlcnAgaW50ZWdlcl9wYXJ0aXRpb25zJ1xuICAgICAgKyAnIGludGVncmF0ZSBpbnRlcnNlY3QgaW50ZXJzZWN0aW9uIGludGVydmFscCBpbnRvcG9pcyBpbnRvc3VtIGludmFyaWFudDEgaW52YXJpYW50MidcbiAgICAgICsgJyBpbnZlcnNlX2ZmdCBpbnZlcnNlX2phY29iaV9jZCBpbnZlcnNlX2phY29iaV9jbiBpbnZlcnNlX2phY29iaV9jcyBpbnZlcnNlX2phY29iaV9kYydcbiAgICAgICsgJyBpbnZlcnNlX2phY29iaV9kbiBpbnZlcnNlX2phY29iaV9kcyBpbnZlcnNlX2phY29iaV9uYyBpbnZlcnNlX2phY29iaV9uZCBpbnZlcnNlX2phY29iaV9ucydcbiAgICAgICsgJyBpbnZlcnNlX2phY29iaV9zYyBpbnZlcnNlX2phY29iaV9zZCBpbnZlcnNlX2phY29iaV9zbiBpbnZlcnQgaW52ZXJ0X2J5X2Fkam9pbnQnXG4gICAgICArICcgaW52ZXJ0X2J5X2x1IGludl9tb2QgaXJyIGlzIGlzX2JpY29ubmVjdGVkIGlzX2JpcGFydGl0ZSBpc19jb25uZWN0ZWQgaXNfZGlncmFwaCdcbiAgICAgICsgJyBpc19lZGdlX2luX2dyYXBoIGlzX2dyYXBoIGlzX2dyYXBoX29yX2RpZ3JhcGggaXNob3cgaXNfaXNvbW9ycGhpYyBpc29sYXRlJ1xuICAgICAgKyAnIGlzb21vcnBoaXNtIGlzX3BsYW5hciBpc3FydCBpc3JlYWxfcCBpc19zY29ubmVjdGVkIGlzX3RyZWUgaXNfdmVydGV4X2luX2dyYXBoJ1xuICAgICAgKyAnIGl0ZW1zX2luZmVyZW5jZSAlaiBqMCBqMSBqYWNvYmkgamFjb2JpYW4gamFjb2JpX2NkIGphY29iaV9jbiBqYWNvYmlfY3MgamFjb2JpX2RjJ1xuICAgICAgKyAnIGphY29iaV9kbiBqYWNvYmlfZHMgamFjb2JpX25jIGphY29iaV9uZCBqYWNvYmlfbnMgamFjb2JpX3AgamFjb2JpX3NjIGphY29iaV9zZCdcbiAgICAgICsgJyBqYWNvYmlfc24gSkYgam4gam9pbiBqb3JkYW4ganVsaWEganVsaWFfc2V0IGp1bGlhX3NpbiAlayBrZGVscyBrZGVsdGEga2lsbCdcbiAgICAgICsgJyBraWxsY29udGV4dCBrb3N0a2Ega3Jvbl9kZWx0YSBrcm9uZWNrZXJfcHJvZHVjdCBrdW1tZXJfbSBrdW1tZXJfdSBrdXJ0b3NpcydcbiAgICAgICsgJyBrdXJ0b3Npc19iZXJub3VsbGkga3VydG9zaXNfYmV0YSBrdXJ0b3Npc19iaW5vbWlhbCBrdXJ0b3Npc19jaGkyIGt1cnRvc2lzX2NvbnRpbnVvdXNfdW5pZm9ybSdcbiAgICAgICsgJyBrdXJ0b3Npc19kaXNjcmV0ZV91bmlmb3JtIGt1cnRvc2lzX2V4cCBrdXJ0b3Npc19mIGt1cnRvc2lzX2dhbW1hIGt1cnRvc2lzX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlJ1xuICAgICAgKyAnIGt1cnRvc2lzX2dlb21ldHJpYyBrdXJ0b3Npc19ndW1iZWwga3VydG9zaXNfaHlwZXJnZW9tZXRyaWMga3VydG9zaXNfbGFwbGFjZSdcbiAgICAgICsgJyBrdXJ0b3Npc19sb2dpc3RpYyBrdXJ0b3Npc19sb2dub3JtYWwga3VydG9zaXNfbmVnYXRpdmVfYmlub21pYWwga3VydG9zaXNfbm9uY2VudHJhbF9jaGkyJ1xuICAgICAgKyAnIGt1cnRvc2lzX25vbmNlbnRyYWxfc3R1ZGVudF90IGt1cnRvc2lzX25vcm1hbCBrdXJ0b3Npc19wYXJldG8ga3VydG9zaXNfcG9pc3NvbidcbiAgICAgICsgJyBrdXJ0b3Npc19yYXlsZWlnaCBrdXJ0b3Npc19zdHVkZW50X3Qga3VydG9zaXNfd2VpYnVsbCBsYWJlbCBsYWJlbHMgbGFncmFuZ2UnXG4gICAgICArICcgbGFndWVycmUgbGFtYmRhIGxhbWJlcnRfdyBsYXBsYWNlIGxhcGxhY2lhbl9tYXRyaXggbGFzdCBsYmZncyBsYzJrZHQgbGNoYXJwJ1xuICAgICAgKyAnIGxjX2wgbGNtIGxjX3UgbGRlZmludCBsZGlzcCBsZGlzcGxheSBsZWdlbmRyZV9wIGxlZ2VuZHJlX3EgbGVpbnN0ZWluIGxlbmd0aCdcbiAgICAgICsgJyBsZXQgbGV0cnVsZXMgbGV0c2ltcCBsZXZpX2Npdml0YSBsZnJlZW9mIGxndHJlaWxsaXMgbGhzIGxpIGxpZWRpZmYgbGltaXQnXG4gICAgICArICcgTGluZHN0ZWR0IGxpbmVhciBsaW5lYXJpbnRlcnBvbCBsaW5lYXJfcHJvZ3JhbSBsaW5lYXJfcmVncmVzc2lvbiBsaW5lX2dyYXBoJ1xuICAgICAgKyAnIGxpbnNvbHZlIGxpc3RhcnJheSBsaXN0X2NvcnJlbGF0aW9ucyBsaXN0aWZ5IGxpc3RfbWF0cml4X2VudHJpZXMgbGlzdF9uY19tb25vbWlhbHMnXG4gICAgICArICcgbGlzdG9mdGVucyBsaXN0b2Z2YXJzIGxpc3RwIGxtYXggbG1pbiBsb2FkIGxvYWRmaWxlIGxvY2FsIGxvY2F0ZV9tYXRyaXhfZW50cnknXG4gICAgICArICcgbG9nIGxvZ2NvbnRyYWN0IGxvZ19nYW1tYSBsb3BvdyBsb3JlbnR6X2dhdWdlIGxvd2VyY2FzZXAgbHBhcnQgbHJhdHN1YnN0J1xuICAgICAgKyAnIGxyZWR1Y2UgbHJpZW1hbm4gbHNxdWFyZXNfZXN0aW1hdGVzIGxzcXVhcmVzX2VzdGltYXRlc19hcHByb3hpbWF0ZSBsc3F1YXJlc19lc3RpbWF0ZXNfZXhhY3QnXG4gICAgICArICcgbHNxdWFyZXNfbXNlIGxzcXVhcmVzX3Jlc2lkdWFsX21zZSBsc3F1YXJlc19yZXNpZHVhbHMgbHN1bSBsdHJlaWxsaXMgbHVfYmFja3N1YidcbiAgICAgICsgJyBsdWNhcyBsdV9mYWN0b3IgJW0gbWFjcm9leHBhbmQgbWFjcm9leHBhbmQxIG1ha2VfYXJyYXkgbWFrZWJveCBtYWtlZmFjdCBtYWtlZ2FtbWEnXG4gICAgICArICcgbWFrZV9ncmFwaCBtYWtlX2xldmVsX3BpY3R1cmUgbWFrZWxpc3QgbWFrZU9yZGVycyBtYWtlX3BvbHlfY29udGluZW50IG1ha2VfcG9seV9jb3VudHJ5J1xuICAgICAgKyAnIG1ha2VfcG9seWdvbiBtYWtlX3JhbmRvbV9zdGF0ZSBtYWtlX3JnYl9waWN0dXJlIG1ha2VzZXQgbWFrZV9zdHJpbmdfaW5wdXRfc3RyZWFtJ1xuICAgICAgKyAnIG1ha2Vfc3RyaW5nX291dHB1dF9zdHJlYW0gbWFrZV90cmFuc2Zvcm0gbWFuZGVsYnJvdCBtYW5kZWxicm90X3NldCBtYXAgbWFwYXRvbSdcbiAgICAgICsgJyBtYXBsaXN0IG1hdGNoZGVjbGFyZSBtYXRjaGZpeCBtYXRfY29uZCBtYXRfZnVsbHVuYmxvY2tlciBtYXRfZnVuY3Rpb24gbWF0aG1sX2Rpc3BsYXknXG4gICAgICArICcgbWF0X25vcm0gbWF0cml4IG1hdHJpeG1hcCBtYXRyaXhwIG1hdHJpeF9zaXplIG1hdHRyYWNlIG1hdF90cmFjZSBtYXRfdW5ibG9ja2VyJ1xuICAgICAgKyAnIG1heCBtYXhfY2xpcXVlIG1heF9kZWdyZWUgbWF4X2Zsb3cgbWF4aW1pemVfbHAgbWF4X2luZGVwZW5kZW50X3NldCBtYXhfbWF0Y2hpbmcnXG4gICAgICArICcgbWF5YmUgbWQ1c3VtIG1lYW4gbWVhbl9iZXJub3VsbGkgbWVhbl9iZXRhIG1lYW5fYmlub21pYWwgbWVhbl9jaGkyIG1lYW5fY29udGludW91c191bmlmb3JtJ1xuICAgICAgKyAnIG1lYW5fZGV2aWF0aW9uIG1lYW5fZGlzY3JldGVfdW5pZm9ybSBtZWFuX2V4cCBtZWFuX2YgbWVhbl9nYW1tYSBtZWFuX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlJ1xuICAgICAgKyAnIG1lYW5fZ2VvbWV0cmljIG1lYW5fZ3VtYmVsIG1lYW5faHlwZXJnZW9tZXRyaWMgbWVhbl9sYXBsYWNlIG1lYW5fbG9naXN0aWMnXG4gICAgICArICcgbWVhbl9sb2dub3JtYWwgbWVhbl9uZWdhdGl2ZV9iaW5vbWlhbCBtZWFuX25vbmNlbnRyYWxfY2hpMiBtZWFuX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIG1lYW5fbm9ybWFsIG1lYW5fcGFyZXRvIG1lYW5fcG9pc3NvbiBtZWFuX3JheWxlaWdoIG1lYW5fc3R1ZGVudF90IG1lYW5fd2VpYnVsbCdcbiAgICAgICsgJyBtZWRpYW4gbWVkaWFuX2RldmlhdGlvbiBtZW1iZXIgbWVzaCBtZXRyaWNleHBhbmRhbGwgbWdmMV9zaGExIG1pbiBtaW5fZGVncmVlJ1xuICAgICAgKyAnIG1pbl9lZGdlX2N1dCBtaW5mYWN0b3JpYWwgbWluaW1hbFBvbHkgbWluaW1pemVfbHAgbWluaW11bV9zcGFubmluZ190cmVlIG1pbm9yJ1xuICAgICAgKyAnIG1pbnBhY2tfbHNxdWFyZXMgbWlucGFja19zb2x2ZSBtaW5fdmVydGV4X2NvdmVyIG1pbl92ZXJ0ZXhfY3V0IG1rZGlyIG1uZXd0b24nXG4gICAgICArICcgbW9kIG1vZGVfZGVjbGFyZSBtb2RlX2lkZW50aXR5IE1vZGVNYXRyaXggbW9lYml1cyBtb24yc2NodXIgbW9ubyBtb25vbWlhbF9kaW1lbnNpb25zJ1xuICAgICAgKyAnIG11bHRpYmVybnN0ZWluX3BvbHkgbXVsdGlfZGlzcGxheV9mb3JfdGV4aW5mbyBtdWx0aV9lbGVtIG11bHRpbm9taWFsIG11bHRpbm9taWFsX2NvZWZmJ1xuICAgICAgKyAnIG11bHRpX29yYml0IG11bHRpcGxvdF9tb2RlIG11bHRpX3B1aSBtdWx0c3ltIG11bHR0aHJ1IG15Y2llbHNraV9ncmFwaCBuYXJ5J1xuICAgICAgKyAnIG5hdHVyYWxfdW5pdCBuY19kZWdyZWUgbmNleHB0IG5jaGFycG9seSBuZWdhdGl2ZV9waWN0dXJlIG5laWdoYm9ycyBuZXcgbmV3Y29udGV4dCdcbiAgICAgICsgJyBuZXdkZXQgbmV3X2dyYXBoIG5ld2xpbmUgbmV3dG9uIG5ld192YXJpYWJsZSBuZXh0X3ByaW1lIG5pY2VkdW1taWVzIG5pY2VpbmRpY2VzJ1xuICAgICAgKyAnIG5pbnRoIG5vZml4IG5vbmFycmF5IG5vbmNlbnRyYWxfbW9tZW50IG5vbm1ldHJpY2l0eSBub25uZWdpbnRlZ2VycCBub25zY2FsYXJwJ1xuICAgICAgKyAnIG5vbnplcm9hbmRmcmVlb2Ygbm90ZXF1YWwgbm91bmlmeSBucHRldHJhZCBucHYgbnJvb3RzIG50ZXJtcyBudGVybXN0J1xuICAgICAgKyAnIG50aHJvb3QgbnVsbGl0eSBudWxsc3BhY2UgbnVtIG51bWJlcmVkX2JvdW5kYXJpZXMgbnVtYmVycCBudW1iZXJfdG9fb2N0ZXRzJ1xuICAgICAgKyAnIG51bV9kaXN0aW5jdF9wYXJ0aXRpb25zIG51bWVydmFsIG51bWZhY3RvciBudW1fcGFydGl0aW9ucyBudXN1bSBuemV0YSBuemV0YWknXG4gICAgICArICcgbnpldGFyIG9jdGV0c190b19udW1iZXIgb2N0ZXRzX3RvX29pZCBvZGRfZ2lydGggb2RkcCBvZGUyIG9kZV9jaGVjayBvZGVsaW4nXG4gICAgICArICcgb2lkX3RvX29jdGV0cyBvcCBvcGVuYSBvcGVuYV9iaW5hcnkgb3BlbnIgb3BlbnJfYmluYXJ5IG9wZW53IG9wZW53X2JpbmFyeSdcbiAgICAgICsgJyBvcGVyYXRvcnAgb3BzdWJzdCBvcHRpbWl6ZSAlb3Igb3JiaXQgb3JiaXRzIG9yZGVyZ3JlYXQgb3JkZXJncmVhdHAgb3JkZXJsZXNzJ1xuICAgICAgKyAnIG9yZGVybGVzc3Agb3J0aG9nb25hbF9jb21wbGVtZW50IG9ydGhvcG9seV9yZWN1ciBvcnRob3BvbHlfd2VpZ2h0IG91dGVybWFwJ1xuICAgICAgKyAnIG91dF9uZWlnaGJvcnMgb3V0b2Zwb2lzIHBhZGUgcGFyYWJvbGljX2N5bGluZGVyX2QgcGFyYW1ldHJpYyBwYXJhbWV0cmljX3N1cmZhY2UnXG4gICAgICArICcgcGFyZyBwYXJHb3NwZXIgcGFyc2Vfc3RyaW5nIHBhcnNlX3RpbWVkYXRlIHBhcnQgcGFydDJjb250IHBhcnRmcmFjIHBhcnRpdGlvbidcbiAgICAgICsgJyBwYXJ0aXRpb25fc2V0IHBhcnRwb2wgcGF0aF9kaWdyYXBoIHBhdGhfZ3JhcGggcGF0aG5hbWVfZGlyZWN0b3J5IHBhdGhuYW1lX25hbWUnXG4gICAgICArICcgcGF0aG5hbWVfdHlwZSBwZGZfYmVybm91bGxpIHBkZl9iZXRhIHBkZl9iaW5vbWlhbCBwZGZfY2F1Y2h5IHBkZl9jaGkyIHBkZl9jb250aW51b3VzX3VuaWZvcm0nXG4gICAgICArICcgcGRmX2Rpc2NyZXRlX3VuaWZvcm0gcGRmX2V4cCBwZGZfZiBwZGZfZ2FtbWEgcGRmX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlJ1xuICAgICAgKyAnIHBkZl9nZW9tZXRyaWMgcGRmX2d1bWJlbCBwZGZfaHlwZXJnZW9tZXRyaWMgcGRmX2xhcGxhY2UgcGRmX2xvZ2lzdGljIHBkZl9sb2dub3JtYWwnXG4gICAgICArICcgcGRmX25lZ2F0aXZlX2Jpbm9taWFsIHBkZl9ub25jZW50cmFsX2NoaTIgcGRmX25vbmNlbnRyYWxfc3R1ZGVudF90IHBkZl9ub3JtYWwnXG4gICAgICArICcgcGRmX3BhcmV0byBwZGZfcG9pc3NvbiBwZGZfcmFua19zdW0gcGRmX3JheWxlaWdoIHBkZl9zaWduZWRfcmFuayBwZGZfc3R1ZGVudF90J1xuICAgICAgKyAnIHBkZl93ZWlidWxsIHBlYXJzb25fc2tld25lc3MgcGVybWFuZW50IHBlcm11dCBwZXJtdXRhdGlvbiBwZXJtdXRhdGlvbnMgcGV0ZXJzZW5fZ3JhcGgnXG4gICAgICArICcgcGV0cm92IHBpY2thcGFydCBwaWN0dXJlX2VxdWFscCBwaWN0dXJlcCBwaWVjaGFydCBwaWVjaGFydF9kZXNjcmlwdGlvbiBwbGFuYXJfZW1iZWRkaW5nJ1xuICAgICAgKyAnIHBsYXliYWNrIHBsb2cgcGxvdDJkIHBsb3QzZCBwbG90ZGYgcGxvdGVxIHBsc3F1YXJlcyBwb2NoaGFtbWVyIHBvaW50cyBwb2lzZGlmZidcbiAgICAgICsgJyBwb2lzZXhwdCBwb2lzaW50IHBvaXNtYXAgcG9pc3BsdXMgcG9pc3NpbXAgcG9pc3N1YnN0IHBvaXN0aW1lcyBwb2lzdHJpbSBwb2xhcidcbiAgICAgICsgJyBwb2xhcmZvcm0gcG9sYXJ0b3JlY3QgcG9sYXJfdG9feHkgcG9seV9hZGQgcG9seV9idWNoYmVyZ2VyIHBvbHlfYnVjaGJlcmdlcl9jcml0ZXJpb24nXG4gICAgICArICcgcG9seV9jb2xvbl9pZGVhbCBwb2x5X2NvbnRlbnQgcG9seWRlY29tcCBwb2x5X2RlcGVuZHNfcCBwb2x5X2VsaW1pbmF0aW9uX2lkZWFsJ1xuICAgICAgKyAnIHBvbHlfZXhhY3RfZGl2aWRlIHBvbHlfZXhwYW5kIHBvbHlfZXhwdCBwb2x5X2djZCBwb2x5Z29uIHBvbHlfZ3JvYm5lciBwb2x5X2dyb2JuZXJfZXF1YWwnXG4gICAgICArICcgcG9seV9ncm9ibmVyX21lbWJlciBwb2x5X2dyb2JuZXJfc3Vic2V0cCBwb2x5X2lkZWFsX2ludGVyc2VjdGlvbiBwb2x5X2lkZWFsX3BvbHlzYXR1cmF0aW9uJ1xuICAgICAgKyAnIHBvbHlfaWRlYWxfcG9seXNhdHVyYXRpb24xIHBvbHlfaWRlYWxfc2F0dXJhdGlvbiBwb2x5X2lkZWFsX3NhdHVyYXRpb24xIHBvbHlfbGNtJ1xuICAgICAgKyAnIHBvbHlfbWluaW1pemF0aW9uIHBvbHltb2QgcG9seV9tdWx0aXBseSBwb2x5bm9tZTJlbGUgcG9seW5vbWlhbHAgcG9seV9ub3JtYWxfZm9ybSdcbiAgICAgICsgJyBwb2x5X25vcm1hbGl6ZSBwb2x5X25vcm1hbGl6ZV9saXN0IHBvbHlfcG9seXNhdHVyYXRpb25fZXh0ZW5zaW9uIHBvbHlfcHJpbWl0aXZlX3BhcnQnXG4gICAgICArICcgcG9seV9wc2V1ZG9fZGl2aWRlIHBvbHlfcmVkdWNlZF9ncm9ibmVyIHBvbHlfcmVkdWN0aW9uIHBvbHlfc2F0dXJhdGlvbl9leHRlbnNpb24nXG4gICAgICArICcgcG9seV9zX3BvbHlub21pYWwgcG9seV9zdWJ0cmFjdCBwb2x5dG9jb21wYW5pb24gcG9wIHBvc3RmaXggcG90ZW50aWFsIHBvd2VyX21vZCdcbiAgICAgICsgJyBwb3dlcnNlcmllcyBwb3dlcnNldCBwcmVmaXggcHJldl9wcmltZSBwcmltZXAgcHJpbWVzIHByaW5jaXBhbF9jb21wb25lbnRzJ1xuICAgICAgKyAnIHByaW50IHByaW50ZiBwcmludGZpbGUgcHJpbnRfZ3JhcGggcHJpbnRwb2lzIHByaW50cHJvcHMgcHJvZHJhYyBwcm9kdWN0IHByb3BlcnRpZXMnXG4gICAgICArICcgcHJvcHZhcnMgcHNpIHBzdWJzdCBwdHJpYW5ndWxhcml6ZSBwdWkgcHVpMmNvbXAgcHVpMmVsZSBwdWkycG9seW5vbWUgcHVpX2RpcmVjdCdcbiAgICAgICsgJyBwdWlyZWR1YyBwdXNoIHB1dCBwdiBxcHV0IHFyYW5nZSBxdHkgcXVhZF9jb250cm9sIHF1YWRfcWFnIHF1YWRfcWFnaSBxdWFkX3FhZ3AnXG4gICAgICArICcgcXVhZF9xYWdzIHF1YWRfcWF3YyBxdWFkX3Fhd2YgcXVhZF9xYXdvIHF1YWRfcWF3cyBxdWFkcmlsYXRlcmFsIHF1YW50aWxlJ1xuICAgICAgKyAnIHF1YW50aWxlX2Jlcm5vdWxsaSBxdWFudGlsZV9iZXRhIHF1YW50aWxlX2Jpbm9taWFsIHF1YW50aWxlX2NhdWNoeSBxdWFudGlsZV9jaGkyJ1xuICAgICAgKyAnIHF1YW50aWxlX2NvbnRpbnVvdXNfdW5pZm9ybSBxdWFudGlsZV9kaXNjcmV0ZV91bmlmb3JtIHF1YW50aWxlX2V4cCBxdWFudGlsZV9mJ1xuICAgICAgKyAnIHF1YW50aWxlX2dhbW1hIHF1YW50aWxlX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHF1YW50aWxlX2dlb21ldHJpYyBxdWFudGlsZV9ndW1iZWwnXG4gICAgICArICcgcXVhbnRpbGVfaHlwZXJnZW9tZXRyaWMgcXVhbnRpbGVfbGFwbGFjZSBxdWFudGlsZV9sb2dpc3RpYyBxdWFudGlsZV9sb2dub3JtYWwnXG4gICAgICArICcgcXVhbnRpbGVfbmVnYXRpdmVfYmlub21pYWwgcXVhbnRpbGVfbm9uY2VudHJhbF9jaGkyIHF1YW50aWxlX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIHF1YW50aWxlX25vcm1hbCBxdWFudGlsZV9wYXJldG8gcXVhbnRpbGVfcG9pc3NvbiBxdWFudGlsZV9yYXlsZWlnaCBxdWFudGlsZV9zdHVkZW50X3QnXG4gICAgICArICcgcXVhbnRpbGVfd2VpYnVsbCBxdWFydGlsZV9za2V3bmVzcyBxdWl0IHF1bml0IHF1b3RpZW50IHJhY2FoX3YgcmFjYWhfdyByYWRjYW4nXG4gICAgICArICcgcmFkaXVzIHJhbmRvbSByYW5kb21fYmVybm91bGxpIHJhbmRvbV9iZXRhIHJhbmRvbV9iaW5vbWlhbCByYW5kb21fYmlwYXJ0aXRlX2dyYXBoJ1xuICAgICAgKyAnIHJhbmRvbV9jYXVjaHkgcmFuZG9tX2NoaTIgcmFuZG9tX2NvbnRpbnVvdXNfdW5pZm9ybSByYW5kb21fZGlncmFwaCByYW5kb21fZGlzY3JldGVfdW5pZm9ybSdcbiAgICAgICsgJyByYW5kb21fZXhwIHJhbmRvbV9mIHJhbmRvbV9nYW1tYSByYW5kb21fZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgcmFuZG9tX2dlb21ldHJpYydcbiAgICAgICsgJyByYW5kb21fZ3JhcGggcmFuZG9tX2dyYXBoMSByYW5kb21fZ3VtYmVsIHJhbmRvbV9oeXBlcmdlb21ldHJpYyByYW5kb21fbGFwbGFjZSdcbiAgICAgICsgJyByYW5kb21fbG9naXN0aWMgcmFuZG9tX2xvZ25vcm1hbCByYW5kb21fbmVnYXRpdmVfYmlub21pYWwgcmFuZG9tX25ldHdvcmsnXG4gICAgICArICcgcmFuZG9tX25vbmNlbnRyYWxfY2hpMiByYW5kb21fbm9uY2VudHJhbF9zdHVkZW50X3QgcmFuZG9tX25vcm1hbCByYW5kb21fcGFyZXRvJ1xuICAgICAgKyAnIHJhbmRvbV9wZXJtdXRhdGlvbiByYW5kb21fcG9pc3NvbiByYW5kb21fcmF5bGVpZ2ggcmFuZG9tX3JlZ3VsYXJfZ3JhcGggcmFuZG9tX3N0dWRlbnRfdCdcbiAgICAgICsgJyByYW5kb21fdG91cm5hbWVudCByYW5kb21fdHJlZSByYW5kb21fd2VpYnVsbCByYW5nZSByYW5rIHJhdCByYXRjb2VmIHJhdGRlbm9tJ1xuICAgICAgKyAnIHJhdGRpZmYgcmF0ZGlzcmVwIHJhdGV4cGFuZCByYXRpbnRlcnBvbCByYXRpb25hbCByYXRpb25hbGl6ZSByYXRudW1lciByYXRudW1wJ1xuICAgICAgKyAnIHJhdHAgcmF0c2ltcCByYXRzdWJzdCByYXR2YXJzIHJhdHdlaWdodCByZWFkIHJlYWRfYXJyYXkgcmVhZF9iaW5hcnlfYXJyYXknXG4gICAgICArICcgcmVhZF9iaW5hcnlfbGlzdCByZWFkX2JpbmFyeV9tYXRyaXggcmVhZGJ5dGUgcmVhZGNoYXIgcmVhZF9oYXNoZWRfYXJyYXkgcmVhZGxpbmUnXG4gICAgICArICcgcmVhZF9saXN0IHJlYWRfbWF0cml4IHJlYWRfbmVzdGVkX2xpc3QgcmVhZG9ubHkgcmVhZF94cG0gcmVhbF9pbWFncGFydF90b19jb25qdWdhdGUnXG4gICAgICArICcgcmVhbHBhcnQgcmVhbHJvb3RzIHJlYXJyYXkgcmVjdGFuZ2xlIHJlY3Rmb3JtIHJlY3Rmb3JtX2xvZ19pZl9jb25zdGFudCByZWN0dG9wb2xhcidcbiAgICAgICsgJyByZWRpZmYgcmVkdWNlX2NvbnN0cyByZWR1Y2Vfb3JkZXIgcmVnaW9uIHJlZ2lvbl9ib3VuZGFyaWVzIHJlZ2lvbl9ib3VuZGFyaWVzX3BsdXMnXG4gICAgICArICcgcmVtIHJlbWFpbmRlciByZW1hcnJheSByZW1ib3ggcmVtY29tcHMgcmVtY29uIHJlbWNvb3JkIHJlbWZ1biByZW1mdW5jdGlvbidcbiAgICAgICsgJyByZW1sZXQgcmVtb3ZlIHJlbW92ZV9jb25zdHZhbHVlIHJlbW92ZV9kaW1lbnNpb25zIHJlbW92ZV9lZGdlIHJlbW92ZV9mdW5kYW1lbnRhbF9kaW1lbnNpb25zJ1xuICAgICAgKyAnIHJlbW92ZV9mdW5kYW1lbnRhbF91bml0cyByZW1vdmVfcGxvdF9vcHRpb24gcmVtb3ZlX3ZlcnRleCByZW1wYXJ0IHJlbXJ1bGUnXG4gICAgICArICcgcmVtc3ltIHJlbXZhbHVlIHJlbmFtZSByZW5hbWVfZmlsZSByZXNldCByZXNldF9kaXNwbGF5cyByZXNpZHVlIHJlc29sdmFudGUnXG4gICAgICArICcgcmVzb2x2YW50ZV9hbHRlcm5lZTEgcmVzb2x2YW50ZV9iaXBhcnRpdGUgcmVzb2x2YW50ZV9kaWVkcmFsZSByZXNvbHZhbnRlX2tsZWluJ1xuICAgICAgKyAnIHJlc29sdmFudGVfa2xlaW4zIHJlc29sdmFudGVfcHJvZHVpdF9zeW0gcmVzb2x2YW50ZV91bml0YWlyZSByZXNvbHZhbnRlX3ZpZXJlcidcbiAgICAgICsgJyByZXN0IHJlc3VsdGFudCByZXR1cm4gcmV2ZWFsIHJldmVyc2UgcmV2ZXJ0IHJldmVydDIgcmdiMmxldmVsIHJocyByaWNjaSByaWVtYW5uJ1xuICAgICAgKyAnIHJpbnZhcmlhbnQgcmlzY2ggcmsgcm1kaXIgcm5jb21iaW5lIHJvbWJlcmcgcm9vbSByb290c2NvbnRyYWN0IHJvdW5kIHJvdydcbiAgICAgICsgJyByb3dvcCByb3dzd2FwIHJyZWR1Y2UgcnVuX3Rlc3RzdWl0ZSAlcyBzYXZlIHNhdmluZyBzY2FsYXJwIHNjYWxlZF9iZXNzZWxfaSdcbiAgICAgICsgJyBzY2FsZWRfYmVzc2VsX2kwIHNjYWxlZF9iZXNzZWxfaTEgc2NhbGVmYWN0b3JzIHNjYW5tYXAgc2NhdHRlcnBsb3Qgc2NhdHRlcnBsb3RfZGVzY3JpcHRpb24nXG4gICAgICArICcgc2NlbmUgc2NodXIyY29tcCBzY29uY2F0IHNjb3B5IHNjc2ltcCBzY3VydmF0dXJlIHNkb3duY2FzZSBzZWMgc2VjaCBzZWNvbmQnXG4gICAgICArICcgc2VxdWFsIHNlcXVhbGlnbm9yZSBzZXRfYWx0X2Rpc3BsYXkgc2V0ZGlmZmVyZW5jZSBzZXRfZHJhd19kZWZhdWx0cyBzZXRfZWRnZV93ZWlnaHQnXG4gICAgICArICcgc2V0ZWxteCBzZXRlcXVhbHAgc2V0aWZ5IHNldHAgc2V0X3BhcnRpdGlvbnMgc2V0X3Bsb3Rfb3B0aW9uIHNldF9wcm9tcHQgc2V0X3JhbmRvbV9zdGF0ZSdcbiAgICAgICsgJyBzZXRfdGV4X2Vudmlyb25tZW50IHNldF90ZXhfZW52aXJvbm1lbnRfZGVmYXVsdCBzZXR1bml0cyBzZXR1cF9hdXRvbG9hZCBzZXRfdXBfZG90X3NpbXBsaWZpY2F0aW9ucydcbiAgICAgICsgJyBzZXRfdmVydGV4X2xhYmVsIHNldmVudGggc2V4cGxvZGUgc2Ygc2hhMXN1bSBzaGEyNTZzdW0gc2hvcnRlc3RfcGF0aCBzaG9ydGVzdF93ZWlnaHRlZF9wYXRoJ1xuICAgICAgKyAnIHNob3cgc2hvd2NvbXBzIHNob3dyYXR2YXJzIHNpZXJwaW5za2lhbGUgc2llcnBpbnNraW1hcCBzaWduIHNpZ251bSBzaW1pbGFyaXR5dHJhbnNmb3JtJ1xuICAgICAgKyAnIHNpbXBfaW5lcXVhbGl0eSBzaW1wbGlmeV9zdW0gc2ltcGxvZGUgc2ltcG1ldGRlcml2IHNpbXRyYW4gc2luIHNpbmggc2luc2VydCdcbiAgICAgICsgJyBzaW52ZXJ0Y2FzZSBzaXh0aCBza2V3bmVzcyBza2V3bmVzc19iZXJub3VsbGkgc2tld25lc3NfYmV0YSBza2V3bmVzc19iaW5vbWlhbCdcbiAgICAgICsgJyBza2V3bmVzc19jaGkyIHNrZXduZXNzX2NvbnRpbnVvdXNfdW5pZm9ybSBza2V3bmVzc19kaXNjcmV0ZV91bmlmb3JtIHNrZXduZXNzX2V4cCdcbiAgICAgICsgJyBza2V3bmVzc19mIHNrZXduZXNzX2dhbW1hIHNrZXduZXNzX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHNrZXduZXNzX2dlb21ldHJpYydcbiAgICAgICsgJyBza2V3bmVzc19ndW1iZWwgc2tld25lc3NfaHlwZXJnZW9tZXRyaWMgc2tld25lc3NfbGFwbGFjZSBza2V3bmVzc19sb2dpc3RpYydcbiAgICAgICsgJyBza2V3bmVzc19sb2dub3JtYWwgc2tld25lc3NfbmVnYXRpdmVfYmlub21pYWwgc2tld25lc3Nfbm9uY2VudHJhbF9jaGkyIHNrZXduZXNzX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIHNrZXduZXNzX25vcm1hbCBza2V3bmVzc19wYXJldG8gc2tld25lc3NfcG9pc3NvbiBza2V3bmVzc19yYXlsZWlnaCBza2V3bmVzc19zdHVkZW50X3QnXG4gICAgICArICcgc2tld25lc3Nfd2VpYnVsbCBzbGVuZ3RoIHNtYWtlIHNtYWxsX3Job21iaWNvc2lkb2RlY2FoZWRyb25fZ3JhcGggc21hbGxfcmhvbWJpY3Vib2N0YWhlZHJvbl9ncmFwaCdcbiAgICAgICsgJyBzbWF4IHNtaW4gc21pc21hdGNoIHNub3dtYXAgc251Yl9jdWJlX2dyYXBoIHNudWJfZG9kZWNhaGVkcm9uX2dyYXBoIHNvbHZlJ1xuICAgICAgKyAnIHNvbHZlX3JlYyBzb2x2ZV9yZWNfcmF0IHNvbWUgc29tcmFjIHNvcnQgc3BhcnNlNl9kZWNvZGUgc3BhcnNlNl9lbmNvZGUgc3BhcnNlNl9leHBvcnQnXG4gICAgICArICcgc3BhcnNlNl9pbXBvcnQgc3BlY2ludCBzcGhlcmljYWwgc3BoZXJpY2FsX2Jlc3NlbF9qIHNwaGVyaWNhbF9iZXNzZWxfeSBzcGhlcmljYWxfaGFua2VsMSdcbiAgICAgICsgJyBzcGhlcmljYWxfaGFua2VsMiBzcGhlcmljYWxfaGFybW9uaWMgc3BoZXJpY2FsX3RvX3h5eiBzcGxpY2Ugc3BsaXQgc3Bvc2l0aW9uJ1xuICAgICAgKyAnIHNwcmludCBzcWZyIHNxcnQgc3FydGRlbmVzdCBzcmVtb3ZlIHNyZW1vdmVmaXJzdCBzcmV2ZXJzZSBzc2VhcmNoIHNzb3J0IHNzdGF0dXMnXG4gICAgICArICcgc3N1YnN0IHNzdWJzdGZpcnN0IHN0YWlyY2FzZSBzdGFuZGFyZGl6ZSBzdGFuZGFyZGl6ZV9pbnZlcnNlX3RyaWcgc3RhcnBsb3QnXG4gICAgICArICcgc3RhcnBsb3RfZGVzY3JpcHRpb24gc3RhdHVzIHN0ZCBzdGQxIHN0ZF9iZXJub3VsbGkgc3RkX2JldGEgc3RkX2Jpbm9taWFsJ1xuICAgICAgKyAnIHN0ZF9jaGkyIHN0ZF9jb250aW51b3VzX3VuaWZvcm0gc3RkX2Rpc2NyZXRlX3VuaWZvcm0gc3RkX2V4cCBzdGRfZiBzdGRfZ2FtbWEnXG4gICAgICArICcgc3RkX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHN0ZF9nZW9tZXRyaWMgc3RkX2d1bWJlbCBzdGRfaHlwZXJnZW9tZXRyaWMgc3RkX2xhcGxhY2UnXG4gICAgICArICcgc3RkX2xvZ2lzdGljIHN0ZF9sb2dub3JtYWwgc3RkX25lZ2F0aXZlX2Jpbm9taWFsIHN0ZF9ub25jZW50cmFsX2NoaTIgc3RkX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIHN0ZF9ub3JtYWwgc3RkX3BhcmV0byBzdGRfcG9pc3NvbiBzdGRfcmF5bGVpZ2ggc3RkX3N0dWRlbnRfdCBzdGRfd2VpYnVsbCdcbiAgICAgICsgJyBzdGVtcGxvdCBzdGlybGluZyBzdGlybGluZzEgc3RpcmxpbmcyIHN0cmltIHN0cmltbCBzdHJpbXIgc3RyaW5nIHN0cmluZ291dCdcbiAgICAgICsgJyBzdHJpbmdwIHN0cm9uZ19jb21wb25lbnRzIHN0cnV2ZV9oIHN0cnV2ZV9sIHN1YmxpcyBzdWJsaXN0IHN1Ymxpc3RfaW5kaWNlcydcbiAgICAgICsgJyBzdWJtYXRyaXggc3Vic2FtcGxlIHN1YnNldCBzdWJzZXRwIHN1YnN0IHN1YnN0aW5wYXJ0IHN1YnN0X3BhcmFsbGVsIHN1YnN0cGFydCdcbiAgICAgICsgJyBzdWJzdHJpbmcgc3VidmFyIHN1YnZhcnAgc3VtIHN1bWNvbnRyYWN0IHN1bW1hbmRfdG9fcmVjIHN1cGNhc2Ugc3VwY29udGV4dCdcbiAgICAgICsgJyBzeW1ib2xwIHN5bW1kaWZmZXJlbmNlIHN5bW1ldHJpY3Agc3lzdGVtIHRha2VfY2hhbm5lbCB0YWtlX2luZmVyZW5jZSB0YW4nXG4gICAgICArICcgdGFuaCB0YXlsb3IgdGF5bG9yaW5mbyB0YXlsb3JwIHRheWxvcl9zaW1wbGlmaWVyIHRheXRvcmF0IHRjbF9vdXRwdXQgdGNvbnRyYWN0J1xuICAgICAgKyAnIHRlbGxyYXQgdGVsbHNpbXAgdGVsbHNpbXBhZnRlciB0ZW50ZXggdGVudGggdGVzdF9tZWFuIHRlc3RfbWVhbnNfZGlmZmVyZW5jZSdcbiAgICAgICsgJyB0ZXN0X25vcm1hbGl0eSB0ZXN0X3Byb3BvcnRpb24gdGVzdF9wcm9wb3J0aW9uc19kaWZmZXJlbmNlIHRlc3RfcmFua19zdW0nXG4gICAgICArICcgdGVzdF9zaWduIHRlc3Rfc2lnbmVkX3JhbmsgdGVzdF92YXJpYW5jZSB0ZXN0X3ZhcmlhbmNlX3JhdGlvIHRleCB0ZXgxIHRleF9kaXNwbGF5J1xuICAgICAgKyAnIHRleHB1dCAldGggdGhpcmQgdGhyb3cgdGltZSB0aW1lZGF0ZSB0aW1lciB0aW1lcl9pbmZvIHRsZGVmaW50IHRsaW1pdCB0b2RkX2NveGV0ZXInXG4gICAgICArICcgdG9lcGxpdHogdG9rZW5zIHRvX2xpc3AgdG9wb2xvZ2ljYWxfc29ydCB0b19wb2x5IHRvX3BvbHlfc29sdmUgdG90YWxkaXNyZXAnXG4gICAgICArICcgdG90YWxmb3VyaWVyIHRvdGllbnQgdHBhcnRwb2wgdHJhY2UgdHJhY2VtYXRyaXggdHJhY2Vfb3B0aW9ucyB0cmFuc2Zvcm1fc2FtcGxlJ1xuICAgICAgKyAnIHRyYW5zbGF0ZSB0cmFuc2xhdGVfZmlsZSB0cmFuc3Bvc2UgdHJlZWZhbGUgdHJlZV9yZWR1Y2UgdHJlaWxsaXMgdHJlaW5hdCdcbiAgICAgICsgJyB0cmlhbmdsZSB0cmlhbmd1bGFyaXplIHRyaWdleHBhbmQgdHJpZ3JhdCB0cmlncmVkdWNlIHRyaWdzaW1wIHRydW5jIHRydW5jYXRlJ1xuICAgICAgKyAnIHRydW5jYXRlZF9jdWJlX2dyYXBoIHRydW5jYXRlZF9kb2RlY2FoZWRyb25fZ3JhcGggdHJ1bmNhdGVkX2ljb3NhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIHRydW5jYXRlZF90ZXRyYWhlZHJvbl9ncmFwaCB0cl93YXJuaW5nc19nZXQgdHViZSB0dXR0ZV9ncmFwaCB1ZWl2ZWN0cyB1Zm9yZ2V0J1xuICAgICAgKyAnIHVsdHJhc3BoZXJpY2FsIHVuZGVybHlpbmdfZ3JhcGggdW5kaWZmIHVuaW9uIHVuaXF1ZSB1bml0ZWlnZW52ZWN0b3JzIHVuaXRwJ1xuICAgICAgKyAnIHVuaXRzIHVuaXRfc3RlcCB1bml0dmVjdG9yIHVub3JkZXIgdW5zdW0gdW50ZWxscmF0IHVudGltZXInXG4gICAgICArICcgdW50cmFjZSB1cHBlcmNhc2VwIHVyaWNjaSB1cmllbWFubiB1dmVjdCB2YW5kZXJtb25kZV9tYXRyaXggdmFyIHZhcjEgdmFyX2Jlcm5vdWxsaSdcbiAgICAgICsgJyB2YXJfYmV0YSB2YXJfYmlub21pYWwgdmFyX2NoaTIgdmFyX2NvbnRpbnVvdXNfdW5pZm9ybSB2YXJfZGlzY3JldGVfdW5pZm9ybSdcbiAgICAgICsgJyB2YXJfZXhwIHZhcl9mIHZhcl9nYW1tYSB2YXJfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgdmFyX2dlb21ldHJpYyB2YXJfZ3VtYmVsJ1xuICAgICAgKyAnIHZhcl9oeXBlcmdlb21ldHJpYyB2YXJfbGFwbGFjZSB2YXJfbG9naXN0aWMgdmFyX2xvZ25vcm1hbCB2YXJfbmVnYXRpdmVfYmlub21pYWwnXG4gICAgICArICcgdmFyX25vbmNlbnRyYWxfY2hpMiB2YXJfbm9uY2VudHJhbF9zdHVkZW50X3QgdmFyX25vcm1hbCB2YXJfcGFyZXRvIHZhcl9wb2lzc29uJ1xuICAgICAgKyAnIHZhcl9yYXlsZWlnaCB2YXJfc3R1ZGVudF90IHZhcl93ZWlidWxsIHZlY3RvciB2ZWN0b3Jwb3RlbnRpYWwgdmVjdG9yc2ltcCdcbiAgICAgICsgJyB2ZXJiaWZ5IHZlcnMgdmVydGV4X2NvbG9yaW5nIHZlcnRleF9jb25uZWN0aXZpdHkgdmVydGV4X2RlZ3JlZSB2ZXJ0ZXhfZGlzdGFuY2UnXG4gICAgICArICcgdmVydGV4X2VjY2VudHJpY2l0eSB2ZXJ0ZXhfaW5fZGVncmVlIHZlcnRleF9vdXRfZGVncmVlIHZlcnRpY2VzIHZlcnRpY2VzX3RvX2N5Y2xlJ1xuICAgICAgKyAnIHZlcnRpY2VzX3RvX3BhdGggJXcgd2V5bCB3aGVlbF9ncmFwaCB3aWVuZXJfaW5kZXggd2lnbmVyXzNqIHdpZ25lcl82aidcbiAgICAgICsgJyB3aWduZXJfOWogd2l0aF9zdGRvdXQgd3JpdGVfYmluYXJ5X2RhdGEgd3JpdGVieXRlIHdyaXRlX2RhdGEgd3JpdGVmaWxlIHdyb25za2lhbidcbiAgICAgICsgJyB4cmVkdWNlIHh0aHJ1ICV5IFplaWxiZXJnZXIgemVyb2VxdWl2IHplcm9mb3IgemVyb21hdHJpeCB6ZXJvbWF0cml4cCB6ZXRhJ1xuICAgICAgKyAnIHpnZWV2IHpoZWV2IHpsYW5nZSB6bl9hZGRfdGFibGUgem5fY2FybWljaGFlbF9sYW1iZGEgem5fY2hhcmFjdGVyaXN0aWNfZmFjdG9ycydcbiAgICAgICsgJyB6bl9kZXRlcm1pbmFudCB6bl9mYWN0b3JfZ2VuZXJhdG9ycyB6bl9pbnZlcnRfYnlfbHUgem5fbG9nIHpuX211bHRfdGFibGUnXG4gICAgICArICcgYWJzYm94Y2hhciBhY3RpdmVjb250ZXh0cyBhZGFwdF9kZXB0aCBhZGRpdGl2ZSBhZGltIGFmb3JtIGFsZ2VicmFpYydcbiAgICAgICsgJyBhbGdlcHNpbG9uIGFsZ2V4YWN0IGFsaWFzZXMgYWxsYnV0IGFsbF9kb3RzaW1wX2Rlbm9tcyBhbGxvY2F0aW9uIGFsbHN5bSBhbHBoYWJldGljJ1xuICAgICAgKyAnIGFuaW1hdGlvbiBhbnRpc3ltbWV0cmljIGFycmF5cyBhc2tleHAgYXNzdW1lX3BvcyBhc3N1bWVfcG9zX3ByZWQgYXNzdW1lc2NhbGFyJ1xuICAgICAgKyAnIGFzeW1ib2wgYXRvbWdyYWQgYXRyaWcxIGF4ZXMgYXhpc18zZCBheGlzX2JvdHRvbSBheGlzX2xlZnQgYXhpc19yaWdodCBheGlzX3RvcCdcbiAgICAgICsgJyBhemltdXRoIGJhY2tncm91bmQgYmFja2dyb3VuZF9jb2xvciBiYWNrc3Vic3QgYmVybGVmYWN0IGJlcm5zdGVpbl9leHBsaWNpdCdcbiAgICAgICsgJyBiZXNzZWxleHBhbmQgYmV0YV9hcmdzX3N1bV90b19pbnRlZ2VyIGJldGFfZXhwYW5kIGJmdG9yYXQgYmZ0cnVuYyBiaW5kdGVzdCdcbiAgICAgICsgJyBib3JkZXIgYm91bmRhcmllc19hcnJheSBib3ggYm94Y2hhciBicmVha3VwICVjIGNhcHBpbmcgY2F1Y2h5c3VtIGNicmFuZ2UnXG4gICAgICArICcgY2J0aWNzIGNlbnRlciBjZmxlbmd0aCBjZnJhbWVfZmxhZyBjbm9ubWV0X2ZsYWcgY29sb3IgY29sb3JfYmFyIGNvbG9yX2Jhcl90aWNzJ1xuICAgICAgKyAnIGNvbG9yYm94IGNvbHVtbnMgY29tbXV0YXRpdmUgY29tcGxleCBjb25lIGNvbnRleHQgY29udGV4dHMgY29udG91ciBjb250b3VyX2xldmVscydcbiAgICAgICsgJyBjb3NucGlmbGFnIGN0YXlwb3YgY3RheXB0IGN0YXlzd2l0Y2ggY3RheXZhciBjdF9jb29yZHMgY3RvcnNpb25fZmxhZyBjdHJnc2ltcCdcbiAgICAgICsgJyBjdWJlIGN1cnJlbnRfbGV0X3J1bGVfcGFja2FnZSBjeWxpbmRlciBkYXRhX2ZpbGVfbmFtZSBkZWJ1Z21vZGUgZGVjcmVhc2luZydcbiAgICAgICsgJyBkZWZhdWx0X2xldF9ydWxlX3BhY2thZ2UgZGVsYXkgZGVwZW5kZW5jaWVzIGRlcml2YWJicmV2IGRlcml2c3Vic3QgZGV0b3V0J1xuICAgICAgKyAnIGRpYWdtZXRyaWMgZGlmZiBkaW0gZGltZW5zaW9ucyBkaXNwZmxhZyBkaXNwbGF5MmR8MTAgZGlzcGxheV9mb3JtYXRfaW50ZXJuYWwnXG4gICAgICArICcgZGlzdHJpYnV0ZV9vdmVyIGRvYWxsbXhvcHMgZG9tYWluIGRvbXhleHB0IGRvbXhteG9wcyBkb214bmN0aW1lcyBkb250ZmFjdG9yJ1xuICAgICAgKyAnIGRvc2NteG9wcyBkb3NjbXhwbHVzIGRvdDBuc2NzaW1wIGRvdDBzaW1wIGRvdDFzaW1wIGRvdGFzc29jIGRvdGNvbnN0cnVsZXMnXG4gICAgICArICcgZG90ZGlzdHJpYiBkb3RleHB0c2ltcCBkb3RpZGVudCBkb3RzY3J1bGVzIGRyYXdfZ3JhcGhfcHJvZ3JhbSBkcmF3X3JlYWxwYXJ0J1xuICAgICAgKyAnIGVkZ2VfY29sb3IgZWRnZV9jb2xvcmluZyBlZGdlX3BhcnRpdGlvbiBlZGdlX3R5cGUgZWRnZV93aWR0aCAlZWRpc3BmbGFnJ1xuICAgICAgKyAnIGVsZXZhdGlvbiAlZW1vZGUgZW5kcGhpIGVuZHRoZXRhIGVuZ2luZWVyaW5nX2Zvcm1hdF9mbG9hdHMgZW5oYW5jZWQzZCAlZW51bWVyJ1xuICAgICAgKyAnIGVwc2lsb25fbHAgZXJmZmxhZyBlcmZfcmVwcmVzZW50YXRpb24gZXJyb3Jtc2cgZXJyb3Jfc2l6ZSBlcnJvcl9zeW1zIGVycm9yX3R5cGUnXG4gICAgICArICcgJWVfdG9fbnVtbG9nIGV2YWwgZXZlbiBldmVuZnVuIGV2ZmxhZyBldmZ1biBldl9wb2ludCBleHBhbmR3cnRfZGVub20gZXhwaW50ZXhwYW5kJ1xuICAgICAgKyAnIGV4cGludHJlcCBleHBvbiBleHBvcCBleHB0ZGlzcGZsYWcgZXhwdGlzb2xhdGUgZXhwdHN1YnN0IGZhY2V4cGFuZCBmYWNzdW1fY29tYmluZSdcbiAgICAgICsgJyBmYWN0bGltIGZhY3RvcmZsYWcgZmFjdG9yaWFsX2V4cGFuZCBmYWN0b3JzX29ubHkgZmIgZmVhdHVyZSBmZWF0dXJlcydcbiAgICAgICsgJyBmaWxlX25hbWUgZmlsZV9vdXRwdXRfYXBwZW5kIGZpbGVfc2VhcmNoX2RlbW8gZmlsZV9zZWFyY2hfbGlzcCBmaWxlX3NlYXJjaF9tYXhpbWF8MTAnXG4gICAgICArICcgZmlsZV9zZWFyY2hfdGVzdHMgZmlsZV9zZWFyY2hfdXNhZ2UgZmlsZV90eXBlX2xpc3AgZmlsZV90eXBlX21heGltYXwxMCBmaWxsX2NvbG9yJ1xuICAgICAgKyAnIGZpbGxfZGVuc2l0eSBmaWxsZWRfZnVuYyBmaXhlZF92ZXJ0aWNlcyBmbGlwZmxhZyBmbG9hdDJiZiBmb250IGZvbnRfc2l6ZSdcbiAgICAgICsgJyBmb3J0aW5kZW50IGZvcnRzcGFjZXMgZnBwcmVjIGZwcHJpbnRwcmVjIGZ1bmN0aW9ucyBnYW1tYV9leHBhbmQgZ2FtbWFsaW0nXG4gICAgICArICcgZ2RldCBnZW5pbmRleCBnZW5zdW1udW0gR0dGQ0ZNQVggR0dGSU5GSU5JVFkgZ2xvYmFsc29sdmUgZ251cGxvdF9jb21tYW5kJ1xuICAgICAgKyAnIGdudXBsb3RfY3VydmVfc3R5bGVzIGdudXBsb3RfY3VydmVfdGl0bGVzIGdudXBsb3RfZGVmYXVsdF90ZXJtX2NvbW1hbmQgZ251cGxvdF9kdW1iX3Rlcm1fY29tbWFuZCdcbiAgICAgICsgJyBnbnVwbG90X2ZpbGVfYXJncyBnbnVwbG90X2ZpbGVfbmFtZSBnbnVwbG90X291dF9maWxlIGdudXBsb3RfcGRmX3Rlcm1fY29tbWFuZCdcbiAgICAgICsgJyBnbnVwbG90X3BtM2QgZ251cGxvdF9wbmdfdGVybV9jb21tYW5kIGdudXBsb3RfcG9zdGFtYmxlIGdudXBsb3RfcHJlYW1ibGUnXG4gICAgICArICcgZ251cGxvdF9wc190ZXJtX2NvbW1hbmQgZ251cGxvdF9zdmdfdGVybV9jb21tYW5kIGdudXBsb3RfdGVybSBnbnVwbG90X3ZpZXdfYXJncydcbiAgICAgICsgJyBHb3NwZXJfaW5fWmVpbGJlcmdlciBncmFkZWZzIGdyaWQgZ3JpZDJkIGdyaW5kIGhhbGZhbmdsZXMgaGVhZF9hbmdsZSBoZWFkX2JvdGgnXG4gICAgICArICcgaGVhZF9sZW5ndGggaGVhZF90eXBlIGhlaWdodCBoeXBlcmdlb21ldHJpY19yZXByZXNlbnRhdGlvbiAlaWFyZ3MgaWJhc2UnXG4gICAgICArICcgaWNjMSBpY2MyIGljb3VudGVyIGlkdW1teXggaWVxbnByaW50IGlmYiBpZmMxIGlmYzIgaWZnIGlmZ2kgaWZyIGlmcmFtZV9icmFja2V0X2Zvcm0nXG4gICAgICArICcgaWZyaSBpZ2Vvd2VkZ2VfZmxhZyBpa3QxIGlrdDIgaW1hZ2luYXJ5IGluY2hhciBpbmNyZWFzaW5nIGluZmV2YWwnXG4gICAgICArICcgaW5maW5pdHkgaW5mbGFnIGluZm9saXN0cyBpbm0gaW5tYzEgaW5tYzIgaW50YW5hbHlzaXMgaW50ZWdlciBpbnRlZ2VydmFsdWVkJ1xuICAgICAgKyAnIGludGVncmF0ZV91c2Vfcm9vdHNvZiBpbnRlZ3JhdGlvbl9jb25zdGFudCBpbnRlZ3JhdGlvbl9jb25zdGFudF9jb3VudGVyIGludGVycG9sYXRlX2NvbG9yJ1xuICAgICAgKyAnIGludGZhY2xpbSBpcF9ncmlkIGlwX2dyaWRfaW4gaXJyYXRpb25hbCBpc29sYXRlX3dydF90aW1lcyBpdGVyYXRpb25zIGl0cidcbiAgICAgICsgJyBqdWxpYV9wYXJhbWV0ZXIgJWsxICVrMiBrZWVwZmxvYXQga2V5IGtleV9wb3Mga2ludmFyaWFudCBrdCBsYWJlbCBsYWJlbF9hbGlnbm1lbnQnXG4gICAgICArICcgbGFiZWxfb3JpZW50YXRpb24gbGFiZWxzIGxhc3NvY2lhdGl2ZSBsYmZnc19uY29ycmVjdGlvbnMgbGJmZ3NfbmZldmFsX21heCdcbiAgICAgICsgJyBsZWZ0anVzdCBsZWdlbmQgbGV0cmF0IGxldF9ydWxlX3BhY2thZ2VzIGxmZyBsZyBsaG9zcGl0YWxsaW0gbGltc3Vic3QgbGluZWFyJ1xuICAgICAgKyAnIGxpbmVhcl9zb2x2ZXIgbGluZWNoYXIgbGluZWx8MTAgbGluZW51bSBsaW5lX3R5cGUgbGluZXdpZHRoIGxpbmVfd2lkdGggbGluc29sdmVfcGFyYW1zJ1xuICAgICAgKyAnIGxpbnNvbHZld2FybiBsaXNwZGlzcCBsaXN0YXJpdGggbGlzdGNvbnN0dmFycyBsaXN0ZHVtbXl2YXJzIGxteGNoYXIgbG9hZF9wYXRobmFtZSdcbiAgICAgICsgJyBsb2FkcHJpbnQgbG9nYWJzIGxvZ2FyYyBsb2djYiBsb2djb25jb2VmZnAgbG9nZXhwYW5kIGxvZ25lZ2ludCBsb2dzaW1wIGxvZ3gnXG4gICAgICArICcgbG9neF9zZWNvbmRhcnkgbG9neSBsb2d5X3NlY29uZGFyeSBsb2d6IGxyaWVtIG0xcGJyYW5jaCBtYWNyb2V4cGFuc2lvbiBtYWNyb3MnXG4gICAgICArICcgbWFpbnZhciBtYW51YWxfZGVtbyBtYXBlcnJvciBtYXBwcmludCBtYXRyaXhfZWxlbWVudF9hZGQgbWF0cml4X2VsZW1lbnRfbXVsdCdcbiAgICAgICsgJyBtYXRyaXhfZWxlbWVudF90cmFuc3Bvc2UgbWF4YXBwbHlkZXB0aCBtYXhhcHBseWhlaWdodCBtYXhpbWFfdGVtcGRpcnwxMCBtYXhpbWFfdXNlcmRpcnwxMCdcbiAgICAgICsgJyBtYXhuZWdleCBNQVhfT1JEIG1heHBvc2V4IG1heHBzaWZyYWNkZW5vbSBtYXhwc2lmcmFjbnVtIG1heHBzaW5lZ2ludCBtYXhwc2lwb3NpbnQnXG4gICAgICArICcgbWF4dGF5b3JkZXIgbWVzaF9saW5lc19jb2xvciBtZXRob2QgbW9kX2JpZ19wcmltZSBtb2RlX2NoZWNrX2Vycm9ycCdcbiAgICAgICsgJyBtb2RlX2NoZWNrcCBtb2RlX2NoZWNrX3dhcm5wIG1vZF90ZXN0IG1vZF90aHJlc2hvbGQgbW9kdWxhcl9saW5lYXJfc29sdmVyJ1xuICAgICAgKyAnIG1vZHVsdXMgbXVsdGlwbGljYXRpdmUgbXVsdGlwbGljaXRpZXMgbXlvcHRpb25zIG5hcnkgbmVnZGlzdHJpYiBuZWdzdW1kaXNwZmxhZydcbiAgICAgICsgJyBuZXdsaW5lIG5ld3RvbmVwc2lsb24gbmV3dG9ubWF4aXRlciBuZXh0bGF5ZXJmYWN0b3IgbmljZWluZGljZXNwcmVmIG5tIG5tYydcbiAgICAgICsgJyBub2V2YWwgbm9sYWJlbHMgbm9uZWdhdGl2ZV9scCBub25pbnRlZ2VyIG5vbnNjYWxhciBub3VuIG5vdW5kaXNwIG5vdW5zIG5wJ1xuICAgICAgKyAnIG5waSBudGlja3MgbnRyaWcgbnVtZXIgbnVtZXJfcGJyYW5jaCBvYmFzZSBvZGQgb2RkZnVuIG9wYWNpdHkgb3Bwcm9wZXJ0aWVzJ1xuICAgICAgKyAnIG9wc3Vic3Qgb3B0aW1wcmVmaXggb3B0aW9uc2V0IG9yaWVudGF0aW9uIG9yaWdpbiBvcnRob3BvbHlfcmV0dXJuc19pbnRlcnZhbHMnXG4gICAgICArICcgb3V0YXRpdmUgb3V0Y2hhciBwYWNrYWdlZmlsZSBwYWxldHRlIHBhcnRzd2l0Y2ggcGRmX2ZpbGUgcGZlZm9ybWF0IHBoaXJlc29sdXRpb24nXG4gICAgICArICcgJXBpYXJncyBwaWVjZSBwaXZvdF9jb3VudF9zeCBwaXZvdF9tYXhfc3ggcGxvdF9mb3JtYXQgcGxvdF9vcHRpb25zIHBsb3RfcmVhbHBhcnQnXG4gICAgICArICcgcG5nX2ZpbGUgcG9jaGhhbW1lcl9tYXhfaW5kZXggcG9pbnRzIHBvaW50c2l6ZSBwb2ludF9zaXplIHBvaW50c19qb2luZWQgcG9pbnRfdHlwZSdcbiAgICAgICsgJyBwb2lzbGltIHBvaXNzb24gcG9seV9jb2VmZmljaWVudF9yaW5nIHBvbHlfZWxpbWluYXRpb25fb3JkZXIgcG9seWZhY3RvciBwb2x5X2dyb2JuZXJfYWxnb3JpdGhtJ1xuICAgICAgKyAnIHBvbHlfZ3JvYm5lcl9kZWJ1ZyBwb2x5X21vbm9taWFsX29yZGVyIHBvbHlfcHJpbWFyeV9lbGltaW5hdGlvbl9vcmRlciBwb2x5X3JldHVybl90ZXJtX2xpc3QnXG4gICAgICArICcgcG9seV9zZWNvbmRhcnlfZWxpbWluYXRpb25fb3JkZXIgcG9seV90b3BfcmVkdWN0aW9uX29ubHkgcG9zZnVuIHBvc2l0aW9uJ1xuICAgICAgKyAnIHBvd2VyZGlzcCBwcmVkIHByZWRlcnJvciBwcmltZXBfbnVtYmVyX29mX3Rlc3RzIHByb2R1Y3RfdXNlX2dhbW1hIHByb2dyYW0nXG4gICAgICArICcgcHJvZ3JhbW1vZGUgcHJvbW90ZV9mbG9hdF90b19iaWdmbG9hdCBwcm9tcHQgcHJvcG9ydGlvbmFsX2F4ZXMgcHJvcHMgcHNleHBhbmQnXG4gICAgICArICcgcHNfZmlsZSByYWRleHBhbmQgcmFkaXVzIHJhZHN1YnN0ZmxhZyByYXNzb2NpYXRpdmUgcmF0YWxnZGVub20gcmF0Y2hyaXN0b2YnXG4gICAgICArICcgcmF0ZGVub21kaXZpZGUgcmF0ZWluc3RlaW4gcmF0ZXBzaWxvbiByYXRmYWMgcmF0aW9uYWwgcmF0bXggcmF0cHJpbnQgcmF0cmllbWFubidcbiAgICAgICsgJyByYXRzaW1wZXhwb25zIHJhdHZhcnN3aXRjaCByYXR3ZWlnaHRzIHJhdHdleWwgcmF0d3RsdmwgcmVhbCByZWFsb25seSByZWRyYXcnXG4gICAgICArICcgcmVmY2hlY2sgcmVzb2x1dGlvbiByZXN0YXJ0IHJlc3VsdGFudCByaWMgcmllbSBybXhjaGFyICVybnVtX2xpc3Qgcm9tYmVyZ2FicydcbiAgICAgICsgJyByb21iZXJnaXQgcm9tYmVyZ21pbiByb21iZXJndG9sIHJvb3RzY29ubW9kZSByb290c2Vwc2lsb24gcnVuX3ZpZXdlciBzYW1lX3h5J1xuICAgICAgKyAnIHNhbWVfeHl6IHNhdmVkZWYgc2F2ZWZhY3RvcnMgc2NhbGFyIHNjYWxhcm1hdHJpeHAgc2NhbGUgc2NhbGVfbHAgc2V0Y2hlY2snXG4gICAgICArICcgc2V0Y2hlY2ticmVhayBzZXR2YWwgc2hvd19lZGdlX2NvbG9yIHNob3dfZWRnZXMgc2hvd19lZGdlX3R5cGUgc2hvd19lZGdlX3dpZHRoJ1xuICAgICAgKyAnIHNob3dfaWQgc2hvd19sYWJlbCBzaG93dGltZSBzaG93X3ZlcnRleF9jb2xvciBzaG93X3ZlcnRleF9zaXplIHNob3dfdmVydGV4X3R5cGUnXG4gICAgICArICcgc2hvd192ZXJ0aWNlcyBzaG93X3dlaWdodCBzaW1wIHNpbXBsaWZpZWRfb3V0cHV0IHNpbXBsaWZ5X3Byb2R1Y3RzIHNpbXBwcm9kdWN0J1xuICAgICAgKyAnIHNpbXBzdW0gc2lubnBpZmxhZyBzb2x2ZWRlY29tcG9zZXMgc29sdmVleHBsaWNpdCBzb2x2ZWZhY3RvcnMgc29sdmVudWxsd2FybidcbiAgICAgICsgJyBzb2x2ZXJhZGNhbiBzb2x2ZXRyaWd3YXJuIHNwYWNlIHNwYXJzZSBzcGhlcmUgc3ByaW5nX2VtYmVkZGluZ19kZXB0aCBzcXJ0ZGlzcGZsYWcnXG4gICAgICArICcgc3RhcmRpc3Agc3RhcnRwaGkgc3RhcnR0aGV0YSBzdGF0c19udW1lciBzdHJpbmdkaXNwIHN0cnVjdHVyZXMgc3R5bGUgc3VibGlzX2FwcGx5X2xhbWJkYSdcbiAgICAgICsgJyBzdWJudW1zaW1wIHN1bWV4cGFuZCBzdW1zcGxpdGZhY3Qgc3VyZmFjZSBzdXJmYWNlX2hpZGUgc3ZnX2ZpbGUgc3ltbWV0cmljJ1xuICAgICAgKyAnIHRhYiB0YXlsb3JkZXB0aCB0YXlsb3JfbG9nZXhwYW5kIHRheWxvcl9vcmRlcl9jb2VmZmljaWVudHMgdGF5bG9yX3RydW5jYXRlX3BvbHlub21pYWxzJ1xuICAgICAgKyAnIHRlbnNvcmtpbGwgdGVybWluYWwgdGVzdHN1aXRlX2ZpbGVzIHRoZXRhcmVzb2x1dGlvbiB0aW1lcl9kZXZhbHVlIHRpdGxlIHRsaW1zd2l0Y2gnXG4gICAgICArICcgdHIgdHJhY2sgdHJhbnNjb21waWxlIHRyYW5zZm9ybSB0cmFuc2Zvcm1feHkgdHJhbnNsYXRlX2Zhc3RfYXJyYXlzIHRyYW5zcGFyZW50J1xuICAgICAgKyAnIHRyYW5zcnVuIHRyX2FycmF5X2FzX3JlZiB0cl9ib3VuZF9mdW5jdGlvbl9hcHBseXAgdHJfZmlsZV90dHlfbWVzc2FnZXNwIHRyX2Zsb2F0X2Nhbl9icmFuY2hfY29tcGxleCdcbiAgICAgICsgJyB0cl9mdW5jdGlvbl9jYWxsX2RlZmF1bHQgdHJpZ2V4cGFuZHBsdXMgdHJpZ2V4cGFuZHRpbWVzIHRyaWdpbnZlcnNlcyB0cmlnc2lnbidcbiAgICAgICsgJyB0cml2aWFsX3NvbHV0aW9ucyB0cl9udW1lciB0cl9vcHRpbWl6ZV9tYXhfbG9vcCB0cl9zZW1pY29tcGlsZSB0cl9zdGF0ZV92YXJzJ1xuICAgICAgKyAnIHRyX3dhcm5fYmFkX2Z1bmN0aW9uX2NhbGxzIHRyX3dhcm5fZmV4cHIgdHJfd2Fybl9tZXZhbCB0cl93YXJuX21vZGUnXG4gICAgICArICcgdHJfd2Fybl91bmRlY2xhcmVkIHRyX3dhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlIHRzdGVwIHR0eW9mZiB0dWJlX2V4dHJlbWVzJ1xuICAgICAgKyAnIHVmZyB1ZyAldW5pdGV4cGFuZCB1bml0X3ZlY3RvcnMgdXJpYyB1cmllbSB1c2VfZmFzdF9hcnJheXMgdXNlcl9wcmVhbWJsZSdcbiAgICAgICsgJyB1c2Vyc2V0dW5pdHMgdmFsdWVzIHZlY3RfY3Jvc3MgdmVyYm9zZSB2ZXJ0ZXhfY29sb3IgdmVydGV4X2NvbG9yaW5nIHZlcnRleF9wYXJ0aXRpb24nXG4gICAgICArICcgdmVydGV4X3NpemUgdmVydGV4X3R5cGUgdmlldyB3YXJuaW5ncyB3ZXlsIHdpZHRoIHdpbmRvd25hbWUgd2luZG93dGl0bGUgd2lyZWRfc3VyZmFjZSdcbiAgICAgICsgJyB3aXJlZnJhbWUgeGF4aXMgeGF4aXNfY29sb3IgeGF4aXNfc2Vjb25kYXJ5IHhheGlzX3R5cGUgeGF4aXNfd2lkdGggeGxhYmVsJ1xuICAgICAgKyAnIHhsYWJlbF9zZWNvbmRhcnkgeGxlbmd0aCB4cmFuZ2UgeHJhbmdlX3NlY29uZGFyeSB4dGljcyB4dGljc19heGlzIHh0aWNzX3JvdGF0ZSdcbiAgICAgICsgJyB4dGljc19yb3RhdGVfc2Vjb25kYXJ5IHh0aWNzX3NlY29uZGFyeSB4dGljc19zZWNvbmRhcnlfYXhpcyB4dV9ncmlkIHhfdm94ZWwnXG4gICAgICArICcgeHlfZmlsZSB4eXBsYW5lIHh5X3NjYWxlIHlheGlzIHlheGlzX2NvbG9yIHlheGlzX3NlY29uZGFyeSB5YXhpc190eXBlIHlheGlzX3dpZHRoJ1xuICAgICAgKyAnIHlsYWJlbCB5bGFiZWxfc2Vjb25kYXJ5IHlsZW5ndGggeXJhbmdlIHlyYW5nZV9zZWNvbmRhcnkgeXRpY3MgeXRpY3NfYXhpcydcbiAgICAgICsgJyB5dGljc19yb3RhdGUgeXRpY3Nfcm90YXRlX3NlY29uZGFyeSB5dGljc19zZWNvbmRhcnkgeXRpY3Nfc2Vjb25kYXJ5X2F4aXMnXG4gICAgICArICcgeXZfZ3JpZCB5X3ZveGVsIHl4X3JhdGlvIHpheGlzIHpheGlzX2NvbG9yIHpheGlzX3R5cGUgemF4aXNfd2lkdGggemVyb2EgemVyb2InXG4gICAgICArICcgemVyb2Jlcm4gemV0YSVwaSB6bGFiZWwgemxhYmVsX3JvdGF0ZSB6bGVuZ3RoIHptaW4gem5fcHJpbXJvb3RfbGltaXQgem5fcHJpbXJvb3RfcHJldGVzdCc7XG4gIHZhciBTWU1CT0xTID0gJ18gX18gJXwwICUlfDAnO1xuXG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogJ1tBLVphLXpfJV1bMC05QS1aYS16XyVdKicsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTl9GVU5DVElPTlMsXG4gICAgICBzeW1ib2w6IFNZTUJPTFMsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgYmVnaW46ICcvXFxcXConLFxuICAgICAgICBlbmQ6ICdcXFxcKi8nLFxuICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZmxvYXQgbnVtYmVyIHcvIGV4cG9uZW50XG4gICAgICAgICAgICAvLyBobW0sIEkgd29uZGVyIGlmIHdlIG91Z2h0IHRvIGluY2x1ZGUgb3RoZXIgZXhwb25lbnQgbWFya2Vycz9cbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrfFxcXFxkK1xcXFwufFxcXFwuXFxcXGQrfFxcXFxkK1xcXFwuXFxcXGQrKVtFZV1bLStdP1xcXFxkK1xcXFxiJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpZ2Zsb2F0IG51bWJlclxuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcZCt8XFxcXGQrXFxcXC58XFxcXC5cXFxcZCt8XFxcXGQrXFxcXC5cXFxcZCspW0JiXVstK10/XFxcXGQrXFxcXGInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZmxvYXQgbnVtYmVyIHcvb3V0IGV4cG9uZW50XG4gICAgICAgICAgICAvLyBEb2Vzbid0IHNlZW0gdG8gcmVjb2duaXplIGZsb2F0cyB3aGljaCBzdGFydCB3aXRoICcuJ1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcLlxcXFxkK3xcXFxcZCtcXFxcLlxcXFxkKylcXFxcYicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBpbnRlZ2VyIGluIGJhc2UgdXAgdG8gMzZcbiAgICAgICAgICAgIC8vIERvZXNuJ3Qgc2VlbSB0byByZWNvZ25pemUgaW50ZWdlcnMgd2hpY2ggZW5kIHdpdGggJy4nXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFxkK3wwWzAtOUEtWmEtel0rKVxcXFwuP1xcXFxiJyxcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC9AL1xuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOlxuICAgICAgJ2ludCBmbG9hdCBzdHJpbmcgdmVjdG9yIG1hdHJpeCBpZiBlbHNlIHN3aXRjaCBjYXNlIGRlZmF1bHQgd2hpbGUgZG8gZm9yIGluIGJyZWFrICcgK1xuICAgICAgJ2NvbnRpbnVlIGdsb2JhbCBwcm9jIHJldHVybiBhYm91dCBhYnMgYWRkQXR0ciBhZGRBdHRyaWJ1dGVFZGl0b3JOb2RlSGVscCBhZGREeW5hbWljICcgK1xuICAgICAgJ2FkZE5ld1NoZWxmVGFiIGFkZFBQIGFkZFBhbmVsQ2F0ZWdvcnkgYWRkUHJlZml4VG9OYW1lIGFkdmFuY2VUb05leHREcml2ZW5LZXkgJyArXG4gICAgICAnYWZmZWN0ZWROZXQgYWZmZWN0cyBhaW1Db25zdHJhaW50IGFpciBhbGlhcyBhbGlhc0F0dHIgYWxpZ24gYWxpZ25DdHggYWxpZ25DdXJ2ZSAnICtcbiAgICAgICdhbGlnblN1cmZhY2UgYWxsVmlld0ZpdCBhbWJpZW50TGlnaHQgYW5nbGUgYW5nbGVCZXR3ZWVuIGFuaW1Db25lIGFuaW1DdXJ2ZUVkaXRvciAnICtcbiAgICAgICdhbmltRGlzcGxheSBhbmltVmlldyBhbm5vdGF0ZSBhcHBlbmRTdHJpbmdBcnJheSBhcHBsaWNhdGlvbk5hbWUgYXBwbHlBdHRyUHJlc2V0ICcgK1xuICAgICAgJ2FwcGx5VGFrZSBhcmNMZW5EaW1Db250ZXh0IGFyY0xlbmd0aERpbWVuc2lvbiBhcmNsZW4gYXJyYXlNYXBwZXIgYXJ0M2RQYWludEN0eCAnICtcbiAgICAgICdhcnRBdHRyQ3R4IGFydEF0dHJQYWludFZlcnRleEN0eCBhcnRBdHRyU2tpblBhaW50Q3R4IGFydEF0dHJUb29sIGFydEJ1aWxkUGFpbnRNZW51ICcgK1xuICAgICAgJ2FydEZsdWlkQXR0ckN0eCBhcnRQdXR0eUN0eCBhcnRTZWxlY3RDdHggYXJ0U2V0UGFpbnRDdHggYXJ0VXNlclBhaW50Q3R4IGFzc2lnbkNvbW1hbmQgJyArXG4gICAgICAnYXNzaWduSW5wdXREZXZpY2UgYXNzaWduVmlld3BvcnRGYWN0b3JpZXMgYXR0YWNoQ3VydmUgYXR0YWNoRGV2aWNlQXR0ciBhdHRhY2hTdXJmYWNlICcgK1xuICAgICAgJ2F0dHJDb2xvclNsaWRlckdycCBhdHRyQ29tcGF0aWJpbGl0eSBhdHRyQ29udHJvbEdycCBhdHRyRW51bU9wdGlvbk1lbnUgJyArXG4gICAgICAnYXR0ckVudW1PcHRpb25NZW51R3JwIGF0dHJGaWVsZEdycCBhdHRyRmllbGRTbGlkZXJHcnAgYXR0ck5hdmlnYXRpb25Db250cm9sR3JwICcgK1xuICAgICAgJ2F0dHJQcmVzZXRFZGl0V2luIGF0dHJpYnV0ZUV4aXN0cyBhdHRyaWJ1dGVJbmZvIGF0dHJpYnV0ZU1lbnUgYXR0cmlidXRlUXVlcnkgJyArXG4gICAgICAnYXV0b0tleWZyYW1lIGF1dG9QbGFjZSBiYWtlQ2xpcCBiYWtlRmx1aWRTaGFkaW5nIGJha2VQYXJ0aWFsSGlzdG9yeSBiYWtlUmVzdWx0cyAnICtcbiAgICAgICdiYWtlU2ltdWxhdGlvbiBiYXNlbmFtZSBiYXNlbmFtZUV4IGJhdGNoUmVuZGVyIGJlc3NlbCBiZXZlbCBiZXZlbFBsdXMgYmluTWVtYmVyc2hpcCAnICtcbiAgICAgICdiaW5kU2tpbiBibGVuZDIgYmxlbmRTaGFwZSBibGVuZFNoYXBlRWRpdG9yIGJsZW5kU2hhcGVQYW5lbCBibGVuZFR3b0F0dHIgYmxpbmREYXRhVHlwZSAnICtcbiAgICAgICdib25lTGF0dGljZSBib3VuZGFyeSBib3hEb2xseUN0eCBib3hab29tQ3R4IGJ1ZmZlckN1cnZlIGJ1aWxkQm9va21hcmtNZW51ICcgK1xuICAgICAgJ2J1aWxkS2V5ZnJhbWVNZW51IGJ1dHRvbiBidXR0b25NYW5pcCBDQkcgY2FjaGVGaWxlIGNhY2hlRmlsZUNvbWJpbmUgY2FjaGVGaWxlTWVyZ2UgJyArXG4gICAgICAnY2FjaGVGaWxlVHJhY2sgY2FtZXJhIGNhbWVyYVZpZXcgY2FuQ3JlYXRlTWFuaXAgY2FudmFzIGNhcGl0YWxpemVTdHJpbmcgY2F0Y2ggJyArXG4gICAgICAnY2F0Y2hRdWlldCBjZWlsIGNoYW5nZVN1YmRpdkNvbXBvbmVudERpc3BsYXlMZXZlbCBjaGFuZ2VTdWJkaXZSZWdpb24gY2hhbm5lbEJveCAnICtcbiAgICAgICdjaGFyYWN0ZXIgY2hhcmFjdGVyTWFwIGNoYXJhY3Rlck91dGxpbmVFZGl0b3IgY2hhcmFjdGVyaXplIGNoZGlyIGNoZWNrQm94IGNoZWNrQm94R3JwICcgK1xuICAgICAgJ2NoZWNrRGVmYXVsdFJlbmRlckdsb2JhbHMgY2hvaWNlIGNpcmNsZSBjaXJjdWxhckZpbGxldCBjbGFtcCBjbGVhciBjbGVhckNhY2hlIGNsaXAgJyArXG4gICAgICAnY2xpcEVkaXRvciBjbGlwRWRpdG9yQ3VycmVudFRpbWVDdHggY2xpcFNjaGVkdWxlIGNsaXBTY2hlZHVsZXJPdXRsaW5lciBjbGlwVHJpbUJlZm9yZSAnICtcbiAgICAgICdjbG9zZUN1cnZlIGNsb3NlU3VyZmFjZSBjbHVzdGVyIGNtZEZpbGVPdXRwdXQgY21kU2Nyb2xsRmllbGRFeGVjdXRlciAnICtcbiAgICAgICdjbWRTY3JvbGxGaWVsZFJlcG9ydGVyIGNtZFNoZWxsIGNvYXJzZW5TdWJkaXZTZWxlY3Rpb25MaXN0IGNvbGxpc2lvbiBjb2xvciAnICtcbiAgICAgICdjb2xvckF0UG9pbnQgY29sb3JFZGl0b3IgY29sb3JJbmRleCBjb2xvckluZGV4U2xpZGVyR3JwIGNvbG9yU2xpZGVyQnV0dG9uR3JwICcgK1xuICAgICAgJ2NvbG9yU2xpZGVyR3JwIGNvbHVtbkxheW91dCBjb21tYW5kRWNobyBjb21tYW5kTGluZSBjb21tYW5kUG9ydCBjb21wYWN0SGFpclN5c3RlbSAnICtcbiAgICAgICdjb21wb25lbnRFZGl0b3IgY29tcG9zaXRpbmdJbnRlcm9wIGNvbXB1dGVQb2x5c2V0Vm9sdW1lIGNvbmRpdGlvbiBjb25lIGNvbmZpcm1EaWFsb2cgJyArXG4gICAgICAnY29ubmVjdEF0dHIgY29ubmVjdENvbnRyb2wgY29ubmVjdER5bmFtaWMgY29ubmVjdEpvaW50IGNvbm5lY3Rpb25JbmZvIGNvbnN0cmFpbiAnICtcbiAgICAgICdjb25zdHJhaW5WYWx1ZSBjb25zdHJ1Y3Rpb25IaXN0b3J5IGNvbnRhaW5lciBjb250YWluc011bHRpYnl0ZSBjb250ZXh0SW5mbyBjb250cm9sICcgK1xuICAgICAgJ2NvbnZlcnRGcm9tT2xkTGF5ZXJzIGNvbnZlcnRJZmZUb1BzZCBjb252ZXJ0TGlnaHRtYXAgY29udmVydFNvbGlkVHggY29udmVydFRlc3NlbGxhdGlvbiAnICtcbiAgICAgICdjb252ZXJ0VW5pdCBjb3B5QXJyYXkgY29weUZsZXhvciBjb3B5S2V5IGNvcHlTa2luV2VpZ2h0cyBjb3MgY3BCdXR0b24gY3BDYWNoZSAnICtcbiAgICAgICdjcENsb3RoU2V0IGNwQ29sbGlzaW9uIGNwQ29uc3RyYWludCBjcENvbnZDbG90aFRvTWVzaCBjcEZvcmNlcyBjcEdldFNvbHZlckF0dHIgY3BQYW5lbCAnICtcbiAgICAgICdjcFByb3BlcnR5IGNwUmlnaWRDb2xsaXNpb25GaWx0ZXIgY3BTZWFtIGNwU2V0RWRpdCBjcFNldFNvbHZlckF0dHIgY3BTb2x2ZXIgJyArXG4gICAgICAnY3BTb2x2ZXJUeXBlcyBjcFRvb2wgY3BVcGRhdGVDbG90aFVWcyBjcmVhdGVEaXNwbGF5TGF5ZXIgY3JlYXRlRHJhd0N0eCBjcmVhdGVFZGl0b3IgJyArXG4gICAgICAnY3JlYXRlTGF5ZXJlZFBzZEZpbGUgY3JlYXRlTW90aW9uRmllbGQgY3JlYXRlTmV3U2hlbGYgY3JlYXRlTm9kZSBjcmVhdGVSZW5kZXJMYXllciAnICtcbiAgICAgICdjcmVhdGVTdWJkaXZSZWdpb24gY3Jvc3MgY3Jvc3NQcm9kdWN0IGN0eEFib3J0IGN0eENvbXBsZXRpb24gY3R4RWRpdE1vZGUgY3R4VHJhdmVyc2UgJyArXG4gICAgICAnY3VycmVudEN0eCBjdXJyZW50VGltZSBjdXJyZW50VGltZUN0eCBjdXJyZW50VW5pdCBjdXJ2ZSBjdXJ2ZUFkZFB0Q3R4ICcgK1xuICAgICAgJ2N1cnZlQ1ZDdHggY3VydmVFUEN0eCBjdXJ2ZUVkaXRvckN0eCBjdXJ2ZUludGVyc2VjdCBjdXJ2ZU1vdmVFUEN0eCBjdXJ2ZU9uU3VyZmFjZSAnICtcbiAgICAgICdjdXJ2ZVNrZXRjaEN0eCBjdXRLZXkgY3ljbGVDaGVjayBjeWxpbmRlciBkYWdQb3NlIGRhdGUgZGVmYXVsdExpZ2h0TGlzdENoZWNrQm94ICcgK1xuICAgICAgJ2RlZmF1bHROYXZpZ2F0aW9uIGRlZmluZURhdGFTZXJ2ZXIgZGVmaW5lVmlydHVhbERldmljZSBkZWZvcm1lciBkZWdfdG9fcmFkIGRlbGV0ZSAnICtcbiAgICAgICdkZWxldGVBdHRyIGRlbGV0ZVNoYWRpbmdHcm91cHNBbmRNYXRlcmlhbHMgZGVsZXRlU2hlbGZUYWIgZGVsZXRlVUkgZGVsZXRlVW51c2VkQnJ1c2hlcyAnICtcbiAgICAgICdkZWxyYW5kc3RyIGRldGFjaEN1cnZlIGRldGFjaERldmljZUF0dHIgZGV0YWNoU3VyZmFjZSBkZXZpY2VFZGl0b3IgZGV2aWNlUGFuZWwgZGdJbmZvICcgK1xuICAgICAgJ2RnZGlydHkgZGdldmFsIGRndGltZXIgZGltV2hlbiBkaXJlY3RLZXlDdHggZGlyZWN0aW9uYWxMaWdodCBkaXJtYXAgZGlybmFtZSBkaXNhYmxlICcgK1xuICAgICAgJ2Rpc2Nvbm5lY3RBdHRyIGRpc2Nvbm5lY3RKb2ludCBkaXNrQ2FjaGUgZGlzcGxhY2VtZW50VG9Qb2x5IGRpc3BsYXlBZmZlY3RlZCAnICtcbiAgICAgICdkaXNwbGF5Q29sb3IgZGlzcGxheUN1bGwgZGlzcGxheUxldmVsT2ZEZXRhaWwgZGlzcGxheVByZWYgZGlzcGxheVJHQkNvbG9yICcgK1xuICAgICAgJ2Rpc3BsYXlTbW9vdGhuZXNzIGRpc3BsYXlTdGF0cyBkaXNwbGF5U3RyaW5nIGRpc3BsYXlTdXJmYWNlIGRpc3RhbmNlRGltQ29udGV4dCAnICtcbiAgICAgICdkaXN0YW5jZURpbWVuc2lvbiBkb0JsdXIgZG9sbHkgZG9sbHlDdHggZG9wZVNoZWV0RWRpdG9yIGRvdCBkb3RQcm9kdWN0ICcgK1xuICAgICAgJ2RvdWJsZVByb2ZpbGVCaXJhaWxTdXJmYWNlIGRyYWcgZHJhZ0F0dHJDb250ZXh0IGRyYWdnZXJDb250ZXh0IGRyb3BvZmZMb2NhdG9yICcgK1xuICAgICAgJ2R1cGxpY2F0ZSBkdXBsaWNhdGVDdXJ2ZSBkdXBsaWNhdGVTdXJmYWNlIGR5bkNhY2hlIGR5bkNvbnRyb2wgZHluRXhwb3J0IGR5bkV4cHJlc3Npb24gJyArXG4gICAgICAnZHluR2xvYmFscyBkeW5QYWludEVkaXRvciBkeW5QYXJ0aWNsZUN0eCBkeW5QcmVmIGR5blJlbEVkUGFuZWwgZHluUmVsRWRpdG9yICcgK1xuICAgICAgJ2R5bmFtaWNMb2FkIGVkaXRBdHRyTGltaXRzIGVkaXREaXNwbGF5TGF5ZXJHbG9iYWxzIGVkaXREaXNwbGF5TGF5ZXJNZW1iZXJzICcgK1xuICAgICAgJ2VkaXRSZW5kZXJMYXllckFkanVzdG1lbnQgZWRpdFJlbmRlckxheWVyR2xvYmFscyBlZGl0UmVuZGVyTGF5ZXJNZW1iZXJzIGVkaXRvciAnICtcbiAgICAgICdlZGl0b3JUZW1wbGF0ZSBlZmZlY3RvciBlbWl0IGVtaXR0ZXIgZW5hYmxlRGV2aWNlIGVuY29kZVN0cmluZyBlbmRTdHJpbmcgZW5kc1dpdGggZW52ICcgK1xuICAgICAgJ2VxdWl2YWxlbnQgZXF1aXZhbGVudFRvbCBlcmYgZXJyb3IgZXZhbCBldmFsRGVmZXJyZWQgZXZhbEVjaG8gZXZlbnQgJyArXG4gICAgICAnZXhhY3RXb3JsZEJvdW5kaW5nQm94IGV4Y2x1c2l2ZUxpZ2h0Q2hlY2tCb3ggZXhlYyBleGVjdXRlRm9yRWFjaE9iamVjdCBleGlzdHMgZXhwICcgK1xuICAgICAgJ2V4cHJlc3Npb24gZXhwcmVzc2lvbkVkaXRvckxpc3RlbiBleHRlbmRDdXJ2ZSBleHRlbmRTdXJmYWNlIGV4dHJ1ZGUgZmNoZWNrIGZjbG9zZSBmZW9mICcgK1xuICAgICAgJ2ZmbHVzaCBmZ2V0bGluZSBmZ2V0d29yZCBmaWxlIGZpbGVCcm93c2VyRGlhbG9nIGZpbGVEaWFsb2cgZmlsZUV4dGVuc2lvbiBmaWxlSW5mbyAnICtcbiAgICAgICdmaWxldGVzdCBmaWxsZXRDdXJ2ZSBmaWx0ZXIgZmlsdGVyQ3VydmUgZmlsdGVyRXhwYW5kIGZpbHRlclN0dWRpb0ltcG9ydCAnICtcbiAgICAgICdmaW5kQWxsSW50ZXJzZWN0aW9ucyBmaW5kQW5pbUN1cnZlcyBmaW5kS2V5ZnJhbWUgZmluZE1lbnVJdGVtIGZpbmRSZWxhdGVkU2tpbkNsdXN0ZXIgJyArXG4gICAgICAnZmluZGVyIGZpcnN0UGFyZW50T2YgZml0QnNwbGluZSBmbGV4b3IgZmxvYXRFcSBmbG9hdEZpZWxkIGZsb2F0RmllbGRHcnAgZmxvYXRTY3JvbGxCYXIgJyArXG4gICAgICAnZmxvYXRTbGlkZXIgZmxvYXRTbGlkZXIyIGZsb2F0U2xpZGVyQnV0dG9uR3JwIGZsb2F0U2xpZGVyR3JwIGZsb29yIGZsb3cgZmx1aWRDYWNoZUluZm8gJyArXG4gICAgICAnZmx1aWRFbWl0dGVyIGZsdWlkVm94ZWxJbmZvIGZsdXNoVW5kbyBmbW9kIGZvbnREaWFsb2cgZm9wZW4gZm9ybUxheW91dCBmb3JtYXQgZnByaW50ICcgK1xuICAgICAgJ2ZyYW1lTGF5b3V0IGZyZWFkIGZyZWVGb3JtRmlsbGV0IGZyZXdpbmQgZnJvbU5hdGl2ZVBhdGggZndyaXRlIGdhbW1hIGdhdXNzICcgK1xuICAgICAgJ2dlb21ldHJ5Q29uc3RyYWludCBnZXRBcHBsaWNhdGlvblZlcnNpb25Bc0Zsb2F0IGdldEF0dHIgZ2V0Q2xhc3NpZmljYXRpb24gJyArXG4gICAgICAnZ2V0RGVmYXVsdEJydXNoIGdldEZpbGVMaXN0IGdldEZsdWlkQXR0ciBnZXRJbnB1dERldmljZVJhbmdlIGdldE1heWFQYW5lbFR5cGVzICcgK1xuICAgICAgJ2dldE1vZGlmaWVycyBnZXRQYW5lbCBnZXRQYXJ0aWNsZUF0dHIgZ2V0UGx1Z2luUmVzb3VyY2UgZ2V0ZW52IGdldHBpZCBnbFJlbmRlciAnICtcbiAgICAgICdnbFJlbmRlckVkaXRvciBnbG9iYWxTdGl0Y2ggZ21hdGNoIGdvYWwgZ290b0JpbmRQb3NlIGdyYWJDb2xvciBncmFkaWVudENvbnRyb2wgJyArXG4gICAgICAnZ3JhZGllbnRDb250cm9sTm9BdHRyIGdyYXBoRG9sbHlDdHggZ3JhcGhTZWxlY3RDb250ZXh0IGdyYXBoVHJhY2tDdHggZ3Jhdml0eSBncmlkICcgK1xuICAgICAgJ2dyaWRMYXlvdXQgZ3JvdXAgZ3JvdXBPYmplY3RzQnlOYW1lIEhmQWRkQXR0cmFjdG9yVG9BUyBIZkFzc2lnbkFTIEhmQnVpbGRFcXVhbE1hcCAnICtcbiAgICAgICdIZkJ1aWxkRnVyRmlsZXMgSGZCdWlsZEZ1ckltYWdlcyBIZkNhbmNlbEFGUiBIZkNvbm5lY3RBU1RvSEYgSGZDcmVhdGVBdHRyYWN0b3IgJyArXG4gICAgICAnSGZEZWxldGVBUyBIZkVkaXRBUyBIZlBlcmZvcm1DcmVhdGVBUyBIZlJlbW92ZUF0dHJhY3RvckZyb21BUyBIZlNlbGVjdEF0dGFjaGVkICcgK1xuICAgICAgJ0hmU2VsZWN0QXR0cmFjdG9ycyBIZlVuQXNzaWduQVMgaGFyZGVuUG9pbnRDdXJ2ZSBoYXJkd2FyZSBoYXJkd2FyZVJlbmRlclBhbmVsICcgK1xuICAgICAgJ2hlYWRzVXBEaXNwbGF5IGhlYWRzVXBNZXNzYWdlIGhlbHAgaGVscExpbmUgaGVybWl0ZSBoaWRlIGhpbGl0ZSBoaXRUZXN0IGhvdEJveCBob3RrZXkgJyArXG4gICAgICAnaG90a2V5Q2hlY2sgaHN2X3RvX3JnYiBodWRCdXR0b24gaHVkU2xpZGVyIGh1ZFNsaWRlckJ1dHRvbiBod1JlZmxlY3Rpb25NYXAgaHdSZW5kZXIgJyArXG4gICAgICAnaHdSZW5kZXJMb2FkIGh5cGVyR3JhcGggaHlwZXJQYW5lbCBoeXBlclNoYWRlIGh5cG90IGljb25UZXh0QnV0dG9uIGljb25UZXh0Q2hlY2tCb3ggJyArXG4gICAgICAnaWNvblRleHRSYWRpb0J1dHRvbiBpY29uVGV4dFJhZGlvQ29sbGVjdGlvbiBpY29uVGV4dFNjcm9sbExpc3QgaWNvblRleHRTdGF0aWNMYWJlbCAnICtcbiAgICAgICdpa0hhbmRsZSBpa0hhbmRsZUN0eCBpa0hhbmRsZURpc3BsYXlTY2FsZSBpa1NvbHZlciBpa1NwbGluZUhhbmRsZUN0eCBpa1N5c3RlbSAnICtcbiAgICAgICdpa1N5c3RlbUluZm8gaWtma0Rpc3BsYXlNZXRob2QgaWxsdXN0cmF0b3JDdXJ2ZXMgaW1hZ2UgaW1mUGx1Z2lucyBpbmhlcml0VHJhbnNmb3JtICcgK1xuICAgICAgJ2luc2VydEpvaW50IGluc2VydEpvaW50Q3R4IGluc2VydEtleUN0eCBpbnNlcnRLbm90Q3VydmUgaW5zZXJ0S25vdFN1cmZhY2UgaW5zdGFuY2UgJyArXG4gICAgICAnaW5zdGFuY2VhYmxlIGluc3RhbmNlciBpbnRGaWVsZCBpbnRGaWVsZEdycCBpbnRTY3JvbGxCYXIgaW50U2xpZGVyIGludFNsaWRlckdycCAnICtcbiAgICAgICdpbnRlclRvVUkgaW50ZXJuYWxWYXIgaW50ZXJzZWN0IGlwckVuZ2luZSBpc0FuaW1DdXJ2ZSBpc0Nvbm5lY3RlZCBpc0RpcnR5IGlzUGFyZW50T2YgJyArXG4gICAgICAnaXNTYW1lT2JqZWN0IGlzVHJ1ZSBpc1ZhbGlkT2JqZWN0TmFtZSBpc1ZhbGlkU3RyaW5nIGlzVmFsaWRVaU5hbWUgaXNvbGF0ZVNlbGVjdCAnICtcbiAgICAgICdpdGVtRmlsdGVyIGl0ZW1GaWx0ZXJBdHRyIGl0ZW1GaWx0ZXJSZW5kZXIgaXRlbUZpbHRlclR5cGUgam9pbnQgam9pbnRDbHVzdGVyIGpvaW50Q3R4ICcgK1xuICAgICAgJ2pvaW50RGlzcGxheVNjYWxlIGpvaW50TGF0dGljZSBrZXlUYW5nZW50IGtleWZyYW1lIGtleWZyYW1lT3V0bGluZXIgJyArXG4gICAgICAna2V5ZnJhbWVSZWdpb25DdXJyZW50VGltZUN0eCBrZXlmcmFtZVJlZ2lvbkRpcmVjdEtleUN0eCBrZXlmcmFtZVJlZ2lvbkRvbGx5Q3R4ICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uSW5zZXJ0S2V5Q3R4IGtleWZyYW1lUmVnaW9uTW92ZUtleUN0eCBrZXlmcmFtZVJlZ2lvblNjYWxlS2V5Q3R4ICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uU2VsZWN0S2V5Q3R4IGtleWZyYW1lUmVnaW9uU2V0S2V5Q3R4IGtleWZyYW1lUmVnaW9uVHJhY2tDdHggJyArXG4gICAgICAna2V5ZnJhbWVTdGF0cyBsYXNzb0NvbnRleHQgbGF0dGljZSBsYXR0aWNlRGVmb3JtS2V5Q3R4IGxhdW5jaCBsYXVuY2hJbWFnZUVkaXRvciAnICtcbiAgICAgICdsYXllckJ1dHRvbiBsYXllcmVkU2hhZGVyUG9ydCBsYXllcmVkVGV4dHVyZVBvcnQgbGF5b3V0IGxheW91dERpYWxvZyBsaWdodExpc3QgJyArXG4gICAgICAnbGlnaHRMaXN0RWRpdG9yIGxpZ2h0TGlzdFBhbmVsIGxpZ2h0bGluayBsaW5lSW50ZXJzZWN0aW9uIGxpbmVhclByZWNpc2lvbiBsaW5zdGVwICcgK1xuICAgICAgJ2xpc3RBbmltYXRhYmxlIGxpc3RBdHRyIGxpc3RDYW1lcmFzIGxpc3RDb25uZWN0aW9ucyBsaXN0RGV2aWNlQXR0YWNobWVudHMgbGlzdEhpc3RvcnkgJyArXG4gICAgICAnbGlzdElucHV0RGV2aWNlQXhlcyBsaXN0SW5wdXREZXZpY2VCdXR0b25zIGxpc3RJbnB1dERldmljZXMgbGlzdE1lbnVBbm5vdGF0aW9uICcgK1xuICAgICAgJ2xpc3ROb2RlVHlwZXMgbGlzdFBhbmVsQ2F0ZWdvcmllcyBsaXN0UmVsYXRpdmVzIGxpc3RTZXRzIGxpc3RUcmFuc2Zvcm1zICcgK1xuICAgICAgJ2xpc3RVbnNlbGVjdGVkIGxpc3RlckVkaXRvciBsb2FkRmx1aWQgbG9hZE5ld1NoZWxmIGxvYWRQbHVnaW4gJyArXG4gICAgICAnbG9hZFBsdWdpbkxhbmd1YWdlUmVzb3VyY2VzIGxvYWRQcmVmT2JqZWN0cyBsb2NhbGl6ZWRQYW5lbExhYmVsIGxvY2tOb2RlIGxvZnQgbG9nICcgK1xuICAgICAgJ2xvbmdOYW1lT2YgbG9va1RocnUgbHMgbHNUaHJvdWdoRmlsdGVyIGxzVHlwZSBsc1VJIE1heWF0b21yIG1hZyBtYWtlSWRlbnRpdHkgbWFrZUxpdmUgJyArXG4gICAgICAnbWFrZVBhaW50YWJsZSBtYWtlUm9sbCBtYWtlU2luZ2xlU3VyZmFjZSBtYWtlVHViZU9uIG1ha2Vib3QgbWFuaXBNb3ZlQ29udGV4dCAnICtcbiAgICAgICdtYW5pcE1vdmVMaW1pdHNDdHggbWFuaXBPcHRpb25zIG1hbmlwUm90YXRlQ29udGV4dCBtYW5pcFJvdGF0ZUxpbWl0c0N0eCAnICtcbiAgICAgICdtYW5pcFNjYWxlQ29udGV4dCBtYW5pcFNjYWxlTGltaXRzQ3R4IG1hcmtlciBtYXRjaCBtYXggbWVtb3J5IG1lbnUgbWVudUJhckxheW91dCAnICtcbiAgICAgICdtZW51RWRpdG9yIG1lbnVJdGVtIG1lbnVJdGVtVG9TaGVsZiBtZW51U2V0IG1lbnVTZXRQcmVmIG1lc3NhZ2VMaW5lIG1pbiBtaW5pbWl6ZUFwcCAnICtcbiAgICAgICdtaXJyb3JKb2ludCBtb2RlbEN1cnJlbnRUaW1lQ3R4IG1vZGVsRWRpdG9yIG1vZGVsUGFuZWwgbW91c2UgbW92SW4gbW92T3V0IG1vdmUgJyArXG4gICAgICAnbW92ZUlLdG9GSyBtb3ZlS2V5Q3R4IG1vdmVWZXJ0ZXhBbG9uZ0RpcmVjdGlvbiBtdWx0aVByb2ZpbGVCaXJhaWxTdXJmYWNlIG11dGUgJyArXG4gICAgICAnblBhcnRpY2xlIG5hbWVDb21tYW5kIG5hbWVGaWVsZCBuYW1lc3BhY2UgbmFtZXNwYWNlSW5mbyBuZXdQYW5lbEl0ZW1zIG5ld3RvbiBub2RlQ2FzdCAnICtcbiAgICAgICdub2RlSWNvbkJ1dHRvbiBub2RlT3V0bGluZXIgbm9kZVByZXNldCBub2RlVHlwZSBub2lzZSBub25MaW5lYXIgbm9ybWFsQ29uc3RyYWludCAnICtcbiAgICAgICdub3JtYWxpemUgbnVyYnNCb29sZWFuIG51cmJzQ29weVVWU2V0IG51cmJzQ3ViZSBudXJic0VkaXRVViBudXJic1BsYW5lIG51cmJzU2VsZWN0ICcgK1xuICAgICAgJ251cmJzU3F1YXJlIG51cmJzVG9Qb2x5IG51cmJzVG9Qb2x5Z29uc1ByZWYgbnVyYnNUb1N1YmRpdiBudXJic1RvU3ViZGl2UHJlZiAnICtcbiAgICAgICdudXJic1VWU2V0IG51cmJzVmlld0RpcmVjdGlvblZlY3RvciBvYmpFeGlzdHMgb2JqZWN0Q2VudGVyIG9iamVjdExheWVyIG9iamVjdFR5cGUgJyArXG4gICAgICAnb2JqZWN0VHlwZVVJIG9ic29sZXRlUHJvYyBvY2Vhbk51cmJzUHJldmlld1BsYW5lIG9mZnNldEN1cnZlIG9mZnNldEN1cnZlT25TdXJmYWNlICcgK1xuICAgICAgJ29mZnNldFN1cmZhY2Ugb3BlbkdMRXh0ZW5zaW9uIG9wZW5NYXlhUHJlZiBvcHRpb25NZW51IG9wdGlvbk1lbnVHcnAgb3B0aW9uVmFyIG9yYml0ICcgK1xuICAgICAgJ29yYml0Q3R4IG9yaWVudENvbnN0cmFpbnQgb3V0bGluZXJFZGl0b3Igb3V0bGluZXJQYW5lbCBvdmVycmlkZU1vZGlmaWVyICcgK1xuICAgICAgJ3BhaW50RWZmZWN0c0Rpc3BsYXkgcGFpckJsZW5kIHBhbGV0dGVQb3J0IHBhbmVMYXlvdXQgcGFuZWwgcGFuZWxDb25maWd1cmF0aW9uICcgK1xuICAgICAgJ3BhbmVsSGlzdG9yeSBwYXJhbURpbUNvbnRleHQgcGFyYW1EaW1lbnNpb24gcGFyYW1Mb2NhdG9yIHBhcmVudCBwYXJlbnRDb25zdHJhaW50ICcgK1xuICAgICAgJ3BhcnRpY2xlIHBhcnRpY2xlRXhpc3RzIHBhcnRpY2xlSW5zdGFuY2VyIHBhcnRpY2xlUmVuZGVySW5mbyBwYXJ0aXRpb24gcGFzdGVLZXkgJyArXG4gICAgICAncGF0aEFuaW1hdGlvbiBwYXVzZSBwY2xvc2UgcGVyY2VudCBwZXJmb3JtYW5jZU9wdGlvbnMgcGZ4c3Ryb2tlcyBwaWNrV2FsayBwaWN0dXJlICcgK1xuICAgICAgJ3BpeGVsTW92ZSBwbGFuYXJTcmYgcGxhbmUgcGxheSBwbGF5YmFja09wdGlvbnMgcGxheWJsYXN0IHBsdWdBdHRyIHBsdWdOb2RlIHBsdWdpbkluZm8gJyArXG4gICAgICAncGx1Z2luUmVzb3VyY2VVdGlsIHBvaW50Q29uc3RyYWludCBwb2ludEN1cnZlQ29uc3RyYWludCBwb2ludExpZ2h0IHBvaW50TWF0cml4TXVsdCAnICtcbiAgICAgICdwb2ludE9uQ3VydmUgcG9pbnRPblN1cmZhY2UgcG9pbnRQb3NpdGlvbiBwb2xlVmVjdG9yQ29uc3RyYWludCBwb2x5QXBwZW5kICcgK1xuICAgICAgJ3BvbHlBcHBlbmRGYWNldEN0eCBwb2x5QXBwZW5kVmVydGV4IHBvbHlBdXRvUHJvamVjdGlvbiBwb2x5QXZlcmFnZU5vcm1hbCAnICtcbiAgICAgICdwb2x5QXZlcmFnZVZlcnRleCBwb2x5QmV2ZWwgcG9seUJsZW5kQ29sb3IgcG9seUJsaW5kRGF0YSBwb2x5Qm9vbE9wIHBvbHlCcmlkZ2VFZGdlICcgK1xuICAgICAgJ3BvbHlDYWNoZU1vbml0b3IgcG9seUNoZWNrIHBvbHlDaGlwT2ZmIHBvbHlDbGlwYm9hcmQgcG9seUNsb3NlQm9yZGVyIHBvbHlDb2xsYXBzZUVkZ2UgJyArXG4gICAgICAncG9seUNvbGxhcHNlRmFjZXQgcG9seUNvbG9yQmxpbmREYXRhIHBvbHlDb2xvckRlbCBwb2x5Q29sb3JQZXJWZXJ0ZXggcG9seUNvbG9yU2V0ICcgK1xuICAgICAgJ3BvbHlDb21wYXJlIHBvbHlDb25lIHBvbHlDb3B5VVYgcG9seUNyZWFzZSBwb2x5Q3JlYXNlQ3R4IHBvbHlDcmVhdGVGYWNldCAnICtcbiAgICAgICdwb2x5Q3JlYXRlRmFjZXRDdHggcG9seUN1YmUgcG9seUN1dCBwb2x5Q3V0Q3R4IHBvbHlDeWxpbmRlciBwb2x5Q3lsaW5kcmljYWxQcm9qZWN0aW9uICcgK1xuICAgICAgJ3BvbHlEZWxFZGdlIHBvbHlEZWxGYWNldCBwb2x5RGVsVmVydGV4IHBvbHlEdXBsaWNhdGVBbmRDb25uZWN0IHBvbHlEdXBsaWNhdGVFZGdlICcgK1xuICAgICAgJ3BvbHlFZGl0VVYgcG9seUVkaXRVVlNoZWxsIHBvbHlFdmFsdWF0ZSBwb2x5RXh0cnVkZUVkZ2UgcG9seUV4dHJ1ZGVGYWNldCAnICtcbiAgICAgICdwb2x5RXh0cnVkZVZlcnRleCBwb2x5RmxpcEVkZ2UgcG9seUZsaXBVViBwb2x5Rm9yY2VVViBwb2x5R2VvU2FtcGxlciBwb2x5SGVsaXggJyArXG4gICAgICAncG9seUluZm8gcG9seUluc3RhbGxBY3Rpb24gcG9seUxheW91dFVWIHBvbHlMaXN0Q29tcG9uZW50Q29udmVyc2lvbiBwb2x5TWFwQ3V0ICcgK1xuICAgICAgJ3BvbHlNYXBEZWwgcG9seU1hcFNldyBwb2x5TWFwU2V3TW92ZSBwb2x5TWVyZ2VFZGdlIHBvbHlNZXJnZUVkZ2VDdHggcG9seU1lcmdlRmFjZXQgJyArXG4gICAgICAncG9seU1lcmdlRmFjZXRDdHggcG9seU1lcmdlVVYgcG9seU1lcmdlVmVydGV4IHBvbHlNaXJyb3JGYWNlIHBvbHlNb3ZlRWRnZSAnICtcbiAgICAgICdwb2x5TW92ZUZhY2V0IHBvbHlNb3ZlRmFjZXRVViBwb2x5TW92ZVVWIHBvbHlNb3ZlVmVydGV4IHBvbHlOb3JtYWwgcG9seU5vcm1hbFBlclZlcnRleCAnICtcbiAgICAgICdwb2x5Tm9ybWFsaXplVVYgcG9seU9wdFV2cyBwb2x5T3B0aW9ucyBwb2x5T3V0cHV0IHBvbHlQaXBlIHBvbHlQbGFuYXJQcm9qZWN0aW9uICcgK1xuICAgICAgJ3BvbHlQbGFuZSBwb2x5UGxhdG9uaWNTb2xpZCBwb2x5UG9rZSBwb2x5UHJpbWl0aXZlIHBvbHlQcmlzbSBwb2x5UHJvamVjdGlvbiAnICtcbiAgICAgICdwb2x5UHlyYW1pZCBwb2x5UXVhZCBwb2x5UXVlcnlCbGluZERhdGEgcG9seVJlZHVjZSBwb2x5U2VsZWN0IHBvbHlTZWxlY3RDb25zdHJhaW50ICcgK1xuICAgICAgJ3BvbHlTZWxlY3RDb25zdHJhaW50TW9uaXRvciBwb2x5U2VsZWN0Q3R4IHBvbHlTZWxlY3RFZGl0Q3R4IHBvbHlTZXBhcmF0ZSAnICtcbiAgICAgICdwb2x5U2V0VG9GYWNlTm9ybWFsIHBvbHlTZXdFZGdlIHBvbHlTaG9ydGVzdFBhdGhDdHggcG9seVNtb290aCBwb2x5U29mdEVkZ2UgJyArXG4gICAgICAncG9seVNwaGVyZSBwb2x5U3BoZXJpY2FsUHJvamVjdGlvbiBwb2x5U3BsaXQgcG9seVNwbGl0Q3R4IHBvbHlTcGxpdEVkZ2UgcG9seVNwbGl0UmluZyAnICtcbiAgICAgICdwb2x5U3BsaXRWZXJ0ZXggcG9seVN0cmFpZ2h0ZW5VVkJvcmRlciBwb2x5U3ViZGl2aWRlRWRnZSBwb2x5U3ViZGl2aWRlRmFjZXQgJyArXG4gICAgICAncG9seVRvU3ViZGl2IHBvbHlUb3J1cyBwb2x5VHJhbnNmZXIgcG9seVRyaWFuZ3VsYXRlIHBvbHlVVlNldCBwb2x5VW5pdGUgcG9seVdlZGdlRmFjZSAnICtcbiAgICAgICdwb3BlbiBwb3B1cE1lbnUgcG9zZSBwb3cgcHJlbG9hZFJlZkVkIHByaW50IHByb2dyZXNzQmFyIHByb2dyZXNzV2luZG93IHByb2pGaWxlVmlld2VyICcgK1xuICAgICAgJ3Byb2plY3RDdXJ2ZSBwcm9qZWN0VGFuZ2VudCBwcm9qZWN0aW9uQ29udGV4dCBwcm9qZWN0aW9uTWFuaXAgcHJvbXB0RGlhbG9nIHByb3BNb2RDdHggJyArXG4gICAgICAncHJvcE1vdmUgcHNkQ2hhbm5lbE91dGxpbmVyIHBzZEVkaXRUZXh0dXJlRmlsZSBwc2RFeHBvcnQgcHNkVGV4dHVyZUZpbGUgcHV0ZW52IHB3ZCAnICtcbiAgICAgICdweXRob24gcXVlcnlTdWJkaXYgcXVpdCByYWRfdG9fZGVnIHJhZGlhbCByYWRpb0J1dHRvbiByYWRpb0J1dHRvbkdycCByYWRpb0NvbGxlY3Rpb24gJyArXG4gICAgICAncmFkaW9NZW51SXRlbUNvbGxlY3Rpb24gcmFtcENvbG9yUG9ydCByYW5kIHJhbmRvbWl6ZUZvbGxpY2xlcyByYW5kc3RhdGUgcmFuZ2VDb250cm9sICcgK1xuICAgICAgJ3JlYWRUYWtlIHJlYnVpbGRDdXJ2ZSByZWJ1aWxkU3VyZmFjZSByZWNvcmRBdHRyIHJlY29yZERldmljZSByZWRvIHJlZmVyZW5jZSAnICtcbiAgICAgICdyZWZlcmVuY2VFZGl0IHJlZmVyZW5jZVF1ZXJ5IHJlZmluZVN1YmRpdlNlbGVjdGlvbkxpc3QgcmVmcmVzaCByZWZyZXNoQUUgJyArXG4gICAgICAncmVnaXN0ZXJQbHVnaW5SZXNvdXJjZSByZWhhc2ggcmVsb2FkSW1hZ2UgcmVtb3ZlSm9pbnQgcmVtb3ZlTXVsdGlJbnN0YW5jZSAnICtcbiAgICAgICdyZW1vdmVQYW5lbENhdGVnb3J5IHJlbmFtZSByZW5hbWVBdHRyIHJlbmFtZVNlbGVjdGlvbkxpc3QgcmVuYW1lVUkgcmVuZGVyICcgK1xuICAgICAgJ3JlbmRlckdsb2JhbHNOb2RlIHJlbmRlckluZm8gcmVuZGVyTGF5ZXJCdXR0b24gcmVuZGVyTGF5ZXJQYXJlbnQgJyArXG4gICAgICAncmVuZGVyTGF5ZXJQb3N0UHJvY2VzcyByZW5kZXJMYXllclVucGFyZW50IHJlbmRlck1hbmlwIHJlbmRlclBhcnRpdGlvbiAnICtcbiAgICAgICdyZW5kZXJRdWFsaXR5Tm9kZSByZW5kZXJTZXR0aW5ncyByZW5kZXJUaHVtYm5haWxVcGRhdGUgcmVuZGVyV2luZG93RWRpdG9yICcgK1xuICAgICAgJ3JlbmRlcldpbmRvd1NlbGVjdENvbnRleHQgcmVuZGVyZXIgcmVvcmRlciByZW9yZGVyRGVmb3JtZXJzIHJlcXVpcmVzIHJlcm9vdCAnICtcbiAgICAgICdyZXNhbXBsZUZsdWlkIHJlc2V0QUUgcmVzZXRQZnhUb1BvbHlDYW1lcmEgcmVzZXRUb29sIHJlc29sdXRpb25Ob2RlIHJldGFyZ2V0ICcgK1xuICAgICAgJ3JldmVyc2VDdXJ2ZSByZXZlcnNlU3VyZmFjZSByZXZvbHZlIHJnYl90b19oc3YgcmlnaWRCb2R5IHJpZ2lkU29sdmVyIHJvbGwgcm9sbEN0eCAnICtcbiAgICAgICdyb290T2Ygcm90IHJvdGF0ZSByb3RhdGlvbkludGVycG9sYXRpb24gcm91bmRDb25zdGFudFJhZGl1cyByb3dDb2x1bW5MYXlvdXQgcm93TGF5b3V0ICcgK1xuICAgICAgJ3J1blRpbWVDb21tYW5kIHJ1bnVwIHNhbXBsZUltYWdlIHNhdmVBbGxTaGVsdmVzIHNhdmVBdHRyUHJlc2V0IHNhdmVGbHVpZCBzYXZlSW1hZ2UgJyArXG4gICAgICAnc2F2ZUluaXRpYWxTdGF0ZSBzYXZlTWVudSBzYXZlUHJlZk9iamVjdHMgc2F2ZVByZWZzIHNhdmVTaGVsZiBzYXZlVG9vbFNldHRpbmdzIHNjYWxlICcgK1xuICAgICAgJ3NjYWxlQnJ1c2hCcmlnaHRuZXNzIHNjYWxlQ29tcG9uZW50cyBzY2FsZUNvbnN0cmFpbnQgc2NhbGVLZXkgc2NhbGVLZXlDdHggc2NlbmVFZGl0b3IgJyArXG4gICAgICAnc2NlbmVVSVJlcGxhY2VtZW50IHNjbWggc2NyaXB0Q3R4IHNjcmlwdEVkaXRvckluZm8gc2NyaXB0Sm9iIHNjcmlwdE5vZGUgc2NyaXB0VGFibGUgJyArXG4gICAgICAnc2NyaXB0VG9TaGVsZiBzY3JpcHRlZFBhbmVsIHNjcmlwdGVkUGFuZWxUeXBlIHNjcm9sbEZpZWxkIHNjcm9sbExheW91dCBzY3VscHQgJyArXG4gICAgICAnc2VhcmNoUGF0aEFycmF5IHNlZWQgc2VsTG9hZFNldHRpbmdzIHNlbGVjdCBzZWxlY3RDb250ZXh0IHNlbGVjdEN1cnZlQ1Ygc2VsZWN0S2V5ICcgK1xuICAgICAgJ3NlbGVjdEtleUN0eCBzZWxlY3RLZXlmcmFtZVJlZ2lvbkN0eCBzZWxlY3RNb2RlIHNlbGVjdFByZWYgc2VsZWN0UHJpb3JpdHkgc2VsZWN0VHlwZSAnICtcbiAgICAgICdzZWxlY3RlZE5vZGVzIHNlbGVjdGlvbkNvbm5lY3Rpb24gc2VwYXJhdG9yIHNldEF0dHIgc2V0QXR0ckVudW1SZXNvdXJjZSAnICtcbiAgICAgICdzZXRBdHRyTWFwcGluZyBzZXRBdHRyTmljZU5hbWVSZXNvdXJjZSBzZXRDb25zdHJhaW50UmVzdFBvc2l0aW9uICcgK1xuICAgICAgJ3NldERlZmF1bHRTaGFkaW5nR3JvdXAgc2V0RHJpdmVuS2V5ZnJhbWUgc2V0RHluYW1pYyBzZXRFZGl0Q3R4IHNldEVkaXRvciBzZXRGbHVpZEF0dHIgJyArXG4gICAgICAnc2V0Rm9jdXMgc2V0SW5maW5pdHkgc2V0SW5wdXREZXZpY2VNYXBwaW5nIHNldEtleUN0eCBzZXRLZXlQYXRoIHNldEtleWZyYW1lICcgK1xuICAgICAgJ3NldEtleWZyYW1lQmxlbmRzaGFwZVRhcmdldFd0cyBzZXRNZW51TW9kZSBzZXROb2RlTmljZU5hbWVSZXNvdXJjZSBzZXROb2RlVHlwZUZsYWcgJyArXG4gICAgICAnc2V0UGFyZW50IHNldFBhcnRpY2xlQXR0ciBzZXRQZnhUb1BvbHlDYW1lcmEgc2V0UGx1Z2luUmVzb3VyY2Ugc2V0UHJvamVjdCAnICtcbiAgICAgICdzZXRTdGFtcERlbnNpdHkgc2V0U3RhcnR1cE1lc3NhZ2Ugc2V0U3RhdGUgc2V0VG9vbFRvIHNldFVJVGVtcGxhdGUgc2V0WGZvcm1NYW5pcCBzZXRzICcgK1xuICAgICAgJ3NoYWRpbmdDb25uZWN0aW9uIHNoYWRpbmdHZW9tZXRyeVJlbEN0eCBzaGFkaW5nTGlnaHRSZWxDdHggc2hhZGluZ05ldHdvcmtDb21wYXJlICcgK1xuICAgICAgJ3NoYWRpbmdOb2RlIHNoYXBlQ29tcGFyZSBzaGVsZkJ1dHRvbiBzaGVsZkxheW91dCBzaGVsZlRhYkxheW91dCBzaGVsbEZpZWxkICcgK1xuICAgICAgJ3Nob3J0TmFtZU9mIHNob3dIZWxwIHNob3dIaWRkZW4gc2hvd01hbmlwQ3R4IHNob3dTZWxlY3Rpb25JblRpdGxlICcgK1xuICAgICAgJ3Nob3dTaGFkaW5nR3JvdXBBdHRyRWRpdG9yIHNob3dXaW5kb3cgc2lnbiBzaW1wbGlmeSBzaW4gc2luZ2xlUHJvZmlsZUJpcmFpbFN1cmZhY2UgJyArXG4gICAgICAnc2l6ZSBzaXplQnl0ZXMgc2tpbkNsdXN0ZXIgc2tpblBlcmNlbnQgc21vb3RoQ3VydmUgc21vb3RoVGFuZ2VudFN1cmZhY2Ugc21vb3Roc3RlcCAnICtcbiAgICAgICdzbmFwMnRvMiBzbmFwS2V5IHNuYXBNb2RlIHNuYXBUb2dldGhlckN0eCBzbmFwc2hvdCBzb2Z0IHNvZnRNb2Qgc29mdE1vZEN0eCBzb3J0IHNvdW5kICcgK1xuICAgICAgJ3NvdW5kQ29udHJvbCBzb3VyY2Ugc3BhY2VMb2NhdG9yIHNwaGVyZSBzcGhyYW5kIHNwb3RMaWdodCBzcG90TGlnaHRQcmV2aWV3UG9ydCAnICtcbiAgICAgICdzcHJlYWRTaGVldEVkaXRvciBzcHJpbmcgc3FydCBzcXVhcmVTdXJmYWNlIHNydENvbnRleHQgc3RhY2tUcmFjZSBzdGFydFN0cmluZyAnICtcbiAgICAgICdzdGFydHNXaXRoIHN0aXRjaEFuZEV4cGxvZGVTaGVsbCBzdGl0Y2hTdXJmYWNlIHN0aXRjaFN1cmZhY2VQb2ludHMgc3RyY21wICcgK1xuICAgICAgJ3N0cmluZ0FycmF5Q2F0ZW5hdGUgc3RyaW5nQXJyYXlDb250YWlucyBzdHJpbmdBcnJheUNvdW50IHN0cmluZ0FycmF5SW5zZXJ0QXRJbmRleCAnICtcbiAgICAgICdzdHJpbmdBcnJheUludGVyc2VjdG9yIHN0cmluZ0FycmF5UmVtb3ZlIHN0cmluZ0FycmF5UmVtb3ZlQXRJbmRleCAnICtcbiAgICAgICdzdHJpbmdBcnJheVJlbW92ZUR1cGxpY2F0ZXMgc3RyaW5nQXJyYXlSZW1vdmVFeGFjdCBzdHJpbmdBcnJheVRvU3RyaW5nICcgK1xuICAgICAgJ3N0cmluZ1RvU3RyaW5nQXJyYXkgc3RyaXAgc3RyaXBQcmVmaXhGcm9tTmFtZSBzdHJva2Ugc3ViZEF1dG9Qcm9qZWN0aW9uICcgK1xuICAgICAgJ3N1YmRDbGVhblRvcG9sb2d5IHN1YmRDb2xsYXBzZSBzdWJkRHVwbGljYXRlQW5kQ29ubmVjdCBzdWJkRWRpdFVWICcgK1xuICAgICAgJ3N1YmRMaXN0Q29tcG9uZW50Q29udmVyc2lvbiBzdWJkTWFwQ3V0IHN1YmRNYXBTZXdNb3ZlIHN1YmRNYXRjaFRvcG9sb2d5IHN1YmRNaXJyb3IgJyArXG4gICAgICAnc3ViZFRvQmxpbmQgc3ViZFRvUG9seSBzdWJkVHJhbnNmZXJVVnNUb0NhY2hlIHN1YmRpdiBzdWJkaXZDcmVhc2UgJyArXG4gICAgICAnc3ViZGl2RGlzcGxheVNtb290aG5lc3Mgc3Vic3RpdHV0ZSBzdWJzdGl0dXRlQWxsU3RyaW5nIHN1YnN0aXR1dGVHZW9tZXRyeSBzdWJzdHJpbmcgJyArXG4gICAgICAnc3VyZmFjZSBzdXJmYWNlU2FtcGxlciBzdXJmYWNlU2hhZGVyTGlzdCBzd2F0Y2hEaXNwbGF5UG9ydCBzd2l0Y2hUYWJsZSBzeW1ib2xCdXR0b24gJyArXG4gICAgICAnc3ltYm9sQ2hlY2tCb3ggc3lzRmlsZSBzeXN0ZW0gdGFiTGF5b3V0IHRhbiB0YW5nZW50Q29uc3RyYWludCB0ZXhMYXR0aWNlRGVmb3JtQ29udGV4dCAnICtcbiAgICAgICd0ZXhNYW5pcENvbnRleHQgdGV4TW92ZUNvbnRleHQgdGV4TW92ZVVWU2hlbGxDb250ZXh0IHRleFJvdGF0ZUNvbnRleHQgdGV4U2NhbGVDb250ZXh0ICcgK1xuICAgICAgJ3RleFNlbGVjdENvbnRleHQgdGV4U2VsZWN0U2hvcnRlc3RQYXRoQ3R4IHRleFNtdWRnZVVWQ29udGV4dCB0ZXhXaW5Ub29sQ3R4IHRleHQgJyArXG4gICAgICAndGV4dEN1cnZlcyB0ZXh0RmllbGQgdGV4dEZpZWxkQnV0dG9uR3JwIHRleHRGaWVsZEdycCB0ZXh0TWFuaXAgdGV4dFNjcm9sbExpc3QgJyArXG4gICAgICAndGV4dFRvU2hlbGYgdGV4dHVyZURpc3BsYWNlUGxhbmUgdGV4dHVyZUhhaXJDb2xvciB0ZXh0dXJlUGxhY2VtZW50Q29udGV4dCAnICtcbiAgICAgICd0ZXh0dXJlV2luZG93IHRocmVhZENvdW50IHRocmVlUG9pbnRBcmNDdHggdGltZUNvbnRyb2wgdGltZVBvcnQgdGltZXJYIHRvTmF0aXZlUGF0aCAnICtcbiAgICAgICd0b2dnbGUgdG9nZ2xlQXhpcyB0b2dnbGVXaW5kb3dWaXNpYmlsaXR5IHRva2VuaXplIHRva2VuaXplTGlzdCB0b2xlcmFuY2UgdG9sb3dlciAnICtcbiAgICAgICd0b29sQnV0dG9uIHRvb2xDb2xsZWN0aW9uIHRvb2xEcm9wcGVkIHRvb2xIYXNPcHRpb25zIHRvb2xQcm9wZXJ0eVdpbmRvdyB0b3J1cyB0b3VwcGVyICcgK1xuICAgICAgJ3RyYWNlIHRyYWNrIHRyYWNrQ3R4IHRyYW5zZmVyQXR0cmlidXRlcyB0cmFuc2Zvcm1Db21wYXJlIHRyYW5zZm9ybUxpbWl0cyB0cmFuc2xhdG9yICcgK1xuICAgICAgJ3RyaW0gdHJ1bmMgdHJ1bmNhdGVGbHVpZENhY2hlIHRydW5jYXRlSGFpckNhY2hlIHR1bWJsZSB0dW1ibGVDdHggdHVyYnVsZW5jZSAnICtcbiAgICAgICd0d29Qb2ludEFyY0N0eCB1aVJlcyB1aVRlbXBsYXRlIHVuYXNzaWduSW5wdXREZXZpY2UgdW5kbyB1bmRvSW5mbyB1bmdyb3VwIHVuaWZvcm0gdW5pdCAnICtcbiAgICAgICd1bmxvYWRQbHVnaW4gdW50YW5nbGVVViB1bnRpdGxlZEZpbGVOYW1lIHVudHJpbSB1cEF4aXMgdXBkYXRlQUUgdXNlckN0eCB1dkxpbmsgJyArXG4gICAgICAndXZTbmFwc2hvdCB2YWxpZGF0ZVNoZWxmTmFtZSB2ZWN0b3JpemUgdmlldzJkVG9vbEN0eCB2aWV3Q2FtZXJhIHZpZXdDbGlwUGxhbmUgJyArXG4gICAgICAndmlld0ZpdCB2aWV3SGVhZE9uIHZpZXdMb29rQXQgdmlld01hbmlwIHZpZXdQbGFjZSB2aWV3U2V0IHZpc29yIHZvbHVtZUF4aXMgdm9ydGV4ICcgK1xuICAgICAgJ3dhaXRDdXJzb3Igd2FybmluZyB3ZWJCcm93c2VyIHdlYkJyb3dzZXJQcmVmcyB3aGF0SXMgd2luZG93IHdpbmRvd1ByZWYgd2lyZSAnICtcbiAgICAgICd3aXJlQ29udGV4dCB3b3Jrc3BhY2Ugd3JpbmtsZSB3cmlua2xlQ29udGV4dCB3cml0ZVRha2UgeGJtTGFuZ1BhdGhMaXN0IHhmb3JtJyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAgeyAvLyBlYXRzIHZhcmlhYmxlc1xuICAgICAgICBiZWdpbjogJ1tcXFxcJFxcXFwlXFxcXEBdKFxcXFxeXFxcXHdcXFxcYnwjXFxcXHcrfFteXFxcXHNcXFxcd3tdfHtcXFxcdyt9fFxcXFx3KyknXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ21vZHVsZSB1c2VfbW9kdWxlIGltcG9ydF9tb2R1bGUgaW5jbHVkZV9tb2R1bGUgZW5kX21vZHVsZSBpbml0aWFsaXNlICcgK1xuICAgICAgJ211dGFibGUgaW5pdGlhbGl6ZSBmaW5hbGl6ZSBmaW5hbGlzZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gcHJlZCAnICtcbiAgICAgICdtb2RlIGZ1bmMgdHlwZSBpbnN0IHNvbHZlciBhbnlfcHJlZCBhbnlfZnVuYyBpcyBzZW1pZGV0IGRldCBub25kZXQgJyArXG4gICAgICAnbXVsdGkgZXJyb25lb3VzIGZhaWx1cmUgY2Nfbm9uZGV0IGNjX211bHRpIHR5cGVjbGFzcyBpbnN0YW5jZSB3aGVyZSAnICtcbiAgICAgICdwcmFnbWEgcHJvbWlzZSBleHRlcm5hbCB0cmFjZSBhdG9taWMgb3JfZWxzZSByZXF1aXJlX2NvbXBsZXRlX3N3aXRjaCAnICtcbiAgICAgICdyZXF1aXJlX2RldCByZXF1aXJlX3NlbWlkZXQgcmVxdWlyZV9tdWx0aSByZXF1aXJlX25vbmRldCAnICtcbiAgICAgICdyZXF1aXJlX2NjX211bHRpIHJlcXVpcmVfY2Nfbm9uZGV0IHJlcXVpcmVfZXJyb25lb3VzIHJlcXVpcmVfZmFpbHVyZScsXG4gICAgbWV0YTpcbiAgICAgIC8vIHByYWdtYVxuICAgICAgJ2lubGluZSBub19pbmxpbmUgdHlwZV9zcGVjIHNvdXJjZV9maWxlIGZhY3RfdGFibGUgb2Jzb2xldGUgbWVtbyAnICtcbiAgICAgICdsb29wX2NoZWNrIG1pbmltYWxfbW9kZWwgdGVybWluYXRlcyBkb2VzX25vdF90ZXJtaW5hdGUgJyArXG4gICAgICAnY2hlY2tfdGVybWluYXRpb24gcHJvbWlzZV9lcXVpdmFsZW50X2NsYXVzZXMgJyArXG4gICAgICAvLyBwcmVwcm9jZXNzb3JcbiAgICAgICdmb3JlaWduX3Byb2MgZm9yZWlnbl9kZWNsIGZvcmVpZ25fY29kZSBmb3JlaWduX3R5cGUgJyArXG4gICAgICAnZm9yZWlnbl9pbXBvcnRfbW9kdWxlIGZvcmVpZ25fZXhwb3J0X2VudW0gZm9yZWlnbl9leHBvcnQgJyArXG4gICAgICAnZm9yZWlnbl9lbnVtIG1heV9jYWxsX21lcmN1cnkgd2lsbF9ub3RfY2FsbF9tZXJjdXJ5IHRocmVhZF9zYWZlICcgK1xuICAgICAgJ25vdF90aHJlYWRfc2FmZSBtYXliZV90aHJlYWRfc2FmZSBwcm9taXNlX3B1cmUgcHJvbWlzZV9zZW1pcHVyZSAnICtcbiAgICAgICd0YWJsZWRfZm9yX2lvIGxvY2FsIHVudHJhaWxlZCB0cmFpbGVkIGF0dGFjaF90b19pb19zdGF0ZSAnICtcbiAgICAgICdjYW5fcGFzc19hc19tZXJjdXJ5X3R5cGUgc3RhYmxlIHdpbGxfbm90X3Rocm93X2V4Y2VwdGlvbiAnICtcbiAgICAgICdtYXlfbW9kaWZ5X3RyYWlsIHdpbGxfbm90X21vZGlmeV90cmFpbCBtYXlfZHVwbGljYXRlICcgK1xuICAgICAgJ21heV9ub3RfZHVwbGljYXRlIGFmZmVjdHNfbGl2ZW5lc3MgZG9lc19ub3RfYWZmZWN0X2xpdmVuZXNzICcgK1xuICAgICAgJ2RvZXNudF9hZmZlY3RfbGl2ZW5lc3Mgbm9fc2hhcmluZyB1bmtub3duX3NoYXJpbmcgc2hhcmluZycsXG4gICAgYnVpbHRfaW46XG4gICAgICAnc29tZSBhbGwgbm90IGlmIHRoZW4gZWxzZSB0cnVlIGZhaWwgZmFsc2UgdHJ5IGNhdGNoIGNhdGNoX2FueSAnICtcbiAgICAgICdzZW1pZGV0X3RydWUgc2VtaWRldF9mYWxzZSBzZW1pZGV0X2ZhaWwgaW1wdXJlX3RydWUgaW1wdXJlIHNlbWlwdXJlJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKCclJywgJyQnKTtcblxuICB2YXIgTlVNQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBcIjAnLlxcXFx8MFtib3hdWzAtOWEtZkEtRl0qXCJcbiAgfTtcblxuICB2YXIgQVRPTSA9IGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtyZWxldmFuY2U6IDB9KTtcbiAgdmFyIFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7cmVsZXZhbmNlOiAwfSk7XG4gIHZhciBTVFJJTkdfRk1UID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFxcXFxcW2FiZm5ydHZdXFxcXHxcXFxcXFxcXHhbMC05YS1mQS1GXSpcXFxcXFxcXFxcXFx8JVstKyMgKi4wLTldKltkaW94WHVjc2ZlRWdHcF0nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBTVFJJTkcuY29udGFpbnMgPSBTVFJJTkcuY29udGFpbnMuc2xpY2UoKSAvLyB3ZSBuZWVkIG91ciBvd24gY29weSBvZiBjb250YWluc1xuICBTVFJJTkcuY29udGFpbnMucHVzaChTVFJJTkdfRk1UKTtcblxuICB2YXIgSU1QTElDQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICc8PT4nfSxcbiAgICAgIHtiZWdpbjogJzw9JywgcmVsZXZhbmNlOiAwfSxcbiAgICAgIHtiZWdpbjogJz0+JywgcmVsZXZhbmNlOiAwfSxcbiAgICAgIHtiZWdpbjogJy9cXFxcXFxcXCd9LFxuICAgICAge2JlZ2luOiAnXFxcXFxcXFwvJ31cbiAgICBdXG4gIH07XG5cbiAgdmFyIEhFQURfQk9EWV9DT05KVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJzotXFxcXHwtLT4nfSxcbiAgICAgIHtiZWdpbjogJz0nLCByZWxldmFuY2U6IDB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtJywgJ21vbyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgSU1QTElDQVRJT04sXG4gICAgICBIRUFEX0JPRFlfQ09OSlVOQ1RJT04sXG4gICAgICBDT01NRU5ULFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIE5VTUNPREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgQVRPTSxcbiAgICAgIFNUUklORyxcbiAgICAgIHtiZWdpbjogLzotL30sIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB7YmVnaW46IC9cXC4kL30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIC8vbG9jYWwgbGFiZWxzOiAlP1tGQl0/W0FUXT9cXGR7MSwyfVxcdytcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsnbWlwcyddLFxuICAgIGxleGVtZXM6ICdcXFxcLj8nICsgaGxqcy5JREVOVF9SRSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbWV0YTpcbiAgICAgICAgLy9HTlUgcHJlcHJvY3NcbiAgICAgICAgJy4yYnl0ZSAuNGJ5dGUgLmFsaWduIC5hc2NpaSAuYXNjaXogLmJhbGlnbiAuYnl0ZSAuY29kZSAuZGF0YSAuZWxzZSAuZW5kIC5lbmRpZiAuZW5kbSAuZW5kciAuZXF1IC5lcnIgLmV4aXRtIC5leHRlcm4gLmdsb2JhbCAuaHdvcmQgLmlmIC5pZmRlZiAuaWZuZGVmIC5pbmNsdWRlIC5pcnAgLmxvbmcgLm1hY3JvIC5yZXB0IC5yZXEgLnNlY3Rpb24gLnNldCAuc2tpcCAuc3BhY2UgLnRleHQgLndvcmQgLmx0b3JnICcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJyQwICQxICQyICQzICQ0ICQ1ICQ2ICQ3ICQ4ICQ5ICQxMCAkMTEgJDEyICQxMyAkMTQgJDE1ICcgKyAvLyBpbnRlZ2VyIHJlZ2lzdGVyc1xuICAgICAgICAnJDE2ICQxNyAkMTggJDE5ICQyMCAkMjEgJDIyICQyMyAkMjQgJDI1ICQyNiAkMjcgJDI4ICQyOSAkMzAgJDMxICcgKyAvLyBpbnRlZ2VyIHJlZ2lzdGVyc1xuICAgICAgICAnemVybyBhdCB2MCB2MSBhMCBhMSBhMiBhMyBhNCBhNSBhNiBhNyAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICd0MCB0MSB0MiB0MyB0NCB0NSB0NiB0NyB0OCB0OSBzMCBzMSBzMiBzMyBzNCBzNSBzNiBzNyBzOCAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICdrMCBrMSBncCBzcCBmcCByYSAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICckZjAgJGYxICRmMiAkZjIgJGY0ICRmNSAkZjYgJGY3ICRmOCAkZjkgJGYxMCAkZjExICRmMTIgJGYxMyAkZjE0ICRmMTUgJyArIC8vIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyc1xuICAgICAgICAnJGYxNiAkZjE3ICRmMTggJGYxOSAkZjIwICRmMjEgJGYyMiAkZjIzICRmMjQgJGYyNSAkZjI2ICRmMjcgJGYyOCAkZjI5ICRmMzAgJGYzMSAnICsgLy8gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzXG4gICAgICAgICdDb250ZXh0IFJhbmRvbSBFbnRyeUxvMCBFbnRyeUxvMSBDb250ZXh0IFBhZ2VNYXNrIFdpcmVkIEVudHJ5SGkgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdIV1JFbmEgQmFkVkFkZHIgQ291bnQgQ29tcGFyZSBTUiBJbnRDdGwgU1JTQ3RsIFNSU01hcCBDYXVzZSBFUEMgUFJJZCAnICsgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICAgICAgJ0VCYXNlIENvbmZpZyBDb25maWcxIENvbmZpZzIgQ29uZmlnMyBMTEFkZHIgRGVidWcgREVQQyBERVNBVkUgQ2FjaGVFcnIgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdFQ0MgRXJyb3JFUEMgVGFnTG8gRGF0YUxvIFRhZ0hpIERhdGFIaSBXYXRjaExvIFdhdGNoSGkgUGVyZkN0bCBQZXJmQ250ICcgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcrICAgICAvL21uZW1vbmljc1xuICAgICAgICAgICAgLy8gMzItYml0IGludGVnZXIgaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICAnYWRkaT91P3xhbmRpP3xiKGFsKT98YmVxbD98YmdleihhbCk/bD98Ymd0emw/fGJsZXpsP3xibHR6KGFsKT9sP3wnICtcbiAgICAgICAgICAgICdibmVsP3xjbFtvel18ZGl2dT98ZXh0fGluc3xqKGFsKT98amFscihcXC5oYik/fGpyKFxcLmhiKT98bGJ1P3xsaHU/fCcgK1xuICAgICAgICAgICAgJ2xsfGx1aXxsd1tscl0/fG1hZGR1P3xtZmhpfG1mbG98bW92bnxtb3Z6fG1vdmV8bXN1YnU/fG10aGl8bXRsb3xtdWx8JyArXG4gICAgICAgICAgICAnbXVsdHU/fG5vcHxub3J8b3JpP3xyb3Rydj98c2J8c2N8c2VbYmhdfHNofHNsbHY/fHNsdGk/dT98c3Jhdj98JyArXG4gICAgICAgICAgICAnc3Jsdj98c3VidT98c3dbbHJdP3x4b3JpP3x3c2JofCcgK1xuICAgICAgICAgICAgLy8gZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICAnYWJzXFwuW3NkXXxhZGRcXC5bc2RdfGFsbnYucHN8YmMxW2Z0XWw/fCcgK1xuICAgICAgICAgICAgJ2NcXC4ocz9mfHVufHU/ZXF8W291XWx0fFtvdV1sZXxuZ2xlP3xzZXF8bFtldF18bmdbZXRdKVxcLltzZF18JyArXG4gICAgICAgICAgICAnKGNlaWx8Zmxvb3J8cm91bmR8dHJ1bmMpXFwuW2x3XVxcLltzZF18Y2ZjMXxjdnRcXC5kXFwuW2xzd118JyArXG4gICAgICAgICAgICAnY3Z0XFwubFxcLltkc3ddfGN2dFxcLnBzXFwuc3xjdnRcXC5zXFwuW2Rsd118Y3Z0XFwuc1xcLnBbbHVdfGN2dFxcLndcXC5bZGxzXXwnICtcbiAgICAgICAgICAgICdkaXZcXC5bZHNdfGxkeD9jMXxsdXhjMXxsd3g/YzF8bWFkZFxcLltzZF18bWZjMXxtb3ZbZm50el0/XFwuW2RzXXwnICtcbiAgICAgICAgICAgICdtc3ViXFwuW3NkXXxtdGg/YzF8bXVsXFwuW2RzXXxuZWdcXC5bZHNdfG5tYWRkXFwuW2RzXXxubXN1YlxcLltkc118JyArXG4gICAgICAgICAgICAncFtsdV1bbHVdXFwucHN8cmVjaXBcXC5mbXR8cj9zcXJ0XFwuW2RzXXxzZHg/YzF8c3ViXFwuW2RzXXxzdXhjMXwnICtcbiAgICAgICAgICAgICdzd3g/YzF8JyArXG4gICAgICAgICAgICAvLyBzeXN0ZW0gY29udHJvbCBpbnN0cnVjdGlvbnNcbiAgICAgICAgICAgICdicmVha3xjYWNoZXxkP2VyZXR8W2RlXWl8ZWhifG1mYzB8bXRjMHxwYXVzZXxwcmVmeD98cmRod3J8JyArXG4gICAgICAgICAgICAncmRwZ3ByfHNkYmJwfHNzbm9wfHN5bmNpP3xzeXNjYWxsfHRlcWk/fHRnZWk/dT98dGxiKHB8cnx3W2lyXSl8JyArXG4gICAgICAgICAgICAndGx0aT91P3x0bmVpP3x3YWl0fHdycGdwcicrXG4gICAgICAgICcpJyxcbiAgICAgICAgZW5kOiAnXFxcXHMnXG4gICAgICB9LFxuICAgICAgLy8gbGluZXMgZW5kaW5nIHdpdGggOyBvciAjIGFyZW4ndCByZWFsbHkgY29tbWVudHMsIHByb2JhYmx5IGF1dG8tZGV0ZWN0IGZhaWxcbiAgICAgIGhsanMuQ09NTUVOVCgnWzsjXSg/IVxccyokKScsICckJyksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdbXlxcXFxcXFxcXVxcJycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFx8JywgZW5kOiAnXFxcXHwnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7YmVnaW46ICcweFswLTlhLWZdKyd9LCAvL2hleFxuICAgICAgICAgICAge2JlZ2luOiAnXFxcXGItP1xcXFxkKyd9ICAgICAgICAgICAvL2JhcmUgbnVtYmVyXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJ15cXFxccypbYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSs6J30sIC8vR05VIE1JUFMgc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdeXFxcXHMqWzAtOV0rOid9LCAvLyBudW1iZXJlZCBsb2NhbCBsYWJlbHNcbiAgICAgICAgICAgIHtiZWdpbjogJ1swLTldK1tiZl0nIH0gIC8vIG51bWJlciBsb2NhbCBsYWJlbCByZWZlcmVuY2UgKGJhY2t3YXJkcywgZm9yd2FyZHMpXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogJ1xcLydcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6XG4gICAgICAnZW52aXJvbiB2b2NhYnVsYXJpZXMgbm90YXRpb25zIGNvbnN0cnVjdG9ycyBkZWZpbml0aW9ucyAnICtcbiAgICAgICdyZWdpc3RyYXRpb25zIHRoZW9yZW1zIHNjaGVtZXMgcmVxdWlyZW1lbnRzIGJlZ2luIGVuZCBkZWZpbml0aW9uICcgK1xuICAgICAgJ3JlZ2lzdHJhdGlvbiBjbHVzdGVyIGV4aXN0ZW5jZSBwcmVkIGZ1bmMgZGVmcHJlZCBkZWZmdW5jIHRoZW9yZW0gJyArXG4gICAgICAncHJvb2YgbGV0IHRha2UgYXNzdW1lIHRoZW4gdGh1cyBoZW5jZSBleCBmb3Igc3QgaG9sZHMgY29uc2lkZXIgJyArXG4gICAgICAncmVjb25zaWRlciBzdWNoIHRoYXQgYW5kIGluIHByb3ZpZGVkIG9mIGFzIGZyb20gYmUgYmVpbmcgYnkgbWVhbnMgJyArXG4gICAgICAnZXF1YWxzIGltcGxpZXMgaWZmIHJlZGVmaW5lIGRlZmluZSBub3cgbm90IG9yIGF0dHIgaXMgbW9kZSAnICtcbiAgICAgICdzdXBwb3NlIHBlciBjYXNlcyBzZXQgdGhlc2lzIGNvbnRyYWRpY3Rpb24gc2NoZW1lIHJlc2VydmUgc3RydWN0ICcgK1xuICAgICAgJ2NvcnJlY3RuZXNzIGNvbXBhdGliaWxpdHkgY29oZXJlbmNlIHN5bW1ldHJ5IGFzc3ltZXRyeSAnICtcbiAgICAgICdyZWZsZXhpdml0eSBpcnJlZmxleGl2aXR5IGNvbm5lY3RlZG5lc3MgdW5pcXVlbmVzcyBjb21tdXRhdGl2aXR5ICcgK1xuICAgICAgJ2lkZW1wb3RlbmNlIGludm9sdXRpdmVuZXNzIHByb2plY3Rpdml0eScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnOjonLCAnJCcpXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFBFUkxfS0VZV09SRFMgPSAnZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjICcgK1xuICAgICdtYSBzeXN3cml0ZSB0ciBzZW5kIHVtYXNrIHN5c29wZW4gc2htd3JpdGUgdmVjIHF4IHV0aW1lIGxvY2FsIG9jdCBzZW1jdGwgbG9jYWx0aW1lICcgK1xuICAgICdyZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXEnICtcbiAgICAnZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50ICcgK1xuICAgICdzaHV0ZG93biBkdW1wIGNob21wIGNvbm5lY3QgZ2V0c29ja25hbWUgZGllIHNvY2tldHBhaXIgY2xvc2UgZmxvY2sgZXhpc3RzIGluZGV4IHNobWdldCcgK1xuICAgICdzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyICcgK1xuICAgICd1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCAnICtcbiAgICAnZ2V0cGVlcm5hbWUgcmVjdiBsb2cgc2V0c29ja29wdCBjb3MgbGFzdCByZXZlcnNlIGdldGhvc3RieW5hbWUgZ2V0Z3JuYW0gc3R1ZHkgZm9ybWxpbmUgJyArXG4gICAgJ2VuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgJyArXG4gICAgJ21rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgJyArXG4gICAgJ2dldHNvY2tvcHQgZ2V0cHJpb3JpdHkgcmluZGV4IHdhbnRhcnJheSBoZXggc3lzdGVtIGdldHNlcnZieXBvcnQgZW5kc2VydmVudCBpbnQgY2hyICcgK1xuICAgICd1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgJyArXG4gICAgJ2dldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciAnICtcbiAgICAnbGNmaXJzdCB1bnRpbCB3YXJuIHdoaWxlIHZhbHVlcyBzaGlmdCB0ZWxsZGlyIGdldHB3dWlkIG15IGdldHByb3RvYnludW1iZXIgZGVsZXRlIGFuZCAnICtcbiAgICAnc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCAnICtcbiAgICAnY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoICcgK1xuICAgICd0aWUgc2luIG1zZ2dldCBtYXAgc3RhdCBnZXRsb2dpbiB1bmxlc3MgZWxzaWYgdHJ1bmNhdGUgZXhlYyBrZXlzIGdsb2IgdGllZCBjbG9zZWRpcicgK1xuICAgICdpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlICcgK1xuICAgICdhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbic7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdbJEBdXFxcXHsnLCBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IFBFUkxfS0VZV09SRFNcbiAgfTtcbiAgdmFyIE1FVEhPRCA9IHtcbiAgICBiZWdpbjogJy0+eycsIGVuZDogJ30nXG4gICAgLy8gY29udGFpbnMgZGVmaW5lZCBsYXRlclxuICB9O1xuICB2YXIgVkFSID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cXCRcXGQvfSxcbiAgICAgIHtiZWdpbjogL1tcXCQlQF0oXFxeXFx3XFxifCNcXHcrKDo6XFx3KykqfHtcXHcrfXxcXHcrKDo6XFx3KikqKS99LFxuICAgICAge2JlZ2luOiAvW1xcJCVAXVteXFxzXFx3e10vLCByZWxldmFuY2U6IDB9XG4gICAgXVxuICB9O1xuICB2YXIgU1RSSU5HX0NPTlRBSU5TID0gW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIFZBUl07XG4gIHZhciBQRVJMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJ15cXFxcPVxcXFx3JyxcbiAgICAgICdcXFxcPWN1dCcsXG4gICAgICB7XG4gICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlXG4gICAgICB9XG4gICAgKSxcbiAgICBNRVRIT0QsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGNvbnRhaW5zOiBTVFJJTkdfQ09OVEFJTlMsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx8JywgZW5kOiAnXFxcXHwnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFw8JywgZW5kOiAnXFxcXD4nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxd1xcXFxzK3EnLCBlbmQ6ICdxJyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICd7XFxcXHcrfScsXG4gICAgICAgICAgY29udGFpbnM6IFtdLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXC0/XFxcXHcrXFxcXHMqXFxcXD1cXFxcPicsXG4gICAgICAgICAgY29udGFpbnM6IFtdLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHsgLy8gcmVnZXhwIGNvbnRhaW5lclxuICAgICAgYmVnaW46ICcoXFxcXC9cXFxcL3wnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXFxcYilcXFxccyonLFxuICAgICAga2V5d29yZHM6ICdzcGxpdCByZXR1cm4gcHJpbnQgcmV2ZXJzZSBncmVwJyxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGJlZ2luOiAnKHN8dHJ8eSkvKFxcXFxcXFxcLnxbXi9dKSovKFxcXFxcXFxcLnxbXi9dKSovW2Etel0qJyxcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGJlZ2luOiAnKG18cXIpPy8nLCBlbmQ6ICcvW2Etel0qJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwIC8vIGFsbG93cyBlbXB0eSBcIi8vXCIgd2hpY2ggaXMgYSBjb21tb24gY29tbWVudCBkZWxpbWl0ZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdzdWInLCBlbmQ6ICcoXFxcXHMqXFxcXCguKj9cXFxcKSk/Wzt7XScsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDUsXG4gICAgICBjb250YWluczogW2hsanMuVElUTEVfTU9ERV1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLVxcXFx3XFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogXCJeX19EQVRBX18kXCIsXG4gICAgICBlbmQ6IFwiXl9fRU5EX18kXCIsXG4gICAgICBzdWJMYW5ndWFnZTogJ21vam9saWNpb3VzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcIl5AQC4qXCIsXG4gICAgICAgICAgICBlbmQ6IFwiJFwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFBFUkxfREVGQVVMVF9DT05UQUlOUztcbiAgTUVUSE9ELmNvbnRhaW5zID0gUEVSTF9ERUZBVUxUX0NPTlRBSU5TO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwbCcsICdwbSddLFxuICAgIGxleGVtZXM6IC9bXFx3XFwuXSsvLFxuICAgIGtleXdvcmRzOiBQRVJMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBQRVJMX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15fXyhFTkR8REFUQSlfXyQnXG4gICAgICB9LFxuICAgIC8vIG1vam9saWNpb3VzIGxpbmVcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXlxcXFxzKiV7MSwyfT17MCwyfVwiLCBlbmQ6ICckJyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwZXJsJ1xuICAgICAgfSxcbiAgICAvLyBtb2pvbGljaW91cyBibG9ja1xuICAgICAge1xuICAgICAgICBiZWdpbjogXCI8JXsxLDJ9PXswLDJ9XCIsXG4gICAgICAgIGVuZDogXCI9ezAsMX0lPlwiLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BlcmwnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1skXVthLWZBLUYwLTldKydcbiAgICAgIH0sXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ3B1YmxpYyBwcml2YXRlIHByb3BlcnR5IGNvbnRpbnVlIGV4aXQgZXh0ZXJuIG5ldyB0cnkgY2F0Y2ggJyArXG4gICAgICAgICdlYWNoaW4gbm90IGFic3RyYWN0IGZpbmFsIHNlbGVjdCBjYXNlIGRlZmF1bHQgY29uc3QgbG9jYWwgZ2xvYmFsIGZpZWxkICcgK1xuICAgICAgICAnZW5kIGlmIHRoZW4gZWxzZSBlbHNlaWYgZW5kaWYgd2hpbGUgd2VuZCByZXBlYXQgdW50aWwgZm9yZXZlciBmb3IgJyArXG4gICAgICAgICd0byBzdGVwIG5leHQgcmV0dXJuIG1vZHVsZSBpbmxpbmUgdGhyb3cgaW1wb3J0JyxcblxuICAgICAgYnVpbHRfaW46ICdEZWJ1Z0xvZyBEZWJ1Z1N0b3AgRXJyb3IgUHJpbnQgQUNvcyBBQ29zciBBU2luIEFTaW5yIEFUYW4gQVRhbjIgQVRhbjJyIEFUYW5yIEFicyBBYnMgQ2VpbCAnICtcbiAgICAgICAgJ0NsYW1wIENsYW1wIENvcyBDb3NyIEV4cCBGbG9vciBMb2cgTWF4IE1heCBNaW4gTWluIFBvdyBTZ24gU2duIFNpbiBTaW5yIFNxcnQgVGFuIFRhbnIgU2VlZCBQSSBIQUxGUEkgVFdPUEknLFxuXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxsIGFuZCBvciBzaGwgc2hyIG1vZCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJyNyZW0nLCAnI2VuZCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICBcIidcIixcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIG1ldGhvZCcsIGVuZDogJ1soPTpdfCQnLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKHNlbGZ8c3VwZXIpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxccyojJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmRpZiBlbmQgdGhlbid9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqc3RyaWN0XFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnYWxpYXMnLCBlbmQ6ICc9JyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgIC8vIE1vb25zY3JpcHQga2V5d29yZHNcbiAgICAgICdpZiB0aGVuIG5vdCBmb3IgaW4gd2hpbGUgZG8gcmV0dXJuIGVsc2UgZWxzZWlmIGJyZWFrIGNvbnRpbnVlIHN3aXRjaCBhbmQgb3IgJyArXG4gICAgICAndW5sZXNzIHdoZW4gY2xhc3MgZXh0ZW5kcyBzdXBlciBsb2NhbCBpbXBvcnQgZXhwb3J0IGZyb20gdXNpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ19HIF9WRVJTSU9OIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgJyArXG4gICAgICAnbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgJyArXG4gICAgICAnc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBjb3JvdXRpbmUgZGVidWcgJyArXG4gICAgICAnaW8gbWF0aCBvcyBwYWNrYWdlIHN0cmluZyB0YWJsZSdcbiAgfTtcbiAgdmFyIEpTX0lERU5UX1JFID0gJ1tBLVphLXokX11bMC05QS1aYS16JF9dKic7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LywgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge3N0YXJ0czoge2VuZDogJyhcXFxccyovKT8nLCByZWxldmFuY2U6IDB9fSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgIGJlZ2luOiAnQF9fJyArIGhsanMuSURFTlRfUkVcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBobGpzLklERU5UX1JFIC8vIHJlbGV2YW5jZSBib29zdGVyIG9uIHBhciB3aXRoIENvZmZlZVNjcmlwdFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnXFxcXFxcXFwnICsgaGxqcy5JREVOVF9SRSAvLyBpbnN0XFxtZXRob2RcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgdmFyIFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBKU19JREVOVF9SRX0pO1xuICB2YXIgUEFSQU1TX1JFID0gJyhcXFxcKC4qXFxcXCkpP1xcXFxzKlxcXFxCWy09XT4nO1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKFteXFxcXChdJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgLyogV2UgbmVlZCBhbm90aGVyIGNvbnRhaW5lZCBuYW1lbGVzcyBtb2RlIHRvIG5vdCBoYXZlIGV2ZXJ5IG5lc3RlZFxuICAgIHBhaXIgb2YgcGFyZW5zIHRvIGJlIGNhbGxlZCBcInBhcmFtc1wiICovXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICBjb250YWluczogWydzZWxmJ10uY29uY2F0KEVYUFJFU1NJT05TKVxuICAgIH1dXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21vb24nXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05TLmNvbmNhdChbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLCAgLy8gZnVuY3Rpb246IC0+ID0+XG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBBUkFNU19SRSwgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bXFwoLDo9XVxccyovLCAvLyBhbm9ueW1vdXMgZnVuY3Rpb24gc3RhcnRcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQQVJBTVNfUkUsIGVuZDogJ1stPV0+JyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtUSVRMRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLCAgICAvLyB0YWJsZVxuICAgICAgICBiZWdpbjogSlNfSURFTlRfUkUgKyAnOicsIGVuZDogJzonLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSwgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ2J1aWxkIGNyZWF0ZSBpbmRleCBkZWxldGUgZHJvcCBleHBsYWluIGluZmVyfDEwIGluc2VydCBtZXJnZSBwcmVwYXJlIHNlbGVjdCB1cGRhdGUgdXBzZXJ0fDEwJyxcbiAgICAgICAgZW5kOiAvOy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWxcbiAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2FsbCBhbHRlciBhbmFseXplIGFuZCBhbnkgYXJyYXkgYXMgYXNjIGJlZ2luIGJldHdlZW4gYmluYXJ5IGJvb2xlYW4gYnJlYWsgYnVja2V0IGJ1aWxkIGJ5IGNhbGwgJyArXG4gICAgICAgICAgICAnY2FzZSBjYXN0IGNsdXN0ZXIgY29sbGF0ZSBjb2xsZWN0aW9uIGNvbW1pdCBjb25uZWN0IGNvbnRpbnVlIGNvcnJlbGF0ZSBjb3ZlciBjcmVhdGUgZGF0YWJhc2UgJyArXG4gICAgICAgICAgICAnZGF0YXNldCBkYXRhc3RvcmUgZGVjbGFyZSBkZWNyZW1lbnQgZGVsZXRlIGRlcml2ZWQgZGVzYyBkZXNjcmliZSBkaXN0aW5jdCBkbyBkcm9wIGVhY2ggZWxlbWVudCAnICtcbiAgICAgICAgICAgICdlbHNlIGVuZCBldmVyeSBleGNlcHQgZXhjbHVkZSBleGVjdXRlIGV4aXN0cyBleHBsYWluIGZldGNoIGZpcnN0IGZsYXR0ZW4gZm9yIGZvcmNlIGZyb20gJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gZ3JhbnQgZ3JvdXAgZ3NpIGhhdmluZyBpZiBpZ25vcmUgaWxpa2UgaW4gaW5jbHVkZSBpbmNyZW1lbnQgaW5kZXggaW5mZXIgaW5saW5lIGlubmVyICcgK1xuICAgICAgICAgICAgJ2luc2VydCBpbnRlcnNlY3QgaW50byBpcyBqb2luIGtleSBrZXlzIGtleXNwYWNlIGtub3duIGxhc3QgbGVmdCBsZXQgbGV0dGluZyBsaWtlIGxpbWl0IGxzbSBtYXAgJyArXG4gICAgICAgICAgICAnbWFwcGluZyBtYXRjaGVkIG1hdGVyaWFsaXplZCBtZXJnZSBtaW51cyBuYW1lc3BhY2UgbmVzdCBub3QgbnVtYmVyIG9iamVjdCBvZmZzZXQgb24gJyArXG4gICAgICAgICAgICAnb3B0aW9uIG9yIG9yZGVyIG91dGVyIG92ZXIgcGFyc2UgcGFydGl0aW9uIHBhc3N3b3JkIHBhdGggcG9vbCBwcmVwYXJlIHByaW1hcnkgcHJpdmF0ZSBwcml2aWxlZ2UgJyArXG4gICAgICAgICAgICAncHJvY2VkdXJlIHB1YmxpYyByYXcgcmVhbG0gcmVkdWNlIHJlbmFtZSByZXR1cm4gcmV0dXJuaW5nIHJldm9rZSByaWdodCByb2xlIHJvbGxiYWNrIHNhdGlzZmllcyAnICtcbiAgICAgICAgICAgICdzY2hlbWEgc2VsZWN0IHNlbGYgc2VtaSBzZXQgc2hvdyBzb21lIHN0YXJ0IHN0YXRpc3RpY3Mgc3RyaW5nIHN5c3RlbSB0aGVuIHRvIHRyYW5zYWN0aW9uIHRyaWdnZXIgJyArXG4gICAgICAgICAgICAndHJ1bmNhdGUgdW5kZXIgdW5pb24gdW5pcXVlIHVua25vd24gdW5uZXN0IHVuc2V0IHVwZGF0ZSB1cHNlcnQgdXNlIHVzZXIgdXNpbmcgdmFsaWRhdGUgdmFsdWUgJyArXG4gICAgICAgICAgICAndmFsdWVkIHZhbHVlcyB2aWEgdmlldyB3aGVuIHdoZXJlIHdoaWxlIHdpdGggd2l0aGluIHdvcmsgeG9yJyxcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9saXRlcmFscy5odG1sXG4gICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICd0cnVlIGZhbHNlIG51bGwgbWlzc2luZ3w1JyxcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9mdW5jdGlvbnMuaHRtbFxuICAgICAgICAgIGJ1aWx0X2luOlxuICAgICAgICAgICAgJ2FycmF5X2FnZyBhcnJheV9hcHBlbmQgYXJyYXlfY29uY2F0IGFycmF5X2NvbnRhaW5zIGFycmF5X2NvdW50IGFycmF5X2Rpc3RpbmN0IGFycmF5X2lmbnVsbCBhcnJheV9sZW5ndGggJyArXG4gICAgICAgICAgICAnYXJyYXlfbWF4IGFycmF5X21pbiBhcnJheV9wb3NpdGlvbiBhcnJheV9wcmVwZW5kIGFycmF5X3B1dCBhcnJheV9yYW5nZSBhcnJheV9yZW1vdmUgYXJyYXlfcmVwZWF0IGFycmF5X3JlcGxhY2UgJyArXG4gICAgICAgICAgICAnYXJyYXlfcmV2ZXJzZSBhcnJheV9zb3J0IGFycmF5X3N1bSBhdmcgY291bnQgbWF4IG1pbiBzdW0gZ3JlYXRlc3QgbGVhc3QgaWZtaXNzaW5nIGlmbWlzc2luZ29ybnVsbCBpZm51bGwgJyArXG4gICAgICAgICAgICAnbWlzc2luZ2lmIG51bGxpZiBpZmluZiBpZm5hbiBpZm5hbm9yaW5mIG5hbmluZiBuZWdpbmZpZiBwb3NpbmZpZiBjbG9ja19taWxsaXMgY2xvY2tfc3RyIGRhdGVfYWRkX21pbGxpcyAnICtcbiAgICAgICAgICAgICdkYXRlX2FkZF9zdHIgZGF0ZV9kaWZmX21pbGxpcyBkYXRlX2RpZmZfc3RyIGRhdGVfcGFydF9taWxsaXMgZGF0ZV9wYXJ0X3N0ciBkYXRlX3RydW5jX21pbGxpcyBkYXRlX3RydW5jX3N0ciAnICtcbiAgICAgICAgICAgICdkdXJhdGlvbl90b19zdHIgbWlsbGlzIHN0cl90b19taWxsaXMgbWlsbGlzX3RvX3N0ciBtaWxsaXNfdG9fdXRjIG1pbGxpc190b196b25lX25hbWUgbm93X21pbGxpcyBub3dfc3RyICcgK1xuICAgICAgICAgICAgJ3N0cl90b19kdXJhdGlvbiBzdHJfdG9fdXRjIHN0cl90b196b25lX25hbWUgZGVjb2RlX2pzb24gZW5jb2RlX2pzb24gZW5jb2RlZF9zaXplIHBvbHlfbGVuZ3RoIGJhc2U2NCBiYXNlNjRfZW5jb2RlICcgK1xuICAgICAgICAgICAgJ2Jhc2U2NF9kZWNvZGUgbWV0YSB1dWlkIGFicyBhY29zIGFzaW4gYXRhbiBhdGFuMiBjZWlsIGNvcyBkZWdyZWVzIGUgZXhwIGxuIGxvZyBmbG9vciBwaSBwb3dlciByYWRpYW5zIHJhbmRvbSAnICtcbiAgICAgICAgICAgICdyb3VuZCBzaWduIHNpbiBzcXJ0IHRhbiB0cnVuYyBvYmplY3RfbGVuZ3RoIG9iamVjdF9uYW1lcyBvYmplY3RfcGFpcnMgb2JqZWN0X2lubmVyX3BhaXJzIG9iamVjdF92YWx1ZXMgJyArXG4gICAgICAgICAgICAnb2JqZWN0X2lubmVyX3ZhbHVlcyBvYmplY3RfYWRkIG9iamVjdF9wdXQgb2JqZWN0X3JlbW92ZSBvYmplY3RfdW53cmFwIHJlZ2V4cF9jb250YWlucyByZWdleHBfbGlrZSByZWdleHBfcG9zaXRpb24gJyArXG4gICAgICAgICAgICAncmVnZXhwX3JlcGxhY2UgY29udGFpbnMgaW5pdGNhcCBsZW5ndGggbG93ZXIgbHRyaW0gcG9zaXRpb24gcmVwZWF0IHJlcGxhY2UgcnRyaW0gc3BsaXQgc3Vic3RyIHRpdGxlIHRyaW0gdXBwZXIgJyArXG4gICAgICAgICAgICAnaXNhcnJheSBpc2F0b20gaXNib29sZWFuIGlzbnVtYmVyIGlzb2JqZWN0IGlzc3RyaW5nIHR5cGUgdG9hcnJheSB0b2F0b20gdG9ib29sZWFuIHRvbnVtYmVyIHRvb2JqZWN0IHRvc3RyaW5nJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFxcZCsvfSxcbiAgICAgIHtiZWdpbjogL1xcJFxcey8sIGVuZDogL30vfSxcbiAgICAgIHtiZWdpbjogJ1tcXFxcJFxcXFxAXScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkV9XG4gICAgXVxuICB9O1xuICB2YXIgREVGQVVMVCA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnW2Etei9fXSsnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnb24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgJyArXG4gICAgICAgICdzZWxlY3QgYnJlYWsgbGFzdCBwZXJtYW5lbnQgcmVkaXJlY3Qga3F1ZXVlIHJ0c2lnIGVwb2xsIHBvbGwgL2Rldi9wb2xsJ1xuICAgIH0sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGlsbGVnYWw6ICc9PicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBWQVJdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyB0aGlzIHN3YWxsb3dzIGVudGlyZSBVUkxzIHRvIGF2b2lkIGRldGVjdGluZyBudW1iZXJzIHdpdGhpblxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhbYS16XSspOi8nLCBlbmQ6ICdcXFxccycsIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1ZBUl1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBWQVJdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogXCJcXFxcc1xcXFxeXCIsIGVuZDogXCJcXFxcc3x7fDtcIiwgcmV0dXJuRW5kOiB0cnVlfSxcbiAgICAgICAgICAvLyByZWdleHAgbG9jYXRpb25zICh+LCB+KilcbiAgICAgICAgICB7YmVnaW46IFwiflxcXFwqP1xcXFxzK1wiLCBlbmQ6IFwiXFxcXHN8e3w7XCIsIHJldHVybkVuZDogdHJ1ZX0sXG4gICAgICAgICAgLy8gKi5leGFtcGxlLmNvbVxuICAgICAgICAgIHtiZWdpbjogXCJcXFxcKihcXFxcLlthLXpcXFxcLV0rKStcIn0sXG4gICAgICAgICAgLy8gc3ViLmV4YW1wbGUuKlxuICAgICAgICAgIHtiZWdpbjogXCIoW2EtelxcXFwtXStcXFxcLikrXFxcXCpcIn1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIElQXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZHsxLDV9KT9cXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyB1bml0c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrW2tLbU1nR2RzaGR3eV0qXFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBWQVJcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ25naW54Y29uZiddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzK3snLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMnLCBlbmQ6ICc7fHsnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgICAgIHN0YXJ0czogREVGQVVMVFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnW15cXFxcc1xcXFx9XSdcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyduaW0nXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FkZHIgYW5kIGFzIGFzbSBiaW5kIGJsb2NrIGJyZWFrIGNhc2UgY2FzdCBjb25zdCBjb250aW51ZSBjb252ZXJ0ZXIgJyArXG4gICAgICAgICdkaXNjYXJkIGRpc3RpbmN0IGRpdiBkbyBlbGlmIGVsc2UgZW5kIGVudW0gZXhjZXB0IGV4cG9ydCBmaW5hbGx5ICcgK1xuICAgICAgICAnZm9yIGZyb20gZ2VuZXJpYyBpZiBpbXBvcnQgaW4gaW5jbHVkZSBpbnRlcmZhY2UgaXMgaXNub3QgaXRlcmF0b3IgJyArXG4gICAgICAgICdsZXQgbWFjcm8gbWV0aG9kIG1peGluIG1vZCBuaWwgbm90IG5vdGluIG9iamVjdCBvZiBvciBvdXQgcHJvYyBwdHIgJyArXG4gICAgICAgICdyYWlzZSByZWYgcmV0dXJuIHNobCBzaHIgc3RhdGljIHRlbXBsYXRlIHRyeSB0dXBsZSB0eXBlIHVzaW5nIHZhciAnICtcbiAgICAgICAgJ3doZW4gd2hpbGUgd2l0aCB3aXRob3V0IHhvciB5aWVsZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnc2hhcmVkIGd1YXJkZWQgc3RkaW4gc3Rkb3V0IHN0ZGVyciByZXN1bHQgdHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2ludCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQgZmxvYXQgJyArXG4gICAgICAgICdmbG9hdDMyIGZsb2F0NjQgYm9vbCBjaGFyIHN0cmluZyBjc3RyaW5nIHBvaW50ZXIgZXhwciBzdG10IHZvaWQgJyArXG4gICAgICAgICdhdXRvIGFueSByYW5nZSBhcnJheSBvcGVuYXJyYXkgdmFyYXJncyBzZXEgc2V0IGNsb25nIGN1bG9uZyBjY2hhciAnICtcbiAgICAgICAgJ2NzY2hhciBjc2hvcnQgY2ludCBjc2l6ZSBjbG9uZ2xvbmcgY2Zsb2F0IGNkb3VibGUgY2xvbmdkb3VibGUgJyArXG4gICAgICAgICdjdWNoYXIgY3VzaG9ydCBjdWludCBjdWxvbmdsb25nIGNzdHJpbmdhcnJheSBzZW1pc3RhdGljJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFsge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgLy8gQWN0dWFsbHkgcHJhZ21hXG4gICAgICAgIGJlZ2luOiAve1xcLi8sXG4gICAgICAgIGVuZDogL1xcLn0vLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvW2EtekEtWl1cXHcqXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvXCJcIi99XVxuICAgICAgfSwge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLyhbYS16QS1aXVxcdyopP1wiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi9cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46IC9cXGJbQS1aXVxcdytcXGIvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1xcYigwW3hYXVswLTlhLWZBLUZdW18wLTlhLWZBLUZdKikoJz9baUl1VV0oOHwxNnwzMnw2NCkpPy99LFxuICAgICAgICAgIHtiZWdpbjogL1xcYigwb1swLTddW18wLTddKikoJz9baUl1VWZGXSg4fDE2fDMyfDY0KSk/L30sXG4gICAgICAgICAge2JlZ2luOiAvXFxiKDAoYnxCKVswMV1bXzAxXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99LFxuICAgICAgICAgIHtiZWdpbjogL1xcYihcXGRbX1xcZF0qKSgnP1tpSXVVZkZdKDh8MTZ8MzJ8NjQpKT8vfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE5JWF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ3JlYyB3aXRoIGxldCBpbiBpbmhlcml0IGFzc2VydCBpZiBlbHNlIHRoZW4nLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBvciBhbmQgbnVsbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnaW1wb3J0IGFib3J0IGJhc2VOYW1lT2YgZGlyT2YgaXNOdWxsIGJ1aWx0aW5zIG1hcCByZW1vdmVBdHRycyB0aHJvdyAnICtcbiAgICAgICd0b1N0cmluZyBkZXJpdmF0aW9uJ1xuICB9O1xuICB2YXIgQU5USVFVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IE5JWF9LRVlXT1JEU1xuICB9O1xuICB2YXIgQVRUUlMgPSB7XG4gICAgYmVnaW46IC9bYS16QS1aMC05LV9dKyhcXHMqPSkvLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxTKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW0FOVElRVU9URV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogXCInJ1wiLCBlbmQ6IFwiJydcIn0sXG4gICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJ31cbiAgICBdXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBTVFJJTkcsXG4gICAgQVRUUlNcbiAgXTtcbiAgQU5USVFVT1RFLmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogW1wibml4b3NcIl0sXG4gICAga2V5d29yZHM6IE5JWF9LRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT05TVEFOVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkKEFETUlOVE9PTFN8QVBQREFUQXxDREJVUk5fQVJFQXxDTURMSU5FfENPTU1PTkZJTEVTMzJ8Q09NTU9ORklMRVM2NHxDT01NT05GSUxFU3xDT09LSUVTfERFU0tUT1B8RE9DVU1FTlRTfEVYRURJUnxFWEVGSUxFfEVYRVBBVEh8RkFWT1JJVEVTfEZPTlRTfEhJU1RPUll8SFdORFBBUkVOVHxJTlNURElSfElOVEVSTkVUX0NBQ0hFfExBTkdVQUdFfExPQ0FMQVBQREFUQXxNVVNJQ3xORVRIT09EfE9VVERJUnxQSUNUVVJFU3xQTFVHSU5TRElSfFBSSU5USE9PRHxQUk9GSUxFfFBST0dSQU1GSUxFUzMyfFBST0dSQU1GSUxFUzY0fFBST0dSQU1GSUxFU3xRVUlDS0xBVU5DSHxSRUNFTlR8UkVTT1VSQ0VTX0xPQ0FMSVpFRHxSRVNPVVJDRVN8U0VORFRPfFNNUFJPR1JBTVN8U01TVEFSVFVQfFNUQVJUTUVOVXxTWVNESVJ8VEVNUHxURU1QTEFURVN8VklERU9TfFdJTkRJUikvXG4gIH07XG5cbiAgdmFyIERFRklORVMgPSB7XG4gICAgLy8gJHtkZWZpbmVzfVxuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCt7W1xcd1xcLjotXSt9L1xuICB9O1xuXG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgLy8gJHZhcmlhYmxlc1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCtcXHcrLyxcbiAgICBpbGxlZ2FsOiAvXFwoXFwpe30vXG4gIH07XG5cbiAgdmFyIExBTkdVQUdFUyA9IHtcbiAgICAvLyAkKGxhbmd1YWdlX3N0cmluZ3MpXG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkK1xcKFtcXHdcXF5cXC46LV0rXFwpL1xuICB9O1xuXG4gIHZhciBQQVJBTUVURVJTID0ge1xuICAgIC8vIGNvbW1hbmQgcGFyYW1ldGVyc1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICcoQVJDSElWRXxGSUxFX0FUVFJJQlVURV9BUkNISVZFfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SEtDUnxIS0NVfEhLRER8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0RZTl9EQVRBfEhLRVlfTE9DQUxfTUFDSElORXxIS0VZX1BFUkZPUk1BTkNFX0RBVEF8SEtFWV9VU0VSU3xIS0xNfEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SURJR05PUkV8SUROT3xJRE9LfElEUkVUUll8SURZRVN8TUJfQUJPUlRSRVRSWUlHTk9SRXxNQl9ERUZCVVRUT04xfE1CX0RFRkJVVFRPTjJ8TUJfREVGQlVUVE9OM3xNQl9ERUZCVVRUT040fE1CX0lDT05FWENMQU1BVElPTnxNQl9JQ09OSU5GT1JNQVRJT058TUJfSUNPTlFVRVNUSU9OfE1CX0lDT05TVE9QfE1CX09LfE1CX09LQ0FOQ0VMfE1CX1JFVFJZQ0FOQ0VMfE1CX1JJR0hUfE1CX1JUTFJFQURJTkd8TUJfU0VURk9SRUdST1VORHxNQl9UT1BNT1NUfE1CX1VTRVJJQ09OfE1CX1lFU05PfE5PUk1BTHxPRkZMSU5FfFJFQURPTkxZfFNIQ1RYfFNIRUxMX0NPTlRFWFR8U1lTVEVNfFRFTVBPUkFSWSknXG4gIH07XG5cbiAgdmFyIENPTVBJTEVSID0ge1xuICAgIC8vICFjb21waWxlcl9mbGFnc1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAvXFwhKGFkZGluY2x1ZGVkaXJ8YWRkcGx1Z2luZGlyfGFwcGVuZGZpbGV8Y2R8ZGVmaW5lfGRlbGZpbGV8ZWNob3xlbHNlfGVuZGlmfGVycm9yfGV4ZWN1dGV8ZmluYWxpemV8Z2V0ZGxsdmVyc2lvbnxnZXR0bGJ2ZXJzaW9ufGlmfGlmZGVmfGlmbWFjcm9kZWZ8aWZtYWNyb25kZWZ8aWZuZGVmfGluY2x1ZGV8aW5zZXJ0bWFjcm98bWFjcm98bWFjcm9lbmR8bWFrZW5zaXN8cGFja2hkcnxzZWFyY2hwYXJzZXxzZWFyY2hyZXBsYWNlfHN5c3RlbXx0ZW1wZmlsZXx1bmRlZnx2ZXJib3NlfHdhcm5pbmcpL1xuICB9O1xuXG4gIHZhciBNRVRBQ0hBUlMgPSB7XG4gICAgLy8gJFxcbiwgJFxcciwgJFxcdCwgJCRcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL1xcJChcXFxcW25ydF18XFwkKS9cbiAgfTtcblxuICB2YXIgUExVR0lOUyA9IHtcbiAgICAvLyBwbHVnOjppbnNcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46IC9cXHcrXFw6XFw6XFx3Ky9cbiAgfTtcblxuICAgIHZhciBTVFJJTkcgPSB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgTUVUQUNIQVJTLFxuICAgICAgICBDT05TVEFOVFMsXG4gICAgICAgIERFRklORVMsXG4gICAgICAgIFZBUklBQkxFUyxcbiAgICAgICAgTEFOR1VBR0VTXG4gICAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICdBYm9ydCBBZGRCcmFuZGluZ0ltYWdlIEFkZFNpemUgQWxsb3dSb290RGlySW5zdGFsbCBBbGxvd1NraXBGaWxlcyBBdXRvQ2xvc2VXaW5kb3cgQkdGb250IEJHR3JhZGllbnQgQnJhbmRpbmdUZXh0IEJyaW5nVG9Gcm9udCBDYWxsIENhbGxJbnN0RExMIENhcHRpb24gQ2hhbmdlVUkgQ2hlY2tCaXRtYXAgQ2xlYXJFcnJvcnMgQ29tcGxldGVkVGV4dCBDb21wb25lbnRUZXh0IENvcHlGaWxlcyBDUkNDaGVjayBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRm9udCBDcmVhdGVTaG9ydEN1dCBEZWxldGUgRGVsZXRlSU5JU2VjIERlbGV0ZUlOSVN0ciBEZWxldGVSZWdLZXkgRGVsZXRlUmVnVmFsdWUgRGV0YWlsUHJpbnQgRGV0YWlsc0J1dHRvblRleHQgRGlyVGV4dCBEaXJWYXIgRGlyVmVyaWZ5IEVuYWJsZVdpbmRvdyBFbnVtUmVnS2V5IEVudW1SZWdWYWx1ZSBFeGNoIEV4ZWMgRXhlY1NoZWxsIEV4ZWNTaGVsbFdhaXQgRXhlY1dhaXQgRXhwYW5kRW52U3RyaW5ncyBGaWxlIEZpbGVCdWZTaXplIEZpbGVDbG9zZSBGaWxlRXJyb3JUZXh0IEZpbGVPcGVuIEZpbGVSZWFkIEZpbGVSZWFkQnl0ZSBGaWxlUmVhZFVURjE2TEUgRmlsZVJlYWRXb3JkIEZpbGVTZWVrIEZpbGVXcml0ZSBGaWxlV3JpdGVCeXRlIEZpbGVXcml0ZVVURjE2TEUgRmlsZVdyaXRlV29yZCBGaW5kQ2xvc2UgRmluZEZpcnN0IEZpbmROZXh0IEZpbmRXaW5kb3cgRmx1c2hJTkkgRnVuY3Rpb25FbmQgR2V0Q3VySW5zdFR5cGUgR2V0Q3VycmVudEFkZHJlc3MgR2V0RGxnSXRlbSBHZXRETExWZXJzaW9uIEdldERMTFZlcnNpb25Mb2NhbCBHZXRFcnJvckxldmVsIEdldEZpbGVUaW1lIEdldEZpbGVUaW1lTG9jYWwgR2V0RnVsbFBhdGhOYW1lIEdldEZ1bmN0aW9uQWRkcmVzcyBHZXRJbnN0RGlyRXJyb3IgR2V0TGFiZWxBZGRyZXNzIEdldFRlbXBGaWxlTmFtZSBHb3RvIEhpZGVXaW5kb3cgSWNvbiBJZkFib3J0IElmRXJyb3JzIElmRmlsZUV4aXN0cyBJZlJlYm9vdEZsYWcgSWZTaWxlbnQgSW5pdFBsdWdpbnNEaXIgSW5zdGFsbEJ1dHRvblRleHQgSW5zdGFsbENvbG9ycyBJbnN0YWxsRGlyIEluc3RhbGxEaXJSZWdLZXkgSW5zdFByb2dyZXNzRmxhZ3MgSW5zdFR5cGUgSW5zdFR5cGVHZXRUZXh0IEluc3RUeXBlU2V0VGV4dCBJbnQ2NENtcCBJbnQ2NENtcFUgSW50NjRGbXQgSW50Q21wIEludENtcFUgSW50Rm10IEludE9wIEludFB0ckNtcCBJbnRQdHJDbXBVIEludFB0ck9wIElzV2luZG93IExhbmdTdHJpbmcgTGljZW5zZUJrQ29sb3IgTGljZW5zZURhdGEgTGljZW5zZUZvcmNlU2VsZWN0aW9uIExpY2Vuc2VMYW5nU3RyaW5nIExpY2Vuc2VUZXh0IExvYWRMYW5ndWFnZUZpbGUgTG9ja1dpbmRvdyBMb2dTZXQgTG9nVGV4dCBNYW5pZmVzdERQSUF3YXJlIE1hbmlmZXN0U3VwcG9ydGVkT1MgTWVzc2FnZUJveCBNaXNjQnV0dG9uVGV4dCBOYW1lIE5vcCBPdXRGaWxlIFBhZ2UgUGFnZUNhbGxiYWNrcyBQYWdlRXhFbmQgUG9wIFB1c2ggUXVpdCBSZWFkRW52U3RyIFJlYWRJTklTdHIgUmVhZFJlZ0RXT1JEIFJlYWRSZWdTdHIgUmVib290IFJlZ0RMTCBSZW5hbWUgUmVxdWVzdEV4ZWN1dGlvbkxldmVsIFJlc2VydmVGaWxlIFJldHVybiBSTURpciBTZWFyY2hQYXRoIFNlY3Rpb25FbmQgU2VjdGlvbkdldEZsYWdzIFNlY3Rpb25HZXRJbnN0VHlwZXMgU2VjdGlvbkdldFNpemUgU2VjdGlvbkdldFRleHQgU2VjdGlvbkdyb3VwRW5kIFNlY3Rpb25JbiBTZWN0aW9uU2V0RmxhZ3MgU2VjdGlvblNldEluc3RUeXBlcyBTZWN0aW9uU2V0U2l6ZSBTZWN0aW9uU2V0VGV4dCBTZW5kTWVzc2FnZSBTZXRBdXRvQ2xvc2UgU2V0QnJhbmRpbmdJbWFnZSBTZXRDb21wcmVzcyBTZXRDb21wcmVzc29yIFNldENvbXByZXNzb3JEaWN0U2l6ZSBTZXRDdGxDb2xvcnMgU2V0Q3VySW5zdFR5cGUgU2V0RGF0YWJsb2NrT3B0aW1pemUgU2V0RGF0ZVNhdmUgU2V0RGV0YWlsc1ByaW50IFNldERldGFpbHNWaWV3IFNldEVycm9yTGV2ZWwgU2V0RXJyb3JzIFNldEZpbGVBdHRyaWJ1dGVzIFNldEZvbnQgU2V0T3V0UGF0aCBTZXRPdmVyd3JpdGUgU2V0UmVib290RmxhZyBTZXRSZWdWaWV3IFNldFNoZWxsVmFyQ29udGV4dCBTZXRTaWxlbnQgU2hvd0luc3REZXRhaWxzIFNob3dVbmluc3REZXRhaWxzIFNob3dXaW5kb3cgU2lsZW50SW5zdGFsbCBTaWxlbnRVbkluc3RhbGwgU2xlZXAgU3BhY2VUZXh0cyBTdHJDbXAgU3RyQ21wUyBTdHJDcHkgU3RyTGVuIFN1YkNhcHRpb24gVW5pY29kZSBVbmluc3RhbGxCdXR0b25UZXh0IFVuaW5zdGFsbENhcHRpb24gVW5pbnN0YWxsSWNvbiBVbmluc3RhbGxTdWJDYXB0aW9uIFVuaW5zdGFsbFRleHQgVW5pbnN0UGFnZSBVblJlZ0RMTCBWYXIgVklBZGRWZXJzaW9uS2V5IFZJRmlsZVZlcnNpb24gVklQcm9kdWN0VmVyc2lvbiBXaW5kb3dJY29uIFdyaXRlSU5JU3RyIFdyaXRlUmVnQmluIFdyaXRlUmVnRFdPUkQgV3JpdGVSZWdFeHBhbmRTdHIgV3JpdGVSZWdNdWx0aVN0ciBXcml0ZVJlZ05vbmUgV3JpdGVSZWdTdHIgV3JpdGVVbmluc3RhbGxlciBYUFN0eWxlJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAnYWRtaW4gYWxsIGF1dG8gYm90aCBib3R0b20gYnppcDIgY29sb3JlZCBjb21wb25lbnRzIGN1cnJlbnQgY3VzdG9tIGRpcmVjdG9yeSBmYWxzZSBmb3JjZSBoaWRlIGhpZ2hlc3QgaWZkaWZmIGlmbmV3ZXIgaW5zdGZpbGVzIGxhc3R1c2VkIGxlYXZlIGxlZnQgbGljZW5zZSBsaXN0b25seSBsem1hIG5ldmVyc2hvdyBub25lIG5vcm1hbCBub3RzZXQgb2ZmIG9uIG9wZW4gcHJpbnQgcmlnaHQgc2hvdyBzaWxlbnQgc2lsZW50bG9nIHNtb290aCB0ZXh0b25seSB0b3AgdHJ1ZSB0cnkgdW4uY29tcG9uZW50cyB1bi5jdXN0b20gdW4uZGlyZWN0b3J5IHVuLmluc3RmaWxlcyB1bi5saWNlbnNlIHVuaW5zdENvbmZpcm0gdXNlciBXaW4xMCBXaW43IFdpbjggV2luVmlzdGEgemxpYidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJzsnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnRnVuY3Rpb24gUGFnZUV4IFNlY3Rpb24gU2VjdGlvbkdyb3VwJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01QSUxFUixcbiAgICAgIERFRklORVMsXG4gICAgICBWQVJJQUJMRVMsXG4gICAgICBMQU5HVUFHRVMsXG4gICAgICBQQVJBTUVURVJTLFxuICAgICAgUExVR0lOUyxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQVBJX0NMQVNTID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBiZWdpbjogJ1xcXFxiKEFWfENBfENGfENHfENJfENMfENNfENOfENUfE1LfE1QfE1US3xNVEx8TlN8U0NOfFNLfFVJfFdLfFhDKVxcXFx3KycsXG4gIH07XG4gIHZhciBPQkpDX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaW50IGZsb2F0IHdoaWxlIGNoYXIgZXhwb3J0IHNpemVvZiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBmb3IgdW5pb24gJyArXG4gICAgICAndW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzdGF0aWMgYm9vbCBtdXRhYmxlIGlmIGRvIHJldHVybiBnb3RvIHZvaWQgJyArXG4gICAgICAnZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCAnICtcbiAgICAgICdzaWduZWQgdHlwZW5hbWUgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgcmVhZG9ubHkgYXNzaWduICcgK1xuICAgICAgJ3JlYWR3cml0ZSBzZWxmIEBzeW5jaHJvbml6ZWQgaWQgdHlwZW9mICcgK1xuICAgICAgJ25vbmF0b21pYyBzdXBlciB1bmljaGFyIElCT3V0bGV0IElCQWN0aW9uIHN0cm9uZyB3ZWFrIGNvcHkgJyArXG4gICAgICAnaW4gb3V0IGlub3V0IGJ5Y29weSBieXJlZiBvbmV3YXkgX19zdHJvbmcgX193ZWFrIF9fYmxvY2sgX19hdXRvcmVsZWFzaW5nICcgK1xuICAgICAgJ0Bwcml2YXRlIEBwcm90ZWN0ZWQgQHB1YmxpYyBAdHJ5IEBwcm9wZXJ0eSBAZW5kIEB0aHJvdyBAY2F0Y2ggQGZpbmFsbHkgJyArXG4gICAgICAnQGF1dG9yZWxlYXNlcG9vbCBAc3ludGhlc2l6ZSBAZHluYW1pYyBAc2VsZWN0b3IgQG9wdGlvbmFsIEByZXF1aXJlZCAnICtcbiAgICAgICdAZW5jb2RlIEBwYWNrYWdlIEBpbXBvcnQgQGRlZnMgQGNvbXBhdGliaWxpdHlfYWxpYXMgJyArXG4gICAgICAnX19icmlkZ2UgX19icmlkZ2VfdHJhbnNmZXIgX19icmlkZ2VfcmV0YWluZWQgX19icmlkZ2VfcmV0YWluICcgK1xuICAgICAgJ19fY292YXJpYW50IF9fY29udHJhdmFyaWFudCBfX2tpbmRvZiAnICtcbiAgICAgICdfTm9ubnVsbCBfTnVsbGFibGUgX051bGxfdW5zcGVjaWZpZWQgJyArXG4gICAgICAnX19GVU5DVElPTl9fIF9fUFJFVFRZX0ZVTkNUSU9OX18gX19hdHRyaWJ1dGVfXyAnICtcbiAgICAgICdnZXR0ZXIgc2V0dGVyIHJldGFpbiB1bnNhZmVfdW5yZXRhaW5lZCAnICtcbiAgICAgICdub25udWxsIG51bGxhYmxlIG51bGxfdW5zcGVjaWZpZWQgbnVsbF9yZXNldHRhYmxlIGNsYXNzIGluc3RhbmNldHlwZSAnICtcbiAgICAgICdOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSIE5TX1VOQVZBSUxBQkxFIE5TX1JFUVVJUkVTX1NVUEVSICcgK1xuICAgICAgJ05TX1JFVFVSTlNfSU5ORVJfUE9JTlRFUiBOU19JTkxJTkUgTlNfQVZBSUxBQkxFIE5TX0RFUFJFQ0FURUQgJyArXG4gICAgICAnTlNfRU5VTSBOU19PUFRJT05TIE5TX1NXSUZUX1VOQVZBSUxBQkxFICcgK1xuICAgICAgJ05TX0FTU1VNRV9OT05OVUxMX0JFR0lOIE5TX0FTU1VNRV9OT05OVUxMX0VORCAnICtcbiAgICAgICdOU19SRUZJTkVEX0ZPUl9TV0lGVCBOU19TV0lGVF9OQU1FIE5TX1NXSUZUX05PVEhST1cgJyArXG4gICAgICAnTlNfRFVSSU5HIE5TX0hBTkRMRVIgTlNfRU5ESEFORExFUiBOU19WQUxVRVJFVFVSTiBOU19WT0lEUkVUVVJOJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0JPT0wgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlJ1xuICB9O1xuICB2YXIgTEVYRU1FUyA9IC9bYS16QS1aQF1bYS16QS1aMC05X10qLztcbiAgdmFyIENMQVNTX0tFWVdPUkRTID0gJ0BpbnRlcmZhY2UgQGNsYXNzIEBwcm90b2NvbCBAaW1wbGVtZW50YXRpb24nO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbW0nLCAnb2JqYycsICdvYmotYyddLFxuICAgIGtleXdvcmRzOiBPQkpDX0tFWVdPUkRTLFxuICAgIGxleGVtZXM6IExFWEVNRVMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgQVBJX0NMQVNTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdAXCInLCBlbmQ6ICdcIicsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sIGVuZDogLyQvLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAgICAgJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lICcgK1xuICAgICAgICAgICAgJ3ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSdcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC88Lio/Pi8sIGVuZDogLyQvLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW46ICcoJyArIENMQVNTX0tFWVdPUkRTLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxcYicsIGVuZDogJyh7fCQpJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IENMQVNTX0tFWVdPUkRTLCBsZXhlbWVzOiBMRVhFTUVTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nK2hsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgLyogbWlzc2luZyBzdXBwb3J0IGZvciBoZXJlZG9jLWxpa2Ugc3RyaW5nIChPQ2FtbCA0LjAuMispICovXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtbCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYW5kIGFzIGFzc2VydCBhc3IgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCAnICtcbiAgICAgICAgJ2V4Y2VwdGlvbiBleHRlcm5hbCBmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luaGVyaXQhIGluaGVyaXQgaW5pdGlhbGl6ZXIgbGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCF8MTAgbWV0aG9kICcgK1xuICAgICAgICAnbW9kIG1vZHVsZSBtdXRhYmxlIG5ldyBvYmplY3Qgb2Ygb3BlbiEgb3BlbiBvciBwcml2YXRlIHJlYyBzaWcgc3RydWN0ICcgK1xuICAgICAgICAndGhlbiB0byB0cnkgdHlwZSB2YWwhIHZhbCB2aXJ0dWFsIHdoZW4gd2hpbGUgd2l0aCAnICtcbiAgICAgICAgLyogY2FtbHA0ICovXG4gICAgICAgICdwYXJzZXIgdmFsdWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8qIGJ1aWx0LWluIHR5cGVzICovXG4gICAgICAgICdhcnJheSBib29sIGJ5dGVzIGNoYXIgZXhufDUgZmxvYXQgaW50IGludDMyIGludDY0IGxpc3QgbGF6eV90fDUgbmF0aXZlaW50fDUgc3RyaW5nIHVuaXQgJyArXG4gICAgICAgIC8qIChzb21lKSB0eXBlcyBpbiBQZXJ2YXNpdmVzICovXG4gICAgICAgICdpbl9jaGFubmVsIG91dF9jaGFubmVsIHJlZicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXC98Pj4vLFxuICAgIGxleGVtZXM6ICdbYS16X11cXFxcdyohPycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXFsoXFxcXHxcXFxcfCk/XFxcXF18XFxcXChcXFxcKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcXFwoXFxcXConLFxuICAgICAgICAnXFxcXCpcXFxcKScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcqL1xuICAgICAgICBiZWdpbjogJ1thLXpfXVxcXFx3KlxcJ1tcXFxcd1xcJ10qJywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98JyArXG4gICAgICAgICAgJzBbb09dWzAtN19dK1tMbG5dP3wnICtcbiAgICAgICAgICAnMFtiQl1bMDFfXStbTGxuXT98JyArXG4gICAgICAgICAgJ1swLTldWzAtOV9dKihbTGxuXXwoXFxcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1stPV0+LyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblx0dmFyIFNQRUNJQUxfVkFSUyA9IHtcblx0XHRjbGFzc05hbWU6ICdrZXl3b3JkJyxcblx0XHRiZWdpbjogJ1xcXFwkKGZbYXNuXXx0fHZwW3J0ZF18Y2hpbGRyZW4pJ1xuXHR9LFxuXHRMSVRFUkFMUyA9IHtcblx0XHRjbGFzc05hbWU6ICdsaXRlcmFsJyxcblx0XHRiZWdpbjogJ2ZhbHNlfHRydWV8UEl8dW5kZWYnXG5cdH0sXG5cdE5VTUJFUlMgPSB7XG5cdFx0Y2xhc3NOYW1lOiAnbnVtYmVyJyxcblx0XHRiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8oZS0/XFxcXGQrKT8nLCAvL2FkZHMgMWU1LCAxZS0xMFxuXHRcdHJlbGV2YW5jZTogMFxuXHR9LFxuXHRTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDogbnVsbH0pLFxuXHRQUkVQUk8gPSB7XG5cdFx0Y2xhc3NOYW1lOiAnbWV0YScsXG5cdFx0a2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2luY2x1ZGUgdXNlJ30sXG5cdFx0YmVnaW46ICdpbmNsdWRlfHVzZSA8Jyxcblx0XHRlbmQ6ICc+J1xuXHR9LFxuXHRQQVJBTVMgPSB7XG5cdFx0Y2xhc3NOYW1lOiAncGFyYW1zJyxcblx0XHRiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuXHRcdGNvbnRhaW5zOiBbJ3NlbGYnLCBOVU1CRVJTLCBTVFJJTkcsIFNQRUNJQUxfVkFSUywgTElURVJBTFNdXG5cdH0sXG5cdE1PRElGSUVSUyA9IHtcblx0XHRiZWdpbjogJ1sqISMlXScsXG5cdFx0cmVsZXZhbmNlOiAwXG5cdH0sXG5cdEZVTkNUSU9OUyA9IHtcblx0XHRjbGFzc05hbWU6ICdmdW5jdGlvbicsXG5cdFx0YmVnaW5LZXl3b3JkczogJ21vZHVsZSBmdW5jdGlvbicsXG5cdFx0ZW5kOiAnXFxcXD18XFxcXHsnLFxuXHRcdGNvbnRhaW5zOiBbUEFSQU1TLCBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGFsaWFzZXM6IFsnc2NhZCddLFxuXHRcdGtleXdvcmRzOiB7XG5cdFx0XHRrZXl3b3JkOiAnZnVuY3Rpb24gbW9kdWxlIGluY2x1ZGUgdXNlIGZvciBpbnRlcnNlY3Rpb25fZm9yIGlmIGVsc2UgXFxcXCUnLFxuXHRcdFx0bGl0ZXJhbDogJ2ZhbHNlIHRydWUgUEkgdW5kZWYnLFxuXHRcdFx0YnVpbHRfaW46ICdjaXJjbGUgc3F1YXJlIHBvbHlnb24gdGV4dCBzcGhlcmUgY3ViZSBjeWxpbmRlciBwb2x5aGVkcm9uIHRyYW5zbGF0ZSByb3RhdGUgc2NhbGUgcmVzaXplIG1pcnJvciBtdWx0bWF0cml4IGNvbG9yIG9mZnNldCBodWxsIG1pbmtvd3NraSB1bmlvbiBkaWZmZXJlbmNlIGludGVyc2VjdGlvbiBhYnMgc2lnbiBzaW4gY29zIHRhbiBhY29zIGFzaW4gYXRhbiBhdGFuMiBmbG9vciByb3VuZCBjZWlsIGxuIGxvZyBwb3cgc3FydCBleHAgcmFuZHMgbWluIG1heCBjb25jYXQgbG9va3VwIHN0ciBjaHIgc2VhcmNoIHZlcnNpb24gdmVyc2lvbl9udW0gbm9ybSBjcm9zcyBwYXJlbnRfbW9kdWxlIGVjaG8gaW1wb3J0IGltcG9ydF9keGYgZHhmX2xpbmVhcl9leHRydWRlIGxpbmVhcl9leHRydWRlIHJvdGF0ZV9leHRydWRlIHN1cmZhY2UgcHJvamVjdGlvbiByZW5kZXIgY2hpbGRyZW4gZHhmX2Nyb3NzIGR4Zl9kaW0gbGV0IGFzc2lnbidcblx0XHR9LFxuXHRcdGNvbnRhaW5zOiBbXG5cdFx0XHRobGpzLkNfTElORV9DT01NRU5UX01PREUsXG5cdFx0XHRobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuXHRcdFx0TlVNQkVSUyxcblx0XHRcdFBSRVBSTyxcblx0XHRcdFNUUklORyxcblx0XHRcdFNQRUNJQUxfVkFSUyxcblx0XHRcdE1PRElGSUVSUyxcblx0XHRcdEZVTkNUSU9OU1xuXHRcdF1cblx0fVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE9YWUdFTkVfS0VZV09SRFMgPSAnYWJzdHJhY3QgYWRkIGFuZCBhcnJheSBhcyBhc2MgYXNwZWN0IGFzc2VtYmx5IGFzeW5jIGJlZ2luIGJyZWFrIGJsb2NrIGJ5IGNhc2UgY2xhc3MgY29uY2F0IGNvbnN0IGNvcHkgY29uc3RydWN0b3IgY29udGludWUgJytcbiAgICAnY3JlYXRlIGRlZmF1bHQgZGVsZWdhdGUgZGVzYyBkaXN0aW5jdCBkaXYgZG8gZG93bnRvIGR5bmFtaWMgZWFjaCBlbHNlIGVtcHR5IGVuZCBlbnN1cmUgZW51bSBlcXVhbHMgZXZlbnQgZXhjZXB0IGV4aXQgZXh0ZW5zaW9uIGV4dGVybmFsIGZhbHNlICcrXG4gICAgJ2ZpbmFsIGZpbmFsaXplIGZpbmFsaXplciBmaW5hbGx5IGZsYWdzIGZvciBmb3J3YXJkIGZyb20gZnVuY3Rpb24gZnV0dXJlIGdsb2JhbCBncm91cCBoYXMgaWYgaW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBpbXBsaWVzIGluIGluZGV4IGluaGVyaXRlZCAnK1xuICAgICdpbmxpbmUgaW50ZXJmYWNlIGludG8gaW52YXJpYW50cyBpcyBpdGVyYXRvciBqb2luIGxvY2tlZCBsb2NraW5nIGxvb3AgbWF0Y2hpbmcgbWV0aG9kIG1vZCBtb2R1bGUgbmFtZXNwYWNlIG5lc3RlZCBuZXcgbmlsIG5vdCBub3RpZnkgbnVsbGFibGUgb2YgJytcbiAgICAnb2xkIG9uIG9wZXJhdG9yIG9yIG9yZGVyIG91dCBvdmVycmlkZSBwYXJhbGxlbCBwYXJhbXMgcGFydGlhbCBwaW5uZWQgcHJpdmF0ZSBwcm9jZWR1cmUgcHJvcGVydHkgcHJvdGVjdGVkIHB1YmxpYyBxdWVyeWFibGUgcmFpc2UgcmVhZCByZWFkb25seSAnK1xuICAgICdyZWNvcmQgcmVpbnRyb2R1Y2UgcmVtb3ZlIHJlcGVhdCByZXF1aXJlIHJlc3VsdCByZXZlcnNlIHNlYWxlZCBzZWxlY3Qgc2VsZiBzZXF1ZW5jZSBzZXQgc2hsIHNociBza2lwIHN0YXRpYyBzdGVwIHNvZnQgdGFrZSB0aGVuIHRvIHRydWUgdHJ5IHR1cGxlICcrXG4gICAgJ3R5cGUgdW5pb24gdW5pdCB1bnNhZmUgdW50aWwgdXNlcyB1c2luZyB2YXIgdmlydHVhbCByYWlzZXMgdm9sYXRpbGUgd2hlcmUgd2hpbGUgd2l0aCB3cml0ZSB4b3IgeWllbGQgYXdhaXQgbWFwcGVkIGRlcHJlY2F0ZWQgc3RkY2FsbCBjZGVjbCBwYXNjYWwgJytcbiAgICAncmVnaXN0ZXIgc2FmZWNhbGwgb3ZlcmxvYWQgbGlicmFyeSBwbGF0Zm9ybSByZWZlcmVuY2UgcGFja2VkIHN0cmljdCBwdWJsaXNoZWQgYXV0b3JlbGVhc2Vwb29sIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHVucmV0YWluZWQnO1xuICB2YXIgQ1VSTFlfQ09NTUVOVCA9ICBobGpzLkNPTU1FTlQoXG4gICAgJ3snLFxuICAgICd9JyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBQQVJFTl9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICdcXFxcKFxcXFwqJyxcbiAgICAnXFxcXCpcXFxcKScsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH1cbiAgKTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ1xcJ1xcJyd9XVxuICB9O1xuICB2YXIgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgYmVnaW46ICcoI1xcXFxkKykrJ1xuICB9O1xuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIHByb2NlZHVyZSBtZXRob2QnLCBlbmQ6ICdbOjtdJyxcbiAgICBrZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yfDEwIGRlc3RydWN0b3J8MTAgcHJvY2VkdXJlfDEwIG1ldGhvZHwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAga2V5d29yZHM6IE9YWUdFTkVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCBDSEFSX1NUUklOR11cbiAgICAgIH0sXG4gICAgICBDVVJMWV9DT01NRU5ULCBQQVJFTl9DT01NRU5UXG4gICAgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1xcLj9cXHcrLyxcbiAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnKFwifFxcXFwkW0ctWmctel18XFxcXC9cXFxcKnw8L3w9PnwtPiknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDVVJMWV9DT01NRU5ULCBQQVJFTl9DT01NRU5ULCBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsIENIQVJfU1RSSU5HLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnPVxcXFxiY2xhc3NcXFxcYicsIGVuZDogJ2VuZDsnLFxuICAgICAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsIENIQVJfU1RSSU5HLFxuICAgICAgICAgIENVUkxZX0NPTU1FTlQsIFBBUkVOX0NPTU1FTlQsIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBGVU5DVElPTlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENVUkxZX1NVQkNPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJ3snLFxuICAgICd9JyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ11cbiAgICB9XG4gICk7XG4gIHJldHVybiB7XG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLCByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnXiMnLCAnJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXFxcXF5yZW17JyxcbiAgICAgICAgJ30nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgQ1VSTFlfU1VCQ09NTUVOVFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXkAoPzpCQVNFfFVTRXxDTEFTU3xPUFRJT05TKSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnQFtcXFxcd1xcXFwtXStcXFxcW1tcXFxcd147XFxcXC1dKlxcXFxdKD86XFxcXFtbXFxcXHdeO1xcXFwtXSpcXFxcXSk/KD86LiopJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7P1tcXFxcd1xcXFwtXFxcXC5cXFxcOl0rXFxcXH0/J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXF5bXFxcXHdcXFxcLVxcXFwuXFxcXDpdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXF4jWzAtOWEtZkEtRl0rJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBNQUNSTyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi9cbiAgfTtcbiAgdmFyIFRBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogLzwoPyFcXC8pLywgZW5kOiAvPi9cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGYuY29uZiddLFxuICAgIGxleGVtZXM6IC9bYS16MC05Xzw+LV0rLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46IC8qIGJsb2NrIG1hdGNoIHBhc3MgYXJlIFwiYWN0aW9uc1wiIGluIHBmLmNvbmYoNSksIHRoZSByZXN0IGFyZVxuICAgICAgICAgICAgICAgICAqIGxleGljYWxseSBzaW1pbGFyIHRvcC1sZXZlbCBjb21tYW5kcy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgJ2Jsb2NrIG1hdGNoIHBhc3MgbG9hZCBhbmNob3J8NSBhbnRpc3Bvb2Z8MTAgc2V0IHRhYmxlJyxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpbiBvdXQgbG9nIHF1aWNrIG9uIHJkb21haW4gaW5ldCBpbmV0NiBwcm90byBmcm9tIHBvcnQgb3MgdG8gcm91dGUnICtcbiAgICAgICAgJ2FsbG93LW9wdHMgZGl2ZXJ0LXBhY2tldCBkaXZlcnQtcmVwbHkgZGl2ZXJ0LXRvIGZsYWdzIGdyb3VwIGljbXAtdHlwZScgK1xuICAgICAgICAnaWNtcDYtdHlwZSBsYWJlbCBvbmNlIHByb2JhYmlsaXR5IHJlY2lldmVkLW9uIHJ0YWJsZSBwcmlvIHF1ZXVlJyArXG4gICAgICAgICd0b3MgdGFnIHRhZ2dlZCB1c2VyIGtlZXAgZnJhZ21lbnQgZm9yIG9zIGRyb3AnICtcbiAgICAgICAgJ2FmLXRvfDEwIGJpbmF0LXRvfDEwIG5hdC10b3wxMCByZHItdG98MTAgYml0bWFzayBsZWFzdC1zdGF0cyByYW5kb20gcm91bmQtcm9iaW4nICtcbiAgICAgICAgJ3NvdXJjZS1oYXNoIHN0YXRpYy1wb3J0JyArXG4gICAgICAgICdkdXAtdG8gcmVwbHktdG8gcm91dGUtdG8nICtcbiAgICAgICAgJ3BhcmVudCBiYW5kd2lkdGggZGVmYXVsdCBtaW4gbWF4IHFsaW1pdCcgK1xuICAgICAgICAnYmxvY2stcG9saWN5IGRlYnVnIGZpbmdlcnByaW50cyBob3N0aWQgbGltaXQgbG9naW50ZXJmYWNlIG9wdGltaXphdGlvbicgK1xuICAgICAgICAncmVhc3NlbWJsZSBydWxlc2V0LW9wdGltaXphdGlvbiBiYXNpYyBub25lIHByb2ZpbGUgc2tpcCBzdGF0ZS1kZWZhdWx0cycgK1xuICAgICAgICAnc3RhdGUtcG9saWN5IHRpbWVvdXQnICtcbiAgICAgICAgJ2NvbnN0IGNvdW50ZXJzIHBlcnNpc3QnICtcbiAgICAgICAgJ25vIG1vZHVsYXRlIHN5bnByb3h5IHN0YXRlfDUgZmxvYXRpbmcgaWYtYm91bmQgbm8tc3luYyBwZmxvd3wxMCBzbG9wcHknICtcbiAgICAgICAgJ3NvdXJjZS10cmFjayBnbG9iYWwgcnVsZSBtYXgtc3JjLW5vZGVzIG1heC1zcmMtc3RhdGVzIG1heC1zcmMtY29ubicgK1xuICAgICAgICAnbWF4LXNyYy1jb25uLXJhdGUgb3ZlcmxvYWQgZmx1c2gnICtcbiAgICAgICAgJ3NjcnVifDUgbWF4LW1zcyBtaW4tdHRsIG5vLWRmfDEwIHJhbmRvbS1pZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnYWxsIGFueSBuby1yb3V0ZSBzZWxmIHVycGYtZmFpbGVkIGVncmVzc3w1IHVua25vd24nXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTUFDUk8sXG4gICAgICBUQUJMRVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcbiAgdmFyIFVOUVVPVEVEX0lERU5UID0gJ1thLXpBLVpfXVthLXpBLVpfMC05JF0qJztcbiAgdmFyIERPTExBUl9TVFJJTkcgPSAnXFxcXCQoW2EtekEtWl9dP3xbYS16QS1aX11bYS16QS1aXzAtOV0qKVxcXFwkJztcbiAgdmFyIExBQkVMID0gJzw8XFxcXHMqJyArIFVOUVVPVEVEX0lERU5UICsgJ1xcXFxzKj4+JztcblxuICB2YXIgU1FMX0tXID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9zcWwta2V5d29yZHMtYXBwZW5kaXguaHRtbFxuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL3NxbC1jb21tYW5kcy5odG1sXG4gICAgLy8gU1FMIGNvbW1hbmRzIChzdGFydGluZyB3b3JkcylcbiAgICAnQUJPUlQgQUxURVIgQU5BTFlaRSBCRUdJTiBDQUxMIENIRUNLUE9JTlR8MTAgQ0xPU0UgQ0xVU1RFUiBDT01NRU5UIENPTU1JVCBDT1BZIENSRUFURSBERUFMTE9DQVRFIERFQ0xBUkUgJyArXG4gICAgJ0RFTEVURSBESVNDQVJEIERPIERST1AgRU5EIEVYRUNVVEUgRVhQTEFJTiBGRVRDSCBHUkFOVCBJTVBPUlQgSU5TRVJUIExJU1RFTiBMT0FEIExPQ0sgTU9WRSBOT1RJRlkgJyArXG4gICAgJ1BSRVBBUkUgUkVBU1NJR058MTAgUkVGUkVTSCBSRUlOREVYIFJFTEVBU0UgUkVTRVQgUkVWT0tFIFJPTExCQUNLIFNBVkVQT0lOVCBTRUNVUklUWSBTRUxFQ1QgU0VUIFNIT1cgJyArXG4gICAgJ1NUQVJUIFRSVU5DQVRFIFVOTElTVEVOfDEwIFVQREFURSBWQUNVVU18MTAgVkFMVUVTICcgK1xuICAgIC8vIFNRTCBjb21tYW5kcyAob3RoZXJzKVxuICAgICdBR0dSRUdBVEUgQ09MTEFUSU9OIENPTlZFUlNJT058MTAgREFUQUJBU0UgREVGQVVMVCBQUklWSUxFR0VTIERPTUFJTiBUUklHR0VSIEVYVEVOU0lPTiBGT1JFSUdOICcgK1xuICAgICdXUkFQUEVSfDEwIFRBQkxFIEZVTkNUSU9OIEdST1VQIExBTkdVQUdFIExBUkdFIE9CSkVDVCBNQVRFUklBTElaRUQgVklFVyBPUEVSQVRPUiBDTEFTUyAnICtcbiAgICAnRkFNSUxZIFBPTElDWSBQVUJMSUNBVElPTnwxMCBST0xFIFJVTEUgU0NIRU1BIFNFUVVFTkNFIFNFUlZFUiBTVEFUSVNUSUNTIFNVQlNDUklQVElPTiBTWVNURU0gJyArXG4gICAgJ1RBQkxFU1BBQ0UgQ09ORklHVVJBVElPTiBESUNUSU9OQVJZIFBBUlNFUiBURU1QTEFURSBUWVBFIFVTRVIgTUFQUElORyBQUkVQQVJFRCBBQ0NFU1MgJyArXG4gICAgJ01FVEhPRCBDQVNUIEFTIFRSQU5TRk9STSBUUkFOU0FDVElPTiBPV05FRCBUTyBJTlRPIFNFU1NJT04gQVVUSE9SSVpBVElPTiAnICtcbiAgICAnSU5ERVggUFJPQ0VEVVJFIEFTU0VSVElPTiAnICtcbiAgICAvLyBhZGRpdGlvbmFsIHJlc2VydmVkIGtleSB3b3Jkc1xuICAgICdBTEwgQU5BTFlTRSBBTkQgQU5ZIEFSUkFZIEFTQyBBU1lNTUVUUklDfDEwIEJPVEggQ0FTRSBDSEVDSyAnICtcbiAgICAnQ09MTEFURSBDT0xVTU4gQ09OQ1VSUkVOVExZfDEwIENPTlNUUkFJTlQgQ1JPU1MgJyArXG4gICAgJ0RFRkVSUkFCTEUgUkFOR0UgJyArXG4gICAgJ0RFU0MgRElTVElOQ1QgRUxTRSBFWENFUFQgRk9SIEZSRUVaRXwxMCBGUk9NIEZVTEwgSEFWSU5HICcgK1xuICAgICdJTElLRSBJTiBJTklUSUFMTFkgSU5ORVIgSU5URVJTRUNUIElTIElTTlVMTCBKT0lOIExBVEVSQUwgTEVBRElORyBMSUtFIExJTUlUICcgK1xuICAgICdOQVRVUkFMIE5PVCBOT1ROVUxMIE5VTEwgT0ZGU0VUIE9OIE9OTFkgT1IgT1JERVIgT1VURVIgT1ZFUkxBUFMgUExBQ0lORyBQUklNQVJZICcgK1xuICAgICdSRUZFUkVOQ0VTIFJFVFVSTklORyBTSU1JTEFSIFNPTUUgU1lNTUVUUklDIFRBQkxFU0FNUExFIFRIRU4gJyArXG4gICAgJ1RSQUlMSU5HIFVOSU9OIFVOSVFVRSBVU0lORyBWQVJJQURJQ3wxMCBWRVJCT1NFIFdIRU4gV0hFUkUgV0lORE9XIFdJVEggJyArXG4gICAgLy8gc29tZSBvZiBub24tcmVzZXJ2ZWQgKHdoaWNoIGFyZSB1c2VkIGluIGNsYXVzZXMgb3IgYXMgUEwvcGdTUUwga2V5d29yZClcbiAgICAnQlkgUkVUVVJOUyBJTk9VVCBPVVQgU0VUT0Z8MTAgSUYgU1RSSUNUIENVUlJFTlQgQ09OVElOVUUgT1dORVIgTE9DQVRJT04gT1ZFUiBQQVJUSVRJT04gV0lUSElOICcgK1xuICAgICdCRVRXRUVOIEVTQ0FQRSBFWFRFUk5BTCBJTlZPS0VSIERFRklORVIgV09SSyBSRU5BTUUgVkVSU0lPTiBDT05ORUNUSU9OIENPTk5FQ1QgJyArXG4gICAgJ1RBQkxFUyBURU1QIFRFTVBPUkFSWSBGVU5DVElPTlMgU0VRVUVOQ0VTIFRZUEVTIFNDSEVNQVMgT1BUSU9OIENBU0NBREUgUkVTVFJJQ1QgQUREIEFETUlOICcgK1xuICAgICdFWElTVFMgVkFMSUQgVkFMSURBVEUgRU5BQkxFIERJU0FCTEUgUkVQTElDQXwxMCBBTFdBWVMgUEFTU0lORyBDT0xVTU5TIFBBVEggJyArXG4gICAgJ1JFRiBWQUxVRSBPVkVSUklESU5HIElNTVVUQUJMRSBTVEFCTEUgVk9MQVRJTEUgQkVGT1JFIEFGVEVSIEVBQ0ggUk9XIFBST0NFRFVSQUwgJyArXG4gICAgJ1JPVVRJTkUgTk8gSEFORExFUiBWQUxJREFUT1IgT1BUSU9OUyBTVE9SQUdFIE9JRFN8MTAgV0lUSE9VVCBJTkhFUklUIERFUEVORFMgQ0FMTEVEICcgK1xuICAgICdJTlBVVCBMRUFLUFJPT0Z8MTAgQ09TVCBST1dTIE5PV0FJVCBTRUFSQ0ggVU5USUwgRU5DUllQVEVEfDEwIFBBU1NXT1JEIENPTkZMSUNUfDEwICcgK1xuICAgICdJTlNURUFEIElOSEVSSVRTIENIQVJBQ1RFUklTVElDUyBXUklURSBDVVJTT1IgQUxTTyBTVEFURU1FTlQgU0hBUkUgRVhDTFVTSVZFIElOTElORSAnICtcbiAgICAnSVNPTEFUSU9OIFJFUEVBVEFCTEUgUkVBRCBDT01NSVRURUQgU0VSSUFMSVpBQkxFIFVOQ09NTUlUVEVEIExPQ0FMIEdMT0JBTCBTUUwgUFJPQ0VEVVJFUyAnICtcbiAgICAnUkVDVVJTSVZFIFNOQVBTSE9UIFJPTExVUCBDVUJFIFRSVVNURUR8MTAgSU5DTFVERSBGT0xMT1dJTkcgUFJFQ0VESU5HIFVOQk9VTkRFRCBSQU5HRSBHUk9VUFMgJyArXG4gICAgJ1VORU5DUllQVEVEfDEwIFNZU0lEIEZPUk1BVCBERUxJTUlURVIgSEVBREVSIFFVT1RFIEVOQ09ESU5HIEZJTFRFUiBPRkYgJyArXG4gICAgLy8gc29tZSBwYXJhbWV0ZXJzIG9mIFZBQ1VVTS9BTkFMWVpFL0VYUExBSU5cbiAgICAnRk9SQ0VfUVVPVEUgRk9SQ0VfTk9UX05VTEwgRk9SQ0VfTlVMTCBDT1NUUyBCVUZGRVJTIFRJTUlORyBTVU1NQVJZIERJU0FCTEVfUEFHRV9TS0lQUElORyAnICtcbiAgICAvL1xuICAgICdSRVNUQVJUIENZQ0xFIEdFTkVSQVRFRCBJREVOVElUWSBERUZFUlJFRCBJTU1FRElBVEUgTEVWRUwgTE9HR0VEIFVOTE9HR0VEICcgK1xuICAgICdPRiBOT1RISU5HIE5PTkUgRVhDTFVERSBBVFRSSUJVVEUgJyArXG4gICAgLy8gZnJvbSBHUkFOVCAobm90IGtleXdvcmRzIGFjdHVhbGx5KVxuICAgICdVU0FHRSBST1VUSU5FUyAnICtcbiAgICAvLyBhY3R1YWxseSBsaXRlcmFscywgYnV0IGxvb2sgYmV0dGVyIHRoaXMgd2F5IChkdWUgdG8gSVMgVFJVRSwgSVMgRkFMU0UsIElTTlVMTCBldGMpXG4gICAgJ1RSVUUgRkFMU0UgTkFOIElORklOSVRZICc7XG5cbiAgdmFyIFJPTEVfQVRUUlMgPSAvLyBvbmx5IHRob3NlIG5vdCBpbiBrZXl3cm9kcyBhbHJlYWR5XG4gICAgJ1NVUEVSVVNFUiBOT1NVUEVSVVNFUiBDUkVBVEVEQiBOT0NSRUFURURCIENSRUFURVJPTEUgTk9DUkVBVEVST0xFIElOSEVSSVQgTk9JTkhFUklUICcgK1xuICAgICdMT0dJTiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PUkVQTElDQVRJT04gQllQQVNTUkxTIE5PQllQQVNTUkxTICc7XG5cbiAgdmFyIFBMUEdTUUxfS1cgPVxuICAgICdBTElBUyBCRUdJTiBDT05TVEFOVCBERUNMQVJFIEVORCBFWENFUFRJT04gUkVUVVJOIFBFUkZPUk18MTAgUkFJU0UgR0VUIERJQUdOT1NUSUNTICcgK1xuICAgICdTVEFDS0VEfDEwIEZPUkVBQ0ggTE9PUCBFTFNJRiBFWElUIFdISUxFIFJFVkVSU0UgU0xJQ0UgREVCVUcgTE9HIElORk8gTk9USUNFIFdBUk5JTkcgQVNTRVJUICcgK1xuICAgICdPUEVOICc7XG5cbiAgdmFyIFRZUEVTID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9kYXRhdHlwZS5odG1sXG4gICAgJ0JJR0lOVCBJTlQ4IEJJR1NFUklBTCBTRVJJQUw4IEJJVCBWQVJZSU5HIFZBUkJJVCBCT09MRUFOIEJPT0wgQk9YIEJZVEVBIENIQVJBQ1RFUiBDSEFSIFZBUkNIQVIgJyArXG4gICAgJ0NJRFIgQ0lSQ0xFIERBVEUgRE9VQkxFIFBSRUNJU0lPTiBGTE9BVDggRkxPQVQgSU5FVCBJTlRFR0VSIElOVCBJTlQ0IElOVEVSVkFMIEpTT04gSlNPTkIgTElORSBMU0VHfDEwICcgK1xuICAgICdNQUNBRERSIE1BQ0FERFI4IE1PTkVZIE5VTUVSSUMgREVDIERFQ0lNQUwgUEFUSCBQT0lOVCBQT0xZR09OIFJFQUwgRkxPQVQ0IFNNQUxMSU5UIElOVDIgJyArXG4gICAgJ1NNQUxMU0VSSUFMfDEwIFNFUklBTDJ8MTAgU0VSSUFMfDEwIFNFUklBTDR8MTAgVEVYVCBUSU1FIFpPTkUgVElNRVRafDEwIFRJTUVTVEFNUCBUSU1FU1RBTVBUWnwxMCBUU1FVRVJZfDEwIFRTVkVDVE9SfDEwICcgK1xuICAgICdUWElEX1NOQVBTSE9UfDEwIFVVSUQgWE1MIE5BVElPTkFMIE5DSEFSICcgK1xuICAgICdJTlQ0UkFOR0V8MTAgSU5UOFJBTkdFfDEwIE5VTVJBTkdFfDEwIFRTUkFOR0V8MTAgVFNUWlJBTkdFfDEwIERBVEVSQU5HRXwxMCAnICtcbiAgICAvLyBwc2V1ZG90eXBlc1xuICAgICdBTllFTEVNRU5UIEFOWUFSUkFZIEFOWU5PTkFSUkFZIEFOWUVOVU0gQU5ZUkFOR0UgQ1NUUklORyBJTlRFUk5BTCAnICtcbiAgICAnUkVDT1JEIFBHX0RETF9DT01NQU5EIFZPSUQgVU5LTk9XTiBPUEFRVUUgUkVGQ1VSU09SICcgK1xuICAgIC8vIHNwZWMuIHR5cGVcbiAgICAnTkFNRSAnICtcbiAgICAvLyBPSUQtdHlwZXNcbiAgICAnT0lEIFJFR1BST0N8MTAgUkVHUFJPQ0VEVVJFfDEwIFJFR09QRVJ8MTAgUkVHT1BFUkFUT1J8MTAgUkVHQ0xBU1N8MTAgUkVHVFlQRXwxMCBSRUdST0xFfDEwICcgK1xuICAgICdSRUdOQU1FU1BBQ0V8MTAgUkVHQ09ORklHfDEwIFJFR0RJQ1RJT05BUll8MTAgJzsvLyArXG4gICAgLy8gc29tZSB0eXBlcyBmcm9tIHN0YW5kYXJkIGV4dGVuc2lvbnNcbiAgICAnSFNUT1JFfDEwIExPIExUUkVFfDEwICc7XG5cbiAgdmFyIFRZUEVTX1JFID1cbiAgICBUWVBFUy50cmltKClcbiAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAubWFwKCBmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHZhbC5zcGxpdCgnfCcpWzBdOyB9IClcbiAgICAgICAgIC5qb2luKCd8Jyk7XG5cbiAgdmFyIFNRTF9CSSA9XG4gICAgJ0NVUlJFTlRfVElNRSBDVVJSRU5UX1RJTUVTVEFNUCBDVVJSRU5UX1VTRVIgQ1VSUkVOVF9DQVRBTE9HfDEwIENVUlJFTlRfREFURSBMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgJyArXG4gICAgJ0NVUlJFTlRfUk9MRXwxMCBDVVJSRU5UX1NDSEVNQXwxMCBTRVNTSU9OX1VTRVIgUFVCTElDICc7XG5cbiAgdmFyIFBMUEdTUUxfQkkgPVxuICAgICdGT1VORCBORVcgT0xEIFRHX05BTUV8MTAgVEdfV0hFTnwxMCBUR19MRVZFTHwxMCBUR19PUHwxMCBUR19SRUxJRHwxMCBUR19SRUxOQU1FfDEwICcgK1xuICAgICdUR19UQUJMRV9OQU1FfDEwIFRHX1RBQkxFX1NDSEVNQXwxMCBUR19OQVJHU3wxMCBUR19BUkdWfDEwIFRHX0VWRU5UfDEwIFRHX1RBR3wxMCAnICtcbiAgICAvLyBnZXQgZGlhZ25vc3RpY3NcbiAgICAnUk9XX0NPVU5UIFJFU1VMVF9PSUR8MTAgUEdfQ09OVEVYVHwxMCBSRVRVUk5FRF9TUUxTVEFURSBDT0xVTU5fTkFNRSBDT05TVFJBSU5UX05BTUUgJyArXG4gICAgJ1BHX0RBVEFUWVBFX05BTUV8MTAgTUVTU0FHRV9URVhUIFRBQkxFX05BTUUgU0NIRU1BX05BTUUgUEdfRVhDRVBUSU9OX0RFVEFJTHwxMCAnICtcbiAgICAnUEdfRVhDRVBUSU9OX0hJTlR8MTAgUEdfRVhDRVBUSU9OX0NPTlRFWFR8MTAgJztcblxuICB2YXIgUExQR1NRTF9FWENFUFRJT05TID1cbiAgICAvLyBleGNlcHRpb25zIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9zdGF0aWMvZXJyY29kZXMtYXBwZW5kaXguaHRtbFxuICAgICdTUUxTVEFURSBTUUxFUlJNfDEwICcgK1xuICAgICdTVUNDRVNTRlVMX0NPTVBMRVRJT04gV0FSTklORyBEWU5BTUlDX1JFU1VMVF9TRVRTX1JFVFVSTkVEIElNUExJQ0lUX1pFUk9fQklUX1BBRERJTkcgJyArXG4gICAgJ05VTExfVkFMVUVfRUxJTUlOQVRFRF9JTl9TRVRfRlVOQ1RJT04gUFJJVklMRUdFX05PVF9HUkFOVEVEIFBSSVZJTEVHRV9OT1RfUkVWT0tFRCAnICtcbiAgICAnU1RSSU5HX0RBVEFfUklHSFRfVFJVTkNBVElPTiBERVBSRUNBVEVEX0ZFQVRVUkUgTk9fREFUQSBOT19BRERJVElPTkFMX0RZTkFNSUNfUkVTVUxUX1NFVFNfUkVUVVJORUQgJyArXG4gICAgJ1NRTF9TVEFURU1FTlRfTk9UX1lFVF9DT01QTEVURSBDT05ORUNUSU9OX0VYQ0VQVElPTiBDT05ORUNUSU9OX0RPRVNfTk9UX0VYSVNUIENPTk5FQ1RJT05fRkFJTFVSRSAnICtcbiAgICAnU1FMQ0xJRU5UX1VOQUJMRV9UT19FU1RBQkxJU0hfU1FMQ09OTkVDVElPTiBTUUxTRVJWRVJfUkVKRUNURURfRVNUQUJMSVNITUVOVF9PRl9TUUxDT05ORUNUSU9OICcgK1xuICAgICdUUkFOU0FDVElPTl9SRVNPTFVUSU9OX1VOS05PV04gUFJPVE9DT0xfVklPTEFUSU9OIFRSSUdHRVJFRF9BQ1RJT05fRVhDRVBUSU9OIEZFQVRVUkVfTk9UX1NVUFBPUlRFRCAnICtcbiAgICAnSU5WQUxJRF9UUkFOU0FDVElPTl9JTklUSUFUSU9OIExPQ0FUT1JfRVhDRVBUSU9OIElOVkFMSURfTE9DQVRPUl9TUEVDSUZJQ0FUSU9OIElOVkFMSURfR1JBTlRPUiAnICtcbiAgICAnSU5WQUxJRF9HUkFOVF9PUEVSQVRJT04gSU5WQUxJRF9ST0xFX1NQRUNJRklDQVRJT04gRElBR05PU1RJQ1NfRVhDRVBUSU9OICcgK1xuICAgICdTVEFDS0VEX0RJQUdOT1NUSUNTX0FDQ0VTU0VEX1dJVEhPVVRfQUNUSVZFX0hBTkRMRVIgQ0FTRV9OT1RfRk9VTkQgQ0FSRElOQUxJVFlfVklPTEFUSU9OICcgK1xuICAgICdEQVRBX0VYQ0VQVElPTiBBUlJBWV9TVUJTQ1JJUFRfRVJST1IgQ0hBUkFDVEVSX05PVF9JTl9SRVBFUlRPSVJFIERBVEVUSU1FX0ZJRUxEX09WRVJGTE9XICcgK1xuICAgICdESVZJU0lPTl9CWV9aRVJPIEVSUk9SX0lOX0FTU0lHTk1FTlQgRVNDQVBFX0NIQVJBQ1RFUl9DT05GTElDVCBJTkRJQ0FUT1JfT1ZFUkZMT1cgJyArXG4gICAgJ0lOVEVSVkFMX0ZJRUxEX09WRVJGTE9XIElOVkFMSURfQVJHVU1FTlRfRk9SX0xPR0FSSVRITSBJTlZBTElEX0FSR1VNRU5UX0ZPUl9OVElMRV9GVU5DVElPTiAnICtcbiAgICAnSU5WQUxJRF9BUkdVTUVOVF9GT1JfTlRIX1ZBTFVFX0ZVTkNUSU9OIElOVkFMSURfQVJHVU1FTlRfRk9SX1BPV0VSX0ZVTkNUSU9OICcgK1xuICAgICdJTlZBTElEX0FSR1VNRU5UX0ZPUl9XSURUSF9CVUNLRVRfRlVOQ1RJT04gSU5WQUxJRF9DSEFSQUNURVJfVkFMVUVfRk9SX0NBU1QgJyArXG4gICAgJ0lOVkFMSURfREFURVRJTUVfRk9STUFUIElOVkFMSURfRVNDQVBFX0NIQVJBQ1RFUiBJTlZBTElEX0VTQ0FQRV9PQ1RFVCBJTlZBTElEX0VTQ0FQRV9TRVFVRU5DRSAnICtcbiAgICAnTk9OU1RBTkRBUkRfVVNFX09GX0VTQ0FQRV9DSEFSQUNURVIgSU5WQUxJRF9JTkRJQ0FUT1JfUEFSQU1FVEVSX1ZBTFVFIElOVkFMSURfUEFSQU1FVEVSX1ZBTFVFICcgK1xuICAgICdJTlZBTElEX1JFR1VMQVJfRVhQUkVTU0lPTiBJTlZBTElEX1JPV19DT1VOVF9JTl9MSU1JVF9DTEFVU0UgJyArXG4gICAgJ0lOVkFMSURfUk9XX0NPVU5UX0lOX1JFU1VMVF9PRkZTRVRfQ0xBVVNFIElOVkFMSURfVEFCTEVTQU1QTEVfQVJHVU1FTlQgSU5WQUxJRF9UQUJMRVNBTVBMRV9SRVBFQVQgJyArXG4gICAgJ0lOVkFMSURfVElNRV9aT05FX0RJU1BMQUNFTUVOVF9WQUxVRSBJTlZBTElEX1VTRV9PRl9FU0NBUEVfQ0hBUkFDVEVSIE1PU1RfU1BFQ0lGSUNfVFlQRV9NSVNNQVRDSCAnICtcbiAgICAnTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCBOVUxMX1ZBTFVFX05PX0lORElDQVRPUl9QQVJBTUVURVIgTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UgJyArXG4gICAgJ1NFUVVFTkNFX0dFTkVSQVRPUl9MSU1JVF9FWENFRURFRCBTVFJJTkdfREFUQV9MRU5HVEhfTUlTTUFUQ0ggU1RSSU5HX0RBVEFfUklHSFRfVFJVTkNBVElPTiAnICtcbiAgICAnU1VCU1RSSU5HX0VSUk9SIFRSSU1fRVJST1IgVU5URVJNSU5BVEVEX0NfU1RSSU5HIFpFUk9fTEVOR1RIX0NIQVJBQ1RFUl9TVFJJTkcgJyArXG4gICAgJ0ZMT0FUSU5HX1BPSU5UX0VYQ0VQVElPTiBJTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04gSU5WQUxJRF9CSU5BUllfUkVQUkVTRU5UQVRJT04gJyArXG4gICAgJ0JBRF9DT1BZX0ZJTEVfRk9STUFUIFVOVFJBTlNMQVRBQkxFX0NIQVJBQ1RFUiBOT1RfQU5fWE1MX0RPQ1VNRU5UIElOVkFMSURfWE1MX0RPQ1VNRU5UICcgK1xuICAgICdJTlZBTElEX1hNTF9DT05URU5UIElOVkFMSURfWE1MX0NPTU1FTlQgSU5WQUxJRF9YTUxfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiAnICtcbiAgICAnSU5URUdSSVRZX0NPTlNUUkFJTlRfVklPTEFUSU9OIFJFU1RSSUNUX1ZJT0xBVElPTiBOT1RfTlVMTF9WSU9MQVRJT04gRk9SRUlHTl9LRVlfVklPTEFUSU9OICcgK1xuICAgICdVTklRVUVfVklPTEFUSU9OIENIRUNLX1ZJT0xBVElPTiBFWENMVVNJT05fVklPTEFUSU9OIElOVkFMSURfQ1VSU09SX1NUQVRFICcgK1xuICAgICdJTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFIEFDVElWRV9TUUxfVFJBTlNBQ1RJT04gQlJBTkNIX1RSQU5TQUNUSU9OX0FMUkVBRFlfQUNUSVZFICcgK1xuICAgICdIRUxEX0NVUlNPUl9SRVFVSVJFU19TQU1FX0lTT0xBVElPTl9MRVZFTCBJTkFQUFJPUFJJQVRFX0FDQ0VTU19NT0RFX0ZPUl9CUkFOQ0hfVFJBTlNBQ1RJT04gJyArXG4gICAgJ0lOQVBQUk9QUklBVEVfSVNPTEFUSU9OX0xFVkVMX0ZPUl9CUkFOQ0hfVFJBTlNBQ1RJT04gJyArXG4gICAgJ05PX0FDVElWRV9TUUxfVFJBTlNBQ1RJT05fRk9SX0JSQU5DSF9UUkFOU0FDVElPTiBSRUFEX09OTFlfU1FMX1RSQU5TQUNUSU9OICcgK1xuICAgICdTQ0hFTUFfQU5EX0RBVEFfU1RBVEVNRU5UX01JWElOR19OT1RfU1VQUE9SVEVEIE5PX0FDVElWRV9TUUxfVFJBTlNBQ1RJT04gJyArXG4gICAgJ0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04gSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQgSU5WQUxJRF9TUUxfU1RBVEVNRU5UX05BTUUgJyArXG4gICAgJ1RSSUdHRVJFRF9EQVRBX0NIQU5HRV9WSU9MQVRJT04gSU5WQUxJRF9BVVRIT1JJWkFUSU9OX1NQRUNJRklDQVRJT04gSU5WQUxJRF9QQVNTV09SRCAnICtcbiAgICAnREVQRU5ERU5UX1BSSVZJTEVHRV9ERVNDUklQVE9SU19TVElMTF9FWElTVCBERVBFTkRFTlRfT0JKRUNUU19TVElMTF9FWElTVCAnICtcbiAgICAnSU5WQUxJRF9UUkFOU0FDVElPTl9URVJNSU5BVElPTiBTUUxfUk9VVElORV9FWENFUFRJT04gRlVOQ1RJT05fRVhFQ1VURURfTk9fUkVUVVJOX1NUQVRFTUVOVCAnICtcbiAgICAnTU9ESUZZSU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgUFJPSElCSVRFRF9TUUxfU1RBVEVNRU5UX0FUVEVNUFRFRCAnICtcbiAgICAnUkVBRElOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEIElOVkFMSURfQ1VSU09SX05BTUUgRVhURVJOQUxfUk9VVElORV9FWENFUFRJT04gJyArXG4gICAgJ0NPTlRBSU5JTkdfU1FMX05PVF9QRVJNSVRURUQgTU9ESUZZSU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgJyArXG4gICAgJ1BST0hJQklURURfU1FMX1NUQVRFTUVOVF9BVFRFTVBURUQgUkVBRElOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEICcgK1xuICAgICdFWFRFUk5BTF9ST1VUSU5FX0lOVk9DQVRJT05fRVhDRVBUSU9OIElOVkFMSURfU1FMU1RBVEVfUkVUVVJORUQgTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCAnICtcbiAgICAnVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCBTUkZfUFJPVE9DT0xfVklPTEFURUQgRVZFTlRfVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCAnICtcbiAgICAnU0FWRVBPSU5UX0VYQ0VQVElPTiBJTlZBTElEX1NBVkVQT0lOVF9TUEVDSUZJQ0FUSU9OIElOVkFMSURfQ0FUQUxPR19OQU1FICcgK1xuICAgICdJTlZBTElEX1NDSEVNQV9OQU1FIFRSQU5TQUNUSU9OX1JPTExCQUNLIFRSQU5TQUNUSU9OX0lOVEVHUklUWV9DT05TVFJBSU5UX1ZJT0xBVElPTiAnICtcbiAgICAnU0VSSUFMSVpBVElPTl9GQUlMVVJFIFNUQVRFTUVOVF9DT01QTEVUSU9OX1VOS05PV04gREVBRExPQ0tfREVURUNURUQgJyArXG4gICAgJ1NZTlRBWF9FUlJPUl9PUl9BQ0NFU1NfUlVMRV9WSU9MQVRJT04gU1lOVEFYX0VSUk9SIElOU1VGRklDSUVOVF9QUklWSUxFR0UgQ0FOTk9UX0NPRVJDRSAnICtcbiAgICAnR1JPVVBJTkdfRVJST1IgV0lORE9XSU5HX0VSUk9SIElOVkFMSURfUkVDVVJTSU9OIElOVkFMSURfRk9SRUlHTl9LRVkgSU5WQUxJRF9OQU1FICcgK1xuICAgICdOQU1FX1RPT19MT05HIFJFU0VSVkVEX05BTUUgREFUQVRZUEVfTUlTTUFUQ0ggSU5ERVRFUk1JTkFURV9EQVRBVFlQRSBDT0xMQVRJT05fTUlTTUFUQ0ggJyArXG4gICAgJ0lOREVURVJNSU5BVEVfQ09MTEFUSU9OIFdST05HX09CSkVDVF9UWVBFIEdFTkVSQVRFRF9BTFdBWVMgVU5ERUZJTkVEX0NPTFVNTiAnICtcbiAgICAnVU5ERUZJTkVEX0ZVTkNUSU9OIFVOREVGSU5FRF9UQUJMRSBVTkRFRklORURfUEFSQU1FVEVSIFVOREVGSU5FRF9PQkpFQ1QgJyArXG4gICAgJ0RVUExJQ0FURV9DT0xVTU4gRFVQTElDQVRFX0NVUlNPUiBEVVBMSUNBVEVfREFUQUJBU0UgRFVQTElDQVRFX0ZVTkNUSU9OICcgK1xuICAgICdEVVBMSUNBVEVfUFJFUEFSRURfU1RBVEVNRU5UIERVUExJQ0FURV9TQ0hFTUEgRFVQTElDQVRFX1RBQkxFIERVUExJQ0FURV9BTElBUyAnICtcbiAgICAnRFVQTElDQVRFX09CSkVDVCBBTUJJR1VPVVNfQ09MVU1OIEFNQklHVU9VU19GVU5DVElPTiBBTUJJR1VPVVNfUEFSQU1FVEVSIEFNQklHVU9VU19BTElBUyAnICtcbiAgICAnSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFIElOVkFMSURfQ09MVU1OX0RFRklOSVRJT04gSU5WQUxJRF9DVVJTT1JfREVGSU5JVElPTiAnICtcbiAgICAnSU5WQUxJRF9EQVRBQkFTRV9ERUZJTklUSU9OIElOVkFMSURfRlVOQ1RJT05fREVGSU5JVElPTiAnICtcbiAgICAnSU5WQUxJRF9QUkVQQVJFRF9TVEFURU1FTlRfREVGSU5JVElPTiBJTlZBTElEX1NDSEVNQV9ERUZJTklUSU9OIElOVkFMSURfVEFCTEVfREVGSU5JVElPTiAnICtcbiAgICAnSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiBXSVRIX0NIRUNLX09QVElPTl9WSU9MQVRJT04gSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBESVNLX0ZVTEwgJyArXG4gICAgJ09VVF9PRl9NRU1PUlkgVE9PX01BTllfQ09OTkVDVElPTlMgQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCBQUk9HUkFNX0xJTUlUX0VYQ0VFREVEICcgK1xuICAgICdTVEFURU1FTlRfVE9PX0NPTVBMRVggVE9PX01BTllfQ09MVU1OUyBUT09fTUFOWV9BUkdVTUVOVFMgT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUgJyArXG4gICAgJ09CSkVDVF9JTl9VU0UgQ0FOVF9DSEFOR0VfUlVOVElNRV9QQVJBTSBMT0NLX05PVF9BVkFJTEFCTEUgT1BFUkFUT1JfSU5URVJWRU5USU9OICcgK1xuICAgICdRVUVSWV9DQU5DRUxFRCBBRE1JTl9TSFVURE9XTiBDUkFTSF9TSFVURE9XTiBDQU5OT1RfQ09OTkVDVF9OT1cgREFUQUJBU0VfRFJPUFBFRCAnICtcbiAgICAnU1lTVEVNX0VSUk9SIElPX0VSUk9SIFVOREVGSU5FRF9GSUxFIERVUExJQ0FURV9GSUxFIFNOQVBTSE9UX1RPT19PTEQgQ09ORklHX0ZJTEVfRVJST1IgJyArXG4gICAgJ0xPQ0tfRklMRV9FWElTVFMgRkRXX0VSUk9SIEZEV19DT0xVTU5fTkFNRV9OT1RfRk9VTkQgRkRXX0RZTkFNSUNfUEFSQU1FVEVSX1ZBTFVFX05FRURFRCAnICtcbiAgICAnRkRXX0ZVTkNUSU9OX1NFUVVFTkNFX0VSUk9SIEZEV19JTkNPTlNJU1RFTlRfREVTQ1JJUFRPUl9JTkZPUk1BVElPTiAnICtcbiAgICAnRkRXX0lOVkFMSURfQVRUUklCVVRFX1ZBTFVFIEZEV19JTlZBTElEX0NPTFVNTl9OQU1FIEZEV19JTlZBTElEX0NPTFVNTl9OVU1CRVIgJyArXG4gICAgJ0ZEV19JTlZBTElEX0RBVEFfVFlQRSBGRFdfSU5WQUxJRF9EQVRBX1RZUEVfREVTQ1JJUFRPUlMgJyArXG4gICAgJ0ZEV19JTlZBTElEX0RFU0NSSVBUT1JfRklFTERfSURFTlRJRklFUiBGRFdfSU5WQUxJRF9IQU5ETEUgRkRXX0lOVkFMSURfT1BUSU9OX0lOREVYICcgK1xuICAgICdGRFdfSU5WQUxJRF9PUFRJT05fTkFNRSBGRFdfSU5WQUxJRF9TVFJJTkdfTEVOR1RIX09SX0JVRkZFUl9MRU5HVEggJyArXG4gICAgJ0ZEV19JTlZBTElEX1NUUklOR19GT1JNQVQgRkRXX0lOVkFMSURfVVNFX09GX05VTExfUE9JTlRFUiBGRFdfVE9PX01BTllfSEFORExFUyAnICtcbiAgICAnRkRXX09VVF9PRl9NRU1PUlkgRkRXX05PX1NDSEVNQVMgRkRXX09QVElPTl9OQU1FX05PVF9GT1VORCBGRFdfUkVQTFlfSEFORExFICcgK1xuICAgICdGRFdfU0NIRU1BX05PVF9GT1VORCBGRFdfVEFCTEVfTk9UX0ZPVU5EIEZEV19VTkFCTEVfVE9fQ1JFQVRFX0VYRUNVVElPTiAnICtcbiAgICAnRkRXX1VOQUJMRV9UT19DUkVBVEVfUkVQTFkgRkRXX1VOQUJMRV9UT19FU1RBQkxJU0hfQ09OTkVDVElPTiBQTFBHU1FMX0VSUk9SICcgK1xuICAgICdSQUlTRV9FWENFUFRJT04gTk9fREFUQV9GT1VORCBUT09fTUFOWV9ST1dTIEFTU0VSVF9GQUlMVVJFIElOVEVSTkFMX0VSUk9SIERBVEFfQ09SUlVQVEVEICcgK1xuICAgICdJTkRFWF9DT1JSVVBURUQgJztcblxuICB2YXIgRlVOQ1RJT05TID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtYWdncmVnYXRlLmh0bWxcbiAgICAnQVJSQVlfQUdHIEFWRyBCSVRfQU5EIEJJVF9PUiBCT09MX0FORCBCT09MX09SIENPVU5UIEVWRVJZIEpTT05fQUdHIEpTT05CX0FHRyBKU09OX09CSkVDVF9BR0cgJyArXG4gICAgJ0pTT05CX09CSkVDVF9BR0cgTUFYIE1JTiBNT0RFIFNUUklOR19BR0cgU1VNIFhNTEFHRyAnICtcbiAgICAnQ09SUiBDT1ZBUl9QT1AgQ09WQVJfU0FNUCBSRUdSX0FWR1ggUkVHUl9BVkdZIFJFR1JfQ09VTlQgUkVHUl9JTlRFUkNFUFQgUkVHUl9SMiBSRUdSX1NMT1BFICcgK1xuICAgICdSRUdSX1NYWCBSRUdSX1NYWSBSRUdSX1NZWSBTVERERVYgU1REREVWX1BPUCBTVERERVZfU0FNUCBWQVJJQU5DRSBWQVJfUE9QIFZBUl9TQU1QICcgK1xuICAgICdQRVJDRU5USUxFX0NPTlQgUEVSQ0VOVElMRV9ESVNDICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy13aW5kb3cuaHRtbFxuICAgICdST1dfTlVNQkVSIFJBTksgREVOU0VfUkFOSyBQRVJDRU5UX1JBTksgQ1VNRV9ESVNUIE5USUxFIExBRyBMRUFEIEZJUlNUX1ZBTFVFIExBU1RfVkFMVUUgTlRIX1ZBTFVFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1jb21wYXJpc29uLmh0bWxcbiAgICAnTlVNX05PTk5VTExTIE5VTV9OVUxMUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtbWF0aC5odG1sXG4gICAgJ0FCUyBDQlJUIENFSUwgQ0VJTElORyBERUdSRUVTIERJViBFWFAgRkxPT1IgTE4gTE9HIE1PRCBQSSBQT1dFUiBSQURJQU5TIFJPVU5EIFNDQUxFIFNJR04gU1FSVCAnICtcbiAgICAnVFJVTkMgV0lEVEhfQlVDS0VUICcgK1xuICAgICdSQU5ET00gU0VUU0VFRCAnICtcbiAgICAnQUNPUyBBQ09TRCBBU0lOIEFTSU5EIEFUQU4gQVRBTkQgQVRBTjIgQVRBTjJEIENPUyBDT1NEIENPVCBDT1REIFNJTiBTSU5EIFRBTiBUQU5EICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1zdHJpbmcuaHRtbFxuICAgICdCSVRfTEVOR1RIIENIQVJfTEVOR1RIIENIQVJBQ1RFUl9MRU5HVEggTE9XRVIgT0NURVRfTEVOR1RIIE9WRVJMQVkgUE9TSVRJT04gU1VCU1RSSU5HIFRSRUFUIFRSSU0gVVBQRVIgJyArXG4gICAgJ0FTQ0lJIEJUUklNIENIUiBDT05DQVQgQ09OQ0FUX1dTIENPTlZFUlQgQ09OVkVSVF9GUk9NIENPTlZFUlRfVE8gREVDT0RFIEVOQ09ERSBJTklUQ0FQJyArXG4gICAgJ0xFRlQgTEVOR1RIIExQQUQgTFRSSU0gTUQ1IFBBUlNFX0lERU5UIFBHX0NMSUVOVF9FTkNPRElORyBRVU9URV9JREVOVHwxMCBRVU9URV9MSVRFUkFMfDEwICcgK1xuICAgICdRVU9URV9OVUxMQUJMRXwxMCBSRUdFWFBfTUFUQ0ggUkVHRVhQX01BVENIRVMgUkVHRVhQX1JFUExBQ0UgUkVHRVhQX1NQTElUX1RPX0FSUkFZICcgK1xuICAgICdSRUdFWFBfU1BMSVRfVE9fVEFCTEUgUkVQRUFUIFJFUExBQ0UgUkVWRVJTRSBSSUdIVCBSUEFEIFJUUklNIFNQTElUX1BBUlQgU1RSUE9TIFNVQlNUUiAnICtcbiAgICAnVE9fQVNDSUkgVE9fSEVYIFRSQU5TTEFURSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtYmluYXJ5c3RyaW5nLmh0bWxcbiAgICAnT0NURVRfTEVOR1RIIEdFVF9CSVQgR0VUX0JZVEUgU0VUX0JJVCBTRVRfQllURSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtZm9ybWF0dGluZy5odG1sXG4gICAgJ1RPX0NIQVIgVE9fREFURSBUT19OVU1CRVIgVE9fVElNRVNUQU1QICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1kYXRldGltZS5odG1sXG4gICAgJ0FHRSBDTE9DS19USU1FU1RBTVB8MTAgREFURV9QQVJUIERBVEVfVFJVTkMgSVNGSU5JVEUgSlVTVElGWV9EQVlTIEpVU1RJRllfSE9VUlMgSlVTVElGWV9JTlRFUlZBTCAnICtcbiAgICAnTUFLRV9EQVRFIE1BS0VfSU5URVJWQUx8MTAgTUFLRV9USU1FIE1BS0VfVElNRVNUQU1QfDEwIE1BS0VfVElNRVNUQU1QVFp8MTAgTk9XIFNUQVRFTUVOVF9USU1FU1RBTVB8MTAgJyArXG4gICAgJ1RJTUVPRkRBWSBUUkFOU0FDVElPTl9USU1FU1RBTVB8MTAgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWVudW0uaHRtbFxuICAgICdFTlVNX0ZJUlNUIEVOVU1fTEFTVCBFTlVNX1JBTkdFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1nZW9tZXRyeS5odG1sXG4gICAgJ0FSRUEgQ0VOVEVSIERJQU1FVEVSIEhFSUdIVCBJU0NMT1NFRCBJU09QRU4gTlBPSU5UUyBQQ0xPU0UgUE9QRU4gUkFESVVTIFdJRFRIICcgK1xuICAgICdCT1ggQk9VTkRfQk9YIENJUkNMRSBMSU5FIExTRUcgUEFUSCBQT0xZR09OICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1uZXQuaHRtbFxuICAgICdBQkJSRVYgQlJPQURDQVNUIEhPU1QgSE9TVE1BU0sgTUFTS0xFTiBORVRNQVNLIE5FVFdPUksgU0VUX01BU0tMRU4gVEVYVCBJTkVUX1NBTUVfRkFNSUxZJyArXG4gICAgJ0lORVRfTUVSR0UgTUFDQUREUjhfU0VUN0JJVCAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtdGV4dHNlYXJjaC5odG1sXG4gICAgJ0FSUkFZX1RPX1RTVkVDVE9SIEdFVF9DVVJSRU5UX1RTX0NPTkZJRyBOVU1OT0RFIFBMQUlOVE9fVFNRVUVSWSBQSFJBU0VUT19UU1FVRVJZIFdFQlNFQVJDSF9UT19UU1FVRVJZICcgK1xuICAgICdRVUVSWVRSRUUgU0VUV0VJR0hUIFNUUklQIFRPX1RTUVVFUlkgVE9fVFNWRUNUT1IgSlNPTl9UT19UU1ZFQ1RPUiBKU09OQl9UT19UU1ZFQ1RPUiBUU19ERUxFVEUgJyArXG4gICAgJ1RTX0ZJTFRFUiBUU19IRUFETElORSBUU19SQU5LIFRTX1JBTktfQ0QgVFNfUkVXUklURSBUU1FVRVJZX1BIUkFTRSBUU1ZFQ1RPUl9UT19BUlJBWSAnICtcbiAgICAnVFNWRUNUT1JfVVBEQVRFX1RSSUdHRVIgVFNWRUNUT1JfVVBEQVRFX1RSSUdHRVJfQ09MVU1OICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy14bWwuaHRtbFxuICAgICdYTUxDT01NRU5UIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEZPUkVTVCBYTUxQSSBYTUxST09UICcgK1xuICAgICdYTUxFWElTVFMgWE1MX0lTX1dFTExfRk9STUVEIFhNTF9JU19XRUxMX0ZPUk1FRF9ET0NVTUVOVCBYTUxfSVNfV0VMTF9GT1JNRURfQ09OVEVOVCAnICtcbiAgICAnWFBBVEggWFBBVEhfRVhJU1RTIFhNTFRBQkxFIFhNTE5BTUVTUEFDRVMgJyArXG4gICAgJ1RBQkxFX1RPX1hNTCBUQUJMRV9UT19YTUxTQ0hFTUEgVEFCTEVfVE9fWE1MX0FORF9YTUxTQ0hFTUEgJyArXG4gICAgJ1FVRVJZX1RPX1hNTCBRVUVSWV9UT19YTUxTQ0hFTUEgUVVFUllfVE9fWE1MX0FORF9YTUxTQ0hFTUEgJyArXG4gICAgJ0NVUlNPUl9UT19YTUwgQ1VSU09SX1RPX1hNTFNDSEVNQSAnICtcbiAgICAnU0NIRU1BX1RPX1hNTCBTQ0hFTUFfVE9fWE1MU0NIRU1BIFNDSEVNQV9UT19YTUxfQU5EX1hNTFNDSEVNQSAnICtcbiAgICAnREFUQUJBU0VfVE9fWE1MIERBVEFCQVNFX1RPX1hNTFNDSEVNQSBEQVRBQkFTRV9UT19YTUxfQU5EX1hNTFNDSEVNQSAnICtcbiAgICAnWE1MQVRUUklCVVRFUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtanNvbi5odG1sXG4gICAgJ1RPX0pTT04gVE9fSlNPTkIgQVJSQVlfVE9fSlNPTiBST1dfVE9fSlNPTiBKU09OX0JVSUxEX0FSUkFZIEpTT05CX0JVSUxEX0FSUkFZIEpTT05fQlVJTERfT0JKRUNUICcgK1xuICAgICdKU09OQl9CVUlMRF9PQkpFQ1QgSlNPTl9PQkpFQ1QgSlNPTkJfT0JKRUNUIEpTT05fQVJSQVlfTEVOR1RIIEpTT05CX0FSUkFZX0xFTkdUSCBKU09OX0VBQ0ggJyArXG4gICAgJ0pTT05CX0VBQ0ggSlNPTl9FQUNIX1RFWFQgSlNPTkJfRUFDSF9URVhUIEpTT05fRVhUUkFDVF9QQVRIIEpTT05CX0VYVFJBQ1RfUEFUSCAnICtcbiAgICAnSlNPTl9PQkpFQ1RfS0VZUyBKU09OQl9PQkpFQ1RfS0VZUyBKU09OX1BPUFVMQVRFX1JFQ09SRCBKU09OQl9QT1BVTEFURV9SRUNPUkQgSlNPTl9QT1BVTEFURV9SRUNPUkRTRVQgJyArXG4gICAgJ0pTT05CX1BPUFVMQVRFX1JFQ09SRFNFVCBKU09OX0FSUkFZX0VMRU1FTlRTIEpTT05CX0FSUkFZX0VMRU1FTlRTIEpTT05fQVJSQVlfRUxFTUVOVFNfVEVYVCAnICtcbiAgICAnSlNPTkJfQVJSQVlfRUxFTUVOVFNfVEVYVCBKU09OX1RZUEVPRiBKU09OQl9UWVBFT0YgSlNPTl9UT19SRUNPUkQgSlNPTkJfVE9fUkVDT1JEIEpTT05fVE9fUkVDT1JEU0VUICcgK1xuICAgICdKU09OQl9UT19SRUNPUkRTRVQgSlNPTl9TVFJJUF9OVUxMUyBKU09OQl9TVFJJUF9OVUxMUyBKU09OQl9TRVQgSlNPTkJfSU5TRVJUIEpTT05CX1BSRVRUWSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtc2VxdWVuY2UuaHRtbFxuICAgICdDVVJSVkFMIExBU1RWQUwgTkVYVFZBTCBTRVRWQUwgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWNvbmRpdGlvbmFsLmh0bWxcbiAgICAnQ09BTEVTQ0UgTlVMTElGIEdSRUFURVNUIExFQVNUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1hcnJheS5odG1sXG4gICAgJ0FSUkFZX0FQUEVORCBBUlJBWV9DQVQgQVJSQVlfTkRJTVMgQVJSQVlfRElNUyBBUlJBWV9GSUxMIEFSUkFZX0xFTkdUSCBBUlJBWV9MT1dFUiBBUlJBWV9QT1NJVElPTiAnICtcbiAgICAnQVJSQVlfUE9TSVRJT05TIEFSUkFZX1BSRVBFTkQgQVJSQVlfUkVNT1ZFIEFSUkFZX1JFUExBQ0UgQVJSQVlfVE9fU1RSSU5HIEFSUkFZX1VQUEVSIENBUkRJTkFMSVRZICcgK1xuICAgICdTVFJJTkdfVE9fQVJSQVkgVU5ORVNUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1yYW5nZS5odG1sXG4gICAgJ0lTRU1QVFkgTE9XRVJfSU5DIFVQUEVSX0lOQyBMT1dFUl9JTkYgVVBQRVJfSU5GIFJBTkdFX01FUkdFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1zcmYuaHRtbFxuICAgICdHRU5FUkFURV9TRVJJRVMgR0VORVJBVEVfU1VCU0NSSVBUUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtaW5mby5odG1sXG4gICAgJ0NVUlJFTlRfREFUQUJBU0UgQ1VSUkVOVF9RVUVSWSBDVVJSRU5UX1NDSEVNQXwxMCBDVVJSRU5UX1NDSEVNQVN8MTAgSU5FVF9DTElFTlRfQUREUiBJTkVUX0NMSUVOVF9QT1JUICcgK1xuICAgICdJTkVUX1NFUlZFUl9BRERSIElORVRfU0VSVkVSX1BPUlQgUk9XX1NFQ1VSSVRZX0FDVElWRSBGT1JNQVRfVFlQRSAnICtcbiAgICAnVE9fUkVHQ0xBU1MgVE9fUkVHUFJPQyBUT19SRUdQUk9DRURVUkUgVE9fUkVHT1BFUiBUT19SRUdPUEVSQVRPUiBUT19SRUdUWVBFIFRPX1JFR05BTUVTUEFDRSBUT19SRUdST0xFICcgK1xuICAgICdDT0xfREVTQ1JJUFRJT04gT0JKX0RFU0NSSVBUSU9OIFNIT0JKX0RFU0NSSVBUSU9OICcgK1xuICAgICdUWElEX0NVUlJFTlQgVFhJRF9DVVJSRU5UX0lGX0FTU0lHTkVEIFRYSURfQ1VSUkVOVF9TTkFQU0hPVCBUWElEX1NOQVBTSE9UX1hJUCBUWElEX1NOQVBTSE9UX1hNQVggJyArXG4gICAgJ1RYSURfU05BUFNIT1RfWE1JTiBUWElEX1ZJU0lCTEVfSU5fU05BUFNIT1QgVFhJRF9TVEFUVVMgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWFkbWluLmh0bWxcbiAgICAnQ1VSUkVOVF9TRVRUSU5HIFNFVF9DT05GSUcgQlJJTl9TVU1NQVJJWkVfTkVXX1ZBTFVFUyBCUklOX1NVTU1BUklaRV9SQU5HRSBCUklOX0RFU1VNTUFSSVpFX1JBTkdFICcgK1xuICAgICdHSU5fQ0xFQU5fUEVORElOR19MSVNUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy10cmlnZ2VyLmh0bWxcbiAgICAnU1VQUFJFU1NfUkVEVU5EQU5UX1VQREFURVNfVFJJR0dFUiAnICtcbiAgICAvLyBpaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9kZXZlbC9zdGF0aWMvbG8tZnVuY3MuaHRtbFxuICAgICdMT19GUk9NX0JZVEVBIExPX1BVVCBMT19HRVQgTE9fQ1JFQVQgTE9fQ1JFQVRFIExPX1VOTElOSyBMT19JTVBPUlQgTE9fRVhQT1JUIExPUkVBRCBMT1dSSVRFICcgK1xuICAgIC8vXG4gICAgJ0dST1VQSU5HIENBU1QgJztcblxuICAgIHZhciBGVU5DVElPTlNfUkUgPVxuICAgICAgRlVOQ1RJT05TLnRyaW0oKVxuICAgICAgICAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgICAgICAgIC5tYXAoIGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdmFsLnNwbGl0KCd8JylbMF07IH0gKVxuICAgICAgICAgICAgICAgLmpvaW4oJ3wnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGFsaWFzZXM6IFsncG9zdGdyZXMnLCdwb3N0Z3Jlc3FsJ10sXG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAga2V5d29yZDpcbiAgICAgICAgICAgIFNRTF9LVyArIFBMUEdTUUxfS1cgKyBST0xFX0FUVFJTLFxuICAgICAgICAgIGJ1aWx0X2luOlxuICAgICAgICAgICAgU1FMX0JJICsgUExQR1NRTF9CSSArIFBMUEdTUUxfRVhDRVBUSU9OUyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRm9yYmlkIHNvbWUgY3Vuc3RydWN0cyBmcm9tIG90aGVyIGxhbmd1YWdlcyB0byBpbXByb3ZlIGF1dG9kZXRlY3QuIEluIGZhY3RcbiAgICAgICAgLy8gXCJbYS16XTpcIiBpcyBsZWdhbCAoYXMgcGFydCBvZiBhcnJheSBzbGljZSksIGJ1dCBpbXByb2JhYmFsLlxuICAgICAgICBpbGxlZ2FsOiAvOj09fFxcV1xccypcXChcXCp8KF58XFxzKVxcJFthLXpdfHt7fFthLXpdOlxccyokfFxcLlxcLlxcLnxUTzp8RE86LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIG9mIHNvbWUgd29yZHMsIHdoaWNoIGFyZSByZXNlcnZlZCBvbmx5IGluIHNvbWUgY29udGV4dHNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJURVhUXFxzKlNFQVJDSFxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihQUklNQVJZfEZPUkVJR058Rk9SKFxccytOTyk/KVxccytLRVlcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJQQVJBTExFTFxccysoVU5TQUZFfFJFU1RSSUNURUR8U0FGRSlcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTVE9SQUdFXFxzKyhQTEFJTnxFWFRFUk5BTHxFWFRFTkRFRHxNQUlOKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYk1BVENIXFxzKyhGVUxMfFBBUlRJQUx8U0lNUExFKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYk5VTExTXFxzKyhGSVJTVHxMQVNUKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkVWRU5UXFxzK1RSSUdHRVJcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGIoTUFQUElOR3xPUilcXHMrUkVQTEFDRVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihGUk9NfFRPKVxccysoUFJPR1JBTXxTVERJTnxTVERPVVQpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKFNIQVJFfEVYQ0xVU0lWRSlcXHMrTU9ERVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihMRUZUfFJJR0hUKVxccysoT1VURVJcXHMrKT9KT0lOXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKEZFVENIfE1PVkUpXFxzKyhORVhUfFBSSU9SfEZJUlNUfExBU1R8QUJTT0xVVEV8UkVMQVRJVkV8Rk9SV0FSRHxCQUNLV0FSRClcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJQUkVTRVJWRVxccytST1dTXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiRElTQ0FSRFxccytQTEFOU1xcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlJFRkVSRU5DSU5HXFxzKyhPTER8TkVXKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlNLSVBcXHMrTE9DS0VEXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiR1JPVVBJTkdcXHMrU0VUU1xcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihCSU5BUll8SU5TRU5TSVRJVkV8U0NST0xMfE5PXFxzK1NDUk9MTClcXHMrKENVUlNPUnxGT1IpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKFdJVEh8V0lUSE9VVClcXHMrSE9MRFxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYldJVEhcXHMrKENBU0NBREVEfExPQ0FMKVxccytDSEVDS1xccytPUFRJT05cXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJFWENMVURFXFxzKyhUSUVTfE5PXFxzK09USEVSUylcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJGT1JNQVRcXHMrKFRFWFR8WE1MfEpTT058WUFNTClcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTRVRcXHMrKChTRVNTSU9OfExPQ0FMKVxccyspP05BTUVTXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiSVNcXHMrKE5PVFxccyspP1VOS05PV05cXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTRUNVUklUWVxccytMQUJFTFxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlNUQU5EQUxPTkVcXHMrKFlFU3xOT3xOT1xccytWQUxVRSlcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJXSVRIXFxzKyhOT1xccyspP0RBVEFcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGIoRk9SRUlHTnxTRVQpXFxzK0RBVEFcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTRVRcXHMrKENBVEFMT0d8Q09OU1RSQUlOVFMpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKFdJVEh8Rk9SKVxccytPUkRJTkFMSVRZXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiSVNcXHMrKE5PVFxccyspP0RPQ1VNRU5UXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiWE1MXFxzK09QVElPTlxccysoRE9DVU1FTlR8Q09OVEVOVClcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGIoU1RSSVB8UFJFU0VSVkUpXFxzK1dISVRFU1BBQ0VcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJOT1xccysoQUNUSU9OfE1BWFZBTFVFfE1JTlZBTFVFKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlBBUlRJVElPTlxccytCWVxccysoUkFOR0V8TElTVHxIQVNIKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkFUXFxzK1RJTUVcXHMrWk9ORVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkdSQU5URURcXHMrQllcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJSRVRVUk5cXHMrKFFVRVJZfE5FWFQpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKEFUVEFDSHxERVRBQ0gpXFxzK1BBUlRJVElPTlxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkZPUkNFXFxzK1JPV1xccytMRVZFTFxccytTRUNVUklUWVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihJTkNMVURJTkd8RVhDTFVESU5HKVxccysoQ09NTUVOVFN8Q09OU1RSQUlOVFN8REVGQVVMVFN8SURFTlRJVFl8SU5ERVhFU3xTVEFUSVNUSUNTfFNUT1JBR0V8QUxMKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkFTXFxzKyhBU1NJR05NRU5UfElNUExJQ0lUfFBFUk1JU1NJVkV8UkVTVFJJQ1RJVkV8RU5VTXxSQU5HRSlcXGIvIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIGZ1bmN0aW9ucyBuYW1lZCBhcyBrZXl3b3JkcywgZm9sbG93ZWQgYnkgJygnXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoRk9STUFUfEZBTUlMWXxWRVJTSU9OKVxccypcXCgvLFxuICAgICAgICAgICAgLy9rZXl3b3JkczogeyBidWlsdF9pbjogJ0ZPUk1BVCBGQU1JTFkgVkVSU0lPTicgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gSU5DTFVERSAoIC4uLiApIGluIGluZGV4X3BhcmFtZXRlcnMgaW4gQ1JFQVRFIFRBQkxFXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJJTkNMVURFXFxzKlxcKC8sXG4gICAgICAgICAgICBrZXl3b3JkczogJ0lOQ0xVREUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBub3QgaGlnaGxpZ2h0IFJBTkdFIGlmIG5vdCBpbiBmcmFtZV9jbGF1c2UgKG5vdCAxMDAlIGNvcnJlY3QsIGJ1dCBzZWVtcyBzYXRpc2ZhY3RvcnkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJSQU5HRSg/IVxccyooQkVUV0VFTnxVTkJPVU5ERUR8Q1VSUkVOVHxbLTAtOV0rKSkvXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBkaXNhYmxlIGhpZ2hsaWdodGluZyBpbiBjb21tYW5kcyBDUkVBVEUgQUdHUkVHQVRFL0NPTExBVElPTi9EQVRBQkFTRS9PUEVSVE9SL1RFWFQgU0VBUkNIIC4uLi9UWVBFXG4gICAgICAgICAgLy8gYW5kIGluIFBML3BnU1FMIFJBSVNFIC4uLiBVU0lOR1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFZFUlNJT058T1dORVJ8VEVNUExBVEV8VEFCTEVTUEFDRXxDT05ORUNUSU9OXFxzK0xJTUlUfFBST0NFRFVSRXxSRVNUUklDVHxKT0lOfFBBUlNFUnxDT1BZfFNUQVJUfEVORHxDT0xMQVRJT058SU5QVVR8QU5BTFlaRXxTVE9SQUdFfExJS0V8REVGQVVMVHxERUxJTUlURVJ8RU5DT0RJTkd8Q09MVU1OfENPTlNUUkFJTlR8VEFCTEV8U0NIRU1BKVxccyo9L1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gUEdfc210aDsgSEFTX3NvbWVfUFJJVklMRUdFXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy9jbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgICAgICBiZWdpbjogL1xcYihQR19cXHcrP3xIQVNfW0EtWl9dK19QUklWSUxFR0UpXFxiLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIGV4dHJhY3RcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYkVYVFJBQ1RcXHMqXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcYkZST01cXGIvLFxuICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgICAgLy9idWlsdF9pbjogJ0VYVFJBQ1QnLFxuICAgICAgICAgICAgICB0eXBlOiAgICAgJ0NFTlRVUlkgREFZIERFQ0FERSBET1cgRE9ZIEVQT0NIIEhPVVIgSVNPRE9XIElTT1lFQVIgTUlDUk9TRUNPTkRTICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ01JTExFTk5JVU0gTUlMTElTRUNPTkRTIE1JTlVURSBNT05USCBRVUFSVEVSIFNFQ09ORCBUSU1FWk9ORSBUSU1FWk9ORV9IT1VSICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1RJTUVaT05FX01JTlVURSBXRUVLIFlFQVInXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyB4bWxlbGVtZW50LCB4bWxwaSAtIHNwZWNpYWwgTkFNRVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFhNTEVMRU1FTlR8WE1MUEkpXFxzKlxcKFxccypOQU1FLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAgIC8vYnVpbHRfaW46ICdYTUxFTEVNRU5UIFhNTFBJJyxcbiAgICAgICAgICAgICAga2V5d29yZDogICdOQU1FJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8geG1scGFyc2UsIHhtbHNlcmlhbGl6ZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFhNTFBBUlNFfFhNTFNFUklBTElaRSlcXHMqXFwoXFxzKihET0NVTUVOVHxDT05URU5UKS8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICAvL2J1aWx0X2luOiAnWE1MUEFSU0UgWE1MU0VSSUFMSVpFJyxcbiAgICAgICAgICAgICAga2V5d29yZDogICdET0NVTUVOVCBDT05URU5UJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gU2VxdWVuY2VzLiBXZSBhY3R1YWxseSBza2lwIGV2ZXJ5dGhpbmcgYmV0d2VlbiBDQUNIRXxJTkNSRU1FTlR8TUFYVkFMVUV8TUlOVkFMVUUgYW5kXG4gICAgICAgICAgLy8gbmVhcmVzdCBmb2xsb3dpbmcgbnVtZXJpYyBjb25zdGFudC4gV2l0aG91dCB3aXRoIHRyaWNrIHdlIGZpbmQgYSBsb3Qgb2YgXCJrZXl3b3Jkc1wiXG4gICAgICAgICAgLy8gaW4gJ2F2cmFzbScgYXV0b2RldGVjdGlvbiB0ZXN0Li4uXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ0NBQ0hFIElOQ1JFTUVOVCBNQVhWQUxVRSBNSU5WQUxVRScsXG4gICAgICAgICAgICBlbmQ6IGhsanMuQ19OVU1CRVJfUkUsXG4gICAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogJ0JZIENBQ0hFIElOQ1JFTUVOVCBNQVhWQUxVRSBNSU5WQUxVRSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIFdJVEh8V0lUSE9VVCBUSU1FIFpPTkUgYXMgcGFydCBvZiBkYXRhdHlwZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC9cXGIoV0lUSHxXSVRIT1VUKVxccytUSU1FXFxzK1pPTkVcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBJTlRFUlZBTCBvcHRpb25hbCBmaWVsZHNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiSU5URVJWQUxcXHMrKFlFQVJ8TU9OVEh8REFZfEhPVVJ8TUlOVVRFfFNFQ09ORCkoXFxzK1RPXFxzKyhNT05USHxIT1VSfE1JTlVURXxTRUNPTkQpKT9cXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBQc2V1ZG8tdHlwZXMgd2hpY2ggYWxsb3dlZCBvbmx5IGFzIHJldHVybiB0eXBlXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJSRVRVUk5TXFxzKyhMQU5HVUFHRV9IQU5ETEVSfFRSSUdHRVJ8RVZFTlRfVFJJR0dFUnxGRFdfSEFORExFUnxJTkRFWF9BTV9IQU5ETEVSfFRTTV9IQU5ETEVSKVxcYi8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBrZXl3b3JkOiAnUkVUVVJOUycsXG4gICAgICAgICAgICAgIHR5cGU6ICdMQU5HVUFHRV9IQU5ETEVSIFRSSUdHRVIgRVZFTlRfVFJJR0dFUiBGRFdfSEFORExFUiBJTkRFWF9BTV9IQU5ETEVSIFRTTV9IQU5ETEVSJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gS25vd24gZnVuY3Rpb25zIC0gb25seSB3aGVuIGZvbGxvd2VkIGJ5ICcoJ1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEZVTkNUSU9OU19SRSArICcpXFxcXHMqXFxcXCgnXG4gICAgICAgICAgICAvL2tleXdvcmRzOiB7IGJ1aWx0X2luOiBGVU5DVElPTlMgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gVHlwZXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwuKCcgKyBUWVBFU19SRSArICcpXFxcXGInIC8vIHByZXZlbnQgaGlnaGxpZ2h0IGFzIHR5cGUsIHNheSwgJ29pZCcgaW4gJ3BnY2xhc3Mub2lkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYignICsgVFlQRVNfUkUgKyAnKVxcXFxzK1BBVEhcXFxcYicsIC8vIGluIFhNTFRBQkxFXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBrZXl3b3JkOiAnUEFUSCcsIC8vIGhvcGVmdWxseSBubyBvbmUgd291bGQgdXNlIFBBVEggdHlwZSBpbiBYTUxUQUJMRS4uLlxuICAgICAgICAgICAgICB0eXBlOiBUWVBFUy5yZXBsYWNlKCdQQVRIICcsJycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRZUEVTX1JFICsgJylcXFxcYidcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIFN0cmluZ3MsIHNlZSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9zcWwtc3ludGF4LWxleGljYWwuaHRtbCNTUUwtU1lOVEFYLUNPTlNUQU5UU1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgICAgICBjb250YWluczogW3tiZWdpbjogJ1xcJ1xcJyd9XVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKGV8RXx1JnxVJilcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7YmVnaW46ICdcXFxcXFxcXC4nfV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogRE9MTEFSX1NUUklORyxcbiAgICAgICAgICAgIGVuZFNhbWVBc0JlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGFjdHVhbGx5IHdlIHdhbnQgdGhlbSBhbGwgZXhjZXB0IFNRTDsgbGlzdGVkIGFyZSB0aG9zZSB3aXRoIGtub3duIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAgICAgICAgIC8vIGFuZCBYTUwgKyBKU09OIGp1c3QgaW4gY2FzZVxuICAgICAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiBbJ3Bnc3FsJywncGVybCcsJ3B5dGhvbicsJ3RjbCcsJ3InLCdsdWEnLCdqYXZhJywncGhwJywncnVieScsJ2Jhc2gnLCdzY2hlbWUnLCd4bWwnLCdqc29uJ10sXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gaWRlbnRpZmllcnMgaW4gcXVvdGVzXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAvLyBjb21tZW50c1xuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIC8vIFBML3BnU1FMIHN0YWZmXG4gICAgICAgICAgLy8gJVJPV1RZUEUsICVUWVBFLCAkblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge2JlZ2luOiAnJShST1cpP1RZUEUnLCByZWxldmFuY2U6IDEwfSwgLy8gJVRZUEUsICVST1dUWVBFXG4gICAgICAgICAgICAgIHtiZWdpbjogJ1xcXFwkXFxcXGQrJ30sICAgICAgICAgICAgICAgICAgICAvLyAkblxuICAgICAgICAgICAgICB7YmVnaW46ICdeI1xcXFx3JywgZW5kOiAnJCd9ICAgICAgICAgICAgIC8vICNjb21waWxlciBvcHRpb25cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIDw8bGFiZWxlcz4+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIGJlZ2luOiBMQUJFTCxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBiZWdpbjogJ1xcXFwkK1thLXpBLVpfXFx4N2YtXFx4ZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHhmZl0qJ1xuICB9O1xuICB2YXIgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogLzxcXD8ocGhwKT98XFw/Pi9cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBQUkVQUk9DRVNTT1JdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYlwiJywgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ2JcXCcnLCBlbmQ6ICdcXCcnXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pXG4gICAgXVxuICB9O1xuICB2YXIgTlVNQkVSID0ge3ZhcmlhbnRzOiBbaGxqcy5CSU5BUllfTlVNQkVSX01PREUsIGhsanMuQ19OVU1CRVJfTU9ERV19O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGhwJywgJ3BocDMnLCAncGhwNCcsICdwaHA1JywgJ3BocDYnLCAncGhwNyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6XG4gICAgICAnYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggJyArXG4gICAgICAnYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgJyArXG4gICAgICAncHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yICcgK1xuICAgICAgJ3JldHVybiBwYXJlbnQgY2xvbmUgdXNlIF9fQ0xBU1NfXyBfX0xJTkVfXyBlbHNlIGJyZWFrIHByaW50IGV2YWwgbmV3ICcgK1xuICAgICAgJ2NhdGNoIF9fTUVUSE9EX18gY2FzZSBleGNlcHRpb24gZGVmYXVsdCBkaWUgcmVxdWlyZSBfX0ZVTkNUSU9OX18gJyArXG4gICAgICAnZW5kZGVjbGFyZSBmaW5hbCB0cnkgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgJyArXG4gICAgICAndHJhaXQgZ290byBpbnN0YW5jZW9mIGluc3RlYWRvZiBfX0RJUl9fIF9fTkFNRVNQQUNFX18gJyArXG4gICAgICAneWllbGQgZmluYWxseScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJyQnLCB7Y29udGFpbnM6IFtQUkVQUk9DRVNTT1JdfSksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdfX2hhbHRfY29tcGlsZXIuKz87JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPDw8WydcIl0/XFx3K1snXCJdPyQvLCBlbmQ6IC9eXFx3Kzs/JC8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogL1xcJFxcdysvfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAvXFx7XFwkLywgZW5kOiAvXFx9L31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLCBiZWdpbjogL1xcJHRoaXNcXGIvXG4gICAgICB9LFxuICAgICAgVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIC8vIHN3YWxsb3cgY29tcG9zZWQgaWRlbnRpZmllcnMgdG8gYXZvaWQgcGFyc2luZyB0aGVtIGFzIGtleXdvcmRzXG4gICAgICAgIGJlZ2luOiAvKDo6fC0+KStbYS16QS1aX1xceDdmLVxceGZmXVthLXpBLVowLTlfXFx4N2YtXFx4ZmZdKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAvWzt7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcJHxcXFxcW3wlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6ICd7JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6XFwoXFwkXCJdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLCBlbmQ6ICc7JyxcbiAgICAgICAgaWxsZWdhbDogL1tcXC4nXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAndXNlJywgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJz0+JyAvLyBObyBtYXJrdXAsIGp1c3QgYSByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUlxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGlzYWJsZUF1dG9kZXRlY3Q6IHRydWVcbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWN0b3IgYWRkcmVzc29mIGFuZCBhcyBiZSBicmVhayBjbGFzcyBjb21waWxlX2Vycm9yIGNvbXBpbGVfaW50cmluc2ljICcgK1xuICAgICAgJ2NvbnN1bWUgY29udGludWUgZGVsZWdhdGUgZGlnZXN0b2YgZG8gZWxzZSBlbHNlaWYgZW1iZWQgZW5kIGVycm9yICcgK1xuICAgICAgJ2ZvciBmdW4gaWYgaWZkZWYgaW4gaW50ZXJmYWNlIGlzIGlzbnQgbGFtYmRhIGxldCBtYXRjaCBuZXcgbm90IG9iamVjdCAnICtcbiAgICAgICdvciBwcmltaXRpdmUgcmVjb3ZlciByZXBlYXQgcmV0dXJuIHN0cnVjdCB0aGVuIHRyYWl0IHRyeSB0eXBlIHVudGlsICcgK1xuICAgICAgJ3VzZSB2YXIgd2hlcmUgd2hpbGUgd2l0aCB4b3InLFxuICAgIG1ldGE6XG4gICAgICAnaXNvIHZhbCB0YWcgdHJuIGJveCByZWYnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndGhpcyBmYWxzZSB0cnVlJ1xuICB9O1xuXG4gIHZhciBUUklQTEVfUVVPVEVfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuXG4gIHZhciBRVU9URV9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gIH07XG5cbiAgdmFyIFNJTkdMRV9RVU9URV9DSEFSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBUWVBFX05BTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYl8/W0EtWl1bXFxcXHddKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBSSU1FRF9OQU1FID0ge1xuICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcJycsIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBOVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnKC0/KShcXFxcYjBbeFhdW2EtZkEtRjAtOV0rfFxcXFxiMFtiQl1bMDFdK3woXFxcXGJcXFxcZCsoX1xcXFxkKyk/KFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBgRlVOQ1RJT05gIGFuZCBgQ0xBU1NgIG1vZGVzIHdlcmUgaW50ZW50aW9uYWxseSByZW1vdmVkIHRvIHNpbXBsaWZ5XG4gICAqIGhpZ2hsaWdodGluZyBhbmQgZml4IGNhc2VzIGxpa2VcbiAgICogYGBgXG4gICAqIGludGVyZmFjZSBJdGVyYXRvcltBOiBBXVxuICAgKiAgIGZ1biBoYXNfbmV4dCgpOiBCb29sXG4gICAqICAgZnVuIG5leHQoKTogQT9cbiAgICogYGBgXG4gICAqIHdoZXJlIGl0IGlzIHZhbGlkIHRvIGhhdmUgYSBmdW5jdGlvbiBoZWFkIHdpdGhvdXQgYSBib2R5XG4gICAqL1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBUWVBFX05BTUUsXG4gICAgICBUUklQTEVfUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBRVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIFNJTkdMRV9RVU9URV9DSEFSX01PREUsXG4gICAgICBQUklNRURfTkFNRSxcbiAgICAgIE5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKXtcblxuICB2YXIgVFlQRVMgPVxuICAgIFtcInN0cmluZ1wiLCBcImNoYXJcIiwgXCJieXRlXCIsIFwiaW50XCIsIFwibG9uZ1wiLCBcImJvb2xcIiwgIFwiZGVjaW1hbFwiLCAgXCJzaW5nbGVcIixcbiAgICAgXCJkb3VibGVcIiwgXCJEYXRlVGltZVwiLCBcInhtbFwiLCBcImFycmF5XCIsIFwiaGFzaHRhYmxlXCIsIFwidm9pZFwiXTtcblxuICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzE0NDI4KHY9dnMuODUpLmFzcHhcbiAgdmFyIFZBTElEX1ZFUkJTID1cbiAgICAnQWRkfENsZWFyfENsb3NlfENvcHl8RW50ZXJ8RXhpdHxGaW5kfEZvcm1hdHxHZXR8SGlkZXxKb2lufExvY2t8JyArXG4gICAgJ01vdmV8TmV3fE9wZW58T3B0aW1pemV8UG9wfFB1c2h8UmVkb3xSZW1vdmV8UmVuYW1lfFJlc2V0fFJlc2l6ZXwnICtcbiAgICAnU2VhcmNofFNlbGVjdHxTZXR8U2hvd3xTa2lwfFNwbGl0fFN0ZXB8U3dpdGNofFVuZG98VW5sb2NrfCcgK1xuICAgICdXYXRjaHxCYWNrdXB8Q2hlY2twb2ludHxDb21wYXJlfENvbXByZXNzfENvbnZlcnR8Q29udmVydEZyb218JyArXG4gICAgJ0NvbnZlcnRUb3xEaXNtb3VudHxFZGl0fEV4cGFuZHxFeHBvcnR8R3JvdXB8SW1wb3J0fEluaXRpYWxpemV8JyArXG4gICAgJ0xpbWl0fE1lcmdlfE5ld3xPdXR8UHVibGlzaHxSZXN0b3JlfFNhdmV8U3luY3xVbnB1Ymxpc2h8VXBkYXRlfCcgK1xuICAgICdBcHByb3ZlfEFzc2VydHxDb21wbGV0ZXxDb25maXJtfERlbnl8RGlzYWJsZXxFbmFibGV8SW5zdGFsbHxJbnZva2V8UmVnaXN0ZXJ8JyArXG4gICAgJ1JlcXVlc3R8UmVzdGFydHxSZXN1bWV8U3RhcnR8U3RvcHxTdWJtaXR8U3VzcGVuZHxVbmluc3RhbGx8JyArXG4gICAgJ1VucmVnaXN0ZXJ8V2FpdHxEZWJ1Z3xNZWFzdXJlfFBpbmd8UmVwYWlyfFJlc29sdmV8VGVzdHxUcmFjZXxDb25uZWN0fCcgK1xuICAgICdEaXNjb25uZWN0fFJlYWR8UmVjZWl2ZXxTZW5kfFdyaXRlfEJsb2NrfEdyYW50fFByb3RlY3R8UmV2b2tlfFVuYmxvY2t8JyArXG4gICAgJ1VucHJvdGVjdHxVc2V8Rm9yRWFjaHxTb3J0fFRlZXxXaGVyZSc7XG5cbiAgdmFyIENPTVBBUklTT05fT1BFUkFUT1JTID1cbiAgICAnLWFuZHwtYXN8LWJhbmR8LWJub3R8LWJvcnwtYnhvcnwtY2FzZXNlbnNpdGl2ZXwtY2NvbnRhaW5zfC1jZXF8LWNnZXwtY2d0fCcgK1xuICAgICctY2xlfC1jbGlrZXwtY2x0fC1jbWF0Y2h8LWNuZXwtY25vdGNvbnRhaW5zfC1jbm90bGlrZXwtY25vdG1hdGNofC1jb250YWluc3wnICtcbiAgICAnLWNyZXBsYWNlfC1jc3BsaXR8LWVxfC1leGFjdHwtZnwtZmlsZXwtZ2V8LWd0fC1pY29udGFpbnN8LWllcXwtaWdlfC1pZ3R8JyArXG4gICAgJy1pbGV8LWlsaWtlfC1pbHR8LWltYXRjaHwtaW58LWluZXwtaW5vdGNvbnRhaW5zfC1pbm90bGlrZXwtaW5vdG1hdGNofCcgK1xuICAgICctaXJlcGxhY2V8LWlzfC1pc25vdHwtaXNwbGl0fC1qb2lufC1sZXwtbGlrZXwtbHR8LW1hdGNofC1uZXwtbm90fCcgK1xuICAgICctbm90Y29udGFpbnN8LW5vdGlufC1ub3RsaWtlfC1ub3RtYXRjaHwtb3J8LXJlZ2V4fC1yZXBsYWNlfC1zaGx8LXNocnwnICtcbiAgICAnLXNwbGl0fC13aWxkY2FyZHwteG9yJztcblxuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ2lmIGVsc2UgZm9yZWFjaCByZXR1cm4gZG8gd2hpbGUgdW50aWwgZWxzZWlmIGJlZ2luIGZvciB0cmFwIGRhdGEgZHluYW1pY3BhcmFtICcgK1xuICAgICdlbmQgYnJlYWsgdGhyb3cgcGFyYW0gY29udGludWUgZmluYWxseSBpbiBzd2l0Y2ggZXhpdCBmaWx0ZXIgdHJ5IHByb2Nlc3MgY2F0Y2ggJyArXG4gICAgJ2hpZGRlbiBzdGF0aWMgcGFyYW1ldGVyJ1xuICAgIC8vIFRPRE86ICd2YWxpZGF0ZVtBLVpdKycgY2FuJ3Qgd29yayBpbiBrZXl3b3Jkc1xuICB9O1xuXG4gIHZhciBUSVRMRV9OQU1FX1JFID0gL1xcd1tcXHdcXGRdKigoLSlbXFx3XFxkXSspKi87XG5cbiAgdmFyIEJBQ0tUSUNLX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ2BbXFxcXHNcXFxcU10nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBWQVIgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvXFwkXFxCLyB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdrZXl3b3JkJywgYmVnaW46IC9cXCR0aGlzLyB9LFxuICAgICAgeyBiZWdpbjogL1xcJFtcXHdcXGRdW1xcd1xcZF86XSovIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9cXCQobnVsbHx0cnVlfGZhbHNlKVxcYi9cbiAgfTtcblxuICB2YXIgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW3sgYmVnaW46IC9cIi8sIGVuZDogL1wiLyB9LCB7IGJlZ2luOiAvQFwiLywgZW5kOiAvXlwiQC8gfV0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJBQ0tUSUNLX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFtBLXpdLywgZW5kOiAvW15BLXpdL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogLycvLCBlbmQ6IC8nLyB9LFxuICAgICAgeyBiZWdpbjogL0AnLywgZW5kOiAvXidALyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBQU19IRUxQVEFHUyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZG9jdGFnXCIsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8qIG5vIHBhcmFtYXRlciBoZWxwIHRhZ3MgKi9cbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXC4oc3lub3BzaXN8ZGVzY3JpcHRpb258ZXhhbXBsZXxpbnB1dHN8b3V0cHV0c3xub3Rlc3xsaW5rfGNvbXBvbmVudHxyb2xlfGZ1bmN0aW9uYWxpdHkpL1xuICAgICAgfSxcbiAgICAgIC8qIG9uZSBwYXJhbWV0ZXIgaGVscCB0YWdzICovXG4gICAgICB7IGJlZ2luOiAvXFwuKHBhcmFtZXRlcnxmb3J3YXJkaGVscHRhcmdldG5hbWV8Zm9yd2FyZGhlbHBjYXRlZ29yeXxyZW1vdGVoZWxwcnVuc3BhY2V8ZXh0ZXJuYWxoZWxwKVxccytcXFMrLyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBQU19DT01NRU5UID0gaGxqcy5pbmhlcml0KFxuICAgIGhsanMuQ09NTUVOVChudWxsLCBudWxsKSxcbiAgICB7XG4gICAgICB2YXJpYW50czogW1xuICAgICAgICAvKiBzaW5nbGUtbGluZSBjb21tZW50ICovXG4gICAgICAgIHsgYmVnaW46IC8jLywgZW5kOiAvJC8gfSxcbiAgICAgICAgLyogbXVsdGktbGluZSBjb21tZW50ICovXG4gICAgICAgIHsgYmVnaW46IC88Iy8sIGVuZDogLyM+LyB9XG4gICAgICBdLFxuICAgICAgY29udGFpbnM6IFtQU19IRUxQVEFHU11cbiAgICB9XG4gICk7XG5cbiAgdmFyIENNRExFVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnKCcuY29uY2F0KFZBTElEX1ZFUkJTLCAnKSsoLSlbXFxcXHdcXFxcZF0rJykgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgUFNfQ0xBU1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBlbnVtJywgZW5kOiAvXFxzKlt7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXVxuICB9O1xuXG4gIHZhciBQU19GVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9mdW5jdGlvblxccysvLCBlbmQ6IC9cXHMqXFx7fCQvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiBcImZ1bmN0aW9uXCIsIHJlbGV2YW5jZTogMCwgY2xhc3NOYW1lOiBcImtleXdvcmRcIiB9LFxuICAgICAgeyBjbGFzc05hbWU6IFwidGl0bGVcIixcbiAgICAgICAgYmVnaW46IFRJVExFX05BTUVfUkUsIHJlbGV2YW5jZTowIH0sXG4gICAgICB7IGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLywgY2xhc3NOYW1lOiBcInBhcmFtc1wiLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbVkFSXSB9XG4gICAgICAvLyBDTURMRVRTXG4gICAgXVxuICB9O1xuXG4gIC8vIFVzaW5nIHN0YXRtZW50LCBwbHVzIHR5cGUsIHBsdXMgYXNzZW1ibHkgbmFtZS5cbiAgdmFyIFBTX1VTSU5HID0ge1xuICAgIGJlZ2luOiAvdXNpbmdcXHMvLCBlbmQ6IC8kLyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgQVBPU19TVFJJTkcsXG4gICAgICB7IGNsYXNzTmFtZTogJ2tleXdvcmQnLCBiZWdpbjogLyh1c2luZ3xhc3NlbWJseXxjb21tYW5kfG1vZHVsZXxuYW1lc3BhY2V8dHlwZSkvIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gQ29tcGVyaXNvbiBvcGVyYXRvcnMgJiBmdW5jdGlvbiBuYW1lZCBwYXJhbWV0ZXJzLlxuICB2YXIgUFNfQVJHVU1FTlRTID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBQUyBsaXRlcmFscyBhcmUgcHJldHR5IHZlcmJvc2Ugc28gaXQncyBhIGdvb2QgaWRlYSB0byBhY2NlbnQgdGhlbSBhIGJpdC5cbiAgICAgIHsgY2xhc3NOYW1lOiAnb3BlcmF0b3InLCBiZWdpbjogJygnLmNvbmNhdChDT01QQVJJU09OX09QRVJBVE9SUywgJylcXFxcYicpIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2xpdGVyYWwnLCBiZWdpbjogLygtKVtcXHdcXGRdKy8sIHJlbGV2YW5jZTowIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFNUQVRJQ19NRU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICBiZWdpbjogLzo6XFx3K1xcYi8sIGVuZDogLyQvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsIGJlZ2luOiAvXFx3Ky8sIGVuZHNQYXJlbnQ6IHRydWUgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgSEFTSF9TSUdOUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLFxuICAgIGJlZ2luOiAvXFxAXFxCLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgUFNfTkVXX09CSkVDVF9UWVBFID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBiZWdpbjogL05ldy1PYmplY3RcXHMrXFx3LywgZW5kOiAvJC8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9OZXctT2JqZWN0XFxzKy8sIHJlbGV2YW5jZTogMCB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46IC8oW1xcd1xcLl0pKy8sIGVuZHNQYXJlbnQ6IHRydWUgfVxuICAgIF1cbiAgfTtcblxuICAvLyBJdCdzIGEgdmVyeSBnZW5lcmFsIHJ1bGUgc28gSSdsbCBuYXJyb3cgaXQgYSBiaXQgd2l0aCBzb21lIHN0cmljdCBib3VuZGFyaWVzXG4gIC8vIHRvIGF2b2lkIGFueSBwb3NzaWJsZSBmYWxzZS1wb3NpdGl2ZSBjb2xsaXNpb25zIVxuICB2YXIgUFNfTUVUSE9EUyA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9cXFsuKlxcXVxccypbXFx3XStbIF0/P1xcKC8sIGVuZDogLyQvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJywgYmVnaW46ICcoJy5jb25jYXQoXG4gICAgICAgIEtFWVdPUkRTLmtleXdvcmQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMvZywgJ3wnXG4gICAgICAgICksICcpXFxcXGInKSxcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBlbmRzUGFyZW50OiB0cnVlIH0pXG4gICAgXVxuICB9O1xuXG4gIHZhciBHRU5UTEVNQU5TX1NFVCA9IFtcbiAgICAvLyBTVEFUSUNfTUVNQkVSLFxuICAgIFBTX01FVEhPRFMsXG4gICAgUFNfQ09NTUVOVCxcbiAgICBCQUNLVElDS19FU0NBUEUsXG4gICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICBRVU9URV9TVFJJTkcsXG4gICAgQVBPU19TVFJJTkcsXG4gICAgLy8gUFNfTkVXX09CSkVDVF9UWVBFLFxuICAgIENNRExFVFMsXG4gICAgVkFSLFxuICAgIExJVEVSQUwsXG4gICAgSEFTSF9TSUdOU1xuICBdO1xuXG4gIHZhciBQU19UWVBFID0ge1xuICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtdLmNvbmNhdChcbiAgICAgICdzZWxmJyxcbiAgICAgIEdFTlRMRU1BTlNfU0VULFxuICAgICAgeyBiZWdpbjogXCIoXCIgKyBUWVBFUy5qb2luKFwifFwiKSArIFwiKVwiLCBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIiwgcmVsZXZhbmNlOjAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAndHlwZScsIGJlZ2luOiAvW1xcLlxcd1xcZF0rLywgcmVsZXZhbmNlOiAwIH1cbiAgICApXG4gIH07XG5cbiAgUFNfTUVUSE9EUy5jb250YWlucy51bnNoaWZ0KFBTX1RZUEUpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbXCJwc1wiLCBcInBzMVwiXSxcbiAgICBsZXhlbWVzOiAvLT9bQS16XFwuXFwtXSsvLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBHRU5UTEVNQU5TX1NFVC5jb25jYXQoXG4gICAgICBQU19DTEFTUyxcbiAgICAgIFBTX0ZVTkNUSU9OLFxuICAgICAgUFNfVVNJTkcsXG4gICAgICBQU19BUkdVTUVOVFMsXG4gICAgICBQU19UWVBFXG4gICAgKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ0J1ZmZlcmVkUmVhZGVyIFBWZWN0b3IgUEZvbnQgUEltYWdlIFBHcmFwaGljcyBIYXNoTWFwIGJvb2xlYW4gYnl0ZSBjaGFyIGNvbG9yICcgK1xuICAgICAgICAnZG91YmxlIGZsb2F0IGludCBsb25nIFN0cmluZyBBcnJheSBGbG9hdERpY3QgRmxvYXRMaXN0IEludERpY3QgSW50TGlzdCBKU09OQXJyYXkgSlNPTk9iamVjdCAnICtcbiAgICAgICAgJ09iamVjdCBTdHJpbmdEaWN0IFN0cmluZ0xpc3QgVGFibGUgVGFibGVSb3cgWE1MICcgK1xuICAgICAgICAvLyBKYXZhIGtleXdvcmRzXG4gICAgICAgICdmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0ICcgK1xuICAgICAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkICcgK1xuICAgICAgICAnZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0ICcgK1xuICAgICAgICAncGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUnLFxuICAgICAgbGl0ZXJhbDogJ1AyRCBQM0QgSEFMRl9QSSBQSSBRVUFSVEVSX1BJIFRBVSBUV09fUEknLFxuICAgICAgdGl0bGU6ICdzZXR1cCBkcmF3JyxcbiAgICAgIGJ1aWx0X2luOiAnZGlzcGxheUhlaWdodCBkaXNwbGF5V2lkdGggbW91c2VZIG1vdXNlWCBtb3VzZVByZXNzZWQgcG1vdXNlWCBwbW91c2VZIGtleSAnICtcbiAgICAgICAgJ2tleUNvZGUgcGl4ZWxzIGZvY3VzZWQgZnJhbWVDb3VudCBmcmFtZVJhdGUgaGVpZ2h0IHdpZHRoICcgK1xuICAgICAgICAnc2l6ZSBjcmVhdGVHcmFwaGljcyBiZWdpbkRyYXcgY3JlYXRlU2hhcGUgbG9hZFNoYXBlIFBTaGFwZSBhcmMgZWxsaXBzZSBsaW5lIHBvaW50ICcgK1xuICAgICAgICAncXVhZCByZWN0IHRyaWFuZ2xlIGJlemllciBiZXppZXJEZXRhaWwgYmV6aWVyUG9pbnQgYmV6aWVyVGFuZ2VudCBjdXJ2ZSBjdXJ2ZURldGFpbCBjdXJ2ZVBvaW50ICcgK1xuICAgICAgICAnY3VydmVUYW5nZW50IGN1cnZlVGlnaHRuZXNzIHNoYXBlIHNoYXBlTW9kZSBiZWdpbkNvbnRvdXIgYmVnaW5TaGFwZSBiZXppZXJWZXJ0ZXggY3VydmVWZXJ0ZXggJyArXG4gICAgICAgICdlbmRDb250b3VyIGVuZFNoYXBlIHF1YWRyYXRpY1ZlcnRleCB2ZXJ0ZXggZWxsaXBzZU1vZGUgbm9TbW9vdGggcmVjdE1vZGUgc21vb3RoIHN0cm9rZUNhcCAnICtcbiAgICAgICAgJ3N0cm9rZUpvaW4gc3Ryb2tlV2VpZ2h0IG1vdXNlQ2xpY2tlZCBtb3VzZURyYWdnZWQgbW91c2VNb3ZlZCBtb3VzZVByZXNzZWQgbW91c2VSZWxlYXNlZCAnICtcbiAgICAgICAgJ21vdXNlV2hlZWwga2V5UHJlc3NlZCBrZXlQcmVzc2Vka2V5UmVsZWFzZWQga2V5VHlwZWQgcHJpbnQgcHJpbnRsbiBzYXZlIHNhdmVGcmFtZSBkYXkgaG91ciAnICtcbiAgICAgICAgJ21pbGxpcyBtaW51dGUgbW9udGggc2Vjb25kIHllYXIgYmFja2dyb3VuZCBjbGVhciBjb2xvck1vZGUgZmlsbCBub0ZpbGwgbm9TdHJva2Ugc3Ryb2tlIGFscGhhICcgK1xuICAgICAgICAnYmx1ZSBicmlnaHRuZXNzIGNvbG9yIGdyZWVuIGh1ZSBsZXJwQ29sb3IgcmVkIHNhdHVyYXRpb24gbW9kZWxYIG1vZGVsWSBtb2RlbFogc2NyZWVuWCBzY3JlZW5ZICcgK1xuICAgICAgICAnc2NyZWVuWiBhbWJpZW50IGVtaXNzaXZlIHNoaW5pbmVzcyBzcGVjdWxhciBhZGQgY3JlYXRlSW1hZ2UgYmVnaW5DYW1lcmEgY2FtZXJhIGVuZENhbWVyYSBmcnVzdHVtICcgK1xuICAgICAgICAnb3J0aG8gcGVyc3BlY3RpdmUgcHJpbnRDYW1lcmEgcHJpbnRQcm9qZWN0aW9uIGN1cnNvciBmcmFtZVJhdGUgbm9DdXJzb3IgZXhpdCBsb29wIG5vTG9vcCBwb3BTdHlsZSAnICtcbiAgICAgICAgJ3B1c2hTdHlsZSByZWRyYXcgYmluYXJ5IGJvb2xlYW4gYnl0ZSBjaGFyIGZsb2F0IGhleCBpbnQgc3RyIHVuYmluYXJ5IHVuaGV4IGpvaW4gbWF0Y2ggbWF0Y2hBbGwgbmYgJyArXG4gICAgICAgICduZmMgbmZwIG5mcyBzcGxpdCBzcGxpdFRva2VucyB0cmltIGFwcGVuZCBhcnJheUNvcHkgY29uY2F0IGV4cGFuZCByZXZlcnNlIHNob3J0ZW4gc29ydCBzcGxpY2Ugc3Vic2V0ICcgK1xuICAgICAgICAnYm94IHNwaGVyZSBzcGhlcmVEZXRhaWwgY3JlYXRlSW5wdXQgY3JlYXRlUmVhZGVyIGxvYWRCeXRlcyBsb2FkSlNPTkFycmF5IGxvYWRKU09OT2JqZWN0IGxvYWRTdHJpbmdzICcgK1xuICAgICAgICAnbG9hZFRhYmxlIGxvYWRYTUwgb3BlbiBwYXJzZVhNTCBzYXZlVGFibGUgc2VsZWN0Rm9sZGVyIHNlbGVjdElucHV0IGJlZ2luUmF3IGJlZ2luUmVjb3JkIGNyZWF0ZU91dHB1dCAnICtcbiAgICAgICAgJ2NyZWF0ZVdyaXRlciBlbmRSYXcgZW5kUmVjb3JkIFByaW50V3JpdGVyc2F2ZUJ5dGVzIHNhdmVKU09OQXJyYXkgc2F2ZUpTT05PYmplY3Qgc2F2ZVN0cmVhbSBzYXZlU3RyaW5ncyAnICtcbiAgICAgICAgJ3NhdmVYTUwgc2VsZWN0T3V0cHV0IHBvcE1hdHJpeCBwcmludE1hdHJpeCBwdXNoTWF0cml4IHJlc2V0TWF0cml4IHJvdGF0ZSByb3RhdGVYIHJvdGF0ZVkgcm90YXRlWiBzY2FsZSAnICtcbiAgICAgICAgJ3NoZWFyWCBzaGVhclkgdHJhbnNsYXRlIGFtYmllbnRMaWdodCBkaXJlY3Rpb25hbExpZ2h0IGxpZ2h0RmFsbG9mZiBsaWdodHMgbGlnaHRTcGVjdWxhciBub0xpZ2h0cyBub3JtYWwgJyArXG4gICAgICAgICdwb2ludExpZ2h0IHNwb3RMaWdodCBpbWFnZSBpbWFnZU1vZGUgbG9hZEltYWdlIG5vVGludCByZXF1ZXN0SW1hZ2UgdGludCB0ZXh0dXJlIHRleHR1cmVNb2RlIHRleHR1cmVXcmFwICcgK1xuICAgICAgICAnYmxlbmQgY29weSBmaWx0ZXIgZ2V0IGxvYWRQaXhlbHMgc2V0IHVwZGF0ZVBpeGVscyBibGVuZE1vZGUgbG9hZFNoYWRlciBQU2hhZGVycmVzZXRTaGFkZXIgc2hhZGVyIGNyZWF0ZUZvbnQgJyArXG4gICAgICAgICdsb2FkRm9udCB0ZXh0IHRleHRGb250IHRleHRBbGlnbiB0ZXh0TGVhZGluZyB0ZXh0TW9kZSB0ZXh0U2l6ZSB0ZXh0V2lkdGggdGV4dEFzY2VudCB0ZXh0RGVzY2VudCBhYnMgY2VpbCAnICtcbiAgICAgICAgJ2NvbnN0cmFpbiBkaXN0IGV4cCBmbG9vciBsZXJwIGxvZyBtYWcgbWFwIG1heCBtaW4gbm9ybSBwb3cgcm91bmQgc3Egc3FydCBhY29zIGFzaW4gYXRhbiBhdGFuMiBjb3MgZGVncmVlcyAnICtcbiAgICAgICAgJ3JhZGlhbnMgc2luIHRhbiBub2lzZSBub2lzZURldGFpbCBub2lzZVNlZWQgcmFuZG9tIHJhbmRvbUdhdXNzaWFuIHJhbmRvbVNlZWQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2EtekEtWl9dW1xcXFxkYS16QS1aX10rXFxcXC5bXFxcXGRhLXpBLVpfXXsxLDN9JywgZW5kOiAnOicsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKG5jYWxsc3x0b3R0aW1lfGN1bXRpbWUpJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnbmNhbGxzIHRvdHRpbWV8MTAgY3VtdGltZXwxMCBmaWxlbmFtZScsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnZnVuY3Rpb24gY2FsbHMnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkNfTlVNQkVSX01PREVdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJCcsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgQVRPTSA9IHtcblxuICAgIGJlZ2luOiAvW2Etel1bQS1aYS16MC05X10qLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgVkFSID0ge1xuXG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvW0EtWl1bYS16QS1aMC05X10qL30sXG4gICAgICB7YmVnaW46IC9fW0EtWmEtejAtOV9dKi99LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBBUkVOVEVEID0ge1xuXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIExJU1QgPSB7XG5cbiAgICBiZWdpbjogL1xcWy8sXG4gICAgZW5kOiAvXFxdL1xuICB9O1xuXG4gIHZhciBMSU5FX0NPTU1FTlQgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICBiZWdpbjogLyUvLCBlbmQ6IC8kLyxcbiAgICBjb250YWluczogW2hsanMuUEhSQVNBTF9XT1JEU19NT0RFXVxuICB9O1xuXG4gIHZhciBCQUNLVElDS19TVFJJTkcgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvYC8sIGVuZDogL2AvLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuXG4gIHZhciBDSEFSX0NPREUgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLCAvLyAwJ2EgZXRjLlxuICAgIGJlZ2luOiAvMFxcJyhcXFxcXFwnfC4pL1xuICB9O1xuXG4gIHZhciBTUEFDRV9DT0RFID0ge1xuXG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLzBcXCdcXFxccy8gLy8gMCdcXHNcbiAgfTtcblxuICB2YXIgUFJFRF9PUCA9IHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBiZWdpbjogLzotL1xuICB9O1xuXG4gIHZhciBpbm5lciA9IFtcblxuICAgIEFUT00sXG4gICAgVkFSLFxuICAgIFBBUkVOVEVELFxuICAgIFBSRURfT1AsXG4gICAgTElTVCxcbiAgICBMSU5FX0NPTU1FTlQsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBCQUNLVElDS19TVFJJTkcsXG4gICAgQ0hBUl9DT0RFLFxuICAgIFNQQUNFX0NPREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gIF07XG5cbiAgUEFSRU5URUQuY29udGFpbnMgPSBpbm5lcjtcbiAgTElTVC5jb250YWlucyA9IGlubmVyO1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IGlubmVyLmNvbmNhdChbXG4gICAgICB7YmVnaW46IC9cXC4kL30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblxuICAvLyB3aGl0ZXNwYWNlczogc3BhY2UsIHRhYiwgZm9ybWZlZWRcbiAgdmFyIFdTMCA9ICdbIFxcXFx0XFxcXGZdKic7XG4gIHZhciBXUzEgPSAnWyBcXFxcdFxcXFxmXSsnO1xuICAvLyBkZWxpbWl0ZXJcbiAgdmFyIERFTElNID0gJygnICsgV1MwKydbOj1dJytXUzArICd8JyArIFdTMSArICcpJztcbiAgdmFyIEtFWV9BTFBIQU5VTSA9ICcoW15cXFxcXFxcXFxcXFxXOj0gXFxcXHRcXFxcZlxcXFxuXXxcXFxcXFxcXC4pKyc7XG4gIHZhciBLRVlfT1RIRVIgPSAnKFteXFxcXFxcXFw6PSBcXFxcdFxcXFxmXFxcXG5dfFxcXFxcXFxcLikrJztcblxuICB2YXIgREVMSU1fQU5EX1ZBTFVFID0ge1xuICAgICAgICAgIC8vIHNraXAgREVMSU1cbiAgICAgICAgICBlbmQ6IERFTElNLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIC8vIHZhbHVlOiBldmVyeXRoaW5nIHVudGlsIGVuZCBvZiBsaW5lIChhZ2FpbiwgdGFraW5nIGludG8gYWNjb3VudCBiYWNrc2xhc2hlcylcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46ICdcXFxcXFxcXFxcXFxuJyB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXHMqWyEjXScsICckJyksXG4gICAgICAvLyBrZXk6IGV2ZXJ5dGhpbmcgdW50aWwgd2hpdGVzcGFjZSBvciA9IG9yIDogKHRha2luZyBpbnRvIGFjY291bnQgYmFja3NsYXNoZXMpXG4gICAgICAvLyBjYXNlIG9mIGEgXCJub3JtYWxcIiBrZXlcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEtFWV9BTFBIQU5VTSArIERFTElNLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgIGJlZ2luOiBLRVlfQUxQSEFOVU0sXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IERFTElNX0FORF9WQUxVRVxuICAgICAgfSxcbiAgICAgIC8vIGNhc2Ugb2Yga2V5IGNvbnRhaW5pbmcgbm9uLWFscGhhbnVtZXJpYyBjaGFycyA9PiByZWxldmFuY2UgPSAwXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBLRVlfT1RIRVIgKyBERUxJTSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgICAgIGJlZ2luOiBLRVlfT1RIRVIsXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IERFTElNX0FORF9WQUxVRVxuICAgICAgfSxcbiAgICAgIC8vIGNhc2Ugb2YgYW4gZW1wdHkga2V5XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiBLRVlfT1RIRVIgKyBXUzAgKyAnJCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAncGFja2FnZSBpbXBvcnQgb3B0aW9uIG9wdGlvbmFsIHJlcXVpcmVkIHJlcGVhdGVkIGdyb3VwIG9uZW9mJyxcbiAgICAgIGJ1aWx0X2luOiAnZG91YmxlIGZsb2F0IGludDMyIGludDY0IHVpbnQzMiB1aW50NjQgc2ludDMyIHNpbnQ2NCAnICtcbiAgICAgICAgJ2ZpeGVkMzIgZml4ZWQ2NCBzZml4ZWQzMiBzZml4ZWQ2NCBib29sIHN0cmluZyBieXRlcycsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnbWVzc2FnZSBlbnVtIHNlcnZpY2UnLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAncnBjJyxcbiAgICAgICAgZW5kOiAvOy8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAncnBjIHJldHVybnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL15cXHMqW0EtWl9dKy8sXG4gICAgICAgIGVuZDogL1xccyo9LywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIFBVUFBFVF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgIC8qIGxhbmd1YWdlIGtleXdvcmRzICovXG4gICAgICAnYW5kIGNhc2UgZGVmYXVsdCBlbHNlIGVsc2lmIGZhbHNlIGlmIGluIGltcG9ydCBlbmhlcml0cyBub2RlIG9yIHRydWUgdW5kZWYgdW5sZXNzIG1haW4gc2V0dGluZ3MgJHN0cmluZyAnLFxuICAgIGxpdGVyYWw6XG4gICAgLyogbWV0YXBhcmFtZXRlcnMgKi9cbiAgICAgICdhbGlhcyBhdWRpdCBiZWZvcmUgbG9nbGV2ZWwgbm9vcCByZXF1aXJlIHN1YnNjcmliZSB0YWcgJyArXG4gICAgLyogbm9ybWFsIGF0dHJpYnV0ZXMgKi9cbiAgICAgICdvd25lciBlbnN1cmUgZ3JvdXAgbW9kZSBuYW1lfDAgY2hhbmdlcyBjb250ZXh0IGZvcmNlIGluY2wgbGVucyBsb2FkX3BhdGggb25seWlmIHByb3ZpZGVyIHJldHVybnMgcm9vdCBzaG93X2RpZmYgdHlwZV9jaGVjayAnICtcbiAgICAgICdlbl9hZGRyZXNzIGlwX2FkZHJlc3MgcmVhbG5hbWUgY29tbWFuZCBlbnZpcm9ubWVudCBob3VyIG1vbnV0ZSBtb250aCBtb250aGRheSBzcGVjaWFsIHRhcmdldCB3ZWVrZGF5ICcrXG4gICAgICAnY3JlYXRlcyBjd2Qgb2dvdXRwdXQgcmVmcmVzaCByZWZyZXNob25seSB0cmllcyB0cnlfc2xlZXAgdW1hc2sgYmFja3VwIGNoZWNrc3VtIGNvbnRlbnQgY3RpbWUgZm9yY2UgaWdub3JlICcgK1xuICAgICAgJ2xpbmtzIG10aW1lIHB1cmdlIHJlY3Vyc2UgcmVjdXJzZWxpbWl0IHJlcGxhY2Ugc2VsaW51eF9pZ25vcmVfZGVmYXVsdHMgc2VscmFuZ2Ugc2Vscm9sZSBzZWx0eXBlIHNlbHVzZXIgc291cmNlICcgK1xuICAgICAgJ3NvdWlyY2VfcGVybWlzc2lvbnMgc291cmNlc2VsZWN0IHZhbGlkYXRlX2NtZCB2YWxpZGF0ZV9yZXBsYWNlbWVudCBhbGxvd2R1cGUgYXR0cmlidXRlX21lbWJlcnNoaXAgYXV0aF9tZW1iZXJzaGlwIGZvcmNlbG9jYWwgZ2lkICcrXG4gICAgICAnaWFfbG9hZF9tb2R1bGUgbWVtYmVycyBzeXN0ZW0gaG9zdF9hbGlhc2VzIGlwIGFsbG93ZWRfdHJ1bmtfdmxhbnMgZGVzY3JpcHRpb24gZGV2aWNlX3VybCBkdXBsZXggZW5jYXBzdWxhdGlvbiBldGhlcmNoYW5uZWwgJyArXG4gICAgICAnbmF0aXZlX3ZsYW4gc3BlZWQgcHJpbmNpcGFscyBhbGxvd19yb290IGF1dGhfY2xhc3MgYXV0aF90eXBlIGF1dGhlbnRpY2F0ZV91c2VyIGtfb2ZfbiBtZWNoYW5pc21zIHJ1bGUgc2Vzc2lvbl9vd25lciBzaGFyZWQgb3B0aW9ucyAnICtcbiAgICAgICdkZXZpY2UgZnN0eXBlIGVuYWJsZSBoYXNyZXN0YXJ0IGRpcmVjdG9yeSBwcmVzZW50IGFic2VudCBsaW5rIGF0Ym9vdCBibG9ja2RldmljZSBkZXZpY2UgZHVtcCBwYXNzIHJlbW91bnRzIHBvbGxlcl90YWcgdXNlICcgK1xuICAgICAgJ21lc3NhZ2Ugd2l0aHBhdGggYWRtaW5maWxlIGFsbG93X3ZpcnR1YWwgYWxsb3djZHJvbSBjYXRlZ29yeSBjb25maWdmaWxlcyBmbGF2b3IgaW5zdGFsbF9vcHRpb25zIGluc3RhbmNlIHBhY2thZ2Vfc2V0dGluZ3MgcGxhdGZvcm0gJyArXG4gICAgICAncmVzcG9uc2VmaWxlIHN0YXR1cyB1bmluc3RhbGxfb3B0aW9ucyB2ZW5kb3IgdW5sZXNzX3N5c3RlbV91c2VyIHVubGVzc191aWQgYmluYXJ5IGNvbnRyb2wgZmxhZ3MgaGFzc3RhdHVzIG1hbmlmZXN0IHBhdHRlcm4gcmVzdGFydCBydW5uaW5nICcgK1xuICAgICAgJ3N0YXJ0IHN0b3AgYWxsb3dkdXBlIGF1dGhzIGV4cGlyeSBnaWQgZ3JvdXBzIGhvbWUgaXRlcmF0aW9ucyBrZXlfbWVtYmVyc2hpcCBrZXlzIG1hbmFnZWhvbWUgbWVtYmVyc2hpcCBwYXNzd29yZCBwYXNzd29yZF9tYXhfYWdlICcgK1xuICAgICAgJ3Bhc3N3b3JkX21pbl9hZ2UgcHJvZmlsZV9tZW1iZXJzaGlwIHByb2ZpbGVzIHByb2plY3QgcHVyZ2Vfc3NoX2tleXMgcm9sZV9tZW1iZXJzaGlwIHJvbGVzIHNhbHQgc2hlbGwgdWlkIGJhc2V1cmwgY29zdCBkZXNjciBlbmFibGVkICcgK1xuICAgICAgJ2VuYWJsZWdyb3VwcyBleGNsdWRlIGZhaWxvdmVybWV0aG9kIGdwZ2NoZWNrIGdwZ2tleSBodHRwX2NhY2hpbmcgaW5jbHVkZSBpbmNsdWRlcGtncyBrZWVwYWxpdmUgbWV0YWRhdGFfZXhwaXJlIG1ldGFsaW5rIG1pcnJvcmxpc3QgJyArXG4gICAgICAncHJpb3JpdHkgcHJvdGVjdCBwcm94eSBwcm94eV9wYXNzd29yZCBwcm94eV91c2VybmFtZSByZXBvX2dwZ2NoZWNrIHMzX2VuYWJsZWQgc2tpcF9pZl91bmF2YWlsYWJsZSBzc2xjYWNlcnQgc3NsY2xpZW50Y2VydCBzc2xjbGllbnRrZXkgJyArXG4gICAgICAnc3NsdmVyaWZ5IG1vdW50ZWQnLFxuICAgIGJ1aWx0X2luOlxuICAgIC8qIGNvcmUgZmFjdHMgKi9cbiAgICAgICdhcmNoaXRlY3R1cmUgYXVnZWFzdmVyc2lvbiBibG9ja2RldmljZXMgYm9hcmRtYW51ZmFjdHVyZXIgYm9hcmRwcm9kdWN0bmFtZSBib2FyZHNlcmlhbG51bWJlciBjZmtleSBkaGNwX3NlcnZlcnMgJyArXG4gICAgICAnZG9tYWluIGVjMl8gZWMyX3VzZXJkYXRhIGZhY3RlcnZlcnNpb24gZmlsZXN5c3RlbXMgbGRvbSBmcWRuIGdpZCBoYXJkd2FyZWlzYSBoYXJkd2FyZW1vZGVsIGhvc3RuYW1lIGlkfDAgaW50ZXJmYWNlcyAnK1xuICAgICAgJ2lwYWRkcmVzcyBpcGFkZHJlc3NfIGlwYWRkcmVzczYgaXBhZGRyZXNzNl8gaXBob3N0bnVtYmVyIGlzX3ZpcnR1YWwga2VybmVsIGtlcm5lbG1hanZlcnNpb24ga2VybmVscmVsZWFzZSBrZXJuZWx2ZXJzaW9uICcgK1xuICAgICAgJ2tlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbiBsc2JkaXN0Y29kZW5hbWUgbHNiZGlzdGRlc2NyaXB0aW9uIGxzYmRpc3RpZCBsc2JkaXN0cmVsZWFzZSBsc2JtYWpkaXN0cmVsZWFzZSBsc2JtaW5vcmRpc3RyZWxlYXNlICcgK1xuICAgICAgJ2xzYnJlbGVhc2UgbWFjYWRkcmVzcyBtYWNhZGRyZXNzXyBtYWNvc3hfYnVpbGR2ZXJzaW9uIG1hY29zeF9wcm9kdWN0bmFtZSBtYWNvc3hfcHJvZHVjdHZlcnNpb24gbWFjb3N4X3Byb2R1Y3R2ZXJzb25fbWFqb3IgJyArXG4gICAgICAnbWFjb3N4X3Byb2R1Y3R2ZXJzaW9uX21pbm9yIG1hbnVmYWN0dXJlciBtZW1vcnlmcmVlIG1lbW9yeXNpemUgbmV0bWFzayBtZXRtYXNrXyBuZXR3b3JrXyBvcGVyYXRpbmdzeXN0ZW0gb3BlcmF0aW5nc3lzdGVtbWFqcmVsZWFzZSAnK1xuICAgICAgJ29wZXJhdGluZ3N5c3RlbXJlbGVhc2Ugb3NmYW1pbHkgcGFydGl0aW9ucyBwYXRoIHBoeXNpY2FscHJvY2Vzc29yY291bnQgcHJvY2Vzc29yIHByb2Nlc3NvcmNvdW50IHByb2R1Y3RuYW1lIHBzIHB1cHBldHZlcnNpb24gJytcbiAgICAgICdydWJ5c2l0ZWRpciBydWJ5dmVyc2lvbiBzZWxpbnV4IHNlbGludXhfY29uZmlnX21vZGUgc2VsaW51eF9jb25maWdfcG9saWN5IHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfZW5mb3JjZWQgJytcbiAgICAgICdzZWxpbnV4X3BvbGljeXZlcnNpb24gc2VyaWFsbnVtYmVyIHNwXyBzc2hkc2FrZXkgc3NoZWNkc2FrZXkgc3NocnNha2V5IHN3YXBlbmNyeXB0ZWQgc3dhcGZyZWUgc3dhcHNpemUgdGltZXpvbmUgdHlwZSB1bmlxdWVpZCB1cHRpbWUgJytcbiAgICAgICd1cHRpbWVfZGF5cyB1cHRpbWVfaG91cnMgdXB0aW1lX3NlY29uZHMgdXVpZCB2aXJ0dWFsIHZsYW5zIHhlbmRvbWFpbnMgemZzX3ZlcnNpb24gem9uZW5hZSB6b25lcyB6cG9vbF92ZXJzaW9uJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKCcjJywgJyQnKTtcblxuICB2YXIgSURFTlRfUkUgPSAnKFtBLVphLXpfXXw6OikoXFxcXHd8OjopKic7XG5cbiAgdmFyIFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBJREVOVF9SRX0pO1xuXG4gIHZhciBWQVJJQUJMRSA9IHtjbGFzc05hbWU6ICd2YXJpYWJsZScsIGJlZ2luOiAnXFxcXCQnICsgSURFTlRfUkV9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgVkFSSUFCTEVdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99LFxuICAgICAge2JlZ2luOiAvXCIvLCBlbmQ6IC9cIi99XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwcCddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5ULFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsIGVuZDogJ1xcXFx7fDsnLFxuICAgICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICAgIGNvbnRhaW5zOiBbVElUTEUsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJywgZW5kOiAvXFx7LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJywgYmVnaW46IGhsanMuSURFTlRfUkUsIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxzK1xcXFx7JywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHsvLCBlbmQ6IC9cXH0vLFxuICAgICAgICAgICAga2V5d29yZHM6IFBVUFBFVF9LRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOidbYS16QS1aX10rXFxcXHMqPT4nLFxuICAgICAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLCBlbmQ6ICc9PicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFZBUklBQkxFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSAvLyBCYXNlIGRlYWZ1bHQgY29sb3JzIGluIFBCIElERTogYmFja2dyb3VuZDogI0ZGRkZERjsgZm9yZWdyb3VuZDogIzAwMDAwMDtcblxuZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HUyA9IHsgLy8gUEIgSURFIGNvbG9yOiAjMDA4MEZGIChBenVyZSBSYWRpYW5jZSlcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnKH4pP1wiJywgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHsgLy8gUEIgSURFIGNvbG9yOiAjOTI0QjcyIChDYW5ub24gUGluaylcbiAgICAvLyAgXCIjXCIgKyBhIGxldHRlciBvciB1bmRlcnNjb3JlICsgbGV0dGVycywgZGlnaXRzIG9yIHVuZGVyc2NvcmVzICsgKG9wdGlvbmFsKSBcIiRcIlxuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICcjW2EtekEtWl9dXFxcXHcqXFxcXCQ/J1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwYicsICdwYmknXSxcbiAgICBrZXl3b3JkczogLy8gUEIgSURFIGNvbG9yOiAjMDA2NjY2IChCbHVlIFN0b25lKSArIEJvbGRcbiAgICAgIC8vIEtleXdvcmRzIGZyb20gYWxsIHZlcnNpb24gb2YgUHVyZUJBU0lDIDUuMDAgdXB3YXJkIC4uLlxuICAgICAgJ0FsaWduIEFuZCBBcnJheSBBcyBCcmVhayBDYWxsRGVidWdnZXIgQ2FzZSBDb21waWxlckNhc2UgQ29tcGlsZXJEZWZhdWx0ICcgK1xuICAgICAgJ0NvbXBpbGVyRWxzZSBDb21waWxlckVsc2VJZiBDb21waWxlckVuZElmIENvbXBpbGVyRW5kU2VsZWN0IENvbXBpbGVyRXJyb3IgJyArXG4gICAgICAnQ29tcGlsZXJJZiBDb21waWxlclNlbGVjdCBDb21waWxlcldhcm5pbmcgQ29udGludWUgRGF0YSBEYXRhU2VjdGlvbiBEZWJ1ZyAnICtcbiAgICAgICdEZWJ1Z0xldmVsIERlY2xhcmUgRGVjbGFyZUMgRGVjbGFyZUNETEwgRGVjbGFyZURMTCBEZWNsYXJlTW9kdWxlIERlZmF1bHQgJyArXG4gICAgICAnRGVmaW5lIERpbSBEaXNhYmxlQVNNIERpc2FibGVEZWJ1Z2dlciBEaXNhYmxlRXhwbGljaXQgRWxzZSBFbHNlSWYgRW5hYmxlQVNNICcgK1xuICAgICAgJ0VuYWJsZURlYnVnZ2VyIEVuYWJsZUV4cGxpY2l0IEVuZCBFbmREYXRhU2VjdGlvbiBFbmREZWNsYXJlTW9kdWxlIEVuZEVudW1lcmF0aW9uICcgK1xuICAgICAgJ0VuZElmIEVuZEltcG9ydCBFbmRJbnRlcmZhY2UgRW5kTWFjcm8gRW5kTW9kdWxlIEVuZFByb2NlZHVyZSBFbmRTZWxlY3QgJyArXG4gICAgICAnRW5kU3RydWN0dXJlIEVuZFN0cnVjdHVyZVVuaW9uIEVuZFdpdGggRW51bWVyYXRpb24gRW51bWVyYXRpb25CaW5hcnkgRXh0ZW5kcyAnICtcbiAgICAgICdGYWtlUmV0dXJuIEZvciBGb3JFYWNoIEZvckV2ZXIgR2xvYmFsIEdvc3ViIEdvdG8gSWYgSW1wb3J0IEltcG9ydEMgJyArXG4gICAgICAnSW5jbHVkZUJpbmFyeSBJbmNsdWRlRmlsZSBJbmNsdWRlUGF0aCBJbnRlcmZhY2UgTGlzdCBNYWNybyBNYWNyb0V4cGFuZGVkQ291bnQgJyArXG4gICAgICAnTWFwIE1vZHVsZSBOZXdMaXN0IE5ld01hcCBOZXh0IE5vdCBPciBQcm9jZWR1cmUgUHJvY2VkdXJlQyAnICtcbiAgICAgICdQcm9jZWR1cmVDRExMIFByb2NlZHVyZURMTCBQcm9jZWR1cmVSZXR1cm4gUHJvdGVjdGVkIFByb3RvdHlwZSBQcm90b3R5cGVDIFJlRGltICcgK1xuICAgICAgJ1JlYWQgUmVwZWF0IFJlc3RvcmUgUmV0dXJuIFJ1bnRpbWUgU2VsZWN0IFNoYXJlZCBTdGF0aWMgU3RlcCBTdHJ1Y3R1cmUgJyArXG4gICAgICAnU3RydWN0dXJlVW5pb24gU3dhcCBUaHJlYWRlZCBUbyBVbmRlZmluZU1hY3JvIFVudGlsIFVudGlsICBVbnVzZU1vZHVsZSAnICtcbiAgICAgICdVc2VNb2R1bGUgV2VuZCBXaGlsZSBXaXRoIFhJbmNsdWRlRmlsZSBYT3InLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBDT01NRU5UUyB8IFBCIElERSBjb2xvcjogIzAwQUFBQSAoUGVyc2lhbiBHcmVlbilcbiAgICAgIGhsanMuQ09NTUVOVCgnOycsICckJywge3JlbGV2YW5jZTogMH0pLFxuXG4gICAgICB7IC8vIFBST0NFRFVSRVMgREVGSU5JVElPTlNcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFByb2NlZHVyZXxEZWNsYXJlKShDfENETEx8RExMKT9cXFxcYicsXG4gICAgICAgIGVuZDogJ1xcXFwoJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyAvLyBQUk9DRURVUkUgS0VZV09SRFMgfCBQQiBJREUgY29sb3I6ICMwMDY2NjYgKEJsdWUgU3RvbmUpICsgQm9sZFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogJyhQcm9jZWR1cmV8RGVjbGFyZSkoQ3xDRExMfERMTCk/JyxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gUFJPQ0VEVVJFIFJFVFVSTiBUWVBFIFNFVFRJTkcgfCBQQiBJREUgY29sb3I6ICMwMDAwMDAgKEJsYWNrKVxuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwuXFxcXHcqJ1xuICAgICAgICAgICAgLy8gZW5kOiAnICcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSAvLyBQUk9DRURVUkUgTkFNRSB8IFBCIElERSBjb2xvcjogIzAwNjY2NiAoQmx1ZSBTdG9uZSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFNUUklOR1MsXG4gICAgICBDT05TVEFOVFNcbiAgICBdXG4gIH07XG59XG5cbi8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBTkdFTE9HXG4gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLSB2LjEuMiAoMjAxNy0wNS0xMilcbiAgICAgICAgLS0gQlVHLUZJWDogU29tZSBrZXl3b3JkcyB3ZXJlIGFjY2lkZW50YWxseSBqb3luZWQgdG9nZXRoZXIuIE5vdyBmaXhlZC5cbiAgICAtIHYuMS4xICgyMDE3LTA0LTMwKVxuICAgICAgICAtLSBVcGRhdGVkIHRvIFB1cmVCQVNJQyA1LjYwLlxuICAgICAgICAtLSBLZXl3b3JkcyBsaXN0IG5vdyBidWlsdCBieSBleHRyYWN0aW5nIHRoZW0gZnJvbSB0aGUgUHVyZUJBU0lDIFNESydzXG4gICAgICAgICAgIFwiU3ludGF4SGlsaWdodGluZy5kbGxcIiAoZnJvbSBlYWNoIFB1cmVCQVNJQyB2ZXJzaW9uKS4gVG9rZW5zIGZyb20gZWFjaFxuICAgICAgICAgICB2ZXJzaW9uIGFyZSBhZGRlZCB0byB0aGUgbGlzdCwgYW5kIHJlbmFtZWQgb3IgcmVtb3ZlZCB0b2tlbnMgYXJlIGtlcHRcbiAgICAgICAgICAgZm9yIHRoZSBzYWtlIG9mIGNvdmVyaW5nIGFsbCB2ZXJzaW9ucyBvZiB0aGUgbGFuZ3VhZ2UgZnJvbSBQdXJlQkFTSUNcbiAgICAgICAgICAgdjUuMDAgdXB3YXJkLiAoTk9URTogY3VycmVudGx5LCB0aGVyZSBhcmUgbm8gcmVuYW1lZCBvciBkZXByZWNhdGVkXG4gICAgICAgICAgIHRva2VucyBpbiB0aGUga2V5d29yZHMgbGlzdCkuIEZvciBtb3JlIGluZm8sIHNlZTpcbiAgICAgICAgICAgLS0gaHR0cDovL3d3dy5wdXJlYmFzaWMuZnIvZW5nbGlzaC92aWV3dG9waWMucGhwPyZwPTUwNjI2OVxuICAgICAgICAgICAtLSBodHRwczovL2dpdGh1Yi5jb20vdGFqbW9uZS9wdXJlYmFzaWMtYXJjaGl2ZXMvdHJlZS9tYXN0ZXIvc3ludGF4LWhpZ2hsaWdodGluZy9ndWlkZWxpbmVzXG4gICAgLSB2LjEuMCAoQXByaWwgMjAxNilcbiAgICAgICAgLS0gRmlyc3QgcmVsZWFzZVxuICAgICAgICAtLSBLZXl3b3JkcyBsaXN0IHRha2VuIGFuZCBhZGFwdGVkIGZyb20gR3VTaEgncyAoR3VzdGF2byBKdWxpbyBGaW9yZW56YSlcbiAgICAgICAgICAgUHVyZUJhc2ljIGxhbmd1YWdlIGZpbGUgZm9yIEdlU0hpOlxuICAgICAgICAgICAtLSBodHRwczovL2dpdGh1Yi5jb20vZWFzeWJvb2svZ2VzaGkvYmxvYi9tYXN0ZXIvZ2VzaGkvcHVyZWJhc2ljLnBocFxuKi87IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2FuZCBlbGlmIGlzIGdsb2JhbCBhcyBpbiBpZiBmcm9tIHJhaXNlIGZvciBleGNlcHQgZmluYWxseSBwcmludCBpbXBvcnQgcGFzcyByZXR1cm4gJyArXG4gICAgICAnZXhlYyBlbHNlIGJyZWFrIG5vdCB3aXRoIGNsYXNzIGFzc2VydCB5aWVsZCB0cnkgd2hpbGUgY29udGludWUgZGVsIG9yIGRlZiBsYW1iZGEgJyArXG4gICAgICAnYXN5bmMgYXdhaXQgbm9ubG9jYWx8MTAnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0VsbGlwc2lzIE5vdEltcGxlbWVudGVkJyxcbiAgICBsaXRlcmFsOiAnRmFsc2UgTm9uZSBUcnVlJ1xuICB9O1xuICB2YXIgUFJPTVBUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLCAgYmVnaW46IC9eKD4+PnxcXC5cXC5cXC4pIC9cbiAgfTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcey8sIGVuZDogL1xcfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC8jL1xuICB9O1xuICB2YXIgTElURVJBTF9CUkFDS0VUID0ge1xuICAgIGJlZ2luOiAvXFx7XFx7LyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fGIpP3I/JycnLywgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFBST01QVF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8Yik/cj9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgUFJPTVBUXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZiknJycvLCBlbmQ6IC8nJycvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgUFJPTVBULCBMSVRFUkFMX0JSQUNLRVQsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZilcIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgUFJPTVBULCBMSVRFUkFMX0JSQUNLRVQsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxyfHVyKScvLCBlbmQ6IC8nLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxyfHVyKVwiLywgZW5kOiAvXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhifGJyKScvLCBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oYnxicilcIi8sIGVuZDogL1wiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZiknLywgZW5kOiAvJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBMSVRFUkFMX0JSQUNLRVQsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZilcIi8sIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIExJVEVSQUxfQlJBQ0tFVCwgU1VCU1RdXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLCByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogaGxqcy5CSU5BUllfTlVNQkVSX1JFICsgJ1tsTGpKXT8nfSxcbiAgICAgIHtiZWdpbjogJ1xcXFxiKDBvWzAtN10rKVtsTGpKXT8nfSxcbiAgICAgIHtiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdbbExqSl0/J31cbiAgICBdXG4gIH07XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgY29udGFpbnM6IFsnc2VsZicsIFBST01QVCwgTlVNQkVSLCBTVFJJTkcsIGhsanMuSEFTSF9DT01NRU5UX01PREVdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1NUUklORywgTlVNQkVSLCBQUk9NUFRdO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncHknLCAnZ3lwJywgJ2lweXRob24nXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyg8XFwvfC0+fFxcPyl8PT4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQUk9NUFQsXG4gICAgICBOVU1CRVIsXG4gICAgICAvLyBlYXQgXCJpZlwiIHByaW9yIHRvIHN0cmluZyBzbyB0aGF0IGl0IHdvbid0IGFjY2lkZW50YWxseSBiZVxuICAgICAgLy8gbGFiZWxlZCBhcyBhbiBmLXN0cmluZyBhcyBpbjpcbiAgICAgIHsgYmVnaW5LZXl3b3JkczogXCJpZlwiLCByZWxldmFuY2U6IDAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2NsYXNzTmFtZTogJ2Z1bmN0aW9uJywgYmVnaW5LZXl3b3JkczogJ2RlZid9LFxuICAgICAgICAgIHtjbGFzc05hbWU6ICdjbGFzcycsIGJlZ2luS2V5d29yZHM6ICdjbGFzcyd9XG4gICAgICAgIF0sXG4gICAgICAgIGVuZDogLzovLFxuICAgICAgICBpbGxlZ2FsOiAvWyR7PTtcXG4sXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvLT4vLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiAnTm9uZSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15bXFx0IF0qQC8sIGVuZDogLyQvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYihwcmludHxleGVjKVxcKC8gLy8gZG9u4oCZdCBoaWdobGlnaHQga2V5d29yZHMtdHVybmVkLWZ1bmN0aW9ucyBpbiBQeXRob24gM1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBRX0tFWVdPUkRTID0ge1xuICBrZXl3b3JkOlxuICAgICdkbyB3aGlsZSBzZWxlY3QgZGVsZXRlIGJ5IHVwZGF0ZSBmcm9tJyxcbiAgbGl0ZXJhbDpcbiAgICAnMGIgMWInLFxuICBidWlsdF9pbjpcbiAgICAnbmVnIG5vdCBudWxsIHN0cmluZyByZWNpcHJvY2FsIGZsb29yIGNlaWxpbmcgc2lnbnVtIG1vZCB4YmFyIHhsb2cgYW5kIG9yIGVhY2ggc2NhbiBvdmVyIHByaW9yIG1tdSBsc3EgaW52IG1kNSBsdGltZSBndGltZSBjb3VudCBmaXJzdCB2YXIgZGV2IG1lZCBjb3YgY29yIGFsbCBhbnkgcmFuZCBzdW1zIHByZHMgbWlucyBtYXhzIGZpbGxzIGRlbHRhcyByYXRpb3MgYXZncyBkaWZmZXIgcHJldiBuZXh0IHJhbmsgcmV2ZXJzZSBpYXNjIGlkZXNjIGFzYyBkZXNjIG1zdW0gbWNvdW50IG1hdmcgbWRldiB4cmFuayBtbWluIG1tYXggeHByZXYgcm90YXRlIGRpc3RpbmN0IGdyb3VwIHdoZXJlIGZsaXAgdHlwZSBrZXkgdGlsIGdldCB2YWx1ZSBhdHRyIGN1dCBzZXQgdXBzZXJ0IHJhemUgdW5pb24gaW50ZXIgZXhjZXB0IGNyb3NzIHN2IHZzIHN1Ymxpc3QgZW5saXN0IHJlYWQwIHJlYWQxIGhvcGVuIGhjbG9zZSBoZGVsIGhzeW0gaGNvdW50IHBlYWNoIHN5c3RlbSBsdHJpbSBydHJpbSB0cmltIGxvd2VyIHVwcGVyIHNzciB2aWV3IHRhYmxlcyB2aWV3cyBjb2xzIHhjb2xzIGtleXMgeGtleSB4Y29sIHhhc2MgeGRlc2MgZmtleXMgbWV0YSBsaiBhaiBhajAgaWogcGogYXNvZiB1aiB3dyB3aiB3ajEgZmJ5IHhncm91cCB1bmdyb3VwIGVqIHNhdmUgbG9hZCByc2F2ZSBybG9hZCBzaG93IGNzdiBwYXJzZSBldmFsIG1pbiBtYXggYXZnIHdhdmcgd3N1bSBzaW4gY29zIHRhbiBzdW0nLFxuICB0eXBlOlxuICAgICdgZmxvYXQgYGRvdWJsZSBpbnQgYHRpbWVzdGFtcCBgdGltZXNwYW4gYGRhdGV0aW1lIGB0aW1lIGBib29sZWFuIGBzeW1ib2wgYGNoYXIgYGJ5dGUgYHNob3J0IGBsb25nIGByZWFsIGBtb250aCBgZGF0ZSBgbWludXRlIGBzZWNvbmQgYGd1aWQnXG4gIH07XG4gIHJldHVybiB7XG4gIGFsaWFzZXM6WydrJywgJ2tkYiddLFxuICBrZXl3b3JkczogUV9LRVlXT1JEUyxcbiAgbGV4ZW1lczogLyhgPylbQS1aYS16MC05X10rXFxiLyxcbiAgY29udGFpbnM6IFtcbiAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpbiBvZiBvbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggJyArXG4gICAgICAgICdpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlICcgK1xuICAgICAgICAnbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBpbXBvcnQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5JyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgJyArXG4gICAgICAgICdlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IGVzY2FwZSB1bmVzY2FwZSBPYmplY3QgRnVuY3Rpb24gQm9vbGVhbiBFcnJvciAnICtcbiAgICAgICAgJ0V2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciAnICtcbiAgICAgICAgJ1R5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5ICcgK1xuICAgICAgICAnRmxvYXQ2NEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBJbnQ4QXJyYXkgVWludDE2QXJyYXkgVWludDMyQXJyYXkgJyArXG4gICAgICAgICdVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSAnICtcbiAgICAgICAgJ21vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBTeW1ib2wgU2V0IE1hcCBXZWFrU2V0IFdlYWtNYXAgUHJveHkgUmVmbGVjdCAnICtcbiAgICAgICAgJ0JlaGF2aW9yIGJvb2wgY29sb3IgY29vcmRpbmF0ZSBkYXRlIGRvdWJsZSBlbnVtZXJhdGlvbiBmb250IGdlb2NpcmNsZSBnZW9yZWN0YW5nbGUgJyArXG4gICAgICAgICdnZW9zaGFwZSBpbnQgbGlzdCBtYXRyaXg0eDQgcGFyZW50IHBvaW50IHF1YXRlcm5pb24gcmVhbCByZWN0ICcgK1xuICAgICAgICAnc2l6ZSBzdHJpbmcgdXJsIHZhcmlhbnQgdmVjdG9yMmQgdmVjdG9yM2QgdmVjdG9yNGQnICtcbiAgICAgICAgJ1Byb21pc2UnXG4gICAgfTtcblxuICB2YXIgUU1MX0lERU5UX1JFID0gJ1thLXpBLVpfXVthLXpBLVowLTlcXFxcLl9dKic7XG5cbiAgLy8gSXNvbGF0ZSBwcm9wZXJ0eSBzdGF0ZW1lbnRzLiBFbmRzIGF0IGEgOiwgPSwgOywgLCwgYSBjb21tZW50IG9yIGVuZCBvZiBsaW5lLlxuICAvLyBVc2UgcHJvcGVydHkgY2xhc3MuXG4gIHZhciBQUk9QRVJUWSA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgYmVnaW46ICdcXFxcYnByb3BlcnR5XFxcXGInLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGVuZDogJyg6fD18O3wsfC8vfC9cXFxcKnwkKScsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZVxuICAgICAgfVxuICB9O1xuXG4gIC8vIElzb2xhdGUgc2lnbmFsIHN0YXRlbWVudHMuIEVuZHMgYXQgYSApIGEgY29tbWVudCBvciBlbmQgb2YgbGluZS5cbiAgLy8gVXNlIHByb3BlcnR5IGNsYXNzLlxuICB2YXIgU0lHTkFMID0ge1xuICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICBiZWdpbjogJ1xcXFxic2lnbmFsXFxcXGInLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGVuZDogJyhcXFxcKHw6fD18O3wsfC8vfC9cXFxcKnwkKScsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZVxuICAgICAgfVxuICB9O1xuXG4gIC8vIGlkOiBpcyBzcGVjaWFsIGluIFFNTC4gV2hlbiB3ZSBzZWUgaWQ6IHdlIHdhbnQgdG8gbWFyayB0aGUgaWQ6IGFzIGF0dHJpYnV0ZSBhbmRcbiAgLy8gZW1waGFzaXplIHRoZSB0b2tlbiBmb2xsb3dpbmcuXG4gIHZhciBJRF9JRCA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICBiZWdpbjogJ1xcXFxiaWRcXFxccyo6JyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBlbmQ6IFFNTF9JREVOVF9SRSxcbiAgICAgICAgcmV0dXJuRW5kOiBmYWxzZVxuICAgICAgfVxuICB9O1xuXG4gIC8vIEZpbmQgUU1MIG9iamVjdCBhdHRyaWJ1dGUuIEFuIGF0dHJpYnV0ZSBpcyBhIFFNTCBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IDouXG4gIC8vIFVuZm9ydHVuYXRlbHkgaXQncyBoYXJkIHRvIGtub3cgd2hlcmUgaXQgZW5kcywgYXMgaXQgbWF5IGNvbnRhaW4gc2NhbGFycyxcbiAgLy8gb2JqZWN0cywgb2JqZWN0IGRlZmluaXRpb25zLCBvciBqYXZhc2NyaXB0LiBUaGUgdHJ1ZSBlbmQgaXMgZWl0aGVyIHdoZW4gdGhlIHBhcmVudFxuICAvLyBlbmRzIG9yIHRoZSBuZXh0IGF0dHJpYnV0ZSBpcyBkZXRlY3RlZC5cbiAgdmFyIFFNTF9BVFRSSUJVVEUgPSB7XG4gICAgYmVnaW46IFFNTF9JREVOVF9SRSArICdcXFxccyo6JyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogUU1MX0lERU5UX1JFLFxuICAgICAgICBlbmQ6ICdcXFxccyo6JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvLyBGaW5kIFFNTCBvYmplY3QuIEEgUU1MIG9iamVjdCBpcyBhIFFNTCBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IHsgYW5kIGVuZHMgYXQgdGhlIG1hdGNoaW5nIH0uXG4gIC8vIEFsbCB3ZSByZWFsbHkgY2FyZSBhYm91dCBpcyBmaW5kaW5nIElERU5UIGZvbGxvd2VkIGJ5IHsgYW5kIGp1c3QgbWFyayB1cCB0aGUgSURFTlQgYW5kIGlnbm9yZSB0aGUgey5cbiAgdmFyIFFNTF9PQkpFQ1QgPSB7XG4gICAgYmVnaW46IFFNTF9JREVOVF9SRSArICdcXFxccyp7JywgZW5kOiAneycsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IFFNTF9JREVOVF9SRX0pXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydxdCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eXFxzKlsnXCJddXNlIChzdHJpY3R8YXNtKVsnXCJdL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7IC8vIHRlbXBsYXRlIHN0cmluZ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7JywgZW5kOiAnXFxcXH0nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoMFtiQl1bMDFdKyknIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbb09dWzAtN10rKScgfSxcbiAgICAgICAgICB7IGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBcInZhbHVlXCIgY29udGFpbmVyXG4gICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihjYXNlfHJldHVybnx0aHJvdylcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybiB0aHJvdyBjYXNlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHsgLy8gRTRYIC8gSlNYXG4gICAgICAgICAgICBiZWdpbjogLzwvLCBlbmQ6IC8+XFxzKlspO1xcXV0vLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBTSUdOQUwsXG4gICAgICBQUk9QRVJUWSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi99KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogL1xcW3wlL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcLicgKyBobGpzLklERU5UX1JFLCByZWxldmFuY2U6IDAgLy8gaGFjazogcHJldmVudHMgZGV0ZWN0aW9uIG9mIGtleXdvcmRzIGFmdGVyIGRvdHNcbiAgICAgIH0sXG4gICAgICBJRF9JRCxcbiAgICAgIFFNTF9BVFRSSUJVVEUsXG4gICAgICBRTUxfT0JKRUNUXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvIy9cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICcoW2EtekEtWl18XFxcXC5bYS16QS1aLl0pW2EtekEtWjAtOS5fXSonO1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBJREVOVF9SRSxcbiAgICAgICAgbGV4ZW1lczogSURFTlRfUkUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAga2V5d29yZDpcbiAgICAgICAgICAgICdmdW5jdGlvbiBpZiBpbiBicmVhayBuZXh0IHJlcGVhdCBlbHNlIGZvciByZXR1cm4gc3dpdGNoIHdoaWxlIHRyeSB0cnlDYXRjaCAnICtcbiAgICAgICAgICAgICdzdG9wIHdhcm5pbmcgcmVxdWlyZSBsaWJyYXJ5IGF0dGFjaCBkZXRhY2ggc291cmNlIHNldE1ldGhvZCBzZXRHZW5lcmljICcgK1xuICAgICAgICAgICAgJ3NldEdyb3VwR2VuZXJpYyBzZXRDbGFzcyAuLi4nLFxuICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAnTlVMTCBOQSBUUlVFIEZBTFNFIFQgRiBJbmYgTmFOIE5BX2ludGVnZXJffDEwIE5BX3JlYWxffDEwIE5BX2NoYXJhY3Rlcl98MTAgJyArXG4gICAgICAgICAgICAnTkFfY29tcGxleF98MTAnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gaGV4IHZhbHVlXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGV4cGxpY2l0IGludGVnZXJcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IFwiXFxcXGQrKD86W2VFXVsrXFxcXC1dP1xcXFxkKik/TFxcXFxiXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbnVtYmVyIHdpdGggdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCJcXFxcZCtcXFxcLig/IVxcXFxkKSg/OmlcXFxcYik/XCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFxkKyg/OlxcXFwuXFxcXGQqKT8oPzpbZUVdWytcXFxcLV0/XFxcXGQqKT9pP1xcXFxiXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbnVtYmVyIHdpdGggbGVhZGluZyBkZWNpbWFsXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFwuXFxcXGQrKD86W2VFXVsrXFxcXC1dP1xcXFxkKik/aT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgLy8gZXNjYXBlZCBpZGVudGlmaWVyXG4gICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgIGVuZDogJ2AnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJ1wiJywgZW5kOiAnXCInfSxcbiAgICAgICAgICB7YmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wifVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgZnVuY3Rpb24gb3JSZVZhbHVlcyhvcHMpe1xuICAgIHJldHVybiBvcHNcbiAgICAubWFwKGZ1bmN0aW9uKG9wKSB7XG4gICAgICByZXR1cm4gb3BcbiAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAubWFwKGZ1bmN0aW9uKGNoYXIpIHtcbiAgICAgICAgICByZXR1cm4gJ1xcXFwnICsgY2hhcjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIH0pXG4gICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHZhciBSRV9JREVOVCA9ICd+P1thLXokX11bMC05YS16QS1aJF9dKic7XG4gIHZhciBSRV9NT0RVTEVfSURFTlQgPSAnYD9bQS1aJF9dWzAtOWEtekEtWiRfXSonO1xuXG4gIHZhciBSRV9QQVJBTV9UWVBFUEFSQU0gPSAnXFwnP1thLXokX11bMC05YS16JF9dKic7XG4gIHZhciBSRV9QQVJBTV9UWVBFID0gJ1xccyo6XFxzKlthLXokX11bMC05YS16JF9dKihcXChcXHMqKCcgKyBSRV9QQVJBTV9UWVBFUEFSQU0gKyAnXFxzKigsJyArIFJFX1BBUkFNX1RZUEVQQVJBTSArICcpKik/XFxzKlxcKSk/JztcbiAgdmFyIFJFX1BBUkFNID0gUkVfSURFTlQgKyAnKCcgKyBSRV9QQVJBTV9UWVBFICsgJyk/KCcgKyBSRV9QQVJBTV9UWVBFICsgJyk/JztcbiAgdmFyIFJFX09QRVJBVE9SID0gXCIoXCIgKyBvclJlVmFsdWVzKFsnfHwnLCAnJiYnLCAnKysnLCAnKionLCAnKy4nLCAnKicsICcvJywgJyouJywgJy8uJywgJy4uLicsICd8PiddKSArIFwifD09fD09PSlcIjtcbiAgdmFyIFJFX09QRVJBVE9SX1NQQUNFRCA9IFwiXFxcXHMrXCIgKyBSRV9PUEVSQVRPUiArIFwiXFxcXHMrXCI7XG5cbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYW5kIGFzIGFzciBhc3NlcnQgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuYWwnICtcbiAgICAgICdmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSBpbmhlcml0IGluaXRpYWxpemVyJyArXG4gICAgICAnbGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCBtb2QgbW9kdWxlIG11dGFibGUgbmV3IG5vbnJlYycgK1xuICAgICAgJ29iamVjdCBvZiBvcGVuIG9yIHByaXZhdGUgcmVjIHNpZyBzdHJ1Y3QgdGhlbiB0byB0cnkgdHlwZSB2YWwgdmlydHVhbCB3aGVuIHdoaWxlIHdpdGgnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2FycmF5IGJvb2wgYnl0ZXMgY2hhciBleG58NSBmbG9hdCBpbnQgaW50MzIgaW50NjQgbGlzdCBsYXp5X3R8NSBuYXRpdmVpbnR8NSByZWYgc3RyaW5nIHVuaXQgJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UnXG4gIH07XG5cbiAgdmFyIFJFX05VTUJFUiA9ICdcXFxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98JyArXG4gICAgJzBbb09dWzAtN19dK1tMbG5dP3wnICtcbiAgICAnMFtiQl1bMDFfXStbTGxuXT98JyArXG4gICAgJ1swLTldWzAtOV9dKihbTGxuXXwoXFxcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pJztcblxuICB2YXIgTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFJFX05VTUJFUlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKFxcXFwtJyArIFJFX05VTUJFUiArICdcXFxcKSdcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIE9QRVJBVE9SX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnb3BlcmF0b3InLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogUkVfT1BFUkFUT1JcbiAgfTtcbiAgdmFyIExJU1RfQ09OVEVOVFNfTU9ERVMgPSBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnaWRlbnRpZmllcicsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBiZWdpbjogUkVfSURFTlRcbiAgICB9LFxuICAgIE9QRVJBVE9SX01PREUsXG4gICAgTlVNQkVSX01PREVcbiAgXTtcblxuICB2YXIgTU9EVUxFX0FDQ0VTU19DT05URU5UUyA9IFtcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE9QRVJBVE9SX01PREUsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbW9kdWxlJyxcbiAgICAgIGJlZ2luOiBcIlxcXFxiXCIgKyBSRV9NT0RVTEVfSURFTlQsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgZW5kOiBcIlxcLlwiLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2lkZW50aWZpZXInLFxuICAgICAgICAgIGJlZ2luOiBSRV9NT0RVTEVfSURFTlQsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgdmFyIFBBUkFNU19DT05URU5UUyA9IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtb2R1bGUnLFxuICAgICAgYmVnaW46IFwiXFxcXGJcIiArIFJFX01PRFVMRV9JREVOVCwgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICBlbmQ6IFwiXFwuXCIsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnaWRlbnRpZmllcicsXG4gICAgICAgICAgYmVnaW46IFJFX01PRFVMRV9JREVOVCxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICB2YXIgUEFSQU1TX01PREUgPSB7XG4gICAgYmVnaW46IFJFX0lERU5ULFxuICAgIGVuZDogJygsfFxcXFxufFxcXFwpKScsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBpbmcnLFxuICAgICAgICBiZWdpbjogJzonLFxuICAgICAgICBlbmQ6ICcoLHxcXFxcbiknLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRFTlRTXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9CTE9DS19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHMoXFxcXChcXFxcLj8uKj9cXFxcKXwnICsgUkVfSURFTlQgKyAnKVxcXFxzKj0+JyxcbiAgICAgICAgZW5kOiAnXFxcXHMqPT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFJFX0lERU5UXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogUkVfUEFSQU1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoXFxzKlxcKS8sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHNcXFxcKFxcXFwuP1teO1xcXFx8XSpcXFxcKVxcXFxzKj0+JyxcbiAgICAgICAgZW5kOiAnXFxcXHM9PicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIFBBUkFNU19NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwoXFxcXC5cXFxccycgKyBSRV9JREVOVCArICdcXFxcKVxcXFxzKj0+J1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgTU9EVUxFX0FDQ0VTU19DT05URU5UUy5wdXNoKEZVTkNUSU9OX0JMT0NLX01PREUpO1xuXG4gIHZhciBDT05TVFJVQ1RPUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICBiZWdpbjogUkVfTU9EVUxFX0lERU5UICsgJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiJyArIFJFX0lERU5UXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBQQVRURVJOX01BVENIX0JMT0NLX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAncGF0dGVybi1tYXRjaCcsXG4gICAgYmVnaW46ICdcXFxcfCcsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGVuZDogJz0+JyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTlNUUlVDVE9SX01PREUsXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICAgICAgYmVnaW46IFJFX01PRFVMRV9JREVOVFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgTU9EVUxFX0FDQ0VTU19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ21vZHVsZS1hY2Nlc3MnLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogXCJcXFxcYihcIiArIFJFX01PRFVMRV9JREVOVCArIFwiXFxcXC4pK1wiICsgUkVfSURFTlRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiKFwiICsgUkVfTU9EVUxFX0lERU5UICsgXCJcXFxcLikrXFxcXChcIixcbiAgICAgICAgZW5kOiBcIlxcXFwpXCIsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIEZVTkNUSU9OX0JMT0NLX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChNT0RVTEVfQUNDRVNTX0NPTlRFTlRTKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIoXCIgKyBSRV9NT0RVTEVfSURFTlQgKyBcIlxcXFwuKSt7XCIsXG4gICAgICAgIGVuZDogXCJ9XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBNT0RVTEVfQUNDRVNTX0NPTlRFTlRTXG4gIH07XG5cbiAgUEFSQU1TX0NPTlRFTlRTLnB1c2goTU9EVUxFX0FDQ0VTU19NT0RFKTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncmUnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJyg6XFxcXC18Oj18XFxcXCR7fFxcXFwrPSknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nLCB7IGlsbGVnYWw6ICdeKFxcXFwjLFxcXFwvXFxcXC8pJyB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2hhcmFjdGVyJyxcbiAgICAgICAgYmVnaW46ICdcXCcoXFxcXFxcXFxbXlxcJ10rfFteXFwnXSlcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKFxcXFwpJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcW1xcXFx8JyxcbiAgICAgICAgZW5kOiAnXFxcXHxcXFxcXScsXG4gICAgICAgIHJlbGV2YW5jZTogIDAsXG4gICAgICAgIGNvbnRhaW5zOiBMSVNUX0NPTlRFTlRTX01PREVTXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogTElTVF9DT05URU5UU19NT0RFU1xuICAgICAgfSxcbiAgICAgIENPTlNUUlVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICAgICAgYmVnaW46IFJFX09QRVJBVE9SX1NQQUNFRCxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFwtXFxcXC0+JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBQQVRURVJOX01BVENIX0JMT0NLX01PREUsXG4gICAgICBGVU5DVElPTl9CTE9DS19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtb2R1bGUtZGVmJyxcbiAgICAgICAgYmVnaW46IFwiXFxcXGJtb2R1bGVcXFxccytcIiArIFJFX0lERU5UICsgXCJcXFxccytcIiArIFJFX01PRFVMRV9JREVOVCArIFwiXFxcXHMrPVxcXFxzK3tcIixcbiAgICAgICAgZW5kOiBcIn1cIixcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21vZHVsZScsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBiZWdpbjogUkVfTU9EVUxFX0lERU5UXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ3snLFxuICAgICAgICAgICAgZW5kOiAnfScsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChNT0RVTEVfQUNDRVNTX0NPTlRFTlRTKVxuICAgICAgfSxcbiAgICAgIE1PRFVMRV9BQ0NFU1NfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6XG4gICAgICAnQXJjaGl2ZVJlY29yZCBBcmVhTGlnaHRTb3VyY2UgQXRtb3NwaGVyZSBBdHRyaWJ1dGUgQXR0cmlidXRlQmVnaW4gQXR0cmlidXRlRW5kIEJhc2lzICcgK1xuICAgICAgJ0JlZ2luIEJsb2JieSBCb3VuZCBDbGlwcGluZyBDbGlwcGluZ1BsYW5lIENvbG9yIENvbG9yU2FtcGxlcyBDb25jYXRUcmFuc2Zvcm0gQ29uZSAnICtcbiAgICAgICdDb29yZGluYXRlU3lzdGVtIENvb3JkU3lzVHJhbnNmb3JtIENyb3BXaW5kb3cgQ3VydmVzIEN5bGluZGVyIERlcHRoT2ZGaWVsZCBEZXRhaWwgJyArXG4gICAgICAnRGV0YWlsUmFuZ2UgRGlzayBEaXNwbGFjZW1lbnQgRGlzcGxheSBFbmQgRXJyb3JIYW5kbGVyIEV4cG9zdXJlIEV4dGVyaW9yIEZvcm1hdCAnICtcbiAgICAgICdGcmFtZUFzcGVjdFJhdGlvIEZyYW1lQmVnaW4gRnJhbWVFbmQgR2VuZXJhbFBvbHlnb24gR2VvbWV0cmljQXBwcm94aW1hdGlvbiBHZW9tZXRyeSAnICtcbiAgICAgICdIaWRlciBIeXBlcmJvbG9pZCBJZGVudGl0eSBJbGx1bWluYXRlIEltYWdlciBJbnRlcmlvciBMaWdodFNvdXJjZSAnICtcbiAgICAgICdNYWtlQ3ViZUZhY2VFbnZpcm9ubWVudCBNYWtlTGF0TG9uZ0Vudmlyb25tZW50IE1ha2VTaGFkb3cgTWFrZVRleHR1cmUgTWF0dGUgJyArXG4gICAgICAnTW90aW9uQmVnaW4gTW90aW9uRW5kIE51UGF0Y2ggT2JqZWN0QmVnaW4gT2JqZWN0RW5kIE9iamVjdEluc3RhbmNlIE9wYWNpdHkgT3B0aW9uICcgK1xuICAgICAgJ09yaWVudGF0aW9uIFBhcmFib2xvaWQgUGF0Y2ggUGF0Y2hNZXNoIFBlcnNwZWN0aXZlIFBpeGVsRmlsdGVyIFBpeGVsU2FtcGxlcyAnICtcbiAgICAgICdQaXhlbFZhcmlhbmNlIFBvaW50cyBQb2ludHNHZW5lcmFsUG9seWdvbnMgUG9pbnRzUG9seWdvbnMgUG9seWdvbiBQcm9jZWR1cmFsIFByb2plY3Rpb24gJyArXG4gICAgICAnUXVhbnRpemUgUmVhZEFyY2hpdmUgUmVsYXRpdmVEZXRhaWwgUmV2ZXJzZU9yaWVudGF0aW9uIFJvdGF0ZSBTY2FsZSBTY3JlZW5XaW5kb3cgJyArXG4gICAgICAnU2hhZGluZ0ludGVycG9sYXRpb24gU2hhZGluZ1JhdGUgU2h1dHRlciBTaWRlcyBTa2V3IFNvbGlkQmVnaW4gU29saWRFbmQgU3BoZXJlICcgK1xuICAgICAgJ1N1YmRpdmlzaW9uTWVzaCBTdXJmYWNlIFRleHR1cmVDb29yZGluYXRlcyBUb3J1cyBUcmFuc2Zvcm0gVHJhbnNmb3JtQmVnaW4gVHJhbnNmb3JtRW5kICcgK1xuICAgICAgJ1RyYW5zZm9ybVBvaW50cyBUcmFuc2xhdGUgVHJpbUN1cnZlIFdvcmxkQmVnaW4gV29ybGRFbmQnLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIElERU5USUZJRVIgPSAnW2EtekEtWi1fXVteXFxcXG57XStcXFxceyc7XG5cbiAgdmFyIFBST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgYmVnaW46IC9bYS16QS1aLV9dKy8sIGVuZDogL1xccyo6LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJzsnLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICBiZWdpbjogL1xcLlthLXpBLVotX10rL1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgYmVnaW46IC9cXChvcHRpb25hbFxcKS9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ3JhcGgnLCAnaW5zdGFuY2VzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2ltcG9ydCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIEZhY2V0IHNlY3Rpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXmZhY2V0ICcgKyBJREVOVElGSUVSLFxuICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAga2V5d29yZHM6ICdmYWNldCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUFJPUEVSVFksXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnN0YW5jZSBzZWN0aW9uc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyppbnN0YW5jZSBvZiAnICsgSURFTlRJRklFUixcbiAgICAgICAgZW5kOiAnfScsXG4gICAgICAgIGtleXdvcmRzOiAnbmFtZSBjb3VudCBjaGFubmVscyBpbnN0YW5jZS1kYXRhIGluc3RhbmNlLXN0YXRlIGluc3RhbmNlIG9mJyxcbiAgICAgICAgaWxsZWdhbDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIFBST1BFUlRZLFxuICAgICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gQ29tcG9uZW50IHNlY3Rpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXicgKyBJREVOVElGSUVSLFxuICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQUk9QRVJUWSxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIENvbW1lbnRzXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IC8vIENvbG9ycyBmcm9tIFJvdXRlck9TIHRlcm1pbmFsOlxuLy8gICBncmVlbiAgICAgICAgLSAjMEU5QTAwXG4vLyAgIHRlYWwgICAgICAgICAtICMwQzlBOUFcbi8vICAgcHVycGxlICAgICAgIC0gIzk5MDY5QVxuLy8gICBsaWdodC1icm93biAgLSAjOUE5OTAwXG5cbmZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgU1RBVEVNRU5UUyA9ICdmb3JlYWNoIGRvIHdoaWxlIGZvciBpZiBmcm9tIHRvIHN0ZXAgZWxzZSBvbi1lcnJvciBhbmQgb3Igbm90IGluJztcblxuICAvLyBHbG9iYWwgY29tbWFuZHM6IEV2ZXJ5IGdsb2JhbCBjb21tYW5kIHNob3VsZCBzdGFydCB3aXRoIFwiOlwiIHRva2VuLCBvdGhlcndpc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIHZhcmlhYmxlLlxuICB2YXIgR0xPQkFMX0NPTU1BTkRTID0gJ2dsb2JhbCBsb2NhbCBiZWVwIGRlbGF5IHB1dCBsZW4gdHlwZW9mIHBpY2sgbG9nIHRpbWUgc2V0IGZpbmQgZW52aXJvbm1lbnQgdGVybWluYWwgZXJyb3IgZXhlY3V0ZSBwYXJzZSByZXNvbHZlIHRvYXJyYXkgdG9ib29sIHRvaWQgdG9pcCB0b2lwNiB0b251bSB0b3N0ciB0b3RpbWUnO1xuXG4gIC8vIENvbW1vbiBjb21tYW5kczogRm9sbG93aW5nIGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIG1vc3Qgc3ViLW1lbnVzOlxuICB2YXIgQ09NTU9OX0NPTU1BTkRTID0gJ2FkZCByZW1vdmUgZW5hYmxlIGRpc2FibGUgc2V0IGdldCBwcmludCBleHBvcnQgZWRpdCBmaW5kIHJ1biBkZWJ1ZyBlcnJvciBpbmZvIHdhcm5pbmcnO1xuXG4gIHZhciBMSVRFUkFMUyA9ICd0cnVlIGZhbHNlIHllcyBubyBub3RoaW5nIG5pbCBudWxsJztcblxuICB2YXIgT0JKRUNUUyA9ICd0cmFmZmljLWZsb3cgdHJhZmZpYy1nZW5lcmF0b3IgZmlyZXdhbGwgc2NoZWR1bGVyIGFhYSBhY2NvdW50aW5nIGFkZHJlc3MtbGlzdCBhZGRyZXNzIGFsaWduIGFyZWEgYmFuZHdpZHRoLXNlcnZlciBiZmQgYmdwIGJyaWRnZSBjbGllbnQgY2xvY2sgY29tbXVuaXR5IGNvbmZpZyBjb25uZWN0aW9uIGNvbnNvbGUgY3VzdG9tZXIgZGVmYXVsdCBkaGNwLWNsaWVudCBkaGNwLXNlcnZlciBkaXNjb3ZlcnkgZG5zIGUtbWFpbCBldGhlcm5ldCBmaWx0ZXIgZmlyZXdhbGwgZmlybXdhcmUgZ3BzIGdyYXBoaW5nIGdyb3VwIGhhcmR3YXJlIGhlYWx0aCBob3RzcG90IGlkZW50aXR5IGlnbXAtcHJveHkgaW5jb21pbmcgaW5zdGFuY2UgaW50ZXJmYWNlIGlwIGlwc2VjIGlwdjYgaXJxIGwydHAtc2VydmVyIGxjZCBsZHAgbG9nZ2luZyBtYWMtc2VydmVyIG1hYy13aW5ib3ggbWFuZ2xlIG1hbnVhbCBtaXJyb3IgbW1lIG1wbHMgbmF0IG5kIG5laWdoYm9yIG5ldHdvcmsgbm90ZSBudHAgb3NwZiBvc3BmLXYzIG92cG4tc2VydmVyIHBhZ2UgcGVlciBwaW0gcGluZyBwb2xpY3kgcG9vbCBwb3J0IHBwcCBwcHBvZS1jbGllbnQgcHB0cC1zZXJ2ZXIgcHJlZml4IHByb2ZpbGUgcHJvcG9zYWwgcHJveHkgcXVldWUgcmFkaXVzIHJlc291cmNlIHJpcCByaXBuZyByb3V0ZSByb3V0aW5nIHNjcmVlbiBzY3JpcHQgc2VjdXJpdHktcHJvZmlsZXMgc2VydmVyIHNlcnZpY2Ugc2VydmljZS1wb3J0IHNldHRpbmdzIHNoYXJlcyBzbWIgc21zIHNuaWZmZXIgc25tcCBzbm9vcGVyIHNvY2tzIHNzdHAtc2VydmVyIHN5c3RlbSB0b29sIHRyYWNraW5nIHR5cGUgdXBncmFkZSB1cG5wIHVzZXItbWFuYWdlciB1c2VycyB1c2VyIHZsYW4gc2VjcmV0IHZycnAgd2F0Y2hkb2cgd2ViLWFjY2VzcyB3aXJlbGVzcyBwcHRwIHBwcG9lIGxhbiB3YW4gbGF5ZXI3LXByb3RvY29sIGxlYXNlIHNpbXBsZSByYXcnO1xuXG4gIC8vIHByaW50IHBhcmFtZXRlcnNcbiAgLy8gU2V2ZXJhbCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgZm9yIHByaW50IGNvbW1hbmQ6XG4gIC8vIFRvRG86IHZhciBQQVJBTUVURVJTX1BSSU5UID0gJ2FwcGVuZCBhcy12YWx1ZSBicmllZiBkZXRhaWwgY291bnQtb25seSBmaWxlIGZvbGxvdyBmb2xsb3ctb25seSBmcm9tIGludGVydmFsIHRlcnNlIHZhbHVlLWxpc3Qgd2l0aG91dC1wYWdpbmcgd2hlcmUgaW5mbyc7XG4gIC8vIFRvRG86IHZhciBPUEVSQVRPUlMgPSAnJiYgYW5kICEgbm90IHx8IG9yIGluIH4gXiAmIDw8ID4+ICsgLSAqIC8nO1xuICAvLyBUb0RvOiB2YXIgVFlQRVMgPSAnbnVtIG51bWJlciBib29sIGJvb2xlYW4gc3RyIHN0cmluZyBpcCBpcDYtcHJlZml4IGlkIHRpbWUgYXJyYXknO1xuICAvLyBUb0RvOiBUaGUgZm9sbG93aW5nIHRva2VucyBzZXJ2ZSBhcyBkZWxpbWl0ZXJzIGluIHRoZSBncmFtbWFyOiAoKSAgW10gIHt9ICA6ICAgOyAgICQgICAvXG5cbiAgdmFyIFZBUl9QUkVGSVggPSAnZ2xvYmFsIGxvY2FsIHNldCBmb3IgZm9yZWFjaCc7XG5cbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL30sXG4gICAgICB7YmVnaW46IC9cXCRcXHsoLio/KX0vfVxuICAgIF1cbiAgfTtcblxuICB2YXIgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBUE9TX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gIH07XG5cbiAgdmFyIElQQUREUiA9ICcoKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFxcXGInO1xuICB2YXIgSVBBRERSX3dCSVRNQVNLID0gIElQQUREUisnLygzWzAtMl18WzEtMl1bMC05XXxcXFxcZCknO1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydyb3V0ZXJvcycsICdtaWtyb3RpayddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogLzo/W1xcdy1dKy8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAga2V5d29yZDogU1RBVEVNRU5UUyArICcgOicgKyBTVEFURU1FTlRTLnNwbGl0KCcgJykuam9pbignIDonKSArICcgOicgKyBHTE9CQUxfQ09NTUFORFMuc3BsaXQoJyAnKS5qb2luKCcgOicpLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8g0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C1INC60L7QvdGB0YLRgNGD0LrRhtC40LhcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAvXkAvLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgICAvLyBkbnNcbiAgICAgICAgICB7IGJlZ2luOiAvXFwvXFwqLywgZW5kOiAvXFwqXFwvLywgfSwgICAgICAgICAgLy8gLS0gY29tbWVudFxuICAgICAgICAgIHsgYmVnaW46IC8lJS8sIGVuZDogLyQvLCB9LCAgICAgICAgICAgICAgIC8vIC0tIGNvbW1lbnRcbiAgICAgICAgICB7IGJlZ2luOiAvXicvLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgICAvLyBNb25rZXkgb25lIGxpbmUgY29tbWVudFxuICAgICAgICAgIHsgYmVnaW46IC9eXFxzKlxcL1tcXHctXSs9LywgZW5kOiAvJC8sIH0sICAgIC8vIGpib3NzLWNsaVxuICAgICAgICAgIHsgYmVnaW46IC9cXC9cXC8vLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgLy8gU3RhbiBjb21tZW50XG4gICAgICAgICAgeyBiZWdpbjogL15cXFtcXDwvLCBlbmQ6IC9cXD5cXF0kLywgfSwgICAgICAgIC8vIEYjIGNsYXNzIGRlY2xhcmF0aW9uP1xuICAgICAgICAgIHsgYmVnaW46IC88XFwvLywgZW5kOiAvPi8sIH0sICAgICAgICAgICAgICAvLyBIVE1MIHRhZ3NcbiAgICAgICAgICB7IGJlZ2luOiAvXmZhY2V0IC8sIGVuZDogL1xcfS8sIH0sICAgICAgICAgLy8gcm9ib2NvbmYgLSDQu9GO0YLRi9C5INC60L7RgdGC0YvQu9GMICkpKVxuICAgICAgICAgIHsgYmVnaW46ICdeMVxcXFwuXFxcXC4oXFxcXGQrKSQnLCBlbmQ6IC8kLywgfSwgIC8vIHRhcFxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvLi8sXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeIycsICckJyksXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUixcbiAgICAgIHsgLy8gYXR0cmlidXRlPXZhbHVlXG4gICAgICAgIGJlZ2luOiAvW1xcdy1dK1xcPShbXlxcc1xce1xcfVxcW1xcXVxcKFxcKV0rKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvW149XSsvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLz0vLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6ICB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgICAgICAgICBBUE9TX1NUUklORyxcbiAgICAgICAgICAgICAgVkFSLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYignICsgTElURVJBTFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKVxcXFxiJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLyp7XG4gICAgICAgICAgICAgICAgLy8gSVB2NCBhZGRyZXNzZXMgYW5kIHN1Ym5ldHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7YmVnaW46IElQQUREUl93QklUTUFTSysnKCwnK0lQQUREUl93QklUTUFTSysnKSonfSwgLy8xOTIuMTY4LjAuMC8yNCwxLjIuMy4wLzI0XG4gICAgICAgICAgICAgICAgICB7YmVnaW46IElQQUREUisnLScrSVBBRERSfSwgICAgICAgLy8gMTkyLjE2OC4wLjEtMTkyLjE2OC4wLjNcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogSVBBRERSKycoLCcrSVBBRERSKycpKid9LCAvLyAxOTIuMTY4LjAuMSwxOTIuMTY4LjAuMzQsMTkyLjE2OC4yNC4xLDE5Mi4xNjguMC4xXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LCAvLyAqL1xuICAgICAgICAgICAgICAvKntcbiAgICAgICAgICAgICAgICAvLyBNQUMgYWRkcmVzc2VzIGFuZCBESENQIENsaWVudCBJRHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFxiKDE6KT8oWzAtOUEtRmEtZl17MSwyfVs6LV0pezV9KFswLTlBLUZhLWZdKXsxLDJ9XFxiLyxcbiAgICAgICAgICAgICAgfSwgLy8qL1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8g0J3QtSDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0YLRjCDQvdC1INC60LvQsNGB0YHQuNGE0LjRhtC40YDQvtCy0LDQvdC90YvQtSDQt9C90LDRh9C10L3QuNGPLiDQndC10L7QsdGF0L7QtNC40LzQviDQtNC70Y8g0LjRgdC60LvRjtGH0LXQvdC40Y8g0L/QvtC00YHQstC10YLQutC4INC30L3QsNGH0LXQvdC40Lkg0LrQsNC6IGJ1aWx0X2luLlxuICAgICAgICAgICAgICAgIC8vIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgYmVnaW46IC8oXCJbXlwiXSpcInxbXlxcc1xce1xcfVxcW1xcXV0rKS8sXG4gICAgICAgICAgICAgIH0sIC8vKi9cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9IC8vKi9cbiAgICAgICAgXVxuICAgICAgfSwvLyovXG4gICAgICB7XG4gICAgICAgIC8vIEhFWCB2YWx1ZXNcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IC9cXCpbMC05YS1mQS1GXSsvLFxuICAgICAgfSwgLy8qL1xuXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIENPTU1PTl9DT01NQU5EUy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpKFtcXFxcc1xcW1xcKF18XFxdKScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0aW4tbmFtZScsIC8vJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJyhcXFxcLlxcXFwuL3wvfFxcXFxzKSgoJyArIE9CSkVDVFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKTs/XFxcXHMpKycscmVsZXZhbmNlOiAxMCx9LFxuICAgICAgICAgIHtiZWdpbjogL1xcLlxcLi8sfSxcbiAgICAgICAgXSxcbiAgICAgIH0sLy8qL1xuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdmbG9hdCBjb2xvciBwb2ludCBub3JtYWwgdmVjdG9yIG1hdHJpeCB3aGlsZSBmb3IgaWYgZG8gcmV0dXJuIGVsc2UgYnJlYWsgZXh0ZXJuIGNvbnRpbnVlJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnYWJzIGFjb3MgYW1iaWVudCBhcmVhIGFzaW4gYXRhbiBhdG1vc3BoZXJlIGF0dHJpYnV0ZSBjYWxjdWxhdGVub3JtYWwgY2VpbCBjZWxsbm9pc2UgJyArXG4gICAgICAgICdjbGFtcCBjb21wIGNvbmNhdCBjb3MgZGVncmVlcyBkZXB0aCBEZXJpdiBkaWZmdXNlIGRpc3RhbmNlIER1IER2IGVudmlyb25tZW50IGV4cCAnICtcbiAgICAgICAgJ2ZhY2Vmb3J3YXJkIGZpbHRlcnN0ZXAgZmxvb3IgZm9ybWF0IGZyZXNuZWwgaW5jaWRlbnQgbGVuZ3RoIGxpZ2h0c291cmNlIGxvZyBtYXRjaCAnICtcbiAgICAgICAgJ21heCBtaW4gbW9kIG5vaXNlIG5vcm1hbGl6ZSBudHJhbnNmb3JtIG9wcG9zaXRlIG9wdGlvbiBwaG9uZyBwbm9pc2UgcG93IHByaW50ZiAnICtcbiAgICAgICAgJ3B0bGluZWQgcmFkaWFucyByYW5kb20gcmVmbGVjdCByZWZyYWN0IHJlbmRlcmluZm8gcm91bmQgc2V0Y29tcCBzZXR4Y29tcCBzZXR5Y29tcCAnICtcbiAgICAgICAgJ3NldHpjb21wIHNoYWRvdyBzaWduIHNpbiBzbW9vdGhzdGVwIHNwZWN1bGFyIHNwZWN1bGFyYnJkZiBzcGxpbmUgc3FydCBzdGVwIHRhbiAnICtcbiAgICAgICAgJ3RleHR1cmUgdGV4dHVyZWluZm8gdHJhY2UgdHJhbnNmb3JtIHZ0cmFuc2Zvcm0geGNvbXAgeWNvbXAgemNvbXAnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnIycsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdXJmYWNlIGRpc3BsYWNlbWVudCBsaWdodCB2b2x1bWUgaW1hZ2VyJywgZW5kOiAnXFxcXCgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaWxsdW1pbmF0ZSBpbGx1bWluYW5jZSBnYXRoZXInLCBlbmQ6ICdcXFxcKCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICAga2V5d29yZDogJ0JJTExfUEVSSU9EIEJJTExfU1RBUlQgQklMTF9TVE9QIFJTX0VGRkVDVElWRV9TVEFSVCBSU19FRkZFQ1RJVkVfU1RPUCBSU19KVVJJU19DT0RFIFJTX09QQ09fQ09ERSAnICtcbiAgICAgICAgICdJTlREQUREQVRUUklCVVRFfDUgSU5UREFERFZNU0d8NSBJTlREQkxPQ0tPUHw1IElOVERCTE9DS09QTkF8NSBJTlREQ0xPU0V8NSBJTlREQ09VTlR8NSAnICtcbiAgICAgICAgICdJTlREQ09VTlRTVEFUVVNDT0RFfDUgSU5URENSRUFURU1BU0t8NSBJTlREQ1JFQVRFREFZTUFTS3w1IElOVERDUkVBVEVGQUNUT1JNQVNLfDUgJyArXG4gICAgICAgICAnSU5URENSRUFURUhBTkRMRXw1IElOVERDUkVBVEVPVkVSUklERURBWU1BU0t8NSBJTlREQ1JFQVRFT1ZFUlJJREVNQVNLfDUgJyArXG4gICAgICAgICAnSU5URENSRUFURVNUQVRVU0NPREVNQVNLfDUgSU5URENSRUFURVRPVVBFUklPRHw1IElOVERERUxFVEV8NSBJTlRERElQVEVTVHw1IElOVERFWFBPUlR8NSAnICtcbiAgICAgICAgICdJTlRER0VURVJST1JDT0RFfDUgSU5UREdFVEVSUk9STUVTU0FHRXw1IElOVERJU0VRVUFMfDUgSU5UREpPSU58NSBJTlRETE9BRHw1IElOVERMT0FEQUNUVUFMQ1VUfDUgJyArXG4gICAgICAgICAnSU5URExPQUREQVRFU3w1IElOVERMT0FESElTVHw1IElOVERMT0FETElTVHw1IElOVERMT0FETElTVERBVEVTfDUgSU5URExPQURMSVNURU5FUkdZfDUgJyArXG4gICAgICAgICAnSU5URExPQURMSVNUSElTVHw1IElOVERMT0FEUkVMQVRFRENIQU5ORUx8NSBJTlRETE9BRFNQfDUgSU5URExPQURTVEFHSU5HfDUgSU5URExPQURVT018NSAnICtcbiAgICAgICAgICdJTlRETE9BRFVPTURBVEVTfDUgSU5URExPQURVT01ISVNUfDUgSU5URExPQURWRVJTSU9OfDUgSU5URE9QRU58NSBJTlREUkVBREZJUlNUfDUgSU5URFJFQURORVhUfDUgJyArXG4gICAgICAgICAnSU5URFJFQ0NPVU5UfDUgSU5URFJFTEVBU0V8NSBJTlREUkVQTEFDRXw1IElOVERST0xMQVZHfDUgSU5URFJPTExQRUFLfDUgSU5URFNDQUxBUk9QfDUgSU5URFNDQUxFfDUgJyArXG4gICAgICAgICAnSU5URFNFVEFUVFJJQlVURXw1IElOVERTRVREU1RQQVJUSUNJUEFOVHw1IElOVERTRVRTVFJJTkd8NSBJTlREU0VUVkFMVUV8NSBJTlREU0VUVkFMVUVTVEFUVVN8NSAnICtcbiAgICAgICAgICdJTlREU0hJRlRTVEFSVFRJTUV8NSBJTlREU01PT1RIfDUgSU5URFNPUlR8NSBJTlREU1BJS0VURVNUfDUgSU5URFNVQlNFVHw1IElOVERUT1V8NSAnICtcbiAgICAgICAgICdJTlREVE9VUkVMRUFTRXw1IElOVERUT1VWQUxVRXw1IElOVERVUERBVEVTVEFUU3w1IElOVERWQUxVRXw1IFNUREVWIElOVERERUxFVEVFWHw1ICcgK1xuICAgICAgICAgJ0lOVERMT0FERVhBQ1RVQUx8NSBJTlRETE9BREVYQ1VUfDUgSU5URExPQURFWERBVEVTfDUgSU5URExPQURFWHw1IElOVERMT0FERVhSRUxBVEVEQ0hBTk5FTHw1ICcgK1xuICAgICAgICAgJ0lOVERTQVZFRVh8NSBNVkxPQUR8NSBNVkxPQURBQ0NUfDUgTVZMT0FEQUNDVERBVEVTfDUgTVZMT0FEQUNDVEhJU1R8NSBNVkxPQUREQVRFU3w1IE1WTE9BREhJU1R8NSAnICtcbiAgICAgICAgICdNVkxPQURMSVNUfDUgTVZMT0FETElTVERBVEVTfDUgTVZMT0FETElTVEhJU1R8NSBJRiBGT1IgTkVYVCBET05FIFNFTEVDVCBFTkQgQ0FMTCBBQk9SVCBDTEVBUiBDSEFOTkVMIEZBQ1RPUiBMSVNUIE5VTUJFUiAnICtcbiAgICAgICAgICdPVkVSUklERSBTRVQgV0VFSyBESVNUUklCVVRJT05OT0RFIEVMU0UgV0hFTiBUSEVOIE9USEVSV0lTRSBJRU5VTSBDU1YgSU5DTFVERSBMRUFWRSBSSURFUiBTQVZFIERFTEVURSAnICtcbiAgICAgICAgICdOT1ZBTFVFIFNFQ1RJT04gV0FSTiBTQVZFX1VQREFURSBERVRFUk1JTkFOVCBMQUJFTCBSRVBPUlQgUkVWRU5VRSBFQUNIICcgK1xuICAgICAgICAgJ0lOIEZST00gVE9UQUwgQ0hBUkdFIEJMT0NLIEFORCBPUiBDU1ZfRklMRSBSQVRFX0NPREUgQVVYSUxJQVJZX0RFTUFORCAnICtcbiAgICAgICAgICdVSURBQ0NPVU5UIFJTIEJJTExfUEVSSU9EX1NFTEVDVCBIT1VSU19QRVJfTU9OVEggSU5URF9FUlJPUl9TVE9QIFNFQVNPTl9TQ0hFRFVMRV9OQU1FICcgK1xuICAgICAgICAgJ0FDQ09VTlRGQUNUT1IgQVJSQVlVUFBFUkJPVU5EIENBTExTVE9SRURQUk9DIEdFVEFET0NPTk5FQ1RJT04gR0VUQ09OTkVDVCBHRVREQVRBU09VUkNFICcgK1xuICAgICAgICAgJ0dFVFFVQUxJRklFUiBHRVRVU0VSSUQgSEFTVkFMVUUgTElTVENPVU5UIExJU1RPUCBMSVNUVVBEQVRFIExJU1RWQUxVRSBQUk9SQVRFRkFDVE9SIFJTUFJPUkFURSAnICtcbiAgICAgICAgICdTRVRCSU5QQVRIIFNFVERCTU9OSVRPUiBXUV9PUEVOIEJJTExJTkdIT1VSUyBEQVRFIERBVEVGUk9NRkxPQVQgREFURVRJTUVGUk9NU1RSSU5HICcgK1xuICAgICAgICAgJ0RBVEVUSU1FVE9TVFJJTkcgREFURVRPRkxPQVQgREFZIERBWURJRkYgREFZTkFNRSBEQkRBVEVUSU1FIEhPVVIgTUlOVVRFIE1PTlRIIE1PTlRIRElGRiAnICtcbiAgICAgICAgICdNT05USEhPVVJTIE1PTlRITkFNRSBST1VORERBVEUgU0FNRVdFRUtEQVlMQVNUWUVBUiBTRUNPTkQgV0VFS0RBWSBXRUVLRElGRiBZRUFSIFlFQVJEQVkgJyArXG4gICAgICAgICAnWUVBUlNUUiBDT01QU1VNIEhJU1RDT1VOVCBISVNUTUFYIEhJU1RNSU4gSElTVE1JTk5aIEhJU1RWQUxVRSBNQVhOUkFOR0UgTUFYUkFOR0UgTUlOUkFOR0UgJyArXG4gICAgICAgICAnQ09NUElLVkEgQ09NUEtWQSBDT01QS1ZBUkZST01LUUtXIENPTVBMRiBJREFUVFIgRkxBRyBMRjJLVyBMRjJLV0ggTUFYS1cgUE9XRVJGQUNUT1IgJyArXG4gICAgICAgICAnUkVBRElORzJVU0FHRSBBVkdTRUFTT04gTUFYU0VBU09OIE1PTlRITFlNRVJHRSBTRUFTT05WQUxVRSBTVU1TRUFTT04gQUNDVFJFQUREQVRFUyAnICtcbiAgICAgICAgICdBQ0NUVEFCTEVMT0FEIENPTkZJR0FERCBDT05GSUdHRVQgQ1JFQVRFT0JKRUNUIENSRUFURVJFUE9SVCBFTUFJTENMSUVOVCBFWFBCTEtNRE1VU0FHRSAnICtcbiAgICAgICAgICdFWFBNRE1VU0FHRSBFWFBPUlRfVVNBR0UgRkFDVE9SSU5FRkZFQ1QgR0VUVVNFUlNQRUNJRklFRFNUT1AgSU5FRkZFQ1QgSVNIT0xJREFZIFJVTlJBVEUgJyArXG4gICAgICAgICAnU0FWRV9QUk9GSUxFIFNFVFJFUE9SVFRJVExFIFVTRVJFWElUIFdBVEZPUlJVTlJBVEUgVE8gVEFCTEUgQUNPUyBBU0lOIEFUQU4gQVRBTjIgQklUQU5EIENFSUwgJyArXG4gICAgICAgICAnQ09TIENPU0VDQU5UIENPU0ggQ09UQU5HRU5UIERJVlFVT1QgRElWUkVNIEVYUCBGQUJTIEZMT09SIEZNT0QgRlJFUE0gRlJFWFBOIExPRyBMT0cxMCBNQVggTUFYTiAnICtcbiAgICAgICAgICdNSU4gTUlOTlogTU9ERiBQT1cgUk9VTkQgUk9VTkQyVkFMVUUgUk9VTkRJTlQgU0VDQU5UIFNJTiBTSU5IIFNRUk9PVCBUQU4gVEFOSCBGTE9BVDJTVFJJTkcgJyArXG4gICAgICAgICAnRkxPQVQyU1RSSU5HTkMgSU5TVFIgTEVGVCBMRU4gTFRSSU0gTUlEIFJJR0hUIFJUUklNIFNUUklORyBTVFJJTkdOQyBUT0xPV0VSIFRPVVBQRVIgVFJJTSAnICtcbiAgICAgICAgICdOVU1EQVlTIFJFQURfREFURSBTVEFHSU5HJyxcbiAgICAgICBidWlsdF9pbjogJ0lERU5USUZJRVIgT1BUSU9OUyBYTUxfRUxFTUVOVCBYTUxfT1AgWE1MX0VMRU1FTlRfT0YgRE9NRE9DQ1JFQVRFIERPTURPQ0xPQURGSUxFIERPTURPQ0xPQURYTUwgJyArXG4gICAgICAgICAnRE9NRE9DU0FWRUZJTEUgRE9NRE9DR0VUUk9PVCBET01ET0NBRERQSSBET01OT0RFR0VUTkFNRSBET01OT0RFR0VUVFlQRSBET01OT0RFR0VUVkFMVUUgRE9NTk9ERUdFVENISUxEQ1QgJyArXG4gICAgICAgICAnRE9NTk9ERUdFVEZJUlNUQ0hJTEQgRE9NTk9ERUdFVFNJQkxJTkcgRE9NTk9ERUNSRUFURUNISUxERUxFTUVOVCBET01OT0RFU0VUQVRUUklCVVRFICcgK1xuICAgICAgICAgJ0RPTU5PREVHRVRDSElMREVMRU1FTlRDVCBET01OT0RFR0VURklSU1RDSElMREVMRU1FTlQgRE9NTk9ERUdFVFNJQkxJTkdFTEVNRU5UIERPTU5PREVHRVRBVFRSSUJVVEVDVCAnICtcbiAgICAgICAgICdET01OT0RFR0VUQVRUUklCVVRFSSBET01OT0RFR0VUQVRUUklCVVRFQllOQU1FIERPTU5PREVHRVRCWU5BTUUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJyNcXFxccytbYS16QS1aXFxcXCBcXFxcLl0qJywgcmVsZXZhbmNlOiAwfSwgLy8gbG9va3MgbGlrZSAjLWNvbW1lbnRcbiAgICAgICAgICB7YmVnaW46ICcjW2EtekEtWlxcXFwgXFxcXC5dKyd9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTlVNX1NVRkZJWCA9ICcoW3VpXSg4fDE2fDMyfDY0fDEyOHxzaXplKXxmKDMyfDY0KSlcXD8nO1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdhYnN0cmFjdCBhcyBhc3luYyBhd2FpdCBiZWNvbWUgYm94IGJyZWFrIGNvbnN0IGNvbnRpbnVlIGNyYXRlIGRvIGR5biAnICtcbiAgICAnZWxzZSBlbnVtIGV4dGVybiBmYWxzZSBmaW5hbCBmbiBmb3IgaWYgaW1wbCBpbiBsZXQgbG9vcCBtYWNybyBtYXRjaCBtb2QgJyArXG4gICAgJ21vdmUgbXV0IG92ZXJyaWRlIHByaXYgcHViIHJlZiByZXR1cm4gc2VsZiBTZWxmIHN0YXRpYyBzdHJ1Y3Qgc3VwZXIgJyArXG4gICAgJ3RyYWl0IHRydWUgdHJ5IHR5cGUgdHlwZW9mIHVuc2FmZSB1bnNpemVkIHVzZSB2aXJ0dWFsIHdoZXJlIHdoaWxlIHlpZWxkJztcbiAgdmFyIEJVSUxUSU5TID1cbiAgICAvLyBmdW5jdGlvbnNcbiAgICAnZHJvcCAnICtcbiAgICAvLyB0eXBlc1xuICAgICdpOCBpMTYgaTMyIGk2NCBpMTI4IGlzaXplICcgK1xuICAgICd1OCB1MTYgdTMyIHU2NCB1MTI4IHVzaXplICcgK1xuICAgICdmMzIgZjY0ICcgK1xuICAgICdzdHIgY2hhciBib29sICcgK1xuICAgICdCb3ggT3B0aW9uIFJlc3VsdCBTdHJpbmcgVmVjICcgK1xuICAgIC8vIHRyYWl0c1xuICAgICdDb3B5IFNlbmQgU2l6ZWQgU3luYyBEcm9wIEZuIEZuTXV0IEZuT25jZSBUb093bmVkIENsb25lIERlYnVnICcgK1xuICAgICdQYXJ0aWFsRXEgUGFydGlhbE9yZCBFcSBPcmQgQXNSZWYgQXNNdXQgSW50byBGcm9tIERlZmF1bHQgSXRlcmF0b3IgJyArXG4gICAgJ0V4dGVuZCBJbnRvSXRlcmF0b3IgRG91YmxlRW5kZWRJdGVyYXRvciBFeGFjdFNpemVJdGVyYXRvciAnICtcbiAgICAnU2xpY2VDb25jYXRFeHQgVG9TdHJpbmcgJyArXG4gICAgLy8gbWFjcm9zXG4gICAgJ2Fzc2VydCEgYXNzZXJ0X2VxISBiaXRmbGFncyEgYnl0ZXMhIGNmZyEgY29sISBjb25jYXQhIGNvbmNhdF9pZGVudHMhICcgK1xuICAgICdkZWJ1Z19hc3NlcnQhIGRlYnVnX2Fzc2VydF9lcSEgZW52ISBwYW5pYyEgZmlsZSEgZm9ybWF0ISBmb3JtYXRfYXJncyEgJyArXG4gICAgJ2luY2x1ZGVfYmluISBpbmNsdWRlX3N0ciEgbGluZSEgbG9jYWxfZGF0YV9rZXkhIG1vZHVsZV9wYXRoISAnICtcbiAgICAnb3B0aW9uX2VudiEgcHJpbnQhIHByaW50bG4hIHNlbGVjdCEgc3RyaW5naWZ5ISB0cnkhIHVuaW1wbGVtZW50ZWQhICcgK1xuICAgICd1bnJlYWNoYWJsZSEgdmVjISB3cml0ZSEgd3JpdGVsbiEgbWFjcm9fcnVsZXMhIGFzc2VydF9uZSEgZGVidWdfYXNzZXJ0X25lISc7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydycyddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIFNvbWUgTm9uZSBPayBFcnInLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIEJVSUxUSU5TXG4gICAgfSxcbiAgICBsZXhlbWVzOiBobGpzLklERU5UX1JFICsgJyE/JyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nLCB7Y29udGFpbnM6IFsnc2VsZiddfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2JlZ2luOiAvYj9cIi8sIGlsbGVnYWw6IG51bGx9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgeyBiZWdpbjogL3IoIyopXCIoLnxcXG4pKj9cIlxcMSg/ISMpLyB9LFxuICAgICAgICAgICB7IGJlZ2luOiAvYj8nXFxcXD8oeFxcd3syfXx1XFx3ezR9fFVcXHd7OH18LiknLyB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvJ1thLXpBLVpfXVthLXpBLVowLTlfXSovXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYjBiKFswMV9dKyknICsgTlVNX1NVRkZJWCB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYjBvKFswLTdfXSspJyArIE5VTV9TVUZGSVggfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIweChbQS1GYS1mMC05X10rKScgKyBOVU1fU1VGRklYIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKFxcXFxkW1xcXFxkX10qKFxcXFwuWzAtOV9dKyk/KFtlRV1bKy1dP1swLTlfXSspPyknICtcbiAgICAgICAgICAgICAgICAgICBOVU1fU1VGRklYXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZuJywgZW5kOiAnKFxcXFwofDwpJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyNcXFxcIT9cXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd0eXBlJywgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7ZW5kc1BhcmVudDogdHJ1ZX0pXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3RyYWl0IGVudW0gc3RydWN0IHVuaW9uJywgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7ZW5kc1BhcmVudDogdHJ1ZX0pXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdbXFxcXHdcXFxcZF0nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiB7YnVpbHRfaW46IEJVSUxUSU5TfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICctPidcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gICAgLy8gRGF0YSBzdGVwIGFuZCBQUk9DIFNRTCBzdGF0ZW1lbnRzXG4gICAgdmFyIFNBU19LRVlXT1JEUyA9ICcnK1xuICAgICAgICAnZG8gaWYgdGhlbiBlbHNlIGVuZCB1bnRpbCB3aGlsZSAnK1xuICAgICAgICAnJytcbiAgICAgICAgJ2Fib3J0IGFycmF5IGF0dHJpYiBieSBjYWxsIGNhcmRzIGNhcmRzNCBjYXRuYW1lIGNvbnRpbnVlICcrXG4gICAgICAgICdkYXRhbGluZXMgZGF0YWxpbmVzNCBkZWxldGUgZGVsaW0gZGVsaW1pdGVyIGRpc3BsYXkgZG0gZHJvcCAnK1xuICAgICAgICAnZW5kc2FzIGVycm9yIGZpbGUgZmlsZW5hbWUgZm9vdG5vdGUgZm9ybWF0IGdvdG8gaW4gaW5maWxlICcrXG4gICAgICAgICdpbmZvcm1hdCBpbnB1dCBrZWVwIGxhYmVsIGxlYXZlIGxlbmd0aCBsaWJuYW1lIGxpbmsgbGlzdCAnK1xuICAgICAgICAnbG9zdGNhcmQgbWVyZ2UgbWlzc2luZyBtb2RpZnkgb3B0aW9ucyBvdXRwdXQgb3V0IHBhZ2UgcHV0ICcrXG4gICAgICAgICdyZWRpcmVjdCByZW1vdmUgcmVuYW1lIHJlcGxhY2UgcmV0YWluIHJldHVybiBzZWxlY3Qgc2V0IHNraXAgJytcbiAgICAgICAgJ3N0YXJ0c2FzIHN0b3AgdGl0bGUgdXBkYXRlIHdhaXRzYXMgd2hlcmUgd2luZG93IHggc3lzdGFzayAnK1xuICAgICAgICAnJytcbiAgICAgICAgJ2FkZCBhbmQgYWx0ZXIgYXMgY2FzY2FkZSBjaGVjayBjcmVhdGUgZGVsZXRlIGRlc2NyaWJlICcrXG4gICAgICAgICdkaXN0aW5jdCBkcm9wIGZvcmVpZ24gZnJvbSBncm91cCBoYXZpbmcgaW5kZXggaW5zZXJ0IGludG8gaW4gJytcbiAgICAgICAgJ2tleSBsaWtlIG1lc3NhZ2UgbW9kaWZ5IG1zZ3R5cGUgbm90IG51bGwgb24gb3Igb3JkZXIgcHJpbWFyeSAnK1xuICAgICAgICAncmVmZXJlbmNlcyByZXNldCByZXN0cmljdCBzZWxlY3Qgc2V0IHRhYmxlIHVuaXF1ZSB1cGRhdGUgJytcbiAgICAgICAgJ3ZhbGlkYXRlIHZpZXcgd2hlcmUnO1xuXG4gICAgLy8gQnVpbHQtaW4gU0FTIGZ1bmN0aW9uc1xuICAgIHZhciBTQVNfRlVOID0gJycrXG4gICAgICAgICdhYnN8YWRkcnxhaXJ5fGFyY29zfGFyc2lufGF0YW58YXR0cmN8YXR0cm58YmFuZHwnK1xuICAgICAgICAnYmV0YWludnxibHNoaWZ0fGJub3R8Ym9yfGJyc2hpZnR8YnhvcnxieXRlfGNkZnxjZWlsfCcrXG4gICAgICAgICdjZXhpc3R8Y2ludnxjbG9zZXxjbm9uY3R8Y29sbGF0ZXxjb21wYmx8Y29tcG91bmR8JytcbiAgICAgICAgJ2NvbXByZXNzfGNvc3xjb3NofGNzc3xjdXJvYnN8Y3Z8ZGFjY2RifGRhY2NkYnNsfCcrXG4gICAgICAgICdkYWNjc2x8ZGFjY3N5ZHxkYWNjdGFifGRhaXJ5fGRhdGV8ZGF0ZWp1bHxkYXRlcGFydHwnK1xuICAgICAgICAnZGF0ZXRpbWV8ZGF5fGRjbG9zZXxkZXBkYnxkZXBkYnNsfGRlcGRic2x8ZGVwc2x8JytcbiAgICAgICAgJ2RlcHNsfGRlcHN5ZHxkZXBzeWR8ZGVwdGFifGRlcHRhYnxkZXF1b3RlfGRobXN8ZGlmfCcrXG4gICAgICAgICdkaWdhbW1hfGRpbXxkaW5mb3xkbnVtfGRvcGVufGRvcHRuYW1lfGRvcHRudW18ZHJlYWR8JytcbiAgICAgICAgJ2Ryb3Bub3RlfGRzbmFtZXxlcmZ8ZXJmY3xleGlzdHxleHB8ZmFwcGVuZHxmY2xvc2V8JytcbiAgICAgICAgJ2Zjb2x8ZmRlbGV0ZXxmZXRjaHxmZXRjaG9ic3xmZXhpc3R8ZmdldHxmaWxlZXhpc3R8JytcbiAgICAgICAgJ2ZpbGVuYW1lfGZpbGVyZWZ8ZmluZm98ZmludnxmaXBuYW1lfGZpcG5hbWVsfCcrXG4gICAgICAgICdmaXBzdGF0ZXxmbG9vcnxmbm9uY3R8Zm5vdGV8Zm9wZW58Zm9wdG5hbWV8Zm9wdG51bXwnK1xuICAgICAgICAnZnBvaW50fGZwb3N8ZnB1dHxmcmVhZHxmcmV3aW5kfGZybGVufGZzZXB8ZnV6enwnK1xuICAgICAgICAnZndyaXRlfGdhbWludnxnYW1tYXxnZXRvcHRpb258Z2V0dmFyY3xnZXR2YXJufGhib3VuZHwnK1xuICAgICAgICAnaG1zfGhvc3RoZWxwfGhvdXJ8aWJlc3NlbHxpbmRleHxpbmRleGN8aW5kZXh3fGlucHV0fCcrXG4gICAgICAgICdpbnB1dGN8aW5wdXRufGludHxpbnRja3xpbnRueHxpbnRycnxpcnJ8amJlc3NlbHwnK1xuICAgICAgICAnanVsZGF0ZXxrdXJ0b3Npc3xsYWd8bGJvdW5kfGxlZnR8bGVuZ3RofGxnYW1tYXwnK1xuICAgICAgICAnbGlibmFtZXxsaWJyZWZ8bG9nfGxvZzEwfGxvZzJ8bG9ncGRmfGxvZ3BtZnxsb2dzZGZ8JytcbiAgICAgICAgJ2xvd2Nhc2V8bWF4fG1keXxtZWFufG1pbnxtaW51dGV8bW9kfG1vbnRofG1vcGVufCcrXG4gICAgICAgICdtb3J0fG58bmV0cHZ8bm1pc3N8bm9ybWFsfG5vdGV8bnB2fG9wZW58b3JkaW5hbHwnK1xuICAgICAgICAncGF0aG5hbWV8cGRmfHBlZWt8cGVla2N8cG1mfHBvaW50fHBvaXNzb258cG9rZXwnK1xuICAgICAgICAncHJvYmJldGF8cHJvYmJubWx8cHJvYmNoaXxwcm9iZnxwcm9iZ2FtfHByb2JoeXByfCcrXG4gICAgICAgICdwcm9iaXR8cHJvYm5lZ2J8cHJvYm5vcm18cHJvYnR8cHV0fHB1dGN8cHV0bnxxdHJ8JytcbiAgICAgICAgJ3F1b3RlfHJhbmJpbnxyYW5jYXV8cmFuZXhwfHJhbmdhbXxyYW5nZXxyYW5rfHJhbm5vcnwnK1xuICAgICAgICAncmFucG9pfHJhbnRibHxyYW50cml8cmFudW5pfHJlcGVhdHxyZXNvbHZlfHJldmVyc2V8JytcbiAgICAgICAgJ3Jld2luZHxyaWdodHxyb3VuZHxzYXZpbmd8c2NhbnxzZGZ8c2Vjb25kfHNpZ258JytcbiAgICAgICAgJ3NpbnxzaW5ofHNrZXduZXNzfHNvdW5kZXh8c3BlZGlzfHNxcnR8c3RkfHN0ZGVycnwnK1xuICAgICAgICAnc3RmaXBzfHN0bmFtZXxzdG5hbWVsfHN1YnN0cnxzdW18c3ltZ2V0fHN5c2dldHwnK1xuICAgICAgICAnc3lzbXNnfHN5c3Byb2R8c3lzcmN8c3lzdGVtfHRhbnx0YW5ofHRpbWV8dGltZXBhcnR8JytcbiAgICAgICAgJ3RpbnZ8dG5vbmN0fHRvZGF5fHRyYW5zbGF0ZXx0cmFud3JkfHRyaWdhbW1hfCcrXG4gICAgICAgICd0cmltfHRyaW1ufHRydW5jfHVuaWZvcm18dXBjYXNlfHVzc3x2YXJ8dmFyZm10fCcrXG4gICAgICAgICd2YXJpbmZtdHx2YXJsYWJlbHx2YXJsZW58dmFybmFtZXx2YXJudW18dmFycmF5fCcrXG4gICAgICAgICd2YXJyYXl4fHZhcnR5cGV8dmVyaWZ5fHZmb3JtYXR8dmZvcm1hdGR8dmZvcm1hdGR4fCcrXG4gICAgICAgICd2Zm9ybWF0bnx2Zm9ybWF0bnh8dmZvcm1hdHd8dmZvcm1hdHd4fHZmb3JtYXR4fCcrXG4gICAgICAgICd2aW5hcnJheXx2aW5hcnJheXh8dmluZm9ybWF0fHZpbmZvcm1hdGR8dmluZm9ybWF0ZHh8JytcbiAgICAgICAgJ3ZpbmZvcm1hdG58dmluZm9ybWF0bnh8dmluZm9ybWF0d3x2aW5mb3JtYXR3eHwnK1xuICAgICAgICAndmluZm9ybWF0eHx2bGFiZWx8dmxhYmVseHx2bGVuZ3RofHZsZW5ndGh4fHZuYW1lfCcrXG4gICAgICAgICd2bmFtZXh8dnR5cGV8dnR5cGV4fHdlZWtkYXl8eWVhcnx5eXF8emlwZmlwc3x6aXBuYW1lfCcrXG4gICAgICAgICd6aXBuYW1lbHx6aXBzdGF0ZSc7XG5cbiAgICAvLyBCdWlsdC1pbiBtYWNybyBmdW5jdGlvbnNcbiAgICB2YXIgU0FTX01BQ1JPX0ZVTiA9ICdicXVvdGV8bnJicXVvdGV8Y21wcmVzfHFjbXByZXN8Y29tcHN0b3J8JytcbiAgICAgICAgJ2RhdGF0eXB8ZGlzcGxheXxkb3xlbHNlfGVuZHxldmFsfGdsb2JhbHxnb3RvfCcrXG4gICAgICAgICdpZnxpbmRleHxpbnB1dHxrZXlkZWZ8bGFiZWx8bGVmdHxsZW5ndGh8bGV0fCcrXG4gICAgICAgICdsb2NhbHxsb3djYXNlfG1hY3JvfG1lbmR8bnJicXVvdGV8bnJxdW90ZXwnK1xuICAgICAgICAnbnJzdHJ8cHV0fHFjbXByZXN8cWxlZnR8cWxvd2Nhc2V8cXNjYW58JytcbiAgICAgICAgJ3FzdWJzdHJ8cXN5c2Z1bmN8cXRyaW18cXVvdGV8cXVwY2FzZXxzY2FufHN0cnwnK1xuICAgICAgICAnc3Vic3RyfHN1cGVycXxzeXNjYWxsfHN5c2V2YWxmfHN5c2V4ZWN8c3lzZnVuY3wnK1xuICAgICAgICAnc3lzZ2V0fHN5c2xwdXR8c3lzcHJvZHxzeXNyY3xzeXNycHV0fHRoZW58dG98JytcbiAgICAgICAgJ3RyaW18dW5xdW90ZXx1bnRpbHx1cGNhc2V8dmVyaWZ5fHdoaWxlfHdpbmRvdyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGlhc2VzOiBbJ3NhcycsICdTQVMnXSxcbiAgICAgICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSwgLy8gU0FTIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAgICAgJ251bGwgbWlzc2luZyBfYWxsXyBfYXV0b21hdGljXyBfY2hhcmFjdGVyXyBfaW5maWxlXyAnK1xuICAgICAgICAgICAgICAgICdfbl8gX25hbWVfIF9udWxsXyBfbnVtZXJpY18gX3VzZXJfIF93ZWJvdXRfJyxcbiAgICAgICAgICAgIG1ldGE6XG4gICAgICAgICAgICAgICAgU0FTX0tFWVdPUkRTXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gRGlzdGluY3QgaGlnaGxpZ2h0IGZvciBwcm9jIDxwcm9jPiwgZGF0YSwgcnVuLCBxdWl0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9eXFxzKihwcm9jIFtcXHdcXGRfXSt8ZGF0YXxydW58cXVpdClbXFxzXFw7XS9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gTWFjcm8gdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwmW2EtekEtWl9cXCZdW2EtekEtWjAtOV9dKlxcLj8vXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgZW1waGFzaXMgZm9yIGRhdGFsaW5lc3xjYXJkc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogL15cXHMqZGF0YWxpbmVzfGNhcmRzLio7LyxcbiAgICAgICAgICAgICAgICBlbmQ6IC9eXFxzKjtcXHMqJC9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7ICAgLy8gQnVpbHQtaW4gbWFjcm8gdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogJyUoJyArIFNBU19NQUNST19GVU4gKyAnKSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gVXNlci1kZWZpbmVkIG1hY3JvIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhZnRlclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvJVthLXpBLVpfXVthLXpBLVpfMC05XSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnW14lXSgnICsgU0FTX0ZVTiArICcpW1xcKF0nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnXFxcXConLCAnOycpLFxuICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIEFOTk9UQVRJT04gPSB7IGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ0BbQS1aYS16XSsnIH07XG5cbiAgLy8gdXNlZCBpbiBzdHJpbmdzIGZvciBlc2NhcGluZy9pbnRlcnBvbGF0aW9uL3N1YnN0aXR1dGlvblxuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxcJFtBLVphLXowLTlfXSsnfSxcbiAgICAgIHtiZWdpbjogJ1xcXFwkeycsIGVuZDogJ30nfVxuICAgIF1cbiAgfTtcblxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2Etel0rXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW2Etel0rXCJcIlwiJywgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgY29udGFpbnM6IFtTVUJTVF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICBdXG5cbiAgfTtcblxuICB2YXIgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCdcXFxcd1tcXFxcd1xcXFxkX10qKD8hXFwnKSdcbiAgfTtcblxuICB2YXIgVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bQS1aYS16MC05X10qJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgTkFNRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBDTEFTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIG9iamVjdCB0cmFpdCB0eXBlJyxcbiAgICBlbmQ6IC9bOj17XFxbXFxuO10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgd2l0aCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbVFlQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbVFlQRV1cbiAgICAgIH0sXG4gICAgICBOQU1FXG4gICAgXVxuICB9O1xuXG4gIHZhciBNRVRIT0QgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWYnLFxuICAgIGVuZDogL1s6PXtcXFsoXFxuO10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtOQU1FXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwnLFxuICAgICAga2V5d29yZDogJ3R5cGUgeWllbGQgbGF6eSBvdmVycmlkZSBkZWYgd2l0aCB2YWwgdmFyIHNlYWxlZCBhYnN0cmFjdCBwcml2YXRlIHRyYWl0IG9iamVjdCBpZiBmb3JTb21lIGZvciB3aGlsZSB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBleHRlbmRzIGltcG9ydCBmaW5hbCByZXR1cm4gZWxzZSBicmVhayBuZXcgY2F0Y2ggc3VwZXIgY2xhc3MgY2FzZSBwYWNrYWdlIGRlZmF1bHQgdHJ5IHRoaXMgbWF0Y2ggY29udGludWUgdGhyb3dzIGltcGxpY2l0J1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsXG4gICAgICBTWU1CT0wsXG4gICAgICBUWVBFLFxuICAgICAgTUVUSE9ELFxuICAgICAgQ0xBU1MsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBBTk5PVEFUSU9OXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNDSEVNRV9JREVOVF9SRSA9ICdbXlxcXFwoXFxcXClcXFxcW1xcXFxdXFxcXHtcXFxcfVwiLFxcJ2A7I3xcXFxcXFxcXFxcXFxzXSsnO1xuICB2YXIgU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUgPSAnKFxcXFwtfFxcXFwrKT9cXFxcZCsoWy4vXVxcXFxkKyk/JztcbiAgdmFyIFNDSEVNRV9DT01QTEVYX05VTUJFUl9SRSA9IFNDSEVNRV9TSU1QTEVfTlVNQkVSX1JFICsgJ1srXFxcXC1dJyArIFNDSEVNRV9TSU1QTEVfTlVNQkVSX1JFICsgJ2knO1xuICB2YXIgQlVJTFRJTlMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAnY2FzZS1sYW1iZGEgY2FsbC9jYyBjbGFzcyBkZWZpbmUtY2xhc3MgZXhpdC1oYW5kbGVyIGZpZWxkIGltcG9ydCAnICtcbiAgICAgICdpbmhlcml0IGluaXQtZmllbGQgaW50ZXJmYWNlIGxldCotdmFsdWVzIGxldC12YWx1ZXMgbGV0L2VjIG1peGluICcgK1xuICAgICAgJ29wdC1sYW1iZGEgb3ZlcnJpZGUgcHJvdGVjdCBwcm92aWRlIHB1YmxpYyByZW5hbWUgcmVxdWlyZSAnICtcbiAgICAgICdyZXF1aXJlLWZvci1zeW50YXggc3ludGF4IHN5bnRheC1jYXNlIHN5bnRheC1lcnJvciB1bml0L3NpZyB1bmxlc3MgJyArXG4gICAgICAnd2hlbiB3aXRoLXN5bnRheCBhbmQgYmVnaW4gY2FsbC13aXRoLWN1cnJlbnQtY29udGludWF0aW9uICcgK1xuICAgICAgJ2NhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYXNlIGNvbmQgZGVmaW5lICcgK1xuICAgICAgJ2RlZmluZS1zeW50YXggZGVsYXkgZG8gZHluYW1pYy13aW5kIGVsc2UgZm9yLWVhY2ggaWYgbGFtYmRhIGxldCBsZXQqICcgK1xuICAgICAgJ2xldC1zeW50YXggbGV0cmVjIGxldHJlYy1zeW50YXggbWFwIG9yIHN5bnRheC1ydWxlcyBcXCcgKiArICwgLEAgLSAuLi4gLyAnICtcbiAgICAgICc7IDwgPD0gPSA9PiA+ID49IGAgYWJzIGFjb3MgYW5nbGUgYXBwZW5kIGFwcGx5IGFzaW4gYXNzb2MgYXNzcSBhc3N2IGF0YW4gJyArXG4gICAgICAnYm9vbGVhbj8gY2FhciBjYWRyIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSAnICtcbiAgICAgICdjYWxsLXdpdGgtdmFsdWVzIGNhciBjZGRkYXIgY2RkZGRyIGNkciBjZWlsaW5nIGNoYXItPmludGVnZXIgJyArXG4gICAgICAnY2hhci1hbHBoYWJldGljPyBjaGFyLWNpPD0/IGNoYXItY2k8PyBjaGFyLWNpPT8gY2hhci1jaT49PyBjaGFyLWNpPj8gJyArXG4gICAgICAnY2hhci1kb3duY2FzZSBjaGFyLWxvd2VyLWNhc2U/IGNoYXItbnVtZXJpYz8gY2hhci1yZWFkeT8gY2hhci11cGNhc2UgJyArXG4gICAgICAnY2hhci11cHBlci1jYXNlPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXI8PT8gY2hhcjw/IGNoYXI9PyBjaGFyPj0/IGNoYXI+PyAnICtcbiAgICAgICdjaGFyPyBjbG9zZS1pbnB1dC1wb3J0IGNsb3NlLW91dHB1dC1wb3J0IGNvbXBsZXg/IGNvbnMgY29zICcgK1xuICAgICAgJ2N1cnJlbnQtaW5wdXQtcG9ydCBjdXJyZW50LW91dHB1dC1wb3J0IGRlbm9taW5hdG9yIGRpc3BsYXkgZW9mLW9iamVjdD8gJyArXG4gICAgICAnZXE/IGVxdWFsPyBlcXY/IGV2YWwgZXZlbj8gZXhhY3QtPmluZXhhY3QgZXhhY3Q/IGV4cCBleHB0IGZsb29yICcgK1xuICAgICAgJ2ZvcmNlIGdjZCBpbWFnLXBhcnQgaW5leGFjdC0+ZXhhY3QgaW5leGFjdD8gaW5wdXQtcG9ydD8gaW50ZWdlci0+Y2hhciAnICtcbiAgICAgICdpbnRlZ2VyPyBpbnRlcmFjdGlvbi1lbnZpcm9ubWVudCBsY20gbGVuZ3RoIGxpc3QgbGlzdC0+c3RyaW5nICcgK1xuICAgICAgJ2xpc3QtPnZlY3RvciBsaXN0LXJlZiBsaXN0LXRhaWwgbGlzdD8gbG9hZCBsb2cgbWFnbml0dWRlIG1ha2UtcG9sYXIgJyArXG4gICAgICAnbWFrZS1yZWN0YW5ndWxhciBtYWtlLXN0cmluZyBtYWtlLXZlY3RvciBtYXggbWVtYmVyIG1lbXEgbWVtdiBtaW4gJyArXG4gICAgICAnbW9kdWxvIG5lZ2F0aXZlPyBuZXdsaW5lIG5vdCBudWxsLWVudmlyb25tZW50IG51bGw/IG51bWJlci0+c3RyaW5nICcgK1xuICAgICAgJ251bWJlcj8gbnVtZXJhdG9yIG9kZD8gb3Blbi1pbnB1dC1maWxlIG9wZW4tb3V0cHV0LWZpbGUgb3V0cHV0LXBvcnQ/ICcgK1xuICAgICAgJ3BhaXI/IHBlZWstY2hhciBwb3J0PyBwb3NpdGl2ZT8gcHJvY2VkdXJlPyBxdWFzaXF1b3RlIHF1b3RlIHF1b3RpZW50ICcgK1xuICAgICAgJ3JhdGlvbmFsPyByYXRpb25hbGl6ZSByZWFkIHJlYWQtY2hhciByZWFsLXBhcnQgcmVhbD8gcmVtYWluZGVyIHJldmVyc2UgJyArXG4gICAgICAncm91bmQgc2NoZW1lLXJlcG9ydC1lbnZpcm9ubWVudCBzZXQhIHNldC1jYXIhIHNldC1jZHIhIHNpbiBzcXJ0IHN0cmluZyAnICtcbiAgICAgICdzdHJpbmctPmxpc3Qgc3RyaW5nLT5udW1iZXIgc3RyaW5nLT5zeW1ib2wgc3RyaW5nLWFwcGVuZCBzdHJpbmctY2k8PT8gJyArXG4gICAgICAnc3RyaW5nLWNpPD8gc3RyaW5nLWNpPT8gc3RyaW5nLWNpPj0/IHN0cmluZy1jaT4/IHN0cmluZy1jb3B5ICcgK1xuICAgICAgJ3N0cmluZy1maWxsISBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYgc3RyaW5nLXNldCEgc3RyaW5nPD0/IHN0cmluZzw/ICcgK1xuICAgICAgJ3N0cmluZz0/IHN0cmluZz49PyBzdHJpbmc+PyBzdHJpbmc/IHN1YnN0cmluZyBzeW1ib2wtPnN0cmluZyBzeW1ib2w/ICcgK1xuICAgICAgJ3RhbiB0cmFuc2NyaXB0LW9mZiB0cmFuc2NyaXB0LW9uIHRydW5jYXRlIHZhbHVlcyB2ZWN0b3IgJyArXG4gICAgICAndmVjdG9yLT5saXN0IHZlY3Rvci1maWxsISB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgJyArXG4gICAgICAnd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZSB3cml0ZSB3cml0ZS1jaGFyIHplcm8/J1xuICB9O1xuXG4gIHZhciBTSEVCQU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnXiMhJyxcbiAgICBlbmQ6ICckJ1xuICB9O1xuXG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAnKCN0fCNmfCNcXFxcXFxcXCcgKyBTQ0hFTUVfSURFTlRfUkUgKyAnfCNcXFxcXFxcXC4pJ1xuICB9O1xuXG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUsIHJlbGV2YW5jZTogMCB9LFxuICAgICAgeyBiZWdpbjogU0NIRU1FX0NPTVBMRVhfTlVNQkVSX1JFLCByZWxldmFuY2U6IDAgfSxcbiAgICAgIHsgYmVnaW46ICcjYlswLTFdKygvWzAtMV0rKT8nIH0sXG4gICAgICB7IGJlZ2luOiAnI29bMC03XSsoL1swLTddKyk/JyB9LFxuICAgICAgeyBiZWdpbjogJyN4WzAtOWEtZl0rKC9bMC05YS1mXSspPycgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgU1RSSU5HID0gaGxqcy5RVU9URV9TVFJJTkdfTU9ERTtcblxuICB2YXIgUkVHVUxBUl9FWFBSRVNTSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgYmVnaW46ICcjW3ByXXhcIicsXG4gICAgZW5kOiAnW15cXFxcXFxcXF1cIidcbiAgfTtcblxuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnOycsXG4gICAgICAnJCcsXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKCcjXFxcXHwnLCAnXFxcXHwjJylcbiAgXTtcblxuICB2YXIgSURFTlQgPSB7XG4gICAgYmVnaW46IFNDSEVNRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgUVVPVEVEX0lERU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCcnICsgU0NIRU1FX0lERU5UX1JFXG4gIH07XG5cbiAgdmFyIEJPRFkgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFFVT1RFRF9MSVNUID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvJy8gfSxcbiAgICAgIHsgYmVnaW46ICdgJyB9XG4gICAgXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogWydzZWxmJywgTElURVJBTCwgU1RSSU5HLCBOVU1CRVIsIElERU5ULCBRVU9URURfSURFTlRdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBOQU1FID0ge1xuICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgIGJlZ2luOiBTQ0hFTUVfSURFTlRfUkUsXG4gICAgbGV4ZW1lczogU0NIRU1FX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBCVUlMVElOU1xuICB9O1xuXG4gIHZhciBMQU1CREEgPSB7XG4gICAgYmVnaW46IC9sYW1iZGEvLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE5BTUUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLywgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtJREVOVF0sXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBMSVNUID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScgfSxcbiAgICAgIHsgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyB9XG4gICAgXSxcbiAgICBjb250YWluczogW0xBTUJEQSwgTkFNRSwgQk9EWV1cbiAgfTtcblxuICBCT0RZLmNvbnRhaW5zID0gW0xJVEVSQUwsIE5VTUJFUiwgU1RSSU5HLCBJREVOVCwgUVVPVEVEX0lERU5ULCBRVU9URURfTElTVCwgTElTVF0uY29uY2F0KENPTU1FTlRfTU9ERVMpO1xuXG4gIHJldHVybiB7XG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtTSEVCQU5HLCBOVU1CRVIsIFNUUklORywgUVVPVEVEX0lERU5ULCBRVU9URURfTElTVCwgTElTVF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gIHZhciBDT01NT05fQ09OVEFJTlMgPSBbXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1xcJ3xcXFwiJywgZW5kOiAnXFwnfFxcXCInLFxuICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIHtiZWdpbjogJ1xcJ1xcJyd9XVxuICAgIH1cbiAgXTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc2NpJ10sXG4gICAgbGV4ZW1lczogLyU/XFx3Ky8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhYm9ydCBicmVhayBjYXNlIGNsZWFyIGNhdGNoIGNvbnRpbnVlIGRvIGVsc2VpZiBlbHNlIGVuZGZ1bmN0aW9uIGVuZCBmb3IgZnVuY3Rpb24gJytcbiAgICAgICAgJ2dsb2JhbCBpZiBwYXVzZSByZXR1cm4gcmVzdW1lIHNlbGVjdCB0cnkgdGhlbiB3aGlsZScsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnJWYgJUYgJXQgJVQgJXBpICVlcHMgJWluZiAlbmFuICVlICVpICV6ICVzJyxcbiAgICAgIGJ1aWx0X2luOiAvLyBTY2lsYWIgaGFzIG1vcmUgdGhhbiAyMDAwIGZ1bmN0aW9ucy4gSnVzdCBsaXN0IHRoZSBtb3N0IGNvbW1vbnNcbiAgICAgICAnYWJzIGFuZCBhY29zIGFzaW4gYXRhbiBjZWlsIGNkIGNoZGlyIGNsZWFyZ2xvYmFsIGNvc2ggY29zIGN1bXByb2QgZGVmZiBkaXNwIGVycm9yICcrXG4gICAgICAgJ2V4ZWMgZXhlY3N0ciBleGlzdHMgZXhwIGV5ZSBnZXR0ZXh0IGZsb29yIGZwcmludGYgZnJlYWQgZnNvbHZlIGltYWcgaXNkZWYgaXNlbXB0eSAnK1xuICAgICAgICdpc2luZmlzbmFuIGlzdmVjdG9yIGxhc3RlcnJvciBsZW5ndGggbG9hZCBsaW5zcGFjZSBsaXN0IGxpc3RmaWxlcyBsb2cxMCBsb2cyIGxvZyAnK1xuICAgICAgICdtYXggbWluIG1zcHJpbnRmIG1jbG9zZSBtb3BlbiBvbmVzIG9yIHBhdGhjb252ZXJ0IHBvbHkgcHJpbnRmIHByb2QgcHdkIHJhbmQgcmVhbCAnK1xuICAgICAgICdyb3VuZCBzaW5oIHNpbiBzaXplIGdzb3J0IHNwcmludGYgc3FydCBzdHJjYXQgc3RyY21wcyB0cmluZyBzdW0gc3lzdGVtIHRhbmggdGFuICcrXG4gICAgICAgJ3R5cGUgdHlwZW5hbWUgd2FybmluZyB6ZXJvcyBtYXRyaXgnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnKFwifCN8L1xcXFwqfFxcXFxzKy9cXFxcdyspJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1thLXpBLVpfXVthLXpBLVpfMC05XSooXFwnK1tcXFxcLlxcJ10qfFtcXFxcLlxcJ10rKScsIGVuZDogJycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdXFwnKltcXFxcLlxcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogQ09NTU9OX0NPTlRBSU5TXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCcvLycsICckJylcbiAgICBdLmNvbmNhdChDT01NT05fQ09OVEFJTlMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQVRfSURFTlRJRklFUiA9ICdAW2Etei1dKycgLy8gQGZvbnQtZmFjZVxuICB2YXIgQVRfTU9ESUZJRVJTID0gXCJhbmQgb3Igbm90IG9ubHlcIlxuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnKFxcXFwkJyArIElERU5UX1JFICsgJylcXFxcYidcbiAgfTtcbiAgdmFyIEhFWENPTE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiAnI1swLTlBLUZhLWZdKydcbiAgfTtcbiAgdmFyIERFRl9JTlRFUk5BTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICBiZWdpbjogJ1tBLVpcXFxcX1xcXFwuXFxcXC1dKycsIGVuZDogJzonLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgaWxsZWdhbDogJ1teXFxcXHNdJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgSEVYQ09MT1IsXG4gICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICchaW1wb3J0YW50J1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s9L3xcXCddJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLCBiZWdpbjogJ1xcXFwjW0EtWmEtejAtOV8tXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWNsYXNzJywgYmVnaW46ICdcXFxcLltBLVphLXowLTlfLV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1hdHRyJywgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgaWxsZWdhbDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLCAvLyBiZWdpbjogSURFTlRfUkUsIGVuZDogJ1ssfFxcXFxzXSdcbiAgICAgICAgYmVnaW46ICdcXFxcYihhfGFiYnJ8YWNyb255bXxhZGRyZXNzfGFyZWF8YXJ0aWNsZXxhc2lkZXxhdWRpb3xifGJhc2V8YmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2l0ZXxjb2RlfGNvbHxjb2xncm91cHxjb21tYW5kfGRhdGFsaXN0fGRkfGRlbHxkZXRhaWxzfGRmbnxkaXZ8ZGx8ZHR8ZW18ZW1iZWR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8KGhbMS02XSl8aGVhZHxoZWFkZXJ8aGdyb3VwfGhyfGh0bWx8aXxpZnJhbWV8aW1nfGlucHV0fGluc3xrYmR8a2V5Z2VufGxhYmVsfGxlZ2VuZHxsaXxsaW5rfG1hcHxtYXJrfG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHxvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzYW1wfHNjcmlwdHxzZWN0aW9ufHNlbGVjdHxzbWFsbHxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1cHx0YWJsZXx0Ym9keXx0ZHx0ZXh0YXJlYXx0Zm9vdHx0aHx0aGVhZHx0aW1lfHRpdGxlfHRyfHR0fHVsfHZhcnx2aWRlbylcXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgYmVnaW46ICc6KHZpc2l0ZWR8dmFsaWR8cm9vdHxyaWdodHxyZXF1aXJlZHxyZWFkLXdyaXRlfHJlYWQtb25seXxvdXQtcmFuZ2V8b3B0aW9uYWx8b25seS1vZi10eXBlfG9ubHktY2hpbGR8bnRoLW9mLXR5cGV8bnRoLWxhc3Qtb2YtdHlwZXxudGgtbGFzdC1jaGlsZHxudGgtY2hpbGR8bm90fGxpbmt8bGVmdHxsYXN0LW9mLXR5cGV8bGFzdC1jaGlsZHxsYW5nfGludmFsaWR8aW5kZXRlcm1pbmF0ZXxpbi1yYW5nZXxob3Zlcnxmb2N1c3xmaXJzdC1vZi10eXBlfGZpcnN0LWxpbmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWNoaWxkfGZpcnN0fGVuYWJsZWR8ZW1wdHl8ZGlzYWJsZWR8ZGVmYXVsdHxjaGVja2VkfGJlZm9yZXxhZnRlcnxhY3RpdmUpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgYmVnaW46ICc6OihhZnRlcnxiZWZvcmV8Y2hvaWNlc3xmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxyZXBlYXQtaW5kZXh8cmVwZWF0LWl0ZW18c2VsZWN0aW9ufHZhbHVlKSdcbiAgICAgIH0sXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYihzcmN8ei1pbmRleHx3b3JkLXdyYXB8d29yZC1zcGFjaW5nfHdvcmQtYnJlYWt8d2lkdGh8d2lkb3dzfHdoaXRlLXNwYWNlfHZpc2liaWxpdHl8dmVydGljYWwtYWxpZ258dW5pY29kZS1iaWRpfHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb258dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtfHRvcHx0ZXh0LXVuZGVybGluZS1wb3NpdGlvbnx0ZXh0LXRyYW5zZm9ybXx0ZXh0LXNoYWRvd3x0ZXh0LXJlbmRlcmluZ3x0ZXh0LW92ZXJmbG93fHRleHQtaW5kZW50fHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWRlY29yYXRpb24tbGluZXx0ZXh0LWRlY29yYXRpb24tY29sb3J8dGV4dC1kZWNvcmF0aW9ufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWFsaWdufHRhYi1zaXplfHRhYmxlLWxheW91dHxyaWdodHxyZXNpemV8cXVvdGVzfHBvc2l0aW9ufHBvaW50ZXItZXZlbnRzfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2ZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWFmdGVyfHBhZGRpbmctdG9wfHBhZGRpbmctcmlnaHR8cGFkZGluZy1sZWZ0fHBhZGRpbmctYm90dG9tfHBhZGRpbmd8b3ZlcmZsb3cteXxvdmVyZmxvdy14fG92ZXJmbG93LXdyYXB8b3ZlcmZsb3d8b3V0bGluZS13aWR0aHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtY29sb3J8b3V0bGluZXxvcnBoYW5zfG9yZGVyfG9wYWNpdHl8b2JqZWN0LXBvc2l0aW9ufG9iamVjdC1maXR8bm9ybWFsfG5vbmV8bmF2LXVwfG5hdi1yaWdodHxuYXYtbGVmdHxuYXYtaW5kZXh8bmF2LWRvd258bWluLXdpZHRofG1pbi1oZWlnaHR8bWF4LXdpZHRofG1heC1oZWlnaHR8bWFza3xtYXJrc3xtYXJnaW4tdG9wfG1hcmdpbi1yaWdodHxtYXJnaW4tbGVmdHxtYXJnaW4tYm90dG9tfG1hcmdpbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGV8bGluZS1oZWlnaHR8bGV0dGVyLXNwYWNpbmd8bGVmdHxqdXN0aWZ5LWNvbnRlbnR8aW5pdGlhbHxpbmhlcml0fGltZS1tb2RlfGltYWdlLW9yaWVudGF0aW9ufGltYWdlLXJlc29sdXRpb258aW1hZ2UtcmVuZGVyaW5nfGljb258aHlwaGVuc3xoZWlnaHR8Zm9udC13ZWlnaHR8Zm9udC12YXJpYW50LWxpZ2F0dXJlc3xmb250LXZhcmlhbnR8Zm9udC1zdHlsZXxmb250LXN0cmV0Y2h8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1sYW5ndWFnZS1vdmVycmlkZXxmb250LWtlcm5pbmd8Zm9udC1mZWF0dXJlLXNldHRpbmdzfGZvbnQtZmFtaWx5fGZvbnR8ZmxvYXR8ZmxleC13cmFwfGZsZXgtc2hyaW5rfGZsZXgtZ3Jvd3xmbGV4LWZsb3d8ZmxleC1kaXJlY3Rpb258ZmxleC1iYXNpc3xmbGV4fGZpbHRlcnxlbXB0eS1jZWxsc3xkaXNwbGF5fGRpcmVjdGlvbnxjdXJzb3J8Y291bnRlci1yZXNldHxjb3VudGVyLWluY3JlbWVudHxjb250ZW50fGNvbHVtbi13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZXxjb2x1bW4tZ2FwfGNvbHVtbi1maWxsfGNvbHVtbi1jb3VudHxjb2x1bW5zfGNvbG9yfGNsaXAtcGF0aHxjbGlwfGNsZWFyfGNhcHRpb24tc2lkZXxicmVhay1pbnNpZGV8YnJlYWstYmVmb3JlfGJyZWFrLWFmdGVyfGJveC1zaXppbmd8Ym94LXNoYWRvd3xib3gtZGVjb3JhdGlvbi1icmVha3xib3R0b218Ym9yZGVyLXdpZHRofGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcHxib3JkZXItc3R5bGV8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yYWRpdXN8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnR8Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1hZ2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1jb2xsYXBzZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b218Ym9yZGVyfGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYmxlbmQtbW9kZXxiYWNrZ3JvdW5kfGJhY2tmYWNlLXZpc2liaWxpdHl8YXV0b3xhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9ufGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9ufGFsaWduLXNlbGZ8YWxpZ24taXRlbXN8YWxpZ24tY29udGVudClcXFxcYicsXG4gICAgICAgIGlsbGVnYWw6ICdbXlxcXFxzXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIod2hpdGVzcGFjZXx3YWl0fHctcmVzaXplfHZpc2libGV8dmVydGljYWwtdGV4dHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x1cHBlcmNhc2V8dXBwZXItcm9tYW58dXBwZXItYWxwaGF8dW5kZXJsaW5lfHRyYW5zcGFyZW50fHRvcHx0aGlufHRoaWNrfHRleHR8dGV4dC10b3B8dGV4dC1ib3R0b218dGItcmx8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLWZvb3Rlci1ncm91cHxzdy1yZXNpemV8c3VwZXJ8c3RyaWN0fHN0YXRpY3xzcXVhcmV8c29saWR8c21hbGwtY2Fwc3xzZXBhcmF0ZXxzZS1yZXNpemV8c2Nyb2xsfHMtcmVzaXplfHJ0bHxyb3ctcmVzaXplfHJpZGdlfHJpZ2h0fHJlcGVhdHxyZXBlYXQteXxyZXBlYXQteHxyZWxhdGl2ZXxwcm9ncmVzc3xwb2ludGVyfG92ZXJsaW5lfG91dHNpZGV8b3V0c2V0fG9ibGlxdWV8bm93cmFwfG5vdC1hbGxvd2VkfG5vcm1hbHxub25lfG53LXJlc2l6ZXxuby1yZXBlYXR8bm8tZHJvcHxuZXdzcGFwZXJ8bmUtcmVzaXplfG4tcmVzaXplfG1vdmV8bWlkZGxlfG1lZGl1bXxsdHJ8bHItdGJ8bG93ZXJjYXNlfGxvd2VyLXJvbWFufGxvd2VyLWFscGhhfGxvb3NlfGxpc3QtaXRlbXxsaW5lfGxpbmUtdGhyb3VnaHxsaW5lLWVkZ2V8bGlnaHRlcnxsZWZ0fGtlZXAtYWxsfGp1c3RpZnl8aXRhbGljfGludGVyLXdvcmR8aW50ZXItaWRlb2dyYXBofGluc2lkZXxpbnNldHxpbmxpbmV8aW5saW5lLWJsb2NrfGluaGVyaXR8aW5hY3RpdmV8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtYWxwaGF8aG9yaXpvbnRhbHxoaWRkZW58aGVscHxoYW5kfGdyb292ZXxmaXhlZHxlbGxpcHNpc3xlLXJlc2l6ZXxkb3VibGV8ZG90dGVkfGRpc3RyaWJ1dGV8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLWFsbC1saW5lc3xkaXNjfGRpc2FibGVkfGRlZmF1bHR8ZGVjaW1hbHxkYXNoZWR8Y3Jvc3NoYWlyfGNvbGxhcHNlfGNvbC1yZXNpemV8Y2lyY2xlfGNoYXJ8Y2VudGVyfGNhcGl0YWxpemV8YnJlYWstd29yZHxicmVhay1hbGx8Ym90dG9tfGJvdGh8Ym9sZGVyfGJvbGR8YmxvY2t8YmlkaS1vdmVycmlkZXxiZWxvd3xiYXNlbGluZXxhdXRvfGFsd2F5c3xhbGwtc2Nyb2xsfGFic29sdXRlfHRhYmxlfHRhYmxlLWNlbGwpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJzonLCBlbmQ6ICc7JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBIRVhDT0xPUixcbiAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICchaW1wb3J0YW50J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIG1hdGNoaW5nIHRoZXNlIGhlcmUgYWxsb3dzIHVzIHRvIHRyZWF0IHRoZW0gbW9yZSBsaWtlIHJlZ3VsYXIgQ1NTXG4gICAgICAvLyBydWxlcyBzbyBldmVyeXRoaW5nIGJldHdlZW4gdGhlIHt9IGdldHMgcmVndWxhciBydWxlIGhpZ2hsaWdodGluZyxcbiAgICAgIC8vIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBmb3IgcGFnZSBhbmQgZm9udC1mYWNlXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQChwYWdlfGZvbnQtZmFjZSknLFxuICAgICAgICBsZXhlbWVzOiBBVF9JREVOVElGSUVSLFxuICAgICAgICBrZXl3b3JkczogJ0BwYWdlIEBmb250LWZhY2UnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnLCBlbmQ6ICdbeztdJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBBVF9NT0RJRklFUlMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IEFUX0lERU5USUZJRVIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBIRVhDT0xPUixcbiAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICBiZWdpbjogJ1xcXFxzW0EtWmEtejAtOV8uLV0rJyxcbiAgICAgICAgICAvLyAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIC8vIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjb25zb2xlJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzezAsM31bL1xcXFx3XFxcXGRcXFxcW1xcXFxdKClALV0qWz4lJCNdJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnJCcsIHN1Ykxhbmd1YWdlOiAnYmFzaCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIHNtYWxpX2luc3RyX2xvd19wcmlvID0gWydhZGQnLCAnYW5kJywgJ2NtcCcsICdjbXBnJywgJ2NtcGwnLCAnY29uc3QnLCAnZGl2JywgJ2RvdWJsZScsICdmbG9hdCcsICdnb3RvJywgJ2lmJywgJ2ludCcsICdsb25nJywgJ21vdmUnLCAnbXVsJywgJ25lZycsICduZXcnLCAnbm9wJywgJ25vdCcsICdvcicsICdyZW0nLCAncmV0dXJuJywgJ3NobCcsICdzaHInLCAnc3B1dCcsICdzdWInLCAndGhyb3cnLCAndXNocicsICd4b3InXTtcbiAgdmFyIHNtYWxpX2luc3RyX2hpZ2hfcHJpbyA9IFsnYWdldCcsICdhcHV0JywgJ2FycmF5JywgJ2NoZWNrJywgJ2V4ZWN1dGUnLCAnZmlsbCcsICdmaWxsZWQnLCAnZ290by8xNicsICdnb3RvLzMyJywgJ2lnZXQnLCAnaW5zdGFuY2UnLCAnaW52b2tlJywgJ2lwdXQnLCAnbW9uaXRvcicsICdwYWNrZWQnLCAnc2dldCcsICdzcGFyc2UnXTtcbiAgdmFyIHNtYWxpX2tleXdvcmRzID0gWyd0cmFuc2llbnQnLCAnY29uc3RydWN0b3InLCAnYWJzdHJhY3QnLCAnZmluYWwnLCAnc3ludGhldGljJywgJ3B1YmxpYycsICdwcml2YXRlJywgJ3Byb3RlY3RlZCcsICdzdGF0aWMnLCAnYnJpZGdlJywgJ3N5c3RlbSddO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc21hbGknXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcjJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJ1xcXFxzKlxcXFwuZW5kXFxcXHNbYS16QS1aMC05XSonfSxcbiAgICAgICAgICB7YmVnaW46ICdeWyBdKlxcXFwuW2EtekEtWl0qJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICB7YmVnaW46ICdcXFxcczpbYS16QS1aXzAtOV0qJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICB7YmVnaW46ICdcXFxccygnICsgc21hbGlfa2V5d29yZHMuam9pbignfCcpICsgJyknfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIHZhcmlhbnRzIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHMoJytzbWFsaV9pbnN0cl9sb3dfcHJpby5qb2luKCd8JykrJylcXFxccydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHMoJytzbWFsaV9pbnN0cl9sb3dfcHJpby5qb2luKCd8JykrJykoKFxcXFwtfC8pW2EtekEtWjAtOV0rKStcXFxccycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxzKCcrc21hbGlfaW5zdHJfaGlnaF9wcmlvLmpvaW4oJ3wnKSsnKSgoXFxcXC18LylbYS16QS1aMC05XSspKlxcXFxzJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnTFteXFwoOzpcXG5dKjsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW3ZwXVswLTldKycsXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUl9JREVOVF9SRSA9ICdbYS16XVthLXpBLVowLTlfXSonO1xuICB2YXIgQ0hBUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFxcXCQuezF9J1xuICB9O1xuICB2YXIgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICcjJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc3QnXSxcbiAgICBrZXl3b3JkczogJ3NlbGYgc3VwZXIgbmlsIHRydWUgZmFsc2UgdGhpc0NvbnRleHQnLCAvLyBvbmx5IDZcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCdcIicsICdcIicpLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW0EtWmEtejAtOV9dKicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFZBUl9JREVOVF9SRSArICc6JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgU1lNQk9MLFxuICAgICAgQ0hBUixcbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyBsb29rcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbmVlZGVkIHRvIGF2b2lkIGNvbWJpbmF0b3JpYWxcbiAgICAgICAgLy8gZXhwbG9zaW9uIHVuZGVyIFY4LiBJdCBlZmZlY3RpdmVseSBtZWFucyBgfCB2YXIxIHZhcjIgLi4uIHxgIHdpdGhcbiAgICAgICAgLy8gd2hpdGVzcGFjZSBhZGphY2VudCB0byBgfGAgYmVpbmcgb3B0aW9uYWwuXG4gICAgICAgIGJlZ2luOiAnXFxcXHxbIF0qJyArIFZBUl9JREVOVF9SRSArICcoWyBdKycgKyBWQVJfSURFTlRfUkUgKyAnKSpbIF0qXFxcXHwnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvXFx8LyxcbiAgICAgICAgaWxsZWdhbDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnKFxcXFx8WyBdKik/JyArIFZBUl9JREVOVF9SRX1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwjXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIENIQVIsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIFNZTUJPTFxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21sJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIGFjY29yZGluZyB0byBEZWZpbml0aW9uIG9mIFN0YW5kYXJkIE1MIDk3ICAqL1xuICAgICAgICAnYWJzdHlwZSBhbmQgYW5kYWxzbyBhcyBjYXNlIGRhdGF0eXBlIGRvIGVsc2UgZW5kIGVxdHlwZSAnICtcbiAgICAgICAgJ2V4Y2VwdGlvbiBmbiBmdW4gZnVuY3RvciBoYW5kbGUgaWYgaW4gaW5jbHVkZSBpbmZpeCBpbmZpeHIgJyArXG4gICAgICAgICdsZXQgbG9jYWwgbm9uZml4IG9mIG9wIG9wZW4gb3JlbHNlIHJhaXNlIHJlYyBzaGFyaW5nIHNpZyAnICtcbiAgICAgICAgJ3NpZ25hdHVyZSBzdHJ1Y3Qgc3RydWN0dXJlIHRoZW4gdHlwZSB2YWwgd2l0aCB3aXRodHlwZSB3aGVyZSB3aGlsZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogYnVpbHQtaW4gdHlwZXMgYWNjb3JkaW5nIHRvIGJhc2lzIGxpYnJhcnkgKi9cbiAgICAgICAgJ2FycmF5IGJvb2wgY2hhciBleG4gaW50IGxpc3Qgb3B0aW9uIG9yZGVyIHJlYWwgcmVmIHN0cmluZyBzdWJzdHJpbmcgdmVjdG9yIHVuaXQgd29yZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBOT05FIFNPTUUgTEVTUyBFUVVBTCBHUkVBVEVSIG5pbCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXC98Pj4vLFxuICAgIGxleGVtZXM6ICdbYS16X11cXFxcdyohPycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAvXFxbKFxcfFxcfCk/XFxdfFxcKFxcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcXFwoXFxcXConLFxuICAgICAgICAnXFxcXCpcXFxcKScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcqL1xuICAgICAgICBiZWdpbjogJ1thLXpfXVxcXFx3KlxcJ1tcXFxcd1xcJ10qJ1xuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjpcbiAgICAgICAgICAnXFxcXGIoMFt4WF1bYS1mQS1GMC05X10rW0xsbl0/fCcgK1xuICAgICAgICAgICcwW29PXVswLTdfXStbTGxuXT98JyArXG4gICAgICAgICAgJzBbYkJdWzAxX10rW0xsbl0/fCcgK1xuICAgICAgICAgICdbMC05XVswLTlfXSooW0xsbl18KFxcXFwuWzAtOV9dKik/KFtlRV1bLStdP1swLTlfXSspPyk/KScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bLT1dPi8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBJbiBTUUYsIGEgdmFyaWFibGUgc3RhcnQgd2l0aCBfXG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXGJfK1thLXpBLVpfXVxcdyovXG4gIH07XG5cbiAgLy8gSW4gU1FGLCBhIGZ1bmN0aW9uIHNob3VsZCBmaXQgbXlUYWdfZm5jX215RnVuY3Rpb24gcGF0dGVyblxuICAvLyBodHRwczovL2NvbW11bml0eS5iaXN0dWRpby5jb20vd2lraS9GdW5jdGlvbnNfTGlicmFyeV8oQXJtYV8zKSNBZGRpbmdfYV9GdW5jdGlvblxuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiAvW2EtekEtWl1bYS16QS1aMC05XStfZm5jX1xcdyovXG4gIH07XG5cbiAgLy8gSW4gU1FGIHN0cmluZ3MsIHF1b3RlcyBtYXRjaGluZyB0aGUgc3RhcnQgYXJlIGVzY2FwZWQgYnkgYWRkaW5nIGEgY29uc2VjdXRpdmUuXG4gIC8vIEV4YW1wbGUgb2Ygc2luZ2xlIGVzY2FwZWQgcXVvdGVzOiBcIiBcIlwiIFwiIGFuZCAgJyAnJyAnLlxuICB2YXIgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIicsIHJlbGV2YW5jZTogMH1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXFwnXFwnJywgcmVsZXZhbmNlOiAwfV1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gbGlzdCBvZiBrZXl3b3JkcyBmcm9tOlxuICAvLyBodHRwczovL2NvbW11bml0eS5iaXN0dWRpby5jb20vd2lraS9QcmVQcm9jZXNzb3JfQ29tbWFuZHNcbiAgdmFyIFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLywgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnZGVmaW5lIHVuZGVmIGlmZGVmIGlmbmRlZiBlbHNlIGVuZGlmIGluY2x1ZGUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoU1RSSU5HUywge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPFteXFxuPl0qPi8sIGVuZDogLyQvLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3NxZiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdjYXNlIGNhdGNoIGRlZmF1bHQgZG8gZWxzZSBleGl0IGV4aXRXaXRoIGZvciBmb3JFYWNoIGZyb20gaWYgJyArXG4gICAgICAgICdwcml2YXRlIHN3aXRjaCB0aGVuIHRocm93IHRvIHRyeSB3YWl0VW50aWwgd2hpbGUgd2l0aCcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2FicyBhY2NUaW1lIGFjb3MgYWN0aW9uIGFjdGlvbklEcyBhY3Rpb25LZXlzIGFjdGlvbktleXNJbWFnZXMgYWN0aW9uS2V5c05hbWVzICcgK1xuICAgICAgICAnYWN0aW9uS2V5c05hbWVzQXJyYXkgYWN0aW9uTmFtZSBhY3Rpb25QYXJhbXMgYWN0aXZhdGVBZGRvbnMgYWN0aXZhdGVkQWRkb25zIGFjdGl2YXRlS2V5ICcgK1xuICAgICAgICAnYWRkM0RFTkNvbm5lY3Rpb24gYWRkM0RFTkV2ZW50SGFuZGxlciBhZGQzREVOTGF5ZXIgYWRkQWN0aW9uIGFkZEJhY2twYWNrIGFkZEJhY2twYWNrQ2FyZ28gJyArXG4gICAgICAgICdhZGRCYWNrcGFja0NhcmdvR2xvYmFsIGFkZEJhY2twYWNrR2xvYmFsIGFkZENhbVNoYWtlIGFkZEN1cmF0b3JBZGRvbnMgYWRkQ3VyYXRvckNhbWVyYUFyZWEgJyArXG4gICAgICAgICdhZGRDdXJhdG9yRWRpdGFibGVPYmplY3RzIGFkZEN1cmF0b3JFZGl0aW5nQXJlYSBhZGRDdXJhdG9yUG9pbnRzIGFkZEVkaXRvck9iamVjdCBhZGRFdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdhZGRGb3JjZSBhZGRHb2dnbGVzIGFkZEdyb3VwSWNvbiBhZGRIYW5kZ3VuSXRlbSBhZGRIZWFkZ2VhciBhZGRJdGVtIGFkZEl0ZW1DYXJnbyAnICtcbiAgICAgICAgJ2FkZEl0ZW1DYXJnb0dsb2JhbCBhZGRJdGVtUG9vbCBhZGRJdGVtVG9CYWNrcGFjayBhZGRJdGVtVG9Vbmlmb3JtIGFkZEl0ZW1Ub1Zlc3QgYWRkTGl2ZVN0YXRzICcgK1xuICAgICAgICAnYWRkTWFnYXppbmUgYWRkTWFnYXppbmVBbW1vQ2FyZ28gYWRkTWFnYXppbmVDYXJnbyBhZGRNYWdhemluZUNhcmdvR2xvYmFsIGFkZE1hZ2F6aW5lR2xvYmFsICcgK1xuICAgICAgICAnYWRkTWFnYXppbmVQb29sIGFkZE1hZ2F6aW5lcyBhZGRNYWdhemluZVR1cnJldCBhZGRNZW51IGFkZE1lbnVJdGVtIGFkZE1pc3Npb25FdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdhZGRNUEV2ZW50SGFuZGxlciBhZGRNdXNpY0V2ZW50SGFuZGxlciBhZGRPd25lZE1pbmUgYWRkUGxheWVyU2NvcmVzIGFkZFByaW1hcnlXZWFwb25JdGVtICcgK1xuICAgICAgICAnYWRkUHVibGljVmFyaWFibGVFdmVudEhhbmRsZXIgYWRkUmF0aW5nIGFkZFJlc291cmNlcyBhZGRTY29yZSBhZGRTY29yZVNpZGUgYWRkU2Vjb25kYXJ5V2VhcG9uSXRlbSAnICtcbiAgICAgICAgJ2FkZFN3aXRjaGFibGVVbml0IGFkZFRlYW1NZW1iZXIgYWRkVG9SZW1haW5zQ29sbGVjdG9yIGFkZFRvcnF1ZSBhZGRVbmlmb3JtIGFkZFZlaGljbGUgYWRkVmVzdCAnICtcbiAgICAgICAgJ2FkZFdheXBvaW50IGFkZFdlYXBvbiBhZGRXZWFwb25DYXJnbyBhZGRXZWFwb25DYXJnb0dsb2JhbCBhZGRXZWFwb25HbG9iYWwgYWRkV2VhcG9uSXRlbSAnICtcbiAgICAgICAgJ2FkZFdlYXBvblBvb2wgYWRkV2VhcG9uVHVycmV0IGFkbWluIGFnZW50IGFnZW50cyBBR0xUb0FTTCBhaW1lZEF0VGFyZ2V0IGFpbVBvcyBhaXJEZW5zaXR5UlREICcgK1xuICAgICAgICAnYWlycGxhbmVUaHJvdHRsZSBhaXJwb3J0U2lkZSBBSVNGaW5pc2hIZWFsIGFsaXZlIGFsbDNERU5FbnRpdGllcyBhbGxBaXJwb3J0cyBhbGxDb250cm9scyAnICtcbiAgICAgICAgJ2FsbEN1cmF0b3JzIGFsbEN1dExheWVycyBhbGxEZWFkIGFsbERlYWRNZW4gYWxsRGlzcGxheXMgYWxsR3JvdXBzIGFsbE1hcE1hcmtlcnMgYWxsTWluZXMgJyArXG4gICAgICAgICdhbGxNaXNzaW9uT2JqZWN0cyBhbGxvdzNETW9kZSBhbGxvd0NyZXdJbkltbW9iaWxlIGFsbG93Q3VyYXRvckxvZ2ljSWdub3JlQXJlYXMgYWxsb3dEYW1hZ2UgJyArXG4gICAgICAgICdhbGxvd0RhbW1hZ2UgYWxsb3dGaWxlT3BlcmF0aW9ucyBhbGxvd0ZsZWVpbmcgYWxsb3dHZXRJbiBhbGxvd1NwcmludCBhbGxQbGF5ZXJzIGFsbFNpbXBsZU9iamVjdHMgJyArXG4gICAgICAgICdhbGxTaXRlcyBhbGxUdXJyZXRzIGFsbFVuaXRzIGFsbFVuaXRzVUFWIGFsbFZhcmlhYmxlcyBhbW1vIGFtbW9PblB5bG9uIGFuZCBhbmltYXRlIGFuaW1hdGVCYXkgJyArXG4gICAgICAgICdhbmltYXRlRG9vciBhbmltYXRlUHlsb24gYW5pbWF0ZVNvdXJjZSBhbmltYXRpb25OYW1lcyBhbmltYXRpb25QaGFzZSBhbmltYXRpb25Tb3VyY2VQaGFzZSAnICtcbiAgICAgICAgJ2FuaW1hdGlvblN0YXRlIGFwcGVuZCBhcHBseSBhcm1vcnlQb2ludHMgYXJyYXlJbnRlcnNlY3QgYXNpbiBBU0xUb0FHTCBBU0xUb0FUTCBhc3NlcnQgJyArXG4gICAgICAgICdhc3NpZ25Bc0NhcmdvIGFzc2lnbkFzQ2FyZ29JbmRleCBhc3NpZ25Bc0NvbW1hbmRlciBhc3NpZ25Bc0RyaXZlciBhc3NpZ25Bc0d1bm5lciBhc3NpZ25Bc1R1cnJldCAnICtcbiAgICAgICAgJ2Fzc2lnbkN1cmF0b3IgYXNzaWduZWRDYXJnbyBhc3NpZ25lZENvbW1hbmRlciBhc3NpZ25lZERyaXZlciBhc3NpZ25lZEd1bm5lciBhc3NpZ25lZEl0ZW1zICcgK1xuICAgICAgICAnYXNzaWduZWRUYXJnZXQgYXNzaWduZWRUZWFtIGFzc2lnbmVkVmVoaWNsZSBhc3NpZ25lZFZlaGljbGVSb2xlIGFzc2lnbkl0ZW0gYXNzaWduVGVhbSAnICtcbiAgICAgICAgJ2Fzc2lnblRvQWlycG9ydCBhdGFuIGF0YW4yIGF0ZyBBVExUb0FTTCBhdHRhY2hlZE9iamVjdCBhdHRhY2hlZE9iamVjdHMgYXR0YWNoZWRUbyBhdHRhY2hPYmplY3QgJyArXG4gICAgICAgICdhdHRhY2hUbyBhdHRhY2tFbmFibGVkIGJhY2twYWNrIGJhY2twYWNrQ2FyZ28gYmFja3BhY2tDb250YWluZXIgYmFja3BhY2tJdGVtcyBiYWNrcGFja01hZ2F6aW5lcyAnICtcbiAgICAgICAgJ2JhY2twYWNrU3BhY2VGb3IgYmVoYXZpb3VyIGJlbmNobWFyayBiaW5vY3VsYXIgYm91bmRpbmdCb3ggYm91bmRpbmdCb3hSZWFsIGJvdW5kaW5nQ2VudGVyICcgK1xuICAgICAgICAnYnJlYWtPdXQgYnJlYWtUbyBicmllZmluZ05hbWUgYnVpbGRpbmdFeGl0IGJ1aWxkaW5nUG9zIGJ1dHRvbkFjdGlvbiBidXR0b25TZXRBY3Rpb24gY2FkZXRNb2RlICcgK1xuICAgICAgICAnY2FsbCBjYWxsRXh0ZW5zaW9uIGNhbUNvbW1hbmQgY2FtQ29tbWl0IGNhbUNvbW1pdFByZXBhcmVkIGNhbUNvbW1pdHRlZCBjYW1Db25zdHVjdGlvblNldFBhcmFtcyAnICtcbiAgICAgICAgJ2NhbUNyZWF0ZSBjYW1EZXN0cm95IGNhbWVyYUVmZmVjdCBjYW1lcmFFZmZlY3RFbmFibGVIVUQgY2FtZXJhSW50ZXJlc3QgY2FtZXJhT24gY2FtZXJhVmlldyAnICtcbiAgICAgICAgJ2NhbXBhaWduQ29uZmlnRmlsZSBjYW1QcmVsb2FkIGNhbVByZWxvYWRlZCBjYW1QcmVwYXJlQmFuayBjYW1QcmVwYXJlRGlyIGNhbVByZXBhcmVEaXZlICcgK1xuICAgICAgICAnY2FtUHJlcGFyZUZvY3VzIGNhbVByZXBhcmVGb3YgY2FtUHJlcGFyZUZvdlJhbmdlIGNhbVByZXBhcmVQb3MgY2FtUHJlcGFyZVJlbFBvcyBjYW1QcmVwYXJlVGFyZ2V0ICcgK1xuICAgICAgICAnY2FtU2V0QmFuayBjYW1TZXREaXIgY2FtU2V0RGl2ZSBjYW1TZXRGb2N1cyBjYW1TZXRGb3YgY2FtU2V0Rm92UmFuZ2UgY2FtU2V0UG9zIGNhbVNldFJlbFBvcyAnICtcbiAgICAgICAgJ2NhbVNldFRhcmdldCBjYW1UYXJnZXQgY2FtVXNlTlZHIGNhbkFkZCBjYW5BZGRJdGVtVG9CYWNrcGFjayBjYW5BZGRJdGVtVG9Vbmlmb3JtIGNhbkFkZEl0ZW1Ub1Zlc3QgJyArXG4gICAgICAgICdjYW5jZWxTaW1wbGVUYXNrRGVzdGluYXRpb24gY2FuRmlyZSBjYW5Nb3ZlIGNhblNsaW5nTG9hZCBjYW5TdGFuZCBjYW5TdXNwZW5kICcgK1xuICAgICAgICAnY2FuVHJpZ2dlckR5bmFtaWNTaW11bGF0aW9uIGNhblVubG9hZEluQ29tYmF0IGNhblZlaGljbGVDYXJnbyBjYXB0aXZlIGNhcHRpdmVOdW0gY2JDaGVja2VkICcgK1xuICAgICAgICAnY2JTZXRDaGVja2VkIGNlaWwgY2hhbm5lbEVuYWJsZWQgY2hlYXRzRW5hYmxlZCBjaGVja0FJRmVhdHVyZSBjaGVja1Zpc2liaWxpdHkgY2xhc3NOYW1lICcgK1xuICAgICAgICAnY2xlYXJBbGxJdGVtc0Zyb21CYWNrcGFjayBjbGVhckJhY2twYWNrQ2FyZ28gY2xlYXJCYWNrcGFja0NhcmdvR2xvYmFsIGNsZWFyR3JvdXBJY29ucyAnICtcbiAgICAgICAgJ2NsZWFySXRlbUNhcmdvIGNsZWFySXRlbUNhcmdvR2xvYmFsIGNsZWFySXRlbVBvb2wgY2xlYXJNYWdhemluZUNhcmdvIGNsZWFyTWFnYXppbmVDYXJnb0dsb2JhbCAnICtcbiAgICAgICAgJ2NsZWFyTWFnYXppbmVQb29sIGNsZWFyT3ZlcmxheSBjbGVhclJhZGlvIGNsZWFyV2VhcG9uQ2FyZ28gY2xlYXJXZWFwb25DYXJnb0dsb2JhbCBjbGVhcldlYXBvblBvb2wgJyArXG4gICAgICAgICdjbGllbnRPd25lciBjbG9zZURpYWxvZyBjbG9zZURpc3BsYXkgY2xvc2VPdmVybGF5IGNvbGxhcHNlT2JqZWN0VHJlZSBjb2xsZWN0M0RFTkhpc3RvcnkgJyArXG4gICAgICAgICdjb2xsZWN0aXZlUlREIGNvbWJhdE1vZGUgY29tbWFuZEFydGlsbGVyeUZpcmUgY29tbWFuZENoYXQgY29tbWFuZGVyIGNvbW1hbmRGaXJlIGNvbW1hbmRGb2xsb3cgJyArXG4gICAgICAgICdjb21tYW5kRlNNIGNvbW1hbmRHZXRPdXQgY29tbWFuZGluZ01lbnUgY29tbWFuZE1vdmUgY29tbWFuZFJhZGlvIGNvbW1hbmRTdG9wICcgK1xuICAgICAgICAnY29tbWFuZFN1cHByZXNzaXZlRmlyZSBjb21tYW5kVGFyZ2V0IGNvbW1hbmRXYXRjaCBjb21tZW50IGNvbW1pdE92ZXJsYXkgY29tcGlsZSBjb21waWxlRmluYWwgJyArXG4gICAgICAgICdjb21wbGV0ZWRGU00gY29tcG9zZVRleHQgY29uZmlnQ2xhc3NlcyBjb25maWdGaWxlIGNvbmZpZ0hpZXJhcmNoeSBjb25maWdOYW1lIGNvbmZpZ1Byb3BlcnRpZXMgJyArXG4gICAgICAgICdjb25maWdTb3VyY2VBZGRvbkxpc3QgY29uZmlnU291cmNlTW9kIGNvbmZpZ1NvdXJjZU1vZExpc3QgY29uZmlybVNlbnNvclRhcmdldCAnICtcbiAgICAgICAgJ2Nvbm5lY3RUZXJtaW5hbFRvVUFWIGNvbnRyb2xzR3JvdXBDdHJsIGNvcHlGcm9tQ2xpcGJvYXJkIGNvcHlUb0NsaXBib2FyZCBjb3B5V2F5cG9pbnRzIGNvcyBjb3VudCAnICtcbiAgICAgICAgJ2NvdW50RW5lbXkgY291bnRGcmllbmRseSBjb3VudFNpZGUgY291bnRUeXBlIGNvdW50VW5rbm93biBjcmVhdGUzREVOQ29tcG9zaXRpb24gY3JlYXRlM0RFTkVudGl0eSAnICtcbiAgICAgICAgJ2NyZWF0ZUFnZW50IGNyZWF0ZUNlbnRlciBjcmVhdGVEaWFsb2cgY3JlYXRlRGlhcnlMaW5rIGNyZWF0ZURpYXJ5UmVjb3JkIGNyZWF0ZURpYXJ5U3ViamVjdCAnICtcbiAgICAgICAgJ2NyZWF0ZURpc3BsYXkgY3JlYXRlR2VhckRpYWxvZyBjcmVhdGVHcm91cCBjcmVhdGVHdWFyZGVkUG9pbnQgY3JlYXRlTG9jYXRpb24gY3JlYXRlTWFya2VyICcgK1xuICAgICAgICAnY3JlYXRlTWFya2VyTG9jYWwgY3JlYXRlTWVudSBjcmVhdGVNaW5lIGNyZWF0ZU1pc3Npb25EaXNwbGF5IGNyZWF0ZU1QQ2FtcGFpZ25EaXNwbGF5ICcgK1xuICAgICAgICAnY3JlYXRlU2ltcGxlT2JqZWN0IGNyZWF0ZVNpbXBsZVRhc2sgY3JlYXRlU2l0ZSBjcmVhdGVTb3VuZFNvdXJjZSBjcmVhdGVUYXNrIGNyZWF0ZVRlYW0gJyArXG4gICAgICAgICdjcmVhdGVUcmlnZ2VyIGNyZWF0ZVVuaXQgY3JlYXRlVmVoaWNsZSBjcmVhdGVWZWhpY2xlQ3JldyBjcmVhdGVWZWhpY2xlTG9jYWwgY3JldyBjdEFkZEhlYWRlciAnICtcbiAgICAgICAgJ2N0QWRkUm93IGN0Q2xlYXIgY3RDdXJTZWwgY3REYXRhIGN0RmluZEhlYWRlclJvd3MgY3RGaW5kUm93SGVhZGVyIGN0SGVhZGVyQ29udHJvbHMgY3RIZWFkZXJDb3VudCAnICtcbiAgICAgICAgJ2N0UmVtb3ZlSGVhZGVycyBjdFJlbW92ZVJvd3MgY3RybEFjdGl2YXRlIGN0cmxBZGRFdmVudEhhbmRsZXIgY3RybEFuZ2xlIGN0cmxBdXRvU2Nyb2xsRGVsYXkgJyArXG4gICAgICAgICdjdHJsQXV0b1Njcm9sbFJld2luZCBjdHJsQXV0b1Njcm9sbFNwZWVkIGN0cmxDaGVja2VkIGN0cmxDbGFzc05hbWUgY3RybENvbW1pdCBjdHJsQ29tbWl0dGVkICcgK1xuICAgICAgICAnY3RybENyZWF0ZSBjdHJsRGVsZXRlIGN0cmxFbmFibGUgY3RybEVuYWJsZWQgY3RybEZhZGUgY3RybEhUTUxMb2FkZWQgY3RybElEQyBjdHJsSUREICcgK1xuICAgICAgICAnY3RybE1hcEFuaW1BZGQgY3RybE1hcEFuaW1DbGVhciBjdHJsTWFwQW5pbUNvbW1pdCBjdHJsTWFwQW5pbURvbmUgY3RybE1hcEN1cnNvciBjdHJsTWFwTW91c2VPdmVyICcgK1xuICAgICAgICAnY3RybE1hcFNjYWxlIGN0cmxNYXBTY3JlZW5Ub1dvcmxkIGN0cmxNYXBXb3JsZFRvU2NyZWVuIGN0cmxNb2RlbCBjdHJsTW9kZWxEaXJBbmRVcCBjdHJsTW9kZWxTY2FsZSAnICtcbiAgICAgICAgJ2N0cmxQYXJlbnQgY3RybFBhcmVudENvbnRyb2xzR3JvdXAgY3RybFBvc2l0aW9uIGN0cmxSZW1vdmVBbGxFdmVudEhhbmRsZXJzIGN0cmxSZW1vdmVFdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdjdHJsU2NhbGUgY3RybFNldEFjdGl2ZUNvbG9yIGN0cmxTZXRBbmdsZSBjdHJsU2V0QXV0b1Njcm9sbERlbGF5IGN0cmxTZXRBdXRvU2Nyb2xsUmV3aW5kICcgK1xuICAgICAgICAnY3RybFNldEF1dG9TY3JvbGxTcGVlZCBjdHJsU2V0QmFja2dyb3VuZENvbG9yIGN0cmxTZXRDaGVja2VkIGN0cmxTZXRFdmVudEhhbmRsZXIgY3RybFNldEZhZGUgJyArXG4gICAgICAgICdjdHJsU2V0Rm9jdXMgY3RybFNldEZvbnQgY3RybFNldEZvbnRIMSBjdHJsU2V0Rm9udEgxQiBjdHJsU2V0Rm9udEgyIGN0cmxTZXRGb250SDJCIGN0cmxTZXRGb250SDMgJyArXG4gICAgICAgICdjdHJsU2V0Rm9udEgzQiBjdHJsU2V0Rm9udEg0IGN0cmxTZXRGb250SDRCIGN0cmxTZXRGb250SDUgY3RybFNldEZvbnRINUIgY3RybFNldEZvbnRINiAnICtcbiAgICAgICAgJ2N0cmxTZXRGb250SDZCIGN0cmxTZXRGb250SGVpZ2h0IGN0cmxTZXRGb250SGVpZ2h0SDEgY3RybFNldEZvbnRIZWlnaHRIMiBjdHJsU2V0Rm9udEhlaWdodEgzICcgK1xuICAgICAgICAnY3RybFNldEZvbnRIZWlnaHRINCBjdHJsU2V0Rm9udEhlaWdodEg1IGN0cmxTZXRGb250SGVpZ2h0SDYgY3RybFNldEZvbnRIZWlnaHRTZWNvbmRhcnkgJyArXG4gICAgICAgICdjdHJsU2V0Rm9udFAgY3RybFNldEZvbnRQQiBjdHJsU2V0Rm9udFNlY29uZGFyeSBjdHJsU2V0Rm9yZWdyb3VuZENvbG9yIGN0cmxTZXRNb2RlbCAnICtcbiAgICAgICAgJ2N0cmxTZXRNb2RlbERpckFuZFVwIGN0cmxTZXRNb2RlbFNjYWxlIGN0cmxTZXRQaXhlbFByZWNpc2lvbiBjdHJsU2V0UG9zaXRpb24gY3RybFNldFNjYWxlICcgK1xuICAgICAgICAnY3RybFNldFN0cnVjdHVyZWRUZXh0IGN0cmxTZXRUZXh0IGN0cmxTZXRUZXh0Q29sb3IgY3RybFNldFRvb2x0aXAgY3RybFNldFRvb2x0aXBDb2xvckJveCAnICtcbiAgICAgICAgJ2N0cmxTZXRUb29sdGlwQ29sb3JTaGFkZSBjdHJsU2V0VG9vbHRpcENvbG9yVGV4dCBjdHJsU2hvdyBjdHJsU2hvd24gY3RybFRleHQgY3RybFRleHRIZWlnaHQgJyArXG4gICAgICAgICdjdHJsVGV4dFdpZHRoIGN0cmxUeXBlIGN0cmxWaXNpYmxlIGN0Um93Q29udHJvbHMgY3RSb3dDb3VudCBjdFNldEN1clNlbCBjdFNldERhdGEgJyArXG4gICAgICAgICdjdFNldEhlYWRlclRlbXBsYXRlIGN0U2V0Um93VGVtcGxhdGUgY3RTZXRWYWx1ZSBjdFZhbHVlIGN1cmF0b3JBZGRvbnMgY3VyYXRvckNhbWVyYSAnICtcbiAgICAgICAgJ2N1cmF0b3JDYW1lcmFBcmVhIGN1cmF0b3JDYW1lcmFBcmVhQ2VpbGluZyBjdXJhdG9yQ29lZiBjdXJhdG9yRWRpdGFibGVPYmplY3RzIGN1cmF0b3JFZGl0aW5nQXJlYSAnICtcbiAgICAgICAgJ2N1cmF0b3JFZGl0aW5nQXJlYVR5cGUgY3VyYXRvck1vdXNlT3ZlciBjdXJhdG9yUG9pbnRzIGN1cmF0b3JSZWdpc3RlcmVkT2JqZWN0cyBjdXJhdG9yU2VsZWN0ZWQgJyArXG4gICAgICAgICdjdXJhdG9yV2F5cG9pbnRDb3N0IGN1cnJlbnQzREVOT3BlcmF0aW9uIGN1cnJlbnRDaGFubmVsIGN1cnJlbnRDb21tYW5kIGN1cnJlbnRNYWdhemluZSAnICtcbiAgICAgICAgJ2N1cnJlbnRNYWdhemluZURldGFpbCBjdXJyZW50TWFnYXppbmVEZXRhaWxUdXJyZXQgY3VycmVudE1hZ2F6aW5lVHVycmV0IGN1cnJlbnRNdXp6bGUgJyArXG4gICAgICAgICdjdXJyZW50TmFtZXNwYWNlIGN1cnJlbnRUYXNrIGN1cnJlbnRUYXNrcyBjdXJyZW50VGhyb3dhYmxlIGN1cnJlbnRWaXNpb25Nb2RlIGN1cnJlbnRXYXlwb2ludCAnICtcbiAgICAgICAgJ2N1cnJlbnRXZWFwb24gY3VycmVudFdlYXBvbk1vZGUgY3VycmVudFdlYXBvblR1cnJldCBjdXJyZW50WmVyb2luZyBjdXJzb3JPYmplY3QgY3Vyc29yVGFyZ2V0ICcgK1xuICAgICAgICAnY3VzdG9tQ2hhdCBjdXN0b21SYWRpbyBjdXRGYWRlT3V0IGN1dE9iaiBjdXRSc2MgY3V0VGV4dCBkYW1hZ2UgZGF0ZSBkYXRlVG9OdW1iZXIgZGF5dGltZSAnICtcbiAgICAgICAgJ2RlQWN0aXZhdGVLZXkgZGVicmllZmluZ1RleHQgZGVidWdGU00gZGVidWdMb2cgZGVnIGRlbGV0ZTNERU5FbnRpdGllcyBkZWxldGVBdCBkZWxldGVDZW50ZXIgJyArXG4gICAgICAgICdkZWxldGVDb2xsZWN0aW9uIGRlbGV0ZUVkaXRvck9iamVjdCBkZWxldGVHcm91cCBkZWxldGVHcm91cFdoZW5FbXB0eSBkZWxldGVJZGVudGl0eSAnICtcbiAgICAgICAgJ2RlbGV0ZUxvY2F0aW9uIGRlbGV0ZU1hcmtlciBkZWxldGVNYXJrZXJMb2NhbCBkZWxldGVSYW5nZSBkZWxldGVSZXNvdXJjZXMgZGVsZXRlU2l0ZSBkZWxldGVTdGF0dXMgJyArXG4gICAgICAgICdkZWxldGVUZWFtIGRlbGV0ZVZlaGljbGUgZGVsZXRlVmVoaWNsZUNyZXcgZGVsZXRlV2F5cG9pbnQgZGV0YWNoIGRldGVjdGVkTWluZXMgJyArXG4gICAgICAgICdkaWFnX2FjdGl2ZU1pc3Npb25GU01zIGRpYWdfYWN0aXZlU2NyaXB0cyBkaWFnX2FjdGl2ZVNRRlNjcmlwdHMgZGlhZ19hY3RpdmVTUVNTY3JpcHRzICcgK1xuICAgICAgICAnZGlhZ19jYXB0dXJlRnJhbWUgZGlhZ19jYXB0dXJlRnJhbWVUb0ZpbGUgZGlhZ19jYXB0dXJlU2xvd0ZyYW1lIGRpYWdfY29kZVBlcmZvcm1hbmNlICcgK1xuICAgICAgICAnZGlhZ19kcmF3TW9kZSBkaWFnX2VuYWJsZSBkaWFnX2VuYWJsZWQgZGlhZ19mcHMgZGlhZ19mcHNNaW4gZGlhZ19mcmFtZU5vIGRpYWdfbGlnaHROZXdMb2FkICcgK1xuICAgICAgICAnZGlhZ19saXN0IGRpYWdfbG9nIGRpYWdfbG9nU2xvd0ZyYW1lIGRpYWdfbWVyZ2VDb25maWdGaWxlIGRpYWdfcmVjb3JkVHVycmV0TGltaXRzICcgK1xuICAgICAgICAnZGlhZ19zZXRMaWdodE5ldyBkaWFnX3RpY2tUaW1lIGRpYWdfdG9nZ2xlIGRpYWxvZyBkaWFyeVN1YmplY3RFeGlzdHMgZGlkSklQIGRpZEpJUE93bmVyICcgK1xuICAgICAgICAnZGlmZmljdWx0eSBkaWZmaWN1bHR5RW5hYmxlZCBkaWZmaWN1bHR5RW5hYmxlZFJURCBkaWZmaWN1bHR5T3B0aW9uIGRpcmVjdGlvbiBkaXJlY3RTYXkgZGlzYWJsZUFJICcgK1xuICAgICAgICAnZGlzYWJsZUNvbGxpc2lvbldpdGggZGlzYWJsZUNvbnZlcnNhdGlvbiBkaXNhYmxlRGVicmllZmluZ1N0YXRzIGRpc2FibGVNYXBJbmRpY2F0b3JzICcgK1xuICAgICAgICAnZGlzYWJsZU5WR0VxdWlwbWVudCBkaXNhYmxlUmVtb3RlU2Vuc29ycyBkaXNhYmxlU2VyaWFsaXphdGlvbiBkaXNhYmxlVElFcXVpcG1lbnQgJyArXG4gICAgICAgICdkaXNhYmxlVUFWQ29ubmVjdGFiaWxpdHkgZGlzYWJsZVVzZXJJbnB1dCBkaXNwbGF5QWRkRXZlbnRIYW5kbGVyIGRpc3BsYXlDdHJsIGRpc3BsYXlQYXJlbnQgJyArXG4gICAgICAgICdkaXNwbGF5UmVtb3ZlQWxsRXZlbnRIYW5kbGVycyBkaXNwbGF5UmVtb3ZlRXZlbnRIYW5kbGVyIGRpc3BsYXlTZXRFdmVudEhhbmRsZXIgZGlzc29sdmVUZWFtICcgK1xuICAgICAgICAnZGlzdGFuY2UgZGlzdGFuY2UyRCBkaXN0YW5jZVNxciBkaXN0cmlidXRpb25SZWdpb24gZG8zREVOQWN0aW9uIGRvQXJ0aWxsZXJ5RmlyZSBkb0ZpcmUgZG9Gb2xsb3cgJyArXG4gICAgICAgICdkb0ZTTSBkb0dldE91dCBkb01vdmUgZG9vclBoYXNlIGRvU3RvcCBkb1N1cHByZXNzaXZlRmlyZSBkb1RhcmdldCBkb1dhdGNoIGRyYXdBcnJvdyBkcmF3RWxsaXBzZSAnICtcbiAgICAgICAgJ2RyYXdJY29uIGRyYXdJY29uM0QgZHJhd0xpbmUgZHJhd0xpbmUzRCBkcmF3TGluayBkcmF3TG9jYXRpb24gZHJhd1BvbHlnb24gZHJhd1JlY3RhbmdsZSAnICtcbiAgICAgICAgJ2RyYXdUcmlhbmdsZSBkcml2ZXIgZHJvcCBkeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlIGR5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2VDb2VmICcgK1xuICAgICAgICAnZHluYW1pY1NpbXVsYXRpb25FbmFibGVkIGR5bmFtaWNTaW11bGF0aW9uU3lzdGVtRW5hYmxlZCBlY2hvIGVkaXQzREVOTWlzc2lvbkF0dHJpYnV0ZXMgZWRpdE9iamVjdCAnICtcbiAgICAgICAgJ2VkaXRvclNldEV2ZW50SGFuZGxlciBlZmZlY3RpdmVDb21tYW5kZXIgZW1wdHlQb3NpdGlvbnMgZW5hYmxlQUkgZW5hYmxlQUlGZWF0dXJlICcgK1xuICAgICAgICAnZW5hYmxlQWltUHJlY2lzaW9uIGVuYWJsZUF0dGFjayBlbmFibGVBdWRpb0ZlYXR1cmUgZW5hYmxlQXV0b1N0YXJ0VXBSVEQgZW5hYmxlQXV0b1RyaW1SVEQgJyArXG4gICAgICAgICdlbmFibGVDYW1TaGFrZSBlbmFibGVDYXVzdGljcyBlbmFibGVDaGFubmVsIGVuYWJsZUNvbGxpc2lvbldpdGggZW5hYmxlQ29waWxvdCAnICtcbiAgICAgICAgJ2VuYWJsZURlYnJpZWZpbmdTdGF0cyBlbmFibGVEaWFnTGVnZW5kIGVuYWJsZUR5bmFtaWNTaW11bGF0aW9uIGVuYWJsZUR5bmFtaWNTaW11bGF0aW9uU3lzdGVtICcgK1xuICAgICAgICAnZW5hYmxlRW5kRGlhbG9nIGVuYWJsZUVuZ2luZUFydGlsbGVyeSBlbmFibGVFbnZpcm9ubWVudCBlbmFibGVGYXRpZ3VlIGVuYWJsZUd1bkxpZ2h0cyAnICtcbiAgICAgICAgJ2VuYWJsZUluZm9QYW5lbENvbXBvbmVudCBlbmFibGVJUkxhc2VycyBlbmFibGVNaW1pY3MgZW5hYmxlUGVyc29uVHVycmV0IGVuYWJsZVJhZGlvIGVuYWJsZVJlbG9hZCAnICtcbiAgICAgICAgJ2VuYWJsZVJvcGVBdHRhY2ggZW5hYmxlU2F0Tm9ybWFsT25EZXRhaWwgZW5hYmxlU2F2aW5nIGVuYWJsZVNlbnRlbmNlcyBlbmFibGVTaW11bGF0aW9uICcgK1xuICAgICAgICAnZW5hYmxlU2ltdWxhdGlvbkdsb2JhbCBlbmFibGVTdGFtaW5hIGVuYWJsZVRlYW1Td2l0Y2ggZW5hYmxlVHJhZmZpYyBlbmFibGVVQVZDb25uZWN0YWJpbGl0eSAnICtcbiAgICAgICAgJ2VuYWJsZVVBVldheXBvaW50cyBlbmFibGVWZWhpY2xlQ2FyZ28gZW5hYmxlVmVoaWNsZVNlbnNvciBlbmFibGVXZWFwb25EaXNhc3NlbWJseSAnICtcbiAgICAgICAgJ2VuZExvYWRpbmdTY3JlZW4gZW5kTWlzc2lvbiBlbmdpbmVPbiBlbmdpbmVzSXNPblJURCBlbmdpbmVzUnBtUlREIGVuZ2luZXNUb3JxdWVSVEQgZW50aXRpZXMgJyArXG4gICAgICAgICdlbnZpcm9ubWVudEVuYWJsZWQgZXN0aW1hdGVkRW5kU2VydmVyVGltZSBlc3RpbWF0ZWRUaW1lTGVmdCBldmFsT2JqZWN0QXJndW1lbnQgZXZlcnlCYWNrcGFjayAnICtcbiAgICAgICAgJ2V2ZXJ5Q29udGFpbmVyIGV4ZWMgZXhlY0VkaXRvclNjcmlwdCBleGVjRlNNIGV4ZWNWTSBleHAgZXhwZWN0ZWREZXN0aW5hdGlvbiBleHBvcnRKSVBNZXNzYWdlcyAnICtcbiAgICAgICAgJ2V5ZURpcmVjdGlvbiBleWVQb3MgZmFjZSBmYWN0aW9uIGZhZGVNdXNpYyBmYWRlUmFkaW8gZmFkZVNvdW5kIGZhZGVTcGVlY2ggZmFpbE1pc3Npb24gJyArXG4gICAgICAgICdmaWxsV2VhcG9uc0Zyb21Qb29sIGZpbmQgZmluZENvdmVyIGZpbmREaXNwbGF5IGZpbmRFZGl0b3JPYmplY3QgZmluZEVtcHR5UG9zaXRpb24gJyArXG4gICAgICAgICdmaW5kRW1wdHlQb3NpdGlvblJlYWR5IGZpbmRJZiBmaW5kTmVhcmVzdEVuZW15IGZpbmlzaE1pc3Npb25Jbml0IGZpbml0ZSBmaXJlIGZpcmVBdFRhcmdldCAnICtcbiAgICAgICAgJ2ZpcnN0QmFja3BhY2sgZmxhZyBmbGFnQW5pbWF0aW9uUGhhc2UgZmxhZ093bmVyIGZsYWdTaWRlIGZsYWdUZXh0dXJlIGZsZWVpbmcgZmxvb3IgZmx5SW5IZWlnaHQgJyArXG4gICAgICAgICdmbHlJbkhlaWdodEFTTCBmb2cgZm9nRm9yZWNhc3QgZm9nUGFyYW1zIGZvcmNlQWRkVW5pZm9ybSBmb3JjZWRNYXAgZm9yY2VFbmQgZm9yY2VGbGFnVGV4dHVyZSAnICtcbiAgICAgICAgJ2ZvcmNlRm9sbG93Um9hZCBmb3JjZU1hcCBmb3JjZVJlc3Bhd24gZm9yY2VTcGVlZCBmb3JjZVdhbGsgZm9yY2VXZWFwb25GaXJlIGZvcmNlV2VhdGhlckNoYW5nZSAnICtcbiAgICAgICAgJ2ZvckVhY2hNZW1iZXIgZm9yRWFjaE1lbWJlckFnZW50IGZvckVhY2hNZW1iZXJUZWFtIGZvcmdldFRhcmdldCBmb3JtYXQgZm9ybWF0aW9uICcgK1xuICAgICAgICAnZm9ybWF0aW9uRGlyZWN0aW9uIGZvcm1hdGlvbkxlYWRlciBmb3JtYXRpb25NZW1iZXJzIGZvcm1hdGlvblBvc2l0aW9uIGZvcm1hdGlvblRhc2sgZm9ybWF0VGV4dCAnICtcbiAgICAgICAgJ2Zvcm1MZWFkZXIgZnJlZUxvb2sgZnJvbUVkaXRvciBmdWVsIGZ1bGxDcmV3IGdlYXJJRENBbW1vQ291bnQgZ2VhclNsb3RBbW1vQ291bnQgZ2VhclNsb3REYXRhICcgK1xuICAgICAgICAnZ2V0M0RFTkFjdGlvblN0YXRlIGdldDNERU5BdHRyaWJ1dGUgZ2V0M0RFTkNhbWVyYSBnZXQzREVOQ29ubmVjdGlvbnMgZ2V0M0RFTkVudGl0eSAnICtcbiAgICAgICAgJ2dldDNERU5FbnRpdHlJRCBnZXQzREVOR3JpZCBnZXQzREVOSWNvbnNWaXNpYmxlIGdldDNERU5MYXllckVudGl0aWVzIGdldDNERU5MaW5lc1Zpc2libGUgJyArXG4gICAgICAgICdnZXQzREVOTWlzc2lvbkF0dHJpYnV0ZSBnZXQzREVOTW91c2VPdmVyIGdldDNERU5TZWxlY3RlZCBnZXRBaW1pbmdDb2VmIGdldEFsbEVudlNvdW5kQ29udHJvbGxlcnMgJyArXG4gICAgICAgICdnZXRBbGxIaXRQb2ludHNEYW1hZ2UgZ2V0QWxsT3duZWRNaW5lcyBnZXRBbGxTb3VuZENvbnRyb2xsZXJzIGdldEFtbW9DYXJnbyBnZXRBbmltQWltUHJlY2lzaW9uICcgK1xuICAgICAgICAnZ2V0QW5pbVNwZWVkQ29lZiBnZXRBcnJheSBnZXRBcnRpbGxlcnlBbW1vIGdldEFydGlsbGVyeUNvbXB1dGVyU2V0dGluZ3MgZ2V0QXJ0aWxsZXJ5RVRBICcgK1xuICAgICAgICAnZ2V0QXNzaWduZWRDdXJhdG9yTG9naWMgZ2V0QXNzaWduZWRDdXJhdG9yVW5pdCBnZXRCYWNrcGFja0NhcmdvIGdldEJsZWVkaW5nUmVtYWluaW5nICcgK1xuICAgICAgICAnZ2V0QnVybmluZ1ZhbHVlIGdldENhbWVyYVZpZXdEaXJlY3Rpb24gZ2V0Q2FyZ29JbmRleCBnZXRDZW50ZXJPZk1hc3MgZ2V0Q2xpZW50U3RhdGUgJyArXG4gICAgICAgICdnZXRDbGllbnRTdGF0ZU51bWJlciBnZXRDb21wYXRpYmxlUHlsb25NYWdhemluZXMgZ2V0Q29ubmVjdGVkVUFWIGdldENvbnRhaW5lck1heExvYWQgJyArXG4gICAgICAgICdnZXRDdXJzb3JPYmplY3RQYXJhbXMgZ2V0Q3VzdG9tQWltQ29lZiBnZXREYW1tYWdlIGdldERlc2NyaXB0aW9uIGdldERpciBnZXREaXJWaXN1YWwgJyArXG4gICAgICAgICdnZXRETENBc3NldHNVc2FnZSBnZXRETENBc3NldHNVc2FnZUJ5TmFtZSBnZXRETENzIGdldEVkaXRvckNhbWVyYSBnZXRFZGl0b3JNb2RlICcgK1xuICAgICAgICAnZ2V0RWRpdG9yT2JqZWN0U2NvcGUgZ2V0RWxldmF0aW9uT2Zmc2V0IGdldEVudlNvdW5kQ29udHJvbGxlciBnZXRGYXRpZ3VlIGdldEZvcmNlZEZsYWdUZXh0dXJlICcgK1xuICAgICAgICAnZ2V0RnJpZW5kIGdldEZTTVZhcmlhYmxlIGdldEZ1ZWxDYXJnbyBnZXRHcm91cEljb24gZ2V0R3JvdXBJY29uUGFyYW1zIGdldEdyb3VwSWNvbnMgZ2V0SGlkZUZyb20gJyArXG4gICAgICAgICdnZXRIaXQgZ2V0SGl0SW5kZXggZ2V0SGl0UG9pbnREYW1hZ2UgZ2V0SXRlbUNhcmdvIGdldE1hZ2F6aW5lQ2FyZ28gZ2V0TWFya2VyQ29sb3IgZ2V0TWFya2VyUG9zICcgK1xuICAgICAgICAnZ2V0TWFya2VyU2l6ZSBnZXRNYXJrZXJUeXBlIGdldE1hc3MgZ2V0TWlzc2lvbkNvbmZpZyBnZXRNaXNzaW9uQ29uZmlnVmFsdWUgZ2V0TWlzc2lvbkRMQ3MgJyArXG4gICAgICAgICdnZXRNaXNzaW9uTGF5ZXJFbnRpdGllcyBnZXRNb2RlbEluZm8gZ2V0TW91c2VQb3NpdGlvbiBnZXRNdXNpY1BsYXllZFRpbWUgZ2V0TnVtYmVyICcgK1xuICAgICAgICAnZ2V0T2JqZWN0QXJndW1lbnQgZ2V0T2JqZWN0Q2hpbGRyZW4gZ2V0T2JqZWN0RExDIGdldE9iamVjdE1hdGVyaWFscyBnZXRPYmplY3RQcm94eSAnICtcbiAgICAgICAgJ2dldE9iamVjdFRleHR1cmVzIGdldE9iamVjdFR5cGUgZ2V0T2JqZWN0Vmlld0Rpc3RhbmNlIGdldE94eWdlblJlbWFpbmluZyBnZXRQZXJzb25Vc2VkRExDcyAnICtcbiAgICAgICAgJ2dldFBpbG90Q2FtZXJhRGlyZWN0aW9uIGdldFBpbG90Q2FtZXJhUG9zaXRpb24gZ2V0UGlsb3RDYW1lcmFSb3RhdGlvbiBnZXRQaWxvdENhbWVyYVRhcmdldCAnICtcbiAgICAgICAgJ2dldFBsYXRlTnVtYmVyIGdldFBsYXllckNoYW5uZWwgZ2V0UGxheWVyU2NvcmVzIGdldFBsYXllclVJRCBnZXRQb3MgZ2V0UG9zQVNMIGdldFBvc0FTTFZpc3VhbCAnICtcbiAgICAgICAgJ2dldFBvc0FTTFcgZ2V0UG9zQVRMIGdldFBvc0FUTFZpc3VhbCBnZXRQb3NWaXN1YWwgZ2V0UG9zV29ybGQgZ2V0UHlsb25NYWdhemluZXMgZ2V0UmVsRGlyICcgK1xuICAgICAgICAnZ2V0UmVsUG9zIGdldFJlbW90ZVNlbnNvcnNEaXNhYmxlZCBnZXRSZXBhaXJDYXJnbyBnZXRSZXNvbHV0aW9uIGdldFNoYWRvd0Rpc3RhbmNlIGdldFNob3RQYXJlbnRzICcgK1xuICAgICAgICAnZ2V0U2xpbmdMb2FkIGdldFNvdW5kQ29udHJvbGxlciBnZXRTb3VuZENvbnRyb2xsZXJSZXN1bHQgZ2V0U3BlZWQgZ2V0U3RhbWluYSBnZXRTdGF0VmFsdWUgJyArXG4gICAgICAgICdnZXRTdXBwcmVzc2lvbiBnZXRUZXJyYWluR3JpZCBnZXRUZXJyYWluSGVpZ2h0QVNMIGdldFRleHQgZ2V0VG90YWxETENVc2FnZVRpbWUgZ2V0VW5pdExvYWRvdXQgJyArXG4gICAgICAgICdnZXRVbml0VHJhaXQgZ2V0VXNlck1GRFRleHQgZ2V0VXNlck1GRHZhbHVlIGdldFZhcmlhYmxlIGdldFZlaGljbGVDYXJnbyBnZXRXZWFwb25DYXJnbyAnICtcbiAgICAgICAgJ2dldFdlYXBvblN3YXkgZ2V0V2luZ3NPcmllbnRhdGlvblJURCBnZXRXaW5nc1Bvc2l0aW9uUlREIGdldFdQUG9zIGdsYW5jZUF0IGdsb2JhbENoYXQgZ2xvYmFsUmFkaW8gJyArXG4gICAgICAgICdnb2dnbGVzIGdvdG8gZ3JvdXAgZ3JvdXBDaGF0IGdyb3VwRnJvbU5ldElkIGdyb3VwSWNvblNlbGVjdGFibGUgZ3JvdXBJY29uc1Zpc2libGUgZ3JvdXBJZCAnICtcbiAgICAgICAgJ2dyb3VwT3duZXIgZ3JvdXBSYWRpbyBncm91cFNlbGVjdGVkVW5pdHMgZ3JvdXBTZWxlY3RVbml0IGd1bm5lciBndXN0cyBoYWx0IGhhbmRndW5JdGVtcyAnICtcbiAgICAgICAgJ2hhbmRndW5NYWdhemluZSBoYW5kZ3VuV2VhcG9uIGhhbmRzSGl0IGhhc0ludGVyZmFjZSBoYXNQaWxvdENhbWVyYSBoYXNXZWFwb24gaGNBbGxHcm91cHMgJyArXG4gICAgICAgICdoY0dyb3VwUGFyYW1zIGhjTGVhZGVyIGhjUmVtb3ZlQWxsR3JvdXBzIGhjUmVtb3ZlR3JvdXAgaGNTZWxlY3RlZCBoY1NlbGVjdEdyb3VwIGhjU2V0R3JvdXAgJyArXG4gICAgICAgICdoY1Nob3dCYXIgaGNTaG93bkJhciBoZWFkZ2VhciBoaWRlQm9keSBoaWRlT2JqZWN0IGhpZGVPYmplY3RHbG9iYWwgaGlkZVNlbGVjdGlvbiBoaW50IGhpbnRDICcgK1xuICAgICAgICAnaGludENhZGV0IGhpbnRTaWxlbnQgaG1kIGhvc3RNaXNzaW9uIGh0bWxMb2FkIEhVRE1vdmVtZW50TGV2ZWxzIGh1bWlkaXR5IGltYWdlIGltcG9ydEFsbEdyb3VwcyAnICtcbiAgICAgICAgJ2ltcG9ydGFuY2UgaW4gaW5BcmVhIGluQXJlYUFycmF5IGluY2FwYWNpdGF0ZWRTdGF0ZSBpbmZsYW1lIGluZmxhbWVkIGluZm9QYW5lbCAnICtcbiAgICAgICAgJ2luZm9QYW5lbENvbXBvbmVudEVuYWJsZWQgaW5mb1BhbmVsQ29tcG9uZW50cyBpbmZvUGFuZWxzIGluR2FtZVVJU2V0RXZlbnRIYW5kbGVyIGluaGVyaXRzRnJvbSAnICtcbiAgICAgICAgJ2luaXRBbWJpZW50TGlmZSBpblBvbHlnb24gaW5wdXRBY3Rpb24gaW5SYW5nZU9mQXJ0aWxsZXJ5IGluc2VydEVkaXRvck9iamVjdCBpbnRlcnNlY3QgaXMzREVOICcgK1xuICAgICAgICAnaXMzREVOTXVsdGlwbGF5ZXIgaXNBYmxlVG9CcmVhdGhlIGlzQWdlbnQgaXNBcnJheSBpc0F1dG9Ib3Zlck9uIGlzQXV0b25vbW91cyBpc0F1dG90ZXN0ICcgK1xuICAgICAgICAnaXNCbGVlZGluZyBpc0J1cm5pbmcgaXNDbGFzcyBpc0NvbGxpc2lvbkxpZ2h0T24gaXNDb3BpbG90RW5hYmxlZCBpc0RhbWFnZUFsbG93ZWQgaXNEZWRpY2F0ZWQgJyArXG4gICAgICAgICdpc0RMQ0F2YWlsYWJsZSBpc0VuZ2luZU9uIGlzRXF1YWxUbyBpc0VxdWFsVHlwZSBpc0VxdWFsVHlwZUFsbCBpc0VxdWFsVHlwZUFueSBpc0VxdWFsVHlwZUFycmF5ICcgK1xuICAgICAgICAnaXNFcXVhbFR5cGVQYXJhbXMgaXNGaWxlUGF0Y2hpbmdFbmFibGVkIGlzRmxhc2hsaWdodE9uIGlzRmxhdEVtcHR5IGlzRm9yY2VkV2FsayBpc0Zvcm1hdGlvbkxlYWRlciAnICtcbiAgICAgICAgJ2lzR3JvdXBEZWxldGVkV2hlbkVtcHR5IGlzSGlkZGVuIGlzSW5SZW1haW5zQ29sbGVjdG9yIGlzSW5zdHJ1Y3RvckZpZ3VyZUVuYWJsZWQgaXNJUkxhc2VyT24gJyArXG4gICAgICAgICdpc0tleUFjdGl2ZSBpc0tpbmRPZiBpc0xhc2VyT24gaXNMaWdodE9uIGlzTG9jYWxpemVkIGlzTWFudWFsRmlyZSBpc01hcmtlZEZvckNvbGxlY3Rpb24gJyArXG4gICAgICAgICdpc011bHRpcGxheWVyIGlzTXVsdGlwbGF5ZXJTb2xvIGlzTmlsIGlzTnVsbCBpc051bWJlciBpc09iamVjdEhpZGRlbiBpc09iamVjdFJURCBpc09uUm9hZCAnICtcbiAgICAgICAgJ2lzUGlwRW5hYmxlZCBpc1BsYXllciBpc1JlYWxUaW1lIGlzUmVtb3RlRXhlY3V0ZWQgaXNSZW1vdGVFeGVjdXRlZEpJUCBpc1NlcnZlciBpc1Nob3dpbmczREljb25zICcgK1xuICAgICAgICAnaXNTaW1wbGVPYmplY3QgaXNTcHJpbnRBbGxvd2VkIGlzU3RhbWluYUVuYWJsZWQgaXNTdGVhbU1pc3Npb24gaXNTdHJlYW1GcmllbmRseVVJRW5hYmxlZCBpc1RleHQgJyArXG4gICAgICAgICdpc1RvdWNoaW5nR3JvdW5kIGlzVHVybmVkT3V0IGlzVHV0SGludHNFbmFibGVkIGlzVUFWQ29ubmVjdGFibGUgaXNVQVZDb25uZWN0ZWQgaXNVSUNvbnRleHQgJyArXG4gICAgICAgICdpc1VuaWZvcm1BbGxvd2VkIGlzVmVoaWNsZUNhcmdvIGlzVmVoaWNsZVJhZGFyT24gaXNWZWhpY2xlU2Vuc29yRW5hYmxlZCBpc1dhbGtpbmcgJyArXG4gICAgICAgICdpc1dlYXBvbkRlcGxveWVkIGlzV2VhcG9uUmVzdGVkIGl0ZW1DYXJnbyBpdGVtcyBpdGVtc1dpdGhNYWdhemluZXMgam9pbiBqb2luQXMgam9pbkFzU2lsZW50ICcgK1xuICAgICAgICAnam9pblNpbGVudCBqb2luU3RyaW5nIGtiQWRkRGF0YWJhc2Uga2JBZGREYXRhYmFzZVRhcmdldHMga2JBZGRUb3BpYyBrYkhhc1RvcGljIGtiUmVhY3QgJyArXG4gICAgICAgICdrYlJlbW92ZVRvcGljIGtiVGVsbCBrYldhc1NhaWQga2V5SW1hZ2Uga2V5TmFtZSBrbm93c0Fib3V0IGxhbmQgbGFuZEF0IGxhbmRSZXN1bHQgbGFuZ3VhZ2UgJyArXG4gICAgICAgICdsYXNlclRhcmdldCBsYkFkZCBsYkNsZWFyIGxiQ29sb3IgbGJDb2xvclJpZ2h0IGxiQ3VyU2VsIGxiRGF0YSBsYkRlbGV0ZSBsYklzU2VsZWN0ZWQgbGJQaWN0dXJlICcgK1xuICAgICAgICAnbGJQaWN0dXJlUmlnaHQgbGJTZWxlY3Rpb24gbGJTZXRDb2xvciBsYlNldENvbG9yUmlnaHQgbGJTZXRDdXJTZWwgbGJTZXREYXRhIGxiU2V0UGljdHVyZSAnICtcbiAgICAgICAgJ2xiU2V0UGljdHVyZUNvbG9yIGxiU2V0UGljdHVyZUNvbG9yRGlzYWJsZWQgbGJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCBsYlNldFBpY3R1cmVSaWdodCAnICtcbiAgICAgICAgJ2xiU2V0UGljdHVyZVJpZ2h0Q29sb3IgbGJTZXRQaWN0dXJlUmlnaHRDb2xvckRpc2FibGVkIGxiU2V0UGljdHVyZVJpZ2h0Q29sb3JTZWxlY3RlZCAnICtcbiAgICAgICAgJ2xiU2V0U2VsZWN0Q29sb3IgbGJTZXRTZWxlY3RDb2xvclJpZ2h0IGxiU2V0U2VsZWN0ZWQgbGJTZXRUZXh0IGxiU2V0VGV4dFJpZ2h0IGxiU2V0VG9vbHRpcCAnICtcbiAgICAgICAgJ2xiU2V0VmFsdWUgbGJTaXplIGxiU29ydCBsYlNvcnRCeVZhbHVlIGxiVGV4dCBsYlRleHRSaWdodCBsYlZhbHVlIGxlYWRlciBsZWFkZXJib2FyZERlSW5pdCAnICtcbiAgICAgICAgJ2xlYWRlcmJvYXJkR2V0Um93cyBsZWFkZXJib2FyZEluaXQgbGVhZGVyYm9hcmRSZXF1ZXN0Um93c0ZyaWVuZHMgbGVhZGVyYm9hcmRzUmVxdWVzdFVwbG9hZFNjb3JlICcgK1xuICAgICAgICAnbGVhZGVyYm9hcmRzUmVxdWVzdFVwbG9hZFNjb3JlS2VlcEJlc3QgbGVhZGVyYm9hcmRTdGF0ZSBsZWF2ZVZlaGljbGUgbGlicmFyeUNyZWRpdHMgJyArXG4gICAgICAgICdsaWJyYXJ5RGlzY2xhaW1lcnMgbGlmZVN0YXRlIGxpZ2h0QXR0YWNoT2JqZWN0IGxpZ2h0RGV0YWNoT2JqZWN0IGxpZ2h0SXNPbiBsaWdodG5pbmdzIGxpbWl0U3BlZWQgJyArXG4gICAgICAgICdsaW5lYXJDb252ZXJzaW9uIGxpbmVJbnRlcnNlY3RzIGxpbmVJbnRlcnNlY3RzT2JqcyBsaW5lSW50ZXJzZWN0c1N1cmZhY2VzIGxpbmVJbnRlcnNlY3RzV2l0aCAnICtcbiAgICAgICAgJ2xpbmtJdGVtIGxpc3QgbGlzdE9iamVjdHMgbGlzdFJlbW90ZVRhcmdldHMgbGlzdFZlaGljbGVTZW5zb3JzIGxuIGxuYkFkZEFycmF5IGxuYkFkZENvbHVtbiAnICtcbiAgICAgICAgJ2xuYkFkZFJvdyBsbmJDbGVhciBsbmJDb2xvciBsbmJDdXJTZWxSb3cgbG5iRGF0YSBsbmJEZWxldGVDb2x1bW4gbG5iRGVsZXRlUm93ICcgK1xuICAgICAgICAnbG5iR2V0Q29sdW1uc1Bvc2l0aW9uIGxuYlBpY3R1cmUgbG5iU2V0Q29sb3IgbG5iU2V0Q29sdW1uc1BvcyBsbmJTZXRDdXJTZWxSb3cgbG5iU2V0RGF0YSAnICtcbiAgICAgICAgJ2xuYlNldFBpY3R1cmUgbG5iU2V0VGV4dCBsbmJTZXRWYWx1ZSBsbmJTaXplIGxuYlNvcnQgbG5iU29ydEJ5VmFsdWUgbG5iVGV4dCBsbmJWYWx1ZSBsb2FkIGxvYWRBYnMgJyArXG4gICAgICAgICdsb2FkQmFja3BhY2sgbG9hZEZpbGUgbG9hZEdhbWUgbG9hZElkZW50aXR5IGxvYWRNYWdhemluZSBsb2FkT3ZlcmxheSBsb2FkU3RhdHVzIGxvYWRVbmlmb3JtICcgK1xuICAgICAgICAnbG9hZFZlc3QgbG9jYWwgbG9jYWxpemUgbG9jYXRpb25Qb3NpdGlvbiBsb2NrIGxvY2tDYW1lcmFUbyBsb2NrQ2FyZ28gbG9ja0RyaXZlciBsb2NrZWQgJyArXG4gICAgICAgICdsb2NrZWRDYXJnbyBsb2NrZWREcml2ZXIgbG9ja2VkVHVycmV0IGxvY2tJZGVudGl0eSBsb2NrVHVycmV0IGxvY2tXUCBsb2cgbG9nRW50aXRpZXMgbG9nTmV0d29yayAnICtcbiAgICAgICAgJ2xvZ05ldHdvcmtUZXJtaW5hdGUgbG9va0F0IGxvb2tBdFBvcyBtYWdhemluZUNhcmdvIG1hZ2F6aW5lcyBtYWdhemluZXNBbGxUdXJyZXRzIG1hZ2F6aW5lc0FtbW8gJyArXG4gICAgICAgICdtYWdhemluZXNBbW1vQ2FyZ28gbWFnYXppbmVzQW1tb0Z1bGwgbWFnYXppbmVzRGV0YWlsIG1hZ2F6aW5lc0RldGFpbEJhY2twYWNrICcgK1xuICAgICAgICAnbWFnYXppbmVzRGV0YWlsVW5pZm9ybSBtYWdhemluZXNEZXRhaWxWZXN0IG1hZ2F6aW5lc1R1cnJldCBtYWdhemluZVR1cnJldEFtbW8gbWFwQW5pbUFkZCAnICtcbiAgICAgICAgJ21hcEFuaW1DbGVhciBtYXBBbmltQ29tbWl0IG1hcEFuaW1Eb25lIG1hcENlbnRlck9uQ2FtZXJhIG1hcEdyaWRQb3NpdGlvbiBtYXJrQXNGaW5pc2hlZE9uU3RlYW0gJyArXG4gICAgICAgICdtYXJrZXJBbHBoYSBtYXJrZXJCcnVzaCBtYXJrZXJDb2xvciBtYXJrZXJEaXIgbWFya2VyUG9zIG1hcmtlclNoYXBlIG1hcmtlclNpemUgbWFya2VyVGV4dCAnICtcbiAgICAgICAgJ21hcmtlclR5cGUgbWF4IG1lbWJlcnMgbWVudUFjdGlvbiBtZW51QWRkIG1lbnVDaGVja2VkIG1lbnVDbGVhciBtZW51Q29sbGFwc2UgbWVudURhdGEgbWVudURlbGV0ZSAnICtcbiAgICAgICAgJ21lbnVFbmFibGUgbWVudUVuYWJsZWQgbWVudUV4cGFuZCBtZW51SG92ZXIgbWVudVBpY3R1cmUgbWVudVNldEFjdGlvbiBtZW51U2V0Q2hlY2sgbWVudVNldERhdGEgJyArXG4gICAgICAgICdtZW51U2V0UGljdHVyZSBtZW51U2V0VmFsdWUgbWVudVNob3J0Y3V0IG1lbnVTaG9ydGN1dFRleHQgbWVudVNpemUgbWVudVNvcnQgbWVudVRleHQgbWVudVVSTCAnICtcbiAgICAgICAgJ21lbnVWYWx1ZSBtaW4gbWluZUFjdGl2ZSBtaW5lRGV0ZWN0ZWRCeSBtaXNzaW9uQ29uZmlnRmlsZSBtaXNzaW9uRGlmZmljdWx0eSBtaXNzaW9uTmFtZSAnICtcbiAgICAgICAgJ21pc3Npb25OYW1lc3BhY2UgbWlzc2lvblN0YXJ0IG1pc3Npb25WZXJzaW9uIG1vZCBtb2RlbFRvV29ybGQgbW9kZWxUb1dvcmxkVmlzdWFsICcgK1xuICAgICAgICAnbW9kZWxUb1dvcmxkVmlzdWFsV29ybGQgbW9kZWxUb1dvcmxkV29ybGQgbW9kUGFyYW1zIG1vb25JbnRlbnNpdHkgbW9vblBoYXNlIG1vcmFsZSBtb3ZlICcgK1xuICAgICAgICAnbW92ZTNERU5DYW1lcmEgbW92ZUluQW55IG1vdmVJbkNhcmdvIG1vdmVJbkNvbW1hbmRlciBtb3ZlSW5Ecml2ZXIgbW92ZUluR3VubmVyIG1vdmVJblR1cnJldCAnICtcbiAgICAgICAgJ21vdmVPYmplY3RUb0VuZCBtb3ZlT3V0IG1vdmVUaW1lIG1vdmVUbyBtb3ZlVG9Db21wbGV0ZWQgbW92ZVRvRmFpbGVkIG11c2ljVm9sdW1lIG5hbWUgbmFtZVNvdW5kICcgK1xuICAgICAgICAnbmVhckVudGl0aWVzIG5lYXJlc3RCdWlsZGluZyBuZWFyZXN0TG9jYXRpb24gbmVhcmVzdExvY2F0aW9ucyBuZWFyZXN0TG9jYXRpb25XaXRoRHViYmluZyAnICtcbiAgICAgICAgJ25lYXJlc3RPYmplY3QgbmVhcmVzdE9iamVjdHMgbmVhcmVzdFRlcnJhaW5PYmplY3RzIG5lYXJPYmplY3RzIG5lYXJPYmplY3RzUmVhZHkgbmVhclJvYWRzICcgK1xuICAgICAgICAnbmVhclN1cHBsaWVzIG5lYXJUYXJnZXRzIG5lZWRSZWxvYWQgbmV0SWQgbmV0T2JqTnVsbCBuZXdPdmVybGF5IG5leHRNZW51SXRlbUluZGV4ICcgK1xuICAgICAgICAnbmV4dFdlYXRoZXJDaGFuZ2Ugbk1lbnVJdGVtcyBub3QgbnVtYmVyT2ZFbmdpbmVzUlREIG51bWJlclRvRGF0ZSBvYmplY3RDdXJhdG9ycyBvYmplY3RGcm9tTmV0SWQgJyArXG4gICAgICAgICdvYmplY3RQYXJlbnQgb2JqU3RhdHVzIG9uQnJpZWZpbmdHcm91cCBvbkJyaWVmaW5nTm90ZXMgb25CcmllZmluZ1BsYW4gb25CcmllZmluZ1RlYW1Td2l0Y2ggJyArXG4gICAgICAgICdvbkNvbW1hbmRNb2RlQ2hhbmdlZCBvbkRvdWJsZUNsaWNrIG9uRWFjaEZyYW1lIG9uR3JvdXBJY29uQ2xpY2sgb25Hcm91cEljb25PdmVyRW50ZXIgJyArXG4gICAgICAgICdvbkdyb3VwSWNvbk92ZXJMZWF2ZSBvbkhDR3JvdXBTZWxlY3Rpb25DaGFuZ2VkIG9uTWFwU2luZ2xlQ2xpY2sgb25QbGF5ZXJDb25uZWN0ZWQgJyArXG4gICAgICAgICdvblBsYXllckRpc2Nvbm5lY3RlZCBvblByZWxvYWRGaW5pc2hlZCBvblByZWxvYWRTdGFydGVkIG9uU2hvd05ld09iamVjdCBvblRlYW1Td2l0Y2ggJyArXG4gICAgICAgICdvcGVuQ3VyYXRvckludGVyZmFjZSBvcGVuRExDUGFnZSBvcGVuTWFwIG9wZW5TdGVhbUFwcCBvcGVuWW91dHViZVZpZGVvIG9yIG9yZGVyR2V0SW4gb3ZlcmNhc3QgJyArXG4gICAgICAgICdvdmVyY2FzdEZvcmVjYXN0IG93bmVyIHBhcmFtIHBhcmFtcyBwYXJzZU51bWJlciBwYXJzZVNpbXBsZUFycmF5IHBhcnNlVGV4dCBwYXJzaW5nTmFtZXNwYWNlICcgK1xuICAgICAgICAncGFydGljbGVzUXVhbGl0eSBwaWNrV2VhcG9uUG9vbCBwaXRjaCBwaXhlbEdyaWQgcGl4ZWxHcmlkQmFzZSBwaXhlbEdyaWROb1VJU2NhbGUgcGl4ZWxIIHBpeGVsVyAnICtcbiAgICAgICAgJ3BsYXlhYmxlU2xvdHNOdW1iZXIgcGxheWFibGVVbml0cyBwbGF5QWN0aW9uIHBsYXlBY3Rpb25Ob3cgcGxheWVyIHBsYXllclJlc3Bhd25UaW1lIHBsYXllclNpZGUgJyArXG4gICAgICAgICdwbGF5ZXJzTnVtYmVyIHBsYXlHZXN0dXJlIHBsYXlNaXNzaW9uIHBsYXlNb3ZlIHBsYXlNb3ZlTm93IHBsYXlNdXNpYyBwbGF5U2NyaXB0ZWRNaXNzaW9uICcgK1xuICAgICAgICAncGxheVNvdW5kIHBsYXlTb3VuZDNEIHBvc2l0aW9uIHBvc2l0aW9uQ2FtZXJhVG9Xb3JsZCBwb3NTY3JlZW5Ub1dvcmxkIHBvc1dvcmxkVG9TY3JlZW4gJyArXG4gICAgICAgICdwcEVmZmVjdEFkanVzdCBwcEVmZmVjdENvbW1pdCBwcEVmZmVjdENvbW1pdHRlZCBwcEVmZmVjdENyZWF0ZSBwcEVmZmVjdERlc3Ryb3kgcHBFZmZlY3RFbmFibGUgJyArXG4gICAgICAgICdwcEVmZmVjdEVuYWJsZWQgcHBFZmZlY3RGb3JjZUluTlZHIHByZWNpc2lvbiBwcmVsb2FkQ2FtZXJhIHByZWxvYWRPYmplY3QgcHJlbG9hZFNvdW5kICcgK1xuICAgICAgICAncHJlbG9hZFRpdGxlT2JqIHByZWxvYWRUaXRsZVJzYyBwcmVwcm9jZXNzRmlsZSBwcmVwcm9jZXNzRmlsZUxpbmVOdW1iZXJzIHByaW1hcnlXZWFwb24gJyArXG4gICAgICAgICdwcmltYXJ5V2VhcG9uSXRlbXMgcHJpbWFyeVdlYXBvbk1hZ2F6aW5lIHByaW9yaXR5IHByb2Nlc3NEaWFyeUxpbmsgcHJvZHVjdFZlcnNpb24gcHJvZmlsZU5hbWUgJyArXG4gICAgICAgICdwcm9maWxlTmFtZXNwYWNlIHByb2ZpbGVOYW1lU3RlYW0gcHJvZ3Jlc3NMb2FkaW5nU2NyZWVuIHByb2dyZXNzUG9zaXRpb24gcHJvZ3Jlc3NTZXRQb3NpdGlvbiAnICtcbiAgICAgICAgJ3B1YmxpY1ZhcmlhYmxlIHB1YmxpY1ZhcmlhYmxlQ2xpZW50IHB1YmxpY1ZhcmlhYmxlU2VydmVyIHB1c2hCYWNrIHB1c2hCYWNrVW5pcXVlIHB1dFdlYXBvblBvb2wgJyArXG4gICAgICAgICdxdWVyeUl0ZW1zUG9vbCBxdWVyeU1hZ2F6aW5lUG9vbCBxdWVyeVdlYXBvblBvb2wgcmFkIHJhZGlvQ2hhbm5lbEFkZCByYWRpb0NoYW5uZWxDcmVhdGUgJyArXG4gICAgICAgICdyYWRpb0NoYW5uZWxSZW1vdmUgcmFkaW9DaGFubmVsU2V0Q2FsbFNpZ24gcmFkaW9DaGFubmVsU2V0TGFiZWwgcmFkaW9Wb2x1bWUgcmFpbiByYWluYm93IHJhbmRvbSAnICtcbiAgICAgICAgJ3JhbmsgcmFua0lkIHJhdGluZyByZWN0YW5ndWxhciByZWdpc3RlcmVkVGFza3MgcmVnaXN0ZXJUYXNrIHJlbG9hZCByZWxvYWRFbmFibGVkIHJlbW90ZUNvbnRyb2wgJyArXG4gICAgICAgICdyZW1vdGVFeGVjIHJlbW90ZUV4ZWNDYWxsIHJlbW90ZUV4ZWN1dGVkT3duZXIgcmVtb3ZlM0RFTkNvbm5lY3Rpb24gcmVtb3ZlM0RFTkV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ3JlbW92ZTNERU5MYXllciByZW1vdmVBY3Rpb24gcmVtb3ZlQWxsM0RFTkV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsQWN0aW9ucyByZW1vdmVBbGxBc3NpZ25lZEl0ZW1zICcgK1xuICAgICAgICAncmVtb3ZlQWxsQ29udGFpbmVycyByZW1vdmVBbGxDdXJhdG9yQWRkb25zIHJlbW92ZUFsbEN1cmF0b3JDYW1lcmFBcmVhcyAnICtcbiAgICAgICAgJ3JlbW92ZUFsbEN1cmF0b3JFZGl0aW5nQXJlYXMgcmVtb3ZlQWxsRXZlbnRIYW5kbGVycyByZW1vdmVBbGxIYW5kZ3VuSXRlbXMgcmVtb3ZlQWxsSXRlbXMgJyArXG4gICAgICAgICdyZW1vdmVBbGxJdGVtc1dpdGhNYWdhemluZXMgcmVtb3ZlQWxsTWlzc2lvbkV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsTVBFdmVudEhhbmRsZXJzICcgK1xuICAgICAgICAncmVtb3ZlQWxsTXVzaWNFdmVudEhhbmRsZXJzIHJlbW92ZUFsbE93bmVkTWluZXMgcmVtb3ZlQWxsUHJpbWFyeVdlYXBvbkl0ZW1zIHJlbW92ZUFsbFdlYXBvbnMgJyArXG4gICAgICAgICdyZW1vdmVCYWNrcGFjayByZW1vdmVCYWNrcGFja0dsb2JhbCByZW1vdmVDdXJhdG9yQWRkb25zIHJlbW92ZUN1cmF0b3JDYW1lcmFBcmVhICcgK1xuICAgICAgICAncmVtb3ZlQ3VyYXRvckVkaXRhYmxlT2JqZWN0cyByZW1vdmVDdXJhdG9yRWRpdGluZ0FyZWEgcmVtb3ZlRHJhd0ljb24gcmVtb3ZlRHJhd0xpbmtzICcgK1xuICAgICAgICAncmVtb3ZlRXZlbnRIYW5kbGVyIHJlbW92ZUZyb21SZW1haW5zQ29sbGVjdG9yIHJlbW92ZUdvZ2dsZXMgcmVtb3ZlR3JvdXBJY29uIHJlbW92ZUhhbmRndW5JdGVtICcgK1xuICAgICAgICAncmVtb3ZlSGVhZGdlYXIgcmVtb3ZlSXRlbSByZW1vdmVJdGVtRnJvbUJhY2twYWNrIHJlbW92ZUl0ZW1Gcm9tVW5pZm9ybSByZW1vdmVJdGVtRnJvbVZlc3QgJyArXG4gICAgICAgICdyZW1vdmVJdGVtcyByZW1vdmVNYWdhemluZSByZW1vdmVNYWdhemluZUdsb2JhbCByZW1vdmVNYWdhemluZXMgcmVtb3ZlTWFnYXppbmVzVHVycmV0ICcgK1xuICAgICAgICAncmVtb3ZlTWFnYXppbmVUdXJyZXQgcmVtb3ZlTWVudUl0ZW0gcmVtb3ZlTWlzc2lvbkV2ZW50SGFuZGxlciByZW1vdmVNUEV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ3JlbW92ZU11c2ljRXZlbnRIYW5kbGVyIHJlbW92ZU93bmVkTWluZSByZW1vdmVQcmltYXJ5V2VhcG9uSXRlbSByZW1vdmVTZWNvbmRhcnlXZWFwb25JdGVtICcgK1xuICAgICAgICAncmVtb3ZlU2ltcGxlVGFzayByZW1vdmVTd2l0Y2hhYmxlVW5pdCByZW1vdmVUZWFtTWVtYmVyIHJlbW92ZVVuaWZvcm0gcmVtb3ZlVmVzdCByZW1vdmVXZWFwb24gJyArXG4gICAgICAgICdyZW1vdmVXZWFwb25BdHRhY2htZW50Q2FyZ28gcmVtb3ZlV2VhcG9uQ2FyZ28gcmVtb3ZlV2VhcG9uR2xvYmFsIHJlbW92ZVdlYXBvblR1cnJldCAnICtcbiAgICAgICAgJ3JlcG9ydFJlbW90ZVRhcmdldCByZXF1aXJlZFZlcnNpb24gcmVzZXRDYW1TaGFrZSByZXNldFN1Ymdyb3VwRGlyZWN0aW9uIHJlc2l6ZSByZXNvdXJjZXMgJyArXG4gICAgICAgICdyZXNwYXduVmVoaWNsZSByZXN0YXJ0RWRpdG9yQ2FtZXJhIHJldmVhbCByZXZlYWxNaW5lIHJldmVyc2UgcmV2ZXJzZWRNb3VzZVkgcm9hZEF0ICcgK1xuICAgICAgICAncm9hZHNDb25uZWN0ZWRUbyByb2xlRGVzY3JpcHRpb24gcm9wZUF0dGFjaGVkT2JqZWN0cyByb3BlQXR0YWNoZWRUbyByb3BlQXR0YWNoRW5hYmxlZCAnICtcbiAgICAgICAgJ3JvcGVBdHRhY2hUbyByb3BlQ3JlYXRlIHJvcGVDdXQgcm9wZURlc3Ryb3kgcm9wZURldGFjaCByb3BlRW5kUG9zaXRpb24gcm9wZUxlbmd0aCByb3BlcyAnICtcbiAgICAgICAgJ3JvcGVVbndpbmQgcm9wZVVud291bmQgcm90b3JzRm9yY2VzUlREIHJvdG9yc1JwbVJURCByb3VuZCBydW5Jbml0U2NyaXB0IHNhZmVab25lSCBzYWZlWm9uZVcgJyArXG4gICAgICAgICdzYWZlWm9uZVdBYnMgc2FmZVpvbmVYIHNhZmVab25lWEFicyBzYWZlWm9uZVkgc2F2ZTNERU5JbnZlbnRvcnkgc2F2ZUdhbWUgc2F2ZUlkZW50aXR5ICcgK1xuICAgICAgICAnc2F2ZUpveXN0aWNrcyBzYXZlT3ZlcmxheSBzYXZlUHJvZmlsZU5hbWVzcGFjZSBzYXZlU3RhdHVzIHNhdmVWYXIgc2F2aW5nRW5hYmxlZCBzYXkgc2F5MkQgc2F5M0QgJyArXG4gICAgICAgICdzY29wZU5hbWUgc2NvcmUgc2NvcmVTaWRlIHNjcmVlbnNob3Qgc2NyZWVuVG9Xb3JsZCBzY3JpcHREb25lIHNjcmlwdE5hbWUgc2N1ZFN0YXRlICcgK1xuICAgICAgICAnc2Vjb25kYXJ5V2VhcG9uIHNlY29uZGFyeVdlYXBvbkl0ZW1zIHNlY29uZGFyeVdlYXBvbk1hZ2F6aW5lIHNlbGVjdCBzZWxlY3RCZXN0UGxhY2VzICcgK1xuICAgICAgICAnc2VsZWN0RGlhcnlTdWJqZWN0IHNlbGVjdGVkRWRpdG9yT2JqZWN0cyBzZWxlY3RFZGl0b3JPYmplY3Qgc2VsZWN0aW9uTmFtZXMgc2VsZWN0aW9uUG9zaXRpb24gJyArXG4gICAgICAgICdzZWxlY3RMZWFkZXIgc2VsZWN0TWF4IHNlbGVjdE1pbiBzZWxlY3ROb1BsYXllciBzZWxlY3RQbGF5ZXIgc2VsZWN0UmFuZG9tIHNlbGVjdFJhbmRvbVdlaWdodGVkICcgK1xuICAgICAgICAnc2VsZWN0V2VhcG9uIHNlbGVjdFdlYXBvblR1cnJldCBzZW5kQVVNZXNzYWdlIHNlbmRTaW1wbGVDb21tYW5kIHNlbmRUYXNrIHNlbmRUYXNrUmVzdWx0ICcgK1xuICAgICAgICAnc2VuZFVEUE1lc3NhZ2Ugc2VydmVyQ29tbWFuZCBzZXJ2ZXJDb21tYW5kQXZhaWxhYmxlIHNlcnZlckNvbW1hbmRFeGVjdXRhYmxlIHNlcnZlck5hbWUgc2VydmVyVGltZSAnICtcbiAgICAgICAgJ3NldCBzZXQzREVOQXR0cmlidXRlIHNldDNERU5BdHRyaWJ1dGVzIHNldDNERU5HcmlkIHNldDNERU5JY29uc1Zpc2libGUgc2V0M0RFTkxheWVyICcgK1xuICAgICAgICAnc2V0M0RFTkxpbmVzVmlzaWJsZSBzZXQzREVOTG9naWNUeXBlIHNldDNERU5NaXNzaW9uQXR0cmlidXRlIHNldDNERU5NaXNzaW9uQXR0cmlidXRlcyAnICtcbiAgICAgICAgJ3NldDNERU5Nb2RlbHNWaXNpYmxlIHNldDNERU5PYmplY3RUeXBlIHNldDNERU5TZWxlY3RlZCBzZXRBY2NUaW1lIHNldEFjdHVhbENvbGxlY3RpdmVSVEQgJyArXG4gICAgICAgICdzZXRBaXJwbGFuZVRocm90dGxlIHNldEFpcnBvcnRTaWRlIHNldEFtbW8gc2V0QW1tb0NhcmdvIHNldEFtbW9PblB5bG9uIHNldEFuaW1TcGVlZENvZWYgJyArXG4gICAgICAgICdzZXRBcGVydHVyZSBzZXRBcGVydHVyZU5ldyBzZXRBcm1vcnlQb2ludHMgc2V0QXR0cmlidXRlcyBzZXRBdXRvbm9tb3VzIHNldEJlaGF2aW91ciAnICtcbiAgICAgICAgJ3NldEJsZWVkaW5nUmVtYWluaW5nIHNldEJyYWtlc1JURCBzZXRDYW1lcmFJbnRlcmVzdCBzZXRDYW1TaGFrZURlZlBhcmFtcyBzZXRDYW1TaGFrZVBhcmFtcyAnICtcbiAgICAgICAgJ3NldENhbVVzZVRJIHNldENhcHRpdmUgc2V0Q2VudGVyT2ZNYXNzIHNldENvbGxpc2lvbkxpZ2h0IHNldENvbWJhdE1vZGUgc2V0Q29tcGFzc09zY2lsbGF0aW9uICcgK1xuICAgICAgICAnc2V0Q29udm95U2VwYXJhdGlvbiBzZXRDdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmcgc2V0Q3VyYXRvckNvZWYgc2V0Q3VyYXRvckVkaXRpbmdBcmVhVHlwZSAnICtcbiAgICAgICAgJ3NldEN1cmF0b3JXYXlwb2ludENvc3Qgc2V0Q3VycmVudENoYW5uZWwgc2V0Q3VycmVudFRhc2sgc2V0Q3VycmVudFdheXBvaW50IHNldEN1c3RvbUFpbUNvZWYgJyArXG4gICAgICAgICdzZXRDdXN0b21XZWlnaHRSVEQgc2V0RGFtYWdlIHNldERhbW1hZ2Ugc2V0RGF0ZSBzZXREZWJyaWVmaW5nVGV4dCBzZXREZWZhdWx0Q2FtZXJhIHNldERlc3RpbmF0aW9uICcgK1xuICAgICAgICAnc2V0RGV0YWlsTWFwQmxlbmRQYXJzIHNldERpciBzZXREaXJlY3Rpb24gc2V0RHJhd0ljb24gc2V0RHJpdmVPblBhdGggc2V0RHJvcEludGVydmFsICcgK1xuICAgICAgICAnc2V0RHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZSBzZXREeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlQ29lZiBzZXRFZGl0b3JNb2RlIHNldEVkaXRvck9iamVjdFNjb3BlICcgK1xuICAgICAgICAnc2V0RWZmZWN0Q29uZGl0aW9uIHNldEVuZ2luZVJQTVJURCBzZXRGYWNlIHNldEZhY2VBbmltYXRpb24gc2V0RmF0aWd1ZSBzZXRGZWF0dXJlVHlwZSAnICtcbiAgICAgICAgJ3NldEZsYWdBbmltYXRpb25QaGFzZSBzZXRGbGFnT3duZXIgc2V0RmxhZ1NpZGUgc2V0RmxhZ1RleHR1cmUgc2V0Rm9nIHNldEZvcm1hdGlvbiAnICtcbiAgICAgICAgJ3NldEZvcm1hdGlvblRhc2sgc2V0Rm9ybURpciBzZXRGcmllbmQgc2V0RnJvbUVkaXRvciBzZXRGU01WYXJpYWJsZSBzZXRGdWVsIHNldEZ1ZWxDYXJnbyAnICtcbiAgICAgICAgJ3NldEdyb3VwSWNvbiBzZXRHcm91cEljb25QYXJhbXMgc2V0R3JvdXBJY29uc1NlbGVjdGFibGUgc2V0R3JvdXBJY29uc1Zpc2libGUgc2V0R3JvdXBJZCAnICtcbiAgICAgICAgJ3NldEdyb3VwSWRHbG9iYWwgc2V0R3JvdXBPd25lciBzZXRHdXN0cyBzZXRIaWRlQmVoaW5kIHNldEhpdCBzZXRIaXRJbmRleCBzZXRIaXRQb2ludERhbWFnZSAnICtcbiAgICAgICAgJ3NldEhvcml6b25QYXJhbGxheENvZWYgc2V0SFVETW92ZW1lbnRMZXZlbHMgc2V0SWRlbnRpdHkgc2V0SW1wb3J0YW5jZSBzZXRJbmZvUGFuZWwgc2V0TGVhZGVyICcgK1xuICAgICAgICAnc2V0TGlnaHRBbWJpZW50IHNldExpZ2h0QXR0ZW51YXRpb24gc2V0TGlnaHRCcmlnaHRuZXNzIHNldExpZ2h0Q29sb3Igc2V0TGlnaHREYXlMaWdodCAnICtcbiAgICAgICAgJ3NldExpZ2h0RmxhcmVNYXhEaXN0YW5jZSBzZXRMaWdodEZsYXJlU2l6ZSBzZXRMaWdodEludGVuc2l0eSBzZXRMaWdodG5pbmdzIHNldExpZ2h0VXNlRmxhcmUgJyArXG4gICAgICAgICdzZXRMb2NhbFdpbmRQYXJhbXMgc2V0TWFnYXppbmVUdXJyZXRBbW1vIHNldE1hcmtlckFscGhhIHNldE1hcmtlckFscGhhTG9jYWwgc2V0TWFya2VyQnJ1c2ggJyArXG4gICAgICAgICdzZXRNYXJrZXJCcnVzaExvY2FsIHNldE1hcmtlckNvbG9yIHNldE1hcmtlckNvbG9yTG9jYWwgc2V0TWFya2VyRGlyIHNldE1hcmtlckRpckxvY2FsICcgK1xuICAgICAgICAnc2V0TWFya2VyUG9zIHNldE1hcmtlclBvc0xvY2FsIHNldE1hcmtlclNoYXBlIHNldE1hcmtlclNoYXBlTG9jYWwgc2V0TWFya2VyU2l6ZSAnICtcbiAgICAgICAgJ3NldE1hcmtlclNpemVMb2NhbCBzZXRNYXJrZXJUZXh0IHNldE1hcmtlclRleHRMb2NhbCBzZXRNYXJrZXJUeXBlIHNldE1hcmtlclR5cGVMb2NhbCBzZXRNYXNzICcgK1xuICAgICAgICAnc2V0TWltaWMgc2V0TW91c2VQb3NpdGlvbiBzZXRNdXNpY0VmZmVjdCBzZXRNdXNpY0V2ZW50SGFuZGxlciBzZXROYW1lIHNldE5hbWVTb3VuZCAnICtcbiAgICAgICAgJ3NldE9iamVjdEFyZ3VtZW50cyBzZXRPYmplY3RNYXRlcmlhbCBzZXRPYmplY3RNYXRlcmlhbEdsb2JhbCBzZXRPYmplY3RQcm94eSBzZXRPYmplY3RUZXh0dXJlICcgK1xuICAgICAgICAnc2V0T2JqZWN0VGV4dHVyZUdsb2JhbCBzZXRPYmplY3RWaWV3RGlzdGFuY2Ugc2V0T3ZlcmNhc3Qgc2V0T3duZXIgc2V0T3h5Z2VuUmVtYWluaW5nICcgK1xuICAgICAgICAnc2V0UGFydGljbGVDaXJjbGUgc2V0UGFydGljbGVDbGFzcyBzZXRQYXJ0aWNsZUZpcmUgc2V0UGFydGljbGVQYXJhbXMgc2V0UGFydGljbGVSYW5kb20gJyArXG4gICAgICAgICdzZXRQaWxvdENhbWVyYURpcmVjdGlvbiBzZXRQaWxvdENhbWVyYVJvdGF0aW9uIHNldFBpbG90Q2FtZXJhVGFyZ2V0IHNldFBpbG90TGlnaHQgc2V0UGlQRWZmZWN0ICcgK1xuICAgICAgICAnc2V0UGl0Y2ggc2V0UGxhdGVOdW1iZXIgc2V0UGxheWFibGUgc2V0UGxheWVyUmVzcGF3blRpbWUgc2V0UG9zIHNldFBvc0FTTCBzZXRQb3NBU0wyIHNldFBvc0FTTFcgJyArXG4gICAgICAgICdzZXRQb3NBVEwgc2V0UG9zaXRpb24gc2V0UG9zV29ybGQgc2V0UHlsb25Mb2FkT3V0IHNldFB5bG9uc1ByaW9yaXR5IHNldFJhZGlvTXNnIHNldFJhaW4gJyArXG4gICAgICAgICdzZXRSYWluYm93IHNldFJhbmRvbUxpcCBzZXRSYW5rIHNldFJlY3Rhbmd1bGFyIHNldFJlcGFpckNhcmdvIHNldFJvdG9yQnJha2VSVEQgc2V0U2hhZG93RGlzdGFuY2UgJyArXG4gICAgICAgICdzZXRTaG90UGFyZW50cyBzZXRTaWRlIHNldFNpbXBsZVRhc2tBbHdheXNWaXNpYmxlIHNldFNpbXBsZVRhc2tDdXN0b21EYXRhICcgK1xuICAgICAgICAnc2V0U2ltcGxlVGFza0Rlc2NyaXB0aW9uIHNldFNpbXBsZVRhc2tEZXN0aW5hdGlvbiBzZXRTaW1wbGVUYXNrVGFyZ2V0IHNldFNpbXBsZVRhc2tUeXBlICcgK1xuICAgICAgICAnc2V0U2ltdWxXZWF0aGVyTGF5ZXJzIHNldFNpemUgc2V0U2tpbGwgc2V0U2xpbmdMb2FkIHNldFNvdW5kRWZmZWN0IHNldFNwZWFrZXIgc2V0U3BlZWNoICcgK1xuICAgICAgICAnc2V0U3BlZWRNb2RlIHNldFN0YW1pbmEgc2V0U3RhbWluYVNjaGVtZSBzZXRTdGF0VmFsdWUgc2V0U3VwcHJlc3Npb24gc2V0U3lzdGVtT2ZVbml0cyAnICtcbiAgICAgICAgJ3NldFRhcmdldEFnZSBzZXRUYXNrTWFya2VyT2Zmc2V0IHNldFRhc2tSZXN1bHQgc2V0VGFza1N0YXRlIHNldFRlcnJhaW5HcmlkIHNldFRleHQgJyArXG4gICAgICAgICdzZXRUaW1lTXVsdGlwbGllciBzZXRUaXRsZUVmZmVjdCBzZXRUcmFmZmljRGVuc2l0eSBzZXRUcmFmZmljRGlzdGFuY2Ugc2V0VHJhZmZpY0dhcCAnICtcbiAgICAgICAgJ3NldFRyYWZmaWNTcGVlZCBzZXRUcmlnZ2VyQWN0aXZhdGlvbiBzZXRUcmlnZ2VyQXJlYSBzZXRUcmlnZ2VyU3RhdGVtZW50cyBzZXRUcmlnZ2VyVGV4dCAnICtcbiAgICAgICAgJ3NldFRyaWdnZXJUaW1lb3V0IHNldFRyaWdnZXJUeXBlIHNldFR5cGUgc2V0VW5jb25zY2lvdXMgc2V0VW5pdEFiaWxpdHkgc2V0VW5pdExvYWRvdXQgc2V0VW5pdFBvcyAnICtcbiAgICAgICAgJ3NldFVuaXRQb3NXZWFrIHNldFVuaXRSYW5rIHNldFVuaXRSZWNvaWxDb2VmZmljaWVudCBzZXRVbml0VHJhaXQgc2V0VW5sb2FkSW5Db21iYXQgJyArXG4gICAgICAgICdzZXRVc2VyQWN0aW9uVGV4dCBzZXRVc2VyTUZEVGV4dCBzZXRVc2VyTUZEdmFsdWUgc2V0VmFyaWFibGUgc2V0VmVjdG9yRGlyIHNldFZlY3RvckRpckFuZFVwICcgK1xuICAgICAgICAnc2V0VmVjdG9yVXAgc2V0VmVoaWNsZUFtbW8gc2V0VmVoaWNsZUFtbW9EZWYgc2V0VmVoaWNsZUFybW9yIHNldFZlaGljbGVDYXJnbyBzZXRWZWhpY2xlSWQgJyArXG4gICAgICAgICdzZXRWZWhpY2xlTG9jayBzZXRWZWhpY2xlUG9zaXRpb24gc2V0VmVoaWNsZVJhZGFyIHNldFZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0cyAnICtcbiAgICAgICAgJ3NldFZlaGljbGVSZXBvcnRPd25Qb3NpdGlvbiBzZXRWZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0cyBzZXRWZWhpY2xlVElQYXJzIHNldFZlaGljbGVWYXJOYW1lICcgK1xuICAgICAgICAnc2V0VmVsb2NpdHkgc2V0VmVsb2NpdHlNb2RlbFNwYWNlIHNldFZlbG9jaXR5VHJhbnNmb3JtYXRpb24gc2V0Vmlld0Rpc3RhbmNlICcgK1xuICAgICAgICAnc2V0VmlzaWJsZUlmVHJlZUNvbGxhcHNlZCBzZXRXYW50ZWRSUE1SVEQgc2V0V2F2ZXMgc2V0V2F5cG9pbnRCZWhhdmlvdXIgc2V0V2F5cG9pbnRDb21iYXRNb2RlICcgK1xuICAgICAgICAnc2V0V2F5cG9pbnRDb21wbGV0aW9uUmFkaXVzIHNldFdheXBvaW50RGVzY3JpcHRpb24gc2V0V2F5cG9pbnRGb3JjZUJlaGF2aW91ciBzZXRXYXlwb2ludEZvcm1hdGlvbiAnICtcbiAgICAgICAgJ3NldFdheXBvaW50SG91c2VQb3NpdGlvbiBzZXRXYXlwb2ludExvaXRlclJhZGl1cyBzZXRXYXlwb2ludExvaXRlclR5cGUgc2V0V2F5cG9pbnROYW1lICcgK1xuICAgICAgICAnc2V0V2F5cG9pbnRQb3NpdGlvbiBzZXRXYXlwb2ludFNjcmlwdCBzZXRXYXlwb2ludFNwZWVkIHNldFdheXBvaW50U3RhdGVtZW50cyBzZXRXYXlwb2ludFRpbWVvdXQgJyArXG4gICAgICAgICdzZXRXYXlwb2ludFR5cGUgc2V0V2F5cG9pbnRWaXNpYmxlIHNldFdlYXBvblJlbG9hZGluZ1RpbWUgc2V0V2luZCBzZXRXaW5kRGlyIHNldFdpbmRGb3JjZSAnICtcbiAgICAgICAgJ3NldFdpbmRTdHIgc2V0V2luZ0ZvcmNlU2NhbGVSVEQgc2V0V1BQb3Mgc2hvdzNESWNvbnMgc2hvd0NoYXQgc2hvd0NpbmVtYUJvcmRlciBzaG93Q29tbWFuZGluZ01lbnUgJyArXG4gICAgICAgICdzaG93Q29tcGFzcyBzaG93Q3VyYXRvckNvbXBhc3Mgc2hvd0dQUyBzaG93SFVEIHNob3dMZWdlbmQgc2hvd01hcCBzaG93bkFydGlsbGVyeUNvbXB1dGVyICcgK1xuICAgICAgICAnc2hvd25DaGF0IHNob3duQ29tcGFzcyBzaG93bkN1cmF0b3JDb21wYXNzIHNob3dOZXdFZGl0b3JPYmplY3Qgc2hvd25HUFMgc2hvd25IVUQgc2hvd25NYXAgJyArXG4gICAgICAgICdzaG93blBhZCBzaG93blJhZGlvIHNob3duU2NvcmV0YWJsZSBzaG93blVBVkZlZWQgc2hvd25XYXJyYW50IHNob3duV2F0Y2ggc2hvd1BhZCBzaG93UmFkaW8gJyArXG4gICAgICAgICdzaG93U2NvcmV0YWJsZSBzaG93U3VidGl0bGVzIHNob3dVQVZGZWVkIHNob3dXYXJyYW50IHNob3dXYXRjaCBzaG93V2F5cG9pbnQgc2hvd1dheXBvaW50cyBzaWRlICcgK1xuICAgICAgICAnc2lkZUNoYXQgc2lkZUVuZW15IHNpZGVGcmllbmRseSBzaWRlUmFkaW8gc2ltcGxlVGFza3Mgc2ltdWxhdGlvbkVuYWJsZWQgc2ltdWxDbG91ZERlbnNpdHkgJyArXG4gICAgICAgICdzaW11bENsb3VkT2NjbHVzaW9uIHNpbXVsSW5DbG91ZHMgc2ltdWxXZWF0aGVyU3luYyBzaW4gc2l6ZSBzaXplT2Ygc2tpbGwgc2tpbGxGaW5hbCBza2lwVGltZSAnICtcbiAgICAgICAgJ3NsZWVwIHNsaWRlclBvc2l0aW9uIHNsaWRlclJhbmdlIHNsaWRlclNldFBvc2l0aW9uIHNsaWRlclNldFJhbmdlIHNsaWRlclNldFNwZWVkIHNsaWRlclNwZWVkICcgK1xuICAgICAgICAnc2xpbmdMb2FkQXNzaXN0YW50U2hvd24gc29sZGllck1hZ2F6aW5lcyBzb21lQW1tbyBzb3J0IHNvdW5kVm9sdW1lIHNwYXduIHNwZWFrZXIgc3BlZWQgc3BlZWRNb2RlICcgK1xuICAgICAgICAnc3BsaXRTdHJpbmcgc3FydCBzcXVhZFBhcmFtcyBzdGFuY2Ugc3RhcnRMb2FkaW5nU2NyZWVuIHN0ZXAgc3RvcCBzdG9wRW5naW5lUlREIHN0b3BwZWQgc3RyICcgK1xuICAgICAgICAnc3VuT3JNb29uIHN1cHBvcnRJbmZvIHN1cHByZXNzRm9yIHN1cmZhY2VJc1dhdGVyIHN1cmZhY2VOb3JtYWwgc3VyZmFjZVR5cGUgc3dpbUluRGVwdGggJyArXG4gICAgICAgICdzd2l0Y2hhYmxlVW5pdHMgc3dpdGNoQWN0aW9uIHN3aXRjaENhbWVyYSBzd2l0Y2hHZXN0dXJlIHN3aXRjaExpZ2h0IHN3aXRjaE1vdmUgJyArXG4gICAgICAgICdzeW5jaHJvbml6ZWRPYmplY3RzIHN5bmNocm9uaXplZFRyaWdnZXJzIHN5bmNocm9uaXplZFdheXBvaW50cyBzeW5jaHJvbml6ZU9iamVjdHNBZGQgJyArXG4gICAgICAgICdzeW5jaHJvbml6ZU9iamVjdHNSZW1vdmUgc3luY2hyb25pemVUcmlnZ2VyIHN5bmNocm9uaXplV2F5cG9pbnQgc3lzdGVtQ2hhdCBzeXN0ZW1PZlVuaXRzIHRhbiAnICtcbiAgICAgICAgJ3RhcmdldEtub3dsZWRnZSB0YXJnZXRzIHRhcmdldHNBZ2dyZWdhdGUgdGFyZ2V0c1F1ZXJ5IHRhc2tBbHdheXNWaXNpYmxlIHRhc2tDaGlsZHJlbiAnICtcbiAgICAgICAgJ3Rhc2tDb21wbGV0ZWQgdGFza0N1c3RvbURhdGEgdGFza0Rlc2NyaXB0aW9uIHRhc2tEZXN0aW5hdGlvbiB0YXNrSGludCB0YXNrTWFya2VyT2Zmc2V0IHRhc2tQYXJlbnQgJyArXG4gICAgICAgICd0YXNrUmVzdWx0IHRhc2tTdGF0ZSB0YXNrVHlwZSB0ZWFtTWVtYmVyIHRlYW1OYW1lIHRlYW1zIHRlYW1Td2l0Y2ggdGVhbVN3aXRjaEVuYWJsZWQgdGVhbVR5cGUgJyArXG4gICAgICAgICd0ZXJtaW5hdGUgdGVycmFpbkludGVyc2VjdCB0ZXJyYWluSW50ZXJzZWN0QVNMIHRlcnJhaW5JbnRlcnNlY3RBdEFTTCB0ZXh0IHRleHRMb2cgdGV4dExvZ0Zvcm1hdCAnICtcbiAgICAgICAgJ3RnIHRpbWUgdGltZU11bHRpcGxpZXIgdGl0bGVDdXQgdGl0bGVGYWRlT3V0IHRpdGxlT2JqIHRpdGxlUnNjIHRpdGxlVGV4dCB0b0FycmF5IHRvRml4ZWQgdG9Mb3dlciAnICtcbiAgICAgICAgJ3RvU3RyaW5nIHRvVXBwZXIgdHJpZ2dlckFjdGl2YXRlZCB0cmlnZ2VyQWN0aXZhdGlvbiB0cmlnZ2VyQXJlYSB0cmlnZ2VyQXR0YWNoZWRWZWhpY2xlICcgK1xuICAgICAgICAndHJpZ2dlckF0dGFjaE9iamVjdCB0cmlnZ2VyQXR0YWNoVmVoaWNsZSB0cmlnZ2VyRHluYW1pY1NpbXVsYXRpb24gdHJpZ2dlclN0YXRlbWVudHMgdHJpZ2dlclRleHQgJyArXG4gICAgICAgICd0cmlnZ2VyVGltZW91dCB0cmlnZ2VyVGltZW91dEN1cnJlbnQgdHJpZ2dlclR5cGUgdHVycmV0TG9jYWwgdHVycmV0T3duZXIgdHVycmV0VW5pdCB0dkFkZCB0dkNsZWFyICcgK1xuICAgICAgICAndHZDb2xsYXBzZSB0dkNvbGxhcHNlQWxsIHR2Q291bnQgdHZDdXJTZWwgdHZEYXRhIHR2RGVsZXRlIHR2RXhwYW5kIHR2RXhwYW5kQWxsIHR2UGljdHVyZSAnICtcbiAgICAgICAgJ3R2U2V0Q29sb3IgdHZTZXRDdXJTZWwgdHZTZXREYXRhIHR2U2V0UGljdHVyZSB0dlNldFBpY3R1cmVDb2xvciB0dlNldFBpY3R1cmVDb2xvckRpc2FibGVkICcgK1xuICAgICAgICAndHZTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCB0dlNldFBpY3R1cmVSaWdodCB0dlNldFBpY3R1cmVSaWdodENvbG9yIHR2U2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZCAnICtcbiAgICAgICAgJ3R2U2V0UGljdHVyZVJpZ2h0Q29sb3JTZWxlY3RlZCB0dlNldFRleHQgdHZTZXRUb29sdGlwIHR2U2V0VmFsdWUgdHZTb3J0IHR2U29ydEJ5VmFsdWUgdHZUZXh0ICcgK1xuICAgICAgICAndHZUb29sdGlwIHR2VmFsdWUgdHlwZSB0eXBlTmFtZSB0eXBlT2YgVUFWQ29udHJvbCB1aU5hbWVzcGFjZSB1aVNsZWVwIHVuYXNzaWduQ3VyYXRvciAnICtcbiAgICAgICAgJ3VuYXNzaWduSXRlbSB1bmFzc2lnblRlYW0gdW5hc3NpZ25WZWhpY2xlIHVuZGVyd2F0ZXIgdW5pZm9ybSB1bmlmb3JtQ29udGFpbmVyIHVuaWZvcm1JdGVtcyAnICtcbiAgICAgICAgJ3VuaWZvcm1NYWdhemluZXMgdW5pdEFkZG9ucyB1bml0QWltUG9zaXRpb24gdW5pdEFpbVBvc2l0aW9uVmlzdWFsIHVuaXRCYWNrcGFjayB1bml0SXNVQVYgdW5pdFBvcyAnICtcbiAgICAgICAgJ3VuaXRSZWFkeSB1bml0UmVjb2lsQ29lZmZpY2llbnQgdW5pdHMgdW5pdHNCZWxvd0hlaWdodCB1bmxpbmtJdGVtIHVubG9ja0FjaGlldmVtZW50ICcgK1xuICAgICAgICAndW5yZWdpc3RlclRhc2sgdXBkYXRlRHJhd0ljb24gdXBkYXRlTWVudUl0ZW0gdXBkYXRlT2JqZWN0VHJlZSB1c2VBSVN0ZWVyaW5nQ29tcG9uZW50ICcgK1xuICAgICAgICAndXNlQXVkaW9UaW1lRm9yTW92ZXMgdXNlcklucHV0RGlzYWJsZWQgdmVjdG9yQWRkIHZlY3RvckNvcyB2ZWN0b3JDcm9zc1Byb2R1Y3QgdmVjdG9yRGlmZiAnICtcbiAgICAgICAgJ3ZlY3RvckRpciB2ZWN0b3JEaXJWaXN1YWwgdmVjdG9yRGlzdGFuY2UgdmVjdG9yRGlzdGFuY2VTcXIgdmVjdG9yRG90UHJvZHVjdCB2ZWN0b3JGcm9tVG8gJyArXG4gICAgICAgICd2ZWN0b3JNYWduaXR1ZGUgdmVjdG9yTWFnbml0dWRlU3FyIHZlY3Rvck1vZGVsVG9Xb3JsZCB2ZWN0b3JNb2RlbFRvV29ybGRWaXN1YWwgdmVjdG9yTXVsdGlwbHkgJyArXG4gICAgICAgICd2ZWN0b3JOb3JtYWxpemVkIHZlY3RvclVwIHZlY3RvclVwVmlzdWFsIHZlY3RvcldvcmxkVG9Nb2RlbCB2ZWN0b3JXb3JsZFRvTW9kZWxWaXN1YWwgdmVoaWNsZSAnICtcbiAgICAgICAgJ3ZlaGljbGVDYXJnb0VuYWJsZWQgdmVoaWNsZUNoYXQgdmVoaWNsZVJhZGlvIHZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0cyB2ZWhpY2xlUmVwb3J0T3duUG9zaXRpb24gJyArXG4gICAgICAgICd2ZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0cyB2ZWhpY2xlcyB2ZWhpY2xlVmFyTmFtZSB2ZWxvY2l0eSB2ZWxvY2l0eU1vZGVsU3BhY2UgdmVyaWZ5U2lnbmF0dXJlICcgK1xuICAgICAgICAndmVzdCB2ZXN0Q29udGFpbmVyIHZlc3RJdGVtcyB2ZXN0TWFnYXppbmVzIHZpZXdEaXN0YW5jZSB2aXNpYmxlQ29tcGFzcyB2aXNpYmxlR1BTIHZpc2libGVNYXAgJyArXG4gICAgICAgICd2aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQVNMIHZpc2libGVTY29yZXRhYmxlIHZpc2libGVXYXRjaCB3YXZlcyB3YXlwb2ludEF0dGFjaGVkT2JqZWN0ICcgK1xuICAgICAgICAnd2F5cG9pbnRBdHRhY2hlZFZlaGljbGUgd2F5cG9pbnRBdHRhY2hPYmplY3Qgd2F5cG9pbnRBdHRhY2hWZWhpY2xlIHdheXBvaW50QmVoYXZpb3VyICcgK1xuICAgICAgICAnd2F5cG9pbnRDb21iYXRNb2RlIHdheXBvaW50Q29tcGxldGlvblJhZGl1cyB3YXlwb2ludERlc2NyaXB0aW9uIHdheXBvaW50Rm9yY2VCZWhhdmlvdXIgJyArXG4gICAgICAgICd3YXlwb2ludEZvcm1hdGlvbiB3YXlwb2ludEhvdXNlUG9zaXRpb24gd2F5cG9pbnRMb2l0ZXJSYWRpdXMgd2F5cG9pbnRMb2l0ZXJUeXBlIHdheXBvaW50TmFtZSAnICtcbiAgICAgICAgJ3dheXBvaW50UG9zaXRpb24gd2F5cG9pbnRzIHdheXBvaW50U2NyaXB0IHdheXBvaW50c0VuYWJsZWRVQVYgd2F5cG9pbnRTaG93IHdheXBvaW50U3BlZWQgJyArXG4gICAgICAgICd3YXlwb2ludFN0YXRlbWVudHMgd2F5cG9pbnRUaW1lb3V0IHdheXBvaW50VGltZW91dEN1cnJlbnQgd2F5cG9pbnRUeXBlIHdheXBvaW50VmlzaWJsZSAnICtcbiAgICAgICAgJ3dlYXBvbkFjY2Vzc29yaWVzIHdlYXBvbkFjY2Vzc29yaWVzQ2FyZ28gd2VhcG9uQ2FyZ28gd2VhcG9uRGlyZWN0aW9uIHdlYXBvbkluZXJ0aWEgd2VhcG9uTG93ZXJlZCAnICtcbiAgICAgICAgJ3dlYXBvbnMgd2VhcG9uc0l0ZW1zIHdlYXBvbnNJdGVtc0NhcmdvIHdlYXBvblN0YXRlIHdlYXBvbnNUdXJyZXQgd2VpZ2h0UlREIFdGU2lkZVRleHQgd2luZCAnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ2JsdWZvciBjaXZpbGlhbiBjb25maWdOdWxsIGNvbnRyb2xOdWxsIGRpc3BsYXlOdWxsIGVhc3QgZW5kbCBmYWxzZSBncnBOdWxsIGluZGVwZW5kZW50IGxpbmVCcmVhayAnICtcbiAgICAgICAgJ2xvY2F0aW9uTnVsbCBuaWwgb2JqTnVsbCBvcGZvciBwaSByZXNpc3RhbmNlIHNjcmlwdE51bGwgc2lkZUFtYmllbnRMaWZlIHNpZGVFbXB0eSBzaWRlTG9naWMgJyArXG4gICAgICAgICdzaWRlVW5rbm93biB0YXNrTnVsbCB0ZWFtTWVtYmVyTnVsbCB0cnVlIHdlc3QnLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBGVU5DVElPTixcbiAgICAgIFNUUklOR1MsXG4gICAgICBQUkVQUk9DRVNTT1JcbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jfF5cXCQgL1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1s8Pnt9Kl0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ2JlZ2luIGVuZCBzdGFydCBjb21taXQgcm9sbGJhY2sgc2F2ZXBvaW50IGxvY2sgYWx0ZXIgY3JlYXRlIGRyb3AgcmVuYW1lIGNhbGwgJyArXG4gICAgICAgICAgJ2RlbGV0ZSBkbyBoYW5kbGVyIGluc2VydCBsb2FkIHJlcGxhY2Ugc2VsZWN0IHRydW5jYXRlIHVwZGF0ZSBzZXQgc2hvdyBwcmFnbWEgZ3JhbnQgJyArXG4gICAgICAgICAgJ21lcmdlIGRlc2NyaWJlIHVzZSBleHBsYWluIGhlbHAgZGVjbGFyZSBwcmVwYXJlIGV4ZWN1dGUgZGVhbGxvY2F0ZSByZWxlYXNlICcgK1xuICAgICAgICAgICd1bmxvY2sgcHVyZ2UgcmVzZXQgY2hhbmdlIHN0b3AgYW5hbHl6ZSBjYWNoZSBmbHVzaCBvcHRpbWl6ZSByZXBhaXIga2lsbCAnICtcbiAgICAgICAgICAnaW5zdGFsbCB1bmluc3RhbGwgY2hlY2tzdW0gcmVzdG9yZSBjaGVjayBiYWNrdXAgcmV2b2tlIGNvbW1lbnQgdmFsdWVzIHdpdGgnLFxuICAgICAgICBlbmQ6IC87LywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGxleGVtZXM6IC9bXFx3XFwuXSsvLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgICAnYXMgYWJvcnQgYWJzIGFic29sdXRlIGFjYyBhY2NlIGFjY2VwIGFjY2VwdCBhY2Nlc3MgYWNjZXNzZWQgYWNjZXNzaWJsZSBhY2NvdW50IGFjb3MgYWN0aW9uIGFjdGl2YXRlIGFkZCAnICtcbiAgICAgICAgICAgICdhZGR0aW1lIGFkbWluIGFkbWluaXN0ZXIgYWR2YW5jZWQgYWR2aXNlIGFlc19kZWNyeXB0IGFlc19lbmNyeXB0IGFmdGVyIGFnZW50IGFnZ3JlZ2F0ZSBhbGkgYWxpYSBhbGlhcyAnICtcbiAgICAgICAgICAgICdhbGwgYWxsb2NhdGUgYWxsb3cgYWx0ZXIgYWx3YXlzIGFuYWx5emUgYW5jaWxsYXJ5IGFuZCBhbnRpIGFueSBhbnlkYXRhIGFueWRhdGFzZXQgYW55c2NoZW1hIGFueXR5cGUgYXBwbHkgJyArXG4gICAgICAgICAgICAnYXJjaGl2ZSBhcmNoaXZlZCBhcmNoaXZlbG9nIGFyZSBhcyBhc2MgYXNjaWkgYXNpbiBhc3NlbWJseSBhc3NlcnRpb24gYXNzb2NpYXRlIGFzeW5jaHJvbm91cyBhdCBhdGFuICcgK1xuICAgICAgICAgICAgJ2F0bjIgYXR0ciBhdHRyaSBhdHRyaWIgYXR0cmlidSBhdHRyaWJ1dCBhdHRyaWJ1dGUgYXR0cmlidXRlcyBhdWRpdCBhdXRoZW50aWNhdGVkIGF1dGhlbnRpY2F0aW9uIGF1dGhpZCAnICtcbiAgICAgICAgICAgICdhdXRob3JzIGF1dG8gYXV0b2FsbG9jYXRlIGF1dG9kYmxpbmsgYXV0b2V4dGVuZCBhdXRvbWF0aWMgYXZhaWxhYmlsaXR5IGF2ZyBiYWNrdXAgYmFkZmlsZSBiYXNpY2ZpbGUgJyArXG4gICAgICAgICAgICAnYmVmb3JlIGJlZ2luIGJlZ2lubmluZyBiZW5jaG1hcmsgYmV0d2VlbiBiZmlsZSBiZmlsZV9iYXNlIGJpZyBiaWdmaWxlIGJpbiBiaW5hcnlfZG91YmxlIGJpbmFyeV9mbG9hdCAnICtcbiAgICAgICAgICAgICdiaW5sb2cgYml0X2FuZCBiaXRfY291bnQgYml0X2xlbmd0aCBiaXRfb3IgYml0X3hvciBiaXRtYXAgYmxvYl9iYXNlIGJsb2NrIGJsb2Nrc2l6ZSBib2R5IGJvdGggYm91bmQgJyArXG4gICAgICAgICAgICAnYnVja2V0IGJ1ZmZlcl9jYWNoZSBidWZmZXJfcG9vbCBidWlsZCBidWxrIGJ5IGJ5dGUgYnl0ZW9yZGVybWFyayBieXRlcyBjYWNoZSBjYWNoaW5nIGNhbGwgY2FsbGluZyBjYW5jZWwgJyArXG4gICAgICAgICAgICAnY2FwYWNpdHkgY2FzY2FkZSBjYXNjYWRlZCBjYXNlIGNhc3QgY2F0YWxvZyBjYXRlZ29yeSBjZWlsIGNlaWxpbmcgY2hhaW4gY2hhbmdlIGNoYW5nZWQgY2hhcl9iYXNlICcgK1xuICAgICAgICAgICAgJ2NoYXJfbGVuZ3RoIGNoYXJhY3Rlcl9sZW5ndGggY2hhcmFjdGVycyBjaGFyYWN0ZXJzZXQgY2hhcmluZGV4IGNoYXJzZXQgY2hhcnNldGZvcm0gY2hhcnNldGlkIGNoZWNrICcgK1xuICAgICAgICAgICAgJ2NoZWNrc3VtIGNoZWNrc3VtX2FnZyBjaGlsZCBjaG9vc2UgY2hyIGNodW5rIGNsYXNzIGNsZWFudXAgY2xlYXIgY2xpZW50IGNsb2IgY2xvYl9iYXNlIGNsb25lIGNsb3NlICcgK1xuICAgICAgICAgICAgJ2NsdXN0ZXJfaWQgY2x1c3Rlcl9wcm9iYWJpbGl0eSBjbHVzdGVyX3NldCBjbHVzdGVyaW5nIGNvYWxlc2NlIGNvZXJjaWJpbGl0eSBjb2wgY29sbGF0ZSBjb2xsYXRpb24gJyArXG4gICAgICAgICAgICAnY29sbGVjdCBjb2x1IGNvbHVtIGNvbHVtbiBjb2x1bW5fdmFsdWUgY29sdW1ucyBjb2x1bW5zX3VwZGF0ZWQgY29tbWVudCBjb21taXQgY29tcGFjdCBjb21wYXRpYmlsaXR5ICcgK1xuICAgICAgICAgICAgJ2NvbXBpbGVkIGNvbXBsZXRlIGNvbXBvc2l0ZV9saW1pdCBjb21wb3VuZCBjb21wcmVzcyBjb21wdXRlIGNvbmNhdCBjb25jYXRfd3MgY29uY3VycmVudCBjb25maXJtIGNvbm4gJyArXG4gICAgICAgICAgICAnY29ubmVjIGNvbm5lY3QgY29ubmVjdF9ieV9pc2N5Y2xlIGNvbm5lY3RfYnlfaXNsZWFmIGNvbm5lY3RfYnlfcm9vdCBjb25uZWN0X3RpbWUgY29ubmVjdGlvbiAnICtcbiAgICAgICAgICAgICdjb25zaWRlciBjb25zaXN0ZW50IGNvbnN0YW50IGNvbnN0cmFpbnQgY29uc3RyYWludHMgY29uc3RydWN0b3IgY29udGFpbmVyIGNvbnRlbnQgY29udGVudHMgY29udGV4dCAnICtcbiAgICAgICAgICAgICdjb250cmlidXRvcnMgY29udHJvbGZpbGUgY29udiBjb252ZXJ0IGNvbnZlcnRfdHogY29yciBjb3JyX2sgY29ycl9zIGNvcnJlc3BvbmRpbmcgY29ycnVwdGlvbiBjb3MgY29zdCAnICtcbiAgICAgICAgICAgICdjb3VudCBjb3VudF9iaWcgY291bnRlZCBjb3Zhcl9wb3AgY292YXJfc2FtcCBjcHVfcGVyX2NhbGwgY3B1X3Blcl9zZXNzaW9uIGNyYzMyIGNyZWF0ZSBjcmVhdGlvbiAnICtcbiAgICAgICAgICAgICdjcml0aWNhbCBjcm9zcyBjdWJlIGN1bWVfZGlzdCBjdXJkYXRlIGN1cnJlbnQgY3VycmVudF9kYXRlIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3VzZXIgJyArXG4gICAgICAgICAgICAnY3Vyc29yIGN1cnRpbWUgY3VzdG9tZGF0dW0gY3ljbGUgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF0YWZpbGUgZGF0YWZpbGVzIGRhdGFsZW5ndGggZGF0ZV9hZGQgJyArXG4gICAgICAgICAgICAnZGF0ZV9jYWNoZSBkYXRlX2Zvcm1hdCBkYXRlX3N1YiBkYXRlYWRkIGRhdGVkaWZmIGRhdGVmcm9tcGFydHMgZGF0ZW5hbWUgZGF0ZXBhcnQgZGF0ZXRpbWUyZnJvbXBhcnRzICcgK1xuICAgICAgICAgICAgJ2RheSBkYXlfdG9fc2Vjb25kIGRheW5hbWUgZGF5b2Ztb250aCBkYXlvZndlZWsgZGF5b2Z5ZWFyIGRheXMgZGJfcm9sZV9jaGFuZ2UgZGJ0aW1lem9uZSBkZGwgZGVhbGxvY2F0ZSAnICtcbiAgICAgICAgICAgICdkZWNsYXJlIGRlY29kZSBkZWNvbXBvc2UgZGVjcmVtZW50IGRlY3J5cHQgZGVkdXBsaWNhdGUgZGVmIGRlZmEgZGVmYXUgZGVmYXVsIGRlZmF1bHQgZGVmYXVsdHMgJyArXG4gICAgICAgICAgICAnZGVmZXJyZWQgZGVmaSBkZWZpbiBkZWZpbmUgZGVncmVlcyBkZWxheWVkIGRlbGVnYXRlIGRlbGV0ZSBkZWxldGVfYWxsIGRlbGltaXRlZCBkZW1hbmQgZGVuc2VfcmFuayAnICtcbiAgICAgICAgICAgICdkZXB0aCBkZXF1ZXVlIGRlc19kZWNyeXB0IGRlc19lbmNyeXB0IGRlc19rZXlfZmlsZSBkZXNjIGRlc2NyIGRlc2NyaSBkZXNjcmliIGRlc2NyaWJlIGRlc2NyaXB0b3IgJyArXG4gICAgICAgICAgICAnZGV0ZXJtaW5pc3RpYyBkaWFnbm9zdGljcyBkaWZmZXJlbmNlIGRpbWVuc2lvbiBkaXJlY3RfbG9hZCBkaXJlY3RvcnkgZGlzYWJsZSBkaXNhYmxlX2FsbCAnICtcbiAgICAgICAgICAgICdkaXNhbGxvdyBkaXNhc3NvY2lhdGUgZGlzY2FyZGZpbGUgZGlzY29ubmVjdCBkaXNrZ3JvdXAgZGlzdGluY3QgZGlzdGluY3Ryb3cgZGlzdHJpYnV0ZSBkaXN0cmlidXRlZCBkaXYgJyArXG4gICAgICAgICAgICAnZG8gZG9jdW1lbnQgZG9tYWluIGRvdG5ldCBkb3VibGUgZG93bmdyYWRlIGRyb3AgZHVtcGZpbGUgZHVwbGljYXRlIGR1cmF0aW9uIGVhY2ggZWRpdGlvbiBlZGl0aW9uYWJsZSAnICtcbiAgICAgICAgICAgICdlZGl0aW9ucyBlbGVtZW50IGVsbGlwc2lzIGVsc2UgZWxzaWYgZWx0IGVtcHR5IGVuYWJsZSBlbmFibGVfYWxsIGVuY2xvc2VkIGVuY29kZSBlbmNvZGluZyBlbmNyeXB0ICcgK1xuICAgICAgICAgICAgJ2VuZCBlbmQtZXhlYyBlbmRpYW4gZW5mb3JjZWQgZW5naW5lIGVuZ2luZXMgZW5xdWV1ZSBlbnRlcnByaXNlIGVudGl0eWVzY2FwaW5nIGVvbW9udGggZXJyb3IgZXJyb3JzICcgK1xuICAgICAgICAgICAgJ2VzY2FwZWQgZXZhbG5hbWUgZXZhbHVhdGUgZXZlbnQgZXZlbnRkYXRhIGV2ZW50cyBleGNlcHQgZXhjZXB0aW9uIGV4Y2VwdGlvbnMgZXhjaGFuZ2UgZXhjbHVkZSBleGNsdWRpbmcgJyArXG4gICAgICAgICAgICAnZXhlY3UgZXhlY3V0IGV4ZWN1dGUgZXhlbXB0IGV4aXN0cyBleGl0IGV4cCBleHBpcmUgZXhwbGFpbiBleHBsb2RlIGV4cG9ydCBleHBvcnRfc2V0IGV4dGVuZGVkIGV4dGVudCBleHRlcm5hbCAnICtcbiAgICAgICAgICAgICdleHRlcm5hbF8xIGV4dGVybmFsXzIgZXh0ZXJuYWxseSBleHRyYWN0IGZhaWxlZCBmYWlsZWRfbG9naW5fYXR0ZW1wdHMgZmFpbG92ZXIgZmFpbHVyZSBmYXIgZmFzdCAnICtcbiAgICAgICAgICAgICdmZWF0dXJlX3NldCBmZWF0dXJlX3ZhbHVlIGZldGNoIGZpZWxkIGZpZWxkcyBmaWxlIGZpbGVfbmFtZV9jb252ZXJ0IGZpbGVzeXN0ZW1fbGlrZV9sb2dnaW5nIGZpbmFsICcgK1xuICAgICAgICAgICAgJ2ZpbmlzaCBmaXJzdCBmaXJzdF92YWx1ZSBmaXhlZCBmbGFzaF9jYWNoZSBmbGFzaGJhY2sgZmxvb3IgZmx1c2ggZm9sbG93aW5nIGZvbGxvd3MgZm9yIGZvcmFsbCBmb3JjZSBmb3JlaWduICcgK1xuICAgICAgICAgICAgJ2Zvcm0gZm9ybWEgZm9ybWF0IGZvdW5kIGZvdW5kX3Jvd3MgZnJlZWxpc3QgZnJlZWxpc3RzIGZyZWVwb29scyBmcmVzaCBmcm9tIGZyb21fYmFzZTY0IGZyb21fZGF5cyAnICtcbiAgICAgICAgICAgICdmdHAgZnVsbCBmdW5jdGlvbiBnZW5lcmFsIGdlbmVyYXRlZCBnZXQgZ2V0X2Zvcm1hdCBnZXRfbG9jayBnZXRkYXRlIGdldHV0Y2RhdGUgZ2xvYmFsIGdsb2JhbF9uYW1lICcgK1xuICAgICAgICAgICAgJ2dsb2JhbGx5IGdvIGdvdG8gZ3JhbnQgZ3JhbnRzIGdyZWF0ZXN0IGdyb3VwIGdyb3VwX2NvbmNhdCBncm91cF9pZCBncm91cGluZyBncm91cGluZ19pZCBncm91cHMgJyArXG4gICAgICAgICAgICAnZ3RpZF9zdWJ0cmFjdCBndWFyYW50ZWUgZ3VhcmQgaGFuZGxlciBoYXNoIGhhc2hrZXlzIGhhdmluZyBoZWEgaGVhZCBoZWFkaSBoZWFkaW4gaGVhZGluZyBoZWFwIGhlbHAgaGV4ICcgK1xuICAgICAgICAgICAgJ2hpZXJhcmNoeSBoaWdoIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91ciBob3VycyBodHRwIGlkIGlkZW50X2N1cnJlbnQgaWRlbnRfaW5jciBpZGVudF9zZWVkIGlkZW50aWZpZWQgJyArXG4gICAgICAgICAgICAnaWRlbnRpdHkgaWRsZV90aW1lIGlmIGlmbnVsbCBpZ25vcmUgaWlmIGlsaWtlIGlsbSBpbW1lZGlhdGUgaW1wb3J0IGluIGluY2x1ZGUgaW5jbHVkaW5nIGluY3JlbWVudCAnICtcbiAgICAgICAgICAgICdpbmRleCBpbmRleGVzIGluZGV4aW5nIGluZGV4dHlwZSBpbmRpY2F0b3IgaW5kaWNlcyBpbmV0Nl9hdG9uIGluZXQ2X250b2EgaW5ldF9hdG9uIGluZXRfbnRvYSBpbmZpbGUgJyArXG4gICAgICAgICAgICAnaW5pdGlhbCBpbml0aWFsaXplZCBpbml0aWFsbHkgaW5pdHJhbnMgaW5tZW1vcnkgaW5uZXIgaW5ub2RiIGlucHV0IGluc2VydCBpbnN0YWxsIGluc3RhbmNlIGluc3RhbnRpYWJsZSAnICtcbiAgICAgICAgICAgICdpbnN0ciBpbnRlcmZhY2UgaW50ZXJsZWF2ZWQgaW50ZXJzZWN0IGludG8gaW52YWxpZGF0ZSBpbnZpc2libGUgaXMgaXNfZnJlZV9sb2NrIGlzX2lwdjQgaXNfaXB2NF9jb21wYXQgJyArXG4gICAgICAgICAgICAnaXNfbm90IGlzX25vdF9udWxsIGlzX3VzZWRfbG9jayBpc2RhdGUgaXNudWxsIGlzb2xhdGlvbiBpdGVyYXRlIGphdmEgam9pbiBqc29uIGpzb25fZXhpc3RzICcgK1xuICAgICAgICAgICAgJ2tlZXAga2VlcF9kdXBsaWNhdGVzIGtleSBrZXlzIGtpbGwgbGFuZ3VhZ2UgbGFyZ2UgbGFzdCBsYXN0X2RheSBsYXN0X2luc2VydF9pZCBsYXN0X3ZhbHVlIGxhdGVyYWwgbGF4IGxjYXNlICcgK1xuICAgICAgICAgICAgJ2xlYWQgbGVhZGluZyBsZWFzdCBsZWF2ZXMgbGVmdCBsZW4gbGVuZ2h0IGxlbmd0aCBsZXNzIGxldmVsIGxldmVscyBsaWJyYXJ5IGxpa2UgbGlrZTIgbGlrZTQgbGlrZWMgbGltaXQgJyArXG4gICAgICAgICAgICAnbGluZXMgbGluayBsaXN0IGxpc3RhZ2cgbGl0dGxlIGxuIGxvYWQgbG9hZF9maWxlIGxvYiBsb2JzIGxvY2FsIGxvY2FsdGltZSBsb2NhbHRpbWVzdGFtcCBsb2NhdGUgJyArXG4gICAgICAgICAgICAnbG9jYXRvciBsb2NrIGxvY2tlZCBsb2cgbG9nMTAgbG9nMiBsb2dmaWxlIGxvZ2ZpbGVzIGxvZ2dpbmcgbG9naWNhbCBsb2dpY2FsX3JlYWRzX3Blcl9jYWxsICcgK1xuICAgICAgICAgICAgJ2xvZ29mZiBsb2dvbiBsb2dzIGxvbmcgbG9vcCBsb3cgbG93X3ByaW9yaXR5IGxvd2VyIGxwYWQgbHJ0cmltIGx0cmltIG1haW4gbWFrZV9zZXQgbWFrZWRhdGUgbWFrZXRpbWUgJyArXG4gICAgICAgICAgICAnbWFuYWdlZCBtYW5hZ2VtZW50IG1hbnVhbCBtYXAgbWFwcGluZyBtYXNrIG1hc3RlciBtYXN0ZXJfcG9zX3dhaXQgbWF0Y2ggbWF0Y2hlZCBtYXRlcmlhbGl6ZWQgbWF4ICcgK1xuICAgICAgICAgICAgJ21heGV4dGVudHMgbWF4aW1pemUgbWF4aW5zdGFuY2VzIG1heGxlbiBtYXhsb2dmaWxlcyBtYXhsb2doaXN0b3J5IG1heGxvZ21lbWJlcnMgbWF4c2l6ZSBtYXh0cmFucyAnICtcbiAgICAgICAgICAgICdtZDUgbWVhc3VyZXMgbWVkaWFuIG1lZGl1bSBtZW1iZXIgbWVtY29tcHJlc3MgbWVtb3J5IG1lcmdlIG1pY3Jvc2Vjb25kIG1pZCBtaWdyYXRpb24gbWluIG1pbmV4dGVudHMgJyArXG4gICAgICAgICAgICAnbWluaW11bSBtaW5pbmcgbWludXMgbWludXRlIG1pbnV0ZXMgbWludmFsdWUgbWlzc2luZyBtb2QgbW9kZSBtb2RlbCBtb2RpZmljYXRpb24gbW9kaWZ5IG1vZHVsZSBtb25pdG9yaW5nIG1vbnRoICcgK1xuICAgICAgICAgICAgJ21vbnRocyBtb3VudCBtb3ZlIG1vdmVtZW50IG11bHRpc2V0IG11dGV4IG5hbWUgbmFtZV9jb25zdCBuYW1lcyBuYW4gbmF0aW9uYWwgbmF0aXZlIG5hdHVyYWwgbmF2IG5jaGFyICcgK1xuICAgICAgICAgICAgJ25jbG9iIG5lc3RlZCBuZXZlciBuZXcgbmV3bGluZSBuZXh0IG5leHR2YWwgbm8gbm9fd3JpdGVfdG9fYmlubG9nIG5vYXJjaGl2ZWxvZyBub2F1ZGl0IG5vYmFkZmlsZSAnICtcbiAgICAgICAgICAgICdub2NoZWNrIG5vY29tcHJlc3Mgbm9jb3B5IG5vY3ljbGUgbm9kZWxheSBub2Rpc2NhcmRmaWxlIG5vZW50aXR5ZXNjYXBpbmcgbm9ndWFyYW50ZWUgbm9rZWVwIG5vbG9nZmlsZSAnICtcbiAgICAgICAgICAgICdub21hcHBpbmcgbm9tYXh2YWx1ZSBub21pbmltaXplIG5vbWludmFsdWUgbm9tb25pdG9yaW5nIG5vbmUgbm9uZWRpdGlvbmFibGUgbm9uc2NoZW1hIG5vb3JkZXIgJyArXG4gICAgICAgICAgICAnbm9wciBub3BybyBub3Byb20gbm9wcm9tcCBub3Byb21wdCBub3JlbHkgbm9yZXNldGxvZ3Mgbm9yZXZlcnNlIG5vcm1hbCBub3Jvd2RlcGVuZGVuY2llcyBub3NjaGVtYWNoZWNrICcgK1xuICAgICAgICAgICAgJ25vc3dpdGNoIG5vdCBub3RoaW5nIG5vdGljZSBub3RudWxsIG5vdHJpbSBub3ZhbGlkYXRlIG5vdyBub3dhaXQgbnRoX3ZhbHVlIG51bGxpZiBudWxscyBudW0gbnVtYiBudW1iZSAnICtcbiAgICAgICAgICAgICdudmFyY2hhciBudmFyY2hhcjIgb2JqZWN0IG9jaWNvbGwgb2NpZGF0ZSBvY2lkYXRldGltZSBvY2lkdXJhdGlvbiBvY2lpbnRlcnZhbCBvY2lsb2Jsb2NhdG9yIG9jaW51bWJlciAnICtcbiAgICAgICAgICAgICdvY2lyZWYgb2NpcmVmY3Vyc29yIG9jaXJvd2lkIG9jaXN0cmluZyBvY2l0eXBlIG9jdCBvY3RldF9sZW5ndGggb2Ygb2ZmIG9mZmxpbmUgb2Zmc2V0IG9pZCBvaWRpbmRleCBvbGQgJyArXG4gICAgICAgICAgICAnb24gb25saW5lIG9ubHkgb3BhcXVlIG9wZW4gb3BlcmF0aW9ucyBvcGVyYXRvciBvcHRpbWFsIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG9yIG9yYWNsZSBvcmFjbGVfZGF0ZSAnICtcbiAgICAgICAgICAgICdvcmFkYXRhIG9yZCBvcmRhdWRpbyBvcmRkaWNvbSBvcmRkb2Mgb3JkZXIgb3JkaW1hZ2Ugb3JkaW5hbGl0eSBvcmR2aWRlbyBvcmdhbml6YXRpb24gb3JsYW55IG9ybHZhcnkgJyArXG4gICAgICAgICAgICAnb3V0IG91dGVyIG91dGZpbGUgb3V0bGluZSBvdXRwdXQgb3ZlciBvdmVyZmxvdyBvdmVycmlkaW5nIHBhY2thZ2UgcGFkIHBhcmFsbGVsIHBhcmFsbGVsX2VuYWJsZSAnICtcbiAgICAgICAgICAgICdwYXJhbWV0ZXJzIHBhcmVudCBwYXJzZSBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc2NhbCBwYXNzaW5nIHBhc3N3b3JkIHBhc3N3b3JkX2dyYWNlX3RpbWUgJyArXG4gICAgICAgICAgICAncGFzc3dvcmRfbG9ja190aW1lIHBhc3N3b3JkX3JldXNlX21heCBwYXNzd29yZF9yZXVzZV90aW1lIHBhc3N3b3JkX3ZlcmlmeV9mdW5jdGlvbiBwYXRjaCBwYXRoIHBhdGluZGV4ICcgK1xuICAgICAgICAgICAgJ3BjdGluY3JlYXNlIHBjdHRocmVzaG9sZCBwY3R1c2VkIHBjdHZlcnNpb24gcGVyY2VudCBwZXJjZW50X3JhbmsgcGVyY2VudGlsZV9jb250IHBlcmNlbnRpbGVfZGlzYyAnICtcbiAgICAgICAgICAgICdwZXJmb3JtYW5jZSBwZXJpb2QgcGVyaW9kX2FkZCBwZXJpb2RfZGlmZiBwZXJtYW5lbnQgcGh5c2ljYWwgcGkgcGlwZSBwaXBlbGluZWQgcGl2b3QgcGx1Z2dhYmxlIHBsdWdpbiAnICtcbiAgICAgICAgICAgICdwb2xpY3kgcG9zaXRpb24gcG9zdF90cmFuc2FjdGlvbiBwb3cgcG93ZXIgcHJhZ21hIHByZWJ1aWx0IHByZWNlZGVzIHByZWNlZGluZyBwcmVjaXNpb24gcHJlZGljdGlvbiAnICtcbiAgICAgICAgICAgICdwcmVkaWN0aW9uX2Nvc3QgcHJlZGljdGlvbl9kZXRhaWxzIHByZWRpY3Rpb25fcHJvYmFiaWxpdHkgcHJlZGljdGlvbl9zZXQgcHJlcGFyZSBwcmVzZW50IHByZXNlcnZlICcgK1xuICAgICAgICAgICAgJ3ByaW9yIHByaW9yaXR5IHByaXZhdGUgcHJpdmF0ZV9zZ2EgcHJpdmlsZWdlcyBwcm9jZWR1cmFsIHByb2NlZHVyZSBwcm9jZWR1cmVfYW5hbHl6ZSBwcm9jZXNzbGlzdCAnICtcbiAgICAgICAgICAgICdwcm9maWxlcyBwcm9qZWN0IHByb21wdCBwcm90ZWN0aW9uIHB1YmxpYyBwdWJsaXNoaW5nc2VydmVybmFtZSBwdXJnZSBxdWFydGVyIHF1ZXJ5IHF1aWNrIHF1aWVzY2UgcXVvdGEgJyArXG4gICAgICAgICAgICAncXVvdGVuYW1lIHJhZGlhbnMgcmFpc2UgcmFuZCByYW5nZSByYW5rIHJhdyByZWFkIHJlYWRzIHJlYWRzaXplIHJlYnVpbGQgcmVjb3JkIHJlY29yZHMgJyArXG4gICAgICAgICAgICAncmVjb3ZlciByZWNvdmVyeSByZWN1cnNpdmUgcmVjeWNsZSByZWRvIHJlZHVjZWQgcmVmIHJlZmVyZW5jZSByZWZlcmVuY2VkIHJlZmVyZW5jZXMgcmVmZXJlbmNpbmcgcmVmcmVzaCAnICtcbiAgICAgICAgICAgICdyZWdleHBfbGlrZSByZWdpc3RlciByZWdyX2F2Z3ggcmVncl9hdmd5IHJlZ3JfY291bnQgcmVncl9pbnRlcmNlcHQgcmVncl9yMiByZWdyX3Nsb3BlIHJlZ3Jfc3h4IHJlZ3Jfc3h5ICcgK1xuICAgICAgICAgICAgJ3JlamVjdCByZWtleSByZWxhdGlvbmFsIHJlbGF0aXZlIHJlbGF5bG9nIHJlbGVhc2UgcmVsZWFzZV9sb2NrIHJlbGllc19vbiByZWxvY2F0ZSByZWx5IHJlbSByZW1haW5kZXIgcmVuYW1lICcgK1xuICAgICAgICAgICAgJ3JlcGFpciByZXBlYXQgcmVwbGFjZSByZXBsaWNhdGUgcmVwbGljYXRpb24gcmVxdWlyZWQgcmVzZXQgcmVzZXRsb2dzIHJlc2l6ZSByZXNvdXJjZSByZXNwZWN0IHJlc3RvcmUgJyArXG4gICAgICAgICAgICAncmVzdHJpY3RlZCByZXN1bHQgcmVzdWx0X2NhY2hlIHJlc3VtYWJsZSByZXN1bWUgcmV0ZW50aW9uIHJldHVybiByZXR1cm5pbmcgcmV0dXJucyByZXVzZSByZXZlcnNlIHJldm9rZSAnICtcbiAgICAgICAgICAgICdyaWdodCBybGlrZSByb2xlIHJvbGVzIHJvbGxiYWNrIHJvbGxpbmcgcm9sbHVwIHJvdW5kIHJvdyByb3dfY291bnQgcm93ZGVwZW5kZW5jaWVzIHJvd2lkIHJvd251bSByb3dzICcgK1xuICAgICAgICAgICAgJ3J0cmltIHJ1bGVzIHNhZmUgc2FsdCBzYW1wbGUgc2F2ZSBzYXZlcG9pbnQgc2IxIHNiMiBzYjQgc2NhbiBzY2hlbWEgc2NoZW1hY2hlY2sgc2NuIHNjb3BlIHNjcm9sbCAnICtcbiAgICAgICAgICAgICdzZG9fZ2VvcmFzdGVyIHNkb190b3BvX2dlb21ldHJ5IHNlYXJjaCBzZWNfdG9fdGltZSBzZWNvbmQgc2Vjb25kcyBzZWN0aW9uIHNlY3VyZWZpbGUgc2VjdXJpdHkgc2VlZCBzZWdtZW50IHNlbGVjdCAnICtcbiAgICAgICAgICAgICdzZWxmIHNlbWkgc2VxdWVuY2Ugc2VxdWVudGlhbCBzZXJpYWxpemFibGUgc2VydmVyIHNlcnZlcmVycm9yIHNlc3Npb24gc2Vzc2lvbl91c2VyIHNlc3Npb25zX3Blcl91c2VyIHNldCAnICtcbiAgICAgICAgICAgICdzZXRzIHNldHRpbmdzIHNoYSBzaGExIHNoYTIgc2hhcmUgc2hhcmVkIHNoYXJlZF9wb29sIHNob3J0IHNob3cgc2hyaW5rIHNodXRkb3duIHNpX2F2ZXJhZ2Vjb2xvciAnICtcbiAgICAgICAgICAgICdzaV9jb2xvcmhpc3RvZ3JhbSBzaV9mZWF0dXJlbGlzdCBzaV9wb3NpdGlvbmFsY29sb3Igc2lfc3RpbGxpbWFnZSBzaV90ZXh0dXJlIHNpYmxpbmdzIHNpZCBzaWduIHNpbiAnICtcbiAgICAgICAgICAgICdzaXplIHNpemVfdCBzaXplcyBza2lwIHNsYXZlIHNsZWVwIHNtYWxsZGF0ZXRpbWVmcm9tcGFydHMgc21hbGxmaWxlIHNuYXBzaG90IHNvbWUgc29uYW1lIHNvcnQgc291bmRleCAnICtcbiAgICAgICAgICAgICdzb3VyY2Ugc3BhY2Ugc3BhcnNlIHNwZmlsZSBzcGxpdCBzcWwgc3FsX2JpZ19yZXN1bHQgc3FsX2J1ZmZlcl9yZXN1bHQgc3FsX2NhY2hlIHNxbF9jYWxjX2ZvdW5kX3Jvd3MgJyArXG4gICAgICAgICAgICAnc3FsX3NtYWxsX3Jlc3VsdCBzcWxfdmFyaWFudF9wcm9wZXJ0eSBzcWxjb2RlIHNxbGRhdGEgc3FsZXJyb3Igc3FsbmFtZSBzcWxzdGF0ZSBzcXJ0IHNxdWFyZSBzdGFuZGFsb25lICcgK1xuICAgICAgICAgICAgJ3N0YW5kYnkgc3RhcnQgc3RhcnRpbmcgc3RhcnR1cCBzdGF0ZW1lbnQgc3RhdGljIHN0YXRpc3RpY3Mgc3RhdHNfYmlub21pYWxfdGVzdCBzdGF0c19jcm9zc3RhYiAnICtcbiAgICAgICAgICAgICdzdGF0c19rc190ZXN0IHN0YXRzX21vZGUgc3RhdHNfbXdfdGVzdCBzdGF0c19vbmVfd2F5X2Fub3ZhIHN0YXRzX3RfdGVzdF8gc3RhdHNfdF90ZXN0X2luZGVwICcgK1xuICAgICAgICAgICAgJ3N0YXRzX3RfdGVzdF9vbmUgc3RhdHNfdF90ZXN0X3BhaXJlZCBzdGF0c193c3JfdGVzdCBzdGF0dXMgc3RkIHN0ZGRldiBzdGRkZXZfcG9wIHN0ZGRldl9zYW1wIHN0ZGV2ICcgK1xuICAgICAgICAgICAgJ3N0b3Agc3RvcmFnZSBzdG9yZSBzdG9yZWQgc3RyIHN0cl90b19kYXRlIHN0cmFpZ2h0X2pvaW4gc3RyY21wIHN0cmljdCBzdHJpbmcgc3RydWN0IHN0dWZmIHN0eWxlIHN1YmRhdGUgJyArXG4gICAgICAgICAgICAnc3VicGFydGl0aW9uIHN1YnBhcnRpdGlvbnMgc3Vic3RpdHV0YWJsZSBzdWJzdHIgc3Vic3RyaW5nIHN1YnRpbWUgc3VidHJpbmdfaW5kZXggc3VidHlwZSBzdWNjZXNzIHN1bSAnICtcbiAgICAgICAgICAgICdzdXNwZW5kIHN3aXRjaCBzd2l0Y2hvZmZzZXQgc3dpdGNob3ZlciBzeW5jIHN5bmNocm9ub3VzIHN5bm9ueW0gc3lzIHN5c194bWxhZ2cgc3lzYXNtIHN5c2F1eCBzeXNkYXRlICcgK1xuICAgICAgICAgICAgJ3N5c2RhdGV0aW1lb2Zmc2V0IHN5c2RiYSBzeXNvcGVyIHN5c3RlbSBzeXN0ZW1fdXNlciBzeXN1dGNkYXRldGltZSB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YWJsZXNhbXBsZSB0YW4gdGRvICcgK1xuICAgICAgICAgICAgJ3RlbXBsYXRlIHRlbXBvcmFyeSB0ZXJtaW5hdGVkIHRlcnRpYXJ5X3dlaWdodHMgdGVzdCB0aGFuIHRoZW4gdGhyZWFkIHRocm91Z2ggdGllciB0aWVzIHRpbWUgdGltZV9mb3JtYXQgJyArXG4gICAgICAgICAgICAndGltZV96b25lIHRpbWVkaWZmIHRpbWVmcm9tcGFydHMgdGltZW91dCB0aW1lc3RhbXAgdGltZXN0YW1wYWRkIHRpbWVzdGFtcGRpZmYgdGltZXpvbmVfYWJiciAnICtcbiAgICAgICAgICAgICd0aW1lem9uZV9taW51dGUgdGltZXpvbmVfcmVnaW9uIHRvIHRvX2Jhc2U2NCB0b19kYXRlIHRvX2RheXMgdG9fc2Vjb25kcyB0b2RhdGV0aW1lb2Zmc2V0IHRyYWNlIHRyYWNraW5nICcgK1xuICAgICAgICAgICAgJ3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uYWwgdHJhbnNsYXRlIHRyYW5zbGF0aW9uIHRyZWF0IHRyaWdnZXIgdHJpZ2dlcl9uZXN0bGV2ZWwgdHJpZ2dlcnMgdHJpbSB0cnVuY2F0ZSAnICtcbiAgICAgICAgICAgICd0cnlfY2FzdCB0cnlfY29udmVydCB0cnlfcGFyc2UgdHlwZSB1YjEgdWIyIHViNCB1Y2FzZSB1bmFyY2hpdmVkIHVuYm91bmRlZCB1bmNvbXByZXNzICcgK1xuICAgICAgICAgICAgJ3VuZGVyIHVuZG8gdW5oZXggdW5pY29kZSB1bmlmb3JtIHVuaW5zdGFsbCB1bmlvbiB1bmlxdWUgdW5peF90aW1lc3RhbXAgdW5rbm93biB1bmxpbWl0ZWQgdW5sb2NrIHVubmVzdCB1bnBpdm90ICcgK1xuICAgICAgICAgICAgJ3VucmVjb3ZlcmFibGUgdW5zYWZlIHVuc2lnbmVkIHVudGlsIHVudHJ1c3RlZCB1bnVzYWJsZSB1bnVzZWQgdXBkYXRlIHVwZGF0ZWQgdXBncmFkZSB1cHBlZCB1cHBlciB1cHNlcnQgJyArXG4gICAgICAgICAgICAndXJsIHVyb3dpZCB1c2FibGUgdXNhZ2UgdXNlIHVzZV9zdG9yZWRfb3V0bGluZXMgdXNlciB1c2VyX2RhdGEgdXNlcl9yZXNvdXJjZXMgdXNlcnMgdXNpbmcgdXRjX2RhdGUgJyArXG4gICAgICAgICAgICAndXRjX3RpbWVzdGFtcCB1dWlkIHV1aWRfc2hvcnQgdmFsaWRhdGUgdmFsaWRhdGVfcGFzc3dvcmRfc3RyZW5ndGggdmFsaWRhdGlvbiB2YWxpc3QgdmFsdWUgdmFsdWVzIHZhciAnICtcbiAgICAgICAgICAgICd2YXJfc2FtcCB2YXJjaGFyYyB2YXJpIHZhcmlhIHZhcmlhYiB2YXJpYWJsIHZhcmlhYmxlIHZhcmlhYmxlcyB2YXJpYW5jZSB2YXJwIHZhcnJhdyB2YXJyYXdjIHZhcnJheSAnICtcbiAgICAgICAgICAgICd2ZXJpZnkgdmVyc2lvbiB2ZXJzaW9ucyB2aWV3IHZpcnR1YWwgdmlzaWJsZSB2b2lkIHdhaXQgd2FsbGV0IHdhcm5pbmcgd2FybmluZ3Mgd2VlayB3ZWVrZGF5IHdlZWtvZnllYXIgJyArXG4gICAgICAgICAgICAnd2VsbGZvcm1lZCB3aGVuIHdoZW5lIHdoZW5ldiB3aGVuZXZlIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdoaXRlc3BhY2Ugd2luZG93IHdpdGggd2l0aGluIHdpdGhvdXQgd29yayB3cmFwcGVkICcgK1xuICAgICAgICAgICAgJ3hkYiB4bWwgeG1sYWdnIHhtbGF0dHJpYnV0ZXMgeG1sY2FzdCB4bWxjb2xhdHR2YWwgeG1sZWxlbWVudCB4bWxleGlzdHMgeG1sZm9yZXN0IHhtbGluZGV4IHhtbG5hbWVzcGFjZXMgJyArXG4gICAgICAgICAgICAneG1scGkgeG1scXVlcnkgeG1scm9vdCB4bWxzY2hlbWEgeG1sc2VyaWFsaXplIHhtbHRhYmxlIHhtbHR5cGUgeG9yIHllYXIgeWVhcl90b19tb250aCB5ZWFycyB5ZWFyd2VlaycsXG4gICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5rbm93bicsXG4gICAgICAgICAgYnVpbHRfaW46XG4gICAgICAgICAgICAnYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sIGJvb2xlYW4gY2hhciBjaGFyYWN0ZXIgZGF0ZSBkZWMgZGVjaW1hbCBmbG9hdCBpbnQgaW50OCBpbnRlZ2VyIGludGVydmFsIG51bWJlciAnICtcbiAgICAgICAgICAgICdudW1lcmljIHJlYWwgcmVjb3JkIHNlcmlhbCBzZXJpYWw4IHNtYWxsaW50IHRleHQgdGltZSB0aW1lc3RhbXAgdGlueWludCB2YXJjaGFyIHZhcmNoYXIyIHZhcnlpbmcgdm9pZCdcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7YmVnaW46ICdcXCdcXCcnfV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIENPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIHZhcmlhYmxlIG5hbWVzIGNhbm5vdCBjb25mbGljdCB3aXRoIGJsb2NrIGlkZW50aWZpZXJzXG4gIHZhciBCTE9DS1MgPSBbXG4gICAgJ2Z1bmN0aW9ucycsXG4gICAgJ21vZGVsJyxcbiAgICAnZGF0YScsXG4gICAgJ3BhcmFtZXRlcnMnLFxuICAgICdxdWFudGl0aWVzJyxcbiAgICAndHJhbnNmb3JtZWQnLFxuICAgICdnZW5lcmF0ZWQnXG4gIF07XG4gIHZhciBTVEFURU1FTlRTID0gW1xuICAgICdmb3InLFxuICAgICdpbicsXG4gICAgJ2lmJyxcbiAgICAnZWxzZScsXG4gICAgJ3doaWxlJyxcbiAgICAnYnJlYWsnLFxuICAgICdjb250aW51ZScsXG4gICAgJ3JldHVybidcbiAgXTtcbiAgdmFyIFNQRUNJQUxfRlVOQ1RJT05TID0gW1xuICAgICdwcmludCcsXG4gICAgJ3JlamVjdCcsXG4gICAgJ2luY3JlbWVudF9sb2dfcHJvYnwxMCcsXG4gICAgJ2ludGVncmF0ZV9vZGV8MTAnLFxuICAgICdpbnRlZ3JhdGVfb2RlX3JrNDV8MTAnLFxuICAgICdpbnRlZ3JhdGVfb2RlX2JkZnwxMCcsXG4gICAgJ2FsZ2VicmFfc29sdmVyJ1xuICBdO1xuICB2YXIgVkFSX1RZUEVTID0gW1xuICAgICdpbnQnLFxuICAgICdyZWFsJyxcbiAgICAndmVjdG9yJyxcbiAgICAnb3JkZXJlZCcsXG4gICAgJ3Bvc2l0aXZlX29yZGVyZWQnLFxuICAgICdzaW1wbGV4JyxcbiAgICAndW5pdF92ZWN0b3InLFxuICAgICdyb3dfdmVjdG9yJyxcbiAgICAnbWF0cml4JyxcbiAgICAnY2hvbGVza3lfZmFjdG9yX2NvcnJ8MTAnLFxuICAgICdjaG9sZXNreV9mYWN0b3JfY292fDEwJyxcbiAgICAnY29ycl9tYXRyaXh8MTAnLFxuICAgICdjb3ZfbWF0cml4fDEwJyxcbiAgICAndm9pZCdcbiAgXTtcbiAgdmFyIEZVTkNUSU9OUyA9IFtcbiAgICAnUGhpJywgJ1BoaV9hcHByb3gnLCAnYWJzJywgJ2Fjb3MnLCAnYWNvc2gnLCAnYWxnZWJyYV9zb2x2ZXInLCAnYXBwZW5kX2FycmF5JyxcbiAgICAnYXBwZW5kX2NvbCcsICdhcHBlbmRfcm93JywgJ2FzaW4nLCAnYXNpbmgnLCAnYXRhbicsICdhdGFuMicsICdhdGFuaCcsXG4gICAgJ2Jlcm5vdWxsaV9jZGYnLCAnYmVybm91bGxpX2xjY2RmJywgJ2Jlcm5vdWxsaV9sY2RmJywgJ2Jlcm5vdWxsaV9sb2dpdF9scG1mJyxcbiAgICAnYmVybm91bGxpX2xvZ2l0X3JuZycsICdiZXJub3VsbGlfbHBtZicsICdiZXJub3VsbGlfcm5nJywgJ2Jlc3NlbF9maXJzdF9raW5kJyxcbiAgICAnYmVzc2VsX3NlY29uZF9raW5kJywgJ2JldGFfYmlub21pYWxfY2RmJywgJ2JldGFfYmlub21pYWxfbGNjZGYnLFxuICAgICdiZXRhX2Jpbm9taWFsX2xjZGYnLCAnYmV0YV9iaW5vbWlhbF9scG1mJywgJ2JldGFfYmlub21pYWxfcm5nJywgJ2JldGFfY2RmJyxcbiAgICAnYmV0YV9sY2NkZicsICdiZXRhX2xjZGYnLCAnYmV0YV9scGRmJywgJ2JldGFfcm5nJywgJ2JpbmFyeV9sb2dfbG9zcycsXG4gICAgJ2Jpbm9taWFsX2NkZicsICdiaW5vbWlhbF9jb2VmZmljaWVudF9sb2cnLCAnYmlub21pYWxfbGNjZGYnLCAnYmlub21pYWxfbGNkZicsXG4gICAgJ2Jpbm9taWFsX2xvZ2l0X2xwbWYnLCAnYmlub21pYWxfbHBtZicsICdiaW5vbWlhbF9ybmcnLCAnYmxvY2snLFxuICAgICdjYXRlZ29yaWNhbF9sb2dpdF9scG1mJywgJ2NhdGVnb3JpY2FsX2xvZ2l0X3JuZycsICdjYXRlZ29yaWNhbF9scG1mJyxcbiAgICAnY2F0ZWdvcmljYWxfcm5nJywgJ2NhdWNoeV9jZGYnLCAnY2F1Y2h5X2xjY2RmJywgJ2NhdWNoeV9sY2RmJywgJ2NhdWNoeV9scGRmJyxcbiAgICAnY2F1Y2h5X3JuZycsICdjYnJ0JywgJ2NlaWwnLCAnY2hpX3NxdWFyZV9jZGYnLCAnY2hpX3NxdWFyZV9sY2NkZicsXG4gICAgJ2NoaV9zcXVhcmVfbGNkZicsICdjaGlfc3F1YXJlX2xwZGYnLCAnY2hpX3NxdWFyZV9ybmcnLCAnY2hvbGVza3lfZGVjb21wb3NlJyxcbiAgICAnY2hvb3NlJywgJ2NvbCcsICdjb2xzJywgJ2NvbHVtbnNfZG90X3Byb2R1Y3QnLCAnY29sdW1uc19kb3Rfc2VsZicsICdjb3MnLFxuICAgICdjb3NoJywgJ2Nvdl9leHBfcXVhZCcsICdjcm9zc3Byb2QnLCAnY3NyX2V4dHJhY3RfdScsICdjc3JfZXh0cmFjdF92JyxcbiAgICAnY3NyX2V4dHJhY3RfdycsICdjc3JfbWF0cml4X3RpbWVzX3ZlY3RvcicsICdjc3JfdG9fZGVuc2VfbWF0cml4JyxcbiAgICAnY3VtdWxhdGl2ZV9zdW0nLCAnZGV0ZXJtaW5hbnQnLCAnZGlhZ19tYXRyaXgnLCAnZGlhZ19wb3N0X211bHRpcGx5JyxcbiAgICAnZGlhZ19wcmVfbXVsdGlwbHknLCAnZGlhZ29uYWwnLCAnZGlnYW1tYScsICdkaW1zJywgJ2RpcmljaGxldF9scGRmJyxcbiAgICAnZGlyaWNobGV0X3JuZycsICdkaXN0YW5jZScsICdkb3RfcHJvZHVjdCcsICdkb3Rfc2VsZicsXG4gICAgJ2RvdWJsZV9leHBvbmVudGlhbF9jZGYnLCAnZG91YmxlX2V4cG9uZW50aWFsX2xjY2RmJywgJ2RvdWJsZV9leHBvbmVudGlhbF9sY2RmJyxcbiAgICAnZG91YmxlX2V4cG9uZW50aWFsX2xwZGYnLCAnZG91YmxlX2V4cG9uZW50aWFsX3JuZycsICdlJywgJ2VpZ2VudmFsdWVzX3N5bScsXG4gICAgJ2VpZ2VudmVjdG9yc19zeW0nLCAnZXJmJywgJ2VyZmMnLCAnZXhwJywgJ2V4cDInLCAnZXhwX21vZF9ub3JtYWxfY2RmJyxcbiAgICAnZXhwX21vZF9ub3JtYWxfbGNjZGYnLCAnZXhwX21vZF9ub3JtYWxfbGNkZicsICdleHBfbW9kX25vcm1hbF9scGRmJyxcbiAgICAnZXhwX21vZF9ub3JtYWxfcm5nJywgJ2V4cG0xJywgJ2V4cG9uZW50aWFsX2NkZicsICdleHBvbmVudGlhbF9sY2NkZicsXG4gICAgJ2V4cG9uZW50aWFsX2xjZGYnLCAnZXhwb25lbnRpYWxfbHBkZicsICdleHBvbmVudGlhbF9ybmcnLCAnZmFicycsXG4gICAgJ2ZhbGxpbmdfZmFjdG9yaWFsJywgJ2ZkaW0nLCAnZmxvb3InLCAnZm1hJywgJ2ZtYXgnLCAnZm1pbicsICdmbW9kJyxcbiAgICAnZnJlY2hldF9jZGYnLCAnZnJlY2hldF9sY2NkZicsICdmcmVjaGV0X2xjZGYnLCAnZnJlY2hldF9scGRmJywgJ2ZyZWNoZXRfcm5nJyxcbiAgICAnZ2FtbWFfY2RmJywgJ2dhbW1hX2xjY2RmJywgJ2dhbW1hX2xjZGYnLCAnZ2FtbWFfbHBkZicsICdnYW1tYV9wJywgJ2dhbW1hX3EnLFxuICAgICdnYW1tYV9ybmcnLCAnZ2F1c3NpYW5fZGxtX29ic19scGRmJywgJ2dldF9scCcsICdndW1iZWxfY2RmJywgJ2d1bWJlbF9sY2NkZicsXG4gICAgJ2d1bWJlbF9sY2RmJywgJ2d1bWJlbF9scGRmJywgJ2d1bWJlbF9ybmcnLCAnaGVhZCcsICdoeXBlcmdlb21ldHJpY19scG1mJyxcbiAgICAnaHlwZXJnZW9tZXRyaWNfcm5nJywgJ2h5cG90JywgJ2luY19iZXRhJywgJ2ludF9zdGVwJywgJ2ludGVncmF0ZV9vZGUnLFxuICAgICdpbnRlZ3JhdGVfb2RlX2JkZicsICdpbnRlZ3JhdGVfb2RlX3JrNDUnLCAnaW52JywgJ2ludl9QaGknLFxuICAgICdpbnZfY2hpX3NxdWFyZV9jZGYnLCAnaW52X2NoaV9zcXVhcmVfbGNjZGYnLCAnaW52X2NoaV9zcXVhcmVfbGNkZicsXG4gICAgJ2ludl9jaGlfc3F1YXJlX2xwZGYnLCAnaW52X2NoaV9zcXVhcmVfcm5nJywgJ2ludl9jbG9nbG9nJywgJ2ludl9nYW1tYV9jZGYnLFxuICAgICdpbnZfZ2FtbWFfbGNjZGYnLCAnaW52X2dhbW1hX2xjZGYnLCAnaW52X2dhbW1hX2xwZGYnLCAnaW52X2dhbW1hX3JuZycsXG4gICAgJ2ludl9sb2dpdCcsICdpbnZfc3FydCcsICdpbnZfc3F1YXJlJywgJ2ludl93aXNoYXJ0X2xwZGYnLCAnaW52X3dpc2hhcnRfcm5nJyxcbiAgICAnaW52ZXJzZScsICdpbnZlcnNlX3NwZCcsICdpc19pbmYnLCAnaXNfbmFuJywgJ2xiZXRhJywgJ2xjaG9vc2UnLCAnbGdhbW1hJyxcbiAgICAnbGtqX2NvcnJfY2hvbGVza3lfbHBkZicsICdsa2pfY29ycl9jaG9sZXNreV9ybmcnLCAnbGtqX2NvcnJfbHBkZicsXG4gICAgJ2xral9jb3JyX3JuZycsICdsbWdhbW1hJywgJ2xtdWx0aXBseScsICdsb2cnLCAnbG9nMTAnLCAnbG9nMW0nLCAnbG9nMW1fZXhwJyxcbiAgICAnbG9nMW1faW52X2xvZ2l0JywgJ2xvZzFwJywgJ2xvZzFwX2V4cCcsICdsb2cyJywgJ2xvZ19kZXRlcm1pbmFudCcsXG4gICAgJ2xvZ19kaWZmX2V4cCcsICdsb2dfZmFsbGluZ19mYWN0b3JpYWwnLCAnbG9nX2ludl9sb2dpdCcsICdsb2dfbWl4JyxcbiAgICAnbG9nX3Jpc2luZ19mYWN0b3JpYWwnLCAnbG9nX3NvZnRtYXgnLCAnbG9nX3N1bV9leHAnLCAnbG9naXN0aWNfY2RmJyxcbiAgICAnbG9naXN0aWNfbGNjZGYnLCAnbG9naXN0aWNfbGNkZicsICdsb2dpc3RpY19scGRmJywgJ2xvZ2lzdGljX3JuZycsICdsb2dpdCcsXG4gICAgJ2xvZ25vcm1hbF9jZGYnLCAnbG9nbm9ybWFsX2xjY2RmJywgJ2xvZ25vcm1hbF9sY2RmJywgJ2xvZ25vcm1hbF9scGRmJyxcbiAgICAnbG9nbm9ybWFsX3JuZycsICdtYWNoaW5lX3ByZWNpc2lvbicsICdtYXRyaXhfZXhwJywgJ21heCcsICdtZGl2aWRlX2xlZnRfc3BkJyxcbiAgICAnbWRpdmlkZV9sZWZ0X3RyaV9sb3cnLCAnbWRpdmlkZV9yaWdodF9zcGQnLCAnbWRpdmlkZV9yaWdodF90cmlfbG93JywgJ21lYW4nLFxuICAgICdtaW4nLCAnbW9kaWZpZWRfYmVzc2VsX2ZpcnN0X2tpbmQnLCAnbW9kaWZpZWRfYmVzc2VsX3NlY29uZF9raW5kJyxcbiAgICAnbXVsdGlfZ3BfY2hvbGVza3lfbHBkZicsICdtdWx0aV9ncF9scGRmJywgJ211bHRpX25vcm1hbF9jaG9sZXNreV9scGRmJyxcbiAgICAnbXVsdGlfbm9ybWFsX2Nob2xlc2t5X3JuZycsICdtdWx0aV9ub3JtYWxfbHBkZicsICdtdWx0aV9ub3JtYWxfcHJlY19scGRmJyxcbiAgICAnbXVsdGlfbm9ybWFsX3JuZycsICdtdWx0aV9zdHVkZW50X3RfbHBkZicsICdtdWx0aV9zdHVkZW50X3Rfcm5nJyxcbiAgICAnbXVsdGlub21pYWxfbHBtZicsICdtdWx0aW5vbWlhbF9ybmcnLCAnbXVsdGlwbHlfbG9nJyxcbiAgICAnbXVsdGlwbHlfbG93ZXJfdHJpX3NlbGZfdHJhbnNwb3NlJywgJ25lZ19iaW5vbWlhbF8yX2NkZicsXG4gICAgJ25lZ19iaW5vbWlhbF8yX2xjY2RmJywgJ25lZ19iaW5vbWlhbF8yX2xjZGYnLCAnbmVnX2Jpbm9taWFsXzJfbG9nX2xwbWYnLFxuICAgICduZWdfYmlub21pYWxfMl9sb2dfcm5nJywgJ25lZ19iaW5vbWlhbF8yX2xwbWYnLCAnbmVnX2Jpbm9taWFsXzJfcm5nJyxcbiAgICAnbmVnX2Jpbm9taWFsX2NkZicsICduZWdfYmlub21pYWxfbGNjZGYnLCAnbmVnX2Jpbm9taWFsX2xjZGYnLFxuICAgICduZWdfYmlub21pYWxfbHBtZicsICduZWdfYmlub21pYWxfcm5nJywgJ25lZ2F0aXZlX2luZmluaXR5JywgJ25vcm1hbF9jZGYnLFxuICAgICdub3JtYWxfbGNjZGYnLCAnbm9ybWFsX2xjZGYnLCAnbm9ybWFsX2xwZGYnLCAnbm9ybWFsX3JuZycsICdub3RfYV9udW1iZXInLFxuICAgICdudW1fZWxlbWVudHMnLCAnb3JkZXJlZF9sb2dpc3RpY19scG1mJywgJ29yZGVyZWRfbG9naXN0aWNfcm5nJywgJ293ZW5zX3QnLFxuICAgICdwYXJldG9fY2RmJywgJ3BhcmV0b19sY2NkZicsICdwYXJldG9fbGNkZicsICdwYXJldG9fbHBkZicsICdwYXJldG9fcm5nJyxcbiAgICAncGFyZXRvX3R5cGVfMl9jZGYnLCAncGFyZXRvX3R5cGVfMl9sY2NkZicsICdwYXJldG9fdHlwZV8yX2xjZGYnLFxuICAgICdwYXJldG9fdHlwZV8yX2xwZGYnLCAncGFyZXRvX3R5cGVfMl9ybmcnLCAncGknLCAncG9pc3Nvbl9jZGYnLCAncG9pc3Nvbl9sY2NkZicsXG4gICAgJ3BvaXNzb25fbGNkZicsICdwb2lzc29uX2xvZ19scG1mJywgJ3BvaXNzb25fbG9nX3JuZycsICdwb2lzc29uX2xwbWYnLFxuICAgICdwb2lzc29uX3JuZycsICdwb3NpdGl2ZV9pbmZpbml0eScsICdwb3cnLCAncHJpbnQnLCAncHJvZCcsICdxcl9RJywgJ3FyX1InLFxuICAgICdxdWFkX2Zvcm0nLCAncXVhZF9mb3JtX2RpYWcnLCAncXVhZF9mb3JtX3N5bScsICdyYW5rJywgJ3JheWxlaWdoX2NkZicsXG4gICAgJ3JheWxlaWdoX2xjY2RmJywgJ3JheWxlaWdoX2xjZGYnLCAncmF5bGVpZ2hfbHBkZicsICdyYXlsZWlnaF9ybmcnLCAncmVqZWN0JyxcbiAgICAncmVwX2FycmF5JywgJ3JlcF9tYXRyaXgnLCAncmVwX3Jvd192ZWN0b3InLCAncmVwX3ZlY3RvcicsICdyaXNpbmdfZmFjdG9yaWFsJyxcbiAgICAncm91bmQnLCAncm93JywgJ3Jvd3MnLCAncm93c19kb3RfcHJvZHVjdCcsICdyb3dzX2RvdF9zZWxmJyxcbiAgICAnc2NhbGVkX2ludl9jaGlfc3F1YXJlX2NkZicsICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbGNjZGYnLFxuICAgICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbGNkZicsICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbHBkZicsXG4gICAgJ3NjYWxlZF9pbnZfY2hpX3NxdWFyZV9ybmcnLCAnc2QnLCAnc2VnbWVudCcsICdzaW4nLCAnc2luZ3VsYXJfdmFsdWVzJywgJ3NpbmgnLFxuICAgICdzaXplJywgJ3NrZXdfbm9ybWFsX2NkZicsICdza2V3X25vcm1hbF9sY2NkZicsICdza2V3X25vcm1hbF9sY2RmJyxcbiAgICAnc2tld19ub3JtYWxfbHBkZicsICdza2V3X25vcm1hbF9ybmcnLCAnc29mdG1heCcsICdzb3J0X2FzYycsICdzb3J0X2Rlc2MnLFxuICAgICdzb3J0X2luZGljZXNfYXNjJywgJ3NvcnRfaW5kaWNlc19kZXNjJywgJ3NxcnQnLCAnc3FydDInLCAnc3F1YXJlJyxcbiAgICAnc3F1YXJlZF9kaXN0YW5jZScsICdzdGVwJywgJ3N0dWRlbnRfdF9jZGYnLCAnc3R1ZGVudF90X2xjY2RmJyxcbiAgICAnc3R1ZGVudF90X2xjZGYnLCAnc3R1ZGVudF90X2xwZGYnLCAnc3R1ZGVudF90X3JuZycsICdzdWJfY29sJywgJ3N1Yl9yb3cnLFxuICAgICdzdW0nLCAndGFpbCcsICd0YW4nLCAndGFuaCcsICd0YXJnZXQnLCAndGNyb3NzcHJvZCcsICd0Z2FtbWEnLCAndG9fYXJyYXlfMWQnLFxuICAgICd0b19hcnJheV8yZCcsICd0b19tYXRyaXgnLCAndG9fcm93X3ZlY3RvcicsICd0b192ZWN0b3InLCAndHJhY2UnLFxuICAgICd0cmFjZV9nZW5fcXVhZF9mb3JtJywgJ3RyYWNlX3F1YWRfZm9ybScsICd0cmlnYW1tYScsICd0cnVuYycsICd1bmlmb3JtX2NkZicsXG4gICAgJ3VuaWZvcm1fbGNjZGYnLCAndW5pZm9ybV9sY2RmJywgJ3VuaWZvcm1fbHBkZicsICd1bmlmb3JtX3JuZycsICd2YXJpYW5jZScsXG4gICAgJ3Zvbl9taXNlc19scGRmJywgJ3Zvbl9taXNlc19ybmcnLCAnd2VpYnVsbF9jZGYnLCAnd2VpYnVsbF9sY2NkZicsXG4gICAgJ3dlaWJ1bGxfbGNkZicsICd3ZWlidWxsX2xwZGYnLCAnd2VpYnVsbF9ybmcnLCAnd2llbmVyX2xwZGYnLCAnd2lzaGFydF9scGRmJyxcbiAgICAnd2lzaGFydF9ybmcnXG4gIF07XG4gIHZhciBESVNUUklCVVRJT05TID0gW1xuICAgICdiZXJub3VsbGknLCAnYmVybm91bGxpX2xvZ2l0JywgJ2JldGEnLCAnYmV0YV9iaW5vbWlhbCcsICdiaW5vbWlhbCcsXG4gICAgJ2Jpbm9taWFsX2xvZ2l0JywgJ2NhdGVnb3JpY2FsJywgJ2NhdGVnb3JpY2FsX2xvZ2l0JywgJ2NhdWNoeScsICdjaGlfc3F1YXJlJyxcbiAgICAnZGlyaWNobGV0JywgJ2RvdWJsZV9leHBvbmVudGlhbCcsICdleHBfbW9kX25vcm1hbCcsICdleHBvbmVudGlhbCcsICdmcmVjaGV0JyxcbiAgICAnZ2FtbWEnLCAnZ2F1c3NpYW5fZGxtX29icycsICdndW1iZWwnLCAnaHlwZXJnZW9tZXRyaWMnLCAnaW52X2NoaV9zcXVhcmUnLFxuICAgICdpbnZfZ2FtbWEnLCAnaW52X3dpc2hhcnQnLCAnbGtqX2NvcnInLCAnbGtqX2NvcnJfY2hvbGVza3knLCAnbG9naXN0aWMnLFxuICAgICdsb2dub3JtYWwnLCAnbXVsdGlfZ3AnLCAnbXVsdGlfZ3BfY2hvbGVza3knLCAnbXVsdGlfbm9ybWFsJyxcbiAgICAnbXVsdGlfbm9ybWFsX2Nob2xlc2t5JywgJ211bHRpX25vcm1hbF9wcmVjJywgJ211bHRpX3N0dWRlbnRfdCcsICdtdWx0aW5vbWlhbCcsXG4gICAgJ25lZ19iaW5vbWlhbCcsICduZWdfYmlub21pYWxfMicsICduZWdfYmlub21pYWxfMl9sb2cnLCAnbm9ybWFsJyxcbiAgICAnb3JkZXJlZF9sb2dpc3RpYycsICdwYXJldG8nLCAncGFyZXRvX3R5cGVfMicsICdwb2lzc29uJywgJ3BvaXNzb25fbG9nJyxcbiAgICAncmF5bGVpZ2gnLCAnc2NhbGVkX2ludl9jaGlfc3F1YXJlJywgJ3NrZXdfbm9ybWFsJywgJ3N0dWRlbnRfdCcsICd1bmlmb3JtJyxcbiAgICAndm9uX21pc2VzJywgJ3dlaWJ1bGwnLCAnd2llbmVyJywgJ3dpc2hhcnQnXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3N0YW5mdW5jcyddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAndGl0bGUnOiBCTE9DS1Muam9pbignICcpLFxuICAgICAgJ2tleXdvcmQnOiBTVEFURU1FTlRTLmNvbmNhdChWQVJfVFlQRVMpLmNvbmNhdChTUEVDSUFMX0ZVTkNUSU9OUykuam9pbignICcpLFxuICAgICAgJ2J1aWx0X2luJzogRlVOQ1RJT05TLmpvaW4oJyAnKVxuICAgIH0sXG4gICAgbGV4ZW1lczogaGxqcy5JREVOVF9SRSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvIy8sXG4gICAgICAgIC8kLyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgJ21ldGEta2V5d29yZCc6ICdpbmNsdWRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgL1xcL1xcKi8sXG4gICAgICAgIC9cXCpcXC8vLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIC8vIGhpZ2hsaWdodCBkb2Mgc3RyaW5ncyBtZW50aW9uZWQgaW4gU3RhbiByZWZlcmVuY2VcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogL0AocmV0dXJufHBhcmFtKS9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIC8vIGhhY2s6IGluIHJhbmdlIGNvbnN0cmFpbnRzLCBsb3dlciBtdXN0IGZvbGxvdyBcIjxcIlxuICAgICAgICBiZWdpbjogLzxcXHMqbG93ZXJcXHMqPS8sXG4gICAgICAgIGtleXdvcmRzOiAnbG93ZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBoYWNrOiBpbiByYW5nZSBjb25zdHJhaW50cywgdXBwZXIgbXVzdCBmb2xsb3cgZWl0aGVyICwgb3IgPFxuICAgICAgICAvLyA8bG93ZXIgPSAuLi4sIHVwcGVyID0gLi4uPiBvciA8dXBwZXIgPSAuLi4+XG4gICAgICAgIGJlZ2luOiAvWzwsXSp1cHBlclxccyo9LyxcbiAgICAgICAga2V5d29yZHM6ICd1cHBlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogL1xcYnRhcmdldFxccypcXCs9LyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd+XFxcXHMqKCcgKyBobGpzLklERU5UX1JFICsgJylcXFxccypcXFxcKCcsXG4gICAgICAgIGtleXdvcmRzOiBESVNUUklCVVRJT05TLmpvaW4oJyAnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYlxcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8vXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcLlxcZCsoPzpbZUVdWystXT9cXGQrKT9cXGIvXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IC8qXG4gIFRoaXMgaXMgYSBmb3JrIGFuZCBtb2RpZmljYXRpb24gb2YgRHJldyBNY0RvbmFsZCdzIGZpbGUgKGh0dHBzOi8vZ2l0aHViLmNvbS9kcmV3bWNkb25hbGQvc3RhdGEtaGlnaGxpZ2h0aW5nKS4gSSBoYXZlIGFsc28gaW5jbHVkZWQgYSBsaXN0IG9mIGJ1aWx0aW4gY29tbWFuZHMgZnJvbSBodHRwczovL2J1Z3Mua2RlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjQ2LlxuKi9cblxuZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZG8nLCAnYWRvJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2lmIGVsc2UgaW4gZm9yZWFjaCBmb3IgZm9ydiBmb3J2YSBmb3J2YWwgZm9ydmFsdSBmb3J2YWx1ZSBmb3J2YWx1ZXMgYnkgYnlzIGJ5c29ydCB4aSBxdWlldGx5IHF1aSBjYXB0dXJlIGFib3V0IGFjIGFjXzcgYWNwcnBsb3QgYWNwcnBsb3RfNyBhZGp1c3QgYWRvIGFkb3BhdGggYWRvdXBkYXRlIGFscGhhIGFtZWFucyBhbiBhbm8gYW5vdiBhbm92YSBhbm92YV9lc3RhdCBhbm92YV90ZXJtcyBhbm92YWRlZiBhb3JkZXIgYXAgYXBwIGFwcGUgYXBwZW4gYXBwZW5kIGFyY2ggYXJjaF9kciBhcmNoX2VzdGF0IGFyY2hfcCBhcmNobG0gYXJlZyBhcmVnX3AgYXJncyBhcmltYSBhcmltYV9kciBhcmltYV9lc3RhdCBhcmltYV9wIGFzIGFzbXByb2JpdCBhc21wcm9iaXRfZXN0YXQgYXNtcHJvYml0X2xmIGFzbXByb2JpdF9tZnhfX2RsZyBhc21wcm9iaXRfcCBhc3MgYXNzZSBhc3NlciBhc3NlcnQgYXZwbG90IGF2cGxvdF83IGF2cGxvdHMgYXZwbG90c183IGJjc2tldzAgYmdvZGZyZXkgYmlhcyBiaW5yZWcgYmlwMF9sZiBiaXBsb3QgYmlwcF9sZiBiaXByX2xmIGJpcHJfcCBiaXByb2JpdCBiaXRlc3QgYml0ZXN0aSBiaXRvd3QgYmxvZ2l0IGJtZW1zaXplIGJvb3QgYm9vdHNhbXAgYm9vdHN0cmFwIGJvb3RzdHJhcF84IGJveGNvX2wgYm94Y29fcCBib3hjb3ggYm94Y294XzYgYm94Y294X3AgYnByb2JpdCBiciBicmVhayBicmllciBicm8gYnJvdyBicm93cyBicm93c2UgYnJyIGJycnN0YXQgYnMgYnNfNyBic2FtcGxfdyBic2FtcGxlIGJzYW1wbGVfNyBic3FyZWcgYnN0YXQgYnN0YXRfNyBic3RhdF84IGJzdHJhcCBic3RyYXBfNyBidWJibGUgYnViYmxlcGxvdCBjYSBjYV9lc3RhdCBjYV9wIGNhYmlwbG90IGNhbWF0IGNhbm9uIGNhbm9uXzggY2Fub25fOF9wIGNhbm9uX2VzdGF0IGNhbm9uX3AgY2FwIGNhcHJvamVjdGlvbiBjYXB0IGNhcHR1IGNhcHR1ciBjYXB0dXJlIGNhdCBjYyBjY2hhcnQgY2NoYXJ0XzcgY2NpIGNkIGNlbnNvYnNfdGFibGUgY2VudGlsZSBjZiBjaGFyIGNoZGlyIGNoZWNrZGxnZmlsZXMgY2hlY2tlc3RpbWF0aW9uc2FtcGxlIGNoZWNraGxwZmlsZXMgY2hlY2tzdW0gY2hlbHAgY2kgY2lpIGNsIGNsYXNzIGNsYXNzdXRpbCBjbGVhciBjbGkgY2xpcyBjbGlzdCBjbG8gY2xvZyBjbG9nX2xmIGNsb2dfcCBjbG9naSBjbG9naV9zdyBjbG9naXQgY2xvZ2l0X2xmIGNsb2dpdF9wIGNsb2dpdHAgY2xvZ2xfc3cgY2xvZ2xvZyBjbG9uZXZhciBjbHNsaXN0YXJyYXkgY2x1c3RlciBjbHVzdGVyX21lYXN1cmVzIGNsdXN0ZXJfc3RvcCBjbHVzdGVyX3RyZWUgY2x1c3Rlcl90cmVlXzggY2x1c3Rlcm1hdCBjbWRsb2cgY25yIGNucmUgY25yZWcgY25yZWdfcCBjbnJlZ19zdyBjbnNyZWcgY29kZWJvb2sgY29sbGFwczQgY29sbGFwc2UgY29sb3JtdWx0X25iIGNvbG9ybXVsdF9udyBjb21wYXJlIGNvbXByZXNzIGNvbmYgY29uZmkgY29uZmlyIGNvbmZpcm0gY29ucmVuIGNvbnMgY29uc3QgY29uc3RyIGNvbnN0cmEgY29uc3RyYWkgY29uc3RyYWluIGNvbnN0cmFpbnQgY29udGludWUgY29udHJhY3QgY29weSBjb3B5cmlnaHQgY29weXNvdXJjZSBjb3IgY29yYyBjb3JyIGNvcnIyZGF0YSBjb3JyX2FudGkgY29ycl9rbW8gY29ycl9zbWMgY29ycmUgY29ycmVsIGNvcnJlbGEgY29ycmVsYXQgY29ycmVsYXRlIGNvcnJncmFtIGNvdSBjb3VuIGNvdW50IGNveCBjb3hfcCBjb3hfc3cgY294YmFzZSBjb3hoYXogY294dmFyIGNwcnBsb3QgY3BycGxvdF83IGNyYyBjcmV0IGNyZXR1IGNyZXR1ciBjcmV0dXJuIGNyb3NzIGNzIGNzY3JpcHQgY3NjcmlwdF9sb2cgY3NpIGN0IGN0X2lzIGN0c2V0IGN0c3RfNSBjdHN0X3N0IGN0dG9zdCBjdW1zcCBjdW1zcF83IGN1bXVsIGN1c3VtIGN1c3VtXzcgY3V0aWwgZHwwIGRhdGFzaWcgZGF0YXNpZ24gZGF0YXNpZ25hIGRhdGFzaWduYXQgZGF0YXNpZ25hdHUgZGF0YXNpZ25hdHVyIGRhdGFzaWduYXR1cmUgZGF0ZXRvZiBkYiBkYmV0YSBkZSBkZWMgZGVjbyBkZWNvZCBkZWNvZGUgZGVmZiBkZXMgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXN0cmluZyBkZmJldGEgZGZnbHMgZGZ1bGxlciBkaSBkaV9nIGRpciBkaXJzdGF0cyBkaXMgZGlzY2FyZCBkaXNwIGRpc3BfcmVzIGRpc3BfcyBkaXNwbCBkaXNwbGEgZGlzcGxheSBkaXN0aW5jdCBkbyBkb2UgZG9lZCBkb2VkaSBkb2VkaXQgZG90cGxvdCBkb3RwbG90XzcgZHByb2JpdCBkcmF3bm9ybSBkcm9wIGRzIGRzX3V0aWwgZHN0ZGl6ZSBkdXBsaWNhdGVzIGR1cmJpbmEgZHdzdGF0IGR5ZHggZXwwIGVkIGVkaSBlZGl0IGVnZW4gZWl2cmVnIGVtZGVmIGVuIGVuYyBlbmNvIGVuY29kIGVuY29kZSBlcSBlcmFzZSBlcmVnIGVyZWdfbGYgZXJlZ19wIGVyZWdfc3cgZXJlZ2hldCBlcmVnaGV0X2dsZiBlcmVnaGV0X2dsZl9zaCBlcmVnaGV0X2dwIGVyZWdoZXRfaWxmIGVyZWdoZXRfaWxmX3NoIGVyZWdoZXRfaXAgZXJldCBlcmV0dSBlcmV0dXIgZXJldHVybiBlcnIgZXJybyBlcnJvciBlc2l6ZSBlc3QgZXN0X2NmZXhpc3QgZXN0X2NmbmFtZSBlc3RfY2xpY2thYmxlIGVzdF9leHBhbmQgZXN0X2hvbGQgZXN0X3RhYmxlIGVzdF91bmhvbGQgZXN0X3VuaG9sZG9rIGVzdGF0IGVzdGF0X2RlZmF1bHQgZXN0YXRfc3VtbSBlc3RhdF92Y2Vfb25seSBlc3RpIGVzdGltYXRlcyBldG9kb3cgZXRvZiBldG9tZHkgZXggZXhpIGV4aXQgZXhwYW5kIGV4cGFuZGNsIGZhYyBmYWN0IGZhY3RvIGZhY3RvciBmYWN0b3JfZXN0YXQgZmFjdG9yX3AgZmFjdG9yX3BjYV9yb3RhdGVkIGZhY3Rvcl9yb3RhdGUgZmFjdG9ybWF0IGZjYXN0IGZjYXN0X2NvbXB1dGUgZmNhc3RfZ3JhcGggZmRhZGVzIGZkYWRlc2MgZmRhZGVzY3IgZmRhZGVzY3JpIGZkYWRlc2NyaWIgZmRhZGVzY3JpYmUgZmRhc2F2IGZkYXNhdmUgZmRhdXNlIGZoX3N0IGZpbGUgb3BlbiBmaWxlIHJlYWQgZmlsZSBjbG9zZSBmaWxlIGZpbGVmaWx0ZXIgZmlsbGluIGZpbmRfaGxwX2ZpbGUgZmluZGZpbGUgZmluZGl0IGZpbmRpdF83IGZpdCBmbCBmbGkgZmxpcyBmbGlzdCBmb3I1XzAgZm9yZXN0IGZvcmVzdHBsb3QgZm9ybSBmb3JtYSBmb3JtYXQgZnByZWRpY3QgZnJhY18xNTQgZnJhY19hZGogZnJhY19jaGsgZnJhY19jb3ggZnJhY19kZHAgZnJhY19kaXMgZnJhY19kdiBmcmFjX2luIGZyYWNfbXVuIGZyYWNfcHAgZnJhY19wcSBmcmFjX3B2IGZyYWNfd2d0IGZyYWNfeG8gZnJhY2dlbiBmcmFjcGxvdCBmcmFjcGxvdF83IGZyYWNwb2x5IGZyYWNwcmVkIGZyb25fZXggZnJvbl9obiBmcm9uX3AgZnJvbl90biBmcm9uX3RuMiBmcm9udGllciBmdG9kYXRlIGZ0b2UgZnRvbWR5IGZ0b3dkYXRlIGZ1bm5lbCBmdW5uZWxwbG90IGd8MCBnYW1oZXRfZ2xmIGdhbWhldF9ncCBnYW1oZXRfaWxmIGdhbWhldF9pcCBnYW1tYSBnYW1tYV9kMiBnYW1tYV9wIGdhbW1hX3N3IGdhbW1haGV0IGdkaV9oZXhhZ29uIGdkaV9zcG9rZXMgZ2UgZ2VuIGdlbmUgZ2VuZXIgZ2VuZXJhIGdlbmVyYXQgZ2VuZXJhdGUgZ2VucmFuayBnZW5zdGQgZ2Vudm1lYW4gZ2V0dG9rZW4gZ2wgZ2xhZGRlciBnbGFkZGVyXzcgZ2xpbV9sMDEgZ2xpbV9sMDIgZ2xpbV9sMDMgZ2xpbV9sMDQgZ2xpbV9sMDUgZ2xpbV9sMDYgZ2xpbV9sMDcgZ2xpbV9sMDggZ2xpbV9sMDkgZ2xpbV9sMTAgZ2xpbV9sMTEgZ2xpbV9sMTIgZ2xpbV9sZiBnbGltX211IGdsaW1fbncxIGdsaW1fbncyIGdsaW1fbnczIGdsaW1fcCBnbGltX3YxIGdsaW1fdjIgZ2xpbV92MyBnbGltX3Y0IGdsaW1fdjUgZ2xpbV92NiBnbGltX3Y3IGdsbSBnbG1fNiBnbG1fcCBnbG1fc3cgZ2xtcHJlZCBnbG8gZ2xvYiBnbG9iYSBnbG9iYWwgZ2xvZ2l0IGdsb2dpdF84IGdsb2dpdF9wIGdtZWFucyBnbmJyZV9sZiBnbmJyZWcgZ25icmVnXzUgZ25icmVnX3AgZ29tcF9sZiBnb21wZV9zdyBnb21wZXJfcCBnb21wZXJ0eiBnb21wZXJ0emhldCBnb21waGV0X2dsZiBnb21waGV0X2dsZl9zaCBnb21waGV0X2dwIGdvbXBoZXRfaWxmIGdvbXBoZXRfaWxmX3NoIGdvbXBoZXRfaXAgZ3BoZG90IGdwaHBlbiBncGhwcmludCBncHJlZnMgZ3Byb2JpX3AgZ3Byb2JpdCBncHJvYml0XzggZ3IgZ3I3IGdyX2NvcHkgZ3JfY3VycmVudCBncl9kYiBncl9kZXNjcmliZSBncl9kaXIgZ3JfZHJhdyBncl9kcmF3X3JlcGxheSBncl9kcm9wIGdyX2VkaXQgZ3JfZWRpdHZpZXdvcHRzIGdyX2V4YW1wbGUgZ3JfZXhhbXBsZTIgZ3JfZXhwb3J0IGdyX3ByaW50IGdyX3FzY2hlbWUgZ3JfcXVlcnkgZ3JfcmVhZCBncl9yZW5hbWUgZ3JfcmVwbGF5IGdyX3NhdmUgZ3Jfc2V0IGdyX3NldHNjaGVtZSBncl90YWJsZSBncl91bmRvIGdyX3VzZSBncmFwaCBncmFwaDcgZ3JlYmFyIGdyZWlnZW4gZ3JlaWdlbl83IGdyZWlnZW5fOCBncm1lYW5ieSBncm1lYW5ieV83IGdzX2ZpbGVpbmZvIGdzX2ZpbGV0eXBlIGdzX2dyYXBoaW5mbyBnc19zdGF0IGdzb3J0IGd3b29kIGh8MCBoYWRpbXZvIGhhcmVnIGhhdXNtYW4gaGF2ZXIgaGUgaGVja19kMiBoZWNrbWFfcCBoZWNrbWFuIGhlY2twX2xmIGhlY2twcl9wIGhlY2twcm9iIGhlbCBoZWxwIGhlcmVnIGhldHByX2xmIGhldHByX3AgaGV0cHJvYiBoZXR0ZXN0IGhleGR1bXAgaGlsaXRlIGhpc3QgaGlzdF83IGhpc3RvZ3JhbSBobG9naXQgaGx1IGhtZWFucyBob3RlbCBob3RlbGxpbmcgaHByb2JpdCBocmVnIGhzZWFyY2ggaWNkOSBpY2Q5X2ZmIGljZDlwIGlpcyBpbXB1dGUgaW10ZXN0IGluYmFzZSBpbmNsdWRlIGluZiBpbmZpIGluZmlsIGluZmlsZSBpbmZpeCBpbnAgaW5wdSBpbnB1dCBpbnMgaW5zaGVldCBpbnNwIGluc3BlIGluc3BlYyBpbnNwZWN0IGludGVnIGludGVuIGludHJlZyBpbnRyZWdfNyBpbnRyZWdfcCBpbnRyZzJfbGwgaW50cmdfbGwgaW50cmdfbGwyIGlwb2xhdGUgaXFyZWcgaXIgaXJmIGlyZl9jcmVhdGUgaXJmbSBpcmkgaXNfc3Z5IGlzX3N2eXN1bSBpc2lkIGlzdGRpemUgaXZwcm9iXzFfbGYgaXZwcm9iX2xmIGl2cHJvYml0IGl2cHJvYml0X3AgaXZyZWcgaXZyZWdfZm9vdG5vdGUgaXZ0b2JfMV9sZiBpdnRvYl9sZiBpdnRvYml0IGl2dG9iaXRfcCBqYWNra25pZmUgamFja25pZmUgamtuaWZlIGprbmlmZV82IGprbmlmZV84IGprc3RhdCBqb2luYnkga2FsYXJtYTEga2FwIGthcF8zIGthcG1laWVyIGthcHBhIGthcHdndCBrZGVuc2l0eSBrZGVuc2l0eV83IGtlZXAga3NtIGtzbWlybm92IGt0YXUga3dhbGxpcyBsfDAgbGEgbGFiIGxhYmJlIGxhYmJlcGxvdCBsYWJlIGxhYmVsIGxhYmVsYm9vayBsYWRkZXIgbGV2ZWxzIGxldmVsc29mIGxldmVyYWdlIGxmaXQgbGZpdF9wIGxpIGxpbmNvbSBsaW5lIGxpbmt0ZXN0IGxpcyBsaXN0IGxsb2doZXRfZ2xmIGxsb2doZXRfZ2xmX3NoIGxsb2doZXRfZ3AgbGxvZ2hldF9pbGYgbGxvZ2hldF9pbGZfc2ggbGxvZ2hldF9pcCBsbG9naV9zdyBsbG9naXNfcCBsbG9naXN0IGxsb2dpc3RpYyBsbG9naXN0aWNoZXQgbG5vcm1fbGYgbG5vcm1fc3cgbG5vcm1hX3AgbG5vcm1hbCBsbm9ybWFsaGV0IGxub3JtaGV0X2dsZiBsbm9ybWhldF9nbGZfc2ggbG5vcm1oZXRfZ3AgbG5vcm1oZXRfaWxmIGxub3JtaGV0X2lsZl9zaCBsbm9ybWhldF9pcCBsbnNrZXcwIGxvYWRpbmdwbG90IGxvYyBsb2NhIGxvY2FsIGxvZyBsb2dpIGxvZ2lzX2xmIGxvZ2lzdGljIGxvZ2lzdGljX3AgbG9naXQgbG9naXRfZXN0YXQgbG9naXRfcCBsb2dsb2dzIGxvZ3JhbmsgbG9uZXdheSBsb29rZm9yIGxvb2t1cCBsb3dlc3MgbG93ZXNzXzcgbHByZWRpY3QgbHJlY29tcCBscm9jIGxyb2NfNyBscnRlc3QgbHMgbHNlbnMgbHNlbnNfNyBsc2Vuc194IGxzdGF0IGx0YWJsZSBsdGFibGVfNyBsdHJpYW5nIGx2IGx2cjJwbG90IGx2cjJwbG90XzcgbXwwIG1hIG1hYyBtYWNyIG1hY3JvIG1ha2VjbnMgbWFuIG1hbm92YSBtYW5vdmFfZXN0YXQgbWFub3ZhX3AgbWFub3ZhdGVzdCBtYW50ZWwgbWFyayBtYXJraW4gbWFya291dCBtYXJrc2FtcGxlIG1hdCBtYXRfY2FwcCBtYXRfb3JkZXIgbWF0X3B1dF9yciBtYXRfcmFwcCBtYXRhIG1hdGFfY2xlYXIgbWF0YV9kZXNjcmliZSBtYXRhX2Ryb3AgbWF0YV9tYXRkZXNjcmliZSBtYXRhX21hdHNhdmUgbWF0YV9tYXR1c2UgbWF0YV9tZW1vcnkgbWF0YV9tbGliIG1hdGFfbW9zYXZlIG1hdGFfcmVuYW1lIG1hdGFfd2hpY2ggbWF0YWxhYmVsIG1hdGNwcm9jIG1hdGxpc3QgbWF0bmFtZSBtYXRyIG1hdHJpIG1hdHJpeCBtYXRyaXhfaW5wdXRfX2RsZyBtYXRzdHJpayBtY2MgbWNjaSBtZDBfIG1kMV8gbWQxZGVidWdfIG1kMl8gbWQyZGVidWdfIG1kcyBtZHNfZXN0YXQgbWRzX3AgbWRzY29uZmlnIG1kc2xvbmcgbWRzbWF0IG1kc3NoZXBhcmQgbWR5dG9lIG1keXRvZiBtZV9kZXJkIG1lYW4gbWVhbnMgbWVkaWFuIG1lbW9yeSBtZW1zaXplIG1lbmwgbWVxcGFyc2UgbWVyIG1lcmcgbWVyZ2UgbWV0YSBtZnAgbWZ4IG1oZWxwIG1ob2RkcyBtaW5ib3VuZCBtaXhlZF9sbCBtaXhlZF9sbF9yZXBhcm0gbWthc3NlcnQgbWtkaXIgbWttYXQgbWtzcGxpbmUgbWwgbWxfNSBtbF9hZGpzIG1sX2JoaGhzIG1sX2NfZCBtbF9jaGVjayBtbF9jbGVhciBtbF9jbnQgbWxfZGVidWcgbWxfZGVmZCBtbF9lMCBtbF9lMF9iZmdzIG1sX2UwX2N5Y2xlIG1sX2UwX2RmcCBtbF9lMGkgbWxfZTEgbWxfZTFfYmZncyBtbF9lMV9iaGhoIG1sX2UxX2N5Y2xlIG1sX2UxX2RmcCBtbF9lMiBtbF9lMl9jeWNsZSBtbF9lYmZnMCBtbF9lYmZyMCBtbF9lYmZyMSBtbF9lYmgwcSBtbF9lYmhoMCBtbF9lYmhyMCBtbF9lYnIwaSBtbF9lY3IwaSBtbF9lZGZwMCBtbF9lZGZyMCBtbF9lZGZyMSBtbF9lZHIwaSBtbF9lZHMgbWxfZWVyMGkgbWxfZWdyMGkgbWxfZWxmIG1sX2VsZl9iZmdzIG1sX2VsZl9iaGhoIG1sX2VsZl9jeWNsZSBtbF9lbGZfZGZwIG1sX2VsZmkgbWxfZWxmcyBtbF9lbnIwaSBtbF9lbnJyMCBtbF9lcmR1MCBtbF9lcmR1MF9iZmdzIG1sX2VyZHUwX2JoaGggbWxfZXJkdTBfYmhoaHEgbWxfZXJkdTBfY3ljbGUgbWxfZXJkdTBfZGZwIG1sX2VyZHUwX25yYmZncyBtbF9leGRlIG1sX2Zvb3Rub3RlIG1sX2dlcW5yIG1sX2dyYWQwIG1sX2dyYXBoIG1sX2hiaGhoIG1sX2hkMCBtbF9ob2xkIG1sX2luaXQgbWxfaW52IG1sX2xvZyBtbF9tYXggbWxfbWxvdXQgbWxfbWxvdXRfOCBtbF9tb2RlbCBtbF9uYjAgbWxfb3B0IG1sX3AgbWxfcGxvdCBtbF9xdWVyeSBtbF9yZGdyZCBtbF9yZXBvciBtbF9zX2UgbWxfc2NvcmUgbWxfc2VhcmMgbWxfdGVjaG5pcXVlIG1sX3VuaG9sZCBtbGV2YWwgbWxmXyBtbG1hdGJ5c3VtIG1sbWF0c3VtIG1sb2cgbWxvZ2kgbWxvZ2l0IG1sb2dpdF9mb290bm90ZSBtbG9naXRfcCBtbG9wdHMgbWxzdW0gbWx2ZWNzdW0gbW5sMF8gbW9yIG1vcmUgbW92IG1vdmUgbXByb2JpdCBtcHJvYml0X2xmIG1wcm9iaXRfcCBtcmR1MF8gbXJkdTFfIG12ZGVjb2RlIG12ZW5jb2RlIG12cmVnIG12cmVnX2VzdGF0IG58MCBuYnJlZyBuYnJlZ19hbCBuYnJlZ19sZiBuYnJlZ19wIG5icmVnX3N3IG5lc3RyZWcgbmV0IG5ld2V5IG5ld2V5XzcgbmV3ZXlfcCBuZXdzIG5sIG5sXzcgbmxfOSBubF85X3AgbmxfcCBubF9wXzcgbmxjb20gbmxjb21fcCBubGV4cDIgbmxleHAyXzcgbmxleHAyYSBubGV4cDJhXzcgbmxleHAzIG5sZXhwM183IG5sZ29tMyBubGdvbTNfNyBubGdvbTQgbmxnb200Xzcgbmxpbml0IG5sbG9nMyBubGxvZzNfNyBubGxvZzQgbmxsb2c0XzcgbmxvZ19yZCBubG9naXQgbmxvZ2l0X3AgbmxvZ2l0Z2VuIG5sb2dpdHRyZWUgbmxwcmVkIG5vIG5vYnJlYWsgbm9pIG5vaXMgbm9pc2kgbm9pc2lsIG5vaXNpbHkgbm90ZSBub3RlcyBub3Rlc19kbGcgbnB0cmVuZCBudW1sYWJlbCBudW1saXN0IG9kYmMgb2xkX3ZlciBvbG8gb2xvZyBvbG9naSBvbG9naV9zdyBvbG9naXQgb2xvZ2l0X3Agb2xvZ2l0cCBvbiBvbmUgb25ldyBvbmV3YSBvbmV3YXkgb3BfY29sbm0gb3BfY29tcCBvcF9kaWZmIG9wX2ludiBvcF9zdHIgb3ByIG9wcm8gb3Byb2Igb3Byb2Jfc3cgb3Byb2JpIG9wcm9iaV9wIG9wcm9iaXQgb3Byb2JpdHAgb3B0c19leGNsdXNpdmUgb3JkZXIgb3J0aG9nIG9ydGhwb2x5IG91IG91dCBvdXRmIG91dGZpIG91dGZpbCBvdXRmaWxlIG91dHMgb3V0c2ggb3V0c2hlIG91dHNoZWUgb3V0c2hlZXQgb3Z0ZXN0IHBhYyBwYWNfNyBwYWxldHRlIHBhcnNlIHBhcnNlX2Rpc3NpbSBwYXVzZSBwY2EgcGNhXzggcGNhX2Rpc3BsYXkgcGNhX2VzdGF0IHBjYV9wIHBjYV9yb3RhdGUgcGNhbWF0IHBjaGFydCBwY2hhcnRfNyBwY2hpIHBjaGlfNyBwY29yciBwY3RpbGUgcGVudGl1bSBwZXJncmFtIHBlcmdyYW1fNyBwZXJtdXRlIHBlcm11dGVfOCBwZXJzb25hbCBwZXRvX3N0IHBrY29sbGFwc2UgcGtjcm9zcyBwa2VxdWl2IHBrZXhhbWluZSBwa2V4YW1pbmVfNyBwa3NoYXBlIHBrc3VtbSBwa3N1bW1fNyBwbCBwbG8gcGxvdCBwbHVnaW4gcG5vcm0gcG5vcm1fNyBwb2lzZ29mIHBvaXNzX2xmIHBvaXNzX3N3IHBvaXNzb19wIHBvaXNzb24gcG9pc3Nvbl9lc3RhdCBwb3N0IHBvc3RjbG9zZSBwb3N0ZmlsZSBwb3N0dXRpbCBwcGVycm9uIHByIHByYWlzIHByYWlzX2UgcHJhaXNfZTIgcHJhaXNfcCBwcmVkaWN0IHByZWRpY3RubCBwcmVzZXJ2ZSBwcmludCBwcm8gcHJvYiBwcm9iaSBwcm9iaXQgcHJvYml0X2VzdGF0IHByb2JpdF9wIHByb2NfdGltZSBwcm9jb3ZlcmxheSBwcm9jcnVzdGVzIHByb2NydXN0ZXNfZXN0YXQgcHJvY3J1c3Rlc19wIHByb2ZpbGVyIHByb2cgcHJvZ3IgcHJvZ3JhIHByb2dyYW0gcHJvcCBwcm9wb3J0aW9uIHBydGVzdCBwcnRlc3RpIHB3Y29yciBwd2QgcVxcXFxzIHFieSBxYnlzIHFjaGkgcWNoaV83IHFsYWRkZXIgcWxhZGRlcl83IHFub3JtIHFub3JtXzcgcXFwbG90IHFxcGxvdF83IHFyZWcgcXJlZ19jIHFyZWdfcCBxcmVnX3N3IHF1IHF1YWRjaGsgcXVhbnRpbGUgcXVhbnRpbGVfNyBxdWUgcXVlciBxdWVyeSByYW5nZSByYW5rc3VtIHJhdGlvIHJjaGFydCByY2hhcnRfNyByY29mIHJlY2FzdCByZWNsaW5rIHJlY29kZSByZWcgcmVnMyByZWczX3AgcmVnZHcgcmVnciByZWdyZSByZWdyZV9wMiByZWdyZXMgcmVncmVzX3AgcmVncmVzcyByZWdyZXNzX2VzdGF0IHJlZ3Jpdl9wIHJlbWFwIHJlbiByZW5hIHJlbmFtIHJlbmFtZSByZW5wZml4IHJlcGVhdCByZXBsYWNlIHJlcG9ydCByZXNoYXBlIHJlc3RvcmUgcmV0IHJldHUgcmV0dXIgcmV0dXJuIHJtIHJtZGlyIHJvYnZhciByb2Njb21wIHJvY2NvbXBfNyByb2Njb21wXzggcm9jZl9sZiByb2NmaXQgcm9jZml0Xzggcm9jZ29sZCByb2NwbG90IHJvY3Bsb3RfNyByb2N0YWIgcm9jdGFiXzcgcm9sbGluZyByb2xvZ2l0IHJvbG9naXRfcCByb3Qgcm90YSByb3RhdCByb3RhdGUgcm90YXRlbWF0IHJyZWcgcnJlZ19wIHJ1IHJ1biBydW50ZXN0IHJ2ZnBsb3QgcnZmcGxvdF83IHJ2cHBsb3QgcnZwcGxvdF83IHNhIHNhZmVzdW0gc2FtcGxlIHNhbXBzaSBzYXYgc2F2ZSBzYXZlZHJlc3VsdHMgc2F2ZW9sZCBzYyBzY2Egc2NhbCBzY2FsYSBzY2FsYXIgc2NhdHRlciBzY21fbWluZSBzY28gc2NvYl9sZiBzY29iX3Agc2NvYmlfc3cgc2NvYml0IHNjb3Igc2NvcmUgc2NvcmVwbG90IHNjb3JlcGxvdF9oZWxwIHNjcmVlIHNjcmVlcGxvdCBzY3JlZXBsb3RfaGVscCBzZHRlc3Qgc2R0ZXN0aSBzZSBzZWFyY2ggc2VwYXJhdGUgc2VwZXJhdGUgc2VycmJhciBzZXJyYmFyXzcgc2Vyc2V0IHNldCBzZXRfZGVmYXVsdHMgc2ZyYW5jaWEgc2ggc2hlIHNoZWwgc2hlbGwgc2hld2hhcnQgc2hld2hhcnRfNyBzaWduZXN0aW1hdGlvbnNhbXBsZSBzaWducmFuayBzaWdudGVzdCBzaW11bCBzaW11bF83IHNpbXVsYXRlIHNpbXVsYXRlXzggc2t0ZXN0IHNsZWVwIHNsb2dpdCBzbG9naXRfZDIgc2xvZ2l0X3Agc21vb3RoIHNuYXBzcGFuIHNvIHNvciBzb3J0IHNwZWFybWFuIHNwaWtlcGxvdCBzcGlrZXBsb3RfNyBzcGlrZXBsdCBzcGxpbmVfeCBzcGxpdCBzcXJlZyBzcXJlZ19wIHNyZXQgc3JldHUgc3JldHVyIHNyZXR1cm4gc3NjIHN0IHN0X2N0IHN0X2hjIHN0X2hjZCBzdF9oY2Rfc2ggc3RfaXMgc3RfaXNzeXMgc3Rfbm90ZSBzdF9wcm9tbyBzdF9zZXQgc3Rfc2hvdyBzdF9zbXBsIHN0X3N1YmlkIHN0YWNrIHN0YXRzYnkgc3RhdHNieV84IHN0YmFzZSBzdGNpIHN0Y2lfNyBzdGNveCBzdGNveF9lc3RhdCBzdGNveF9mciBzdGNveF9mcl9sbCBzdGNveF9wIHN0Y294X3N3IHN0Y294a20gc3Rjb3hrbV83IHN0Y3N0YXQgc3RjdXJ2IHN0Y3VydmUgc3RjdXJ2ZV83IHN0ZGVzIHN0ZW0gc3RlcHdpc2Ugc3RlcmVnIHN0ZmlsbCBzdGdlbiBzdGlyIHN0am9pbiBzdG1jIHN0bWggc3RwaHBsb3Qgc3RwaHBsb3RfNyBzdHBodGVzdCBzdHBodGVzdF83IHN0cHRpbWUgc3RyYXRlIHN0cmF0ZV83IHN0cmVnIHN0cmVnX3N3IHN0cmVzZXQgc3RzIHN0c183IHN0c2V0IHN0c3BsaXQgc3RzdW0gc3R0b2NjIHN0dG9jdCBzdHZhcnkgc3R3ZWliIHN1IHN1ZXN0IHN1ZXN0Xzggc3VtIHN1bW0gc3VtbWEgc3VtbWFyIHN1bW1hcmkgc3VtbWFyaXogc3VtbWFyaXplIHN1bmZsb3dlciBzdXJlZyBzdXJ2Y3VydiBzdXJ2c3VtIHN2YXIgc3Zhcl9wIHN2bWF0IHN2eSBzdnlfZGlzcCBzdnlfZHJlZyBzdnlfZXN0IHN2eV9lc3RfNyBzdnlfZXN0YXQgc3Z5X2dldCBzdnlfZ25icmVnX3Agc3Z5X2hlYWQgc3Z5X2hlYWRlciBzdnlfaGVja21hbl9wIHN2eV9oZWNrcHJvYl9wIHN2eV9pbnRyZWdfcCBzdnlfaXZyZWdfcCBzdnlfbG9naXN0aWNfcCBzdnlfbG9naXRfcCBzdnlfbWxvZ2l0X3Agc3Z5X25icmVnX3Agc3Z5X29sb2dpdF9wIHN2eV9vcHJvYml0X3Agc3Z5X3BvaXNzb25fcCBzdnlfcHJvYml0X3Agc3Z5X3JlZ3Jlc3NfcCBzdnlfc3ViIHN2eV9zdWJfNyBzdnlfeCBzdnlfeF83IHN2eV94X3Agc3Z5ZGVzIHN2eWRlc184IHN2eWdlbiBzdnlnbmJyZWcgc3Z5aGVja21hbiBzdnloZWNrcHJvYiBzdnlpbnRyZWcgc3Z5aW50cmVnXzcgc3Z5aW50cmcgc3Z5aXZyZWcgc3Z5bGMgc3Z5bG9nX3Agc3Z5bG9naXQgc3Z5bWFya291dCBzdnltYXJrb3V0Xzggc3Z5bWVhbiBzdnltbG9nIHN2eW1sb2dpdCBzdnluYnJlZyBzdnlvbG9nIHN2eW9sb2dpdCBzdnlvcHJvYiBzdnlvcHJvYml0IHN2eW9wdHMgc3Z5cG9pcyBzdnlwb2lzXzcgc3Z5cG9pc3NvbiBzdnlwcm9iaXQgc3Z5cHJvYnQgc3Z5cHJvcCBzdnlwcm9wXzcgc3Z5cmF0aW8gc3Z5cmVnIHN2eXJlZ19wIHN2eXJlZ3Jlc3Mgc3Z5c2V0IHN2eXNldF83IHN2eXNldF84IHN2eXRhYiBzdnl0YWJfNyBzdnl0ZXN0IHN2eXRvdGFsIHN3IHN3Xzggc3djbnJlZyBzd2NveCBzd2VyZWcgc3dpbGsgc3dsb2dpcyBzd2xvZ2l0IHN3b2xvZ2l0IHN3b3ByYnQgc3dwb2lzIHN3cHJvYml0IHN3cXJlZyBzd3RvYml0IHN3d2VpYiBzeW1tZXRyeSBzeW1taSBzeW1wbG90IHN5bXBsb3RfNyBzeW50YXggc3lzZGVzY3JpYmUgc3lzZGlyIHN5c3VzZSBzenJvZXRlciB0YSB0YWIgdGFiMSB0YWIyIHRhYl9vciB0YWJkIHRhYmRpIHRhYmRpcyB0YWJkaXNwIHRhYmkgdGFibGUgdGFib2RkcyB0YWJvZGRzXzcgdGFic3RhdCB0YWJ1IHRhYnVsIHRhYnVsYSB0YWJ1bGF0IHRhYnVsYXRlIHRlIHRlbXBmaWxlIHRlbXBuYW1lIHRlbXB2YXIgdGVzIHRlc3QgdGVzdG5sIHRlc3RwYXJtIHRlc3RzdGQgdGV0cmFjaG9yaWMgdGltZV9pdCB0aW1lciB0aXMgdG9iIHRvYmkgdG9iaXQgdG9iaXRfcCB0b2JpdF9zdyB0b2tlbiB0b2tlbmkgdG9rZW5peiB0b2tlbml6ZSB0b3N0cmluZyB0b3RhbCB0cmFuc2xhdGUgdHJhbnNsYXRvciB0cmFuc21hcCB0cmVhdF9sbCB0cmVhdHJfcCB0cmVhdHJlZyB0cmltIHRyaW1maWxsIHRybmJfY29ucyB0cm5iX21lYW4gdHJwb2lzc19kMiB0cnVuY19sbCB0cnVuY3JfcCB0cnVuY3JlZyB0c2FwcGVuZCB0c2V0IHRzZmlsbCB0c2xpbmUgdHNsaW5lX2V4IHRzcmVwb3J0IHRzcmV2YXIgdHNybGluZSB0c3NldCB0c3Ntb290aCB0c3VuYWIgdHRlc3QgdHRlc3RpIHR1dF9jaGsgdHV0X3dhaXQgdHV0b3JpYWwgdHcgdHdhcmVfc3QgdHdvIHR3b3dheSB0d293YXlfX2ZwZml0X3NlcnNldCB0d293YXlfX2Z1bmN0aW9uX2dlbiB0d293YXlfX2hpc3RvZ3JhbV9nZW4gdHdvd2F5X19pcG9pbnRfc2Vyc2V0IHR3b3dheV9faXBvaW50c19zZXJzZXQgdHdvd2F5X19rZGVuc2l0eV9nZW4gdHdvd2F5X19sZml0X3NlcnNldCB0d293YXlfX25vcm1nZW5fZ2VuIHR3b3dheV9fcGNpX3NlcnNldCB0d293YXlfX3FmaXRfc2Vyc2V0IHR3b3dheV9fc2NhdHRlcmlfc2Vyc2V0IHR3b3dheV9fc3VuZmxvd2VyX2dlbiB0d293YXlfa3NtX3NlcnNldCB0eSB0eXAgdHlwZSB0eXBlb2YgdXwwIHVuYWIgdW5hYmJyZXYgdW5hYmNtZCB1cGRhdGUgdXMgdXNlIHVzZWxhYmVsIHZhciB2YXJfbWtjb21wYW5pb24gdmFyX3AgdmFyYmFzaWMgdmFyZmNhc3QgdmFyZ3JhbmdlciB2YXJpcmYgdmFyaXJmX2FkZCB2YXJpcmZfY2dyYXBoIHZhcmlyZl9jcmVhdGUgdmFyaXJmX2N0YWJsZSB2YXJpcmZfZGVzY3JpYmUgdmFyaXJmX2RpciB2YXJpcmZfZHJvcCB2YXJpcmZfZXJhc2UgdmFyaXJmX2dyYXBoIHZhcmlyZl9vZ3JhcGggdmFyaXJmX3JlbmFtZSB2YXJpcmZfc2V0IHZhcmlyZl90YWJsZSB2YXJsaXN0IHZhcmxtYXIgdmFybm9ybSB2YXJzb2MgdmFyc3RhYmxlIHZhcnN0YWJsZV93IHZhcnN0YWJsZV93MiB2YXJ3bGUgdmNlIHZlYyB2ZWNfZmV2ZCB2ZWNfbWtwaGkgdmVjX3AgdmVjX3BfdyB2ZWNpcmZfY3JlYXRlIHZlY2xtYXIgdmVjbG1hcl93IHZlY25vcm0gdmVjbm9ybV93IHZlY3JhbmsgdmVjc3RhYmxlIHZlcmluc3QgdmVycyB2ZXJzaSB2ZXJzaW8gdmVyc2lvbiB2aWV3IHZpZXdzb3VyY2UgdmlmIHZ3bHMgd2RhdGV0b2Ygd2ViZGVzY3JpYmUgd2Vic2VlayB3ZWJ1c2Ugd2VpYjFfbGYgd2VpYjJfbGYgd2VpYl9sZiB3ZWliX2xmMCB3ZWliaGV0X2dsZiB3ZWliaGV0X2dsZl9zaCB3ZWliaGV0X2dsZmEgd2VpYmhldF9nbGZhX3NoIHdlaWJoZXRfZ3Agd2VpYmhldF9pbGYgd2VpYmhldF9pbGZfc2ggd2VpYmhldF9pbGZhIHdlaWJoZXRfaWxmYV9zaCB3ZWliaGV0X2lwIHdlaWJ1X3N3IHdlaWJ1bF9wIHdlaWJ1bGwgd2VpYnVsbF9jIHdlaWJ1bGxfcyB3ZWlidWxsaGV0IHdoIHdoZWxwIHdoaSB3aGljaCB3aGlsIHdoaWxlIHdpbGNfc3Qgd2lsY294b24gd2luIHdpbmQgd2luZG8gd2luZG93IHdpbmV4ZWMgd250ZXN0YiB3bnRlc3RiXzcgd250ZXN0cSB4Y2hhcnQgeGNoYXJ0XzcgeGNvcnIgeGNvcnJfNyB4aSB4aV82IHhtbHNhdiB4bWxzYXZlIHhtbHVzZSB4cG9zZSB4c2ggeHNoZSB4c2hlbCB4c2hlbGwgeHRfaWlzIHh0X3RpcyB4dGFiX3AgeHRhYm9uZCB4dGJpbl9wIHh0Y2xvZyB4dGNsb2dsb2cgeHRjbG9nbG9nXzggeHRjbG9nbG9nX2QyIHh0Y2xvZ2xvZ19wYV9wIHh0Y2xvZ2xvZ19yZV9wIHh0Y250X3AgeHRjb3JyIHh0ZGF0YSB4dGRlcyB4dGZyb250X3AgeHRmcm9udGllciB4dGdlZSB4dGdlZV9lbGluayB4dGdlZV9lc3RhdCB4dGdlZV9tYWtlaXZhciB4dGdlZV9wIHh0Z2VlX3BsaW5rIHh0Z2xzIHh0Z2xzX3AgeHRoYXVzIHh0aGF1c21hbiB4dGh0X3AgeHRodGF5bG9yIHh0aWxlIHh0aW50X3AgeHRpbnRyZWcgeHRpbnRyZWdfOCB4dGludHJlZ19kMiB4dGludHJlZ19wIHh0aXZwXzEgeHRpdnBfMiB4dGl2cmVnIHh0bGluZSB4dGxpbmVfZXggeHRsb2dpdCB4dGxvZ2l0XzggeHRsb2dpdF9kMiB4dGxvZ2l0X2ZlX3AgeHRsb2dpdF9wYV9wIHh0bG9naXRfcmVfcCB4dG1peGVkIHh0bWl4ZWRfZXN0YXQgeHRtaXhlZF9wIHh0bmJfZmUgeHRuYl9sZiB4dG5icmVnIHh0bmJyZWdfcGFfcCB4dG5icmVnX3JlZmVfcCB4dHBjc2UgeHRwY3NlX3AgeHRwb2lzIHh0cG9pc3NvbiB4dHBvaXNzb25fZDIgeHRwb2lzc29uX3BhX3AgeHRwb2lzc29uX3JlZmVfcCB4dHByZWQgeHRwcm9iaXQgeHRwcm9iaXRfOCB4dHByb2JpdF9kMiB4dHByb2JpdF9yZV9wIHh0cHNfZmUgeHRwc19sZiB4dHBzX3JlbiB4dHBzX3Jlbl84IHh0cmFyX3AgeHRyYyB4dHJjX3AgeHRyY2hoIHh0cmVmZV9wIHh0cmVnIHh0cmVnX2JlIHh0cmVnX2ZlIHh0cmVnX21sIHh0cmVnX3BhX3AgeHRyZWdfcmUgeHRyZWdhciB4dHJlcmVfcCB4dHNldCB4dHNmX2xsIHh0c2ZfbGx0aSB4dHN1bSB4dHRhYiB4dHRlc3QwIHh0dG9iaXQgeHR0b2JpdF84IHh0dG9iaXRfcCB4dHRyYW5zIHl4IHl4dmlld19fYmFybGlrZV9kcmF3IHl4dmlld19hcmVhX2RyYXcgeXh2aWV3X2Jhcl9kcmF3IHl4dmlld19kb3RfZHJhdyB5eHZpZXdfZHJvcGxpbmVfZHJhdyB5eHZpZXdfZnVuY3Rpb25fZHJhdyB5eHZpZXdfaWFycm93X2RyYXcgeXh2aWV3X2lsYWJlbHNfZHJhdyB5eHZpZXdfbm9ybWFsX2RyYXcgeXh2aWV3X3BjYXJyb3dfZHJhdyB5eHZpZXdfcGNiYXJyb3dfZHJhdyB5eHZpZXdfcGNjYXBzeW1fZHJhdyB5eHZpZXdfcGNzY2F0dGVyX2RyYXcgeXh2aWV3X3Bjc3Bpa2VfZHJhdyB5eHZpZXdfcmFyZWFfZHJhdyB5eHZpZXdfcmJhcl9kcmF3IHl4dmlld19yYmFybV9kcmF3IHl4dmlld19yY2FwX2RyYXcgeXh2aWV3X3JjYXBzeW1fZHJhdyB5eHZpZXdfcmNvbm5lY3RlZF9kcmF3IHl4dmlld19ybGluZV9kcmF3IHl4dmlld19yc2NhdHRlcl9kcmF3IHl4dmlld19yc3Bpa2VfZHJhdyB5eHZpZXdfc3Bpa2VfZHJhdyB5eHZpZXdfc3VuZmxvd2VyX2RyYXcgemFwX3MgemluYiB6aW5iX2xsZiB6aW5iX3BsZiB6aXAgemlwX2xsZiB6aXBfcCB6aXBfcGxmIHp0X2N0XzUgenRfaGNfNSB6dF9oY2RfNSB6dF9pc181IHp0X2lzc181IHp0X3Nob181IHp0X3NtcF81IHp0YmFzZV81IHp0Y294XzUgenRkZXNfNSB6dGVyZWdfNSB6dGZpbGxfNSB6dGdlbl81IHp0aXJfNSB6dGpvaW5fNSB6dG5iIHp0bmJfcCB6dHAgenRwX3AgenRzXzUgenRzZXRfNSB6dHNwbGlfNSB6dHN1bV81IHp0dG9jdF81IHp0dmFyeV81IHp0d2VpYl81JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9gW2EtekEtWjAtOV9dKycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFx7P1thLXpBLVowLTlfXStcXH0/L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdgXCJbXlxcclxcbl0qP1wiXFwnJ30sXG4gICAgICAgICAge2JlZ2luOiAnXCJbXlxcclxcblwiXSpcIid9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoYWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGF0YW5ofGNlaWx8Y2xvZ2xvZ3xjb21ifGNvc3xkaWdhbW1hfGV4cHxmbG9vcnxpbnZjbG9nbG9nfGludmxvZ2l0fGxufGxuZmFjdHxsbmZhY3RvcmlhbHxsbmdhbW1hfGxvZ3xsb2cxMHxtYXh8bWlufG1vZHxyZWxkaWZ8cm91bmR8c2lnbnxzaW58c3FydHxzdW18dGFufHRhbmh8dHJpZ2FtbWF8dHJ1bmN8YmV0YWRlbnxCaW5vbWlhbHxiaW5vcm18Ymlub3JtYWx8Y2hpMnxjaGkydGFpbHxkZ2FtbWFwZGF8ZGdhbW1hcGRhZGF8ZGdhbW1hcGRhZHh8ZGdhbW1hcGR4fGRnYW1tYXBkeGR4fEZ8RmRlbnxGdGFpbHxnYW1tYWRlbnxnYW1tYXB8aWJldGF8aW52Ymlub21pYWx8aW52Y2hpMnxpbnZjaGkydGFpbHxpbnZGfGludkZ0YWlsfGludmdhbW1hcHxpbnZpYmV0YXxpbnZuY2hpMnxpbnZuRnRhaWx8aW52bmliZXRhfGludm5vcm18aW52bm9ybWFsfGludnR0YWlsfG5iZXRhZGVufG5jaGkyfG5GZGVufG5GdGFpbHxuaWJldGF8bm9ybXxub3JtYWx8bm9ybWFsZGVufG5vcm1kfG5wbmNoaTJ8dGRlbnx0dGFpbHx1bmlmb3JtfGFiYnJldnxjaGFyfGluZGV4fGluZGV4bm90fGxlbmd0aHxsb3dlcnxsdHJpbXxtYXRjaHxwbHVyYWx8cHJvcGVyfHJlYWx8cmVnZXhtfHJlZ2V4cnxyZWdleHN8cmV2ZXJzZXxydHJpbXxzdHJpbmd8c3RybGVufHN0cmxvd2VyfHN0cmx0cmltfHN0cm1hdGNofHN0cm9mcmVhbHxzdHJwb3N8c3RycHJvcGVyfHN0cnJldmVyc2V8c3RycnRyaW18c3RydHJpbXxzdHJ1cHBlcnxzdWJpbnN0cnxzdWJpbndvcmR8c3Vic3RyfHRyaW18dXBwZXJ8d29yZHx3b3JkY291bnR8X2NhbGxlcnxhdXRvY29kZXxieXRlb3JkZXJ8Y2hvcHxjbGlwfGNvbmR8ZXxlcHNkb3VibGV8ZXBzZmxvYXR8Z3JvdXB8aW5saXN0fGlucmFuZ2V8aXJlY29kZXxtYXRyaXh8bWF4Ynl0ZXxtYXhkb3VibGV8bWF4ZmxvYXR8bWF4aW50fG1heGxvbmd8bWl8bWluYnl0ZXxtaW5kb3VibGV8bWluZmxvYXR8bWluaW50fG1pbmxvbmd8bWlzc2luZ3xyfHJlY29kZXxyZXBsYXl8cmV0dXJufHN8c2NhbGFyfGR8ZGF0ZXxkYXl8ZG93fGRveXxoYWxmeWVhcnxtZHl8bW9udGh8cXVhcnRlcnx3ZWVrfHllYXJ8ZHxkYWlseXxkb2ZkfGRvZmh8ZG9mbXxkb2ZxfGRvZnd8ZG9meXxofGhhbGZ5ZWFybHl8aG9mZHxtfG1vZmR8bW9udGhseXxxfHFvZmR8cXVhcnRlcmx5fHRpbnx0d2l0aGlufHd8d2Vla2x5fHdvZmR8eXx5ZWFybHl8eWh8eW18eW9mZHx5cXx5d3xjaG9sZXNreXxjb2xudW1ifGNvbHNvZnxjb3JyfGRldHxkaWFnfGRpYWcwY250fGVsfGdldHxoYWRhbWFyZHxJfGludnxpbnZzeW18aXNzeW18aXNzeW1tZXRyaWN8SnxtYXRtaXNzaW5nfG1hdHVuaWZvcm18bXJlbGRpZnxudWxsbWF0fHJvd251bWJ8cm93c29mfHN3ZWVwfHN5bWludnx0cmFjZXx2ZWN8dmVjZGlhZykoPz1cXFxcKCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICBobGpzLkNPTU1FTlQoJ15bIFxcdF0qXFxcXCouKiQnLCBmYWxzZSksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNURVAyMV9JREVOVF9SRSA9ICdbQS1aX11bQS1aMC05Xy5dKic7XG4gIHZhciBTVEVQMjFfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ0hFQURFUiBFTkRTRUMgREFUQSdcbiAgfTtcbiAgdmFyIFNURVAyMV9TVEFSVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0lTTy0xMDMwMy0yMTsnLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcbiAgdmFyIFNURVAyMV9DTE9TRSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0VORC1JU08tMTAzMDMtMjE7JyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3AyMScsICdzdGVwJywgJ3N0cCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsIC8vIFNURVAgMjEgaXMgY2FzZSBpbnNlbnNpdGl2ZSBpbiB0aGVvcnksIGluIHByYWN0aWNlIGFsbCBub24tY29tbWVudHMgYXJlIGNhcGl0YWxpemVkLlxuICAgIGxleGVtZXM6IFNURVAyMV9JREVOVF9SRSxcbiAgICBrZXl3b3JkczogU1RFUDIxX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBTVEVQMjFfU1RBUlQsXG4gICAgICBTVEVQMjFfQ0xPU0UsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXCpcXFxcKiEnLCAnXFxcXCovJyksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiBcIidcIiwgZW5kOiBcIidcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICdcXFxcZCsnLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogJ1xcXFwkJyArIGhsanMuSURFTlRfUkVcbiAgfTtcblxuICB2YXIgSEVYX0NPTE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICcjKFthLWZBLUYwLTldezZ9fFthLWZBLUYwLTldezN9KSdcbiAgfTtcblxuICB2YXIgQVRfS0VZV09SRFMgPSBbXG4gICAgJ2NoYXJzZXQnLFxuICAgICdjc3MnLFxuICAgICdkZWJ1ZycsXG4gICAgJ2V4dGVuZCcsXG4gICAgJ2ZvbnQtZmFjZScsXG4gICAgJ2ZvcicsXG4gICAgJ2ltcG9ydCcsXG4gICAgJ2luY2x1ZGUnLFxuICAgICdtZWRpYScsXG4gICAgJ21peGluJyxcbiAgICAncGFnZScsXG4gICAgJ3dhcm4nLFxuICAgICd3aGlsZSdcbiAgXTtcblxuICB2YXIgUFNFVURPX1NFTEVDVE9SUyA9IFtcbiAgICAnYWZ0ZXInLFxuICAgICdiZWZvcmUnLFxuICAgICdmaXJzdC1sZXR0ZXInLFxuICAgICdmaXJzdC1saW5lJyxcbiAgICAnYWN0aXZlJyxcbiAgICAnZmlyc3QtY2hpbGQnLFxuICAgICdmb2N1cycsXG4gICAgJ2hvdmVyJyxcbiAgICAnbGFuZycsXG4gICAgJ2xpbmsnLFxuICAgICd2aXNpdGVkJ1xuICBdO1xuXG4gIHZhciBUQUdTID0gW1xuICAgICdhJyxcbiAgICAnYWJicicsXG4gICAgJ2FkZHJlc3MnLFxuICAgICdhcnRpY2xlJyxcbiAgICAnYXNpZGUnLFxuICAgICdhdWRpbycsXG4gICAgJ2InLFxuICAgICdibG9ja3F1b3RlJyxcbiAgICAnYm9keScsXG4gICAgJ2J1dHRvbicsXG4gICAgJ2NhbnZhcycsXG4gICAgJ2NhcHRpb24nLFxuICAgICdjaXRlJyxcbiAgICAnY29kZScsXG4gICAgJ2RkJyxcbiAgICAnZGVsJyxcbiAgICAnZGV0YWlscycsXG4gICAgJ2RmbicsXG4gICAgJ2RpdicsXG4gICAgJ2RsJyxcbiAgICAnZHQnLFxuICAgICdlbScsXG4gICAgJ2ZpZWxkc2V0JyxcbiAgICAnZmlnY2FwdGlvbicsXG4gICAgJ2ZpZ3VyZScsXG4gICAgJ2Zvb3RlcicsXG4gICAgJ2Zvcm0nLFxuICAgICdoMScsXG4gICAgJ2gyJyxcbiAgICAnaDMnLFxuICAgICdoNCcsXG4gICAgJ2g1JyxcbiAgICAnaDYnLFxuICAgICdoZWFkZXInLFxuICAgICdoZ3JvdXAnLFxuICAgICdodG1sJyxcbiAgICAnaScsXG4gICAgJ2lmcmFtZScsXG4gICAgJ2ltZycsXG4gICAgJ2lucHV0JyxcbiAgICAnaW5zJyxcbiAgICAna2JkJyxcbiAgICAnbGFiZWwnLFxuICAgICdsZWdlbmQnLFxuICAgICdsaScsXG4gICAgJ21hcmsnLFxuICAgICdtZW51JyxcbiAgICAnbmF2JyxcbiAgICAnb2JqZWN0JyxcbiAgICAnb2wnLFxuICAgICdwJyxcbiAgICAncScsXG4gICAgJ3F1b3RlJyxcbiAgICAnc2FtcCcsXG4gICAgJ3NlY3Rpb24nLFxuICAgICdzcGFuJyxcbiAgICAnc3Ryb25nJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ3N1cCcsXG4gICAgJ3RhYmxlJyxcbiAgICAndGJvZHknLFxuICAgICd0ZCcsXG4gICAgJ3RleHRhcmVhJyxcbiAgICAndGZvb3QnLFxuICAgICd0aCcsXG4gICAgJ3RoZWFkJyxcbiAgICAndGltZScsXG4gICAgJ3RyJyxcbiAgICAndWwnLFxuICAgICd2YXInLFxuICAgICd2aWRlbydcbiAgXTtcblxuICB2YXIgTE9PS0FIRUFEX1RBR19FTkQgPSAnKD89W1xcXFwuXFxcXHNcXFxcblxcXFxbXFxcXDosXSknO1xuXG4gIHZhciBBVFRSSUJVVEVTID0gW1xuICAgICdhbGlnbi1jb250ZW50JyxcbiAgICAnYWxpZ24taXRlbXMnLFxuICAgICdhbGlnbi1zZWxmJyxcbiAgICAnYW5pbWF0aW9uJyxcbiAgICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICAgJ2FuaW1hdGlvbi1kdXJhdGlvbicsXG4gICAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAgICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgICAnYW5pbWF0aW9uLW5hbWUnLFxuICAgICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICAgJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAgICdhdXRvJyxcbiAgICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICAgJ2JhY2tncm91bmQnLFxuICAgICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLFxuICAgICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICAgJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgICAnYmFja2dyb3VuZC1zaXplJyxcbiAgICAnYm9yZGVyJyxcbiAgICAnYm9yZGVyLWJvdHRvbScsXG4gICAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAgICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyxcbiAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAgICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgICAnYm9yZGVyLWJvdHRvbS13aWR0aCcsXG4gICAgJ2JvcmRlci1jb2xsYXBzZScsXG4gICAgJ2JvcmRlci1jb2xvcicsXG4gICAgJ2JvcmRlci1pbWFnZScsXG4gICAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAgICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgICAnYm9yZGVyLWltYWdlLXNsaWNlJyxcbiAgICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICAgJ2JvcmRlci1sZWZ0JyxcbiAgICAnYm9yZGVyLWxlZnQtY29sb3InLFxuICAgICdib3JkZXItbGVmdC1zdHlsZScsXG4gICAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgICAnYm9yZGVyLXJhZGl1cycsXG4gICAgJ2JvcmRlci1yaWdodCcsXG4gICAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICAgJ2JvcmRlci1yaWdodC1zdHlsZScsXG4gICAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgICAnYm9yZGVyLXN0eWxlJyxcbiAgICAnYm9yZGVyLXRvcCcsXG4gICAgJ2JvcmRlci10b3AtY29sb3InLFxuICAgICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAgICdib3JkZXItdG9wLXN0eWxlJyxcbiAgICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICAgJ2JvcmRlci13aWR0aCcsXG4gICAgJ2JvdHRvbScsXG4gICAgJ2JveC1kZWNvcmF0aW9uLWJyZWFrJyxcbiAgICAnYm94LXNoYWRvdycsXG4gICAgJ2JveC1zaXppbmcnLFxuICAgICdicmVhay1hZnRlcicsXG4gICAgJ2JyZWFrLWJlZm9yZScsXG4gICAgJ2JyZWFrLWluc2lkZScsXG4gICAgJ2NhcHRpb24tc2lkZScsXG4gICAgJ2NsZWFyJyxcbiAgICAnY2xpcCcsXG4gICAgJ2NsaXAtcGF0aCcsXG4gICAgJ2NvbG9yJyxcbiAgICAnY29sdW1uLWNvdW50JyxcbiAgICAnY29sdW1uLWZpbGwnLFxuICAgICdjb2x1bW4tZ2FwJyxcbiAgICAnY29sdW1uLXJ1bGUnLFxuICAgICdjb2x1bW4tcnVsZS1jb2xvcicsXG4gICAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgICAnY29sdW1uLXJ1bGUtd2lkdGgnLFxuICAgICdjb2x1bW4tc3BhbicsXG4gICAgJ2NvbHVtbi13aWR0aCcsXG4gICAgJ2NvbHVtbnMnLFxuICAgICdjb250ZW50JyxcbiAgICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAgICdjb3VudGVyLXJlc2V0JyxcbiAgICAnY3Vyc29yJyxcbiAgICAnZGlyZWN0aW9uJyxcbiAgICAnZGlzcGxheScsXG4gICAgJ2VtcHR5LWNlbGxzJyxcbiAgICAnZmlsdGVyJyxcbiAgICAnZmxleCcsXG4gICAgJ2ZsZXgtYmFzaXMnLFxuICAgICdmbGV4LWRpcmVjdGlvbicsXG4gICAgJ2ZsZXgtZmxvdycsXG4gICAgJ2ZsZXgtZ3JvdycsXG4gICAgJ2ZsZXgtc2hyaW5rJyxcbiAgICAnZmxleC13cmFwJyxcbiAgICAnZmxvYXQnLFxuICAgICdmb250JyxcbiAgICAnZm9udC1mYW1pbHknLFxuICAgICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAgICdmb250LWtlcm5pbmcnLFxuICAgICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgICAnZm9udC1zaXplJyxcbiAgICAnZm9udC1zaXplLWFkanVzdCcsXG4gICAgJ2ZvbnQtc3RyZXRjaCcsXG4gICAgJ2ZvbnQtc3R5bGUnLFxuICAgICdmb250LXZhcmlhbnQnLFxuICAgICdmb250LXZhcmlhbnQtbGlnYXR1cmVzJyxcbiAgICAnZm9udC13ZWlnaHQnLFxuICAgICdoZWlnaHQnLFxuICAgICdoeXBoZW5zJyxcbiAgICAnaWNvbicsXG4gICAgJ2ltYWdlLW9yaWVudGF0aW9uJyxcbiAgICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICAgJ2ltZS1tb2RlJyxcbiAgICAnaW5oZXJpdCcsXG4gICAgJ2luaXRpYWwnLFxuICAgICdqdXN0aWZ5LWNvbnRlbnQnLFxuICAgICdsZWZ0JyxcbiAgICAnbGV0dGVyLXNwYWNpbmcnLFxuICAgICdsaW5lLWhlaWdodCcsXG4gICAgJ2xpc3Qtc3R5bGUnLFxuICAgICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgICAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXG4gICAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICAgJ21hcmdpbicsXG4gICAgJ21hcmdpbi1ib3R0b20nLFxuICAgICdtYXJnaW4tbGVmdCcsXG4gICAgJ21hcmdpbi1yaWdodCcsXG4gICAgJ21hcmdpbi10b3AnLFxuICAgICdtYXJrcycsXG4gICAgJ21hc2snLFxuICAgICdtYXgtaGVpZ2h0JyxcbiAgICAnbWF4LXdpZHRoJyxcbiAgICAnbWluLWhlaWdodCcsXG4gICAgJ21pbi13aWR0aCcsXG4gICAgJ25hdi1kb3duJyxcbiAgICAnbmF2LWluZGV4JyxcbiAgICAnbmF2LWxlZnQnLFxuICAgICduYXYtcmlnaHQnLFxuICAgICduYXYtdXAnLFxuICAgICdub25lJyxcbiAgICAnbm9ybWFsJyxcbiAgICAnb2JqZWN0LWZpdCcsXG4gICAgJ29iamVjdC1wb3NpdGlvbicsXG4gICAgJ29wYWNpdHknLFxuICAgICdvcmRlcicsXG4gICAgJ29ycGhhbnMnLFxuICAgICdvdXRsaW5lJyxcbiAgICAnb3V0bGluZS1jb2xvcicsXG4gICAgJ291dGxpbmUtb2Zmc2V0JyxcbiAgICAnb3V0bGluZS1zdHlsZScsXG4gICAgJ291dGxpbmUtd2lkdGgnLFxuICAgICdvdmVyZmxvdycsXG4gICAgJ292ZXJmbG93LXdyYXAnLFxuICAgICdvdmVyZmxvdy14JyxcbiAgICAnb3ZlcmZsb3cteScsXG4gICAgJ3BhZGRpbmcnLFxuICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgJ3BhZGRpbmctcmlnaHQnLFxuICAgICdwYWRkaW5nLXRvcCcsXG4gICAgJ3BhZ2UtYnJlYWstYWZ0ZXInLFxuICAgICdwYWdlLWJyZWFrLWJlZm9yZScsXG4gICAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgICAncGVyc3BlY3RpdmUnLFxuICAgICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAgICdwb2ludGVyLWV2ZW50cycsXG4gICAgJ3Bvc2l0aW9uJyxcbiAgICAncXVvdGVzJyxcbiAgICAncmVzaXplJyxcbiAgICAncmlnaHQnLFxuICAgICd0YWItc2l6ZScsXG4gICAgJ3RhYmxlLWxheW91dCcsXG4gICAgJ3RleHQtYWxpZ24nLFxuICAgICd0ZXh0LWFsaWduLWxhc3QnLFxuICAgICd0ZXh0LWRlY29yYXRpb24nLFxuICAgICd0ZXh0LWRlY29yYXRpb24tY29sb3InLFxuICAgICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICAgJ3RleHQtaW5kZW50JyxcbiAgICAndGV4dC1vdmVyZmxvdycsXG4gICAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgICAndGV4dC1zaGFkb3cnLFxuICAgICd0ZXh0LXRyYW5zZm9ybScsXG4gICAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgICAndG9wJyxcbiAgICAndHJhbnNmb3JtJyxcbiAgICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAgICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICAgJ3VuaWNvZGUtYmlkaScsXG4gICAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgICAndmlzaWJpbGl0eScsXG4gICAgJ3doaXRlLXNwYWNlJyxcbiAgICAnd2lkb3dzJyxcbiAgICAnd2lkdGgnLFxuICAgICd3b3JkLWJyZWFrJyxcbiAgICAnd29yZC1zcGFjaW5nJyxcbiAgICAnd29yZC13cmFwJyxcbiAgICAnei1pbmRleCdcbiAgXTtcblxuICAvLyBpbGxlZ2Fsc1xuICB2YXIgSUxMRUdBTCA9IFtcbiAgICAnXFxcXD8nLFxuICAgICcoXFxcXGJSZXR1cm5cXFxcYiknLCAvLyBtb25rZXlcbiAgICAnKFxcXFxiRW5kXFxcXGIpJywgLy8gbW9ua2V5XG4gICAgJyhcXFxcYmVuZFxcXFxiKScsIC8vIHZic2NyaXB0XG4gICAgJyhcXFxcYmRlZlxcXFxiKScsIC8vIGdyYWRsZVxuICAgICc7JywgLy8gYSB3aG9sZSBsb3Qgb2YgbGFuZ3VhZ2VzXG4gICAgJyNcXFxccycsIC8vIG1hcmtkb3duXG4gICAgJ1xcXFwqXFxcXHMnLCAvLyBtYXJrZG93blxuICAgICc9PT1cXFxccycsIC8vIG1hcmtkb3duXG4gICAgJ1xcXFx8JyxcbiAgICAnJScsIC8vIHByb2xvZ1xuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzdHlsJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6ICdpZiBlbHNlIGZvciBpbicsXG4gICAgaWxsZWdhbDogJygnICsgSUxMRUdBTC5qb2luKCd8JykgKyAnKScsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gc3RyaW5nc1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcblxuICAgICAgLy8gY29tbWVudHNcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG5cbiAgICAgIC8vIGhleCBjb2xvcnNcbiAgICAgIEhFWF9DT0xPUixcblxuICAgICAgLy8gY2xhc3MgdGFnXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC5bYS16QS1aXVthLXpBLVowLTlfLV0qJyArIExPT0tBSEVBRF9UQUdfRU5ELFxuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1jbGFzcydcbiAgICAgIH0sXG5cbiAgICAgIC8vIGlkIHRhZ1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwjW2EtekEtWl1bYS16QS1aMC05Xy1dKicgKyBMT09LQUhFQURfVEFHX0VORCxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnXG4gICAgICB9LFxuXG4gICAgICAvLyB0YWdzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJyknICsgTE9PS0FIRUFEX1RBR19FTkQsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZydcbiAgICAgIH0sXG5cbiAgICAgIC8vIHBzdWVkbyBzZWxlY3RvcnNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcmPzo/OlxcXFxiKCcgKyBQU0VVRE9fU0VMRUNUT1JTLmpvaW4oJ3wnKSArICcpJyArIExPT0tBSEVBRF9UQUdfRU5EXG4gICAgICB9LFxuXG4gICAgICAvLyBAIGtleXdvcmRzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxAKCcgKyBBVF9LRVlXT1JEUy5qb2luKCd8JykgKyAnKVxcXFxiJ1xuICAgICAgfSxcblxuICAgICAgLy8gdmFyaWFibGVzXG4gICAgICBWQVJJQUJMRSxcblxuICAgICAgLy8gZGltZW5zaW9uXG4gICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcblxuICAgICAgLy8gbnVtYmVyXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuXG4gICAgICAvLyBmdW5jdGlvbnNcbiAgICAgIC8vICAtIG9ubHkgZnJvbSBiZWdpbm5pbmcgb2YgbGluZSArIHdoaXRlc3BhY2VcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ15bYS16QS1aXVthLXpBLVowLTlfXFwtXSpcXFxcKC4qXFxcXCknLFxuICAgICAgICBpbGxlZ2FsOiAnW1xcXFxuXScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICd0aXRsZScsIGJlZ2luOiAnXFxcXGJbYS16QS1aXVthLXpBLVowLTlfXFwtXSonfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIEhFWF9DT0xPUixcbiAgICAgICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIGF0dHJpYnV0ZXNcbiAgICAgIC8vICAtIG9ubHkgZnJvbSBiZWdpbm5pbmcgb2YgbGluZSArIHdoaXRlc3BhY2VcbiAgICAgIC8vICAtIG11c3QgaGF2ZSB3aGl0ZXNwYWNlIGFmdGVyIGl0XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEFUVFJJQlVURVMucmV2ZXJzZSgpLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyB2YWx1ZSBjb250YWluZXJcbiAgICAgICAgICBlbmQ6IC87fCQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBIRVhfQ09MT1IsXG4gICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbGxlZ2FsOiAvXFwuLyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBERVRBSUxTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXFxcW1xcbihtdWx0aXBhcnQpPycsIGVuZDogJ1xcXFxdXFxuJ1xuICB9O1xuICB2YXIgVElNRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0oXFxcXHMrKVxcXFxkezJ9OlxcXFxkezJ9OlxcXFxkezJ9XFwuXFxcXGQrWidcbiAgfTtcbiAgdmFyIFBST0dSRVNTVkFMVUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJyhcXFxcK3wtKVxcXFxkKydcbiAgfTtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdeKHRlc3R8dGVzdGluZ3xzdWNjZXNzfHN1Y2Nlc3NmdWx8ZmFpbHVyZXxlcnJvcnxza2lwfHhmYWlsfHV4c3VjY2VzcykoOj8pXFxcXHMrKHRlc3QpPycgfSxcbiAgICAgIHsgYmVnaW46ICdecHJvZ3Jlc3MoOj8pKFxcXFxzKyk/KHBvcHxwdXNoKT8nIH0sXG4gICAgICB7IGJlZ2luOiAnXnRhZ3M6JyB9LFxuICAgICAgeyBiZWdpbjogJ150aW1lOicgfVxuICAgIF0sXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgREVUQUlMUyxcbiAgICAgIFRJTUUsXG4gICAgICBQUk9HUkVTU1ZBTFVFLFxuICAgICAgS0VZV09SRFNcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1dJRlRfS0VZV09SRFMgPSB7XG4gICAgICBrZXl3b3JkOiAnI2F2YWlsYWJsZSAjY29sb3JMaXRlcmFsICNjb2x1bW4gI2Vsc2UgI2Vsc2VpZiAjZW5kaWYgI2ZpbGUgJyArXG4gICAgICAgICcjZmlsZUxpdGVyYWwgI2Z1bmN0aW9uICNpZiAjaW1hZ2VMaXRlcmFsICNsaW5lICNzZWxlY3RvciAjc291cmNlTG9jYXRpb24gJyArXG4gICAgICAgICdfIF9fQ09MVU1OX18gX19GSUxFX18gX19GVU5DVElPTl9fIF9fTElORV9fIEFueSBhcyBhcyEgYXM/IGFzc29jaWF0ZWR0eXBlICcgK1xuICAgICAgICAnYXNzb2NpYXRpdml0eSBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnRpbnVlIGNvbnZlbmllbmNlIGRlZmF1bHQgZGVmZXIgZGVpbml0IGRpZFNldCBkbyAnICtcbiAgICAgICAgJ2R5bmFtaWMgZHluYW1pY1R5cGUgZWxzZSBlbnVtIGV4dGVuc2lvbiBmYWxsdGhyb3VnaCBmYWxzZSBmaWxlcHJpdmF0ZSBmaW5hbCBmb3IgZnVuYyAnICtcbiAgICAgICAgJ2dldCBndWFyZCBpZiBpbXBvcnQgaW4gaW5kaXJlY3QgaW5maXggaW5pdCBpbm91dCBpbnRlcm5hbCBpcyBsYXp5IGxlZnQgbGV0ICcgK1xuICAgICAgICAnbXV0YXRpbmcgbmlsIG5vbmUgbm9ubXV0YXRpbmcgb3BlbiBvcGVyYXRvciBvcHRpb25hbCBvdmVycmlkZSBwb3N0Zml4IHByZWNlZGVuY2UgJyArXG4gICAgICAgICdwcmVmaXggcHJpdmF0ZSBwcm90b2NvbCBQcm90b2NvbCBwdWJsaWMgcmVwZWF0IHJlcXVpcmVkIHJldGhyb3dzIHJldHVybiAnICtcbiAgICAgICAgJ3JpZ2h0IHNlbGYgU2VsZiBzZXQgc3RhdGljIHN0cnVjdCBzdWJzY3JpcHQgc3VwZXIgc3dpdGNoIHRocm93IHRocm93cyB0cnVlICcgK1xuICAgICAgICAndHJ5IHRyeSEgdHJ5PyBUeXBlIHR5cGVhbGlhcyB1bm93bmVkIHZhciB3ZWFrIHdoZXJlIHdoaWxlIHdpbGxTZXQnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbmlsJyxcbiAgICAgIGJ1aWx0X2luOiAnYWJzIGFkdmFuY2UgYWxpZ25vZiBhbGlnbm9mVmFsdWUgYW55R2VuZXJhdG9yIGFzc2VydCBhc3NlcnRpb25GYWlsdXJlICcgK1xuICAgICAgICAnYnJpZGdlRnJvbU9iamVjdGl2ZUMgYnJpZGdlRnJvbU9iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGJyaWRnZVRvT2JqZWN0aXZlQyAnICtcbiAgICAgICAgJ2JyaWRnZVRvT2JqZWN0aXZlQ1VuY29uZGl0aW9uYWwgYyBjb250YWlucyBjb3VudCBjb3VudEVsZW1lbnRzIGNvdW50TGVhZGluZ1plcm9zICcgK1xuICAgICAgICAnZGVidWdQcmludCBkZWJ1Z1ByaW50bG4gZGlzdGFuY2UgZHJvcEZpcnN0IGRyb3BMYXN0IGR1bXAgZW5jb2RlQml0c0FzV29yZHMgJyArXG4gICAgICAgICdlbnVtZXJhdGUgZXF1YWwgZmF0YWxFcnJvciBmaWx0ZXIgZmluZCBnZXRCcmlkZ2VkT2JqZWN0aXZlQ1R5cGUgZ2V0VmFMaXN0ICcgK1xuICAgICAgICAnaW5kaWNlcyBpbnNlcnRpb25Tb3J0IGlzQnJpZGdlZFRvT2JqZWN0aXZlQyBpc0JyaWRnZWRWZXJiYXRpbVRvT2JqZWN0aXZlQyAnICtcbiAgICAgICAgJ2lzVW5pcXVlbHlSZWZlcmVuY2VkIGlzVW5pcXVlbHlSZWZlcmVuY2VkTm9uT2JqQyBqb2luIGxhenkgbGV4aWNvZ3JhcGhpY2FsQ29tcGFyZSAnICtcbiAgICAgICAgJ21hcCBtYXggbWF4RWxlbWVudCBtaW4gbWluRWxlbWVudCBudW1lcmljQ2FzdCBvdmVybGFwcyBwYXJ0aXRpb24gcG9zaXggJyArXG4gICAgICAgICdwcmVjb25kaXRpb24gcHJlY29uZGl0aW9uRmFpbHVyZSBwcmludCBwcmludGxuIHF1aWNrU29ydCByZWFkTGluZSByZWR1Y2UgcmVmbGVjdCAnICtcbiAgICAgICAgJ3JlaW50ZXJwcmV0Q2FzdCByZXZlcnNlIHJvdW5kVXBUb0FsaWdubWVudCBzaXplb2Ygc2l6ZW9mVmFsdWUgc29ydCBzcGxpdCAnICtcbiAgICAgICAgJ3N0YXJ0c1dpdGggc3RyaWRlIHN0cmlkZW9mIHN0cmlkZW9mVmFsdWUgc3dhcCB0b1N0cmluZyB0cmFuc2NvZGUgJyArXG4gICAgICAgICd1bmRlcmVzdGltYXRlQ291bnQgdW5zYWZlQWRkcmVzc09mIHVuc2FmZUJpdENhc3QgdW5zYWZlRG93bmNhc3QgdW5zYWZlVW53cmFwICcgK1xuICAgICAgICAndW5zYWZlUmVmbGVjdCB3aXRoRXh0ZW5kZWRMaWZldGltZSB3aXRoT2JqZWN0QXRQbHVzWmVybyB3aXRoVW5zYWZlUG9pbnRlciAnICtcbiAgICAgICAgJ3dpdGhVbnNhZmVQb2ludGVyVG9PYmplY3Qgd2l0aFVuc2FmZU11dGFibGVQb2ludGVyIHdpdGhVbnNhZmVNdXRhYmxlUG9pbnRlcnMgJyArXG4gICAgICAgICd3aXRoVW5zYWZlUG9pbnRlciB3aXRoVW5zYWZlUG9pbnRlcnMgd2l0aFZhTGlzdCB6aXAnXG4gICAgfTtcblxuICB2YXIgVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXHUwMEMwLVxcdTAyQjhcXCddKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIC8vIHNsaWdodGx5IG1vcmUgc3BlY2lhbCB0byBzd2lmdFxuICB2YXIgT1BUSU9OQUxfVVNJTkdfVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXHUwMEMwLVxcdTAyQjhcXCddKlshP10nXG4gIH1cbiAgdmFyIEJMT0NLX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJy9cXFxcKicsXG4gICAgJ1xcXFwqLycsXG4gICAge1xuICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgfVxuICApO1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFxcXFxcKC8sIGVuZDogJ1xcXFwpJyxcbiAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtdIC8vIGFzc2lnbmVkIGxhdGVyXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVJTID0ge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGIoW1xcXFxkX10rKFxcXFwuW1xcXFxkZUVfXSspP3wweFthLWZBLUYwLTlfXSsoXFxcXC5bYS1mQS1GMC05cF9dKyk/fDBiWzAxX10rfDBvWzAtN19dKylcXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgU1VCU1QuY29udGFpbnMgPSBbTlVNQkVSU107XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIEJMT0NLX0NPTU1FTlQsXG4gICAgICBPUFRJT05BTF9VU0lOR19UWVBFLFxuICAgICAgVFlQRSxcbiAgICAgIE5VTUJFUlMsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLCBlbmQ6ICd7JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLzwvLCBlbmQ6IC8+L1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLywgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBTV0lGVF9LRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICB7YmVnaW46ICc6J30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpbGxlZ2FsOiAvW1wiJ10vXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvXFxbfCUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdHJ1Y3QgcHJvdG9jb2wgY2xhc3MgZXh0ZW5zaW9uIGVudW0nLFxuICAgICAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgICAgIGVuZDogJ1xcXFx7JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IC9bQS1aYS16JF9dW1xcdTAwQzAtXFx1MDJCODAtOUEtWmEteiRfXSovfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIC8vIEBhdHRyaWJ1dGVzXG4gICAgICAgIGJlZ2luOiAnKEBkaXNjYXJkYWJsZVJlc3VsdHxAd2Fybl91bnVzZWRfcmVzdWx0fEBleHBvcnRlZHxAbGF6eXxAbm9lc2NhcGV8JyArXG4gICAgICAgICAgICAgICAgICAnQE5TQ29weWluZ3xATlNNYW5hZ2VkfEBvYmpjfEBvYmpjTWVtYmVyc3xAY29udmVudGlvbnxAcmVxdWlyZWR8JyArXG4gICAgICAgICAgICAgICAgICAnQG5vcmV0dXJufEBJQkFjdGlvbnxASUJEZXNpZ25hYmxlfEBJQkluc3BlY3RhYmxlfEBJQk91dGxldHwnICtcbiAgICAgICAgICAgICAgICAgICdAaW5maXh8QHByZWZpeHxAcG9zdGZpeHxAYXV0b2Nsb3N1cmV8QHRlc3RhYmxlfEBhdmFpbGFibGV8JyArXG4gICAgICAgICAgICAgICAgICAnQG5vbm9iamN8QE5TQXBwbGljYXRpb25NYWlufEBVSUFwcGxpY2F0aW9uTWFpbnxAZHluYW1pY01lbWJlckxvb2t1cHwnICtcbiAgICAgICAgICAgICAgICAgICdAcHJvcGVydHlXcmFwcGVyKSdcblxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogW2hsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSwgQkxPQ0tfQ09NTUVOVF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gIHZhciBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAvXFwkbm9vcFxcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBjb250YWluczogW3tcbiAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgIGVuZDogL1xcKS8sXG4gICAgICBjb250YWluczogWydzZWxmJywge1xuICAgICAgICBiZWdpbjogL1xcXFwuL1xuICAgICAgfV1cbiAgICB9XSxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgdmFyIEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAvXFwkKD8hbm9vcClbYS16QS1aXVtfYS16QS1aMC05XSovLFxuICAgIGVuZDogL1xcKC8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC8lW19hLXpBLVowLTk6XSovLFxuICAgIGVuZDogJyUnXG4gIH07XG5cbiAgdmFyIEVTQ0FQRV9TRVFVRU5DRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAvXFxcXC4vXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVCxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBFU0NBUEVfU0VRVUVOQ0VcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTElURVJBTFMgPSAndHJ1ZSBmYWxzZSB5ZXMgbm8gbnVsbCc7XG5cbiAgLy8gRGVmaW5lIGtleXMgYXMgc3RhcnRpbmcgd2l0aCBhIHdvcmQgY2hhcmFjdGVyXG4gIC8vIC4uLmNvbnRhaW5pbmcgd29yZCBjaGFycywgc3BhY2VzLCBjb2xvbnMsIGZvcndhcmQtc2xhc2hlcywgaHlwaGVucyBhbmQgcGVyaW9kc1xuICAvLyAuLi5hbmQgZW5kaW5nIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhIHNwYWNlLCB0YWIgb3IgbmV3bGluZS5cbiAgLy8gVGhlIFlBTUwgc3BlYyBhbGxvd3MgZm9yIG11Y2ggbW9yZSB0aGFuIHRoaXMsIGJ1dCB0aGlzIGNvdmVycyBtb3N0IHVzZS1jYXNlcy5cbiAgdmFyIEtFWSA9IHtcbiAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFx3W1xcXFx3IDpcXFxcLy4tXSo6KD89WyBcXHRdfCQpJyB9LFxuICAgICAgeyBiZWdpbjogJ1wiXFxcXHdbXFxcXHcgOlxcXFwvLi1dKlwiOig/PVsgXFx0XXwkKScgfSwgLy9kb3VibGUgcXVvdGVkIGtleXNcbiAgICAgIHsgYmVnaW46ICdcXCdcXFxcd1tcXFxcdyA6XFxcXC8uLV0qXFwnOig/PVsgXFx0XXwkKScgfSAvL3NpbmdsZSBxdW90ZWQga2V5c1xuICAgIF1cbiAgfTtcblxuICB2YXIgVEVNUExBVEVfVkFSSUFCTEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xce1xceycsIGVuZDogJ1xcfVxcfScgfSwgLy8gamluamEgdGVtcGxhdGVzIEFuc2libGVcbiAgICAgIHsgYmVnaW46ICclXFx7JywgZW5kOiAnXFx9JyB9IC8vIFJ1YnkgaTE4blxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgIHtiZWdpbjogL1xcUysvfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFRFTVBMQVRFX1ZBUklBQkxFU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWyd5bWwnLCAnWUFNTCcsICd5YW1sJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEtFWSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXi0tLVxccyokJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHsgLy8gbXVsdGkgbGluZSBzdHJpbmdcbiAgICAgICAgLy8gQmxvY2tzIHN0YXJ0IHdpdGggYSB8IG9yID4gZm9sbG93ZWQgYnkgYSBuZXdsaW5lXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluZGVudGF0aW9uIG9mIHN1YnNlcXVlbnQgbGluZXMgbXVzdCBiZSB0aGUgc2FtZSB0b1xuICAgICAgICAvLyBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGJsb2NrXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW1xcXFx8Pl0oWzAtOV0/WystXSk/WyBdKlxcXFxuKCAqKVtcXFxcUyBdK1xcXFxuKFxcXFwyW1xcXFxTIF0rXFxcXG4/KSonLFxuICAgICAgfSxcbiAgICAgIHsgLy8gUnVieS9SYWlscyBlcmJcbiAgICAgICAgYmVnaW46ICc8JVslPS1dPycsIGVuZDogJ1slLV0/JT4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gbG9jYWwgdGFnc1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICchJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgIH0sXG4gICAgICB7IC8vIGRhdGEgdHlwZVxuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICchIScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICB9LFxuICAgICAgeyAvLyBmcmFnbWVudCBpZCAmcmVmXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyYnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyQnLFxuICAgICAgfSxcbiAgICAgIHsgLy8gZnJhZ21lbnQgcmVmZXJlbmNlICpyZWZcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXFxcXConICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyQnXG4gICAgICB9LFxuICAgICAgeyAvLyBhcnJheSBsaXN0aW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAvLyBUT0RPOiByZW1vdmUgfCQgaGFjayB3aGVuIHdlIGhhdmUgcHJvcGVyIGxvb2stYWhlYWQgc3VwcG9ydFxuICAgICAgYmVnaW46ICdcXFxcLSg/PVsgXXwkKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IExJVEVSQUxTLFxuICAgICAgICBrZXl3b3Jkczoge2xpdGVyYWw6IExJVEVSQUxTfVxuICAgICAgfSxcbiAgICAgIC8vIG51bWJlcnMgYXJlIGFueSB2YWxpZCBDLXN0eWxlIG51bWJlciB0aGF0XG4gICAgICAvLyBzaXQgaXNvbGF0ZWQgZnJvbSBvdGhlciB3b3Jkc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdcXFxcYidcbiAgICAgIH0sXG4gICAgICBTVFJJTkdcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAvLyB2ZXJzaW9uIG9mIGZvcm1hdCBhbmQgdG90YWwgYW1vdW50IG9mIHRlc3RjYXNlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXlRBUCB2ZXJzaW9uIChcXFxcZCspJCcgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXjFcXFxcLlxcXFwuKFxcXFxkKykkJyB9XG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLy8gWUFNTCBibG9ja1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyhcXHMrKT8tLS0kJywgZW5kOiAnXFxcXC5cXFxcLlxcXFwuJCcsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAneWFtbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblx0ICAvLyB0ZXN0Y2FzZSBudW1iZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcgKFxcXFxkKykgJ1xuICAgICAgfSxcblx0ICAvLyB0ZXN0Y2FzZSBzdGF0dXMgYW5kIGRlc2NyaXB0aW9uXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ15vaycgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXm5vdCBvaycgfVxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndGsnXSxcbiAgICBrZXl3b3JkczogJ2FmdGVyIGFwcGVuZCBhcHBseSBhcnJheSBhdXRvX2V4ZWNvayBhdXRvX2ltcG9ydCBhdXRvX2xvYWQgYXV0b19ta2luZGV4ICcgK1xuICAgICAgJ2F1dG9fbWtpbmRleF9vbGQgYXV0b19xdWFsaWZ5IGF1dG9fcmVzZXQgYmdlcnJvciBiaW5hcnkgYnJlYWsgY2F0Y2ggY2QgY2hhbiBjbG9jayAnICtcbiAgICAgICdjbG9zZSBjb25jYXQgY29udGludWUgZGRlIGRpY3QgZW5jb2RpbmcgZW9mIGVycm9yIGV2YWwgZXhlYyBleGl0IGV4cHIgZmJsb2NrZWQgJyArXG4gICAgICAnZmNvbmZpZ3VyZSBmY29weSBmaWxlIGZpbGVldmVudCBmaWxlbmFtZSBmbHVzaCBmb3IgZm9yZWFjaCBmb3JtYXQgZ2V0cyBnbG9iIGdsb2JhbCAnICtcbiAgICAgICdoaXN0b3J5IGh0dHAgaWYgaW5jciBpbmZvIGludGVycCBqb2luIGxhcHBlbmR8MTAgbGFzc2lnbnwxMCBsaW5kZXh8MTAgbGluc2VydHwxMCBsaXN0ICcgK1xuICAgICAgJ2xsZW5ndGh8MTAgbG9hZCBscmFuZ2V8MTAgbHJlcGVhdHwxMCBscmVwbGFjZXwxMCBscmV2ZXJzZXwxMCBsc2VhcmNofDEwIGxzZXR8MTAgbHNvcnR8MTAgJytcbiAgICAgICdtYXRoZnVuYyBtYXRob3AgbWVtb3J5IG1zZ2NhdCBuYW1lc3BhY2Ugb3BlbiBwYWNrYWdlIHBhcnJheSBwaWQgcGtnOjpjcmVhdGUgcGtnX21rSW5kZXggJytcbiAgICAgICdwbGF0Zm9ybSBwbGF0Zm9ybTo6c2hlbGwgcHJvYyBwdXRzIHB3ZCByZWFkIHJlZmNoYW4gcmVnZXhwIHJlZ2lzdHJ5IHJlZ3N1YnwxMCByZW5hbWUgJytcbiAgICAgICdyZXR1cm4gc2FmZSBzY2FuIHNlZWsgc2V0IHNvY2tldCBzb3VyY2Ugc3BsaXQgc3RyaW5nIHN1YnN0IHN3aXRjaCB0Y2xfZW5kT2ZXb3JkICcrXG4gICAgICAndGNsX2ZpbmRMaWJyYXJ5IHRjbF9zdGFydE9mTmV4dFdvcmQgdGNsX3N0YXJ0T2ZQcmV2aW91c1dvcmQgdGNsX3dvcmRCcmVha0FmdGVyICcrXG4gICAgICAndGNsX3dvcmRCcmVha0JlZm9yZSB0Y2x0ZXN0IHRjbHZhcnMgdGVsbCB0aW1lIHRtIHRyYWNlIHVua25vd24gdW5sb2FkIHVuc2V0IHVwZGF0ZSAnK1xuICAgICAgJ3VwbGV2ZWwgdXB2YXIgdmFyaWFibGUgdndhaXQgd2hpbGUnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJztbIFxcXFx0XSojJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXlsgXFxcXHRdKiMnLCAnJCcpLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAncHJvYycsXG4gICAgICAgIGVuZDogJ1tcXFxce10nLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnWyBcXFxcdFxcXFxuXFxcXHJdKyg6Oik/W2EtekEtWl9dKCg6Oik/W2EtekEtWjAtOV9dKSonLFxuICAgICAgICAgICAgZW5kOiAnWyBcXFxcdFxcXFxuXFxcXHJdJyxcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkKFxcXFx7KT8oOjopP1thLXpBLVpfXSgoOjopP1thLXpBLVowLTlfXSkqXFxcXCgoW2EtekEtWjAtOV9dKSpcXFxcKScsXG4gICAgICAgICAgICBlbmQ6ICdbXmEtekEtWjAtOV9cXFxcfVxcXFwkXSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCQoXFxcXHspPyg6Oik/W2EtekEtWl9dKCg6Oik/W2EtekEtWjAtOV9dKSonLFxuICAgICAgICAgICAgZW5kOiAnKFxcXFwpKT9bXmEtekEtWjAtOV9cXFxcfVxcXFwkXSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW2hsanMuQklOQVJZX05VTUJFUl9NT0RFLCBobGpzLkNfTlVNQkVSX01PREVdXG4gICAgICB9XG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQ09NTUFORCA9IHtcbiAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgIGJlZ2luOiAvXFxcXC8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1thLXpBLVpcXHUwNDMwLVxcdTA0NGZcXHUwNDEwLVxcdTA0MmZdK1sqXT8vfSxcbiAgICAgICAgICB7YmVnaW46IC9bXmEtekEtWlxcdTA0MzAtXFx1MDQ0ZlxcdTA0MTAtXFx1MDQyZjAtOV0vfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gYmVjYXVzZSBpdCBsb29rcyBsaWtlIGF0dHJpYnV0ZXMgaW4gSFRNTCB0YWdzXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAge2JlZ2luOiAvXFxbLywgZW5kOiAvXFxdL30sXG4gICAgICAgICAgICAgICAge2JlZ2luOiAvXFx7LywgZW5kOiAvXFx9L31cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHMqPVxccyovLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICBiZWdpbjogLy0/XFxkKlxcLj9cXGQrKHB0fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1BTkQsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Zvcm11bGEnLFxuICAgICAgICBjb250YWluczogW0NPTU1BTkRdLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAvXFwkXFwkLywgZW5kOiAvXFwkXFwkL30sXG4gICAgICAgICAge2JlZ2luOiAvXFwkLywgZW5kOiAvXFwkL31cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJyUnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCVUlMVF9JTl9UWVBFUyA9ICdib29sIGJ5dGUgaTE2IGkzMiBpNjQgZG91YmxlIHN0cmluZyBiaW5hcnknO1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnbmFtZXNwYWNlIGNvbnN0IHR5cGVkZWYgc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24gdm9pZCBvbmV3YXkgc2V0IGxpc3QgbWFwIHJlcXVpcmVkIG9wdGlvbmFsJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICBCVUlMVF9JTl9UWVBFUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24nLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYihzZXR8bGlzdHxtYXApXFxcXHMqPCcsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3JkczogQlVJTFRfSU5fVFlQRVMsXG4gICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBUUElEID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdbMS05XVswLTldKicsIC8qIG5vIGxlYWRpbmcgemVyb3MgKi9cbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFRQTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJzpbXlxcXFxdXSsnXG4gIH07XG4gIHZhciBUUERBVEEgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnKEFSfFB8UEFZTE9BRHxQUnxSfFNSfFJTUnxMQkx8VlJ8VUFMTXxNRVNTQUdFfFVUT09MfFVGUkFNRXxUSU1FUnwnICtcbiAgICAnVElNRVJfT1ZFUkZMT1d8Sk9JTlRfTUFYX1NQRUVEfFJFU1VNRV9QUk9HfERJQUdfUkVDKVxcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBUUElELFxuICAgICAgVFBMQUJFTFxuICAgIF1cbiAgfTtcbiAgdmFyIFRQSU8gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnKEFJfEFPfERJfERPfEZ8Ukl8Uk98VUl8VU98R0l8R098U0l8U08pXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgICdzZWxmJyxcbiAgICAgIFRQSUQsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLCAvKiBmb3IgcG9zIHNlY3Rpb24gYXQgYm90dG9tICovXG4gICAgICBUUExBQkVMXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdBQk9SVCBBQ0MgQURKVVNUIEFORCBBUF9MRCBCUkVBSyBDQUxMIENOVCBDT0wgQ09ORElUSU9OIENPTkZJRyBEQSBEQiAnICtcbiAgICAgICAgJ0RJViBERVRFQ1QgRUxTRSBFTkQgRU5ERk9SIEVSUl9OVU0gRVJST1JfUFJPRyBGSU5FIEZPUiBHUCBHVUFSRCBJTkMgJyArXG4gICAgICAgICdJRiBKTVAgTElORUFSX01BWF9TUEVFRCBMT0NLIE1PRCBNT05JVE9SIE9GRlNFVCBPZmZzZXQgT1IgT1ZFUlJJREUgJyArXG4gICAgICAgICdQQVVTRSBQUkVHIFBUSCBSVF9MRCBSVU4gU0VMRUNUIFNLSVAgU2tpcCBUQSBUQiBUTyBUT09MX09GRlNFVCAnICtcbiAgICAgICAgJ1Rvb2xfT2Zmc2V0IFVGIFVUIFVGUkFNRV9OVU0gVVRPT0xfTlVNIFVOTE9DSyBXQUlUIFggWSBaIFcgUCBSIFNUUkxFTiAnICtcbiAgICAgICAgJ1NVQlNUUiBGSU5EU1RSIFZPRkZTRVQgUFJPRyBBVFRSIE1OIFBPUycsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnT04gT0ZGIG1heF9zcGVlZCBMUE9TIEpQT1MgRU5BQkxFIERJU0FCTEUgU1RBUlQgU1RPUCBSRVNFVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBUUERBVEEsXG4gICAgICBUUElPLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICcvKFBST0d8QVRUUnxNTnxQT1N8RU5EKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLyogdGhpcyBpcyBmb3IgY2FzZXMgbGlrZSAsQ0FMTCAqL1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICcoQ0FMTHxSVU58UE9JTlRfTE9HSUN8TEJMKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLyogdGhpcyBpcyBmb3IgY2FzZXMgbGlrZSBDTlQxMDAgd2hlcmUgdGhlIGRlZmF1bHQgbGV4ZW1lcyBkbyBub3RcbiAgICAgICAgICogc2VwYXJhdGUgdGhlIGtleXdvcmQgYW5kIHRoZSBudW1iZXIgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoQUNDfENOVHxTa2lwfE9mZnNldHxQU1BEfFJUX0xEfEFQX0xEfFRvb2xfT2Zmc2V0KSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIHRvIGNhdGNoIG51bWJlcnMgdGhhdCBkbyBub3QgaGF2ZSBhIHdvcmQgYm91bmRhcnkgb24gdGhlIGxlZnQgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcZCsoc2VjfG1zZWN8bW0vc2VjfGNtL21pbnxpbmNoL21pbnxkZWcvc2VjfG1tfGlufGNtKT9cXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnLy8nLCAnWzskXScpLFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJ1s7JF0nKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnLS1lZzonLCAnJCcpLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXCRbQS1aYS16MC05X10rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gIH07XG5cbiAgdmFyIEZVTkNUSU9OX05BTUVTID0gJ2F0dHJpYnV0ZSBibG9jayBjb25zdGFudCBjeWNsZSBkYXRlIGR1bXAgaW5jbHVkZSAnICtcbiAgICAgICAgICAgICAgICAgICdtYXggbWluIHBhcmVudCByYW5kb20gcmFuZ2Ugc291cmNlIHRlbXBsYXRlX2Zyb21fc3RyaW5nJztcblxuICB2YXIgRlVOQ1RJT05TID0ge1xuICAgIGJlZ2luS2V5d29yZHM6IEZVTkNUSU9OX05BTUVTLFxuICAgIGtleXdvcmRzOiB7bmFtZTogRlVOQ1RJT05fTkFNRVN9LFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgUEFSQU1TXG4gICAgXVxuICB9O1xuXG4gIHZhciBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16X10rOj8vLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2FicyBiYXRjaCBjYXBpdGFsaXplIGNvbHVtbiBjb252ZXJ0X2VuY29kaW5nIGRhdGUgZGF0ZV9tb2RpZnkgZGVmYXVsdCAnICtcbiAgICAgICdlc2NhcGUgZmlsdGVyIGZpcnN0IGZvcm1hdCBpbmt5X3RvX2h0bWwgaW5saW5lX2NzcyBqb2luIGpzb25fZW5jb2RlIGtleXMgbGFzdCAnICtcbiAgICAgICdsZW5ndGggbG93ZXIgbWFwIG1hcmtkb3duIG1lcmdlIG5sMmJyIG51bWJlcl9mb3JtYXQgcmF3IHJlZHVjZSByZXBsYWNlICcgK1xuICAgICAgJ3JldmVyc2Ugcm91bmQgc2xpY2Ugc29ydCBzcGFjZWxlc3Mgc3BsaXQgc3RyaXB0YWdzIHRpdGxlIHRyaW0gdXBwZXIgdXJsX2VuY29kZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEZVTkNUSU9OU1xuICAgIF1cbiAgfTtcblxuICB2YXIgVEFHUyA9ICdhcHBseSBhdXRvZXNjYXBlIGJsb2NrIGRlcHJlY2F0ZWQgZG8gZW1iZWQgZXh0ZW5kcyBmaWx0ZXIgZmx1c2ggZm9yIGZyb20gJyArXG4gICAgJ2lmIGltcG9ydCBpbmNsdWRlIG1hY3JvIHNhbmRib3ggc2V0IHVzZSB2ZXJiYXRpbSB3aXRoJztcblxuICBUQUdTID0gVEFHUyArICcgJyArIFRBR1Muc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICdlbmQnICsgdH0pLmpvaW4oJyAnKTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3JhZnRjbXMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKC9cXHsjLywgLyN9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyV9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBrZXl3b3JkczogVEFHUyxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtGSUxURVIsIEZVTkNUSU9OU10sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xcey8sIGVuZDogL319LyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIEZJTFRFUiwgRlVOQ1RJT05TXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggJyArXG4gICAgICAnaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSAnICtcbiAgICAgICdsZXQgeWllbGQgY29uc3QgY2xhc3MgcHVibGljIHByaXZhdGUgcHJvdGVjdGVkIGdldCBzZXQgc3VwZXIgJyArXG4gICAgICAnc3RhdGljIGltcGxlbWVudHMgZW51bSBleHBvcnQgaW1wb3J0IGRlY2xhcmUgdHlwZSBuYW1lc3BhY2UgYWJzdHJhY3QgJyArXG4gICAgICAnYXMgZnJvbSBleHRlbmRzIGFzeW5jIGF3YWl0JyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5JyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdldmFsIGlzRmluaXRlIGlzTmFOIHBhcnNlRmxvYXQgcGFyc2VJbnQgZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCAnICtcbiAgICAgICdlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IGVzY2FwZSB1bmVzY2FwZSBPYmplY3QgRnVuY3Rpb24gQm9vbGVhbiBFcnJvciAnICtcbiAgICAgICdFdmFsRXJyb3IgSW50ZXJuYWxFcnJvciBSYW5nZUVycm9yIFJlZmVyZW5jZUVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IgJyArXG4gICAgICAnVHlwZUVycm9yIFVSSUVycm9yIE51bWJlciBNYXRoIERhdGUgU3RyaW5nIFJlZ0V4cCBBcnJheSBGbG9hdDMyQXJyYXkgJyArXG4gICAgICAnRmxvYXQ2NEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBJbnQ4QXJyYXkgVWludDE2QXJyYXkgVWludDMyQXJyYXkgJyArXG4gICAgICAnVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBBcnJheUJ1ZmZlciBEYXRhVmlldyBKU09OIEludGwgYXJndW1lbnRzIHJlcXVpcmUgJyArXG4gICAgICAnbW9kdWxlIGNvbnNvbGUgd2luZG93IGRvY3VtZW50IGFueSBudW1iZXIgYm9vbGVhbiBzdHJpbmcgdm9pZCBQcm9taXNlJ1xuICB9O1xuXG4gIHZhciBERUNPUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIEpTX0lERU5UX1JFLFxuICB9O1xuXG4gIHZhciBBUkdTID1cbiAge1xuICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcblxuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIERFQ09SQVRPUixcbiAgICAgIEFSR1NcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspbj8nIH0sXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMFtvT11bMC03XSspbj8nIH0sXG4gICAgICB7IGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFICsgJ24/JyB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXSAgLy8gZGVmaW5lZCBsYXRlclxuICB9O1xuICB2YXIgSFRNTF9URU1QTEFURSA9IHtcbiAgICBiZWdpbjogJ2h0bWxgJywgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLCByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICB9XG4gIH07XG4gIHZhciBDU1NfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdjc3NgJywgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLCByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnY3NzJyxcbiAgICB9XG4gIH07XG4gIHZhciBURU1QTEFURV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIEhUTUxfVEVNUExBVEUsXG4gICAgQ1NTX1RFTVBMQVRFLFxuICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICBOVU1CRVIsXG4gICAgaGxqcy5SRUdFWFBfTU9ERVxuICBdO1xuXG5cblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndHMnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSBzdHJpY3RbJ1wiXS9cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgSFRNTF9URU1QTEFURSxcbiAgICAgIENTU19URU1QTEFURSxcbiAgICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1CRVIsXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46ICcoXFxcXCguKj9cXFxcKXwnICsgaGxqcy5JREVOVF9SRSArICcpXFxcXHMqPT4nLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogL1tcXHs7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSlNfSURFTlRfUkUgfSksXG4gICAgICAgICAgUEFSQU1TXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC8lLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwIC8vICgpID0+IHt9IGlzIG1vcmUgdHlwaWNhbCBpbiBUeXBlU2NyaXB0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29uc3RydWN0b3InLCBlbmQ6IC9bXFx7O10vLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICBQQVJBTVNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgLy8gcHJldmVudCByZWZlcmVuY2VzIGxpa2UgbW9kdWxlLmlkIGZyb20gYmVpbmcgaGlnbGlnaHRlZCBhcyBtb2R1bGUgZGVmaW5pdGlvbnNcbiAgICAgICAgYmVnaW46IC9tb2R1bGVcXC4vLFxuICAgICAgICBrZXl3b3JkczogeyBidWlsdF9pbjogJ21vZHVsZScgfSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbW9kdWxlJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsIGVuZDogL1xcey8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAnaW50ZXJmYWNlIGV4dGVuZHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwuJyArIGhsanMuSURFTlRfUkUsIHJlbGV2YW5jZTogMCAvLyBoYWNrOiBwcmV2ZW50cyBkZXRlY3Rpb24gb2Yga2V5d29yZHMgYWZ0ZXIgZG90c1xuICAgICAgfSxcbiAgICAgIERFQ09SQVRPUixcbiAgICAgIEFSR1NcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBWYWx1ZSB0eXBlc1xuICAgICAgICAnY2hhciB1Y2hhciB1bmljaGFyIGludCB1aW50IGxvbmcgdWxvbmcgc2hvcnQgdXNob3J0IGludDggaW50MTYgaW50MzIgaW50NjQgdWludDggJyArXG4gICAgICAgICd1aW50MTYgdWludDMyIHVpbnQ2NCBmbG9hdCBkb3VibGUgYm9vbCBzdHJ1Y3QgZW51bSBzdHJpbmcgdm9pZCAnICtcbiAgICAgICAgLy8gUmVmZXJlbmNlIHR5cGVzXG4gICAgICAgICd3ZWFrIHVub3duZWQgb3duZWQgJyArXG4gICAgICAgIC8vIE1vZGlmaWVyc1xuICAgICAgICAnYXN5bmMgc2lnbmFsIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2Ugb3ZlcnJpZGUgdmlydHVhbCBkZWxlZ2F0ZSAnICtcbiAgICAgICAgLy8gQ29udHJvbCBTdHJ1Y3R1cmVzXG4gICAgICAgICdpZiB3aGlsZSBkbyBmb3IgZm9yZWFjaCBlbHNlIHN3aXRjaCBjYXNlIGJyZWFrIGRlZmF1bHQgcmV0dXJuIHRyeSBjYXRjaCAnICtcbiAgICAgICAgLy8gVmlzaWJpbGl0eVxuICAgICAgICAncHVibGljIHByaXZhdGUgcHJvdGVjdGVkIGludGVybmFsICcgK1xuICAgICAgICAvLyBPdGhlclxuICAgICAgICAndXNpbmcgbmV3IHRoaXMgZ2V0IHNldCBjb25zdCBzdGRvdXQgc3RkaW4gc3RkZXJyIHZhcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ0RCdXMgR0xpYiBDQ29kZSBHZWUgT2JqZWN0IEd0ayBQb3NpeCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnZmFsc2UgdHJ1ZSBudWxsJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIG5hbWVzcGFjZScsIGVuZDogJ3snLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnW14sOlxcXFxuXFxcXHNcXFxcLl0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ14jJywgZW5kOiAnJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd2YiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhZGRoYW5kbGVyIGFkZHJlc3NvZiBhbGlhcyBhbmQgYW5kYWxzbyBhZ2dyZWdhdGUgYW5zaSBhcyBhc3luYyBhc3NlbWJseSBhdXRvIGF3YWl0IGJpbmFyeSBieSBieXJlZiBieXZhbCAnICsgLyogYS1iICovXG4gICAgICAgICdjYWxsIGNhc2UgY2F0Y2ggY2xhc3MgY29tcGFyZSBjb25zdCBjb250aW51ZSBjdXN0b20gZGVjbGFyZSBkZWZhdWx0IGRlbGVnYXRlIGRpbSBkaXN0aW5jdCBkbyAnICsgLyogYy1kICovXG4gICAgICAgICdlYWNoIGVxdWFscyBlbHNlIGVsc2VpZiBlbmQgZW51bSBlcmFzZSBlcnJvciBldmVudCBleGl0IGV4cGxpY2l0IGZpbmFsbHkgZm9yIGZyaWVuZCBmcm9tIGZ1bmN0aW9uICcgKyAvKiBlLWYgKi9cbiAgICAgICAgJ2dldCBnbG9iYWwgZ290byBncm91cCBoYW5kbGVzIGlmIGltcGxlbWVudHMgaW1wb3J0cyBpbiBpbmhlcml0cyBpbnRlcmZhY2UgaW50byBpcyBpc2ZhbHNlIGlzbm90IGlzdHJ1ZSBpdGVyYXRvciAnICsgLyogZy1pICovXG4gICAgICAgICdqb2luIGtleSBsZXQgbGliIGxpa2UgbG9vcCBtZSBtaWQgbW9kIG1vZHVsZSBtdXN0aW5oZXJpdCBtdXN0b3ZlcnJpZGUgbXliYXNlIG15Y2xhc3MgJyArIC8qIGotbSAqL1xuICAgICAgICAnbmFtZW9mIG5hbWVzcGFjZSBuYXJyb3dpbmcgbmV3IG5leHQgbm90IG5vdGluaGVyaXRhYmxlIG5vdG92ZXJyaWRhYmxlICcgKyAvKiBuICovXG4gICAgICAgICdvZiBvZmYgb24gb3BlcmF0b3Igb3B0aW9uIG9wdGlvbmFsIG9yIG9yZGVyIG9yZWxzZSBvdmVybG9hZHMgb3ZlcnJpZGFibGUgb3ZlcnJpZGVzICcgKyAvKiBvICovXG4gICAgICAgICdwYXJhbWFycmF5IHBhcnRpYWwgcHJlc2VydmUgcHJpdmF0ZSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVibGljICcgKyAvKiBwICovXG4gICAgICAgICdyYWlzZWV2ZW50IHJlYWRvbmx5IHJlZGltIHJlbSByZW1vdmVoYW5kbGVyIHJlc3VtZSByZXR1cm4gJyArIC8qIHIgKi9cbiAgICAgICAgJ3NlbGVjdCBzZXQgc2hhZG93cyBzaGFyZWQgc2tpcCBzdGF0aWMgc3RlcCBzdG9wIHN0cnVjdHVyZSBzdHJpY3Qgc3ViIHN5bmNsb2NrICcgKyAvKiBzICovXG4gICAgICAgICd0YWtlIHRleHQgdGhlbiB0aHJvdyB0byB0cnkgdW5pY29kZSB1bnRpbCB1c2luZyB3aGVuIHdoZXJlIHdoaWxlIHdpZGVuaW5nIHdpdGggd2l0aGV2ZW50cyB3cml0ZW9ubHkgeG9yIHlpZWxkJywgLyogdC15ICovXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2Jvb2xlYW4gYnl0ZSBjYm9vbCBjYnl0ZSBjY2hhciBjZGF0ZSBjZGVjIGNkYmwgY2hhciBjaW50IGNsbmcgY29iaiBjc2J5dGUgY3Nob3J0IGNzbmcgY3N0ciBjdHlwZSAnICsgIC8qIGItYyAqL1xuICAgICAgICAnZGF0ZSBkZWNpbWFsIGRpcmVjdGNhc3QgZG91YmxlIGdldHR5cGUgZ2V0eG1sbmFtZXNwYWNlIGlpZiBpbnRlZ2VyIGxvbmcgb2JqZWN0ICcgKyAvKiBkLW8gKi9cbiAgICAgICAgJ3NieXRlIHNob3J0IHNpbmdsZSBzdHJpbmcgdHJ5Y2FzdCB0eXBlb2YgdWludGVnZXIgdWxvbmcgdXNob3J0JywgLyogcy11ICovXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBub3RoaW5nJ1xuICAgIH0sXG4gICAgaWxsZWdhbDogJy8vfHt8fXxlbmRpZnxnb3N1Ynx2YXJpYW50fHdlbmR8XlxcXFwkICcsIC8qIHJlc2VydmVkIGRlcHJlY2F0ZWQga2V5d29yZHMgKi9cbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjb250YWluczogW3tiZWdpbjogJ1wiXCInfV19KSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcJycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnXFwnXFwnXFwnfDwhLS18LS0+JyxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlBIUkFTQUxfV09SRFNfTU9ERV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnPC8/JywgZW5kOiAnPicsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5QSFJBU0FMX1dPUkRTX01PREVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmQgcmVnaW9uIGV4dGVybmFsc291cmNlJ31cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndmJzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2NhbGwgY2xhc3MgY29uc3QgZGltIGRvIGxvb3AgZXJhc2UgZXhlY3V0ZSBleGVjdXRlZ2xvYmFsIGV4aXQgZm9yIGVhY2ggbmV4dCBmdW5jdGlvbiAnICtcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBvbiBlcnJvciBvcHRpb24gZXhwbGljaXQgbmV3IHByaXZhdGUgcHJvcGVydHkgbGV0IGdldCBwdWJsaWMgcmFuZG9taXplICcgK1xuICAgICAgICAncmVkaW0gcmVtIHNlbGVjdCBjYXNlIHNldCBzdG9wIHN1YiB3aGlsZSB3ZW5kIHdpdGggZW5kIHRvIGVsc2VpZiBpcyBvciB4b3IgYW5kIG5vdCAnICtcbiAgICAgICAgJ2NsYXNzX2luaXRpYWxpemUgY2xhc3NfdGVybWluYXRlIGRlZmF1bHQgcHJlc2VydmUgaW4gbWUgYnl2YWwgYnlyZWYgc3RlcCByZXN1bWUgZ290bycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2xjYXNlIG1vbnRoIHZhcnR5cGUgaW5zdHJyZXYgdWJvdW5kIHNldGxvY2FsZSBnZXRvYmplY3QgcmdiIGdldHJlZiBzdHJpbmcgJyArXG4gICAgICAgICd3ZWVrZGF5bmFtZSBybmQgZGF0ZWFkZCBtb250aG5hbWUgbm93IGRheSBtaW51dGUgaXNhcnJheSBjYm9vbCByb3VuZCBmb3JtYXRjdXJyZW5jeSAnICtcbiAgICAgICAgJ2NvbnZlcnNpb25zIGNzbmcgdGltZXZhbHVlIHNlY29uZCB5ZWFyIHNwYWNlIGFicyBjbG5nIHRpbWVzZXJpYWwgZml4cyBsZW4gYXNjICcgK1xuICAgICAgICAnaXNlbXB0eSBtYXRocyBkYXRlc2VyaWFsIGF0biB0aW1lciBpc29iamVjdCBmaWx0ZXIgd2Vla2RheSBkYXRldmFsdWUgY2N1ciBpc2RhdGUgJyArXG4gICAgICAgICdpbnN0ciBkYXRlZGlmZiBmb3JtYXRkYXRldGltZSByZXBsYWNlIGlzbnVsbCByaWdodCBzZ24gYXJyYXkgc251bWVyaWMgbG9nIGNkYmwgaGV4ICcgK1xuICAgICAgICAnY2hyIGxib3VuZCBtc2dib3ggdWNhc2UgZ2V0bG9jYWxlIGNvcyBjZGF0ZSBjYnl0ZSBydHJpbSBqb2luIGhvdXIgb2N0IHR5cGVuYW1lIHRyaW0gJyArXG4gICAgICAgICdzdHJjb21wIGludCBjcmVhdGVvYmplY3QgbG9hZHBpY3R1cmUgdGFuIGZvcm1hdG51bWJlciBtaWQgc2NyaXB0ZW5naW5lYnVpbGR2ZXJzaW9uICcgK1xuICAgICAgICAnc2NyaXB0ZW5naW5lIHNwbGl0IHNjcmlwdGVuZ2luZW1pbm9ydmVyc2lvbiBjaW50IHNpbiBkYXRlcGFydCBsdHJpbSBzcXIgJyArXG4gICAgICAgICdzY3JpcHRlbmdpbmVtYWpvcnZlcnNpb24gdGltZSBkZXJpdmVkIGV2YWwgZGF0ZSBmb3JtYXRwZXJjZW50IGV4cCBpbnB1dGJveCBsZWZ0IGFzY3cgJyArXG4gICAgICAgICdjaHJ3IHJlZ2V4cCBzZXJ2ZXIgcmVzcG9uc2UgcmVxdWVzdCBjc3RyIGVycicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBudWxsIG5vdGhpbmcgZW1wdHknXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnLy8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2NvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XX0pLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvJy8sXG4gICAgICAgIC8kLyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc8JScsIGVuZDogJyU+JyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICd2YnNjcmlwdCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1ZfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhY2NlcHRfb24gYWxpYXMgYWx3YXlzIGFsd2F5c19jb21iIGFsd2F5c19mZiBhbHdheXNfbGF0Y2ggYW5kIGFzc2VydCBhc3NpZ24gJyArXG4gICAgICAnYXNzdW1lIGF1dG9tYXRpYyBiZWZvcmUgYmVnaW4gYmluZCBiaW5zIGJpbnNvZiBiaXQgYnJlYWsgYnVmfDAgYnVmaWYwIGJ1ZmlmMSAnICtcbiAgICAgICdieXRlIGNhc2UgY2FzZXggY2FzZXogY2VsbCBjaGFuZGxlIGNoZWNrZXIgY2xhc3MgY2xvY2tpbmcgY21vcyBjb25maWcgY29uc3QgJyArXG4gICAgICAnY29uc3RyYWludCBjb250ZXh0IGNvbnRpbnVlIGNvdmVyIGNvdmVyZ3JvdXAgY292ZXJwb2ludCBjcm9zcyBkZWFzc2lnbiBkZWZhdWx0ICcgK1xuICAgICAgJ2RlZnBhcmFtIGRlc2lnbiBkaXNhYmxlIGRpc3QgZG8gZWRnZSBlbHNlIGVuZCBlbmRjYXNlIGVuZGNoZWNrZXIgZW5kY2xhc3MgJyArXG4gICAgICAnZW5kY2xvY2tpbmcgZW5kY29uZmlnIGVuZGZ1bmN0aW9uIGVuZGdlbmVyYXRlIGVuZGdyb3VwIGVuZGludGVyZmFjZSBlbmRtb2R1bGUgJyArXG4gICAgICAnZW5kcGFja2FnZSBlbmRwcmltaXRpdmUgZW5kcHJvZ3JhbSBlbmRwcm9wZXJ0eSBlbmRzcGVjaWZ5IGVuZHNlcXVlbmNlIGVuZHRhYmxlICcgK1xuICAgICAgJ2VuZHRhc2sgZW51bSBldmVudCBldmVudHVhbGx5IGV4cGVjdCBleHBvcnQgZXh0ZW5kcyBleHRlcm4gZmluYWwgZmlyc3RfbWF0Y2ggZm9yICcgK1xuICAgICAgJ2ZvcmNlIGZvcmVhY2ggZm9yZXZlciBmb3JrIGZvcmtqb2luIGZ1bmN0aW9uIGdlbmVyYXRlfDUgZ2VudmFyIGdsb2JhbCBoaWdoejAgaGlnaHoxICcgK1xuICAgICAgJ2lmIGlmZiBpZm5vbmUgaWdub3JlX2JpbnMgaWxsZWdhbF9iaW5zIGltcGxlbWVudHMgaW1wbGllcyBpbXBvcnQgaW5jZGlyIGluY2x1ZGUgJyArXG4gICAgICAnaW5pdGlhbCBpbm91dCBpbnB1dCBpbnNpZGUgaW5zdGFuY2UgaW50IGludGVnZXIgaW50ZXJjb25uZWN0IGludGVyZmFjZSBpbnRlcnNlY3QgJyArXG4gICAgICAnam9pbiBqb2luX2FueSBqb2luX25vbmUgbGFyZ2UgbGV0IGxpYmxpc3QgbGlicmFyeSBsb2NhbCBsb2NhbHBhcmFtIGxvZ2ljIGxvbmdpbnQgJyArXG4gICAgICAnbWFjcm9tb2R1bGUgbWF0Y2hlcyBtZWRpdW0gbW9kcG9ydCBtb2R1bGUgbmFuZCBuZWdlZGdlIG5ldHR5cGUgbmV3IG5leHR0aW1lIG5tb3MgJyArXG4gICAgICAnbm9yIG5vc2hvd2NhbmNlbGxlZCBub3Qgbm90aWYwIG5vdGlmMSBvciBvdXRwdXQgcGFja2FnZSBwYWNrZWQgcGFyYW1ldGVyIHBtb3MgJyArXG4gICAgICAncG9zZWRnZSBwcmltaXRpdmUgcHJpb3JpdHkgcHJvZ3JhbSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVsbDAgcHVsbDEgcHVsbGRvd24gcHVsbHVwICcgK1xuICAgICAgJ3B1bHNlc3R5bGVfb25kZXRlY3QgcHVsc2VzdHlsZV9vbmV2ZW50IHB1cmUgcmFuZCByYW5kYyByYW5kY2FzZSByYW5kc2VxdWVuY2UgcmNtb3MgJyArXG4gICAgICAncmVhbCByZWFsdGltZSByZWYgcmVnIHJlamVjdF9vbiByZWxlYXNlIHJlcGVhdCByZXN0cmljdCByZXR1cm4gcm5tb3MgcnBtb3MgcnRyYW4gJyArXG4gICAgICAncnRyYW5pZjAgcnRyYW5pZjEgc19hbHdheXMgc19ldmVudHVhbGx5IHNfbmV4dHRpbWUgc191bnRpbCBzX3VudGlsX3dpdGggc2NhbGFyZWQgJyArXG4gICAgICAnc2VxdWVuY2Ugc2hvcnRpbnQgc2hvcnRyZWFsIHNob3djYW5jZWxsZWQgc2lnbmVkIHNtYWxsIHNvZnQgc29sdmUgc3BlY2lmeSBzcGVjcGFyYW0gJyArXG4gICAgICAnc3RhdGljIHN0cmluZyBzdHJvbmcgc3Ryb25nMCBzdHJvbmcxIHN0cnVjdCBzdXBlciBzdXBwbHkwIHN1cHBseTEgc3luY19hY2NlcHRfb24gJyArXG4gICAgICAnc3luY19yZWplY3Rfb24gdGFibGUgdGFnZ2VkIHRhc2sgdGhpcyB0aHJvdWdob3V0IHRpbWUgdGltZXByZWNpc2lvbiB0aW1ldW5pdCB0cmFuICcgK1xuICAgICAgJ3RyYW5pZjAgdHJhbmlmMSB0cmkgdHJpMCB0cmkxIHRyaWFuZCB0cmlvciB0cmlyZWcgdHlwZSB0eXBlZGVmIHVuaW9uIHVuaXF1ZSB1bmlxdWUwICcgK1xuICAgICAgJ3Vuc2lnbmVkIHVudGlsIHVudGlsX3dpdGggdW50eXBlZCB1c2UgdXdpcmUgdmFyIHZlY3RvcmVkIHZpcnR1YWwgdm9pZCB3YWl0IHdhaXRfb3JkZXIgJyArXG4gICAgICAnd2FuZCB3ZWFrIHdlYWswIHdlYWsxIHdoaWxlIHdpbGRjYXJkIHdpcmUgd2l0aCB3aXRoaW4gd29yIHhub3IgeG9yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ251bGwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJyRmaW5pc2ggJHN0b3AgJGV4aXQgJGZhdGFsICRlcnJvciAkd2FybmluZyAkaW5mbyAkcmVhbHRpbWUgJHRpbWUgJHByaW50dGltZXNjYWxlICcgK1xuICAgICAgJyRiaXRzdG9yZWFsICRiaXRzdG9zaG9ydHJlYWwgJGl0b3IgJHNpZ25lZCAkY2FzdCAkYml0cyAkc3RpbWUgJHRpbWVmb3JtYXQgJyArXG4gICAgICAnJHJlYWx0b2JpdHMgJHNob3J0cmVhbHRvYml0cyAkcnRvaSAkdW5zaWduZWQgJGFzc2VydG9uICRhc3NlcnRraWxsICRhc3NlcnRwYXNzb24gJyArXG4gICAgICAnJGFzc2VydGZhaWxvbiAkYXNzZXJ0bm9udmFjdW91c29uICRhc3NlcnRvZmYgJGFzc2VydGNvbnRyb2wgJGFzc2VydHBhc3NvZmYgJyArXG4gICAgICAnJGFzc2VydGZhaWxvZmYgJGFzc2VydHZhY3VvdXNvZmYgJGlzdW5ib3VuZGVkICRzYW1wbGVkICRmZWxsICRjaGFuZ2VkICRwYXN0X2djbGsgJyArXG4gICAgICAnJGZlbGxfZ2NsayAkY2hhbmdlZF9nY2xrICRyaXNpbmdfZ2NsayAkc3RlYWR5X2djbGsgJGNvdmVyYWdlX2NvbnRyb2wgJyArXG4gICAgICAnJGNvdmVyYWdlX2dldCAkY292ZXJhZ2Vfc2F2ZSAkc2V0X2NvdmVyYWdlX2RiX25hbWUgJHJvc2UgJHN0YWJsZSAkcGFzdCAnICtcbiAgICAgICckcm9zZV9nY2xrICRzdGFibGVfZ2NsayAkZnV0dXJlX2djbGsgJGZhbGxpbmdfZ2NsayAkY2hhbmdpbmdfZ2NsayAkZGlzcGxheSAnICtcbiAgICAgICckY292ZXJhZ2VfZ2V0X21heCAkY292ZXJhZ2VfbWVyZ2UgJGdldF9jb3ZlcmFnZSAkbG9hZF9jb3ZlcmFnZV9kYiAkdHlwZW5hbWUgJyArXG4gICAgICAnJHVucGFja2VkX2RpbWVuc2lvbnMgJGxlZnQgJGxvdyAkaW5jcmVtZW50ICRjbG9nMiAkbG4gJGxvZzEwICRleHAgJHNxcnQgJHBvdyAnICtcbiAgICAgICckZmxvb3IgJGNlaWwgJHNpbiAkY29zICR0YW4gJGNvdW50Yml0cyAkb25laG90ICRpc3Vua25vd24gJGZhdGFsICR3YXJuaW5nICcgK1xuICAgICAgJyRkaW1lbnNpb25zICRyaWdodCAkaGlnaCAkc2l6ZSAkYXNpbiAkYWNvcyAkYXRhbiAkYXRhbjIgJGh5cG90ICRzaW5oICRjb3NoICcgK1xuICAgICAgJyR0YW5oICRhc2luaCAkYWNvc2ggJGF0YW5oICRjb3VudG9uZXMgJG9uZWhvdDAgJGVycm9yICRpbmZvICRyYW5kb20gJyArXG4gICAgICAnJGRpc3RfY2hpX3NxdWFyZSAkZGlzdF9lcmxhbmcgJGRpc3RfZXhwb25lbnRpYWwgJGRpc3Rfbm9ybWFsICRkaXN0X3BvaXNzb24gJyArXG4gICAgICAnJGRpc3RfdCAkZGlzdF91bmlmb3JtICRxX2luaXRpYWxpemUgJHFfcmVtb3ZlICRxX2V4YW0gJGFzeW5jJGFuZCRhcnJheSAnICtcbiAgICAgICckYXN5bmMkbmFuZCRhcnJheSAkYXN5bmMkb3IkYXJyYXkgJGFzeW5jJG5vciRhcnJheSAkc3luYyRhbmQkYXJyYXkgJyArXG4gICAgICAnJHN5bmMkbmFuZCRhcnJheSAkc3luYyRvciRhcnJheSAkc3luYyRub3IkYXJyYXkgJHFfYWRkICRxX2Z1bGwgJHBzcHJpbnRmICcgK1xuICAgICAgJyRhc3luYyRhbmQkcGxhbmUgJGFzeW5jJG5hbmQkcGxhbmUgJGFzeW5jJG9yJHBsYW5lICRhc3luYyRub3IkcGxhbmUgJyArXG4gICAgICAnJHN5bmMkYW5kJHBsYW5lICRzeW5jJG5hbmQkcGxhbmUgJHN5bmMkb3IkcGxhbmUgJHN5bmMkbm9yJHBsYW5lICRzeXN0ZW0gJyArXG4gICAgICAnJGRpc3BsYXkgJGRpc3BsYXliICRkaXNwbGF5aCAkZGlzcGxheW8gJHN0cm9iZSAkc3Ryb2JlYiAkc3Ryb2JlaCAkc3Ryb2JlbyAnICtcbiAgICAgICckd3JpdGUgJHJlYWRtZW1iICRyZWFkbWVtaCAkd3JpdGVtZW1oICR2YWx1ZSRwbHVzYXJncyAnICtcbiAgICAgICckZHVtcHZhcnMgJGR1bXBvbiAkZHVtcGxpbWl0ICRkdW1wcG9ydHMgJGR1bXBwb3J0c29uICRkdW1wcG9ydHNsaW1pdCAnICtcbiAgICAgICckd3JpdGViICR3cml0ZWggJHdyaXRlbyAkbW9uaXRvciAkbW9uaXRvcmIgJG1vbml0b3JoICRtb25pdG9ybyAkd3JpdGVtZW1iICcgK1xuICAgICAgJyRkdW1wZmlsZSAkZHVtcG9mZiAkZHVtcGFsbCAkZHVtcGZsdXNoICRkdW1wcG9ydHNvZmYgJGR1bXBwb3J0c2FsbCAnICtcbiAgICAgICckZHVtcHBvcnRzZmx1c2ggJGZjbG9zZSAkZmRpc3BsYXkgJGZkaXNwbGF5YiAkZmRpc3BsYXloICRmZGlzcGxheW8gJyArXG4gICAgICAnJGZzdHJvYmUgJGZzdHJvYmViICRmc3Ryb2JlaCAkZnN0cm9iZW8gJHN3cml0ZSAkc3dyaXRlYiAkc3dyaXRlaCAnICtcbiAgICAgICckc3dyaXRlbyAkZnNjYW5mICRmcmVhZCAkZnNlZWsgJGZmbHVzaCAkZmVvZiAkZm9wZW4gJGZ3cml0ZSAkZndyaXRlYiAnICtcbiAgICAgICckZndyaXRlaCAkZndyaXRlbyAkZm1vbml0b3IgJGZtb25pdG9yYiAkZm1vbml0b3JoICRmbW9uaXRvcm8gJHNmb3JtYXQgJyArXG4gICAgICAnJHNmb3JtYXRmICRmZ2V0YyAkdW5nZXRjICRmZ2V0cyAkc3NjYW5mICRyZXdpbmQgJGZ0ZWxsICRmZXJyb3InXG4gICAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3YnLCAnc3YnLCAnc3ZoJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IFNWX0tFWVdPUkRTLCBsZXhlbWVzOiAvW1xcd1xcJF0rLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdcXFxcYigoXFxcXGQrXFwnKGJ8aHxvfGR8QnxIfE98RCkpWzAtOXh6WFphLWZBLUZfXSspJ30sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXEIoKFxcJyhifGh8b3xkfEJ8SHxPfEQpKVswLTl4elhaYS1mQS1GX10rKSd9LFxuICAgICAgICAgIHtiZWdpbjogJ1xcXFxiKFswLTlfXSkrJywgcmVsZXZhbmNlOiAwfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLyogcGFyYW1ldGVycyB0byBpbnN0YW5jZXMgKi9cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJyNcXFxcKCg/IXBhcmFtZXRlcikuK1xcXFwpJ30sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXC5cXFxcdysnLCByZWxldmFuY2U6IDB9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdkZWZpbmUgX19GSUxFX18gJyArXG4gICAgICAgICAgJ19fTElORV9fIGJlZ2luX2tleXdvcmRzIGNlbGxkZWZpbmUgZGVmYXVsdF9uZXR0eXBlIGRlZmluZSAnICtcbiAgICAgICAgICAnZWxzZSBlbHNpZiBlbmRfa2V5d29yZHMgZW5kY2VsbGRlZmluZSBlbmRpZiBpZmRlZiBpZm5kZWYgJyArXG4gICAgICAgICAgJ2luY2x1ZGUgbGluZSBub3VuY29ubmVjdGVkX2RyaXZlIHByYWdtYSByZXNldGFsbCB0aW1lc2NhbGUgJyArXG4gICAgICAgICAgJ3VuY29ubmVjdGVkX2RyaXZlIHVuZGVmIHVuZGVmaW5lYWxsJ30sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTsgLy8gcmV0dXJuXG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIFZIREwgbnVtZXJpYyBsaXRlcmFscy5cblxuICAvLyBEZWNpbWFsIGxpdGVyYWw6XG4gIHZhciBJTlRFR0VSX1JFID0gJ1xcXFxkKF98XFxcXGQpKic7XG4gIHZhciBFWFBPTkVOVF9SRSA9ICdbZUVdWy0rXT8nICsgSU5URUdFUl9SRTtcbiAgdmFyIERFQ0lNQUxfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnKFxcXFwuJyArIElOVEVHRVJfUkUgKyAnKT8nICsgJygnICsgRVhQT05FTlRfUkUgKyAnKT8nO1xuICAvLyBCYXNlZCBsaXRlcmFsOlxuICB2YXIgQkFTRURfSU5URUdFUl9SRSA9ICdcXFxcdysnO1xuICB2YXIgQkFTRURfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnIycgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyhcXFxcLicgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyk/JyArICcjJyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICB2YXIgTlVNQkVSX1JFID0gJ1xcXFxiKCcgKyBCQVNFRF9MSVRFUkFMX1JFICsgJ3wnICsgREVDSU1BTF9MSVRFUkFMX1JFICsgJyknO1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FicyBhY2Nlc3MgYWZ0ZXIgYWxpYXMgYWxsIGFuZCBhcmNoaXRlY3R1cmUgYXJyYXkgYXNzZXJ0IGFzc3VtZSBhc3N1bWVfZ3VhcmFudGVlIGF0dHJpYnV0ZSAnICtcbiAgICAgICAgJ2JlZ2luIGJsb2NrIGJvZHkgYnVmZmVyIGJ1cyBjYXNlIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIGNvbnN0YW50IGNvbnRleHQgY292ZXIgZGlzY29ubmVjdCAnICtcbiAgICAgICAgJ2Rvd250byBkZWZhdWx0IGVsc2UgZWxzaWYgZW5kIGVudGl0eSBleGl0IGZhaXJuZXNzIGZpbGUgZm9yIGZvcmNlIGZ1bmN0aW9uIGdlbmVyYXRlICcgK1xuICAgICAgICAnZ2VuZXJpYyBncm91cCBndWFyZGVkIGlmIGltcHVyZSBpbiBpbmVydGlhbCBpbm91dCBpcyBsYWJlbCBsaWJyYXJ5IGxpbmthZ2UgbGl0ZXJhbCAnICtcbiAgICAgICAgJ2xvb3AgbWFwIG1vZCBuYW5kIG5ldyBuZXh0IG5vciBub3QgbnVsbCBvZiBvbiBvcGVuIG9yIG90aGVycyBvdXQgcGFja2FnZSBwYXJhbWV0ZXIgcG9ydCAnICtcbiAgICAgICAgJ3Bvc3Rwb25lZCBwcm9jZWR1cmUgcHJvY2VzcyBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVyZSByYW5nZSByZWNvcmQgcmVnaXN0ZXIgcmVqZWN0ICcgK1xuICAgICAgICAncmVsZWFzZSByZW0gcmVwb3J0IHJlc3RyaWN0IHJlc3RyaWN0X2d1YXJhbnRlZSByZXR1cm4gcm9sIHJvciBzZWxlY3Qgc2VxdWVuY2UgJyArXG4gICAgICAgICdzZXZlcml0eSBzaGFyZWQgc2lnbmFsIHNsYSBzbGwgc3JhIHNybCBzdHJvbmcgc3VidHlwZSB0aGVuIHRvIHRyYW5zcG9ydCB0eXBlICcgK1xuICAgICAgICAndW5hZmZlY3RlZCB1bml0cyB1bnRpbCB1c2UgdmFyaWFibGUgdmlldyB2bW9kZSB2cHJvcCB2dW5pdCB3YWl0IHdoZW4gd2hpbGUgd2l0aCB4bm9yIHhvcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2Jvb2xlYW4gYml0IGNoYXJhY3RlciAnICtcbiAgICAgICAgJ2ludGVnZXIgdGltZSBkZWxheV9sZW5ndGggbmF0dXJhbCBwb3NpdGl2ZSAnICtcbiAgICAgICAgJ3N0cmluZyBiaXRfdmVjdG9yIGZpbGVfb3Blbl9raW5kIGZpbGVfb3Blbl9zdGF0dXMgJyArXG4gICAgICAgICdzdGRfbG9naWMgc3RkX2xvZ2ljX3ZlY3RvciB1bnNpZ25lZCBzaWduZWQgYm9vbGVhbl92ZWN0b3IgaW50ZWdlcl92ZWN0b3IgJyArXG4gICAgICAgICdzdGRfdWxvZ2ljIHN0ZF91bG9naWNfdmVjdG9yIHVucmVzb2x2ZWRfdW5zaWduZWQgdV91bnNpZ25lZCB1bnJlc29sdmVkX3NpZ25lZCB1X3NpZ25lZCAnICtcbiAgICAgICAgJ3JlYWxfdmVjdG9yIHRpbWVfdmVjdG9yJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdmYWxzZSB0cnVlIG5vdGUgd2FybmluZyBlcnJvciBmYWlsdXJlICcgKyAgLy8gc2V2ZXJpdHlfbGV2ZWxcbiAgICAgICAgJ2xpbmUgdGV4dCBzaWRlIHdpZHRoJyAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0aW9cbiAgICB9LFxuICAgIGlsbGVnYWw6ICd7JyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgICAgICAvLyBWSERMLTIwMDggYmxvY2sgY29tbWVudGluZy5cbiAgICAgIGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IE5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJyhVfFh8MHwxfFp8V3xMfEh8LSlcXCcnLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXFwnW0EtWmEtel0oXz9bQS1aYS16MC05XSkqJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBsZXhlbWVzOiAvWyEjQFxcd10rLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8gZXhwcmVzcyB2ZXJzaW9uIGV4Y2VwdDogISAmICogPCA9ID4gISEgIyBAIEBAXG4gICAgICAgICdOfDAgUHwwIFh8MCBhfDAgYWIgYWJjIGFibyBhbCBhbSBhbnwwIGFyIGFyZ2EgYXJnZCBhcmdlIGFyZ2RvIGFyZ2cgYXJnbCBhcmd1IGFzIGF1IGF1ZyBhdW4gYnwwIGJOIGJhIGJhZCBiZCBiZSBiZWwgYmYgYmwgYm0gYm4gYm8gYnAgYnIgYnJlYSBicmVha2EgYnJlYWtkIGJyZWFrbCBicm8gYnVmZG8gYnVmZmVycyBidW4gYncgY3wwIGNOIGNOZiBjYSBjYWJjIGNhZGRiIGNhZCBjYWRkZiBjYWwgY2F0IGNiIGNjIGNjbCBjZCBjZSBjZXggY2YgY2ZpciBjZ2V0YiBjZ2V0ZSBjZyBjaGFuZ2VzIGNoZCBjaGUgY2hlY2t0IGNsIGNsYSBjbG8gY20gY21hcGMgY21lIGNuIGNuZXcgY25mIGNubyBjbm9yZWEgY25vcmVtZSBjbyBjb2wgY29sbyBjb20gY29tYyBjb21wIGNvbiBjb25mIGNvcGUgJytcbiAgICAgICAgJ2NwIGNwZiBjcSBjciBjcyBjc3QgY3UgY3VuYSBjdW5tZSBjdyBkZWxtIGRlYiBkZWJ1Z2cgZGVsYyBkZWxmIGRpZiBkaWZmZyBkaWZmbyBkaWZmcCBkaWZmcHUgZGlmZnMgZGlmZnRoaXMgZGlnIGRpIGRsIGRlbGwgZGogZGxpIGRvIGRvYXV0b2EgZHAgZHIgZHMgZHNwIGV8MCBlYSBlYyBlY2hvZSBlY2hvaCBlY2hvbSBlY2hvbiBlbCBlbHNlaSBlbSBlbiBlbmRmbyBlbmRmIGVuZHQgZW5kdyBlbmUgZXggZXhlIGV4aSBleHUgZnwwIGZpbGVzIGZpbGV0IGZpbiBmaW5hIGZpbmkgZmlyIGZpeCBmbyBmb2xkYyBmb2xkZCBmb2xkZG9jIGZvbGRvIGZvciBmdSBnbyBnciBncmVwYSBndSBndiBoYSBoZWxwZiBoZWxwZyBoZWxwdCBoaSBoaWQgaGlzIGlhIGlhYmMgaWYgaWogaWwgaW0gaW1hcGMgJytcbiAgICAgICAgJ2ltZSBpbm8gaW5vcmVhIGlub3JlbWUgaW50IGlzIGlzcCBpdSBpdW5hIGl1bm1lIGp8MCBqdSBrfDAga2VlcGEga2VlIGtlZXBqIGxOIGxOZiBsfDAgbGFkIGxhZGRiIGxhZGRmIGxhIGxhbiBsYXQgbGIgbGMgbGNoIGxjbCBsY3MgbGUgbGVmdGEgbGV0IGxleCBsZiBsZmlyIGxnZXRiIGxnZXRlIGxnIGxnciBsZ3JlcGEgbGggbGwgbGxhIGxsaSBsbWFrIGxtIGxtYXBjIGxuZSBsbmV3IGxuZiBsbiBsb2FkayBsbyBsb2MgbG9ja3YgbG9sIGxvcGUgbHAgbHBmIGxyIGxzIGx0IGx1IGx1YSBsdWFkIGx1YWYgbHYgbHZpbWdyZXBhIGx3IG18MCBtYSBtYWsgbWFwIG1hcGMgbWFya3MgbWF0IG1lIG1lbnV0IG1lcyBtayBta3MgbWtzcCBta3YgbWt2aWUgbW9kIG16IG16ZiBuYmMgbmIgbmJzIG5ldyBubSBubWFwYyBubWUgbm4gbm5vcmVtZSBub2Egbm8gbm9oIG5vcmVhIG5vcmVtZSBub3JtIG51IG51biBudW5tZSBvbCBvfDAgb20gb21hcGMgb21lIG9uIG9ubyBvbm9yZW1lIG9wdCBvdSBvdW5tZSBvdyBwfDAgJytcbiAgICAgICAgJ3Byb2ZkIHByb2YgcHJvIHByb21wdHIgcGMgcGVkIHBlIHBlcmxkIHBvIHBvcHUgcHAgcHJlIHByZXYgcHMgcHQgcHROIHB0ZiBwdGogcHRsIHB0biBwdHAgcHRyIHB0cyBwdSBwdyBweTMgcHl0aG9uMyBweTNkIHB5M2YgcHkgcHlkIHB5ZiBxdWl0YSBxYSByZWMgcmVkIHJlZGkgcmVkciByZWRyYXdzIHJlZyByZXMgcmV0IHJldHUgcmV3IHJpIHJpZ2h0YiBydWIgcnVieWQgcnVieWYgcnVuZCBydSBydiBzTiBzYW4gc2Egc2FsIHNhdiBzYiBzYk4gc2JhIHNiZiBzYmwgc2JtIHNibiBzYnAgc2JyIHNjcmlwIHNjcmlwdGUgc2NzIHNlIHNldGYgc2V0ZyBzZXRsIHNmIHNmaXIgc2ggc2ltIHNpZyBzaWwgc2wgc2xhIHNtIHNtYXAgc21hcGMgc21lIHNuIHNuaSBzbm8gc25vciBzbm9yZW1lIHNvciAnK1xuICAgICAgICAnc28gc3BlbGxkIHNwZSBzcGVsbGkgc3BlbGxyIHNwZWxsdSBzcGVsbHcgc3Agc3ByIHNyZSBzdCBzdGEgc3RhcnRnIHN0YXJ0ciBzdGFyIHN0b3BpIHN0aiBzdHMgc3VuIHN1bm0gc3VubWUgc3VzIHN2IHN3IHN5IHN5bnRpIHN5bmMgdE4gdGFiTiB0YWJjIHRhYmRvIHRhYmUgdGFiZiB0YWJmaXIgdGFibCB0YWJtIHRhYm5ldyAnK1xuICAgICAgICAndGFibiB0YWJvIHRhYnAgdGFiciB0YWJzIHRhYiB0YSB0YWdzIHRjIHRjbGQgdGNsZiB0ZSB0ZiB0aCB0aiB0bCB0bSB0biB0byB0cCB0ciB0cnkgdHMgdHUgdXwwIHVuZG9qIHVuZG9sIHVuYSB1bmggdW5sIHVubG8gdW5tIHVubWUgdW5zIHVwIHZlIHZlcmIgdmVydCB2aW0gdmltZ3JlcGEgdmkgdml1IHZpZSB2bSB2bWFwYyB2bWUgdm5lIHZuIHZub3JlbWUgdnMgdnUgdnVubWUgd2luZG8gd3wwIHdOIHdhIHdoIHdpIHdpbmMgd2lucCB3biB3cCB3cSB3cWEgd3Mgd3Ugd3YgeHwwIHhhIHhtYXBjIHhtIHhtZSB4biB4bm9yZW1lIHh1IHh1bm1lIHl8MCB6fDAgfiAnK1xuICAgICAgICAvLyBmdWxsIHZlcnNpb25cbiAgICAgICAgJ05leHQgUHJpbnQgYXBwZW5kIGFiYnJldmlhdGUgYWJjbGVhciBhYm92ZWxlZnQgYWxsIGFtZW51IGFub3JlbWVudSBhcmdzIGFyZ2FkZCBhcmdkZWxldGUgYXJnZWRpdCBhcmdnbG9iYWwgYXJnbG9jYWwgYXJndW1lbnQgYXNjaWkgYXV0b2NtZCBhdWdyb3VwIGF1bm1lbnUgYnVmZmVyIGJOZXh0IGJhbGwgYmFkZCBiZGVsZXRlIGJlaGF2ZSBiZWxvd3JpZ2h0IGJmaXJzdCBibGFzdCBibW9kaWZpZWQgYm5leHQgYm90cmlnaHQgYnByZXZpb3VzIGJyZXdpbmQgYnJlYWsgYnJlYWthZGQgYnJlYWtkZWwgYnJlYWtsaXN0IGJyb3dzZSBidW5sb2FkICcrXG4gICAgICAgICdid2lwZW91dCBjaGFuZ2UgY05leHQgY05maWxlIGNhYmJyZXYgY2FiY2xlYXIgY2FkZGJ1ZmZlciBjYWRkZXhwciBjYWRkZmlsZSBjYWxsIGNhdGNoIGNidWZmZXIgY2Nsb3NlIGNlbnRlciBjZXhwciBjZmlsZSBjZmlyc3QgY2dldGJ1ZmZlciBjZ2V0ZXhwciBjZ2V0ZmlsZSBjaGRpciBjaGVja3BhdGggY2hlY2t0aW1lIGNsaXN0IGNsYXN0IGNsb3NlIGNtYXAgY21hcGNsZWFyIGNtZW51IGNuZXh0IGNuZXdlciBjbmZpbGUgY25vcmVtYXAgY25vcmVhYmJyZXYgY25vcmVtZW51IGNvcHkgY29sZGVyIGNvbG9yc2NoZW1lIGNvbW1hbmQgY29tY2xlYXIgY29tcGlsZXIgY29udGludWUgY29uZmlybSBjb3BlbiBjcHJldmlvdXMgY3BmaWxlIGNxdWl0IGNyZXdpbmQgY3Njb3BlIGNzdGFnIGN1bm1hcCAnK1xuICAgICAgICAnY3VuYWJicmV2IGN1bm1lbnUgY3dpbmRvdyBkZWxldGUgZGVsbWFya3MgZGVidWcgZGVidWdncmVlZHkgZGVsY29tbWFuZCBkZWxmdW5jdGlvbiBkaWZmdXBkYXRlIGRpZmZnZXQgZGlmZm9mZiBkaWZmcGF0Y2ggZGlmZnB1dCBkaWZmc3BsaXQgZGlncmFwaHMgZGlzcGxheSBkZWxldGVsIGRqdW1wIGRsaXN0IGRvYXV0b2NtZCBkb2F1dG9hbGwgZGVsZXRlcCBkcm9wIGRzZWFyY2ggZHNwbGl0IGVkaXQgZWFybGllciBlY2hvIGVjaG9lcnIgZWNob2hsIGVjaG9tc2cgZWxzZSBlbHNlaWYgZW1lbnUgZW5kaWYgZW5kZm9yICcrXG4gICAgICAgICdlbmRmdW5jdGlvbiBlbmR0cnkgZW5kd2hpbGUgZW5ldyBleGVjdXRlIGV4aXQgZXh1c2FnZSBmaWxlIGZpbGV0eXBlIGZpbmQgZmluYWxseSBmaW5pc2ggZmlyc3QgZml4ZGVsIGZvbGQgZm9sZGNsb3NlIGZvbGRkb29wZW4gZm9sZGRvY2xvc2VkIGZvbGRvcGVuIGZ1bmN0aW9uIGdsb2JhbCBnb3RvIGdyZXAgZ3JlcGFkZCBndWkgZ3ZpbSBoYXJkY29weSBoZWxwIGhlbHBmaW5kIGhlbHBncmVwIGhlbHB0YWdzIGhpZ2hsaWdodCBoaWRlIGhpc3RvcnkgaW5zZXJ0IGlhYmJyZXYgaWFiY2xlYXIgaWp1bXAgaWxpc3QgaW1hcCAnK1xuICAgICAgICAnaW1hcGNsZWFyIGltZW51IGlub3JlbWFwIGlub3JlYWJicmV2IGlub3JlbWVudSBpbnRybyBpc2VhcmNoIGlzcGxpdCBpdW5tYXAgaXVuYWJicmV2IGl1bm1lbnUgam9pbiBqdW1wcyBrZWVwYWx0IGtlZXBtYXJrcyBrZWVwanVtcHMgbE5leHQgbE5maWxlIGxpc3QgbGFkZGV4cHIgbGFkZGJ1ZmZlciBsYWRkZmlsZSBsYXN0IGxhbmd1YWdlIGxhdGVyIGxidWZmZXIgbGNkIGxjaGRpciBsY2xvc2UgbGNzY29wZSBsZWZ0IGxlZnRhYm92ZSBsZXhwciBsZmlsZSBsZmlyc3QgbGdldGJ1ZmZlciBsZ2V0ZXhwciBsZ2V0ZmlsZSBsZ3JlcCBsZ3JlcGFkZCBsaGVscGdyZXAgbGxhc3QgbGxpc3QgbG1ha2UgbG1hcCBsbWFwY2xlYXIgbG5leHQgbG5ld2VyIGxuZmlsZSBsbm9yZW1hcCBsb2Fka2V5bWFwIGxvYWR2aWV3ICcrXG4gICAgICAgICdsb2NrbWFya3MgbG9ja3ZhciBsb2xkZXIgbG9wZW4gbHByZXZpb3VzIGxwZmlsZSBscmV3aW5kIGx0YWcgbHVubWFwIGx1YWRvIGx1YWZpbGUgbHZpbWdyZXAgbHZpbWdyZXBhZGQgbHdpbmRvdyBtb3ZlIG1hcmsgbWFrZSBtYXBjbGVhciBtYXRjaCBtZW51IG1lbnV0cmFuc2xhdGUgbWVzc2FnZXMgbWtleHJjIG1rc2Vzc2lvbiBta3NwZWxsIG1rdmltcmMgbWt2aWV3IG1vZGUgbXpzY2hlbWUgbXpmaWxlIG5iY2xvc2UgbmJrZXkgbmJzYXJ0IG5leHQgbm1hcCBubWFwY2xlYXIgbm1lbnUgbm5vcmVtYXAgJytcbiAgICAgICAgJ25ub3JlbWVudSBub2F1dG9jbWQgbm9yZW1hcCBub2hsc2VhcmNoIG5vcmVhYmJyZXYgbm9yZW1lbnUgbm9ybWFsIG51bWJlciBudW5tYXAgbnVubWVudSBvbGRmaWxlcyBvcGVuIG9tYXAgb21hcGNsZWFyIG9tZW51IG9ubHkgb25vcmVtYXAgb25vcmVtZW51IG9wdGlvbnMgb3VubWFwIG91bm1lbnUgb3duc3ludGF4IHByaW50IHByb2ZkZWwgcHJvZmlsZSBwcm9tcHRmaW5kIHByb21wdHJlcGwgcGNsb3NlIHBlZGl0IHBlcmwgcGVybGRvIHBvcCBwb3B1cCBwcG9wIHByZXNlcnZlIHByZXZpb3VzIHBzZWFyY2ggcHRhZyBwdE5leHQgJytcbiAgICAgICAgJ3B0Zmlyc3QgcHRqdW1wIHB0bGFzdCBwdG5leHQgcHRwcmV2aW91cyBwdHJld2luZCBwdHNlbGVjdCBwdXQgcHdkIHB5M2RvIHB5M2ZpbGUgcHl0aG9uIHB5ZG8gcHlmaWxlIHF1aXQgcXVpdGFsbCBxYWxsIHJlYWQgcmVjb3ZlciByZWRvIHJlZGlyIHJlZHJhdyByZWRyYXdzdGF0dXMgcmVnaXN0ZXJzIHJlc2l6ZSByZXRhYiByZXR1cm4gcmV3aW5kIHJpZ2h0IHJpZ2h0YmVsb3cgcnVieSBydWJ5ZG8gcnVieWZpbGUgcnVuZG8gcnVudGltZSBydmltaW5mbyBzdWJzdGl0dXRlIHNOZXh0IHNhbmRib3ggc2FyZ3VtZW50IHNhbGwgc2F2ZWFzIHNidWZmZXIgc2JOZXh0IHNiYWxsIHNiZmlyc3Qgc2JsYXN0IHNibW9kaWZpZWQgc2JuZXh0IHNicHJldmlvdXMgc2JyZXdpbmQgc2NyaXB0bmFtZXMgc2NyaXB0ZW5jb2RpbmcgJytcbiAgICAgICAgJ3Njc2NvcGUgc2V0IHNldGZpbGV0eXBlIHNldGdsb2JhbCBzZXRsb2NhbCBzZmluZCBzZmlyc3Qgc2hlbGwgc2ltYWx0IHNpZ24gc2lsZW50IHNsZWVwIHNsYXN0IHNtYWdpYyBzbWFwY2xlYXIgc21lbnUgc25leHQgc25pZmYgc25vbWFnaWMgc25vcmVtYXAgc25vcmVtZW51IHNvcnQgc291cmNlIHNwZWxsZHVtcCBzcGVsbGdvb2Qgc3BlbGxpbmZvIHNwZWxscmVwYWxsIHNwZWxsdW5kbyBzcGVsbHdyb25nIHNwbGl0IHNwcmV2aW91cyBzcmV3aW5kIHN0b3Agc3RhZyBzdGFydGdyZXBsYWNlIHN0YXJ0cmVwbGFjZSAnK1xuICAgICAgICAnc3RhcnRpbnNlcnQgc3RvcGluc2VydCBzdGp1bXAgc3RzZWxlY3Qgc3VuaGlkZSBzdW5tYXAgc3VubWVudSBzdXNwZW5kIHN2aWV3IHN3YXBuYW1lIHN5bnRheCBzeW50aW1lIHN5bmNiaW5kIHROZXh0IHRhYk5leHQgdGFiY2xvc2UgdGFiZWRpdCB0YWJmaW5kIHRhYmZpcnN0IHRhYmxhc3QgdGFibW92ZSB0YWJuZXh0IHRhYm9ubHkgdGFicHJldmlvdXMgdGFicmV3aW5kIHRhZyB0Y2wgdGNsZG8gdGNsZmlsZSB0ZWFyb2ZmIHRmaXJzdCB0aHJvdyB0anVtcCB0bGFzdCB0bWVudSB0bmV4dCB0b3BsZWZ0IHRwcmV2aW91cyAnKyd0cmV3aW5kIHRzZWxlY3QgdHVubWVudSB1bmRvIHVuZG9qb2luIHVuZG9saXN0IHVuYWJicmV2aWF0ZSB1bmhpZGUgdW5sZXQgdW5sb2NrdmFyIHVubWFwIHVubWVudSB1bnNpbGVudCB1cGRhdGUgdmdsb2JhbCB2ZXJzaW9uIHZlcmJvc2UgdmVydGljYWwgdmltZ3JlcCB2aW1ncmVwYWRkIHZpc3VhbCB2aXVzYWdlIHZpZXcgdm1hcCB2bWFwY2xlYXIgdm1lbnUgdm5ldyAnK1xuICAgICAgICAndm5vcmVtYXAgdm5vcmVtZW51IHZzcGxpdCB2dW5tYXAgdnVubWVudSB3cml0ZSB3TmV4dCB3YWxsIHdoaWxlIHdpbnNpemUgd2luY21kIHdpbnBvcyB3bmV4dCB3cHJldmlvdXMgd3FhbGwgd3N2ZXJiIHd1bmRvIHd2aW1pbmZvIHhpdCB4YWxsIHhtYXBjbGVhciB4bWFwIHhtZW51IHhub3JlbWFwIHhub3JlbWVudSB4dW5tYXAgeHVubWVudSB5YW5rJyxcbiAgICAgIGJ1aWx0X2luOiAvL2J1aWx0IGluIGZ1bmNcbiAgICAgICAgJ3N5bklEdHJhbnMgYXRhbjIgcmFuZ2UgbWF0Y2hhcmcgZGlkX2ZpbGV0eXBlIGFzaW4gZmVlZGtleXMgeG9yIGFyZ3YgJyArXG4gICAgICAgICdjb21wbGV0ZV9jaGVjayBhZGQgZ2V0d2lucG9zeCBnZXRxZmxpc3QgZ2V0d2lucG9zeSBzY3JlZW5jb2wgJyArXG4gICAgICAgICdjbGVhcm1hdGNoZXMgZW1wdHkgZXh0ZW5kIGdldGNtZHBvcyBtemV2YWwgZ2FyYmFnZWNvbGxlY3Qgc2V0cmVnICcgK1xuICAgICAgICAnY2VpbCBzcXJ0IGRpZmZfaGxJRCBpbnB1dHNlY3JldCBnZXQgZ2V0ZnBlcm0gZ2V0cGlkIGZpbGV3cml0YWJsZSAnICtcbiAgICAgICAgJ3NoaWZ0d2lkdGggbWF4IHNpbmggaXNkaXJlY3Rvcnkgc3luSUQgc3lzdGVtIGlucHV0cmVzdG9yZSB3aW5saW5lICcgK1xuICAgICAgICAnYXRhbiB2aXN1YWxtb2RlIGlucHV0bGlzdCB0YWJwYWdld2lubnIgcm91bmQgZ2V0cmVndHlwZSBtYXBjaGVjayAnICtcbiAgICAgICAgJ2hhc21hcHRvIGhpc3RkZWwgYXJnaWR4IGZpbmRmaWxlIHNoYTI1NiBleGlzdHMgdG91cHBlciBnZXRjbWRsaW5lICcgK1xuICAgICAgICAndGFnbGlzdCBzdHJpbmcgZ2V0bWF0Y2hlcyBidWZuciBzdHJmdGltZSB3aW53aWR0aCBidWZleGlzdHMgJyArXG4gICAgICAgICdzdHJ0cmFucyB0YWJwYWdlYnVmbGlzdCBzZXRjbWRwb3MgcmVtb3RlX3JlYWQgcHJpbnRmIHNldGxvY2xpc3QgJyArXG4gICAgICAgICdnZXRwb3MgZ2V0bGluZSBidWZ3aW5uciBmbG9hdDJuciBsZW4gZ2V0Y21kdHlwZSBkaWZmX2ZpbGxlciBsdWFldmFsICcgK1xuICAgICAgICAncmVzb2x2ZSBsaWJjYWxsbnIgZm9sZGNsb3NlZGVuZCByZXZlcnNlIGZpbHRlciBoYXNfa2V5IGJ1Zm5hbWUgJyArXG4gICAgICAgICdzdHIyZmxvYXQgc3RybGVuIHNldGxpbmUgZ2V0Y2hhcm1vZCBzZXRidWZ2YXIgaW5kZXggc2VhcmNocG9zICcgK1xuICAgICAgICAnc2hlbGxlc2NhcGUgdW5kb2ZpbGUgZm9sZGNsb3NlZCBzZXRxZmxpc3QgYnVmbGlzdGVkIHN0cmNoYXJzIHN0cjJuciAnICtcbiAgICAgICAgJ3ZpcnRjb2wgZmxvb3IgcmVtb3ZlIHVuZG90cmVlIHJlbW90ZV9leHByIHdpbmhlaWdodCBnZXR0YWJ3aW52YXIgJyArXG4gICAgICAgICdyZWx0aW1lIGN1cnNvciB0YWJwYWdlbnIgZmluZGRpciBsb2NhbHRpbWUgYWNvcyBnZXRsb2NsaXN0IHNlYXJjaCAnICtcbiAgICAgICAgJ3RhbmggbWF0Y2hlbmQgcmVuYW1lIGdldHRhYnZhciBzdHJkaXNwbGF5d2lkdGggdHlwZSBhYnMgcHkzZXZhbCAnICtcbiAgICAgICAgJ3NldHdpbnZhciB0b2xvd2VyIHdpbGRtZW51bW9kZSBsb2cxMCBzcGVsbHN1Z2dlc3QgYnVmbG9hZGVkICcgK1xuICAgICAgICAnc3luY29uY2VhbGVkIG5leHRub25ibGFuayBzZXJ2ZXIyY2xpZW50IGNvbXBsZXRlIHNldHRhYndpbnZhciAnICtcbiAgICAgICAgJ2V4ZWN1dGFibGUgaW5wdXQgd2luY29sIHNldG1hdGNoZXMgZ2V0ZnR5cGUgaGxJRCBpbnB1dHNhdmUgJyArXG4gICAgICAgICdzZWFyY2hwYWlyIG9yIHNjcmVlbnJvdyBsaW5lIHNldHRhYnZhciBoaXN0YWRkIGRlZXBjb3B5IHN0cnBhcnQgJyArXG4gICAgICAgICdyZW1vdGVfcGVlayBhbmQgZXZhbCBnZXRmdGltZSBzdWJtYXRjaCBzY3JlZW5jaGFyIHdpbnNhdmV2aWV3ICcgK1xuICAgICAgICAnbWF0Y2hhZGQgbWtkaXIgc2NyZWVuYXR0ciBnZXRmb250bmFtZSBsaWJjYWxsIHJlbHRpbWVzdHIgZ2V0ZnNpemUgJyArXG4gICAgICAgICd3aW5uciBpbnZlcnQgcG93IGdldGJ1ZmxpbmUgYnl0ZTJsaW5lIHNvdW5kZm9sZCByZXBlYXQgZm5hbWVlc2NhcGUgJyArXG4gICAgICAgICd0YWdmaWxlcyBzaW4gc3Ryd2lkdGggc3BlbGxiYWR3b3JkIHRydW5jIG1hcGFyZyBsb2cgbGlzcGluZGVudCAnICtcbiAgICAgICAgJ2hvc3RuYW1lIHNldHBvcyBnbG9icGF0aCByZW1vdGVfZm9yZWdyb3VuZCBnZXRjaGFyIHN5bklEYXR0ciAnICtcbiAgICAgICAgJ2ZuYW1lbW9kaWZ5IGNzY29wZV9jb25uZWN0aW9uIHN0cmlkeCB3aW5idWZuciBpbmRlbnQgbWluICcgK1xuICAgICAgICAnY29tcGxldGVfYWRkIG5yMmNoYXIgc2VhcmNocGFpcnBvcyBpbnB1dGRpYWxvZyB2YWx1ZXMgbWF0Y2hsaXN0ICcgK1xuICAgICAgICAnaXRlbXMgaGxleGlzdHMgc3RycmlkeCBicm93c2VkaXIgZXhwYW5kIGZtb2QgcGF0aHNob3J0ZW4gbGluZTJieXRlICcgK1xuICAgICAgICAnYXJnYyBjb3VudCBnZXR3aW52YXIgZ2xvYiBmb2xkdGV4dHJlc3VsdCBnZXRyZWcgZm9yZWdyb3VuZCBjb3NoICcgK1xuICAgICAgICAnbWF0Y2hkZWxldGUgaGFzIGNoYXIybnIgc2ltcGxpZnkgaGlzdGdldCBzZWFyY2hkZWNsIGljb252ICcgK1xuICAgICAgICAnd2lucmVzdGNtZCBwdW12aXNpYmxlIHdyaXRlZmlsZSBmb2xkbGV2ZWwgaGFzbG9jYWxkaXIga2V5cyBjb3MgJyArXG4gICAgICAgICdtYXRjaHN0ciBmb2xkdGV4dCBoaXN0bnIgdGFuIHRlbXBuYW1lIGdldGN3ZCBieXRlaWR4IGdldGJ1ZnZhciAnICtcbiAgICAgICAgJ2lzbG9ja2VkIGVzY2FwZSBldmVudGhhbmRsZXIgcmVtb3RlX3NlbmQgc2VydmVybGlzdCB3aW5yZXN0dmlldyAnICtcbiAgICAgICAgJ3N5bnN0YWNrIHB5ZXZhbCBwcmV2bm9uYmxhbmsgcmVhZGZpbGUgY2luZGVudCBmaWxlcmVhZGFibGUgY2hhbmdlbnIgJyArXG4gICAgICAgICdleHAnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvOy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcblxuICAgICAgLypcbiAgICAgIEEgZG91YmxlIHF1b3RlIGNhbiBzdGFydCBlaXRoZXIgYSBzdHJpbmcgb3IgYSBsaW5lIGNvbW1lbnQuIFN0cmluZ3MgYXJlXG4gICAgICBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiBhIGxpbmUgYnkgYW5vdGhlciBkb3VibGUgcXVvdGUgYW5kIGNhbiBjb250YWluXG4gICAgICBlc2NhcGVkIGRvdWJsZS1xdW90ZXMgYW5kIHBvc3QtZXNjYXBlZCBsaW5lIGJyZWFrcy5cblxuICAgICAgQWxzbywgYW55IGRvdWJsZSBxdW90ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpcyBhIGNvbW1lbnQgYnV0IHdlXG4gICAgICBkb24ndCBoYW5kbGUgdGhhdCBwcm9wZXJseSBhdCB0aGUgbW9tZW50OiBhbnkgZG91YmxlIHF1b3RlIGluc2lkZSB3aWxsXG4gICAgICB0dXJuIHRoZW0gaW50byBhIHN0cmluZy4gSGFuZGxpbmcgaXQgcHJvcGVybHkgd2lsbCByZXF1aXJlIGEgc21hcnRlclxuICAgICAgcGFyc2VyLlxuICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC9cIihcXFxcXCJ8XFxuXFxcXHxbXlwiXFxuXSkqXCIvXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcIicsICckJyksXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1tid3RnbHNhdl06W1xcd1xcZF9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIGZ1bmN0aW9uIScsIGVuZDogJyQnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogLzxbXFx3LV0rPi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogJ1suJV0/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdsb2NrIHJlcCByZXBlIHJlcHogcmVwbmUgcmVwbnogeGFxdWlyZSB4cmVsZWFzZSBibmQgbm9ibmQgJyArXG4gICAgICAgICdhYWEgYWFkIGFhbSBhYXMgYWRjIGFkZCBhbmQgYXJwbCBiYjBfcmVzZXQgYmIxX3Jlc2V0IGJvdW5kIGJzZiBic3IgYnN3YXAgYnQgYnRjIGJ0ciBidHMgY2FsbCBjYncgY2RxIGNkcWUgY2xjIGNsZCBjbGkgY2x0cyBjbWMgY21wIGNtcHNiIGNtcHNkIGNtcHNxIGNtcHN3IGNtcHhjaGcgY21weGNoZzQ4NiBjbXB4Y2hnOGIgY21weGNoZzE2YiBjcHVpZCBjcHVfcmVhZCBjcHVfd3JpdGUgY3FvIGN3ZCBjd2RlIGRhYSBkYXMgZGVjIGRpdiBkbWludCBlbW1zIGVudGVyIGVxdSBmMnhtMSBmYWJzIGZhZGQgZmFkZHAgZmJsZCBmYnN0cCBmY2hzIGZjbGV4IGZjbW92YiBmY21vdmJlIGZjbW92ZSBmY21vdm5iIGZjbW92bmJlIGZjbW92bmUgZmNtb3ZudSBmY21vdnUgZmNvbSBmY29taSBmY29taXAgZmNvbXAgZmNvbXBwIGZjb3MgZmRlY3N0cCBmZGlzaSBmZGl2IGZkaXZwIGZkaXZyIGZkaXZycCBmZW1tcyBmZW5pIGZmcmVlIGZmcmVlcCBmaWFkZCBmaWNvbSBmaWNvbXAgZmlkaXYgZmlkaXZyIGZpbGQgZmltdWwgZmluY3N0cCBmaW5pdCBmaXN0IGZpc3RwIGZpc3R0cCBmaXN1YiBmaXN1YnIgZmxkIGZsZDEgZmxkY3cgZmxkZW52IGZsZGwyZSBmbGRsMnQgZmxkbGcyIGZsZGxuMiBmbGRwaSBmbGR6IGZtdWwgZm11bHAgZm5jbGV4IGZuZGlzaSBmbmVuaSBmbmluaXQgZm5vcCBmbnNhdmUgZm5zdGN3IGZuc3RlbnYgZm5zdHN3IGZwYXRhbiBmcHJlbSBmcHJlbTEgZnB0YW4gZnJuZGludCBmcnN0b3IgZnNhdmUgZnNjYWxlIGZzZXRwbSBmc2luIGZzaW5jb3MgZnNxcnQgZnN0IGZzdGN3IGZzdGVudiBmc3RwIGZzdHN3IGZzdWIgZnN1YnAgZnN1YnIgZnN1YnJwIGZ0c3QgZnVjb20gZnVjb21pIGZ1Y29taXAgZnVjb21wIGZ1Y29tcHAgZnhhbSBmeGNoIGZ4dHJhY3QgZnlsMnggZnlsMnhwMSBobHQgaWJ0cyBpY2VicCBpZGl2IGltdWwgaW4gaW5jIGluY2JpbiBpbnNiIGluc2QgaW5zdyBpbnQgaW50MDEgaW50MSBpbnQwMyBpbnQzIGludG8gaW52ZCBpbnZwY2lkIGludmxwZyBpbnZscGdhIGlyZXQgaXJldGQgaXJldHEgaXJldHcgamN4eiBqZWN4eiBqcmN4eiBqbXAgam1wZSBsYWhmIGxhciBsZHMgbGVhIGxlYXZlIGxlcyBsZmVuY2UgbGZzIGxnZHQgbGdzIGxpZHQgbGxkdCBsbXN3IGxvYWRhbGwgbG9hZGFsbDI4NiBsb2RzYiBsb2RzZCBsb2RzcSBsb2RzdyBsb29wIGxvb3BlIGxvb3BuZSBsb29wbnogbG9vcHogbHNsIGxzcyBsdHIgbWZlbmNlIG1vbml0b3IgbW92IG1vdmQgbW92cSBtb3ZzYiBtb3ZzZCBtb3ZzcSBtb3ZzdyBtb3ZzeCBtb3ZzeGQgbW92enggbXVsIG13YWl0IG5lZyBub3Agbm90IG9yIG91dCBvdXRzYiBvdXRzZCBvdXRzdyBwYWNrc3NkdyBwYWNrc3N3YiBwYWNrdXN3YiBwYWRkYiBwYWRkZCBwYWRkc2IgcGFkZHNpdyBwYWRkc3cgcGFkZHVzYiBwYWRkdXN3IHBhZGR3IHBhbmQgcGFuZG4gcGF1c2UgcGF2ZWIgcGF2Z3VzYiBwY21wZXFiIHBjbXBlcWQgcGNtcGVxdyBwY21wZ3RiIHBjbXBndGQgcGNtcGd0dyBwZGlzdGliIHBmMmlkIHBmYWNjIHBmYWRkIHBmY21wZXEgcGZjbXBnZSBwZmNtcGd0IHBmbWF4IHBmbWluIHBmbXVsIHBmcmNwIHBmcmNwaXQxIHBmcmNwaXQyIHBmcnNxaXQxIHBmcnNxcnQgcGZzdWIgcGZzdWJyIHBpMmZkIHBtYWNocml3IHBtYWRkd2QgcG1hZ3cgcG11bGhyaXcgcG11bGhyd2EgcG11bGhyd2MgcG11bGh3IHBtdWxsdyBwbXZnZXpiIHBtdmx6YiBwbXZuemIgcG12emIgcG9wIHBvcGEgcG9wYWQgcG9wYXcgcG9wZiBwb3BmZCBwb3BmcSBwb3BmdyBwb3IgcHJlZmV0Y2ggcHJlZmV0Y2h3IHBzbGxkIHBzbGxxIHBzbGx3IHBzcmFkIHBzcmF3IHBzcmxkIHBzcmxxIHBzcmx3IHBzdWJiIHBzdWJkIHBzdWJzYiBwc3Vic2l3IHBzdWJzdyBwc3VidXNiIHBzdWJ1c3cgcHN1YncgcHVucGNraGJ3IHB1bnBja2hkcSBwdW5wY2tod2QgcHVucGNrbGJ3IHB1bnBja2xkcSBwdW5wY2tsd2QgcHVzaCBwdXNoYSBwdXNoYWQgcHVzaGF3IHB1c2hmIHB1c2hmZCBwdXNoZnEgcHVzaGZ3IHB4b3IgcmNsIHJjciByZHNociByZG1zciByZHBtYyByZHRzYyByZHRzY3AgcmV0IHJldGYgcmV0biByb2wgcm9yIHJkbSByc2RjIHJzbGR0IHJzbSByc3RzIHNhaGYgc2FsIHNhbGMgc2FyIHNiYiBzY2FzYiBzY2FzZCBzY2FzcSBzY2FzdyBzZmVuY2Ugc2dkdCBzaGwgc2hsZCBzaHIgc2hyZCBzaWR0IHNsZHQgc2tpbml0IHNtaSBzbWludCBzbWludG9sZCBzbXN3IHN0YyBzdGQgc3RpIHN0b3NiIHN0b3NkIHN0b3NxIHN0b3N3IHN0ciBzdWIgc3ZkYyBzdmxkdCBzdnRzIHN3YXBncyBzeXNjYWxsIHN5c2VudGVyIHN5c2V4aXQgc3lzcmV0IHRlc3QgdWQwIHVkMSB1ZDJiIHVkMiB1ZDJhIHVtb3YgdmVyciB2ZXJ3IGZ3YWl0IHdiaW52ZCB3cnNociB3cm1zciB4YWRkIHhidHMgeGNoZyB4bGF0YiB4bGF0IHhvciBjbW92ZSBjbW92eiBjbW92bmUgY21vdm56IGNtb3ZhIGNtb3ZuYmUgY21vdmFlIGNtb3ZuYiBjbW92YiBjbW92bmFlIGNtb3ZiZSBjbW92bmEgY21vdmcgY21vdm5sZSBjbW92Z2UgY21vdm5sIGNtb3ZsIGNtb3ZuZ2UgY21vdmxlIGNtb3ZuZyBjbW92YyBjbW92bmMgY21vdm8gY21vdm5vIGNtb3ZzIGNtb3ZucyBjbW92cCBjbW92cGUgY21vdm5wIGNtb3ZwbyBqZSBqeiBqbmUgam56IGphIGpuYmUgamFlIGpuYiBqYiBqbmFlIGpiZSBqbmEgamcgam5sZSBqZ2Ugam5sIGpsIGpuZ2UgamxlIGpuZyBqYyBqbmMgam8gam5vIGpzIGpucyBqcG8gam5wIGpwZSBqcCBzZXRlIHNldHogc2V0bmUgc2V0bnogc2V0YSBzZXRuYmUgc2V0YWUgc2V0bmIgc2V0bmMgc2V0YiBzZXRuYWUgc2V0Y3NldCBzZXRiZSBzZXRuYSBzZXRnIHNldG5sZSBzZXRnZSBzZXRubCBzZXRsIHNldG5nZSBzZXRsZSBzZXRuZyBzZXRzIHNldG5zIHNldG8gc2V0bm8gc2V0cGUgc2V0cCBzZXRwbyBzZXRucCBhZGRwcyBhZGRzcyBhbmRucHMgYW5kcHMgY21wZXFwcyBjbXBlcXNzIGNtcGxlcHMgY21wbGVzcyBjbXBsdHBzIGNtcGx0c3MgY21wbmVxcHMgY21wbmVxc3MgY21wbmxlcHMgY21wbmxlc3MgY21wbmx0cHMgY21wbmx0c3MgY21wb3JkcHMgY21wb3Jkc3MgY21wdW5vcmRwcyBjbXB1bm9yZHNzIGNtcHBzIGNtcHNzIGNvbWlzcyBjdnRwaTJwcyBjdnRwczJwaSBjdnRzaTJzcyBjdnRzczJzaSBjdnR0cHMycGkgY3Z0dHNzMnNpIGRpdnBzIGRpdnNzIGxkbXhjc3IgbWF4cHMgbWF4c3MgbWlucHMgbWluc3MgbW92YXBzIG1vdmhwcyBtb3ZsaHBzIG1vdmxwcyBtb3ZobHBzIG1vdm1za3BzIG1vdm50cHMgbW92c3MgbW92dXBzIG11bHBzIG11bHNzIG9ycHMgcmNwcHMgcmNwc3MgcnNxcnRwcyByc3FydHNzIHNodWZwcyBzcXJ0cHMgc3FydHNzIHN0bXhjc3Igc3VicHMgc3Vic3MgdWNvbWlzcyB1bnBja2hwcyB1bnBja2xwcyB4b3JwcyBmeHJzdG9yIGZ4cnN0b3I2NCBmeHNhdmUgZnhzYXZlNjQgeGdldGJ2IHhzZXRidiB4c2F2ZSB4c2F2ZTY0IHhzYXZlb3B0IHhzYXZlb3B0NjQgeHJzdG9yIHhyc3RvcjY0IHByZWZldGNobnRhIHByZWZldGNodDAgcHJlZmV0Y2h0MSBwcmVmZXRjaHQyIG1hc2ttb3ZxIG1vdm50cSBwYXZnYiBwYXZndyBwZXh0cncgcGluc3J3IHBtYXhzdyBwbWF4dWIgcG1pbnN3IHBtaW51YiBwbW92bXNrYiBwbXVsaHV3IHBzYWRidyBwc2h1ZncgcGYyaXcgcGZuYWNjIHBmcG5hY2MgcGkyZncgcHN3YXBkIG1hc2ttb3ZkcXUgY2xmbHVzaCBtb3ZudGRxIG1vdm50aSBtb3ZudHBkIG1vdmRxYSBtb3ZkcXUgbW92ZHEycSBtb3ZxMmRxIHBhZGRxIHBtdWx1ZHEgcHNodWZkIHBzaHVmaHcgcHNodWZsdyBwc2xsZHEgcHNybGRxIHBzdWJxIHB1bnBja2hxZHEgcHVucGNrbHFkcSBhZGRwZCBhZGRzZCBhbmRucGQgYW5kcGQgY21wZXFwZCBjbXBlcXNkIGNtcGxlcGQgY21wbGVzZCBjbXBsdHBkIGNtcGx0c2QgY21wbmVxcGQgY21wbmVxc2QgY21wbmxlcGQgY21wbmxlc2QgY21wbmx0cGQgY21wbmx0c2QgY21wb3JkcGQgY21wb3Jkc2QgY21wdW5vcmRwZCBjbXB1bm9yZHNkIGNtcHBkIGNvbWlzZCBjdnRkcTJwZCBjdnRkcTJwcyBjdnRwZDJkcSBjdnRwZDJwaSBjdnRwZDJwcyBjdnRwaTJwZCBjdnRwczJkcSBjdnRwczJwZCBjdnRzZDJzaSBjdnRzZDJzcyBjdnRzaTJzZCBjdnRzczJzZCBjdnR0cGQycGkgY3Z0dHBkMmRxIGN2dHRwczJkcSBjdnR0c2Qyc2kgZGl2cGQgZGl2c2QgbWF4cGQgbWF4c2QgbWlucGQgbWluc2QgbW92YXBkIG1vdmhwZCBtb3ZscGQgbW92bXNrcGQgbW92dXBkIG11bHBkIG11bHNkIG9ycGQgc2h1ZnBkIHNxcnRwZCBzcXJ0c2Qgc3VicGQgc3Vic2QgdWNvbWlzZCB1bnBja2hwZCB1bnBja2xwZCB4b3JwZCBhZGRzdWJwZCBhZGRzdWJwcyBoYWRkcGQgaGFkZHBzIGhzdWJwZCBoc3VicHMgbGRkcXUgbW92ZGR1cCBtb3ZzaGR1cCBtb3ZzbGR1cCBjbGdpIHN0Z2kgdm1jYWxsIHZtY2xlYXIgdm1mdW5jIHZtbGF1bmNoIHZtbG9hZCB2bW1jYWxsIHZtcHRybGQgdm1wdHJzdCB2bXJlYWQgdm1yZXN1bWUgdm1ydW4gdm1zYXZlIHZtd3JpdGUgdm14b2ZmIHZteG9uIGludmVwdCBpbnZ2cGlkIHBhYnNiIHBhYnN3IHBhYnNkIHBhbGlnbnIgcGhhZGR3IHBoYWRkZCBwaGFkZHN3IHBoc3VidyBwaHN1YmQgcGhzdWJzdyBwbWFkZHVic3cgcG11bGhyc3cgcHNodWZiIHBzaWduYiBwc2lnbncgcHNpZ25kIGV4dHJxIGluc2VydHEgbW92bnRzZCBtb3ZudHNzIGx6Y250IGJsZW5kcGQgYmxlbmRwcyBibGVuZHZwZCBibGVuZHZwcyBkcHBkIGRwcHMgZXh0cmFjdHBzIGluc2VydHBzIG1vdm50ZHFhIG1wc2FkYncgcGFja3VzZHcgcGJsZW5kdmIgcGJsZW5kdyBwY21wZXFxIHBleHRyYiBwZXh0cmQgcGV4dHJxIHBobWlucG9zdXcgcGluc3JiIHBpbnNyZCBwaW5zcnEgcG1heHNiIHBtYXhzZCBwbWF4dWQgcG1heHV3IHBtaW5zYiBwbWluc2QgcG1pbnVkIHBtaW51dyBwbW92c3hidyBwbW92c3hiZCBwbW92c3hicSBwbW92c3h3ZCBwbW92c3h3cSBwbW92c3hkcSBwbW92enhidyBwbW92enhiZCBwbW92enhicSBwbW92enh3ZCBwbW92enh3cSBwbW92enhkcSBwbXVsZHEgcG11bGxkIHB0ZXN0IHJvdW5kcGQgcm91bmRwcyByb3VuZHNkIHJvdW5kc3MgY3JjMzIgcGNtcGVzdHJpIHBjbXBlc3RybSBwY21waXN0cmkgcGNtcGlzdHJtIHBjbXBndHEgcG9wY250IGdldHNlYyBwZnJjcHYgcGZyc3FydHYgbW92YmUgYWVzZW5jIGFlc2VuY2xhc3QgYWVzZGVjIGFlc2RlY2xhc3QgYWVzaW1jIGFlc2tleWdlbmFzc2lzdCB2YWVzZW5jIHZhZXNlbmNsYXN0IHZhZXNkZWMgdmFlc2RlY2xhc3QgdmFlc2ltYyB2YWVza2V5Z2VuYXNzaXN0IHZhZGRwZCB2YWRkcHMgdmFkZHNkIHZhZGRzcyB2YWRkc3VicGQgdmFkZHN1YnBzIHZhbmRwZCB2YW5kcHMgdmFuZG5wZCB2YW5kbnBzIHZibGVuZHBkIHZibGVuZHBzIHZibGVuZHZwZCB2YmxlbmR2cHMgdmJyb2FkY2FzdHNzIHZicm9hZGNhc3RzZCB2YnJvYWRjYXN0ZjEyOCB2Y21wZXFfb3NwZCB2Y21wZXFwZCB2Y21wbHRfb3NwZCB2Y21wbHRwZCB2Y21wbGVfb3NwZCB2Y21wbGVwZCB2Y21wdW5vcmRfcXBkIHZjbXB1bm9yZHBkIHZjbXBuZXFfdXFwZCB2Y21wbmVxcGQgdmNtcG5sdF91c3BkIHZjbXBubHRwZCB2Y21wbmxlX3VzcGQgdmNtcG5sZXBkIHZjbXBvcmRfcXBkIHZjbXBvcmRwZCB2Y21wZXFfdXFwZCB2Y21wbmdlX3VzcGQgdmNtcG5nZXBkIHZjbXBuZ3RfdXNwZCB2Y21wbmd0cGQgdmNtcGZhbHNlX29xcGQgdmNtcGZhbHNlcGQgdmNtcG5lcV9vcXBkIHZjbXBnZV9vc3BkIHZjbXBnZXBkIHZjbXBndF9vc3BkIHZjbXBndHBkIHZjbXB0cnVlX3VxcGQgdmNtcHRydWVwZCB2Y21wbHRfb3FwZCB2Y21wbGVfb3FwZCB2Y21wdW5vcmRfc3BkIHZjbXBuZXFfdXNwZCB2Y21wbmx0X3VxcGQgdmNtcG5sZV91cXBkIHZjbXBvcmRfc3BkIHZjbXBlcV91c3BkIHZjbXBuZ2VfdXFwZCB2Y21wbmd0X3VxcGQgdmNtcGZhbHNlX29zcGQgdmNtcG5lcV9vc3BkIHZjbXBnZV9vcXBkIHZjbXBndF9vcXBkIHZjbXB0cnVlX3VzcGQgdmNtcHBkIHZjbXBlcV9vc3BzIHZjbXBlcXBzIHZjbXBsdF9vc3BzIHZjbXBsdHBzIHZjbXBsZV9vc3BzIHZjbXBsZXBzIHZjbXB1bm9yZF9xcHMgdmNtcHVub3JkcHMgdmNtcG5lcV91cXBzIHZjbXBuZXFwcyB2Y21wbmx0X3VzcHMgdmNtcG5sdHBzIHZjbXBubGVfdXNwcyB2Y21wbmxlcHMgdmNtcG9yZF9xcHMgdmNtcG9yZHBzIHZjbXBlcV91cXBzIHZjbXBuZ2VfdXNwcyB2Y21wbmdlcHMgdmNtcG5ndF91c3BzIHZjbXBuZ3RwcyB2Y21wZmFsc2Vfb3FwcyB2Y21wZmFsc2VwcyB2Y21wbmVxX29xcHMgdmNtcGdlX29zcHMgdmNtcGdlcHMgdmNtcGd0X29zcHMgdmNtcGd0cHMgdmNtcHRydWVfdXFwcyB2Y21wdHJ1ZXBzIHZjbXBsdF9vcXBzIHZjbXBsZV9vcXBzIHZjbXB1bm9yZF9zcHMgdmNtcG5lcV91c3BzIHZjbXBubHRfdXFwcyB2Y21wbmxlX3VxcHMgdmNtcG9yZF9zcHMgdmNtcGVxX3VzcHMgdmNtcG5nZV91cXBzIHZjbXBuZ3RfdXFwcyB2Y21wZmFsc2Vfb3NwcyB2Y21wbmVxX29zcHMgdmNtcGdlX29xcHMgdmNtcGd0X29xcHMgdmNtcHRydWVfdXNwcyB2Y21wcHMgdmNtcGVxX29zc2QgdmNtcGVxc2QgdmNtcGx0X29zc2QgdmNtcGx0c2QgdmNtcGxlX29zc2QgdmNtcGxlc2QgdmNtcHVub3JkX3FzZCB2Y21wdW5vcmRzZCB2Y21wbmVxX3Vxc2QgdmNtcG5lcXNkIHZjbXBubHRfdXNzZCB2Y21wbmx0c2QgdmNtcG5sZV91c3NkIHZjbXBubGVzZCB2Y21wb3JkX3FzZCB2Y21wb3Jkc2QgdmNtcGVxX3Vxc2QgdmNtcG5nZV91c3NkIHZjbXBuZ2VzZCB2Y21wbmd0X3Vzc2QgdmNtcG5ndHNkIHZjbXBmYWxzZV9vcXNkIHZjbXBmYWxzZXNkIHZjbXBuZXFfb3FzZCB2Y21wZ2Vfb3NzZCB2Y21wZ2VzZCB2Y21wZ3Rfb3NzZCB2Y21wZ3RzZCB2Y21wdHJ1ZV91cXNkIHZjbXB0cnVlc2QgdmNtcGx0X29xc2QgdmNtcGxlX29xc2QgdmNtcHVub3JkX3NzZCB2Y21wbmVxX3Vzc2QgdmNtcG5sdF91cXNkIHZjbXBubGVfdXFzZCB2Y21wb3JkX3NzZCB2Y21wZXFfdXNzZCB2Y21wbmdlX3Vxc2QgdmNtcG5ndF91cXNkIHZjbXBmYWxzZV9vc3NkIHZjbXBuZXFfb3NzZCB2Y21wZ2Vfb3FzZCB2Y21wZ3Rfb3FzZCB2Y21wdHJ1ZV91c3NkIHZjbXBzZCB2Y21wZXFfb3NzcyB2Y21wZXFzcyB2Y21wbHRfb3NzcyB2Y21wbHRzcyB2Y21wbGVfb3NzcyB2Y21wbGVzcyB2Y21wdW5vcmRfcXNzIHZjbXB1bm9yZHNzIHZjbXBuZXFfdXFzcyB2Y21wbmVxc3MgdmNtcG5sdF91c3NzIHZjbXBubHRzcyB2Y21wbmxlX3Vzc3MgdmNtcG5sZXNzIHZjbXBvcmRfcXNzIHZjbXBvcmRzcyB2Y21wZXFfdXFzcyB2Y21wbmdlX3Vzc3MgdmNtcG5nZXNzIHZjbXBuZ3RfdXNzcyB2Y21wbmd0c3MgdmNtcGZhbHNlX29xc3MgdmNtcGZhbHNlc3MgdmNtcG5lcV9vcXNzIHZjbXBnZV9vc3NzIHZjbXBnZXNzIHZjbXBndF9vc3NzIHZjbXBndHNzIHZjbXB0cnVlX3Vxc3MgdmNtcHRydWVzcyB2Y21wbHRfb3FzcyB2Y21wbGVfb3FzcyB2Y21wdW5vcmRfc3NzIHZjbXBuZXFfdXNzcyB2Y21wbmx0X3Vxc3MgdmNtcG5sZV91cXNzIHZjbXBvcmRfc3NzIHZjbXBlcV91c3NzIHZjbXBuZ2VfdXFzcyB2Y21wbmd0X3Vxc3MgdmNtcGZhbHNlX29zc3MgdmNtcG5lcV9vc3NzIHZjbXBnZV9vcXNzIHZjbXBndF9vcXNzIHZjbXB0cnVlX3Vzc3MgdmNtcHNzIHZjb21pc2QgdmNvbWlzcyB2Y3Z0ZHEycGQgdmN2dGRxMnBzIHZjdnRwZDJkcSB2Y3Z0cGQycHMgdmN2dHBzMmRxIHZjdnRwczJwZCB2Y3Z0c2Qyc2kgdmN2dHNkMnNzIHZjdnRzaTJzZCB2Y3Z0c2kyc3MgdmN2dHNzMnNkIHZjdnRzczJzaSB2Y3Z0dHBkMmRxIHZjdnR0cHMyZHEgdmN2dHRzZDJzaSB2Y3Z0dHNzMnNpIHZkaXZwZCB2ZGl2cHMgdmRpdnNkIHZkaXZzcyB2ZHBwZCB2ZHBwcyB2ZXh0cmFjdGYxMjggdmV4dHJhY3RwcyB2aGFkZHBkIHZoYWRkcHMgdmhzdWJwZCB2aHN1YnBzIHZpbnNlcnRmMTI4IHZpbnNlcnRwcyB2bGRkcXUgdmxkcXF1IHZsZG14Y3NyIHZtYXNrbW92ZHF1IHZtYXNrbW92cHMgdm1hc2ttb3ZwZCB2bWF4cGQgdm1heHBzIHZtYXhzZCB2bWF4c3Mgdm1pbnBkIHZtaW5wcyB2bWluc2Qgdm1pbnNzIHZtb3ZhcGQgdm1vdmFwcyB2bW92ZCB2bW92cSB2bW92ZGR1cCB2bW92ZHFhIHZtb3ZxcWEgdm1vdmRxdSB2bW92cXF1IHZtb3ZobHBzIHZtb3ZocGQgdm1vdmhwcyB2bW92bGhwcyB2bW92bHBkIHZtb3ZscHMgdm1vdm1za3BkIHZtb3Ztc2twcyB2bW92bnRkcSB2bW92bnRxcSB2bW92bnRkcWEgdm1vdm50cGQgdm1vdm50cHMgdm1vdnNkIHZtb3ZzaGR1cCB2bW92c2xkdXAgdm1vdnNzIHZtb3Z1cGQgdm1vdnVwcyB2bXBzYWRidyB2bXVscGQgdm11bHBzIHZtdWxzZCB2bXVsc3Mgdm9ycGQgdm9ycHMgdnBhYnNiIHZwYWJzdyB2cGFic2QgdnBhY2tzc3diIHZwYWNrc3NkdyB2cGFja3Vzd2IgdnBhY2t1c2R3IHZwYWRkYiB2cGFkZHcgdnBhZGRkIHZwYWRkcSB2cGFkZHNiIHZwYWRkc3cgdnBhZGR1c2IgdnBhZGR1c3cgdnBhbGlnbnIgdnBhbmQgdnBhbmRuIHZwYXZnYiB2cGF2Z3cgdnBibGVuZHZiIHZwYmxlbmR3IHZwY21wZXN0cmkgdnBjbXBlc3RybSB2cGNtcGlzdHJpIHZwY21waXN0cm0gdnBjbXBlcWIgdnBjbXBlcXcgdnBjbXBlcWQgdnBjbXBlcXEgdnBjbXBndGIgdnBjbXBndHcgdnBjbXBndGQgdnBjbXBndHEgdnBlcm1pbHBkIHZwZXJtaWxwcyB2cGVybTJmMTI4IHZwZXh0cmIgdnBleHRydyB2cGV4dHJkIHZwZXh0cnEgdnBoYWRkdyB2cGhhZGRkIHZwaGFkZHN3IHZwaG1pbnBvc3V3IHZwaHN1YncgdnBoc3ViZCB2cGhzdWJzdyB2cGluc3JiIHZwaW5zcncgdnBpbnNyZCB2cGluc3JxIHZwbWFkZHdkIHZwbWFkZHVic3cgdnBtYXhzYiB2cG1heHN3IHZwbWF4c2QgdnBtYXh1YiB2cG1heHV3IHZwbWF4dWQgdnBtaW5zYiB2cG1pbnN3IHZwbWluc2QgdnBtaW51YiB2cG1pbnV3IHZwbWludWQgdnBtb3Ztc2tiIHZwbW92c3hidyB2cG1vdnN4YmQgdnBtb3ZzeGJxIHZwbW92c3h3ZCB2cG1vdnN4d3EgdnBtb3ZzeGRxIHZwbW92enhidyB2cG1vdnp4YmQgdnBtb3Z6eGJxIHZwbW92enh3ZCB2cG1vdnp4d3EgdnBtb3Z6eGRxIHZwbXVsaHV3IHZwbXVsaHJzdyB2cG11bGh3IHZwbXVsbHcgdnBtdWxsZCB2cG11bHVkcSB2cG11bGRxIHZwb3IgdnBzYWRidyB2cHNodWZiIHZwc2h1ZmQgdnBzaHVmaHcgdnBzaHVmbHcgdnBzaWduYiB2cHNpZ253IHZwc2lnbmQgdnBzbGxkcSB2cHNybGRxIHZwc2xsdyB2cHNsbGQgdnBzbGxxIHZwc3JhdyB2cHNyYWQgdnBzcmx3IHZwc3JsZCB2cHNybHEgdnB0ZXN0IHZwc3ViYiB2cHN1YncgdnBzdWJkIHZwc3VicSB2cHN1YnNiIHZwc3Vic3cgdnBzdWJ1c2IgdnBzdWJ1c3cgdnB1bnBja2hidyB2cHVucGNraHdkIHZwdW5wY2toZHEgdnB1bnBja2hxZHEgdnB1bnBja2xidyB2cHVucGNrbHdkIHZwdW5wY2tsZHEgdnB1bnBja2xxZHEgdnB4b3IgdnJjcHBzIHZyY3BzcyB2cnNxcnRwcyB2cnNxcnRzcyB2cm91bmRwZCB2cm91bmRwcyB2cm91bmRzZCB2cm91bmRzcyB2c2h1ZnBkIHZzaHVmcHMgdnNxcnRwZCB2c3FydHBzIHZzcXJ0c2QgdnNxcnRzcyB2c3RteGNzciB2c3VicGQgdnN1YnBzIHZzdWJzZCB2c3Vic3MgdnRlc3RwcyB2dGVzdHBkIHZ1Y29taXNkIHZ1Y29taXNzIHZ1bnBja2hwZCB2dW5wY2tocHMgdnVucGNrbHBkIHZ1bnBja2xwcyB2eG9ycGQgdnhvcnBzIHZ6ZXJvYWxsIHZ6ZXJvdXBwZXIgcGNsbXVsbHFscWRxIHBjbG11bGhxbHFkcSBwY2xtdWxscWhxZHEgcGNsbXVsaHFocWRxIHBjbG11bHFkcSB2cGNsbXVsbHFscWRxIHZwY2xtdWxocWxxZHEgdnBjbG11bGxxaHFkcSB2cGNsbXVsaHFocWRxIHZwY2xtdWxxZHEgdmZtYWRkMTMycHMgdmZtYWRkMTMycGQgdmZtYWRkMzEycHMgdmZtYWRkMzEycGQgdmZtYWRkMjEzcHMgdmZtYWRkMjEzcGQgdmZtYWRkMTIzcHMgdmZtYWRkMTIzcGQgdmZtYWRkMjMxcHMgdmZtYWRkMjMxcGQgdmZtYWRkMzIxcHMgdmZtYWRkMzIxcGQgdmZtYWRkc3ViMTMycHMgdmZtYWRkc3ViMTMycGQgdmZtYWRkc3ViMzEycHMgdmZtYWRkc3ViMzEycGQgdmZtYWRkc3ViMjEzcHMgdmZtYWRkc3ViMjEzcGQgdmZtYWRkc3ViMTIzcHMgdmZtYWRkc3ViMTIzcGQgdmZtYWRkc3ViMjMxcHMgdmZtYWRkc3ViMjMxcGQgdmZtYWRkc3ViMzIxcHMgdmZtYWRkc3ViMzIxcGQgdmZtc3ViMTMycHMgdmZtc3ViMTMycGQgdmZtc3ViMzEycHMgdmZtc3ViMzEycGQgdmZtc3ViMjEzcHMgdmZtc3ViMjEzcGQgdmZtc3ViMTIzcHMgdmZtc3ViMTIzcGQgdmZtc3ViMjMxcHMgdmZtc3ViMjMxcGQgdmZtc3ViMzIxcHMgdmZtc3ViMzIxcGQgdmZtc3ViYWRkMTMycHMgdmZtc3ViYWRkMTMycGQgdmZtc3ViYWRkMzEycHMgdmZtc3ViYWRkMzEycGQgdmZtc3ViYWRkMjEzcHMgdmZtc3ViYWRkMjEzcGQgdmZtc3ViYWRkMTIzcHMgdmZtc3ViYWRkMTIzcGQgdmZtc3ViYWRkMjMxcHMgdmZtc3ViYWRkMjMxcGQgdmZtc3ViYWRkMzIxcHMgdmZtc3ViYWRkMzIxcGQgdmZubWFkZDEzMnBzIHZmbm1hZGQxMzJwZCB2Zm5tYWRkMzEycHMgdmZubWFkZDMxMnBkIHZmbm1hZGQyMTNwcyB2Zm5tYWRkMjEzcGQgdmZubWFkZDEyM3BzIHZmbm1hZGQxMjNwZCB2Zm5tYWRkMjMxcHMgdmZubWFkZDIzMXBkIHZmbm1hZGQzMjFwcyB2Zm5tYWRkMzIxcGQgdmZubXN1YjEzMnBzIHZmbm1zdWIxMzJwZCB2Zm5tc3ViMzEycHMgdmZubXN1YjMxMnBkIHZmbm1zdWIyMTNwcyB2Zm5tc3ViMjEzcGQgdmZubXN1YjEyM3BzIHZmbm1zdWIxMjNwZCB2Zm5tc3ViMjMxcHMgdmZubXN1YjIzMXBkIHZmbm1zdWIzMjFwcyB2Zm5tc3ViMzIxcGQgdmZtYWRkMTMyc3MgdmZtYWRkMTMyc2QgdmZtYWRkMzEyc3MgdmZtYWRkMzEyc2QgdmZtYWRkMjEzc3MgdmZtYWRkMjEzc2QgdmZtYWRkMTIzc3MgdmZtYWRkMTIzc2QgdmZtYWRkMjMxc3MgdmZtYWRkMjMxc2QgdmZtYWRkMzIxc3MgdmZtYWRkMzIxc2QgdmZtc3ViMTMyc3MgdmZtc3ViMTMyc2QgdmZtc3ViMzEyc3MgdmZtc3ViMzEyc2QgdmZtc3ViMjEzc3MgdmZtc3ViMjEzc2QgdmZtc3ViMTIzc3MgdmZtc3ViMTIzc2QgdmZtc3ViMjMxc3MgdmZtc3ViMjMxc2QgdmZtc3ViMzIxc3MgdmZtc3ViMzIxc2QgdmZubWFkZDEzMnNzIHZmbm1hZGQxMzJzZCB2Zm5tYWRkMzEyc3MgdmZubWFkZDMxMnNkIHZmbm1hZGQyMTNzcyB2Zm5tYWRkMjEzc2QgdmZubWFkZDEyM3NzIHZmbm1hZGQxMjNzZCB2Zm5tYWRkMjMxc3MgdmZubWFkZDIzMXNkIHZmbm1hZGQzMjFzcyB2Zm5tYWRkMzIxc2QgdmZubXN1YjEzMnNzIHZmbm1zdWIxMzJzZCB2Zm5tc3ViMzEyc3MgdmZubXN1YjMxMnNkIHZmbm1zdWIyMTNzcyB2Zm5tc3ViMjEzc2QgdmZubXN1YjEyM3NzIHZmbm1zdWIxMjNzZCB2Zm5tc3ViMjMxc3MgdmZubXN1YjIzMXNkIHZmbm1zdWIzMjFzcyB2Zm5tc3ViMzIxc2QgcmRmc2Jhc2UgcmRnc2Jhc2UgcmRyYW5kIHdyZnNiYXNlIHdyZ3NiYXNlIHZjdnRwaDJwcyB2Y3Z0cHMycGggYWRjeCBhZG94IHJkc2VlZCBjbGFjIHN0YWMgeHN0b3JlIHhjcnlwdGVjYiB4Y3J5cHRjYmMgeGNyeXB0Y3RyIHhjcnlwdGNmYiB4Y3J5cHRvZmIgbW9udG11bCB4c2hhMSB4c2hhMjU2IGxsd3BjYiBzbHdwY2IgbHdwdmFsIGx3cGlucyB2Zm1hZGRwZCB2Zm1hZGRwcyB2Zm1hZGRzZCB2Zm1hZGRzcyB2Zm1hZGRzdWJwZCB2Zm1hZGRzdWJwcyB2Zm1zdWJhZGRwZCB2Zm1zdWJhZGRwcyB2Zm1zdWJwZCB2Zm1zdWJwcyB2Zm1zdWJzZCB2Zm1zdWJzcyB2Zm5tYWRkcGQgdmZubWFkZHBzIHZmbm1hZGRzZCB2Zm5tYWRkc3MgdmZubXN1YnBkIHZmbm1zdWJwcyB2Zm5tc3Vic2QgdmZubXN1YnNzIHZmcmN6cGQgdmZyY3pwcyB2ZnJjenNkIHZmcmN6c3MgdnBjbW92IHZwY29tYiB2cGNvbWQgdnBjb21xIHZwY29tdWIgdnBjb211ZCB2cGNvbXVxIHZwY29tdXcgdnBjb213IHZwaGFkZGJkIHZwaGFkZGJxIHZwaGFkZGJ3IHZwaGFkZGRxIHZwaGFkZHViZCB2cGhhZGR1YnEgdnBoYWRkdWJ3IHZwaGFkZHVkcSB2cGhhZGR1d2QgdnBoYWRkdXdxIHZwaGFkZHdkIHZwaGFkZHdxIHZwaHN1YmJ3IHZwaHN1YmRxIHZwaHN1YndkIHZwbWFjc2RkIHZwbWFjc2RxaCB2cG1hY3NkcWwgdnBtYWNzc2RkIHZwbWFjc3NkcWggdnBtYWNzc2RxbCB2cG1hY3Nzd2QgdnBtYWNzc3d3IHZwbWFjc3dkIHZwbWFjc3d3IHZwbWFkY3Nzd2QgdnBtYWRjc3dkIHZwcGVybSB2cHJvdGIgdnByb3RkIHZwcm90cSB2cHJvdHcgdnBzaGFiIHZwc2hhZCB2cHNoYXEgdnBzaGF3IHZwc2hsYiB2cHNobGQgdnBzaGxxIHZwc2hsdyB2YnJvYWRjYXN0aTEyOCB2cGJsZW5kZCB2cGJyb2FkY2FzdGIgdnBicm9hZGNhc3R3IHZwYnJvYWRjYXN0ZCB2cGJyb2FkY2FzdHEgdnBlcm1kIHZwZXJtcGQgdnBlcm1wcyB2cGVybXEgdnBlcm0yaTEyOCB2ZXh0cmFjdGkxMjggdmluc2VydGkxMjggdnBtYXNrbW92ZCB2cG1hc2ttb3ZxIHZwc2xsdmQgdnBzbGx2cSB2cHNyYXZkIHZwc3JsdmQgdnBzcmx2cSB2Z2F0aGVyZHBkIHZnYXRoZXJxcGQgdmdhdGhlcmRwcyB2Z2F0aGVycXBzIHZwZ2F0aGVyZGQgdnBnYXRoZXJxZCB2cGdhdGhlcmRxIHZwZ2F0aGVycXEgeGFib3J0IHhiZWdpbiB4ZW5kIHh0ZXN0IGFuZG4gYmV4dHIgYmxjaSBibGNpYyBibHNpIGJsc2ljIGJsY2ZpbGwgYmxzZmlsbCBibGNtc2sgYmxzbXNrIGJsc3IgYmxjcyBiemhpIG11bHggcGRlcCBwZXh0IHJvcnggc2FyeCBzaGx4IHNocnggdHpjbnQgdHptc2sgdDFtc2tjIHZhbGlnbmQgdmFsaWducSB2YmxlbmRtcGQgdmJsZW5kbXBzIHZicm9hZGNhc3RmMzJ4NCB2YnJvYWRjYXN0ZjY0eDQgdmJyb2FkY2FzdGkzMng0IHZicm9hZGNhc3RpNjR4NCB2Y29tcHJlc3NwZCB2Y29tcHJlc3NwcyB2Y3Z0cGQydWRxIHZjdnRwczJ1ZHEgdmN2dHNkMnVzaSB2Y3Z0c3MydXNpIHZjdnR0cGQydWRxIHZjdnR0cHMydWRxIHZjdnR0c2QydXNpIHZjdnR0c3MydXNpIHZjdnR1ZHEycGQgdmN2dHVkcTJwcyB2Y3Z0dXNpMnNkIHZjdnR1c2kyc3MgdmV4cGFuZHBkIHZleHBhbmRwcyB2ZXh0cmFjdGYzMng0IHZleHRyYWN0ZjY0eDQgdmV4dHJhY3RpMzJ4NCB2ZXh0cmFjdGk2NHg0IHZmaXh1cGltbXBkIHZmaXh1cGltbXBzIHZmaXh1cGltbXNkIHZmaXh1cGltbXNzIHZnZXRleHBwZCB2Z2V0ZXhwcHMgdmdldGV4cHNkIHZnZXRleHBzcyB2Z2V0bWFudHBkIHZnZXRtYW50cHMgdmdldG1hbnRzZCB2Z2V0bWFudHNzIHZpbnNlcnRmMzJ4NCB2aW5zZXJ0ZjY0eDQgdmluc2VydGkzMng0IHZpbnNlcnRpNjR4NCB2bW92ZHFhMzIgdm1vdmRxYTY0IHZtb3ZkcXUzMiB2bW92ZHF1NjQgdnBhYnNxIHZwYW5kZCB2cGFuZG5kIHZwYW5kbnEgdnBhbmRxIHZwYmxlbmRtZCB2cGJsZW5kbXEgdnBjbXBsdGQgdnBjbXBsZWQgdnBjbXBuZXFkIHZwY21wbmx0ZCB2cGNtcG5sZWQgdnBjbXBkIHZwY21wbHRxIHZwY21wbGVxIHZwY21wbmVxcSB2cGNtcG5sdHEgdnBjbXBubGVxIHZwY21wcSB2cGNtcGVxdWQgdnBjbXBsdHVkIHZwY21wbGV1ZCB2cGNtcG5lcXVkIHZwY21wbmx0dWQgdnBjbXBubGV1ZCB2cGNtcHVkIHZwY21wZXF1cSB2cGNtcGx0dXEgdnBjbXBsZXVxIHZwY21wbmVxdXEgdnBjbXBubHR1cSB2cGNtcG5sZXVxIHZwY21wdXEgdnBjb21wcmVzc2QgdnBjb21wcmVzc3EgdnBlcm1pMmQgdnBlcm1pMnBkIHZwZXJtaTJwcyB2cGVybWkycSB2cGVybXQyZCB2cGVybXQycGQgdnBlcm10MnBzIHZwZXJtdDJxIHZwZXhwYW5kZCB2cGV4cGFuZHEgdnBtYXhzcSB2cG1heHVxIHZwbWluc3EgdnBtaW51cSB2cG1vdmRiIHZwbW92ZHcgdnBtb3ZxYiB2cG1vdnFkIHZwbW92cXcgdnBtb3ZzZGIgdnBtb3ZzZHcgdnBtb3ZzcWIgdnBtb3ZzcWQgdnBtb3ZzcXcgdnBtb3Z1c2RiIHZwbW92dXNkdyB2cG1vdnVzcWIgdnBtb3Z1c3FkIHZwbW92dXNxdyB2cG9yZCB2cG9ycSB2cHJvbGQgdnByb2xxIHZwcm9sdmQgdnByb2x2cSB2cHJvcmQgdnByb3JxIHZwcm9ydmQgdnByb3J2cSB2cHNjYXR0ZXJkZCB2cHNjYXR0ZXJkcSB2cHNjYXR0ZXJxZCB2cHNjYXR0ZXJxcSB2cHNyYXEgdnBzcmF2cSB2cHRlcm5sb2dkIHZwdGVybmxvZ3EgdnB0ZXN0bWQgdnB0ZXN0bXEgdnB0ZXN0bm1kIHZwdGVzdG5tcSB2cHhvcmQgdnB4b3JxIHZyY3AxNHBkIHZyY3AxNHBzIHZyY3AxNHNkIHZyY3AxNHNzIHZybmRzY2FsZXBkIHZybmRzY2FsZXBzIHZybmRzY2FsZXNkIHZybmRzY2FsZXNzIHZyc3FydDE0cGQgdnJzcXJ0MTRwcyB2cnNxcnQxNHNkIHZyc3FydDE0c3MgdnNjYWxlZnBkIHZzY2FsZWZwcyB2c2NhbGVmc2QgdnNjYWxlZnNzIHZzY2F0dGVyZHBkIHZzY2F0dGVyZHBzIHZzY2F0dGVycXBkIHZzY2F0dGVycXBzIHZzaHVmZjMyeDQgdnNodWZmNjR4MiB2c2h1ZmkzMng0IHZzaHVmaTY0eDIga2FuZG53IGthbmR3IGttb3Z3IGtub3R3IGtvcnRlc3R3IGtvcncga3NoaWZ0bHcga3NoaWZ0cncga3VucGNrYncga3hub3J3IGt4b3J3IHZwYnJvYWRjYXN0bWIycSB2cGJyb2FkY2FzdG13MmQgdnBjb25mbGljdGQgdnBjb25mbGljdHEgdnBsemNudGQgdnBsemNudHEgdmV4cDJwZCB2ZXhwMnBzIHZyY3AyOHBkIHZyY3AyOHBzIHZyY3AyOHNkIHZyY3AyOHNzIHZyc3FydDI4cGQgdnJzcXJ0MjhwcyB2cnNxcnQyOHNkIHZyc3FydDI4c3MgdmdhdGhlcnBmMGRwZCB2Z2F0aGVycGYwZHBzIHZnYXRoZXJwZjBxcGQgdmdhdGhlcnBmMHFwcyB2Z2F0aGVycGYxZHBkIHZnYXRoZXJwZjFkcHMgdmdhdGhlcnBmMXFwZCB2Z2F0aGVycGYxcXBzIHZzY2F0dGVycGYwZHBkIHZzY2F0dGVycGYwZHBzIHZzY2F0dGVycGYwcXBkIHZzY2F0dGVycGYwcXBzIHZzY2F0dGVycGYxZHBkIHZzY2F0dGVycGYxZHBzIHZzY2F0dGVycGYxcXBkIHZzY2F0dGVycGYxcXBzIHByZWZldGNod3QxIGJuZG1rIGJuZGNsIGJuZGN1IGJuZGNuIGJuZG1vdiBibmRsZHggYm5kc3R4IHNoYTFybmRzNCBzaGExbmV4dGUgc2hhMW1zZzEgc2hhMW1zZzIgc2hhMjU2cm5kczIgc2hhMjU2bXNnMSBzaGEyNTZtc2cyIGhpbnRfbm9wMCBoaW50X25vcDEgaGludF9ub3AyIGhpbnRfbm9wMyBoaW50X25vcDQgaGludF9ub3A1IGhpbnRfbm9wNiBoaW50X25vcDcgaGludF9ub3A4IGhpbnRfbm9wOSBoaW50X25vcDEwIGhpbnRfbm9wMTEgaGludF9ub3AxMiBoaW50X25vcDEzIGhpbnRfbm9wMTQgaGludF9ub3AxNSBoaW50X25vcDE2IGhpbnRfbm9wMTcgaGludF9ub3AxOCBoaW50X25vcDE5IGhpbnRfbm9wMjAgaGludF9ub3AyMSBoaW50X25vcDIyIGhpbnRfbm9wMjMgaGludF9ub3AyNCBoaW50X25vcDI1IGhpbnRfbm9wMjYgaGludF9ub3AyNyBoaW50X25vcDI4IGhpbnRfbm9wMjkgaGludF9ub3AzMCBoaW50X25vcDMxIGhpbnRfbm9wMzIgaGludF9ub3AzMyBoaW50X25vcDM0IGhpbnRfbm9wMzUgaGludF9ub3AzNiBoaW50X25vcDM3IGhpbnRfbm9wMzggaGludF9ub3AzOSBoaW50X25vcDQwIGhpbnRfbm9wNDEgaGludF9ub3A0MiBoaW50X25vcDQzIGhpbnRfbm9wNDQgaGludF9ub3A0NSBoaW50X25vcDQ2IGhpbnRfbm9wNDcgaGludF9ub3A0OCBoaW50X25vcDQ5IGhpbnRfbm9wNTAgaGludF9ub3A1MSBoaW50X25vcDUyIGhpbnRfbm9wNTMgaGludF9ub3A1NCBoaW50X25vcDU1IGhpbnRfbm9wNTYgaGludF9ub3A1NyBoaW50X25vcDU4IGhpbnRfbm9wNTkgaGludF9ub3A2MCBoaW50X25vcDYxIGhpbnRfbm9wNjIgaGludF9ub3A2MycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcG9pbnRlclxuICAgICAgICAnaXAgZWlwIHJpcCAnICtcbiAgICAgICAgLy8gOC1iaXQgcmVnaXN0ZXJzXG4gICAgICAgICdhbCBhaCBibCBiaCBjbCBjaCBkbCBkaCBzaWwgZGlsIGJwbCBzcGwgcjhiIHI5YiByMTBiIHIxMWIgcjEyYiByMTNiIHIxNGIgcjE1YiAnICtcbiAgICAgICAgLy8gMTYtYml0IHJlZ2lzdGVyc1xuICAgICAgICAnYXggYnggY3ggZHggc2kgZGkgYnAgc3Agcjh3IHI5dyByMTB3IHIxMXcgcjEydyByMTN3IHIxNHcgcjE1dyAnICtcbiAgICAgICAgLy8gMzItYml0IHJlZ2lzdGVyc1xuICAgICAgICAnZWF4IGVieCBlY3ggZWR4IGVzaSBlZGkgZWJwIGVzcCBlaXAgcjhkIHI5ZCByMTBkIHIxMWQgcjEyZCByMTNkIHIxNGQgcjE1ZCAnICtcbiAgICAgICAgLy8gNjQtYml0IHJlZ2lzdGVyc1xuICAgICAgICAncmF4IHJieCByY3ggcmR4IHJzaSByZGkgcmJwIHJzcCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnICtcbiAgICAgICAgLy8gU2VnbWVudCByZWdpc3RlcnNcbiAgICAgICAgJ2NzIGRzIGVzIGZzIGdzIHNzICcgK1xuICAgICAgICAvLyBGbG9hdGluZyBwb2ludCBzdGFjayByZWdpc3RlcnNcbiAgICAgICAgJ3N0IHN0MCBzdDEgc3QyIHN0MyBzdDQgc3Q1IHN0NiBzdDcgJyArXG4gICAgICAgIC8vIE1NWCBSZWdpc3RlcnNcbiAgICAgICAgJ21tMCBtbTEgbW0yIG1tMyBtbTQgbW01IG1tNiBtbTcgJyArXG4gICAgICAgIC8vIFNTRSByZWdpc3RlcnNcbiAgICAgICAgJ3htbTAgIHhtbTEgIHhtbTIgIHhtbTMgIHhtbTQgIHhtbTUgIHhtbTYgIHhtbTcgIHhtbTggIHhtbTkgeG1tMTAgIHhtbTExIHhtbTEyIHhtbTEzIHhtbTE0IHhtbTE1ICcgK1xuICAgICAgICAneG1tMTYgeG1tMTcgeG1tMTggeG1tMTkgeG1tMjAgeG1tMjEgeG1tMjIgeG1tMjMgeG1tMjQgeG1tMjUgeG1tMjYgeG1tMjcgeG1tMjggeG1tMjkgeG1tMzAgeG1tMzEgJyArXG4gICAgICAgIC8vIEFWWCByZWdpc3RlcnNcbiAgICAgICAgJ3ltbTAgIHltbTEgIHltbTIgIHltbTMgIHltbTQgIHltbTUgIHltbTYgIHltbTcgIHltbTggIHltbTkgeW1tMTAgIHltbTExIHltbTEyIHltbTEzIHltbTE0IHltbTE1ICcgK1xuICAgICAgICAneW1tMTYgeW1tMTcgeW1tMTggeW1tMTkgeW1tMjAgeW1tMjEgeW1tMjIgeW1tMjMgeW1tMjQgeW1tMjUgeW1tMjYgeW1tMjcgeW1tMjggeW1tMjkgeW1tMzAgeW1tMzEgJyArXG4gICAgICAgIC8vIEFWWC01MTJGIHJlZ2lzdGVyc1xuICAgICAgICAnem1tMCAgem1tMSAgem1tMiAgem1tMyAgem1tNCAgem1tNSAgem1tNiAgem1tNyAgem1tOCAgem1tOSB6bW0xMCAgem1tMTEgem1tMTIgem1tMTMgem1tMTQgem1tMTUgJyArXG4gICAgICAgICd6bW0xNiB6bW0xNyB6bW0xOCB6bW0xOSB6bW0yMCB6bW0yMSB6bW0yMiB6bW0yMyB6bW0yNCB6bW0yNSB6bW0yNiB6bW0yNyB6bW0yOCB6bW0yOSB6bW0zMCB6bW0zMSAnICtcbiAgICAgICAgLy8gQVZYLTUxMkYgbWFzayByZWdpc3RlcnNcbiAgICAgICAgJ2swIGsxIGsyIGszIGs0IGs1IGs2IGs3ICcgK1xuICAgICAgICAvLyBCb3VuZCAoTVBYKSByZWdpc3RlclxuICAgICAgICAnYm5kMCBibmQxIGJuZDIgYm5kMyAnICtcbiAgICAgICAgLy8gU3BlY2lhbCByZWdpc3RlclxuICAgICAgICAnY3IwIGNyMSBjcjIgY3IzIGNyNCBjcjggZHIwIGRyMSBkcjIgZHIzIGRyOCB0cjMgdHI0IHRyNSB0cjYgdHI3ICcgK1xuICAgICAgICAvLyBOQVNNIGFsdHJlZyBwYWNrYWdlXG4gICAgICAgICdyMCByMSByMiByMyByNCByNSByNiByNyByMGIgcjFiIHIyYiByM2IgcjRiIHI1YiByNmIgcjdiICcgK1xuICAgICAgICAncjB3IHIxdyByMncgcjN3IHI0dyByNXcgcjZ3IHI3dyByMGQgcjFkIHIyZCByM2QgcjRkIHI1ZCByNmQgcjdkICcgK1xuICAgICAgICAncjBoIHIxaCByMmggcjNoICcgK1xuICAgICAgICAncjBsIHIxbCByMmwgcjNsIHI0bCByNWwgcjZsIHI3bCByOGwgcjlsIHIxMGwgcjExbCByMTJsIHIxM2wgcjE0bCByMTVsICcgK1xuXG4gICAgICAgICdkYiBkdyBkZCBkcSBkdCBkZHEgZG8gZHkgZHogJyArXG4gICAgICAgICdyZXNiIHJlc3cgcmVzZCByZXNxIHJlc3QgcmVzZHEgcmVzbyByZXN5IHJlc3ogJyArXG4gICAgICAgICdpbmNiaW4gZXF1IHRpbWVzICcgK1xuICAgICAgICAnYnl0ZSB3b3JkIGR3b3JkIHF3b3JkIG5vc3BsaXQgcmVsIGFicyBzZWcgd3J0IHN0cmljdCBuZWFyIGZhciBhMzIgcHRyJyxcblxuICAgICAgbWV0YTpcbiAgICAgICAgJyVkZWZpbmUgJXhkZWZpbmUgJSsgJXVuZGVmICVkZWZzdHIgJWRlZnRvayAlYXNzaWduICVzdHJjYXQgJXN0cmxlbiAlc3Vic3RyICVyb3RhdGUgJWVsaWYgJWVsc2UgJWVuZGlmICcgK1xuICAgICAgICAnJWlmICVpZm1hY3JvICVpZmN0eCAlaWZpZG4gJWlmaWRuaSAlaWZpZCAlaWZudW0gJWlmc3RyICVpZnRva2VuICVpZmVtcHR5ICVpZmVudiAlZXJyb3IgJXdhcm5pbmcgJWZhdGFsICVyZXAgJyArXG4gICAgICAgICclZW5kcmVwICVpbmNsdWRlICVwdXNoICVwb3AgJXJlcGwgJXBhdGhzZWFyY2ggJWRlcGVuZCAldXNlICVhcmcgJXN0YWNrc2l6ZSAlbG9jYWwgJWxpbmUgJWNvbW1lbnQgJWVuZGNvbW1lbnQgJyArXG4gICAgICAgICcubm9saXN0ICcgK1xuICAgICAgICAnX19GSUxFX18gX19MSU5FX18gX19TRUNUX18gIF9fQklUU19fIF9fT1VUUFVUX0ZPUk1BVF9fIF9fREFURV9fIF9fVElNRV9fIF9fREFURV9OVU1fXyBfX1RJTUVfTlVNX18gJyArXG4gICAgICAgICdfX1VUQ19EQVRFX18gX19VVENfVElNRV9fIF9fVVRDX0RBVEVfTlVNX18gX19VVENfVElNRV9OVU1fXyAgX19QQVNTX18gc3RydWMgZW5kc3RydWMgaXN0cnVjIGF0IGllbmQgJyArXG4gICAgICAgICdhbGlnbiBhbGlnbmIgc2VjdGFsaWduIGRheiBub2RheiB1cCBkb3duIHplcm8gZGVmYXVsdCBvcHRpb24gYXNzdW1lIHB1YmxpYyAnICtcblxuICAgICAgICAnYml0cyB1c2UxNiB1c2UzMiB1c2U2NCBkZWZhdWx0IHNlY3Rpb24gc2VnbWVudCBhYnNvbHV0ZSBleHRlcm4gZ2xvYmFsIGNvbW1vbiBjcHUgZmxvYXQgJyArXG4gICAgICAgICdfX3V0ZjE2X18gX191dGYxNmxlX18gX191dGYxNmJlX18gX191dGYzMl9fIF9fdXRmMzJsZV9fIF9fdXRmMzJiZV9fICcgK1xuICAgICAgICAnX19mbG9hdDhfXyBfX2Zsb2F0MTZfXyBfX2Zsb2F0MzJfXyBfX2Zsb2F0NjRfXyBfX2Zsb2F0ODBtX18gX19mbG9hdDgwZV9fIF9fZmxvYXQxMjhsX18gX19mbG9hdDEyOGhfXyAnICtcbiAgICAgICAgJ19fSW5maW5pdHlfXyBfX1FOYU5fXyBfX1NOYU5fXyBJbmYgTmFOIFFOYU4gU05hTiBmbG9hdDggZmxvYXQxNiBmbG9hdDMyIGZsb2F0NjQgZmxvYXQ4MG0gZmxvYXQ4MGUgJyArXG4gICAgICAgICdmbG9hdDEyOGwgZmxvYXQxMjhoIF9fRkxPQVRfREFaX18gX19GTE9BVF9ST1VORF9fIF9fRkxPQVRfXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gRmxvYXQgbnVtYmVyIGFuZCB4ODcgQkNEXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OihbMC05XVswLTlfXSopP1xcXFwuWzAtOV9dKig/OltlRV1bKy1dP1swLTlfXSspP3wnICtcbiAgICAgICAgICAgICAgICAgICAnKDBbWHhdKT9bMC05XVswLTlfXSpcXFxcLj9bMC05X10qKD86W3BQXSg/OlsrLV0/WzAtOV9dKyk/KT8pXFxcXGInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIC8vIEhleCBudW1iZXIgaW4gJFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcJFswLTldWzAtOUEtRmEtZl0qJywgcmVsZXZhbmNlOiAwIH0sXG5cbiAgICAgICAgICAvLyBOdW1iZXIgaW4gSCxELFQsUSxPLEIsWSBzdWZmaXhcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoPzpbMC05QS1GYS1mXVswLTlBLUZhLWZfXSpbSGhdfFswLTldWzAtOV9dKltEZFR0XT98WzAtN11bMC03X10qW1FxT29dfFswLTFdWzAtMV9dKltCYll5XSlcXFxcYicgfSxcblxuICAgICAgICAgIC8vIE51bWJlciBpbiBYLEQsVCxRLE8sQixZIHByZWZpeFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYig/OjBbWHhdWzAtOUEtRmEtZl9dK3wwW0RkVHRdWzAtOV9dK3wwW1FxT29dWzAtN19dK3wwW0JiWXldWzAtMV9dKylcXFxcYid9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBEb3VibGUgcXVvdGUgc3RyaW5nXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIFNpbmdsZS1xdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ1xcJycsIGVuZDogJ1teXFxcXFxcXFxdXFwnJyB9LFxuICAgICAgICAgIC8vIEJhY2txdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ2AnLCBlbmQ6ICdbXlxcXFxcXFxcXWAnIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIEdsb2JhbCBsYWJlbCBhbmQgbG9jYWwgbGFiZWxcbiAgICAgICAgICB7IGJlZ2luOiAnXlxcXFxzKltBLVphLXouXz9dW0EtWmEtejAtOV8kI0B+Lj9dKig6fFxcXFxzK2xhYmVsKScgfSxcbiAgICAgICAgICAvLyBNYWNyby1sb2NhbCBsYWJlbFxuICAgICAgICAgIHsgYmVnaW46ICdeXFxcXHMqJSVbQS1aYS16MC05XyQjQH4uP10qOicgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBNYWNybyBwYXJhbWV0ZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJyVbMC05XSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBNYWNybyBwYXJhbWV0ZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJyUhXFxTKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxccypcXC5bXFx3Xy1dKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQlVJTFRJTl9NT0RVTEVTID1cbiAgICAnT2JqZWN0TG9hZGVyIEFuaW1hdGUgTW92aWVDcmVkaXRzIFNsaWRlcyBGaWx0ZXJzIFNoYWRpbmcgTWF0ZXJpYWxzIExlbnNGbGFyZSBNYXBwaW5nIFZMQ0F1ZGlvVmlkZW8gJyArXG4gICAgJ1N0ZXJlb0RlY29kZXIgUG9pbnRDbG91ZCBOZXR3b3JrQWNjZXNzIFJlbW90ZUNvbnRyb2wgUmVnRXhwIENocm9tYUtleSBTbm93ZmFsbCBOb2RlSlMgU3BlZWNoIENoYXJ0cyc7XG5cbiAgdmFyIFhMX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaWYgdGhlbiBlbHNlIGRvIHdoaWxlIHVudGlsIGZvciBsb29wIGltcG9ydCB3aXRoIGlzIGFzIHdoZXJlIHdoZW4gYnkgZGF0YSBjb25zdGFudCAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgdGV4dCBuYW1lIGJvb2xlYW4gc3ltYm9sIGluZml4IHByZWZpeCBwb3N0Zml4IGJsb2NrIHRyZWUnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2luIG1vZCByZW0gYW5kIG9yIHhvciBub3QgYWJzIHNpZ24gZmxvb3IgY2VpbCBzcXJ0IHNpbiBjb3MgdGFuIGFzaW4gJyArXG4gICAgICAnYWNvcyBhdGFuIGV4cCBleHBtMSBsb2cgbG9nMiBsb2cxMCBsb2cxcCBwaSBhdCB0ZXh0X2xlbmd0aCB0ZXh0X3JhbmdlICcgK1xuICAgICAgJ3RleHRfZmluZCB0ZXh0X3JlcGxhY2UgY29udGFpbnMgcGFnZSBzbGlkZSBiYXNpY19zbGlkZSB0aXRsZV9zbGlkZSAnICtcbiAgICAgICd0aXRsZSBzdWJ0aXRsZSBmYWRlX2luIGZhZGVfb3V0IGZhZGVfYXQgY2xlYXJfY29sb3IgY29sb3IgbGluZV9jb2xvciAnICtcbiAgICAgICdsaW5lX3dpZHRoIHRleHR1cmVfd3JhcCB0ZXh0dXJlX3RyYW5zZm9ybSB0ZXh0dXJlIHNjYWxlXz94IHNjYWxlXz95ICcgK1xuICAgICAgJ3NjYWxlXz96PyB0cmFuc2xhdGVfP3ggdHJhbnNsYXRlXz95IHRyYW5zbGF0ZV8/ej8gcm90YXRlXz94IHJvdGF0ZV8/eSAnICtcbiAgICAgICdyb3RhdGVfP3o/IHJlY3RhbmdsZSBjaXJjbGUgZWxsaXBzZSBzcGhlcmUgcGF0aCBsaW5lX3RvIG1vdmVfdG8gJyArXG4gICAgICAncXVhZF90byBjdXJ2ZV90byB0aGVtZSBiYWNrZ3JvdW5kIGNvbnRlbnRzIGxvY2FsbHkgdGltZSBtb3VzZV8/eCAnICtcbiAgICAgICdtb3VzZV8/eSBtb3VzZV9idXR0b25zICcgK1xuICAgICAgQlVJTFRJTl9NT0RVTEVTXG4gIH07XG5cbiAgdmFyIERPVUJMRV9RVU9URV9URVhUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJywgaWxsZWdhbDogJ1xcXFxuJ1xuICB9O1xuICB2YXIgU0lOR0xFX1FVT1RFX1RFWFQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsIGlsbGVnYWw6ICdcXFxcbidcbiAgfTtcbiAgdmFyIExPTkdfVEVYVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnPDwnLCBlbmQ6ICc+PidcbiAgfTtcbiAgdmFyIEJBU0VEX05VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnWzAtOV0rI1swLTlBLVpfXSsoXFxcXC5bMC05LUEtWl9dKyk/Iz8oW0VlXVsrLV0/WzAtOV0rKT8nXG4gIH07XG4gIHZhciBJTVBPUlQgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsIGVuZDogJyQnLFxuICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogW0RPVUJMRV9RVU9URV9URVhUXVxuICB9O1xuICB2YXIgRlVOQ1RJT05fREVGSU5JVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9bYS16XVteXFxuXSotPi8sIHJldHVybkJlZ2luOiB0cnVlLCBlbmQ6IC8tPi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtzdGFydHM6IHtcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEU1xuICAgICAgfX0pXG4gICAgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndGFvJ10sXG4gICAgbGV4ZW1lczogL1thLXpBLVpdW2EtekEtWjAtOV8/XSovLFxuICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIERPVUJMRV9RVU9URV9URVhULFxuICAgIFNJTkdMRV9RVU9URV9URVhULFxuICAgIExPTkdfVEVYVCxcbiAgICBGVU5DVElPTl9ERUZJTklUSU9OLFxuICAgIElNUE9SVCxcbiAgICBCQVNFRF9OVU1CRVIsXG4gICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveHF1ZXJ5LyNpZC10ZXJtaW5hbC1kZWxpbWl0YXRpb25cbiAgdmFyIEtFWVdPUkRTID0gJ21vZHVsZSBzY2hlbWEgbmFtZXNwYWNlIGJvdW5kYXJ5LXNwYWNlIHByZXNlcnZlIG5vLXByZXNlcnZlIHN0cmlwIGRlZmF1bHQgY29sbGF0aW9uIGJhc2UtdXJpIG9yZGVyaW5nIGNvbnRleHQgZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3IgY29weS1uYW1lc3BhY2VzIGVtcHR5LXNlcXVlbmNlIGV4Y2VwdCBleHBvbmVudC1zZXBhcmF0b3IgZXh0ZXJuYWwgZ3JvdXBpbmctc2VwYXJhdG9yIGluaGVyaXQgbm8taW5oZXJpdCBsYXggbWludXMtc2lnbiBwZXItbWlsbGUgcGVyY2VudCBzY2hlbWEtYXR0cmlidXRlIHNjaGVtYS1lbGVtZW50IHN0cmljdCB1bm9yZGVyZWQgemVyby1kaWdpdCAnICtcbiAgJ2RlY2xhcmUgaW1wb3J0IG9wdGlvbiBmdW5jdGlvbiB2YWxpZGF0ZSB2YXJpYWJsZSAnICtcbiAgJ2ZvciBhdCBpbiBsZXQgd2hlcmUgb3JkZXIgZ3JvdXAgYnkgcmV0dXJuIGlmIHRoZW4gZWxzZSAnICtcbiAgJ3R1bWJsaW5nIHNsaWRpbmcgd2luZG93IHN0YXJ0IHdoZW4gb25seSBlbmQgcHJldmlvdXMgbmV4dCBzdGFibGUgJyArXG4gICdhc2NlbmRpbmcgZGVzY2VuZGluZyBhbGxvd2luZyBlbXB0eSBncmVhdGVzdCBsZWFzdCBzb21lIGV2ZXJ5IHNhdGlzZmllcyBzd2l0Y2ggY2FzZSB0eXBlc3dpdGNoIHRyeSBjYXRjaCAnICtcbiAgJ2FuZCBvciB0byB1bmlvbiBpbnRlcnNlY3QgaW5zdGFuY2Ugb2YgdHJlYXQgYXMgY2FzdGFibGUgY2FzdCBtYXAgYXJyYXkgJyArXG4gICdkZWxldGUgaW5zZXJ0IGludG8gcmVwbGFjZSB2YWx1ZSByZW5hbWUgY29weSBtb2RpZnkgdXBkYXRlJztcblxuICAvLyBOb2RlIFR5cGVzIChzb3J0ZWQgYnkgaW5oZXJpdGFuY2UpXG4gIC8vIGF0b21pYyB0eXBlcyAoc29ydGVkIGJ5IGluaGVyaXRhbmNlKVxuICB2YXIgVFlQRSA9ICdpdGVtIGRvY3VtZW50LW5vZGUgbm9kZSBhdHRyaWJ1dGUgZG9jdW1lbnQgZWxlbWVudCBjb21tZW50IG5hbWVzcGFjZSBuYW1lc3BhY2Utbm9kZSBwcm9jZXNzaW5nLWluc3RydWN0aW9uIHRleHQgY29uc3RydWN0aW9uICcgK1xuICAneHM6YW55QXRvbWljVHlwZSB4czp1bnR5cGVkQXRvbWljIHhzOmR1cmF0aW9uIHhzOnRpbWUgeHM6ZGVjaW1hbCB4czpmbG9hdCB4czpkb3VibGUgeHM6Z1llYXJNb250aCB4czpnWWVhciB4czpnTW9udGhEYXkgeHM6Z01vbnRoIHhzOmdEYXkgeHM6Ym9vbGVhbiB4czpiYXNlNjRCaW5hcnkgeHM6aGV4QmluYXJ5IHhzOmFueVVSSSB4czpRTmFtZSB4czpOT1RBVElPTiB4czpkYXRlVGltZSB4czpkYXRlVGltZVN0YW1wIHhzOmRhdGUgeHM6c3RyaW5nIHhzOm5vcm1hbGl6ZWRTdHJpbmcgeHM6dG9rZW4geHM6bGFuZ3VhZ2UgeHM6Tk1UT0tFTiB4czpOYW1lIHhzOk5DTmFtZSB4czpJRCB4czpJRFJFRiB4czpFTlRJVFkgeHM6aW50ZWdlciB4czpub25Qb3NpdGl2ZUludGVnZXIgeHM6bmVnYXRpdmVJbnRlZ2VyIHhzOmxvbmcgeHM6aW50IHhzOnNob3J0IHhzOmJ5dGUgeHM6bm9uTmVnYXRpdmVJbnRlZ2VyIHhzOnVuaXNpZ25lZExvbmcgeHM6dW5zaWduZWRJbnQgeHM6dW5zaWduZWRTaG9ydCB4czp1bnNpZ25lZEJ5dGUgeHM6cG9zaXRpdmVJbnRlZ2VyIHhzOnllYXJNb250aER1cmF0aW9uIHhzOmRheVRpbWVEdXJhdGlvbic7XG5cbiAgdmFyIExJVEVSQUwgPSAnZXEgbmUgbHQgbGUgZ3QgZ2UgaXMgJyArXG4gICAgJ3NlbGY6OiBjaGlsZDo6IGRlc2NlbmRhbnQ6OiBkZXNjZW5kYW50LW9yLXNlbGY6OiBhdHRyaWJ1dGU6OiBmb2xsb3dpbmc6OiBmb2xsb3dpbmctc2libGluZzo6IHBhcmVudDo6IGFuY2VzdG9yOjogYW5jZXN0b3Itb3Itc2VsZjo6IHByZWNlZGluZzo6IHByZWNlZGluZy1zaWJsaW5nOjogJyArXG4gICAgJ05hTic7XG5cbiAgLy8gZnVuY3Rpb25zIChUT0RPOiBmaW5kIHJlZ2V4IGZvciBvcDogd2l0aG91dCBicmVha2luZyBidWlsZClcbiAgdmFyIEJVSUxUX0lOID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAvXFxiYXJyYXlcXDovLFxuICAgICAgZW5kOiAvKD86YXBwZW5kfGZpbHRlcnxmbGF0dGVufGZvbGRcXC0oPzpsZWZ0fHJpZ2h0KXxmb3ItZWFjaCg/OlxcLXBhaXIpP3xnZXR8aGVhZHxpbnNlcnRcXC1iZWZvcmV8am9pbnxwdXR8cmVtb3ZlfHJldmVyc2V8c2l6ZXxzb3J0fHN1YmFycmF5fHRhaWwpXFxiL1xuICAgIH0sIHtcbiAgICAgIGJlZ2luOiAvXFxibWFwXFw6LyxcbiAgICAgIGVuZDogLyg/OmNvbnRhaW5zfGVudHJ5fGZpbmR8Zm9yXFwtZWFjaHxnZXR8a2V5c3xtZXJnZXxwdXR8cmVtb3ZlfHNpemUpXFxiL1xuICAgIH0sIHtcbiAgICAgIGJlZ2luOiAvXFxibWF0aFxcOi8sXG4gICAgICBlbmQ6IC8oPzphKD86Y29zfHNpbnx0YW5bMl0/KXxjb3N8ZXhwKD86MTApP3xsb2coPzoxMCk/fHBpfHBvd3xzaW58c3FydHx0YW4pXFxiL1xuICAgIH0sIHtcbiAgICAgIGJlZ2luOiAvXFxib3BcXDovLFxuICAgICAgZW5kOiAvXFwoLyxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICB9LCB7XG4gICAgICBiZWdpbjogL1xcYmZuXFw6LyxcbiAgICAgIGVuZDogL1xcKC8sXG4gICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgfSxcbi8vIGRvIG5vdCBoaWdobGlnaHQgaW5idWlsdCBzdHJpbmdzIGFzIHZhcmlhYmxlIG9yIHhtbCBlbGVtZW50IG5hbWVzXG4gICAge1xuICAgICAgYmVnaW46IC9bXjxcXC9cXCRcXDonXCItXVxcYig/OmFic3xhY2N1bXVsYXRvclxcLSg/OmFmdGVyfGJlZm9yZSl8YWRqdXN0XFwtKD86ZGF0ZSg/OlRpbWUpP3x0aW1lKVxcLXRvXFwtdGltZXpvbmV8YW5hbHl6ZVxcLXN0cmluZ3xhcHBseXxhdmFpbGFibGVcXC0oPzplbnZpcm9ubWVudFxcLXZhcmlhYmxlc3xzeXN0ZW1cXC1wcm9wZXJ0aWVzKXxhdmd8YmFzZVxcLXVyaXxib29sZWFufGNlaWxpbmd8Y29kZXBvaW50cz9cXC0oPzplcXVhbHx0b1xcLXN0cmluZyl8Y29sbGF0aW9uXFwta2V5fGNvbGxlY3Rpb258Y29tcGFyZXxjb25jYXR8Y29udGFpbnMoPzpcXC10b2tlbik/fGNvcHlcXC1vZnxjb3VudHxjdXJyZW50KD86XFwtKT8oPzpkYXRlKD86VGltZSk/fHRpbWV8Z3JvdXAoPzppbmdcXC1rZXkpP3xvdXRwdXRcXC11cml8bWVyZ2VcXC0oPzpncm91cHxrZXkpKT9kYXRhfGRhdGVUaW1lfGRheXM/XFwtZnJvbVxcLSg/OmRhdGUoPzpUaW1lKT98ZHVyYXRpb24pfGRlZXBcXC1lcXVhbHxkZWZhdWx0XFwtKD86Y29sbGF0aW9ufGxhbmd1YWdlKXxkaXN0aW5jdFxcLXZhbHVlc3xkb2N1bWVudCg/OlxcLXVyaSk/fGRvYyg/OlxcLWF2YWlsYWJsZSk/fGVsZW1lbnRcXC0oPzphdmFpbGFibGV8d2l0aFxcLWlkKXxlbXB0eXxlbmNvZGVcXC1mb3JcXC11cml8ZW5kc1xcLXdpdGh8ZW52aXJvbm1lbnRcXC12YXJpYWJsZXxlcnJvcnxlc2NhcGVcXC1odG1sXFwtdXJpfGV4YWN0bHlcXC1vbmV8ZXhpc3RzfGZhbHNlfGZpbHRlcnxmbG9vcnxmb2xkXFwtKD86bGVmdHxyaWdodCl8Zm9yXFwtZWFjaCg/OlxcLXBhaXIpP3xmb3JtYXRcXC0oPzpkYXRlKD86VGltZSk/fHRpbWV8aW50ZWdlcnxudW1iZXIpfGZ1bmN0aW9uXFwtKD86YXJpdHl8YXZhaWxhYmxlfGxvb2t1cHxuYW1lKXxnZW5lcmF0ZVxcLWlkfGhhc1xcLWNoaWxkcmVufGhlYWR8aG91cnNcXC1mcm9tXFwtKD86ZGF0ZVRpbWV8ZHVyYXRpb258dGltZSl8aWQoPzpyZWYpP3xpbXBsaWNpdFxcLXRpbWV6b25lfGluXFwtc2NvcGVcXC1wcmVmaXhlc3xpbmRleFxcLW9mfGlubmVybW9zdHxpbnNlcnRcXC1iZWZvcmV8aXJpXFwtdG9cXC11cml8anNvblxcLSg/OmRvY3x0b1xcLXhtbCl8a2V5fGxhbmd8bGFzdHxsb2FkXFwteHF1ZXJ5XFwtbW9kdWxlfGxvY2FsXFwtbmFtZSg/OlxcLWZyb21cXC1RTmFtZSk/fCg/Omxvd2VyfHVwcGVyKVxcLWNhc2V8bWF0Y2hlc3xtYXh8bWludXRlc1xcLWZyb21cXC0oPzpkYXRlVGltZXxkdXJhdGlvbnx0aW1lKXxtaW58bW9udGhzP1xcLWZyb21cXC0oPzpkYXRlKD86VGltZSk/fGR1cmF0aW9uKXxuYW1lKD86c3BhY2VcXC11cmlcXC0/KD86Zm9yXFwtcHJlZml4fGZyb21cXC1RTmFtZSk/KT98bmlsbGVkfG5vZGVcXC1uYW1lfG5vcm1hbGl6ZVxcLSg/OnNwYWNlfHVuaWNvZGUpfG5vdHxudW1iZXJ8b25lXFwtb3JcXC1tb3JlfG91dGVybW9zdHxwYXJzZVxcLSg/OmlldGZcXC1kYXRlfGpzb24pfHBhdGh8cG9zaXRpb258KD86cHJlZml4XFwtZnJvbVxcLSk/UU5hbWV8cmFuZG9tXFwtbnVtYmVyXFwtZ2VuZXJhdG9yfHJlZ2V4XFwtZ3JvdXB8cmVtb3ZlfHJlcGxhY2V8cmVzb2x2ZVxcLSg/OlFOYW1lfHVyaSl8cmV2ZXJzZXxyb290fHJvdW5kKD86XFwtaGFsZlxcLXRvXFwtZXZlbik/fHNlY29uZHNcXC1mcm9tXFwtKD86ZGF0ZVRpbWV8ZHVyYXRpb258dGltZSl8c25hcHNob3R8c29ydHxzdGFydHNcXC13aXRofHN0YXRpY1xcLWJhc2VcXC11cml8c3RyZWFtXFwtYXZhaWxhYmxlfHN0cmluZ1xcLT8oPzpqb2lufGxlbmd0aHx0b1xcLWNvZGVwb2ludHMpP3xzdWJzZXF1ZW5jZXxzdWJzdHJpbmdcXC0/KD86YWZ0ZXJ8YmVmb3JlKT98c3VtfHN5c3RlbVxcLXByb3BlcnR5fHRhaWx8dGltZXpvbmVcXC1mcm9tXFwtKD86ZGF0ZSg/OlRpbWUpP3x0aW1lKXx0b2tlbml6ZXx0cmFjZXx0cmFucyg/OmZvcm18bGF0ZSl8dHJ1ZXx0eXBlXFwtYXZhaWxhYmxlfHVub3JkZXJlZHx1bnBhcnNlZFxcLSg/OmVudGl0eXx0ZXh0KT9cXC0/KD86cHVibGljXFwtaWR8dXJpfGF2YWlsYWJsZXxsaW5lcyk/fHVyaVxcLWNvbGxlY3Rpb258eG1sXFwtdG9cXC1qc29ufHllYXJzP1xcLWZyb21cXC0oPzpkYXRlKD86VGltZSk/fGR1cmF0aW9uKXx6ZXJvXFwtb3JcXC1vbmUpXFxiLyxcbiAgICB9LCB7XG4gICAgICBiZWdpbjogL1xcYmxvY2FsXFw6LyxcbiAgICAgIGVuZDogL1xcKC8sXG4gICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgfSwge1xuICAgICAgYmVnaW46IC9cXGJ6aXBcXDovLFxuICAgICAgZW5kOiAvKD86emlwXFwtZmlsZXwoPzp4bWx8aHRtbHx0ZXh0fGJpbmFyeSlcXC1lbnRyeXwgKD86dXBkYXRlXFwtKT9lbnRyaWVzKVxcYi9cbiAgICB9LCB7XG4gICAgICBiZWdpbjogL1xcYig/OnV0aWx8ZGJ8ZnVuY3R4fGFwcHx4ZG1wfHhtbGRiKVxcOi8sXG4gICAgICBlbmQ6IC9cXCgvLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgIH1cbiAgXVxuICB9O1xuXG4gIHZhciBUSVRMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IC9cXGJ4cXVlcnkgdmVyc2lvbiBcIlsxM11cXC5bMDFdXCJcXHM/KD86ZW5jb2RpbmcgXCIuK1wiKT8vLFxuICAgIGVuZDogLzsvXG4gIH07XG5cbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9bXFwkXVtcXHctOl0rL1xuICB9O1xuXG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFt7XG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiAvXCJcIi8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgYmVnaW46IC8nJy8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1dXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvJVtcXHctOl0rL1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXCg6JyxcbiAgICBlbmQ6ICc6XFxcXCknLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46ICdAXFxcXHcrJ1xuICAgIH1dXG4gIH07XG5cbiAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94cXVlcnkvI2lkLWNvbXB1dGVkQ29uc3RydWN0b3JzXG4gIC8vIG1vY2hhOiBjb21wdXRlZF9pbmJ1aWx0XG4gIC8vIHNlZSBodHRwczovL3d3dy5yZWdleHBhbC5jb20vP2ZhbT05OTc0OVxuICB2YXIgQ09NUFVURUQgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2VsZW1lbnQgYXR0cmlidXRlIGNvbW1lbnQgZG9jdW1lbnQgcHJvY2Vzc2luZy1pbnN0cnVjdGlvbicsXG4gICAgZW5kOiAneycsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIC8vIG1vY2hhOiBkaXJlY3RfbWV0aG9kXG4gICAgdmFyIERJUkVDVCA9IHtcbiAgICAgIGJlZ2luOiAvPChbXFx3XFwuXzpcXC1dKykoKFxccyouKik9KCd8XCIpLiooJ3xcIikpPz4vLFxuICAgICAgZW5kOiAvKFxcL1tcXHdcXC5fOlxcLV0rPikvLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgIGJlZ2luOiAneycsXG4gICAgICAgIGVuZDogJ30nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3hxdWVyeSdcbiAgICAgIH0sICdzZWxmJ11cbiAgICB9O1xuXG5cbiAgdmFyIENPTlRBSU5TID0gW1xuICAgIFZBUixcbiAgICBCVUlMVF9JTixcbiAgICBTVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIENPTU1FTlQsXG4gICAgQU5OT1RBVElPTixcbiAgICBUSVRMRSxcbiAgICBDT01QVVRFRCxcbiAgICBESVJFQ1RcbiAgXTtcblxuXG5cbiAgICB2YXIgTUVUSE9EID0ge1xuICAgICAgYmVnaW46ICd7JyxcbiAgICAgIGVuZDogJ30nLFxuICAgICAgY29udGFpbnM6IENPTlRBSU5TXG4gICAgfTtcblxuXG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3hwYXRoJywgJ3hxJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAgbGV4ZW1lczogL1thLXpBLVpcXCRdW2EtekEtWjAtOV86XFwtXSovLFxuICAgIGlsbGVnYWw6IC8ocHJvYyl8KGFic3RyYWN0KXwoZXh0ZW5kcyl8KHVudGlsKXwoIykvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdiXCInLCBlbmQ6ICdcIidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYlxcJycsIGVuZDogJ1xcJydcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSlcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7dmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXX07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd6ZXAnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2FuZCBpbmNsdWRlX29uY2UgbGlzdCBhYnN0cmFjdCBnbG9iYWwgcHJpdmF0ZSBlY2hvIGludGVyZmFjZSBhcyBzdGF0aWMgZW5kc3dpdGNoICcgK1xuICAgICAgJ2FycmF5IG51bGwgaWYgZW5kd2hpbGUgb3IgY29uc3QgZm9yIGVuZGZvcmVhY2ggc2VsZiB2YXIgbGV0IHdoaWxlIGlzc2V0IHB1YmxpYyAnICtcbiAgICAgICdwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgJyArXG4gICAgICAncmV0dXJuIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgJyArXG4gICAgICAnY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyAnICtcbiAgICAgICdlbmRkZWNsYXJlIGZpbmFsIHRyeSBzd2l0Y2ggY29udGludWUgZW5kZm9yIGVuZGlmIGRlY2xhcmUgdW5zZXQgdHJ1ZSBmYWxzZSAnICtcbiAgICAgICd0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyAnICtcbiAgICAgICd5aWVsZCBmaW5hbGx5IGludCB1aW50IGxvbmcgdWxvbmcgY2hhciB1Y2hhciBkb3VibGUgZmxvYXQgYm9vbCBib29sZWFuIHN0cmluZycgK1xuICAgICAgJ2xpa2VseSB1bmxpa2VseScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdfX2hhbHRfY29tcGlsZXIuKz87JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnPDw8W1xcJ1wiXT9cXFxcdytbXFwnXCJdPyQnLCBlbmQ6ICdeXFxcXHcrOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gc3dhbGxvdyBjb21wb3NlZCBpZGVudGlmaWVycyB0byBhdm9pZCBwYXJzaW5nIHRoZW0gYXMga2V5d29yZHNcbiAgICAgICAgYmVnaW46IC8oOjp8LT4pK1thLXpBLVpfXFx4N2YtXFx4ZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHhmZl0qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9bO3tdLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFwkfFxcXFxbfCUnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9bOlxcKFxcJFwiXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJywgZW5kOiAnOycsXG4gICAgICAgIGlsbGVnYWw6IC9bXFwuJ10vLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3VzZScsIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59OyIsImltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3V0aWwvaHR0cCc7XHJcblxyXG5jb25zdCBCQVNFX0FQSV9VUkwgPSAnaHR0cDovLzEyNy4wLjAuMTozMDAxL2FwaS9xaW5pdSc7XHJcbmNvbnN0IGFwaVVybCA9IHtcclxuICBnZXRUb2tlbjogQkFTRV9BUElfVVJMICsgJy9nZXRfdG9rZW4nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDkuIPniZsgU0RLIOaWueW8j+S4iuS8oFxyXG4gKiAo5YmN56uv55u05o6l5LiK5Lyg5Yiw5LiD54mb5LqR5pyN5Yqh5Zmo5pa55byPKVxyXG4gKi9cclxuY2xhc3MgUWluaXVVcGxhb2Qge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5pbml0RGF0YShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGluaXREYXRhKG9wdGlvbnMpIHtcclxuICAgIHRoaXMucWluaXVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgIHRva2VuOiAnJyxcclxuICAgICAgYmFzZVVybDogJycsXHJcbiAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgIHVzZUNkbkRvbWFpbjogdHJ1ZSxcclxuICAgICAgICBkaXNhYmxlU3RhdGlzdGljc1JlcG9ydDogZmFsc2UsXHJcbiAgICAgICAgcmV0cnlDb3VudDogNixcclxuICAgICAgICByZWdpb246IHFpbml1LnJlZ2lvbi56MVxyXG4gICAgICB9LFxyXG4gICAgICBwdXRFeHRyYToge1xyXG4gICAgICAgIGZuYW1lOiBcIlwiLFxyXG4gICAgICAgIHBhcmFtczoge30sXHJcbiAgICAgICAgbWltZVR5cGU6IG51bGxcclxuICAgICAgfVxyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgICBcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5mZXRjaEdldFRva2VuKClcclxuICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBjb25zdCByZXNEYXRhID0gcmVzO1xyXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBkYXRhIH0gPSByZXNEYXRhO1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgIHNlbGYucWluaXVPcHRpb25zLnRva2VuID0gZGF0YS50b2tlbjtcclxuICAgICAgICAgIHNlbGYucWluaXVPcHRpb25zLmJhc2VVcmwgPSBkYXRhLmRvbWFpbjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBmZXRjaEdldFRva2VuKCkge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5xaW5pdU9wdGlvbnMudG9rZW5BcGlVcmwgfHwgYXBpVXJsLmdldFRva2VuO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgcmVxdWVzdC5hamF4KHtcclxuICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgIHJlc29sdmUocmVzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5a2Y5YKo5Yy65Z+f55qE5Zyw5Z2AXHJcbiAgICogXHJcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5xaW5pdS5jb20va29kby9tYW51YWwvMTY3MS9yZWdpb24tZW5kcG9pbnRcclxuICAgKi9cclxuICBnZXRSZWdpb25VcmwobWFyaykge1xyXG4gICAgY29uc3QgY2xpZW50TWFwID0ge1xyXG4gICAgICAvKiog5Y2O5LicICovXHJcbiAgICAgICd6MCc6ICcvL3VwbG9hZC5xaW5pdXAuY29tJyxcclxuICAgICAgLyoqIOWNjuWMlyAqL1xyXG4gICAgICAnejEnOiAnLy91cGxvYWQtejEucWluaXVwLmNvbScsXHJcbiAgICAgIC8qKiDljY7ljZcgKi9cclxuICAgICAgJ3oyJzogJy8vdXBsb2FkLXoyLnFpbml1cC5jb20nLFxyXG4gICAgICAvKiog5YyX576OICovXHJcbiAgICAgICduYTAnOiAnLy91cGxvYWQtbmEwLnFpbml1cC5jb20nLFxyXG4gICAgICAvKiog5Lic5Y2X5LqaICovXHJcbiAgICAgICdhczAnOiAnLy91cGxvYWQtYXMwLnFpbml1cC5jb20nXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpZW50TWFwW21hcmtdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHNlZSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLnFpbml1LmNvbS9rb2RvL3Nkay8xMjgzL2phdmFzY3JpcHRcclxuICAgKi9cclxuICB1cGxvYWRXaXRoU0RLKGZpbGUsIGtleSkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnFpbml1T3B0aW9ucy50b2tlbjtcclxuICAgIGNvbnN0IHB1dEV4dHJhID0gdGhpcy5xaW5pdU9wdGlvbnMucHV0RXh0cmE7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnFpbml1T3B0aW9ucy5jb25maWc7XHJcblxyXG4gICAgcHV0RXh0cmEucGFyYW1zW1wieDpuYW1lXCJdID0ga2V5O1xyXG4gICAgLy8gcHV0RXh0cmEucGFyYW1zW1wieDpuYW1lXCJdID0ga2V5LnNwbGl0KFwiLlwiKVswXTtcclxuXHJcbiAgICAvLyDorr7nva5uZXh0LGVycm9yLGNvbXBsZXRl5a+55bqU55qE5pON5L2c77yM5YiG5Yir5aSE55CG55u45bqU55qE6L+b5bqm5L+h5oGv77yM6ZSZ6K+v5L+h5oGv77yM5Lul5Y+K5a6M5oiQ5ZCO55qE5pON5L2cXHJcbiAgICB2YXIgZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgIGlmIChyZXMua2V5ICYmIHJlcy5rZXkubWF0Y2goL1xcLihqcGd8anBlZ3xwbmd8Z2lmKSQvKSkge1xyXG4gICAgICAgIGNvbnNvZWwubG9nKCc9PT09PSBjb21wbGV0ZSA9PT09PSByZXM6ICAlbycsIHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIG5leHQgPSBmdW5jdGlvbihyZXNwb25zZSkge31cclxuXHJcbiAgICB2YXIgc3ViT2JqZWN0ID0geyBcclxuICAgICAgbmV4dDogbmV4dCxcclxuICAgICAgZXJyb3I6IGVycm9yLFxyXG4gICAgICBjb21wbGV0ZTogY29tcGxldGVcclxuICAgIH07XHJcbiAgICBsZXQgc3Vic2NyaXB0aW9uO1xyXG4gICAgbGV0IG9ic2VydmFibGU7XHJcbiAgICAvLyDosIPnlKhzZGvkuIrkvKDmjqXlj6Pojrflvpfnm7jlupTnmoRvYnNlcnZhYmxl77yM5o6n5Yi25LiK5Lyg5ZKM5pqC5YGcXHJcbiAgICBvYnNlcnZhYmxlID0gcWluaXUudXBsb2FkKGZpbGUsIGtleSwgdG9rZW4sIHB1dEV4dHJhLCBjb25maWcpO1xyXG5cclxuICAgIC8vIOS4iuS8oFxyXG4gICAgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoc3ViT2JqZWN0KTtcclxuICAgIC8vIOaaguWBnOS4iuS8oFxyXG4gICAgLy8gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBiYXNlNjTmoLzlvI/nmoTlm77niYfkuIrkvKAuXHJcbiAgICogXHJcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5xaW5pdS5jb20va29kby9rYi8xMzI2L2hvdy10by11cGxvYWQtcGhvdG9zLXRvLXNldmVuLW5pdXl1bi1iYXNlNjQtY29kZVxyXG4gICAqL1xyXG4gIHB1dGI2NChiYXNlNjQpIHtcclxuICAgIGNvbnN0IHBpYyA9IHRoaXMuYmFzZTY0ZW5jb2RlKGJhc2U2NCk7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucWluaXVPcHRpb25zLnRva2VuO1xyXG4gICAgY29uc3QgZmlsZVNpemUgPSB0aGlzLmdldEJhc2U2NFNpemUoYmFzZTY0KTtcclxuICAgIGNvbnN0IHJlZ2lvblVybCA9IHRoaXMuZ2V0UmVnaW9uVXJsKHRoaXMucWluaXVPcHRpb25zLnJlZ2lvbik7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtyZWdpb25Vcmx9L3B1dGI2NC8ke2ZpbGVTaXplfWA7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICByZXF1ZXN0LmFqYXgoe1xyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICBkYXRhOiBwaWMsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxyXG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgVXBUb2tlbiAke3Rva2VufWBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2RvbWFpbicsIHNlbGYucWluaXVPcHRpb25zKTtcclxuICAgICAgICAgIHJlc29sdmUoeyBkb21haW46IHNlbGYucWluaXVPcHRpb25zLmJhc2VVcmwsIGhhc2g6IHJlcy5oYXNoIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIOiOt+WPliBiYXNlNjQg5Zu+54mH55qE5aSn5bCPLlxyXG4gICAqIFxyXG4gICAqIEBzZWUgaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW55ZWp1bmp1bi9hcnRpY2xlL2RldGFpbHMvNTQ5MjQzNTVcclxuICAgKi9cclxuICBnZXRCYXNlNjRTaXplKGJhc2U2NHVybCkge1xyXG4gICAgLy/ojrflj5ZiYXNlNjTlm77niYflpKflsI/vvIzov5Tlm55NQuaVsOWtl1xyXG4gICAgdmFyIHN0ciA9IGJhc2U2NHVybC5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgdmFyIGVxdWFsSW5kZXggPSBzdHIuaW5kZXhPZignPScpO1xyXG4gICAgaWYoc3RyLmluZGV4T2YoJz0nKT4wKSB7XHJcbiAgICAgICAgc3RyPXN0ci5zdWJzdHJpbmcoMCwgZXF1YWxJbmRleCk7XHJcbiAgICB9XHJcbiAgICAvLyDljp/mnaXnmoTlrZfnrKbmtYHlpKflsI/vvIzljZXkvY3kuLrlrZfoioJcclxuICAgIHZhciBzdHJMZW5ndGg9c3RyLmxlbmd0aDtcclxuICAgIC8vIOiuoeeul+WQjuW+l+WIsOeahOaWh+S7tua1geWkp+Wwj++8jOWNleS9jeS4uuWtl+iKglxyXG4gICAgdmFyIGZpbGVMZW5ndGg9cGFyc2VJbnQoc3RyTGVuZ3RoLShzdHJMZW5ndGgvOCkqMik7XHJcblxyXG4gICAgcmV0dXJuIGZpbGVMZW5ndGg7XHJcblxyXG4gICAgLy8g55Sx5a2X6IqC6L2s5o2i5Li6TUJcclxuICAgIC8vIHZhciBzaXplID0gXCJcIjtcclxuICAgIC8vIHNpemUgPSAoZmlsZUxlbmd0aC8oMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpO1xyXG4gICAgLy8gdmFyIHNpemVTdHIgPSBzaXplICsgXCJcIjsgICAgICAgICAgICAgICAgICAgICAgICAvL+i9rOaIkOWtl+espuS4slxyXG4gICAgLy8gdmFyIGluZGV4ID0gc2l6ZVN0ci5pbmRleE9mKFwiLlwiKTsgICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXHJcbiAgICAvLyB2YXIgZG91ID0gc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAxICwyKSAgICAgICAgICAgIC8v6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XHJcbiAgICAvLyBpZihkb3UgPT0gXCIwMFwiKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v5Yik5pat5ZCO5Lik5L2N5piv5ZCm5Li6MDDvvIzlpoLmnpzmmK/liJnliKDpmaQwMCAgICAgICAgICAgICAgICBcclxuICAgIC8vICAgICByZXR1cm4gc2l6ZVN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpICsgc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAzLCAyKVxyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIHBhcnNlSW50KHNpemUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVVJM5a6J5YWo55qEQmFzZTY057yW56CBXHJcbiAgICovXHJcbiAgYmFzZTY0ZW5jb2RlKGJhc2U2NHVybCkge1xyXG4gICAgY29uc3Qgc3RyMSA9IGJhc2U2NHVybC5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpXHJcbiAgICByZXR1cm4gc3RyMTtcclxuXHJcbiAgICAvLyBjb25zdCBzdHIxID0gYmFzZTY0dXJsLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJylcclxuICAgIC8vIGNvbnN0IHN0cjIgPSBzdHIxLnJlcGxhY2UoL1xcKy9nLCAnLScpXHJcbiAgICAvLyByZXR1cm4gc3RyMi5yZXBsYWNlKC9cXC8vZywgJ18nKTtcclxuXHJcbiAgICAvLyAq5oqK5aS06YOo55qEZGF0YTppbWFnZS9wbmc7YmFzZTY0LOWOu+aOieOAgu+8iOazqOaEj++8mmJhc2U2NOWQjumdoueahOmAl+WPt+S5n+WOu+aOie+8iSovXHJcbiAgICAvLyByZXR1cm4gYmFzZTY0dXJsLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBRaW5pdVVwbGFvZDsiLCJjb25zdCBodHRwID0ge1xyXG4gIC8qKlxyXG4gICAqIGpz5bCB6KOFYWpheOivt+axglxyXG4gICAqID4+5L2/55SobmV3IFhNTEh0dHBSZXF1ZXN0IOWIm+W7uuivt+axguWvueixoSzmiYDku6XkuI3ogIPomZHkvY7nq69JRea1j+iniOWZqChJRTblj4rku6XkuIvkuI3mlK/mjIFYTUxIdHRwUmVxdWVzdClcclxuICAgKiA+PuS9v+eUqGVzNuivreazlSzlpoLmnpzpnIDopoHlnKjmraPlvI/njq/looPkvb/nlKgs5YiZ5Y+v5Lul55SoYmFiZWzovazmjaLkuLplczXor63ms5UgaHR0cHM6Ly9iYWJlbGpzLmNuL2RvY3Mvc2V0dXAvI2luc3RhbGxhdGlvblxyXG4gICAqICBAcGFyYW0gc2V0dGluZ3Mg6K+35rGC5Y+C5pWw5qih5Lu/alF1ZXJ5IGFqYXhcclxuICAgKiAg6LCD55So6K+l5pa55rOVLGRhdGHlj4LmlbDpnIDopoHlkozor7fmsYLlpLRDb250ZW50LVR5cGXlr7nlupRcclxuICAgKiAgQ29udGVudC1UeXBlICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDmj4/ov7BcclxuICAgKiAgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkICAgJ25hbWU95ZOI5ZOIJmFnZT0xMifmiJZ7bmFtZTon5ZOI5ZOIJyxhZ2U6MTJ9ICDmn6Xor6LlrZfnrKbkuLIs55SoJuWIhuWJslxyXG4gICAqICBhcHBsaWNhdGlvbi9qc29uICAgICAgICAgICAgICAgICAgICAgbmFtZT3lk4jlk4gmYWdlPTEyJyAgICAgICAgICAgICAgICAgICAgICAgIGpzb27lrZfnrKbkuLJcclxuICAgKiAgbXVsdGlwYXJ0L2Zvcm0tZGF0YSAgICAgICAgICAgICAgICAgIG5ldyBGb3JtRGF0YSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybURhdGHlr7nosaEs5b2T5Li6Rm9ybURhdGHnsbvlnoss5LiN6KaB5omL5Yqo6K6+572uQ29udGVudC1UeXBlXHJcbiAgICogIOazqOaEjzror7fmsYLlj4LmlbDlpoLmnpzljIXlkKvml6XmnJ/nsbvlnosu5piv5ZCm6IO96K+35rGC5oiQ5Yqf6ZyA6KaB5ZCO5Y+w5o6l5Y+j6YWN5ZCIXHJcbiAgICogXHJcbiAgICogQHNlZSDku6PnoIHmnIDliJ3mnaXmupA6IGh0dHBzOi8vd3d3LmppYW5zaHUuY29tL3AvOTE4YzYzMDQ1YmMzL1xyXG4gICAqL1xyXG4gIGFqYXg6IChzZXR0aW5ncyA9IHt9KSA9PiB7XHJcbiAgICAvLyDliJ3lp4vljJbor7fmsYLlj4LmlbBcclxuICAgIGxldCBfcyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICB1cmw6ICcnLCAvLyBzdHJpbmdcclxuICAgICAgdHlwZTogJ0dFVCcsIC8vIHN0cmluZyAnR0VUJyAnUE9TVCcgJ0RFTEVURSdcclxuICAgICAgZGF0YVR5cGU6ICdqc29uJywgLy8gc3RyaW5nIOacn+acm+eahOi/lOWbnuaVsOaNruexu+WeizonanNvbicgJ3RleHQnICdkb2N1bWVudCcgLi4uXHJcbiAgICAgIGFzeW5jOiB0cnVlLCAvLyAgYm9vbGVhbiB0cnVlOuW8guatpeivt+axgiBmYWxzZTrlkIzmraXor7fmsYIgcmVxdWlyZWRcclxuICAgICAgZGF0YTogbnVsbCwgLy8gYW55IOivt+axguWPguaVsCxkYXRh6ZyA6KaB5ZKM6K+35rGC5aS0Q29udGVudC1UeXBl5a+55bqUXHJcbiAgICAgIGhlYWRlcnM6IHt9LCAvLyBvYmplY3Qg6K+35rGC5aS0XHJcbiAgICAgIHRpbWVvdXQ6IDEwMDAsIC8vIHN0cmluZyDotoXml7bml7bpl7Q6MOihqOekuuS4jeiuvue9rui2heaXtlxyXG4gICAgICBiZWZvcmVTZW5kOiAoeGhyKSA9PiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIHN1Y2Nlc3M6IChyZXN1bHQsIHN0YXR1cywgeGhyKSA9PiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoeGhyLCBzdGF0dXMsIGVycm9yKSA9PiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoeGhyLCBzdGF0dXMpID0+IHtcclxuICAgICAgfVxyXG4gICAgfSwgc2V0dGluZ3MpO1xyXG5cclxuICAgIC8vIOWPguaVsOmqjOivgVxyXG4gICAgaWYgKCFfcy51cmwgfHwgIV9zLnR5cGUgfHwgIV9zLmRhdGFUeXBlIHx8ICFfcy5hc3luYykge1xyXG4gICAgICBhbGVydCgn5Y+C5pWw5pyJ6K+vJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDliJvlu7pYTUxIdHRwUmVxdWVzdOivt+axguWvueixoVxyXG4gICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgLy8g6K+35rGC5byA5aeL5Zue6LCD5Ye95pWwXHJcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgZSA9PiB7XHJcbiAgICAgIF9zLmJlZm9yZVNlbmQoeGhyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOivt+axguaIkOWKn+Wbnuiwg+WHveaVsFxyXG4gICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBlID0+IHtcclxuICAgICAgY29uc3Qgc3RhdHVzID0geGhyLnN0YXR1cztcclxuICAgICAgaWYgKChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkgfHwgc3RhdHVzID09PSAzMDQpIHtcclxuICAgICAgICBsZXQgcmVzdWx0O1xyXG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSAnZG9jdW1lbnQnKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB4aHIucmVzcG9uc2VYTUw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHhoci5yZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g5rOo5oSPOueKtuaAgeeggTIwMOihqOekuuivt+axguWPkemAgS/mjqXlj5fmiJDlip8s5LiN6KGo56S65Lia5Yqh5aSE55CG5oiQ5YqfXHJcbiAgICAgICAgX3Muc3VjY2VzcyhyZXN1bHQsIHN0YXR1cywgeGhyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBfcy5lcnJvcih4aHIsIHN0YXR1cywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8g6K+35rGC57uT5p2fXHJcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGUgPT4ge1xyXG4gICAgICBfcy5jb21wbGV0ZSh4aHIsIHhoci5zdGF0dXMpO1xyXG4gICAgfSk7XHJcbiAgICAvLyDor7fmsYLlh7rplJlcclxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGUgPT4ge1xyXG4gICAgICBfcy5lcnJvcih4aHIsIHhoci5zdGF0dXMsIGUpO1xyXG4gICAgfSk7XHJcbiAgICAvLyDor7fmsYLotoXml7ZcclxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCd0aW1lb3V0JywgZSA9PiB7XHJcbiAgICAgIF9zLmVycm9yKHhociwgNDA4LCBlKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IHVzZVVybFBhcmFtID0gZmFsc2U7XHJcbiAgICBsZXQgc1R5cGUgPSBfcy50eXBlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAvLyDlpoLmnpzmmK9cIueugOWNlVwi6K+35rGCLOWImeaKimRhdGHlj4LmlbDnu4Too4XlnKh1cmzkuIpcclxuICAgIGlmIChzVHlwZSA9PT0gJ0dFVCcgfHwgc1R5cGUgPT09ICdERUxFVEUnKSB7XHJcbiAgICAgIHVzZVVybFBhcmFtID0gdHJ1ZTtcclxuICAgICAgX3MudXJsICs9IGh0dHAuZ2V0VXJsUGFyYW0oX3MudXJsLCBfcy5kYXRhKTtcclxuICAgIH1cclxuICAgIC8vIOWIneWni+WMluivt+axglxyXG4gICAgeGhyLm9wZW4oX3MudHlwZSwgX3MudXJsLCBfcy5hc3luYyk7XHJcbiAgICAvLyDorr7nva7mnJ/mnJvnmoTov5Tlm57mlbDmja7nsbvlnotcclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSBfcy5kYXRhVHlwZTtcclxuICAgIC8vIOiuvue9ruivt+axguWktFxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoX3MuaGVhZGVycykpIHtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBfcy5oZWFkZXJzW2tleV0pO1xyXG4gICAgfVxyXG4gICAgLy8g6K6+572u6LaF5pe25pe26Ze0XHJcbiAgICBpZiAoX3MuYXN5bmMgJiYgX3MudGltZW91dCkge1xyXG4gICAgICB4aHIudGltZW91dCA9IF9zLnRpbWVvdXQ7XHJcbiAgICB9XHJcbiAgICAvLyDlj5HpgIHor7fmsYIu5aaC5p6c5piv566A5Y2V6K+35rGCLOivt+axguWPguaVsOW6lOS4um51bGwu5ZCm5YiZLOivt+axguWPguaVsOexu+Wei+mcgOimgeWSjOivt+axguWktENvbnRlbnQtVHlwZeWvueW6lFxyXG4gICAgeGhyLnNlbmQodXNlVXJsUGFyYW0gPyBudWxsIDogaHR0cC5nZXRRdWVyeURhdGEoX3MuZGF0YSkpO1xyXG4gIH0sXHJcblxyXG4gIC8qKiDmiorlj4LmlbBkYXRh6L2s5Li6dXJs5p+l6K+i5Y+C5pWwICovXHJcbiAgZ2V0VXJsUGFyYW06ICh1cmwsIGRhdGEpID0+IHtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zU3RyID0gZGF0YSBpbnN0YW5jZW9mIE9iamVjdCA/IGh0dHAuZ2V0UXVlcnlTdHJpbmcoZGF0YSkgOiBkYXRhO1xyXG4gICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpICE9PSAtMSkgPyBwYXJhbXNTdHIgOiAnPycgKyBwYXJhbXNTdHI7XHJcbiAgfSxcclxuXHJcbiAgLyoqIOiOt+WPlmFqYXjor7fmsYLlj4LmlbAgICovXHJcbiAgZ2V0UXVlcnlEYXRhOiAoZGF0YSkgPT4ge1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaHR0cC5nZXRRdWVyeVN0cmluZyhkYXRhKTtcclxuICB9LFxyXG5cclxuICAvKiog5oqK5a+56LGh6L2s5Li65p+l6K+i5a2X56ym5LiyICAqL1xyXG4gIGdldFF1ZXJ5U3RyaW5nOiAoZGF0YSkgPT4ge1xyXG4gICAgbGV0IHBhcmFtc0FyciA9IFtdO1xyXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGxldCB2YWwgPSBkYXRhW2tleV07XHJcbiAgICAgICAgLy8gdG9kbyDlj4LmlbBEYXRl57G75Z6L6ZyA6KaB5qC55o2u5ZCO5Y+wYXBp6YWM5oOF5aSE55CGXHJcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgIC8vIHZhbCA9IGRhdGVGb3JtYXQodmFsLCAneXl5eS1NTS1kZCBoaDptbTpzcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbXNBcnIucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1zQXJyLmpvaW4oJyYnKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGh0dHA7IiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiIsImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9OdW1iZXJgIHdoaWNoIGRvZXNuJ3QgZW5zdXJlIGNvcnJlY3RcbiAqIGNvbnZlcnNpb25zIG9mIGJpbmFyeSwgaGV4YWRlY2ltYWwsIG9yIG9jdGFsIHN0cmluZyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIHJldHVybiArdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb051bWJlcjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIiwiaW1wb3J0IGJhc2VUb051bWJlciBmcm9tICcuL19iYXNlVG9OdW1iZXIuanMnO1xuaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSB1c2VkIGZvciBgdW5kZWZpbmVkYCBhcmd1bWVudHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLCBkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgb3RoZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAob3RoZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgb3RoZXIgPSBiYXNlVG9TdHJpbmcob3RoZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBiYXNlVG9OdW1iZXIodmFsdWUpO1xuICAgICAgICBvdGhlciA9IGJhc2VUb051bWJlcihvdGhlcik7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVNYXRoT3BlcmF0aW9uO1xuIiwiaW1wb3J0IGNyZWF0ZU1hdGhPcGVyYXRpb24gZnJvbSAnLi9fY3JlYXRlTWF0aE9wZXJhdGlvbi5qcyc7XG5cbi8qKlxuICogQWRkcyB0d28gbnVtYmVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtudW1iZXJ9IGF1Z2VuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGFkZGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmFkZCg2LCA0KTtcbiAqIC8vID0+IDEwXG4gKi9cbnZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gIHJldHVybiBhdWdlbmQgKyBhZGRlbmQ7XG59LCAwKTtcblxuZXhwb3J0IGRlZmF1bHQgYWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvTnVtYmVyO1xuIiwiaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9GaW5pdGU7XG4iLCJpbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvSW50ZWdlcjtcbiIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5iZWZvcmVgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgc2F2ZXMgPSBbJ3Byb2ZpbGUnLCAnc2V0dGluZ3MnXTtcbiAqXG4gKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAqICAgY29uc29sZS5sb2coJ2RvbmUgc2F2aW5nIScpO1xuICogfSk7XG4gKlxuICogXy5mb3JFYWNoKHNhdmVzLCBmdW5jdGlvbih0eXBlKSB7XG4gKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnZG9uZSBzYXZpbmchJyBhZnRlciB0aGUgdHdvIGFzeW5jIHNhdmVzIGhhdmUgY29tcGxldGVkLlxuICovXG5mdW5jdGlvbiBhZnRlcihuLCBmdW5jKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIG4gPSB0b0ludGVnZXIobik7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS1uIDwgMSkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFmdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcbiIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNNYXNrZWQgZnJvbSAnLi9faXNNYXNrZWQuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvU291cmNlIGZyb20gJy4vX3RvU291cmNlLmpzJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XG4iLCJpbXBvcnQgV2Vha01hcCBmcm9tICcuL19XZWFrTWFwLmpzJztcblxuLyoqIFVzZWQgdG8gc3RvcmUgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgbWV0YU1hcCA9IFdlYWtNYXAgJiYgbmV3IFdlYWtNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGFNYXA7XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgbWV0YU1hcCBmcm9tICcuL19tZXRhTWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gIHJldHVybiBmdW5jO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldERhdGE7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDcmVhdGU7XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ3RvcjtcbiIsImltcG9ydCBjcmVhdGVDdG9yIGZyb20gJy4vX2NyZWF0ZUN0b3IuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQmluZDtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBwbHk7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VBcmdzO1xuIiwiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgY29tcG9zZUFyZ3NgIGV4Y2VwdCB0aGF0IHRoZSBhcmd1bWVudHMgY29tcG9zaXRpb25cbiAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzSW5kZXggPSAtMSxcbiAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgIHJpZ2h0SW5kZXggPSAtMSxcbiAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkocmFuZ2VMZW5ndGggKyByaWdodExlbmd0aCksXG4gICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7XG5cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgcmFuZ2VMZW5ndGgpIHtcbiAgICByZXN1bHRbYXJnc0luZGV4XSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgfVxuICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICB3aGlsZSAoKytyaWdodEluZGV4IDwgcmlnaHRMZW5ndGgpIHtcbiAgICByZXN1bHRbb2Zmc2V0ICsgcmlnaHRJbmRleF0gPSBwYXJ0aWFsc1tyaWdodEluZGV4XTtcbiAgfVxuICB3aGlsZSAoKytob2xkZXJzSW5kZXggPCBob2xkZXJzTGVuZ3RoKSB7XG4gICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQgKyBob2xkZXJzW2hvbGRlcnNJbmRleF1dID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvdW50SG9sZGVycztcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUxvZGFzaDtcbiIsImltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGJhc2VMb2Rhc2ggZnJvbSAnLi9fYmFzZUxvZGFzaC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fZGlyX18gPSAxO1xuICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbn1cblxuLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxuZXhwb3J0IGRlZmF1bHQgTGF6eVdyYXBwZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5leHBvcnQgZGVmYXVsdCBub29wO1xuIiwiaW1wb3J0IG1ldGFNYXAgZnJvbSAnLi9fbWV0YU1hcC5qcyc7XG5pbXBvcnQgbm9vcCBmcm9tICcuL25vb3AuanMnO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldERhdGE7XG4iLCIvKiogVXNlZCB0byBsb29rdXAgdW5taW5pZmllZCBmdW5jdGlvbiBuYW1lcy4gKi9cbnZhciByZWFsTmFtZXMgPSB7fTtcblxuZXhwb3J0IGRlZmF1bHQgcmVhbE5hbWVzO1xuIiwiaW1wb3J0IHJlYWxOYW1lcyBmcm9tICcuL19yZWFsTmFtZXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0RnVuY05hbWU7XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBiYXNlTG9kYXNoIGZyb20gJy4vX2Jhc2VMb2Rhc2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5leHBvcnQgZGVmYXVsdCBMb2Rhc2hXcmFwcGVyO1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlBcnJheTtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5pbXBvcnQgTG9kYXNoV3JhcHBlciBmcm9tICcuL19Mb2Rhc2hXcmFwcGVyLmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyQ2xvbmU7XG4iLCJpbXBvcnQgTGF6eVdyYXBwZXIgZnJvbSAnLi9fTGF6eVdyYXBwZXIuanMnO1xuaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgYmFzZUxvZGFzaCBmcm9tICcuL19iYXNlTG9kYXNoLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcbmltcG9ydCB3cmFwcGVyQ2xvbmUgZnJvbSAnLi9fd3JhcHBlckNsb25lLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuZXhwb3J0IGRlZmF1bHQgbG9kYXNoO1xuIiwiaW1wb3J0IExhenlXcmFwcGVyIGZyb20gJy4vX0xhenlXcmFwcGVyLmpzJztcbmltcG9ydCBnZXREYXRhIGZyb20gJy4vX2dldERhdGEuanMnO1xuaW1wb3J0IGdldEZ1bmNOYW1lIGZyb20gJy4vX2dldEZ1bmNOYW1lLmpzJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xhemlhYmxlO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcbiIsImltcG9ydCBiYXNlU2V0RGF0YSBmcm9tICcuL19iYXNlU2V0RGF0YS5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0RGF0YTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRXcmFwRGV0YWlscztcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcENvbW1lbnQgPSAvXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vO1xuXG4vKipcbiAqIEluc2VydHMgd3JhcHBlciBgZGV0YWlsc2AgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGBzb3VyY2VgIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtb2RpZnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc291cmNlLlxuICovXG5mdW5jdGlvbiBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIGRldGFpbHMpIHtcbiAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG4gIGRldGFpbHNbbGFzdEluZGV4XSA9IChsZW5ndGggPiAxID8gJyYgJyA6ICcnKSArIGRldGFpbHNbbGFzdEluZGV4XTtcbiAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7XG4gIHJldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCAne1xcbi8qIFt3cmFwcGVkIHdpdGggJyArIGRldGFpbHMgKyAnXSAqL1xcbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbnNlcnRXcmFwRGV0YWlscztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUVhY2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbmRJbmRleDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaWN0SW5kZXhPZjtcbiIsImltcG9ydCBiYXNlRmluZEluZGV4IGZyb20gJy4vX2Jhc2VGaW5kSW5kZXguanMnO1xuaW1wb3J0IGJhc2VJc05hTiBmcm9tICcuL19iYXNlSXNOYU4uanMnO1xuaW1wb3J0IHN0cmljdEluZGV4T2YgZnJvbSAnLi9fc3RyaWN0SW5kZXhPZi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJbmRleE9mO1xuIiwiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlJbmNsdWRlcztcbiIsImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzIGZyb20gJy4vX2FycmF5SW5jbHVkZXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NixcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqIFVzZWQgdG8gYXNzb2NpYXRlIHdyYXAgbWV0aG9kcyB3aXRoIHRoZWlyIGJpdCBmbGFncy4gKi9cbnZhciB3cmFwRmxhZ3MgPSBbXG4gIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gIFsnYmluZCcsIFdSQVBfQklORF9GTEFHXSxcbiAgWydiaW5kS2V5JywgV1JBUF9CSU5EX0tFWV9GTEFHXSxcbiAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gIFsnY3VycnlSaWdodCcsIFdSQVBfQ1VSUllfUklHSFRfRkxBR10sXG4gIFsnZmxpcCcsIFdSQVBfRkxJUF9GTEFHXSxcbiAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICBbJ3BhcnRpYWxSaWdodCcsIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHXSxcbiAgWydyZWFyZycsIFdSQVBfUkVBUkdfRkxBR11cbl07XG5cbi8qKlxuICogVXBkYXRlcyB3cmFwcGVyIGBkZXRhaWxzYCBiYXNlZCBvbiBgYml0bWFza2AgZmxhZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkZXRhaWxzYC5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscywgYml0bWFzaykge1xuICBhcnJheUVhY2god3JhcEZsYWdzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgdmFyIHZhbHVlID0gJ18uJyArIHBhaXJbMF07XG4gICAgaWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUpKSB7XG4gICAgICBkZXRhaWxzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkZXRhaWxzLnNvcnQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXBkYXRlV3JhcERldGFpbHM7XG4iLCJpbXBvcnQgZ2V0V3JhcERldGFpbHMgZnJvbSAnLi9fZ2V0V3JhcERldGFpbHMuanMnO1xuaW1wb3J0IGluc2VydFdyYXBEZXRhaWxzIGZyb20gJy4vX2luc2VydFdyYXBEZXRhaWxzLmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgdXBkYXRlV3JhcERldGFpbHMgZnJvbSAnLi9fdXBkYXRlV3JhcERldGFpbHMuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFdyYXBUb1N0cmluZztcbiIsImltcG9ydCBpc0xhemlhYmxlIGZyb20gJy4vX2lzTGF6aWFibGUuanMnO1xuaW1wb3J0IHNldERhdGEgZnJvbSAnLi9fc2V0RGF0YS5qcyc7XG5pbXBvcnQgc2V0V3JhcFRvU3RyaW5nIGZyb20gJy4vX3NldFdyYXBUb1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLFxuICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICBiaXRtYXNrICY9IH4oaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHIDogV1JBUF9QQVJUSUFMX0ZMQUcpO1xuXG4gIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgfVxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICBuZXdIb2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgfVxuICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSZWN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICB2YXIgb2JqZWN0ID0gZnVuYztcbiAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0SG9sZGVyO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwiaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZW9yZGVyO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVwbGFjZUhvbGRlcnM7XG4iLCJpbXBvcnQgY29tcG9zZUFyZ3MgZnJvbSAnLi9fY29tcG9zZUFyZ3MuanMnO1xuaW1wb3J0IGNvbXBvc2VBcmdzUmlnaHQgZnJvbSAnLi9fY29tcG9zZUFyZ3NSaWdodC5qcyc7XG5pbXBvcnQgY291bnRIb2xkZXJzIGZyb20gJy4vX2NvdW50SG9sZGVycy5qcyc7XG5pbXBvcnQgY3JlYXRlQ3RvciBmcm9tICcuL19jcmVhdGVDdG9yLmpzJztcbmltcG9ydCBjcmVhdGVSZWN1cnJ5IGZyb20gJy4vX2NyZWF0ZVJlY3VycnkuanMnO1xuaW1wb3J0IGdldEhvbGRlciBmcm9tICcuL19nZXRIb2xkZXIuanMnO1xuaW1wb3J0IHJlb3JkZXIgZnJvbSAnLi9fcmVvcmRlci5qcyc7XG5pbXBvcnQgcmVwbGFjZUhvbGRlcnMgZnJvbSAnLi9fcmVwbGFjZUhvbGRlcnMuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIeWJyaWQ7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGNyZWF0ZUN0b3IgZnJvbSAnLi9fY3JlYXRlQ3Rvci5qcyc7XG5pbXBvcnQgY3JlYXRlSHlicmlkIGZyb20gJy4vX2NyZWF0ZUh5YnJpZC5qcyc7XG5pbXBvcnQgY3JlYXRlUmVjdXJyeSBmcm9tICcuL19jcmVhdGVSZWN1cnJ5LmpzJztcbmltcG9ydCBnZXRIb2xkZXIgZnJvbSAnLi9fZ2V0SG9sZGVyLmpzJztcbmltcG9ydCByZXBsYWNlSG9sZGVycyBmcm9tICcuL19yZXBsYWNlSG9sZGVycy5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gZW5hYmxlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgdmFyIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICB2YXIgaG9sZGVycyA9IChsZW5ndGggPCAzICYmIGFyZ3NbMF0gIT09IHBsYWNlaG9sZGVyICYmIGFyZ3NbbGVuZ3RoIC0gMV0gIT09IHBsYWNlaG9sZGVyKVxuICAgICAgPyBbXVxuICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICBsZW5ndGggLT0gaG9sZGVycy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB1bmRlZmluZWQsXG4gICAgICAgIGFyZ3MsIGhvbGRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSAtIGxlbmd0aCk7XG4gICAgfVxuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGFwcGx5KGZuLCB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ3Vycnk7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGNyZWF0ZUN0b3IgZnJvbSAnLi9fY3JlYXRlQ3Rvci5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQYXJ0aWFsO1xuIiwiaW1wb3J0IGNvbXBvc2VBcmdzIGZyb20gJy4vX2NvbXBvc2VBcmdzLmpzJztcbmltcG9ydCBjb21wb3NlQXJnc1JpZ2h0IGZyb20gJy4vX2NvbXBvc2VBcmdzUmlnaHQuanMnO1xuaW1wb3J0IHJlcGxhY2VIb2xkZXJzIGZyb20gJy4vX3JlcGxhY2VIb2xkZXJzLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICpcbiAqIE1lcmdpbmcgbWV0YWRhdGEgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdyYXBwZXJzIHVzZWQgdG8gaW52b2tlIGEgZnVuY3Rpb24uXG4gKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICogbWF5IGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBleGVjdXRpb24gb3JkZXIuIE1ldGhvZHMgbGlrZSBgXy5hcnlgIGFuZFxuICogYF8ucmVhcmdgIG1vZGlmeSBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmVcbiAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICogYW4gZXhjZXB0aW9uIGZvciBhIHNhZmUgY29tYmluZWQgY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWBcbiAqIGFuZCBvciBgXy5yZWFyZ2AgYXBwbGllZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGVzdGluYXRpb24gbWV0YWRhdGEuXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGF0YWAuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLFxuICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSxcbiAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyB8IFdSQVBfQVJZX0ZMQUcpO1xuXG4gIHZhciBpc0NvbWJvID1cbiAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSkgfHxcbiAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9SRUFSR19GTEFHKSAmJiAoZGF0YVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSkgfHxcbiAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpO1xuXG4gIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICBpZiAoIShpc0NvbW1vbiB8fCBpc0NvbWJvKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYHRoaXNBcmdgIGlmIGF2YWlsYWJsZS5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRykge1xuICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07XG4gICAgLy8gU2V0IHdoZW4gY3VycnlpbmcgYSBib3VuZCBmdW5jdGlvbi5cbiAgICBuZXdCaXRtYXNrIHw9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyA/IDAgOiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUc7XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgdmFyIHZhbHVlID0gc291cmNlWzNdO1xuICBpZiAodmFsdWUpIHtcbiAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IHZhbHVlO1xuICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTtcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxuICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcGFydGlhbHMgPSBkYXRhWzVdO1xuICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7XG4gICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogc291cmNlWzZdO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLlxuICB2YWx1ZSA9IHNvdXJjZVs3XTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgZGF0YVs3XSA9IHZhbHVlO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyeWAgaWYgaXQncyBzbWFsbGVyLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHtcbiAgICBkYXRhWzhdID0gZGF0YVs4XSA9PSBudWxsID8gc291cmNlWzhdIDogbmF0aXZlTWluKGRhdGFbOF0sIHNvdXJjZVs4XSk7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gIGlmIChkYXRhWzldID09IG51bGwpIHtcbiAgICBkYXRhWzldID0gc291cmNlWzldO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGZ1bmNgIGFuZCBtZXJnZSBiaXRtYXNrcy5cbiAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlRGF0YTtcbiIsImltcG9ydCBiYXNlU2V0RGF0YSBmcm9tICcuL19iYXNlU2V0RGF0YS5qcyc7XG5pbXBvcnQgY3JlYXRlQmluZCBmcm9tICcuL19jcmVhdGVCaW5kLmpzJztcbmltcG9ydCBjcmVhdGVDdXJyeSBmcm9tICcuL19jcmVhdGVDdXJyeS5qcyc7XG5pbXBvcnQgY3JlYXRlSHlicmlkIGZyb20gJy4vX2NyZWF0ZUh5YnJpZC5qcyc7XG5pbXBvcnQgY3JlYXRlUGFydGlhbCBmcm9tICcuL19jcmVhdGVQYXJ0aWFsLmpzJztcbmltcG9ydCBnZXREYXRhIGZyb20gJy4vX2dldERhdGEuanMnO1xuaW1wb3J0IG1lcmdlRGF0YSBmcm9tICcuL19tZXJnZURhdGEuanMnO1xuaW1wb3J0IHNldERhdGEgZnJvbSAnLi9fc2V0RGF0YS5qcyc7XG5pbXBvcnQgc2V0V3JhcFRvU3RyaW5nIGZyb20gJy4vX3NldFdyYXBUb1N0cmluZy5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogICAgMSAtIGBfLmJpbmRgXG4gKiAgICAyIC0gYF8uYmluZEtleWBcbiAqICAgIDQgLSBgXy5jdXJyeWAgb3IgYF8uY3VycnlSaWdodGAgb2YgYSBib3VuZCBmdW5jdGlvblxuICogICAgOCAtIGBfLmN1cnJ5YFxuICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gKiAgIDMyIC0gYF8ucGFydGlhbGBcbiAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gKiAgMTI4IC0gYF8ucmVhcmdgXG4gKiAgMjU2IC0gYF8uYXJ5YFxuICogIDUxMiAtIGBfLmZsaXBgXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gIGFyaXR5ID0gYXJpdHkgPT09IHVuZGVmaW5lZCA/IGFyaXR5IDogdG9JbnRlZ2VyKGFyaXR5KTtcbiAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsXG4gICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsXG4gICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gIH1cbiAgZnVuYyA9IG5ld0RhdGFbMF07XG4gIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgcGFydGlhbHMgPSBuZXdEYXRhWzNdO1xuICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7XG4gIH1cbiAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKTtcbiAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBXUkFQX1BBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHKSkgJiYgIWhvbGRlcnMubGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIH1cbiAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCwgbmV3RGF0YSksIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVXcmFwO1xuIiwiaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQVJZX0ZMQUcgPSAxMjg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdXAgdG8gYG5gIGFyZ3VtZW50cyxcbiAqIGlnbm9yaW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgY2FwLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTtcbiAqIC8vID0+IFs2LCA4LCAxMF1cbiAqL1xuZnVuY3Rpb24gYXJ5KGZ1bmMsIG4sIGd1YXJkKSB7XG4gIG4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IG47XG4gIG4gPSAoZnVuYyAmJiBuID09IG51bGwpID8gZnVuYy5sZW5ndGggOiBuO1xuICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0FSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnk7XG4iLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG4iLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnblZhbHVlO1xuIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJlc3Q7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzQXJndW1lbnRzO1xuIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIiwiaW1wb3J0IGJhc2VJc1R5cGVkQXJyYXkgZnJvbSAnLi9fYmFzZUlzVHlwZWRBcnJheS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNUeXBlZEFycmF5O1xuIiwiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcbiIsImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIG93biBhbmRcbiAqIGluaGVyaXRlZCBzb3VyY2UgcHJvcGVydGllcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ25Jbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMywgJ2QnOiA0IH1cbiAqL1xudmFyIGFzc2lnbkluID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluO1xuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGV4dGVuZFdpdGhcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAqXG4gKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25JbldpdGg7XG4iLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduV2l0aCwgY3VzdG9taXplcik7XG4gKlxuICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGFzc2lnbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25XaXRoO1xuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaERlbGV0ZTtcbiIsImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoR2V0O1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iLCJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoU2V0O1xuIiwiaW1wb3J0IGhhc2hDbGVhciBmcm9tICcuL19oYXNoQ2xlYXIuanMnO1xuaW1wb3J0IGhhc2hEZWxldGUgZnJvbSAnLi9faGFzaERlbGV0ZS5qcyc7XG5pbXBvcnQgaGFzaEdldCBmcm9tICcuL19oYXNoR2V0LmpzJztcbmltcG9ydCBoYXNoSGFzIGZyb20gJy4vX2hhc2hIYXMuanMnO1xuaW1wb3J0IGhhc2hTZXQgZnJvbSAnLi9faGFzaFNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzb2NJbmRleE9mO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlR2V0O1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlSGFzO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsImltcG9ydCBsaXN0Q2FjaGVDbGVhciBmcm9tICcuL19saXN0Q2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbGlzdENhY2hlRGVsZXRlIGZyb20gJy4vX2xpc3RDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbGlzdENhY2hlR2V0IGZyb20gJy4vX2xpc3RDYWNoZUdldC5qcyc7XG5pbXBvcnQgbGlzdENhY2hlSGFzIGZyb20gJy4vX2xpc3RDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbGlzdENhY2hlU2V0IGZyb20gJy4vX2xpc3RDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdENhY2hlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBNYXA7XG4iLCJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleWFibGU7XG4iLCJpbXBvcnQgaXNLZXlhYmxlIGZyb20gJy4vX2lzS2V5YWJsZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWFwRGF0YTtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLCJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUdldDtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUhhcztcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwiaW1wb3J0IG1hcENhY2hlQ2xlYXIgZnJvbSAnLi9fbWFwQ2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVEZWxldGUgZnJvbSAnLi9fbWFwQ2FjaGVEZWxldGUuanMnO1xuaW1wb3J0IG1hcENhY2hlR2V0IGZyb20gJy4vX21hcENhY2hlR2V0LmpzJztcbmltcG9ydCBtYXBDYWNoZUhhcyBmcm9tICcuL19tYXBDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVTZXQgZnJvbSAnLi9fbWFwQ2FjaGVTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTWFwQ2FjaGU7XG4iLCJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVDYXBwZWQ7XG4iLCJpbXBvcnQgbWVtb2l6ZUNhcHBlZCBmcm9tICcuL19tZW1vaXplQ2FwcGVkLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb1BhdGg7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBzdHJpbmdUb1BhdGggZnJvbSAnLi9fc3RyaW5nVG9QYXRoLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFBhdGg7XG4iLCJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiIsImltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0O1xuIiwiaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgZWxlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgIHNraXAgPSBvYmplY3QgPT0gbnVsbDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXQ7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5UHVzaDtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZsYXR0ZW5hYmxlO1xuIiwiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGlzRmxhdHRlbmFibGUgZnJvbSAnLi9faXNGbGF0dGVuYWJsZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRmxhdHRlbjtcbiIsImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0dGVuO1xuIiwiaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9mbGF0dGVuLmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXRSZXN0O1xuIiwiaW1wb3J0IGJhc2VBdCBmcm9tICcuL19iYXNlQXQuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGBwYXRoc2Agb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tlZCB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gKlxuICogXy5hdChvYmplY3QsIFsnYVswXS5iLmMnLCAnYVsxXSddKTtcbiAqIC8vID0+IFszLCA0XVxuICovXG52YXIgYXQgPSBmbGF0UmVzdChiYXNlQXQpO1xuXG5leHBvcnQgZGVmYXVsdCBhdDtcbiIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBkb21FeGNUYWcgPSAnW29iamVjdCBET01FeGNlcHRpb25dJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAqIGBTeW50YXhFcnJvcmAsIGBUeXBlRXJyb3JgLCBvciBgVVJJRXJyb3JgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBlcnJvciBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Vycm9yKG5ldyBFcnJvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Vycm9yKEVycm9yKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBlcnJvclRhZyB8fCB0YWcgPT0gZG9tRXhjVGFnIHx8XG4gICAgKHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZS5uYW1lID09ICdzdHJpbmcnICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRXJyb3I7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAqIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGlsZSBpdCdzIGNhbGxlZCBsZXNzIHRoYW4gYG5gIHRpbWVzLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggYGZ1bmNgIGlzIG5vIGxvbmdlciBpbnZva2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5iZWZvcmUoNSwgYWRkQ29udGFjdFRvTGlzdCkpO1xuICogLy8gPT4gQWxsb3dzIGFkZGluZyB1cCB0byA0IGNvbnRhY3RzIHRvIHRoZSBsaXN0LlxuICovXG5mdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBuID0gdG9JbnRlZ2VyKG4pO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKC0tbiA+IDApIHtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKG4gPD0gMSkge1xuICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmVmb3JlO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBjcmVhdGVXcmFwIGZyb20gJy4vX2NyZWF0ZVdyYXAuanMnO1xuaW1wb3J0IGdldEhvbGRlciBmcm9tICcuL19nZXRIb2xkZXIuanMnO1xuaW1wb3J0IHJlcGxhY2VIb2xkZXJzIGZyb20gJy4vX3JlcGxhY2VIb2xkZXJzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGJpbmQ7XG4iLCJpbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2JpbmQuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQmluZHMgbWV0aG9kcyBvZiBhbiBvYmplY3QgdG8gdGhlIG9iamVjdCBpdHNlbGYsIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZ1xuICogbWV0aG9kLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBiaW5kIGFuZCBhc3NpZ24gdGhlIGJvdW5kIG1ldGhvZHMgdG8uXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHZpZXcgPSB7XG4gKiAgICdsYWJlbCc6ICdkb2NzJyxcbiAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ2NsaWNrZWQgJyArIHRoaXMubGFiZWwpO1xuICogICB9XG4gKiB9O1xuICpcbiAqIF8uYmluZEFsbCh2aWV3LCBbJ2NsaWNrJ10pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICogLy8gPT4gTG9ncyAnY2xpY2tlZCBkb2NzJyB3aGVuIGNsaWNrZWQuXG4gKi9cbnZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGtleSA9IHRvS2V5KGtleSk7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYmluZEFsbDtcbiIsImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgY3JlYXRlV3JhcCBmcm9tICcuL19jcmVhdGVXcmFwLmpzJztcbmltcG9ydCBnZXRIb2xkZXIgZnJvbSAnLi9fZ2V0SG9sZGVyLmpzJztcbmltcG9ydCByZXBsYWNlSG9sZGVycyBmcm9tICcuL19yZXBsYWNlSG9sZGVycy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgd2l0aCBgcGFydGlhbHNgXG4gKiBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYF8uYmluZGAgYnkgYWxsb3dpbmcgYm91bmQgZnVuY3Rpb25zIHRvIHJlZmVyZW5jZVxuICogbWV0aG9kcyB0aGF0IG1heSBiZSByZWRlZmluZWQgb3IgZG9uJ3QgeWV0IGV4aXN0LiBTZWVcbiAqIFtQZXRlciBNaWNoYXV4J3MgYXJ0aWNsZV0oaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvbGF6eS1mdW5jdGlvbi1kZWZpbml0aW9uLXBhdHRlcm4pXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFRoZSBgXy5iaW5kS2V5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZva2UgdGhlIG1ldGhvZCBvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kLlxuICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHtcbiAqICAgJ3VzZXInOiAnZnJlZCcsXG4gKiAgICdncmVldCc6IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICogICAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICogICB9XG4gKiB9O1xuICpcbiAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsICdoaScpO1xuICogYm91bmQoJyEnKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqXG4gKiBvYmplY3QuZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJ3lhICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAqIH07XG4gKlxuICogYm91bmQoJyEnKTtcbiAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgXywgJyEnKTtcbiAqIGJvdW5kKCdoaScpO1xuICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gKi9cbnZhciBiaW5kS2V5ID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7XG4gIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZEtleSkpO1xuICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVdyYXAoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kS2V5LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGJpbmRLZXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTbGljZTtcbiIsImltcG9ydCBiYXNlU2xpY2UgZnJvbSAnLi9fYmFzZVNsaWNlLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFNsaWNlO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1VuaWNvZGU7XG4iLCIvKipcbiAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pY29kZVRvQXJyYXk7XG4iLCJpbXBvcnQgYXNjaWlUb0FycmF5IGZyb20gJy4vX2FzY2lpVG9BcnJheS5qcyc7XG5pbXBvcnQgaGFzVW5pY29kZSBmcm9tICcuL19oYXNVbmljb2RlLmpzJztcbmltcG9ydCB1bmljb2RlVG9BcnJheSBmcm9tICcuL191bmljb2RlVG9BcnJheS5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb0FycmF5O1xuIiwiaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgc3RyaW5nVG9BcnJheSBmcm9tICcuL19zdHJpbmdUb0FycmF5LmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDYXNlRmlyc3Q7XG4iLCJpbXBvcnQgY3JlYXRlQ2FzZUZpcnN0IGZyb20gJy4vX2NyZWF0ZUNhc2VGaXJzdC5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5leHBvcnQgZGVmYXVsdCB1cHBlckZpcnN0O1xuIiwiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuaW1wb3J0IHVwcGVyRmlyc3QgZnJvbSAnLi91cHBlckZpcnN0LmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UgYW5kIHRoZSByZW1haW5pbmdcbiAqIHRvIGxvd2VyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhcGl0YWxpemVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5jYXBpdGFsaXplKCdGUkVEJyk7XG4gKiAvLyA9PiAnRnJlZCdcbiAqL1xuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlSZWR1Y2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eU9mO1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xudmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICdcXHhjNyc6ICdDJywgICdcXHhlNyc6ICdjJyxcbiAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAnXFx4ZTgnOiAnZScsICAnXFx4ZTknOiAnZScsICdcXHhlYSc6ICdlJywgJ1xceGViJzogJ2UnLFxuICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAnXFx4ZDEnOiAnTicsICAnXFx4ZjEnOiAnbicsXG4gICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgJ1xceGQ5JzogJ1UnLCAgJ1xceGRhJzogJ1UnLCAnXFx4ZGInOiAnVScsICdcXHhkYyc6ICdVJyxcbiAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICdcXHhjNic6ICdBZScsICdcXHhlNic6ICdhZScsXG4gICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICdcXHhkZic6ICdzcycsXG4gIC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG4gICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgJ1xcdTAxMDYnOiAnQycsICAnXFx1MDEwOCc6ICdDJywgJ1xcdTAxMGEnOiAnQycsICdcXHUwMTBjJzogJ0MnLFxuICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgJ1xcdTAxMTInOiAnRScsICAnXFx1MDExNCc6ICdFJywgJ1xcdTAxMTYnOiAnRScsICdcXHUwMTE4JzogJ0UnLCAnXFx1MDExYSc6ICdFJyxcbiAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAnXFx1MDExZCc6ICdnJywgICdcXHUwMTFmJzogJ2cnLCAnXFx1MDEyMSc6ICdnJywgJ1xcdTAxMjMnOiAnZycsXG4gICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgJ1xcdTAxMjknOiAnaScsICAnXFx1MDEyYic6ICdpJywgJ1xcdTAxMmQnOiAnaScsICdcXHUwMTJmJzogJ2knLCAnXFx1MDEzMSc6ICdpJyxcbiAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICdcXHUwMTM5JzogJ0wnLCAgJ1xcdTAxM2InOiAnTCcsICdcXHUwMTNkJzogJ0wnLCAnXFx1MDEzZic6ICdMJywgJ1xcdTAxNDEnOiAnTCcsXG4gICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgJ1xcdTAxNDQnOiAnbicsICAnXFx1MDE0Nic6ICduJywgJ1xcdTAxNDgnOiAnbicsICdcXHUwMTRiJzogJ24nLFxuICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICdcXHUwMTU0JzogJ1InLCAgJ1xcdTAxNTYnOiAnUicsICdcXHUwMTU4JzogJ1InLFxuICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAnXFx1MDE1Yic6ICdzJywgICdcXHUwMTVkJzogJ3MnLCAnXFx1MDE1Zic6ICdzJywgJ1xcdTAxNjEnOiAncycsXG4gICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgJ1xcdTAxNjgnOiAnVScsICAnXFx1MDE2YSc6ICdVJywgJ1xcdTAxNmMnOiAnVScsICdcXHUwMTZlJzogJ1UnLCAnXFx1MDE3MCc6ICdVJywgJ1xcdTAxNzInOiAnVScsXG4gICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAnXFx1MDE3Nic6ICdZJywgICdcXHUwMTc3JzogJ3knLCAnXFx1MDE3OCc6ICdZJyxcbiAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAnXFx1MDEzMic6ICdJSicsICdcXHUwMTMzJzogJ2lqJyxcbiAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUFcbiAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgbGV0dGVyLlxuICovXG52YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVidXJyTGV0dGVyO1xuIiwiaW1wb3J0IGRlYnVyckxldHRlciBmcm9tICcuL19kZWJ1cnJMZXR0ZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBMYXRpbiBVbmljb2RlIGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbnZhciByZUxhdGluID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2c7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2U7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19mb3JfU3ltYm9scykuXG4gKi9cbnZhciByZUNvbWJvTWFyayA9IFJlZ0V4cChyc0NvbWJvLCAnZycpO1xuXG4vKipcbiAqIERlYnVycnMgYHN0cmluZ2AgYnkgY29udmVydGluZ1xuICogW0xhdGluLTEgU3VwcGxlbWVudF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMgYW5kIHJlbW92aW5nXG4gKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGRlYnVyci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICogLy8gPT4gJ2RlamEgdnUnXG4gKi9cbmZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIHN0cmluZyAmJiBzdHJpbmcucmVwbGFjZShyZUxhdGluLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVidXJyO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICovXG52YXIgcmVBc2NpaVdvcmQgPSAvW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2c7XG5cbi8qKlxuICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAqL1xuZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzY2lpV29yZHM7XG4iLCIvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG52YXIgcmVIYXNVbmljb2RlV29yZCA9IC9bYS16XVtBLVpdfFtBLVpdezJ9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBhIHdvcmQgY29tcG9zZWQgb2YgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzVW5pY29kZVdvcmQ7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNEaW5nYmF0UmFuZ2UgPSAnXFxcXHUyNzAwLVxcXFx1MjdiZicsXG4gICAgcnNMb3dlclJhbmdlID0gJ2EtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZicsXG4gICAgcnNNYXRoT3BSYW5nZSA9ICdcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3JyxcbiAgICByc05vbkNoYXJSYW5nZSA9ICdcXFxceDAwLVxcXFx4MmZcXFxceDNhLVxcXFx4NDBcXFxceDViLVxcXFx4NjBcXFxceDdiLVxcXFx4YmYnLFxuICAgIHJzUHVuY3R1YXRpb25SYW5nZSA9ICdcXFxcdTIwMDAtXFxcXHUyMDZmJyxcbiAgICByc1NwYWNlUmFuZ2UgPSAnIFxcXFx0XFxcXHgwYlxcXFxmXFxcXHhhMFxcXFx1ZmVmZlxcXFxuXFxcXHJcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdTE2ODBcXFxcdTE4MGVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMGFcXFxcdTIwMmZcXFxcdTIwNWZcXFxcdTMwMDAnLFxuICAgIHJzVXBwZXJSYW5nZSA9ICdBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGUnLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJyxcbiAgICByc0JyZWFrUmFuZ2UgPSByc01hdGhPcFJhbmdlICsgcnNOb25DaGFyUmFuZ2UgKyByc1B1bmN0dWF0aW9uUmFuZ2UgKyByc1NwYWNlUmFuZ2U7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0Fwb3MgPSBcIlsnXFx1MjAxOV1cIixcbiAgICByc0JyZWFrID0gJ1snICsgcnNCcmVha1JhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNEaWdpdHMgPSAnXFxcXGQrJyxcbiAgICByc0RpbmdiYXQgPSAnWycgKyByc0RpbmdiYXRSYW5nZSArICddJyxcbiAgICByc0xvd2VyID0gJ1snICsgcnNMb3dlclJhbmdlICsgJ10nLFxuICAgIHJzTWlzYyA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgcnNCcmVha1JhbmdlICsgcnNEaWdpdHMgKyByc0RpbmdiYXRSYW5nZSArIHJzTG93ZXJSYW5nZSArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNVcHBlciA9ICdbJyArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbnZhciByc01pc2NMb3dlciA9ICcoPzonICsgcnNMb3dlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICByc01pc2NVcHBlciA9ICcoPzonICsgcnNVcHBlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICByc09wdENvbnRyTG93ZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpkfGxsfG18cmV8c3x0fHZlKSk/JyxcbiAgICByc09wdENvbnRyVXBwZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpEfExMfE18UkV8U3xUfFZFKSk/JyxcbiAgICByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgIHJzT3JkTG93ZXIgPSAnXFxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxcXGR0aCkoPz1cXFxcYnxbQS1aX10pJyxcbiAgICByc09yZFVwcGVyID0gJ1xcXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcXFxkVEgpKD89XFxcXGJ8W2Etel9dKScsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzRW1vamkgPSAnKD86JyArIFtyc0RpbmdiYXQsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzU2VxO1xuXG4vKiogVXNlZCB0byBtYXRjaCBjb21wbGV4IG9yIGNvbXBvdW5kIHdvcmRzLiAqL1xudmFyIHJlVW5pY29kZVdvcmQgPSBSZWdFeHAoW1xuICByc1VwcGVyICsgJz8nICsgcnNMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICByc01pc2NVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc01pc2NMb3dlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gIHJzVXBwZXIgKyAnPycgKyByc01pc2NMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlcixcbiAgcnNVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlcixcbiAgcnNPcmRVcHBlcixcbiAgcnNPcmRMb3dlcixcbiAgcnNEaWdpdHMsXG4gIHJzRW1vamlcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKipcbiAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICovXG5mdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlV29yZCkgfHwgW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVXb3JkcztcbiIsImltcG9ydCBhc2NpaVdvcmRzIGZyb20gJy4vX2FzY2lpV29yZHMuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGVXb3JkIGZyb20gJy4vX2hhc1VuaWNvZGVXb3JkLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcbmltcG9ydCB1bmljb2RlV29yZHMgZnJvbSAnLi9fdW5pY29kZVdvcmRzLmpzJztcblxuLyoqXG4gKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAqL1xuZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBwYXR0ZXJuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBwYXR0ZXJuO1xuXG4gIGlmIChwYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybikgfHwgW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdvcmRzO1xuIiwiaW1wb3J0IGFycmF5UmVkdWNlIGZyb20gJy4vX2FycmF5UmVkdWNlLmpzJztcbmltcG9ydCBkZWJ1cnIgZnJvbSAnLi9kZWJ1cnIuanMnO1xuaW1wb3J0IHdvcmRzIGZyb20gJy4vd29yZHMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCI7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL1xudmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uY2FtZWxDYXNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3VuZGVyO1xuIiwiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi9jYXBpdGFsaXplLmpzJztcbmltcG9ydCBjcmVhdGVDb21wb3VuZGVyIGZyb20gJy4vX2NyZWF0ZUNvbXBvdW5kZXIuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtjYW1lbCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYW1lbENhc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gKiAvLyA9PiAnZm9vQmFyJ1xuICpcbiAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXItLScpO1xuICogLy8gPT4gJ2Zvb0JhcidcbiAqXG4gKiBfLmNhbWVsQ2FzZSgnX19GT09fQkFSX18nKTtcbiAqIC8vID0+ICdmb29CYXInXG4gKi9cbnZhciBjYW1lbENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/IGNhcGl0YWxpemUod29yZCkgOiB3b3JkKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjYW1lbENhc2U7XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC40LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNhc3RBcnJheSgxKTtcbiAqIC8vID0+IFsxXVxuICpcbiAqIF8uY2FzdEFycmF5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gW3sgJ2EnOiAxIH1dXG4gKlxuICogXy5jYXN0QXJyYXkoJ2FiYycpO1xuICogLy8gPT4gWydhYmMnXVxuICpcbiAqIF8uY2FzdEFycmF5KG51bGwpO1xuICogLy8gPT4gW251bGxdXG4gKlxuICogXy5jYXN0QXJyYXkodW5kZWZpbmVkKTtcbiAqIC8vID0+IFt1bmRlZmluZWRdXG4gKlxuICogXy5jYXN0QXJyYXkoKTtcbiAqIC8vID0+IFtdXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICogY29uc29sZS5sb2coXy5jYXN0QXJyYXkoYXJyYXkpID09PSBhcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNhc3RBcnJheSgpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYXN0QXJyYXk7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNGaW5pdGUgPSByb290LmlzRmluaXRlLFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLnJvdW5kYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBNYXRoYCBtZXRob2QgdG8gdXNlIHdoZW4gcm91bmRpbmcuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUm91bmQobWV0aG9kTmFtZSkge1xuICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gIHJldHVybiBmdW5jdGlvbihudW1iZXIsIHByZWNpc2lvbikge1xuICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyAwIDogbmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLCAyOTIpO1xuICAgIGlmIChwcmVjaXNpb24gJiYgbmF0aXZlSXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgLy8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4gICAgICAvLyBTZWUgW01ETl0oaHR0cHM6Ly9tZG4uaW8vcm91bmQjRXhhbXBsZXMpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICB2YXIgcGFpciA9ICh0b1N0cmluZyhudW1iZXIpICsgJ2UnKS5zcGxpdCgnZScpLFxuICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7XG5cbiAgICAgIHBhaXIgPSAodG9TdHJpbmcodmFsdWUpICsgJ2UnKS5zcGxpdCgnZScpO1xuICAgICAgcmV0dXJuICsocGFpclswXSArICdlJyArICgrcGFpclsxXSAtIHByZWNpc2lvbikpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSb3VuZDtcbiIsImltcG9ydCBjcmVhdGVSb3VuZCBmcm9tICcuL19jcmVhdGVSb3VuZC5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMTAuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdXAgdG8uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIHVwIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5jZWlsKDQuMDA2KTtcbiAqIC8vID0+IDVcbiAqXG4gKiBfLmNlaWwoNi4wMDQsIDIpO1xuICogLy8gPT4gNi4wMVxuICpcbiAqIF8uY2VpbCg2MDQwLCAtMik7XG4gKiAvLyA9PiA2MTAwXG4gKi9cbnZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTtcblxuZXhwb3J0IGRlZmF1bHQgY2VpbDtcbiIsImltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAqIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLiBUaGUgcmVzdWx0IG9mIHN1Y2ggc2VxdWVuY2VzIG11c3QgYmUgdW53cmFwcGVkXG4gKiB3aXRoIGBfI3ZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gKiBdO1xuICpcbiAqIHZhciB5b3VuZ2VzdCA9IF9cbiAqICAgLmNoYWluKHVzZXJzKVxuICogICAuc29ydEJ5KCdhZ2UnKVxuICogICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAqICAgICByZXR1cm4gby51c2VyICsgJyBpcyAnICsgby5hZ2U7XG4gKiAgIH0pXG4gKiAgIC5oZWFkKClcbiAqICAgLnZhbHVlKCk7XG4gKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICovXG5mdW5jdGlvbiBjaGFpbih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgcmVzdWx0Ll9fY2hhaW5fXyA9IHRydWU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNoYWluO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNwbGl0IGludG8gZ3JvdXBzIHRoZSBsZW5ndGggb2YgYHNpemVgLlxuICogSWYgYGFycmF5YCBjYW4ndCBiZSBzcGxpdCBldmVubHksIHRoZSBmaW5hbCBjaHVuayB3aWxsIGJlIHRoZSByZW1haW5pbmdcbiAqIGVsZW1lbnRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gVGhlIGxlbmd0aCBvZiBlYWNoIGNodW5rXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY2h1bmtzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAqIC8vID0+IFtbJ2EnLCAnYiddLCBbJ2MnLCAnZCddXVxuICpcbiAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICogLy8gPT4gW1snYScsICdiJywgJ2MnXSwgWydkJ11dXG4gKi9cbmZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIHNpemUsIGd1YXJkKSA6IHNpemUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICBzaXplID0gMTtcbiAgfSBlbHNlIHtcbiAgICBzaXplID0gbmF0aXZlTWF4KHRvSW50ZWdlcihzaXplKSwgMCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlQ2VpbChsZW5ndGggLyBzaXplKSk7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W3Jlc0luZGV4KytdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjaHVuaztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHtcbiAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgaWYgKHVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG51bWJlciA9IG51bWJlciA8PSB1cHBlciA/IG51bWJlciA6IHVwcGVyO1xuICAgIH1cbiAgICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyID49IGxvd2VyID8gbnVtYmVyIDogbG93ZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDbGFtcDtcbiIsImltcG9ydCBiYXNlQ2xhbXAgZnJvbSAnLi9fYmFzZUNsYW1wLmpzJztcbmltcG9ydCB0b051bWJlciBmcm9tICcuL3RvTnVtYmVyLmpzJztcblxuLyoqXG4gKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICogLy8gPT4gLTVcbiAqXG4gKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdXBwZXIgPSBsb3dlcjtcbiAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHVwcGVyID0gdG9OdW1iZXIodXBwZXIpO1xuICAgIHVwcGVyID0gdXBwZXIgPT09IHVwcGVyID8gdXBwZXIgOiAwO1xuICB9XG4gIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbG93ZXIgPSB0b051bWJlcihsb3dlcik7XG4gICAgbG93ZXIgPSBsb3dlciA9PT0gbG93ZXIgPyBsb3dlciA6IDA7XG4gIH1cbiAgcmV0dXJuIGJhc2VDbGFtcCh0b051bWJlcihudW1iZXIpLCBsb3dlciwgdXBwZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFtcDtcbiIsImltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tIYXM7XG4iLCJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iLCJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgc3RhY2tDbGVhciBmcm9tICcuL19zdGFja0NsZWFyLmpzJztcbmltcG9ydCBzdGFja0RlbGV0ZSBmcm9tICcuL19zdGFja0RlbGV0ZS5qcyc7XG5pbXBvcnQgc3RhY2tHZXQgZnJvbSAnLi9fc3RhY2tHZXQuanMnO1xuaW1wb3J0IHN0YWNrSGFzIGZyb20gJy4vX3N0YWNrSGFzLmpzJztcbmltcG9ydCBzdGFja1NldCBmcm9tICcuL19zdGFja1NldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuZXhwb3J0IGRlZmF1bHQgU3RhY2s7XG4iLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnbjtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnbkluO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUZpbHRlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJBcnJheTtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTeW1ib2xzO1xuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9scztcbiIsImltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFN5bWJvbHNJbjtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGdldFN5bWJvbHNJbiBmcm9tICcuL19nZXRTeW1ib2xzSW4uanMnO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlTeW1ib2xzSW47XG4iLCJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRBbGxLZXlzO1xuIiwiaW1wb3J0IGJhc2VHZXRBbGxLZXlzIGZyb20gJy4vX2Jhc2VHZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5cztcbiIsImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9sc0luIGZyb20gJy4vX2dldFN5bWJvbHNJbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5c0luO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0YVZpZXc7XG4iLCJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxuZXhwb3J0IGRlZmF1bHQgU2V0O1xuIiwiaW1wb3J0IERhdGFWaWV3IGZyb20gJy4vX0RhdGFWaWV3LmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJy4vX1Byb21pc2UuanMnO1xuaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi9fV2Vha01hcC5qcyc7XG5pbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRDbG9uZUFycmF5O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IFVpbnQ4QXJyYXk7XG4iLCJpbXBvcnQgVWludDhBcnJheSBmcm9tICcuL19VaW50OEFycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZUFycmF5QnVmZmVyO1xuIiwiaW1wb3J0IGNsb25lQXJyYXlCdWZmZXIgZnJvbSAnLi9fY2xvbmVBcnJheUJ1ZmZlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVJlZ0V4cDtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVN5bWJvbDtcbiIsImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVR5cGVkQXJyYXk7XG4iLCJpbXBvcnQgY2xvbmVBcnJheUJ1ZmZlciBmcm9tICcuL19jbG9uZUFycmF5QnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZURhdGFWaWV3IGZyb20gJy4vX2Nsb25lRGF0YVZpZXcuanMnO1xuaW1wb3J0IGNsb25lUmVnRXhwIGZyb20gJy4vX2Nsb25lUmVnRXhwLmpzJztcbmltcG9ydCBjbG9uZVN5bWJvbCBmcm9tICcuL19jbG9uZVN5bWJvbC5qcyc7XG5pbXBvcnQgY2xvbmVUeXBlZEFycmF5IGZyb20gJy4vX2Nsb25lVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVCeVRhZztcbiIsImltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVPYmplY3Q7XG4iLCJpbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hcDtcbiIsImltcG9ydCBiYXNlSXNNYXAgZnJvbSAnLi9fYmFzZUlzTWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFwO1xuIiwiaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNTZXQ7XG4iLCJpbXBvcnQgYmFzZUlzU2V0IGZyb20gJy4vX2Jhc2VJc1NldC5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBpc1NldDtcbiIsImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ24gZnJvbSAnLi9fYmFzZUFzc2lnbi5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnbkluIGZyb20gJy4vX2Jhc2VBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgY2xvbmVCdWZmZXIgZnJvbSAnLi9fY2xvbmVCdWZmZXIuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGNvcHlTeW1ib2xzIGZyb20gJy4vX2NvcHlTeW1ib2xzLmpzJztcbmltcG9ydCBjb3B5U3ltYm9sc0luIGZyb20gJy4vX2NvcHlTeW1ib2xzSW4uanMnO1xuaW1wb3J0IGdldEFsbEtleXMgZnJvbSAnLi9fZ2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaW5pdENsb25lQXJyYXkgZnJvbSAnLi9faW5pdENsb25lQXJyYXkuanMnO1xuaW1wb3J0IGluaXRDbG9uZUJ5VGFnIGZyb20gJy4vX2luaXRDbG9uZUJ5VGFnLmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNNYXAgZnJvbSAnLi9pc01hcC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNTZXQgZnJvbSAnLi9pc1NldC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUNsb25lO1xuIiwiaW1wb3J0IGJhc2VDbG9uZSBmcm9tICcuL19iYXNlQ2xvbmUuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNoYWxsb3cgY2xvbmUgb2YgYHZhbHVlYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGVcbiAqIFtzdHJ1Y3R1cmVkIGNsb25lIGFsZ29yaXRobV0oaHR0cHM6Ly9tZG4uaW8vU3RydWN0dXJlZF9jbG9uZV9hbGdvcml0aG0pXG4gKiBhbmQgc3VwcG9ydHMgY2xvbmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLCBkYXRlIG9iamVjdHMsIG1hcHMsXG4gKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWRcbiAqIGFycmF5cy4gVGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhcmUgY2xvbmVkXG4gKiBhcyBwbGFpbiBvYmplY3RzLiBBbiBlbXB0eSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHVuY2xvbmVhYmxlIHZhbHVlcyBzdWNoXG4gKiBhcyBlcnJvciBvYmplY3RzLCBmdW5jdGlvbnMsIERPTSBub2RlcywgYW5kIFdlYWtNYXBzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiBAc2VlIF8uY2xvbmVEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBzaGFsbG93ID0gXy5jbG9uZShvYmplY3RzKTtcbiAqIGNvbnNvbGUubG9nKHNoYWxsb3dbMF0gPT09IG9iamVjdHNbMF0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZTtcbiIsImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURlZXA7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVXaXRoYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKHRydWUpO1xuICogICB9XG4gKiB9XG4gKlxuICogdmFyIGVsID0gXy5jbG9uZURlZXBXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAqIC8vID0+IGZhbHNlXG4gKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gKiAvLyA9PiAnQk9EWSdcbiAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAqIC8vID0+IDIwXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURlZXBXaXRoO1xuIiwiaW1wb3J0IGJhc2VDbG9uZSBmcm9tICcuL19iYXNlQ2xvbmUuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoXG4gKiB1cCB0byBmb3VyIGFyZ3VtZW50czsgKHZhbHVlIFssIGluZGV4fGtleSwgb2JqZWN0LCBzdGFja10pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFdpdGhcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZShmYWxzZSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YXIgZWwgPSBfLmNsb25lV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhlbCA9PT0gZG9jdW1lbnQuYm9keSk7XG4gKiAvLyA9PiBmYWxzZVxuICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICogLy8gPT4gJ0JPRFknXG4gKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gKiAvLyA9PiAwXG4gKi9cbmZ1bmN0aW9uIGNsb25lV2l0aCh2YWx1ZSwgY3VzdG9taXplcikge1xuICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lV2l0aDtcbiIsImltcG9ydCBMb2Rhc2hXcmFwcGVyIGZyb20gJy4vX0xvZGFzaFdyYXBwZXIuanMnO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gKlxuICogQG5hbWUgY29tbWl0XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogd3JhcHBlZC5sYXN0KCk7XG4gKiAvLyA9PiAzXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcHBlckNvbW1pdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNvbXBhY3QoWzAsIDEsIGZhbHNlLCAyLCAnJywgM10pO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhY3Q7XG4iLCJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGNvbmNhdGVuYXRpbmcgYGFycmF5YCB3aXRoIGFueSBhZGRpdGlvbmFsIGFycmF5c1xuICogYW5kL29yIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS5cbiAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzFdO1xuICogdmFyIG90aGVyID0gXy5jb25jYXQoYXJyYXksIDIsIFszXSwgW1s0XV0pO1xuICpcbiAqIGNvbnNvbGUubG9nKG90aGVyKTtcbiAqIC8vID0+IFsxLCAyLCAzLCBbNF1dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzFdXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoIC0gMSksXG4gICAgICBhcnJheSA9IGFyZ3VtZW50c1swXSxcbiAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgYXJnc1tpbmRleCAtIDFdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpID8gY29weUFycmF5KGFycmF5KSA6IFthcnJheV0sIGJhc2VGbGF0dGVuKGFyZ3MsIDEpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uY2F0O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlQWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRDYWNoZUhhcztcbiIsImltcG9ydCBNYXBDYWNoZSBmcm9tICcuL19NYXBDYWNoZS5qcyc7XG5pbXBvcnQgc2V0Q2FjaGVBZGQgZnJvbSAnLi9fc2V0Q2FjaGVBZGQuanMnO1xuaW1wb3J0IHNldENhY2hlSGFzIGZyb20gJy4vX3NldENhY2hlSGFzLmpzJztcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5leHBvcnQgZGVmYXVsdCBTZXRDYWNoZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U29tZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYWNoZUhhcztcbiIsImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcXVhbEFycmF5cztcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRUb0FycmF5O1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxCeVRhZztcbiIsImltcG9ydCBnZXRBbGxLZXlzIGZyb20gJy4vX2dldEFsbEtleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxPYmplY3RzO1xuIiwiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBlcXVhbEFycmF5cyBmcm9tICcuL19lcXVhbEFycmF5cy5qcyc7XG5pbXBvcnQgZXF1YWxCeVRhZyBmcm9tICcuL19lcXVhbEJ5VGFnLmpzJztcbmltcG9ydCBlcXVhbE9iamVjdHMgZnJvbSAnLi9fZXF1YWxPYmplY3RzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsRGVlcDtcbiIsImltcG9ydCBiYXNlSXNFcXVhbERlZXAgZnJvbSAnLi9fYmFzZUlzRXF1YWxEZWVwLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzRXF1YWw7XG4iLCJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hdGNoO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsImltcG9ydCBpc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9faXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRNYXRjaERhdGE7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIiwiaW1wb3J0IGJhc2VJc01hdGNoIGZyb20gJy4vX2Jhc2VJc01hdGNoLmpzJztcbmltcG9ydCBnZXRNYXRjaERhdGEgZnJvbSAnLi9fZ2V0TWF0Y2hEYXRhLmpzJztcbmltcG9ydCBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWF0Y2hlcztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSGFzSW47XG4iLCJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1BhdGg7XG4iLCJpbXBvcnQgYmFzZUhhc0luIGZyb20gJy4vX2Jhc2VIYXNJbi5qcyc7XG5pbXBvcnQgaGFzUGF0aCBmcm9tICcuL19oYXNQYXRoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNJbjtcbiIsImltcG9ydCBiYXNlSXNFcXVhbCBmcm9tICcuL19iYXNlSXNFcXVhbC5qcyc7XG5pbXBvcnQgZ2V0IGZyb20gJy4vZ2V0LmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcbmltcG9ydCBpc0tleSBmcm9tICcuL19pc0tleS5qcyc7XG5pbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlEZWVwO1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuaW1wb3J0IGJhc2VQcm9wZXJ0eURlZXAgZnJvbSAnLi9fYmFzZVByb3BlcnR5RGVlcC5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwcm9wZXJ0eTtcbiIsImltcG9ydCBiYXNlTWF0Y2hlcyBmcm9tICcuL19iYXNlTWF0Y2hlcy5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJdGVyYXRlZTtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpdGVyYXRlcyBvdmVyIGBwYWlyc2AgYW5kIGludm9rZXMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICogcGFpcnMgYXJlIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICogZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIFRoZSBwcmVkaWNhdGUtZnVuY3Rpb24gcGFpcnMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAqICAgW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgICAgICAgICAgIF8uY29uc3RhbnQoJ21hdGNoZXMgQScpXSxcbiAqICAgW18uY29uZm9ybXMoeyAnYic6IF8uaXNOdW1iZXIgfSksIF8uY29uc3RhbnQoJ21hdGNoZXMgQicpXSxcbiAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gKiBdKTtcbiAqXG4gKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiAnbWF0Y2hlcyBBJ1xuICpcbiAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAqIC8vID0+ICdtYXRjaGVzIEInXG4gKlxuICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAqIC8vID0+ICdubyBtYXRjaCdcbiAqL1xuZnVuY3Rpb24gY29uZChwYWlycykge1xuICB2YXIgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICB0b0l0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlO1xuXG4gIHBhaXJzID0gIWxlbmd0aCA/IFtdIDogYXJyYXlNYXAocGFpcnMsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICBpZiAodHlwZW9mIHBhaXJbMV0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgIH1cbiAgICByZXR1cm4gW3RvSXRlcmF0ZWUocGFpclswXSksIHBhaXJbMV1dO1xuICB9KTtcblxuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICAgIGlmIChhcHBseShwYWlyWzBdLCB0aGlzLCBhcmdzKSkge1xuICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uZDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNUb2Agd2hpY2ggYWNjZXB0cyBgcHJvcHNgIHRvIGNoZWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIHByb3BzKSB7XG4gIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiAhbGVuZ3RoO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbbGVuZ3RoXSxcbiAgICAgICAgcHJlZGljYXRlID0gc291cmNlW2tleV0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDb25mb3Jtc1RvO1xuIiwiaW1wb3J0IGJhc2VDb25mb3Jtc1RvIGZyb20gJy4vX2Jhc2VDb25mb3Jtc1RvLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlQ29uZm9ybXMoc291cmNlKSB7XG4gIHZhciBwcm9wcyA9IGtleXMoc291cmNlKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ29uZm9ybXM7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5pbXBvcnQgYmFzZUNvbmZvcm1zIGZyb20gJy4vX2Jhc2VDb25mb3Jtcy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gKiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYSBnaXZlbiBvYmplY3QsIHJldHVybmluZyBgdHJ1ZWAgaWZcbiAqIGFsbCBwcmVkaWNhdGVzIHJldHVybiB0cnV0aHksIGVsc2UgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNyZWF0ZWQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc1RvYCB3aXRoXG4gKiBgc291cmNlYCBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogMiwgJ2InOiAxIH0sXG4gKiAgIHsgJ2EnOiAxLCAnYic6IDIgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcihvYmplY3RzLCBfLmNvbmZvcm1zKHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMTsgfSB9KSk7XG4gKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICovXG5mdW5jdGlvbiBjb25mb3Jtcyhzb3VyY2UpIHtcbiAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uZm9ybXM7XG4iLCJpbXBvcnQgYmFzZUNvbmZvcm1zVG8gZnJvbSAnLi9fYmFzZUNvbmZvcm1zVG8uanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYG9iamVjdGAgY29uZm9ybXMgdG8gYHNvdXJjZWAgYnkgaW52b2tpbmcgdGhlIHByZWRpY2F0ZVxuICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc2Agd2hlbiBgc291cmNlYCBpc1xuICogcGFydGlhbGx5IGFwcGxpZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjE0LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqXG4gKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAyOyB9IH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gY29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gc291cmNlID09IG51bGwgfHwgYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIGtleXMoc291cmNlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZvcm1zVG87XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5QWdncmVnYXRvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRm9yO1xuIiwiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRWFjaDtcbiIsImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGNyZWF0ZUJhc2VFYWNoIGZyb20gJy4vX2NyZWF0ZUJhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFYWNoO1xuIiwiaW1wb3J0IGJhc2VFYWNoIGZyb20gJy4vX2Jhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGFycmF5QWdncmVnYXRvciBmcm9tICcuL19hcnJheUFnZ3JlZ2F0b3IuanMnO1xuaW1wb3J0IGJhc2VBZ2dyZWdhdG9yIGZyb20gJy4vX2Jhc2VBZ2dyZWdhdG9yLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uZ3JvdXBCeWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUFnZ3JlZ2F0b3IgOiBiYXNlQWdncmVnYXRvcixcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNyZWF0ZUFnZ3JlZ2F0b3IgZnJvbSAnLi9fY3JlYXRlQWdncmVnYXRvci5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAqIGVhY2gga2V5IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSB3YXMgcmV0dXJuZWQgYnkgYGl0ZXJhdGVlYC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC41LjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5jb3VudEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uY291bnRCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICogLy8gPT4geyAnMyc6IDIsICc1JzogMSB9XG4gKi9cbnZhciBjb3VudEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgKytyZXN1bHRba2V5XTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIDEpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY291bnRCeTtcbiIsImltcG9ydCBiYXNlQXNzaWduIGZyb20gJy4vX2Jhc2VBc3NpZ24uanMnO1xuaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgcHJvdG90eXBlYCBvYmplY3QuIElmIGFcbiAqIGBwcm9wZXJ0aWVzYCBvYmplY3QgaXMgZ2l2ZW4sIGl0cyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllc1xuICogYXJlIGFzc2lnbmVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBUaGUgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIFNoYXBlKCkge1xuICogICB0aGlzLnggPSAwO1xuICogICB0aGlzLnkgPSAwO1xuICogfVxuICpcbiAqIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAqICAgU2hhcGUuY2FsbCh0aGlzKTtcbiAqIH1cbiAqXG4gKiBDaXJjbGUucHJvdG90eXBlID0gXy5jcmVhdGUoU2hhcGUucHJvdG90eXBlLCB7XG4gKiAgICdjb25zdHJ1Y3Rvcic6IENpcmNsZVxuICogfSk7XG4gKlxuICogdmFyIGNpcmNsZSA9IG5ldyBDaXJjbGU7XG4gKiBjaXJjbGUgaW5zdGFuY2VvZiBDaXJjbGU7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogY2lyY2xlIGluc3RhbmNlb2YgU2hhcGU7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgcmV0dXJuIHByb3BlcnRpZXMgPT0gbnVsbCA/IHJlc3VsdCA6IGJhc2VBc3NpZ24ocmVzdWx0LCBwcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlO1xuIiwiaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQ1VSUllfRkxBRyA9IDg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgb2YgYGZ1bmNgIGFuZCBlaXRoZXIgaW52b2tlc1xuICogYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhdCBsZWFzdCBgYXJpdHlgIG51bWJlciBvZiBhcmd1bWVudHMgaGF2ZVxuICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICogYXJndW1lbnRzLCBhbmQgc28gb24uIFRoZSBhcml0eSBvZiBgZnVuY2AgbWF5IGJlIHNwZWNpZmllZCBpZiBgZnVuYy5sZW5ndGhgXG4gKiBpcyBub3Qgc3VmZmljaWVudC5cbiAqXG4gKiBUaGUgYF8uY3VycnkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gKiBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gKiAgIHJldHVybiBbYSwgYiwgY107XG4gKiB9O1xuICpcbiAqIHZhciBjdXJyaWVkID0gXy5jdXJyeShhYmMpO1xuICpcbiAqIGN1cnJpZWQoMSkoMikoMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDEsIDIpKDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogY3VycmllZCgxLCAyLCAzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiBjdXJyaWVkKDEpKF8sIDMpKDIpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGN1cnJ5KGZ1bmMsIGFyaXR5LCBndWFyZCkge1xuICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnkucGxhY2Vob2xkZXI7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbmN1cnJ5LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGN1cnJ5O1xuIiwiaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY3VycnlgIGV4Y2VwdCB0aGF0IGFyZ3VtZW50cyBhcmUgYXBwbGllZCB0byBgZnVuY2BcbiAqIGluIHRoZSBtYW5uZXIgb2YgYF8ucGFydGlhbFJpZ2h0YCBpbnN0ZWFkIG9mIGBfLnBhcnRpYWxgLlxuICpcbiAqIFRoZSBgXy5jdXJyeVJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICogICByZXR1cm4gW2EsIGIsIGNdO1xuICogfTtcbiAqXG4gKiB2YXIgY3VycmllZCA9IF8uY3VycnlSaWdodChhYmMpO1xuICpcbiAqIGN1cnJpZWQoMykoMikoMSk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDIsIDMpKDEpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogY3VycmllZCgxLCAyLCAzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiBjdXJyaWVkKDMpKDEsIF8pKDIpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeVJpZ2h0LnBsYWNlaG9sZGVyO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5jdXJyeVJpZ2h0LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGN1cnJ5UmlnaHQ7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbm93O1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IG5vdyBmcm9tICcuL25vdy5qcyc7XG5pbXBvcnQgdG9OdW1iZXIgZnJvbSAnLi90b051bWJlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTtcbiIsIi8qKlxuICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICogaXRzIHBsYWNlLiBUaGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaWYgYHZhbHVlYCBpcyBgTmFOYCwgYG51bGxgLFxuICogb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjE0LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRUbygxLCAxMCk7XG4gKiAvLyA9PiAxXG4gKlxuICogXy5kZWZhdWx0VG8odW5kZWZpbmVkLCAxMCk7XG4gKiAvLyA9PiAxMFxuICovXG5mdW5jdGlvbiBkZWZhdWx0VG8odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gKHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VG87XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2FmZUdldDtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xuICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVgIHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICovXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHZhbHVlLCBrZXlzSW4odmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9QbGFpbk9iamVjdDtcbiIsImltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGNsb25lQnVmZmVyIGZyb20gJy4vX2Nsb25lQnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5pbXBvcnQgdG9QbGFpbk9iamVjdCBmcm9tICcuL3RvUGxhaW5PYmplY3QuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2VEZWVwO1xuIiwiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgYmFzZU1lcmdlRGVlcCBmcm9tICcuL19iYXNlTWVyZ2VEZWVwLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1lcmdlO1xuIiwiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNEZWVwYCB0byBjdXN0b21pemUgaXRzIGBfLm1lcmdlYCB1c2UgdG8gbWVyZ2Ugc291cmNlXG4gKiBvYmplY3RzIGludG8gZGVzdGluYXRpb24gb2JqZWN0cyB0aGF0IGFyZSBwYXNzZWQgdGhydS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIG1lcmdlLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBjdXN0b21EZWZhdWx0c01lcmdlKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spIHtcbiAgaWYgKGlzT2JqZWN0KG9ialZhbHVlKSAmJiBpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG9ialZhbHVlKTtcbiAgICBiYXNlTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCB1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNNZXJnZTtcbiIsImltcG9ydCBiYXNlTWVyZ2UgZnJvbSAnLi9fYmFzZU1lcmdlLmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZXJnZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZVxuICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAqIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBzaXggYXJndW1lbnRzOlxuICogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICBpZiAoXy5pc0FycmF5KG9ialZhbHVlKSkge1xuICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICogICB9XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbMV0sICdiJzogWzJdIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogWzNdLCAnYic6IFs0XSB9O1xuICpcbiAqIF8ubWVyZ2VXaXRoKG9iamVjdCwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICogLy8gPT4geyAnYSc6IFsxLCAzXSwgJ2InOiBbMiwgNF0gfVxuICovXG52YXIgbWVyZ2VXaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlV2l0aDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzTWVyZ2UgZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNNZXJnZS5qcyc7XG5pbXBvcnQgbWVyZ2VXaXRoIGZyb20gJy4vbWVyZ2VXaXRoLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRlZmF1bHRzYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBhc3NpZ25zXG4gKiBkZWZhdWx0IHByb3BlcnRpZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5kZWZhdWx0c1xuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzRGVlcCh7ICdhJzogeyAnYic6IDIgfSB9LCB7ICdhJzogeyAnYic6IDEsICdjJzogMyB9IH0pO1xuICogLy8gPT4geyAnYSc6IHsgJ2InOiAyLCAnYyc6IDMgfSB9XG4gKi9cbnZhciBkZWZhdWx0c0RlZXAgPSBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gIGFyZ3MucHVzaCh1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UpO1xuICByZXR1cm4gYXBwbHkobWVyZ2VXaXRoLCB1bmRlZmluZWQsIGFyZ3MpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzRGVlcDtcbiIsIi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0cyBgYXJnc2BcbiAqIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7IH0sIHdhaXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRGVsYXk7XG4iLCJpbXBvcnQgYmFzZURlbGF5IGZyb20gJy4vX2Jhc2VEZWxheS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuXG4vKipcbiAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICogYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlZmVyLlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICogfSwgJ2RlZmVycmVkJyk7XG4gKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICovXG52YXIgZGVmZXIgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmZXI7XG4iLCJpbXBvcnQgYmFzZURlbGF5IGZyb20gJy4vX2Jhc2VEZWxheS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKipcbiAqIEludm9rZXMgYGZ1bmNgIGFmdGVyIGB3YWl0YCBtaWxsaXNlY29uZHMuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVsYXkoZnVuY3Rpb24odGV4dCkge1xuICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAqIH0sIDEwMDAsICdsYXRlcicpO1xuICogLy8gPT4gTG9ncyAnbGF0ZXInIGFmdGVyIG9uZSBzZWNvbmQuXG4gKi9cbnZhciBkZWxheSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgcmV0dXJuIGJhc2VEZWxheShmdW5jLCB0b051bWJlcih3YWl0KSB8fCAwLCBhcmdzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWxheTtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzIGZyb20gJy4vX2FycmF5SW5jbHVkZXMuanMnO1xuaW1wb3J0IGFycmF5SW5jbHVkZXNXaXRoIGZyb20gJy4vX2FycmF5SW5jbHVkZXNXaXRoLmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZURpZmZlcmVuY2U7XG4iLCJpbXBvcnQgYmFzZURpZmZlcmVuY2UgZnJvbSAnLi9fYmFzZURpZmZlcmVuY2UuanMnO1xuaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsxXVxuICovXG52YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0O1xuIiwiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaFxuICogaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxCeWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiBbMS4yXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5kaWZmZXJlbmNlQnkoW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCBbeyAneCc6IDEgfV0sICd4Jyk7XG4gKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAqL1xudmFyIGRpZmZlcmVuY2VCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGl0ZXJhdGVlID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUJ5O1xuIiwiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICpcbiAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICovXG52YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZVdpdGg7XG4iLCJpbXBvcnQgY3JlYXRlTWF0aE9wZXJhdGlvbiBmcm9tICcuL19jcmVhdGVNYXRoT3BlcmF0aW9uLmpzJztcblxuLyoqXG4gKiBEaXZpZGUgdHdvIG51bWJlcnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjcuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpZGVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZGl2aXNvciBUaGUgc2Vjb25kIG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGl2aWRlKDYsIDQpO1xuICogLy8gPT4gMS41XG4gKi9cbnZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gIHJldHVybiBkaXZpZGVuZCAvIGRpdmlzb3I7XG59LCAxKTtcblxuZXhwb3J0IGRlZmF1bHQgZGl2aWRlO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kcm9wKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBbMiwgM11cbiAqXG4gKiBfLmRyb3AoWzEsIDIsIDNdLCAyKTtcbiAqIC8vID0+IFszXVxuICpcbiAqIF8uZHJvcChbMSwgMiwgM10sIDUpO1xuICogLy8gPT4gW11cbiAqXG4gKiBfLmRyb3AoWzEsIDIsIDNdLCAwKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICovXG5mdW5jdGlvbiBkcm9wKGFycmF5LCBuLCBndWFyZCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3A7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRyb3BSaWdodChbMSwgMiwgM10pO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAqIC8vID0+IFsxXVxuICpcbiAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gZHJvcFJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gIG4gPSBsZW5ndGggLSBuO1xuICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJvcFJpZ2h0O1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgXG4gKiB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVjaWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVdoaWxlKGFycmF5LCBwcmVkaWNhdGUsIGlzRHJvcCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpICYmXG4gICAgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cblxuICByZXR1cm4gaXNEcm9wXG4gICAgPyBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyAwIDogaW5kZXgpLCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogbGVuZ3RoKSlcbiAgICA6IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IDApLCAoZnJvbVJpZ2h0ID8gbGVuZ3RoIDogaW5kZXgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVdoaWxlO1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VXaGlsZSBmcm9tICcuL19iYXNlV2hpbGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIGRyb3BSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlV2hpbGUoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlLCB0cnVlKVxuICAgIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BSaWdodFdoaWxlO1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VXaGlsZSBmcm9tICcuL19iYXNlV2hpbGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZHJvcFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5kcm9wV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVdoaWxlKGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgdHJ1ZSlcbiAgICA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkcm9wV2hpbGU7XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhc3RGdW5jdGlvbjtcbiIsImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yRWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlFYWNoUmlnaHQ7XG4iLCJpbXBvcnQgY3JlYXRlQmFzZUZvciBmcm9tICcuL19jcmVhdGVCYXNlRm9yLmpzJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VGb3JgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllc1xuICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvclJpZ2h0ID0gY3JlYXRlQmFzZUZvcih0cnVlKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvclJpZ2h0O1xuIiwiaW1wb3J0IGJhc2VGb3JSaWdodCBmcm9tICcuL19iYXNlRm9yUmlnaHQuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25SaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvclJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duUmlnaHQ7XG4iLCJpbXBvcnQgYmFzZUZvck93blJpZ2h0IGZyb20gJy4vX2Jhc2VGb3JPd25SaWdodC5qcyc7XG5pbXBvcnQgY3JlYXRlQmFzZUVhY2ggZnJvbSAnLi9fY3JlYXRlQmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hSaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaFJpZ2h0ID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93blJpZ2h0LCB0cnVlKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUVhY2hSaWdodDtcbiIsImltcG9ydCBhcnJheUVhY2hSaWdodCBmcm9tICcuL19hcnJheUVhY2hSaWdodC5qcyc7XG5pbXBvcnQgYmFzZUVhY2hSaWdodCBmcm9tICcuL19iYXNlRWFjaFJpZ2h0LmpzJztcbmltcG9ydCBjYXN0RnVuY3Rpb24gZnJvbSAnLi9fY2FzdEZ1bmN0aW9uLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JFYWNoYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBhbGlhcyBlYWNoUmlnaHRcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICogQHNlZSBfLmZvckVhY2hcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoUmlnaHQoWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgYDJgIHRoZW4gYDFgLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoUmlnaHQgOiBiYXNlRWFjaFJpZ2h0O1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yRWFjaFJpZ2h0O1xuIiwiaW1wb3J0IGJhc2VDbGFtcCBmcm9tICcuL19iYXNlQ2xhbXAuanMnO1xuaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCB1cCB0by5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBlbmRzIHdpdGggYHRhcmdldGAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVuZHNXaXRoKCdhYmMnLCAnYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJywgMik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcblxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgPyBsZW5ndGhcbiAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBsZW5ndGgpO1xuXG4gIHZhciBlbmQgPSBwb3NpdGlvbjtcbiAgcG9zaXRpb24gLT0gdGFyZ2V0Lmxlbmd0aDtcbiAgcmV0dXJuIHBvc2l0aW9uID49IDAgJiYgc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBlbmQpID09IHRhcmdldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZW5kc1dpdGg7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvUGFpcnNgIGFuZCBgXy50b1BhaXJzSW5gIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXlcbiAqIG9mIGtleS12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGAgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFtrZXksIG9iamVjdFtrZXldXTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1BhaXJzO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBpdHMgdmFsdWUtdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvUGFpcnM7XG4iLCJpbXBvcnQgYmFzZVRvUGFpcnMgZnJvbSAnLi9fYmFzZVRvUGFpcnMuanMnO1xuaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9QYWlycyBmcm9tICcuL19zZXRUb1BhaXJzLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFpcnMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciB0YWcgPSBnZXRUYWcob2JqZWN0KTtcbiAgICBpZiAodGFnID09IG1hcFRhZykge1xuICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgIHJldHVybiBzZXRUb1BhaXJzKG9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlVG9QYWlycyhvYmplY3QsIGtleXNGdW5jKG9iamVjdCkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUb1BhaXJzO1xuIiwiaW1wb3J0IGNyZWF0ZVRvUGFpcnMgZnJvbSAnLi9fY3JlYXRlVG9QYWlycy5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkLXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YFxuICogd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwIG9yIHNldCwgaXRzXG4gKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZW50cmllc1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl1dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbnZhciB0b1BhaXJzID0gY3JlYXRlVG9QYWlycyhrZXlzKTtcblxuZXhwb3J0IGRlZmF1bHQgdG9QYWlycztcbiIsImltcG9ydCBjcmVhdGVUb1BhaXJzIGZyb20gJy4vX2NyZWF0ZVRvUGFpcnMuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlyc1xuICogZm9yIGBvYmplY3RgIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcFxuICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGVudHJpZXNJblxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udG9QYWlyc0luKG5ldyBGb28pO1xuICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXSwgWydjJywgM11dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbnZhciB0b1BhaXJzSW4gPSBjcmVhdGVUb1BhaXJzKGtleXNJbik7XG5cbmV4cG9ydCBkZWZhdWx0IHRvUGFpcnNJbjtcbiIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcbiIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcbiIsImltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcbiAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbi8qKlxuICogRXNjYXBlcyB0aGUgYFJlZ0V4cGAgc3BlY2lhbCBjaGFyYWN0ZXJzIFwiXlwiLCBcIiRcIiwgXCJcXFwiLCBcIi5cIiwgXCIqXCIsIFwiK1wiLFxuICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGVSZWdFeHAoJ1tsb2Rhc2hdKGh0dHBzOi8vbG9kYXNoLmNvbS8pJyk7XG4gKiAvLyA9PiAnXFxbbG9kYXNoXFxdXFwoaHR0cHM6Ly9sb2Rhc2hcXC5jb20vXFwpJ1xuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVSZWdFeHA7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RXZlcnk7XG4iLCJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgXG4gKi9cbmZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFdmVyeTtcbiIsImltcG9ydCBhcnJheUV2ZXJ5IGZyb20gJy4vX2FycmF5RXZlcnkuanMnO1xuaW1wb3J0IGJhc2VFdmVyeSBmcm9tICcuL19iYXNlRXZlcnkuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFsbCoqIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYC5cbiAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgZm9yXG4gKiBbZW1wdHkgY29sbGVjdGlvbnNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VtcHR5X3NldCkgYmVjYXVzZVxuICogW2V2ZXJ5dGhpbmcgaXMgdHJ1ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFjdW91c190cnV0aCkgb2ZcbiAqIGVsZW1lbnRzIG9mIGVtcHR5IGNvbGxlY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmV2ZXJ5KFt0cnVlLCAxLCBudWxsLCAneWVzJ10sIEJvb2xlYW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmV2ZXJ5KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5ldmVyeSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBldmVyeTtcbiIsImltcG9ydCBiYXNlQ2xhbXAgZnJvbSAnLi9fYmFzZUNsYW1wLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBsZW5ndGggb2YgYW5cbiAqIGFycmF5LWxpa2Ugb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTGVuZ3RoKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IDQyOTQ5NjcyOTVcbiAqXG4gKiBfLnRvTGVuZ3RoKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9MZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIDAsIE1BWF9BUlJBWV9MRU5HVEgpIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9MZW5ndGg7XG4iLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b0xlbmd0aCBmcm9tICcuL3RvTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWxsYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBlbmQgPSBzdGFydCA+IGVuZCA/IDAgOiB0b0xlbmd0aChlbmQpO1xuICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbGw7XG4iLCJpbXBvcnQgYmFzZUZpbGwgZnJvbSAnLi9fYmFzZUZpbGwuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBGaWxscyBlbGVtZW50cyBvZiBgYXJyYXlgIHdpdGggYHZhbHVlYCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3RcbiAqIGluY2x1ZGluZywgYGVuZGAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gKlxuICogXy5maWxsKGFycmF5LCAnYScpO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gKlxuICogXy5maWxsKEFycmF5KDMpLCAyKTtcbiAqIC8vID0+IFsyLCAyLCAyXVxuICpcbiAqIF8uZmlsbChbNCwgNiwgOCwgMTBdLCAnKicsIDEsIDMpO1xuICogLy8gPT4gWzQsICcqJywgJyonLCAxMF1cbiAqL1xuZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoc3RhcnQgJiYgdHlwZW9mIHN0YXJ0ICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQpKSB7XG4gICAgc3RhcnQgPSAwO1xuICAgIGVuZCA9IGxlbmd0aDtcbiAgfVxuICByZXR1cm4gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmlsbDtcbiIsImltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsdGVyYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbHRlcjtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaWx0ZXI7XG4iLCJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbmQ7XG4iLCJpbXBvcnQgYmFzZUZpbmRJbmRleCBmcm9tICcuL19iYXNlRmluZEluZGV4LmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaW5kSW5kZXg7XG4iLCJpbXBvcnQgY3JlYXRlRmluZCBmcm9tICcuL19jcmVhdGVGaW5kLmpzJztcbmltcG9ydCBmaW5kSW5kZXggZnJvbSAnLi9maW5kSW5kZXguanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmQ7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5maW5kS2V5YCBhbmQgYF8uZmluZExhc3RLZXlgLFxuICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICogdXNpbmcgYGVhY2hGdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZm91bmQgZWxlbWVudCBvciBpdHMga2V5LCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7XG4gIHZhciByZXN1bHQ7XG4gIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICByZXN1bHQgPSBrZXk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbmRLZXk7XG4iLCJpbXBvcnQgYmFzZUZpbmRLZXkgZnJvbSAnLi9fYmFzZUZpbmRLZXkuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAqICBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiB9O1xuICpcbiAqIF8uZmluZEtleSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRLZXkodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kS2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAnZnJlZCdcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gJ2Jhcm5leSdcbiAqL1xuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93bik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRLZXk7XG4iLCJpbXBvcnQgYmFzZUZpbmRJbmRleCBmcm9tICcuL19iYXNlRmluZEluZGV4LmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHNcbiAqIG9mIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAncGViYmxlcyc7IH0pO1xuICogLy8gPT4gMlxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAyXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDBcbiAqL1xuZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgIGluZGV4ID0gZnJvbUluZGV4IDwgMFxuICAgICAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApXG4gICAgICA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRMYXN0SW5kZXg7XG4iLCJpbXBvcnQgY3JlYXRlRmluZCBmcm9tICcuL19jcmVhdGVGaW5kLmpzJztcbmltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4vZmluZExhc3RJbmRleC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlvbi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5maW5kTGFzdChbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKG4pIHtcbiAqICAgcmV0dXJuIG4gJSAyID09IDE7XG4gKiB9KTtcbiAqIC8vID0+IDNcbiAqL1xudmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtcblxuZXhwb3J0IGRlZmF1bHQgZmluZExhc3Q7XG4iLCJpbXBvcnQgYmFzZUZpbmRLZXkgZnJvbSAnLi9fYmFzZUZpbmRLZXkuanMnO1xuaW1wb3J0IGJhc2VGb3JPd25SaWdodCBmcm9tICcuL19iYXNlRm9yT3duUmlnaHQuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICogYSBjb2xsZWN0aW9uIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAqICBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiB9O1xuICpcbiAqIF8uZmluZExhc3RLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gcmV0dXJucyAncGViYmxlcycgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+ICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gJ3BlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBiYXNlRm9yT3duUmlnaHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaW5kTGFzdEtleTtcbiIsIi8qKlxuICogR2V0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBmaXJzdFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmhlYWQoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDFcbiAqXG4gKiBfLmhlYWQoW10pO1xuICogLy8gPT4gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGhlYWQoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYXJyYXlbMF0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhlYWQ7XG4iLCJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWFwO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTWFwIGZyb20gJy4vX2Jhc2VNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBieSBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydVxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gKiBgXy5ldmVyeWAsIGBfLmZpbHRlcmAsIGBfLm1hcGAsIGBfLm1hcFZhbHVlc2AsIGBfLnJlamVjdGAsIGFuZCBgXy5zb21lYC5cbiAqXG4gKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAqIGBhcnlgLCBgY2h1bmtgLCBgY3VycnlgLCBgY3VycnlSaWdodGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBldmVyeWAsXG4gKiBgZmlsbGAsIGBpbnZlcnRgLCBgcGFyc2VJbnRgLCBgcmFuZG9tYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVwZWF0YCxcbiAqIGBzYW1wbGVTaXplYCwgYHNsaWNlYCwgYHNvbWVgLCBgc29ydEJ5YCwgYHNwbGl0YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0ZW1wbGF0ZWAsIGB0cmltYCwgYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gKiAgIHJldHVybiBuICogbjtcbiAqIH1cbiAqXG4gKiBfLm1hcChbNCwgOF0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XVxuICpcbiAqIF8ubWFwKHsgJ2EnOiA0LCAnYic6IDggfSwgc3F1YXJlKTtcbiAqIC8vID0+IFsxNiwgNjRdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJyB9XG4gKiBdO1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXAodXNlcnMsICd1c2VyJyk7XG4gKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAqL1xuZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5TWFwIDogYmFzZU1hcDtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbWFwLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmxhdHRlbmVkIGFycmF5IG9mIHZhbHVlcyBieSBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmBcbiAqIHRocnUgYGl0ZXJhdGVlYCBhbmQgZmxhdHRlbmluZyB0aGUgbWFwcGVkIHJlc3VsdHMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAqICAgcmV0dXJuIFtuLCBuXTtcbiAqIH1cbiAqXG4gKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gKi9cbmZ1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0TWFwO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gKiBtYXBwZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNy4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICogfVxuICpcbiAqIF8uZmxhdE1hcERlZXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gKi9cbmZ1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBJTkZJTklUWSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXRNYXBEZWVwO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAqIG1hcHBlZCByZXN1bHRzIHVwIHRvIGBkZXB0aGAgdGltZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjcuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICogfVxuICpcbiAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTtcbiAqIC8vID0+IFtbMSwgMV0sIFsyLCAyXV1cbiAqL1xuZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkge1xuICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIGRlcHRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdE1hcERlcHRoO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVucyBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0LCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuRGVlcChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgSU5GSU5JVFkpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXR0ZW5EZWVwO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYGFycmF5YCB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlcHRoPTFdIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIFsyLCBbMywgWzRdXSwgNV1dO1xuICpcbiAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAxKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqXG4gKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMik7XG4gKiAvLyA9PiBbMSwgMiwgMywgWzRdLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuRGVwdGgoYXJyYXksIGRlcHRoKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gIHJldHVybiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0dGVuRGVwdGg7XG4iLCJpbXBvcnQgY3JlYXRlV3JhcCBmcm9tICcuL19jcmVhdGVXcmFwLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmbGlwcGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgZmxpcHBlZCA9IF8uZmxpcChmdW5jdGlvbigpIHtcbiAqICAgcmV0dXJuIF8udG9BcnJheShhcmd1bWVudHMpO1xuICogfSk7XG4gKlxuICogZmxpcHBlZCgnYScsICdiJywgJ2MnLCAnZCcpO1xuICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ11cbiAqL1xuZnVuY3Rpb24gZmxpcChmdW5jKSB7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFHKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxpcDtcbiIsImltcG9ydCBjcmVhdGVSb3VuZCBmcm9tICcuL19jcmVhdGVSb3VuZC5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4xMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIGRvd24gdG8uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIGRvd24gbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsb29yKDQuMDA2KTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLmZsb29yKDAuMDQ2LCAyKTtcbiAqIC8vID0+IDAuMDRcbiAqXG4gKiBfLmZsb29yKDQwNjAsIC0yKTtcbiAqIC8vID0+IDQwMDBcbiAqL1xudmFyIGZsb29yID0gY3JlYXRlUm91bmQoJ2Zsb29yJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZsb29yO1xuIiwiaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgZmxhdFJlc3QgZnJvbSAnLi9fZmxhdFJlc3QuanMnO1xuaW1wb3J0IGdldERhdGEgZnJvbSAnLi9fZ2V0RGF0YS5qcyc7XG5pbXBvcnQgZ2V0RnVuY05hbWUgZnJvbSAnLi9fZ2V0RnVuY05hbWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0xhemlhYmxlIGZyb20gJy4vX2lzTGF6aWFibGUuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTY7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxvdyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKSB7XG4gICAgdmFyIGxlbmd0aCA9IGZ1bmNzLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgIHByZXJlcSA9IExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7XG5cbiAgICBpZiAoZnJvbVJpZ2h0KSB7XG4gICAgICBmdW5jcy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIgZnVuYyA9IGZ1bmNzW2luZGV4XTtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0gbmV3IExvZGFzaFdyYXBwZXIoW10sIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpbmRleCA9IHdyYXBwZXIgPyBpbmRleCA6IGxlbmd0aDtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTtcblxuICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgZGF0YSA9IGZ1bmNOYW1lID09ICd3cmFwcGVyJyA/IGdldERhdGEoZnVuYykgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChkYXRhICYmIGlzTGF6aWFibGUoZGF0YVswXSkgJiZcbiAgICAgICAgICAgIGRhdGFbMV0gPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykgJiZcbiAgICAgICAgICAgICFkYXRhWzRdLmxlbmd0aCAmJiBkYXRhWzldID09IDFcbiAgICAgICAgICApIHtcbiAgICAgICAgd3JhcHBlciA9IHdyYXBwZXJbZ2V0RnVuY05hbWUoZGF0YVswXSldLmFwcGx5KHdyYXBwZXIsIGRhdGFbM10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JhcHBlciA9IChmdW5jLmxlbmd0aCA9PSAxICYmIGlzTGF6aWFibGUoZnVuYykpXG4gICAgICAgICAgPyB3cmFwcGVyW2Z1bmNOYW1lXSgpXG4gICAgICAgICAgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIHZhbHVlID0gYXJnc1swXTtcblxuICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gbGVuZ3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVGbG93O1xuIiwiaW1wb3J0IGNyZWF0ZUZsb3cgZnJvbSAnLi9fY3JlYXRlRmxvdy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICogQHNlZSBfLmZsb3dSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIGFkZFNxdWFyZSA9IF8uZmxvdyhbXy5hZGQsIHNxdWFyZV0pO1xuICogYWRkU3F1YXJlKDEsIDIpO1xuICogLy8gPT4gOVxuICovXG52YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuZXhwb3J0IGRlZmF1bHQgZmxvdztcbiIsImltcG9ydCBjcmVhdGVGbG93IGZyb20gJy4vX2NyZWF0ZUZsb3cuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAqIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDMuMC4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICogQHNlZSBfLmZsb3dcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChbc3F1YXJlLCBfLmFkZF0pO1xuICogYWRkU3F1YXJlKDEsIDIpO1xuICogLy8gPT4gOVxuICovXG52YXIgZmxvd1JpZ2h0ID0gY3JlYXRlRmxvdyh0cnVlKTtcblxuZXhwb3J0IGRlZmF1bHQgZmxvd1JpZ2h0O1xuIiwiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3Iob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpLCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JJbjtcbiIsImltcG9ydCBiYXNlRm9yUmlnaHQgZnJvbSAnLi9fYmFzZUZvclJpZ2h0LmpzJztcbmltcG9ydCBjYXN0RnVuY3Rpb24gZnJvbSAnLi9fY2FzdEZ1bmN0aW9uLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5mb3JJblJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYycsICdiJywgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9ySW5gIGxvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnLlxuICovXG5mdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3JSaWdodChvYmplY3QsIGNhc3RGdW5jdGlvbihpdGVyYXRlZSksIGtleXNJbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvckluUmlnaHQ7XG4iLCJpbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBjYXN0RnVuY3Rpb24gZnJvbSAnLi9fY2FzdEZ1bmN0aW9uLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmRcbiAqIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvblxuICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmZvck93blJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93bihvYmplY3QsIGNhc3RGdW5jdGlvbihpdGVyYXRlZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JPd247XG4iLCJpbXBvcnQgYmFzZUZvck93blJpZ2h0IGZyb20gJy4vX2Jhc2VGb3JPd25SaWdodC5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JPd25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9yT3duXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICogICBjb25zb2xlLmxvZyhrZXkpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzICdiJyB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JPd25gIGxvZ3MgJ2EnIHRoZW4gJ2InLlxuICovXG5mdW5jdGlvbiBmb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93blJpZ2h0KG9iamVjdCwgY2FzdEZ1bmN0aW9uKGl0ZXJhdGVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvck93blJpZ2h0O1xuIiwiLyoqXG4gKiBUaGUgaW52ZXJzZSBvZiBgXy50b1BhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWRcbiAqIGZyb20ga2V5LXZhbHVlIGBwYWlyc2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUga2V5LXZhbHVlIHBhaXJzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mcm9tUGFpcnMoW1snYScsIDFdLCBbJ2InLCAyXV0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbmZ1bmN0aW9uIGZyb21QYWlycyhwYWlycykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICByZXN1bHRbcGFpclswXV0gPSBwYWlyWzFdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZyb21QYWlycztcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZ1bmN0aW9uc2Agd2hpY2ggY3JlYXRlcyBhbiBhcnJheSBvZlxuICogYG9iamVjdGAgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZmlsdGVyZWQgZnJvbSBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmplY3Rba2V5XSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRnVuY3Rpb25zO1xuIiwiaW1wb3J0IGJhc2VGdW5jdGlvbnMgZnJvbSAnLi9fYmFzZUZ1bmN0aW9ucy5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZnJvbSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gKiBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gKiBAc2VlIF8uZnVuY3Rpb25zSW5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gKlxuICogXy5mdW5jdGlvbnMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKi9cbmZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb25zO1xuIiwiaW1wb3J0IGJhc2VGdW5jdGlvbnMgZnJvbSAnLi9fYmFzZUZ1bmN0aW9ucy5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBpbmhlcml0ZWRcbiAqIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gKiBAc2VlIF8uZnVuY3Rpb25zXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICogICB0aGlzLmIgPSBfLmNvbnN0YW50KCdiJyk7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gXy5jb25zdGFudCgnYycpO1xuICpcbiAqIF8uZnVuY3Rpb25zSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqL1xuZnVuY3Rpb24gZnVuY3Rpb25zSW4ob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb25zSW47XG4iLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgY3JlYXRlQWdncmVnYXRvciBmcm9tICcuL19jcmVhdGVBZ2dyZWdhdG9yLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgb3JkZXIgb2YgZ3JvdXBlZCB2YWx1ZXNcbiAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gKiBrZXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiB7ICc0JzogWzQuMl0sICc2JzogWzYuMSwgNi4zXSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmdyb3VwQnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICovXG52YXIgZ3JvdXBCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBncm91cEJ5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ndGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUd0KHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPiBvdGhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUd0O1xuIiwiaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcmVsYXRpb25hbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlbGF0aW9uYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKG9wZXJhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSkge1xuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICBvdGhlciA9IHRvTnVtYmVyKG90aGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdG9yKHZhbHVlLCBvdGhlcik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb247XG4iLCJpbXBvcnQgYmFzZUd0IGZyb20gJy4vX2Jhc2VHdC5qcyc7XG5pbXBvcnQgY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbiBmcm9tICcuL19jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuOS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAc2VlIF8ubHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5ndCgzLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmd0KDMsIDMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmd0KDEsIDMpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGd0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlR3QpO1xuXG5leHBvcnQgZGVmYXVsdCBndDtcbiIsImltcG9ydCBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uIGZyb20gJy4vX2NyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy45LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0b1xuICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAqIEBzZWUgXy5sdGVcbiAqIEBleGFtcGxlXG4gKlxuICogXy5ndGUoMywgMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5ndGUoMywgMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5ndGUoMSwgMyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgZ3RlID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID49IG90aGVyO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGd0ZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhcztcbiIsImltcG9ydCBiYXNlSGFzIGZyb20gJy4vX2Jhc2VIYXMuanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG90aGVyLCAnYScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXM7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5SYW5nZWAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gbnVtYmVyID49IG5hdGl2ZU1pbihzdGFydCwgZW5kKSAmJiBudW1iZXIgPCBuYXRpdmVNYXgoc3RhcnQsIGVuZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJblJhbmdlO1xuIiwiaW1wb3J0IGJhc2VJblJhbmdlIGZyb20gJy4vX2Jhc2VJblJhbmdlLmpzJztcbmltcG9ydCB0b0Zpbml0ZSBmcm9tICcuL3RvRmluaXRlLmpzJztcbmltcG9ydCB0b051bWJlciBmcm9tICcuL3RvTnVtYmVyLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAqIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAqIElmIGBzdGFydGAgaXMgZ3JlYXRlciB0aGFuIGBlbmRgIHRoZSBwYXJhbXMgYXJlIHN3YXBwZWQgdG8gc3VwcG9ydFxuICogbmVnYXRpdmUgcmFuZ2VzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4zLjBcbiAqIEBjYXRlZ29yeSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gKiBAc2VlIF8ucmFuZ2UsIF8ucmFuZ2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmluUmFuZ2UoMywgMiwgNCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pblJhbmdlKDQsIDgpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaW5SYW5nZSg0LCAyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pblJhbmdlKDIsIDIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmluUmFuZ2UoMS4yLCAyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluUmFuZ2UoNS4yLCA0KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pblJhbmdlKC0zLCAtMiwgLTYpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gIH1cbiAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgcmV0dXJuIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluUmFuZ2U7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTdHJpbmcoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3RyaW5nO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG4iLCJpbXBvcnQgYmFzZVZhbHVlcyBmcm9tICcuL19iYXNlVmFsdWVzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy52YWx1ZXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLnZhbHVlcygnaGknKTtcbiAqIC8vID0+IFsnaCcsICdpJ11cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWx1ZXM7XG4iLCJpbXBvcnQgYmFzZUluZGV4T2YgZnJvbSAnLi9fYmFzZUluZGV4T2YuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGEgc3RyaW5nLCBpdCdzXG4gKiBjaGVja2VkIGZvciBhIHN1YnN0cmluZyBvZiBgdmFsdWVgLCBvdGhlcndpc2VcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBpcyB1c2VkIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhc1xuICogdGhlIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgY29sbGVjdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gY29sbGVjdGlvbiA6IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgZnJvbUluZGV4ID0gKGZyb21JbmRleCAmJiAhZ3VhcmQpID8gdG9JbnRlZ2VyKGZyb21JbmRleCkgOiAwO1xuXG4gIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgZnJvbUluZGV4LCAwKTtcbiAgfVxuICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbilcbiAgICA/IChmcm9tSW5kZXggPD0gbGVuZ3RoICYmIGNvbGxlY3Rpb24uaW5kZXhPZih2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKVxuICAgIDogKCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmNsdWRlcztcbiIsImltcG9ydCBiYXNlSW5kZXhPZiBmcm9tICcuL19iYXNlSW5kZXhPZi5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleE9mO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIEdldHMgYWxsIGJ1dCB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAwLCAtMSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdGlhbDtcbiIsImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlcyBmcm9tICcuL19hcnJheUluY2x1ZGVzLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzV2l0aCBmcm9tICcuL19hcnJheUluY2x1ZGVzV2l0aC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNhY2hlSGFzIGZyb20gJy4vX2NhY2hlSGFzLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB0aGF0IGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHRvIGluc3BlY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5cyBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBzaGFyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluY2x1ZGVzID0gY29tcGFyYXRvciA/IGFycmF5SW5jbHVkZXNXaXRoIDogYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGgsXG4gICAgICBjYWNoZXMgPSBBcnJheShvdGhMZW5ndGgpLFxuICAgICAgbWF4TGVuZ3RoID0gSW5maW5pdHksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAob3RoSW5kZXgtLSkge1xuICAgIHZhciBhcnJheSA9IGFycmF5c1tvdGhJbmRleF07XG4gICAgaWYgKG90aEluZGV4ICYmIGl0ZXJhdGVlKSB7XG4gICAgICBhcnJheSA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICB9XG4gICAgbWF4TGVuZ3RoID0gbmF0aXZlTWluKGFycmF5Lmxlbmd0aCwgbWF4TGVuZ3RoKTtcbiAgICBjYWNoZXNbb3RoSW5kZXhdID0gIWNvbXBhcmF0b3IgJiYgKGl0ZXJhdGVlIHx8IChsZW5ndGggPj0gMTIwICYmIGFycmF5Lmxlbmd0aCA+PSAxMjApKVxuICAgICAgPyBuZXcgU2V0Q2FjaGUob3RoSW5kZXggJiYgYXJyYXkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuICBhcnJheSA9IGFycmF5c1swXTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHNlZW4gPSBjYWNoZXNbMF07XG5cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIHJlc3VsdC5sZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmICghKHNlZW5cbiAgICAgICAgICA/IGNhY2hlSGFzKHNlZW4sIGNvbXB1dGVkKVxuICAgICAgICAgIDogaW5jbHVkZXMocmVzdWx0LCBjb21wdXRlZCwgY29tcGFyYXRvcilcbiAgICAgICAgKSkge1xuICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGg7XG4gICAgICB3aGlsZSAoLS1vdGhJbmRleCkge1xuICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICBpZiAoIShjYWNoZVxuICAgICAgICAgICAgICA/IGNhY2hlSGFzKGNhY2hlLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgOiBpbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLCBjb21wdXRlZCwgY29tcGFyYXRvcikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUludGVyc2VjdGlvbjtcbiIsImltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS1saWtlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdEFycmF5TGlrZU9iamVjdDtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUludGVyc2VjdGlvbiBmcm9tICcuL19iYXNlSW50ZXJzZWN0aW9uLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgY2FzdEFycmF5TGlrZU9iamVjdCBmcm9tICcuL19jYXN0QXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYWxsIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW50ZXJzZWN0aW9uKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsyXVxuICovXG52YXIgaW50ZXJzZWN0aW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZClcbiAgICA6IFtdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGludGVyc2VjdGlvbjtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUludGVyc2VjdGlvbiBmcm9tICcuL19iYXNlSW50ZXJzZWN0aW9uLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgY2FzdEFycmF5TGlrZU9iamVjdCBmcm9tICcuL19jYXN0QXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICogd2hpY2ggaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gKiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pbnRlcnNlY3Rpb25CeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAqIC8vID0+IFsyLjFdXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmludGVyc2VjdGlvbkJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICogLy8gPT4gW3sgJ3gnOiAxIH1dXG4gKi9cbnZhciBpbnRlcnNlY3Rpb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyksXG4gICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gIGlmIChpdGVyYXRlZSA9PT0gbGFzdChtYXBwZWQpKSB7XG4gICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgbWFwcGVkLnBvcCgpO1xuICB9XG4gIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJzZWN0aW9uQnk7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJbnRlcnNlY3Rpb24gZnJvbSAnLi9fYmFzZUludGVyc2VjdGlvbi5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNhc3RBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9fY2FzdEFycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXNcbiAqIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvciBpc1xuICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICpcbiAqIF8uaW50ZXJzZWN0aW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9XVxuICovXG52YXIgaW50ZXJzZWN0aW9uV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKSxcbiAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICBpZiAoY29tcGFyYXRvcikge1xuICAgIG1hcHBlZC5wb3AoKTtcbiAgfVxuICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJzZWN0aW9uV2l0aDtcbiIsImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzXG4gKiBgb2JqZWN0YCB3aXRoIHZhbHVlcyB0cmFuc2Zvcm1lZCBieSBgaXRlcmF0ZWVgIGFuZCBzZXQgYnkgYHNldHRlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGludmVydGVkIG9iamVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICovXG5mdW5jdGlvbiBiYXNlSW52ZXJ0ZXIob2JqZWN0LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRlZSh2YWx1ZSksIGtleSwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUludmVydGVyO1xuIiwiaW1wb3J0IGJhc2VJbnZlcnRlciBmcm9tICcuL19iYXNlSW52ZXJ0ZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmludmVydEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSBpdGVyYXRlZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgcmV0dXJuIGJhc2VJbnZlcnRlcihvYmplY3QsIHNldHRlciwgdG9JdGVyYXRlZShpdGVyYXRlZSksIHt9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSW52ZXJ0ZXI7XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgY3JlYXRlSW52ZXJ0ZXIgZnJvbSAnLi9fY3JlYXRlSW52ZXJ0ZXIuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgaW52ZXJ0ZWQga2V5cyBhbmQgdmFsdWVzIG9mIGBvYmplY3RgLlxuICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gKiBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAqXG4gKiBfLmludmVydChvYmplY3QpO1xuICogLy8gPT4geyAnMSc6ICdjJywgJzInOiAnYicgfVxuICovXG52YXIgaW52ZXJ0ID0gY3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICByZXN1bHRbdmFsdWVdID0ga2V5O1xufSwgY29uc3RhbnQoaWRlbnRpdHkpKTtcblxuZXhwb3J0IGRlZmF1bHQgaW52ZXJ0O1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGNyZWF0ZUludmVydGVyIGZyb20gJy4vX2NyZWF0ZUludmVydGVyLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnZlcnRgIGV4Y2VwdCB0aGF0IHRoZSBpbnZlcnRlZCBvYmplY3QgaXMgZ2VuZXJhdGVkXG4gKiBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlXG4gKiBjb3JyZXNwb25kaW5nIGludmVydGVkIHZhbHVlIG9mIGVhY2ggaW52ZXJ0ZWQga2V5IGlzIGFuIGFycmF5IG9mIGtleXNcbiAqIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBpbnZlcnRlZCB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gKlxuICogXy5pbnZlcnRCeShvYmplY3QpO1xuICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICpcbiAqIF8uaW52ZXJ0Qnkob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSkge1xuICogICByZXR1cm4gJ2dyb3VwJyArIHZhbHVlO1xuICogfSk7XG4gKiAvLyA9PiB7ICdncm91cDEnOiBbJ2EnLCAnYyddLCAnZ3JvdXAyJzogWydiJ10gfVxuICovXG52YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0W3ZhbHVlXSA9IFtrZXldO1xuICB9XG59LCBiYXNlSXRlcmF0ZWUpO1xuXG5leHBvcnQgZGVmYXVsdCBpbnZlcnRCeTtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcmVudDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcbmltcG9ydCBwYXJlbnQgZnJvbSAnLi9fcGFyZW50LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52b2tlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAqIG1ldGhvZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFwcGx5KGZ1bmMsIG9iamVjdCwgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJbnZva2U7XG4iLCJpbXBvcnQgYmFzZUludm9rZSBmcm9tICcuL19iYXNlSW52b2tlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5cbi8qKlxuICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IFsxLCAyLCAzLCA0XSB9IH1dIH07XG4gKlxuICogXy5pbnZva2Uob2JqZWN0LCAnYVswXS5iLmMuc2xpY2UnLCAxLCAzKTtcbiAqIC8vID0+IFsyLCAzXVxuICovXG52YXIgaW52b2tlID0gYmFzZVJlc3QoYmFzZUludm9rZSk7XG5cbmV4cG9ydCBkZWZhdWx0IGludm9rZTtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGJhc2VJbnZva2UgZnJvbSAnLi9fYmFzZUludm9rZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gKlxuICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICovXG52YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGludm9rZU1hcDtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFycmF5QnVmZmVyVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcnJheUJ1ZmZlcjtcbiIsImltcG9ydCBiYXNlSXNBcnJheUJ1ZmZlciBmcm9tICcuL19iYXNlSXNBcnJheUJ1ZmZlci5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc0FycmF5QnVmZmVyID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNBcnJheUJ1ZmZlcjtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheUJ1ZmZlcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5QnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0gbm9kZUlzQXJyYXlCdWZmZXIgPyBiYXNlVW5hcnkobm9kZUlzQXJyYXlCdWZmZXIpIDogYmFzZUlzQXJyYXlCdWZmZXI7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlCdWZmZXI7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Jvb2xlYW47XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNEYXRlO1xuIiwiaW1wb3J0IGJhc2VJc0RhdGUgZnJvbSAnLi9fYmFzZUlzRGF0ZS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc0RhdGUgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0RhdGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRGF0ZShuZXcgRGF0ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0RhdGUoJ01vbiBBcHJpbCAyMyAyMDEyJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNEYXRlID0gbm9kZUlzRGF0ZSA/IGJhc2VVbmFyeShub2RlSXNEYXRlKSA6IGJhc2VJc0RhdGU7XG5cbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsImltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBET00gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbGVtZW50KCc8Ym9keT4nKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRWxlbWVudDtcbiIsImltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0VtcHR5O1xuIiwiaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRXF1YWw7XG4iLCJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUpIHtcbiAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XG4gKiAgICAgcmV0dXJuIHRydWU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTtcbiAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xuICpcbiAqIF8uaXNFcXVhbFdpdGgoYXJyYXksIG90aGVyLCBjdXN0b21pemVyKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbFdpdGgodmFsdWUsIG90aGVyLCBjdXN0b21pemVyKSB7XG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgdW5kZWZpbmVkLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0VxdWFsV2l0aDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNGaW5pdGUgPSByb290LmlzRmluaXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc0Zpbml0ZWBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0Zpbml0ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGaW5pdGUoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRmluaXRlKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0Zpbml0ZSgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaW5pdGUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmluaXRlO1xuIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0ludGVnZXIoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNJbnRlZ2VyKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0ludGVnZXIoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID09IHRvSW50ZWdlcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSW50ZWdlcjtcbiIsImltcG9ydCBiYXNlSXNNYXRjaCBmcm9tICcuL19iYXNlSXNNYXRjaC5qcyc7XG5pbXBvcnQgZ2V0TWF0Y2hEYXRhIGZyb20gJy4vX2dldE1hdGNoRGF0YS5qcyc7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGBvYmplY3RgIGFuZCBgc291cmNlYCB0b1xuICogZGV0ZXJtaW5lIGlmIGBvYmplY3RgIGNvbnRhaW5zIGVxdWl2YWxlbnQgcHJvcGVydHkgdmFsdWVzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLm1hdGNoZXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAqIHBhcnRpYWxseSBhcHBsaWVkLlxuICpcbiAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gKiB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZSBgXy5pc0VxdWFsYFxuICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKlxuICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDIgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hdGNoO1xuIiwiaW1wb3J0IGJhc2VJc01hdGNoIGZyb20gJy4vX2Jhc2VJc01hdGNoLmpzJztcbmltcG9ydCBnZXRNYXRjaERhdGEgZnJvbSAnLi9fZ2V0TWF0Y2hEYXRhLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzTWF0Y2hgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcbiAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICogYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBpbmRleHxrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gKiAgICAgcmV0dXJuIHRydWU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnZ3JlZXRpbmcnOiAnaGVsbG8nIH07XG4gKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gKlxuICogXy5pc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKSB7XG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWF0Y2hXaXRoO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc051bWJlcigzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bWJlcjtcbiIsImltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgTmFOYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgTnVtYmVyLmlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzTmFOKSBhbmQgaXMgbm90IHRoZSBzYW1lIGFzXG4gKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTmFOKE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTihuZXcgTnVtYmVyKE5hTikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gIC8vIEFjdGl2ZVggb2JqZWN0cyBpbiBJRS5cbiAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmFOO1xuIiwiaW1wb3J0IGNvcmVKc0RhdGEgZnJvbSAnLi9fY29yZUpzRGF0YS5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBpcyBjYXBhYmxlIG9mIGJlaW5nIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2thYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbnZhciBpc01hc2thYmxlID0gY29yZUpzRGF0YSA/IGlzRnVuY3Rpb24gOiBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFza2FibGU7XG4iLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgaXNNYXNrYWJsZSBmcm9tICcuL19pc01hc2thYmxlLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIENPUkVfRVJST1JfVEVYVCA9ICdVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJpc3RpbmUgbmF0aXZlIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBjYW4ndCByZWxpYWJseSBkZXRlY3QgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUgcHJlc2VuY2VcbiAqIG9mIHRoZSBjb3JlLWpzIHBhY2thZ2UgYmVjYXVzZSBjb3JlLWpzIGNpcmN1bXZlbnRzIHRoaXMga2luZCBvZiBkZXRlY3Rpb24uXG4gKiBEZXNwaXRlIG11bHRpcGxlIHJlcXVlc3RzLCB0aGUgY29yZS1qcyBtYWludGFpbmVyIGhhcyBtYWRlIGl0IGNsZWFyOiBhbnlcbiAqIGF0dGVtcHQgdG8gZml4IHRoZSBkZXRlY3Rpb24gd2lsbCBiZSBvYnN0cnVjdGVkLiBBcyBhIHJlc3VsdCwgd2UncmUgbGVmdFxuICogd2l0aCBsaXR0bGUgY2hvaWNlIGJ1dCB0byB0aHJvdyBhbiBlcnJvci4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIGFmZmVjdHNcbiAqIHBhY2thZ2VzLCBsaWtlIFtiYWJlbC1wb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmFiZWwtcG9seWZpbGwpLFxuICogd2hpY2ggcmVseSBvbiBjb3JlLWpzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hdGl2ZShfKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmIChpc01hc2thYmxlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihDT1JFX0VSUk9SX1RFWFQpO1xuICB9XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05hdGl2ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG51bGxpc2gsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05pbChudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmlsKHZvaWQgMCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05pbChOYU4pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmlsO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOdWxsKG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNSZWdFeHBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1JlZ0V4cCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSByZWdleHBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1JlZ0V4cDtcbiIsImltcG9ydCBiYXNlSXNSZWdFeHAgZnJvbSAnLi9fYmFzZUlzUmVnRXhwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzUmVnRXhwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNSZWdFeHA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzUmVnRXhwO1xuIiwiaW1wb3J0IGlzSW50ZWdlciBmcm9tICcuL2lzSW50ZWdlci5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLiBBbiBpbnRlZ2VyIGlzIHNhZmUgaWYgaXQncyBhbiBJRUVFLTc1NFxuICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTYWZlSW50ZWdlcigzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNTYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNTYWZlSW50ZWdlcignMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAtTUFYX1NBRkVfSU5URUdFUiAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1NhZmVJbnRlZ2VyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsImltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzV2Vha01hcChuZXcgTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHdlYWtNYXBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV2Vha01hcDtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciB3ZWFrU2V0VGFnID0gJ1tvYmplY3QgV2Vha1NldF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha1NldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgd2VhayBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1dlYWtTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNXZWFrU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHdlYWtTZXRUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV2Vha1NldDtcbiIsImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICogZnVuY3Rpb24uIElmIGBmdW5jYCBpcyBhIHByb3BlcnR5IG5hbWUsIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybnMgdGhlXG4gKiBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBnaXZlbiBlbGVtZW50LiBJZiBgZnVuY2AgaXMgYW4gYXJyYXkgb3Igb2JqZWN0LCB0aGVcbiAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICogc291cmNlIHByb3BlcnRpZXMsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDQuMC4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gW2Z1bmM9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2FsbGJhY2suXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KSk7XG4gKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICogLy8gPT4gW3sgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCB9XVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXAodXNlcnMsIF8uaXRlcmF0ZWUoJ3VzZXInKSk7XG4gKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAqXG4gKiAvLyBDcmVhdGUgY3VzdG9tIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKiBfLml0ZXJhdGVlID0gXy53cmFwKF8uaXRlcmF0ZWUsIGZ1bmN0aW9uKGl0ZXJhdGVlLCBmdW5jKSB7XG4gKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gKiAgICAgcmV0dXJuIGZ1bmMudGVzdChzdHJpbmcpO1xuICogICB9O1xuICogfSk7XG4gKlxuICogXy5maWx0ZXIoWydhYmMnLCAnZGVmJ10sIC9lZi8pO1xuICogLy8gPT4gWydkZWYnXVxuICovXG5mdW5jdGlvbiBpdGVyYXRlZShmdW5jKSB7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGl0ZXJhdGVlO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVKb2luID0gYXJyYXlQcm90by5qb2luO1xuXG4vKipcbiAqIENvbnZlcnRzIGFsbCBlbGVtZW50cyBpbiBgYXJyYXlgIGludG8gYSBzdHJpbmcgc2VwYXJhdGVkIGJ5IGBzZXBhcmF0b3JgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNlcGFyYXRvci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGpvaW5lZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uam9pbihbJ2EnLCAnYicsICdjJ10sICd+Jyk7XG4gKiAvLyA9PiAnYX5ifmMnXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYXJyYXksIHNlcGFyYXRvcikge1xuICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/ICcnIDogbmF0aXZlSm9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBqb2luO1xuIiwiaW1wb3J0IGNyZWF0ZUNvbXBvdW5kZXIgZnJvbSAnLi9fY3JlYXRlQ29tcG91bmRlci5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAqIFtrZWJhYiBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTcGVjaWFsX2Nhc2Vfc3R5bGVzKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUga2ViYWIgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmtlYmFiQ2FzZSgnRm9vIEJhcicpO1xuICogLy8gPT4gJ2Zvby1iYXInXG4gKlxuICogXy5rZWJhYkNhc2UoJ2Zvb0JhcicpO1xuICogLy8gPT4gJ2Zvby1iYXInXG4gKlxuICogXy5rZWJhYkNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gKiAvLyA9PiAnZm9vLWJhcidcbiAqL1xudmFyIGtlYmFiQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGtlYmFiQ2FzZTtcbiIsImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBjcmVhdGVBZ2dyZWdhdG9yIGZyb20gJy4vX2NyZWF0ZUFnZ3JlZ2F0b3IuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFtcbiAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAqIF07XG4gKlxuICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICogfSk7XG4gKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gKlxuICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAqL1xudmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQga2V5Qnk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmljdExhc3RJbmRleE9mO1xuIiwiaW1wb3J0IGJhc2VGaW5kSW5kZXggZnJvbSAnLi9fYmFzZUZpbmRJbmRleC5qcyc7XG5pbXBvcnQgYmFzZUlzTmFOIGZyb20gJy4vX2Jhc2VJc05hTi5qcyc7XG5pbXBvcnQgc3RyaWN0TGFzdEluZGV4T2YgZnJvbSAnLi9fc3RyaWN0TGFzdEluZGV4T2YuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAqIGBhcnJheWAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAqIC8vID0+IDNcbiAqXG4gKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gKiAvLyA9PiAxXG4gKi9cbmZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgIGluZGV4ID0gaW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKSA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgaW5kZXgsIHRydWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0SW5kZXhPZjtcbiIsImltcG9ydCBjcmVhdGVDb21wb3VuZGVyIGZyb20gJy4vX2NyZWF0ZUNvbXBvdW5kZXIuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBzcGFjZSBzZXBhcmF0ZWQgd29yZHMsIHRvIGxvd2VyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7XG4gKiAvLyA9PiAnZm9vIGJhcidcbiAqXG4gKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7XG4gKiAvLyA9PiAnZm9vIGJhcidcbiAqXG4gKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18nKTtcbiAqIC8vID0+ICdmb28gYmFyJ1xuICovXG52YXIgbG93ZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbG93ZXJDYXNlO1xuIiwiaW1wb3J0IGNyZWF0ZUNhc2VGaXJzdCBmcm9tICcuL19jcmVhdGVDYXNlRmlyc3QuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gbG93ZXIgY2FzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sb3dlckZpcnN0KCdGcmVkJyk7XG4gKiAvLyA9PiAnZnJlZCdcbiAqXG4gKiBfLmxvd2VyRmlyc3QoJ0ZSRUQnKTtcbiAqIC8vID0+ICdmUkVEJ1xuICovXG52YXIgbG93ZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG93ZXJGaXJzdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubHRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VMdDtcbiIsImltcG9ydCBiYXNlTHQgZnJvbSAnLi9fYmFzZUx0LmpzJztcbmltcG9ydCBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uIGZyb20gJy4vX2NyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy45LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBzZWUgXy5ndFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmx0KDEsIDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8ubHQoMywgMyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8ubHQoMywgMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7XG5cbmV4cG9ydCBkZWZhdWx0IGx0O1xuIiwiaW1wb3J0IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24gZnJvbSAnLi9fY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbi5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjkuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICogQHNlZSBfLmd0ZVxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmx0ZSgxLCAzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmx0ZSgzLCAzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmx0ZSgzLCAxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBsdGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPD0gb3RoZXI7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbHRlO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLm1hcFZhbHVlc2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIHZhbHVlcyBhcyBgb2JqZWN0YCBhbmQga2V5cyBnZW5lcmF0ZWQgYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlXG4gKiBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy44LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICogQHNlZSBfLm1hcFZhbHVlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIHJldHVybiBrZXkgKyB2YWx1ZTtcbiAqIH0pO1xuICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAqL1xuZnVuY3Rpb24gbWFwS2V5cyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpLCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBLZXlzO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXG4gKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gKiBAc2VlIF8ubWFwS2V5c1xuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICogfTtcbiAqXG4gKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBWYWx1ZXM7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXMgZnJvbSAnLi9fYmFzZU1hdGNoZXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAqIG9iamVjdCBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudFxuICogcHJvcGVydHkgdmFsdWVzLCBlbHNlIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uaXNNYXRjaGAgd2l0aCBgc291cmNlYFxuICogcGFydGlhbGx5IGFwcGxpZWQuXG4gKlxuICogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWBcbiAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSxcbiAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAqIF07XG4gKlxuICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICogLy8gPT4gW3sgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XVxuICovXG5mdW5jdGlvbiBtYXRjaGVzKHNvdXJjZSkge1xuICByZXR1cm4gYmFzZU1hdGNoZXMoYmFzZUNsb25lKHNvdXJjZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXM7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0aGVcbiAqIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdCB0byBgc3JjVmFsdWVgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZVxuICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3RcbiAqIGBzcmNWYWx1ZWAgdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWVcbiAqIGBfLmlzRXF1YWxgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4yLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gKiAgIHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gKiBdO1xuICpcbiAqIF8uZmluZChvYmplY3RzLCBfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDQpKTtcbiAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIENMT05FX0RFRVBfRkxBRykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVzUHJvcGVydHk7XG4iLCJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgOiBjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKVxuICAgICAgICApKSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRXh0cmVtdW07XG4iLCJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUd0IGZyb20gJy4vX2Jhc2VHdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gOFxuICpcbiAqIF8ubWF4KFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlR3QpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1heDtcbiIsImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlR3QgZnJvbSAnLi9fYmFzZUd0LmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1heGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAqXG4gKiBfLm1heEJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gKiAvLyA9PiB7ICduJzogMiB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1heEJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiB7ICduJzogMiB9XG4gKi9cbmZ1bmN0aW9uIG1heEJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXhCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc3VtYCBhbmQgYF8uc3VtQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICovXG5mdW5jdGlvbiBiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBjdXJyZW50ID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdKTtcbiAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGN1cnJlbnQgOiAocmVzdWx0ICsgY3VycmVudCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTdW07XG4iLCJpbXBvcnQgYmFzZVN1bSBmcm9tICcuL19iYXNlU3VtLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVhbmAgYW5kIGBfLm1lYW5CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICovXG5mdW5jdGlvbiBiYXNlTWVhbihhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gKGJhc2VTdW0oYXJyYXksIGl0ZXJhdGVlKSAvIGxlbmd0aCkgOiBOQU47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNZWFuO1xuIiwiaW1wb3J0IGJhc2VNZWFuIGZyb20gJy4vX2Jhc2VNZWFuLmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1lYW4oWzQsIDIsIDgsIDZdKTtcbiAqIC8vID0+IDVcbiAqL1xuZnVuY3Rpb24gbWVhbihhcnJheSkge1xuICByZXR1cm4gYmFzZU1lYW4oYXJyYXksIGlkZW50aXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVhbjtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTWVhbiBmcm9tICcuL19iYXNlTWVhbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZWFuYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBhdmVyYWdlZC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC43LjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gKlxuICogXy5tZWFuQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAqIC8vID0+IDVcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWVhbkJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIG1lYW5CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVhbkJ5O1xuIiwiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlO1xuIiwiaW1wb3J0IGJhc2VJbnZva2UgZnJvbSAnLi9fYmFzZUludm9rZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDEpIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLm1ldGhvZCgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoWydhJywgJ2InXSkpO1xuICogLy8gPT4gWzIsIDFdXG4gKi9cbnZhciBtZXRob2QgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICB9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZDtcbiIsImltcG9ydCBiYXNlSW52b2tlIGZyb20gJy4vX2Jhc2VJbnZva2UuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWV0aG9kYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAqIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gXy50aW1lcygzLCBfLmNvbnN0YW50KSxcbiAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAqXG4gKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICogLy8gPT4gWzIsIDBdXG4gKlxuICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICogLy8gPT4gWzIsIDBdXG4gKi9cbnZhciBtZXRob2RPZiA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncyk7XG4gIH07XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kT2Y7XG4iLCJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUx0IGZyb20gJy4vX2Jhc2VMdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMlxuICpcbiAqIF8ubWluKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbjtcbiIsImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTHQgZnJvbSAnLi9fYmFzZUx0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1pbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAqXG4gKiBfLm1pbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gKiAvLyA9PiB7ICduJzogMSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1pbkJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiB7ICduJzogMSB9XG4gKi9cbmZ1bmN0aW9uIG1pbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtaW5CeTtcbiIsImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBiYXNlRnVuY3Rpb25zIGZyb20gJy4vX2Jhc2VGdW5jdGlvbnMuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQWRkcyBhbGwgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2VcbiAqIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LiBJZiBgb2JqZWN0YCBpcyBhIGZ1bmN0aW9uLCB0aGVuIG1ldGhvZHNcbiAqIGFyZSBhZGRlZCB0byBpdHMgcHJvdG90eXBlIGFzIHdlbGwuXG4gKlxuICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gKiBhdm9pZCBjb25mbGljdHMgY2F1c2VkIGJ5IG1vZGlmeWluZyB0aGUgb3JpZ2luYWwuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBbb2JqZWN0PWxvZGFzaF0gVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBmdW5jdGlvbnMgdG8gYWRkLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNoYWluPXRydWVdIFNwZWNpZnkgd2hldGhlciBtaXhpbnMgYXJlIGNoYWluYWJsZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAqICAgcmV0dXJuIF8uZmlsdGVyKHN0cmluZywgZnVuY3Rpb24odikge1xuICogICAgIHJldHVybiAvW2FlaW91XS9pLnRlc3Qodik7XG4gKiAgIH0pO1xuICogfVxuICpcbiAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICogXy52b3dlbHMoJ2ZyZWQnKTtcbiAqIC8vID0+IFsnZSddXG4gKlxuICogXygnZnJlZCcpLnZvd2VscygpLnZhbHVlKCk7XG4gKiAvLyA9PiBbJ2UnXVxuICpcbiAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0sIHsgJ2NoYWluJzogZmFsc2UgfSk7XG4gKiBfKCdmcmVkJykudm93ZWxzKCk7XG4gKiAvLyA9PiBbJ2UnXVxuICovXG5mdW5jdGlvbiBtaXhpbihvYmplY3QsIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcyk7XG5cbiAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHx8ICEhb3B0aW9ucy5jaGFpbixcbiAgICAgIGlzRnVuYyA9IGlzRnVuY3Rpb24ob2JqZWN0KTtcblxuICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICB2YXIgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcbiAgICBvYmplY3RbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgIG9iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX187XG4gICAgICAgIGlmIChjaGFpbiB8fCBjaGFpbkFsbCkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3QodGhpcy5fX3dyYXBwZWRfXyksXG4gICAgICAgICAgICAgIGFjdGlvbnMgPSByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7XG5cbiAgICAgICAgICBhY3Rpb25zLnB1c2goeyAnZnVuYyc6IGZ1bmMsICdhcmdzJzogYXJndW1lbnRzLCAndGhpc0FyZyc6IG9iamVjdCB9KTtcbiAgICAgICAgICByZXN1bHQuX19jaGFpbl9fID0gY2hhaW5BbGw7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseShvYmplY3QsIGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSwgYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWl4aW47XG4iLCJpbXBvcnQgY3JlYXRlTWF0aE9wZXJhdGlvbiBmcm9tICcuL19jcmVhdGVNYXRoT3BlcmF0aW9uLmpzJztcblxuLyoqXG4gKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNy4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpY2FuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcHJvZHVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5tdWx0aXBseSg2LCA0KTtcbiAqIC8vID0+IDI0XG4gKi9cbnZhciBtdWx0aXBseSA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obXVsdGlwbGllciwgbXVsdGlwbGljYW5kKSB7XG4gIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xufSwgMSk7XG5cbmV4cG9ydCBkZWZhdWx0IG11bHRpcGx5O1xuIiwiLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBgZnVuY2AuIFRoZVxuICogYGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlXG4gKiBjcmVhdGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBwcmVkaWNhdGUgdG8gbmVnYXRlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbmVnYXRlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9XG4gKlxuICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAqIC8vID0+IFsxLCAzLCA1XVxuICovXG5mdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gIGlmICh0eXBlb2YgcHJlZGljYXRlICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5lZ2F0ZTtcbiIsIi8qKlxuICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICB2YXIgZGF0YSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpdGVyYXRvclRvQXJyYXk7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXRlcmF0b3JUb0FycmF5IGZyb20gJy4vX2l0ZXJhdG9yVG9BcnJheS5qcyc7XG5pbXBvcnQgbWFwVG9BcnJheSBmcm9tICcuL19tYXBUb0FycmF5LmpzJztcbmltcG9ydCBzZXRUb0FycmF5IGZyb20gJy4vX3NldFRvQXJyYXkuanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9BcnJheSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogXy50b0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICpcbiAqIF8udG9BcnJheSgxKTtcbiAqIC8vID0+IFtdXG4gKlxuICogXy50b0FycmF5KG51bGwpO1xuICogLy8gPT4gW11cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICB9XG4gIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgcmV0dXJuIGZ1bmModmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0FycmF5O1xuIiwiaW1wb3J0IHRvQXJyYXkgZnJvbSAnLi90b0FycmF5LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21kbi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS5cbiAqXG4gKiBAbmFtZSBuZXh0XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0ZXJhdG9yIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAqXG4gKiB3cmFwcGVkLm5leHQoKTtcbiAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9XG4gKlxuICogd3JhcHBlZC5uZXh0KCk7XG4gKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfVxuICpcbiAqIHdyYXBwZWQubmV4dCgpO1xuICogLy8gPT4geyAnZG9uZSc6IHRydWUsICd2YWx1ZSc6IHVuZGVmaW5lZCB9XG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJOZXh0KCkge1xuICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9fdmFsdWVzX18gPSB0b0FycmF5KHRoaXMudmFsdWUoKSk7XG4gIH1cbiAgdmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLFxuICAgICAgdmFsdWUgPSBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO1xuXG4gIHJldHVybiB7ICdkb25lJzogZG9uZSwgJ3ZhbHVlJzogdmFsdWUgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcHBlck5leHQ7XG4iLCJpbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBudGggZWxlbWVudCBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlTnRoKGFycmF5LCBuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICByZXR1cm4gaXNJbmRleChuLCBsZW5ndGgpID8gYXJyYXlbbl0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VOdGg7XG4iLCJpbXBvcnQgYmFzZU50aCBmcm9tICcuL19iYXNlTnRoLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIG9mIGBhcnJheWAuIElmIGBuYCBpcyBuZWdhdGl2ZSwgdGhlIG50aFxuICogZWxlbWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjExLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gKlxuICogXy5udGgoYXJyYXksIDEpO1xuICogLy8gPT4gJ2InXG4gKlxuICogXy5udGgoYXJyYXksIC0yKTtcbiAqIC8vID0+ICdjJztcbiAqL1xuZnVuY3Rpb24gbnRoKGFycmF5LCBuKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VOdGgoYXJyYXksIHRvSW50ZWdlcihuKSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG50aDtcbiIsImltcG9ydCBiYXNlTnRoIGZyb20gJy4vX2Jhc2VOdGguanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IGBuYC4gSWYgYG5gIGlzIG5lZ2F0aXZlLFxuICogdGhlIG50aCBhcmd1bWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHRvIHJldHVybi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTtcbiAqIGZ1bmMoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAqIC8vID0+ICdiJ1xuICpcbiAqIHZhciBmdW5jID0gXy5udGhBcmcoLTIpO1xuICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICogLy8gPT4gJ2MnXG4gKi9cbmZ1bmN0aW9uIG50aEFyZyhuKSB7XG4gIG4gPSB0b0ludGVnZXIobik7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgcmV0dXJuIGJhc2VOdGgoYXJncywgbik7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBudGhBcmc7XG4iLCJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcbmltcG9ydCBwYXJlbnQgZnJvbSAnLi9fcGFyZW50LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuc2V0O1xuIiwiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tT21pdENsb25lO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcbmltcG9ydCBiYXNlVW5zZXQgZnJvbSAnLi9fYmFzZVVuc2V0LmpzJztcbmltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjdXN0b21PbWl0Q2xvbmUgZnJvbSAnLi9fY3VzdG9tT21pdENsb25lLmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgb21pdDtcbiIsImltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgbmVzdGVkID0gb2JqZWN0O1xuXG4gIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKSxcbiAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmIChpbmRleCAhPSBsYXN0SW5kZXgpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldO1xuICAgICAgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwga2V5LCBuZXN0ZWQpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSlcbiAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgOiAoaXNJbmRleChwYXRoW2luZGV4ICsgMV0pID8gW10gOiB7fSk7XG4gICAgICB9XG4gICAgfVxuICAgIGFzc2lnblZhbHVlKG5lc3RlZCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgbmVzdGVkID0gbmVzdGVkW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldDtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2tCeTtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVBpY2tCeSBmcm9tICcuL19iYXNlUGlja0J5LmpzJztcbmltcG9ydCBnZXRBbGxLZXlzSW4gZnJvbSAnLi9fZ2V0QWxsS2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zXG4gKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5waWNrQnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG5mdW5jdGlvbiBwaWNrQnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHZhciBwcm9wcyA9IGFycmF5TWFwKGdldEFsbEtleXNJbihvYmplY3QpLCBmdW5jdGlvbihwcm9wKSB7XG4gICAgcmV0dXJuIFtwcm9wXTtcbiAgfSk7XG4gIHByZWRpY2F0ZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUpO1xuICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHByb3BzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgIHJldHVybiBwcmVkaWNhdGUodmFsdWUsIHBhdGhbMF0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGlja0J5O1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgcGlja0J5IGZyb20gJy4vcGlja0J5LmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja0J5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2ZcbiAqIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXRcbiAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICogYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0Qnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG5mdW5jdGlvbiBvbWl0Qnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIHBpY2tCeShvYmplY3QsIG5lZ2F0ZShiYXNlSXRlcmF0ZWUocHJlZGljYXRlKSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvbWl0Qnk7XG4iLCJpbXBvcnQgYmVmb3JlIGZyb20gJy4vYmVmb3JlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpcyByZXN0cmljdGVkIHRvIGludm9raW5nIGBmdW5jYCBvbmNlLiBSZXBlYXQgY2FsbHNcbiAqIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiBUaGUgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBpbml0aWFsaXplID0gXy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKTtcbiAqIGluaXRpYWxpemUoKTtcbiAqIGluaXRpYWxpemUoKTtcbiAqIC8vID0+IGBjcmVhdGVBcHBsaWNhdGlvbmAgaXMgaW52b2tlZCBvbmNlXG4gKi9cbmZ1bmN0aW9uIG9uY2UoZnVuYykge1xuICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvbmNlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0QnlgIHdoaWNoIHVzZXMgYGNvbXBhcmVyYCB0byBkZWZpbmUgdGhlXG4gKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNyaXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nXG4gKiB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZXIgVGhlIGZ1bmN0aW9uIHRvIGRlZmluZSBzb3J0IG9yZGVyLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgYXJyYXkuc29ydChjb21wYXJlcik7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGFycmF5W2xlbmd0aF0gPSBhcnJheVtsZW5ndGhdLnZhbHVlO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNvcnRCeTtcbiIsImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqXG4gKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgaWYgKHZhbHVlICE9PSBvdGhlcikge1xuICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgIG90aElzTnVsbCA9IG90aGVyID09PSBudWxsLFxuICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICBpZiAoKCFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sICYmICF2YWxJc1N5bWJvbCAmJiB2YWx1ZSA+IG90aGVyKSB8fFxuICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgKCF2YWxJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgIChvdGhJc051bGwgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wYXJlQXNjZW5kaW5nO1xuIiwiaW1wb3J0IGNvbXBhcmVBc2NlbmRpbmcgZnJvbSAnLi9fY29tcGFyZUFzY2VuZGluZy5qcyc7XG5cbi8qKlxuICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAqXG4gKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICogb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBvYmpDcml0ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSxcbiAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICBsZW5ndGggPSBvYmpDcml0ZXJpYS5sZW5ndGgsXG4gICAgICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICByZXR1cm4gcmVzdWx0ICogKG9yZGVyID09ICdkZXNjJyA/IC0xIDogMSk7XG4gICAgfVxuICB9XG4gIC8vIEZpeGVzIGFuIGBBcnJheSNzb3J0YCBidWcgaW4gdGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBhcHBsaWNhdGlvbnNcbiAgLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3JcbiAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gIC8vXG4gIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gIC8vIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05MCBmb3IgbW9yZSBkZXRhaWxzLlxuICByZXR1cm4gb2JqZWN0LmluZGV4IC0gb3RoZXIuaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhcmVNdWx0aXBsZTtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZU1hcCBmcm9tICcuL19iYXNlTWFwLmpzJztcbmltcG9ydCBiYXNlU29ydEJ5IGZyb20gJy4vX2Jhc2VTb3J0QnkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvbXBhcmVNdWx0aXBsZSBmcm9tICcuL19jb21wYXJlTXVsdGlwbGUuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBvcmRlcnMgVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycykge1xuICB2YXIgaW5kZXggPSAtMTtcbiAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLmxlbmd0aCA/IGl0ZXJhdGVlcyA6IFtpZGVudGl0eV0sIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU9yZGVyQnk7XG4iLCJpbXBvcnQgYmFzZU9yZGVyQnkgZnJvbSAnLi9fYmFzZU9yZGVyQnkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIHNvcnRcbiAqIG9yZGVycyBvZiB0aGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzXG4gKiBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvclxuICogZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtBcnJheVtdfEZ1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzQgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfSxcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICogXTtcbiAqXG4gKiAvLyBTb3J0IGJ5IGB1c2VyYCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKiBfLm9yZGVyQnkodXNlcnMsIFsndXNlcicsICdhZ2UnXSwgWydhc2MnLCAnZGVzYyddKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM2XSwgWydiYXJuZXknLCAzNF0sIFsnZnJlZCcsIDQ4XSwgWydmcmVkJywgNDBdXVxuICovXG5mdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzLCBndWFyZCkge1xuICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmICghaXNBcnJheShpdGVyYXRlZXMpKSB7XG4gICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdO1xuICB9XG4gIG9yZGVycyA9IGd1YXJkID8gdW5kZWZpbmVkIDogb3JkZXJzO1xuICBpZiAoIWlzQXJyYXkob3JkZXJzKSkge1xuICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgfVxuICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvcmRlckJ5O1xuIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5vdmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgaXRlcmF0ZWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgb3ZlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpIHtcbiAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGl0ZXJhdGVlcykge1xuICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGJhc2VJdGVyYXRlZSkpO1xuICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICB2YXIgdGhpc0FyZyA9IHRoaXM7XG4gICAgICByZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlT3ZlcjtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgY3JlYXRlT3ZlciBmcm9tICcuL19jcmVhdGVPdmVyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBpdGVyYXRlZXNgIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlc1xuICogYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gaW52b2tlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmdW5jID0gXy5vdmVyKFtNYXRoLm1heCwgTWF0aC5taW5dKTtcbiAqXG4gKiBmdW5jKDEsIDIsIDMsIDQpO1xuICogLy8gPT4gWzQsIDFdXG4gKi9cbnZhciBvdmVyID0gY3JlYXRlT3ZlcihhcnJheU1hcCk7XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXI7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuXG4vKipcbiAqIEEgYGJhc2VSZXN0YCBhbGlhcyB3aGljaCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBgaWRlbnRpdHlgIGJ5IG1vZHVsZVxuICogcmVwbGFjZW1lbnQgcGx1Z2lucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0Z1bmN0aW9ufVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG52YXIgY2FzdFJlc3QgPSBiYXNlUmVzdDtcblxuZXhwb3J0IGRlZmF1bHQgY2FzdFJlc3Q7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNhc3RSZXN0IGZyb20gJy4vX2Nhc3RSZXN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudHMgdHJhbnNmb3JtZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDQuMC4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1zPVtfLmlkZW50aXR5XV1cbiAqICBUaGUgYXJndW1lbnQgdHJhbnNmb3Jtcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBkb3VibGVkKG4pIHtcbiAqICAgcmV0dXJuIG4gKiAyO1xuICogfVxuICpcbiAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gKiAgIHJldHVybiBuICogbjtcbiAqIH1cbiAqXG4gKiB2YXIgZnVuYyA9IF8ub3ZlckFyZ3MoZnVuY3Rpb24oeCwgeSkge1xuICogICByZXR1cm4gW3gsIHldO1xuICogfSwgW3NxdWFyZSwgZG91YmxlZF0pO1xuICpcbiAqIGZ1bmMoOSwgMyk7XG4gKiAvLyA9PiBbODEsIDZdXG4gKlxuICogZnVuYygxMCwgNSk7XG4gKiAvLyA9PiBbMTAwLCAxMF1cbiAqL1xudmFyIG92ZXJBcmdzID0gY2FzdFJlc3QoZnVuY3Rpb24oZnVuYywgdHJhbnNmb3Jtcykge1xuICB0cmFuc2Zvcm1zID0gKHRyYW5zZm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSlcbiAgICA/IGFycmF5TWFwKHRyYW5zZm9ybXNbMF0sIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKVxuICAgIDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgZnVuY3NMZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKGFyZ3MubGVuZ3RoLCBmdW5jc0xlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJnc1tpbmRleF0gPSB0cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsIGFyZ3NbaW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIGFyZ3MpO1xuICB9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJncztcbiIsImltcG9ydCBhcnJheUV2ZXJ5IGZyb20gJy4vX2FycmF5RXZlcnkuanMnO1xuaW1wb3J0IGNyZWF0ZU92ZXIgZnJvbSAnLi9fY3JlYXRlT3Zlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYWxsKiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmdW5jID0gXy5vdmVyRXZlcnkoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gKlxuICogZnVuYygnMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGZ1bmMobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGZ1bmMoTmFOKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBvdmVyRXZlcnkgPSBjcmVhdGVPdmVyKGFycmF5RXZlcnkpO1xuXG5leHBvcnQgZGVmYXVsdCBvdmVyRXZlcnk7XG4iLCJpbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgY3JlYXRlT3ZlciBmcm9tICcuL19jcmVhdGVPdmVyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0eV1dXG4gKiAgVGhlIHByZWRpY2F0ZXMgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICpcbiAqIGZ1bmMoJzEnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBmdW5jKG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGZ1bmMoTmFOKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBvdmVyU29tZSA9IGNyZWF0ZU92ZXIoYXJyYXlTb21lKTtcblxuZXhwb3J0IGRlZmF1bHQgb3ZlclNvbWU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXBlYXRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLCBuKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKCFzdHJpbmcgfHwgbiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgLy8gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4cG9uZW50aWF0aW9uX2J5X3NxdWFyaW5nIGZvciBtb3JlIGRldGFpbHMuXG4gIGRvIHtcbiAgICBpZiAobiAlIDIpIHtcbiAgICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gICAgfVxuICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgaWYgKG4pIHtcbiAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgfVxuICB9IHdoaWxlIChuKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVwZWF0O1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYW4gQVNDSUkgYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gKi9cbnZhciBhc2NpaVNpemUgPSBiYXNlUHJvcGVydHkoJ2xlbmd0aCcpO1xuXG5leHBvcnQgZGVmYXVsdCBhc2NpaVNpemU7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IHJlVW5pY29kZS5sYXN0SW5kZXggPSAwO1xuICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICsrcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVTaXplO1xuIiwiaW1wb3J0IGFzY2lpU2l6ZSBmcm9tICcuL19hc2NpaVNpemUuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgdW5pY29kZVNpemUgZnJvbSAnLi9fdW5pY29kZVNpemUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiBzdHJpbmdTaXplKHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlU2l6ZShzdHJpbmcpXG4gICAgOiBhc2NpaVNpemUoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5nU2l6ZTtcbiIsImltcG9ydCBiYXNlUmVwZWF0IGZyb20gJy4vX2Jhc2VSZXBlYXQuanMnO1xuaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgc3RyaW5nU2l6ZSBmcm9tICcuL19zdHJpbmdTaXplLmpzJztcbmltcG9ydCBzdHJpbmdUb0FycmF5IGZyb20gJy4vX3N0cmluZ1RvQXJyYXkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbDtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYCBiYXNlZCBvbiBgbGVuZ3RoYC4gVGhlIGBjaGFyc2Agc3RyaW5nXG4gKiBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykge1xuICBjaGFycyA9IGNoYXJzID09PSB1bmRlZmluZWQgPyAnICcgOiBiYXNlVG9TdHJpbmcoY2hhcnMpO1xuXG4gIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgaWYgKGNoYXJzTGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjaGFyc0xlbmd0aCA/IGJhc2VSZXBlYXQoY2hhcnMsIGxlbmd0aCkgOiBjaGFycztcbiAgfVxuICB2YXIgcmVzdWx0ID0gYmFzZVJlcGVhdChjaGFycywgbmF0aXZlQ2VpbChsZW5ndGggLyBzdHJpbmdTaXplKGNoYXJzKSkpO1xuICByZXR1cm4gaGFzVW5pY29kZShjaGFycylcbiAgICA/IGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHJlc3VsdCksIDAsIGxlbmd0aCkuam9pbignJylcbiAgICA6IHJlc3VsdC5zbGljZSgwLCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQYWRkaW5nO1xuIiwiaW1wb3J0IGNyZWF0ZVBhZGRpbmcgZnJvbSAnLi9fY3JlYXRlUGFkZGluZy5qcyc7XG5pbXBvcnQgc3RyaW5nU2l6ZSBmcm9tICcuL19zdHJpbmdTaXplLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3I7XG5cbi8qKlxuICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gKiBQYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGNhbid0IGJlIGV2ZW5seSBkaXZpZGVkIGJ5IGBsZW5ndGhgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucGFkKCdhYmMnLCA4KTtcbiAqIC8vID0+ICcgIGFiYyAgICdcbiAqXG4gKiBfLnBhZCgnYWJjJywgOCwgJ18tJyk7XG4gKiAvLyA9PiAnXy1hYmNfLV8nXG4gKlxuICogXy5wYWQoJ2FiYycsIDMpO1xuICogLy8gPT4gJ2FiYydcbiAqL1xuZnVuY3Rpb24gcGFkKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgaWYgKCFsZW5ndGggfHwgc3RyTGVuZ3RoID49IGxlbmd0aCkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjtcbiAgcmV0dXJuIChcbiAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUZsb29yKG1pZCksIGNoYXJzKSArXG4gICAgc3RyaW5nICtcbiAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUNlaWwobWlkKSwgY2hhcnMpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhZDtcbiIsImltcG9ydCBjcmVhdGVQYWRkaW5nIGZyb20gJy4vX2NyZWF0ZVBhZGRpbmcuanMnO1xuaW1wb3J0IHN0cmluZ1NpemUgZnJvbSAnLi9fc3RyaW5nU2l6ZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSByaWdodCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5wYWRFbmQoJ2FiYycsIDYpO1xuICogLy8gPT4gJ2FiYyAgICdcbiAqXG4gKiBfLnBhZEVuZCgnYWJjJywgNiwgJ18tJyk7XG4gKiAvLyA9PiAnYWJjXy1fJ1xuICpcbiAqIF8ucGFkRW5kKCdhYmMnLCAzKTtcbiAqIC8vID0+ICdhYmMnXG4gKi9cbmZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICA/IChzdHJpbmcgKyBjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYWRFbmQ7XG4iLCJpbXBvcnQgY3JlYXRlUGFkZGluZyBmcm9tICcuL19jcmVhdGVQYWRkaW5nLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5wYWRTdGFydCgnYWJjJywgNik7XG4gKiAvLyA9PiAnICAgYWJjJ1xuICpcbiAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpO1xuICogLy8gPT4gJ18tX2FiYydcbiAqXG4gKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTtcbiAqIC8vID0+ICdhYmMnXG4gKi9cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgID8gKGNyZWF0ZVBhZGRpbmcobGVuZ3RoIC0gc3RyTGVuZ3RoLCBjaGFycykgKyBzdHJpbmcpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhZFN0YXJ0O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlUGFyc2VJbnQgPSByb290LnBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGludGVnZXIgb2YgdGhlIHNwZWNpZmllZCByYWRpeC4gSWYgYHJhZGl4YCBpc1xuICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGFcbiAqIGhleGFkZWNpbWFsLCBpbiB3aGljaCBjYXNlIGEgYHJhZGl4YCBvZiBgMTZgIGlzIHVzZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZVxuICogW0VTNSBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuMS4yLjIpIG9mIGBwYXJzZUludGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4PTEwXSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucGFyc2VJbnQoJzA4Jyk7XG4gKiAvLyA9PiA4XG4gKlxuICogXy5tYXAoWyc2JywgJzA4JywgJzEwJ10sIF8ucGFyc2VJbnQpO1xuICogLy8gPT4gWzYsIDgsIDEwXVxuICovXG5mdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4LCBndWFyZCkge1xuICBpZiAoZ3VhcmQgfHwgcmFkaXggPT0gbnVsbCkge1xuICAgIHJhZGl4ID0gMDtcbiAgfSBlbHNlIGlmIChyYWRpeCkge1xuICAgIHJhZGl4ID0gK3JhZGl4O1xuICB9XG4gIHJldHVybiBuYXRpdmVQYXJzZUludCh0b1N0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKSwgcmFkaXggfHwgMCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlSW50O1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBjcmVhdGVXcmFwIGZyb20gJy4vX2NyZWF0ZVdyYXAuanMnO1xuaW1wb3J0IGdldEhvbGRlciBmcm9tICcuL19nZXRIb2xkZXIuanMnO1xuaW1wb3J0IHJlcGxhY2VIb2xkZXJzIGZyb20gJy4vX3JlcGxhY2VIb2xkZXJzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnRpYWw7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5pbXBvcnQgZ2V0SG9sZGVyIGZyb20gJy4vX2dldEhvbGRlci5qcyc7XG5pbXBvcnQgcmVwbGFjZUhvbGRlcnMgZnJvbSAnLi9fcmVwbGFjZUhvbGRlcnMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucGFydGlhbGAgZXhjZXB0IHRoYXQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gKiBhcmUgYXBwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gKiB9XG4gKlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnZnJlZCcpO1xuICogZ3JlZXRGcmVkKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQnXG4gKlxuICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnaGVsbG8nLCBfKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICovXG52YXIgcGFydGlhbFJpZ2h0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO1xuICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG59KTtcblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnRpYWxSaWdodDtcbiIsImltcG9ydCBjcmVhdGVBZ2dyZWdhdG9yIGZyb20gJy4vX2NyZWF0ZUFnZ3JlZ2F0b3IuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciwgdGhlIHNlY29uZCBvZiB3aGljaFxuICogY29udGFpbnMgZWxlbWVudHMgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkgZm9yLiBUaGUgcHJlZGljYXRlIGlzXG4gKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8ucGFydGl0aW9uKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5wYXJ0aXRpb24odXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucGFydGl0aW9uKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAncGViYmxlcyddLCBbJ2ZyZWQnXV1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucGFydGl0aW9uKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAqL1xudmFyIHBhcnRpdGlvbiA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG59LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTtcblxuZXhwb3J0IGRlZmF1bHQgcGFydGl0aW9uO1xuIiwiaW1wb3J0IGJhc2VQaWNrQnkgZnJvbSAnLi9fYmFzZVBpY2tCeS5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gKiBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgIHJldHVybiBoYXNJbihvYmplY3QsIHBhdGgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2s7XG4iLCJpbXBvcnQgYmFzZVBpY2sgZnJvbSAnLi9fYmFzZVBpY2suanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG52YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrO1xuIiwiaW1wb3J0IGJhc2VMb2Rhc2ggZnJvbSAnLi9fYmFzZUxvZGFzaC5qcyc7XG5pbXBvcnQgd3JhcHBlckNsb25lIGZyb20gJy4vX3dyYXBwZXJDbG9uZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICpcbiAqIEBuYW1lIHBsYW50XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSkubWFwKHNxdWFyZSk7XG4gKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7XG4gKlxuICogb3RoZXIudmFsdWUoKTtcbiAqIC8vID0+IFs5LCAxNl1cbiAqXG4gKiB3cmFwcGVkLnZhbHVlKCk7XG4gKiAvLyA9PiBbMSwgNF1cbiAqL1xuZnVuY3Rpb24gd3JhcHBlclBsYW50KHZhbHVlKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBwYXJlbnQgPSB0aGlzO1xuXG4gIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKSB7XG4gICAgdmFyIGNsb25lID0gd3JhcHBlckNsb25lKHBhcmVudCk7XG4gICAgY2xvbmUuX19pbmRleF9fID0gMDtcbiAgICBjbG9uZS5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGNsb25lO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXMgPSBjbG9uZTtcbiAgICBwYXJlbnQgPSBwYXJlbnQuX193cmFwcGVkX187XG4gIH1cbiAgcHJldmlvdXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcHBlclBsYW50O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICogdGhlIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFswLCAxLCAyXSxcbiAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAqXG4gKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLnByb3BlcnR5T2Yob2JqZWN0KSk7XG4gKiAvLyA9PiBbMiwgMF1cbiAqXG4gKiBfLm1hcChbWydhJywgJzInXSwgWydjJywgJzAnXV0sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAqIC8vID0+IFsyLCAwXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHlPZjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlSW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2ZXaXRoKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcihhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJbmRleE9mV2l0aDtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUluZGV4T2YgZnJvbSAnLi9fYmFzZUluZGV4T2YuanMnO1xuaW1wb3J0IGJhc2VJbmRleE9mV2l0aCBmcm9tICcuL19iYXNlSW5kZXhPZldpdGguanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEFsbEJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleE9mID0gY29tcGFyYXRvciA/IGJhc2VJbmRleE9mV2l0aCA6IGJhc2VJbmRleE9mLFxuICAgICAgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBzZWVuID0gYXJyYXk7XG5cbiAgaWYgKGFycmF5ID09PSB2YWx1ZXMpIHtcbiAgICB2YWx1ZXMgPSBjb3B5QXJyYXkodmFsdWVzKTtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICBzZWVuID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IDAsXG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgd2hpbGUgKChmcm9tSW5kZXggPSBpbmRleE9mKHNlZW4sIGNvbXB1dGVkLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpKSA+IC0xKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gYXJyYXkpIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoc2VlbiwgZnJvbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBmcm9tSW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQdWxsQWxsO1xuIiwiaW1wb3J0IGJhc2VQdWxsQWxsIGZyb20gJy4vX2Jhc2VQdWxsQWxsLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIHJlbW92ZS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAqXG4gKiBfLnB1bGxBbGwoYXJyYXksIFsnYScsICdjJ10pO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWydiJywgJ2InXVxuICovXG5mdW5jdGlvbiBwdWxsQWxsKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzKVxuICAgIDogYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHB1bGxBbGw7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHB1bGxBbGwgZnJvbSAnLi9wdWxsQWxsLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBnaXZlbiB2YWx1ZXMgZnJvbSBgYXJyYXlgIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnJlbW92ZWBcbiAqIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHByZWRpY2F0ZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAqXG4gKiBfLnB1bGwoYXJyYXksICdhJywgJ2MnKTtcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsnYicsICdiJ11cbiAqL1xudmFyIHB1bGwgPSBiYXNlUmVzdChwdWxsQWxsKTtcblxuZXhwb3J0IGRlZmF1bHQgcHVsbDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUHVsbEFsbCBmcm9tICcuL19iYXNlUHVsbEFsbC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIGFuZCBgdmFsdWVzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VCeWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH0sIHsgJ3gnOiAzIH0sIHsgJ3gnOiAxIH1dO1xuICpcbiAqIF8ucHVsbEFsbEJ5KGFycmF5LCBbeyAneCc6IDEgfSwgeyAneCc6IDMgfV0sICd4Jyk7XG4gKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAqL1xuZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICA6IGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBwdWxsQWxsQnk7XG4iLCJpbXBvcnQgYmFzZVB1bGxBbGwgZnJvbSAnLi9fYmFzZVB1bGxBbGwuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgY29tcGFyYXRvciBpc1xuICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlV2l0aGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNi4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMywgJ3knOiA0IH0sIHsgJ3gnOiA1LCAneSc6IDYgfV07XG4gKlxuICogXy5wdWxsQWxsV2l0aChhcnJheSwgW3sgJ3gnOiAzLCAneSc6IDQgfV0sIF8uaXNFcXVhbCk7XG4gKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogNSwgJ3knOiA2IH1dXG4gKi9cbmZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LCB2YWx1ZXMsIGNvbXBhcmF0b3IpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgOiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHVsbEFsbFdpdGg7XG4iLCJpbXBvcnQgYmFzZVVuc2V0IGZyb20gJy4vX2Jhc2VVbnNldC5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gKiBpbmRleGVzIG9yIGNhcHR1cmluZyB0aGUgcmVtb3ZlZCBlbGVtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ZXMgVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgaWYgKGxlbmd0aCA9PSBsYXN0SW5kZXggfHwgaW5kZXggIT09IHByZXZpb3VzKSB7XG4gICAgICB2YXIgcHJldmlvdXMgPSBpbmRleDtcbiAgICAgIGlmIChpc0luZGV4KGluZGV4KSkge1xuICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgaW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZVVuc2V0KGFycmF5LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVB1bGxBdDtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUF0IGZyb20gJy4vX2Jhc2VBdC5qcyc7XG5pbXBvcnQgYmFzZVB1bGxBdCBmcm9tICcuL19iYXNlUHVsbEF0LmpzJztcbmltcG9ydCBjb21wYXJlQXNjZW5kaW5nIGZyb20gJy4vX2NvbXBhcmVBc2NlbmRpbmcuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSBgYXJyYXlgIGNvcnJlc3BvbmRpbmcgdG8gYGluZGV4ZXNgIGFuZCByZXR1cm5zIGFuXG4gKiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8uYXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gW2luZGV4ZXNdIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICogdmFyIHB1bGxlZCA9IF8ucHVsbEF0KGFycmF5LCBbMSwgM10pO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsnYScsICdjJ11cbiAqXG4gKiBjb25zb2xlLmxvZyhwdWxsZWQpO1xuICogLy8gPT4gWydiJywgJ2QnXVxuICovXG52YXIgcHVsbEF0ID0gZmxhdFJlc3QoZnVuY3Rpb24oYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcblxuICBiYXNlUHVsbEF0KGFycmF5LCBhcnJheU1hcChpbmRleGVzLCBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiBpc0luZGV4KGluZGV4LCBsZW5ndGgpID8gK2luZGV4IDogaW5kZXg7XG4gIH0pLnNvcnQoY29tcGFyZUFzY2VuZGluZykpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcHVsbEF0O1xuIiwiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5kb21gIHdpdGhvdXQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nXG4gKiBmbG9hdGluZy1wb2ludCBudW1iZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbG93ZXIgVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7XG4gIHJldHVybiBsb3dlciArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSYW5kb207XG4iLCJpbXBvcnQgYmFzZVJhbmRvbSBmcm9tICcuL19iYXNlUmFuZG9tLmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5pbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgbmF0aXZlUmFuZG9tID0gTWF0aC5yYW5kb207XG5cbi8qKlxuICogUHJvZHVjZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAqIElmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGEgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCB0aGUgZ2l2ZW4gbnVtYmVyXG4gKiBpcyByZXR1cm5lZC4gSWYgYGZsb2F0aW5nYCBpcyBgdHJ1ZWAsIG9yIGVpdGhlciBgbG93ZXJgIG9yIGB1cHBlcmAgYXJlXG4gKiBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC43LjBcbiAqIEBjYXRlZ29yeSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXI9MF0gVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IFt1cHBlcj0xXSBUaGUgdXBwZXIgYm91bmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmbG9hdGluZ10gU3BlY2lmeSByZXR1cm5pbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJhbmRvbSgwLCA1KTtcbiAqIC8vID0+IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gKlxuICogXy5yYW5kb20oNSk7XG4gKiAvLyA9PiBhbHNvIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gKlxuICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIDVcbiAqXG4gKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDEuMiBhbmQgNS4yXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbShsb3dlciwgdXBwZXIsIGZsb2F0aW5nKSB7XG4gIGlmIChmbG9hdGluZyAmJiB0eXBlb2YgZmxvYXRpbmcgIT0gJ2Jvb2xlYW4nICYmIGlzSXRlcmF0ZWVDYWxsKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpKSB7XG4gICAgdXBwZXIgPSBmbG9hdGluZyA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZmxvYXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgdXBwZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBmbG9hdGluZyA9IHVwcGVyO1xuICAgICAgdXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBsb3dlciA9PSAnYm9vbGVhbicpIHtcbiAgICAgIGZsb2F0aW5nID0gbG93ZXI7XG4gICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgaWYgKGxvd2VyID09PSB1bmRlZmluZWQgJiYgdXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGxvd2VyID0gMDtcbiAgICB1cHBlciA9IDE7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG93ZXIgPSB0b0Zpbml0ZShsb3dlcik7XG4gICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwcGVyID0gbG93ZXI7XG4gICAgICBsb3dlciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwcGVyID0gdG9GaW5pdGUodXBwZXIpO1xuICAgIH1cbiAgfVxuICBpZiAobG93ZXIgPiB1cHBlcikge1xuICAgIHZhciB0ZW1wID0gbG93ZXI7XG4gICAgbG93ZXIgPSB1cHBlcjtcbiAgICB1cHBlciA9IHRlbXA7XG4gIH1cbiAgaWYgKGZsb2F0aW5nIHx8IGxvd2VyICUgMSB8fCB1cHBlciAlIDEpIHtcbiAgICB2YXIgcmFuZCA9IG5hdGl2ZVJhbmRvbSgpO1xuICAgIHJldHVybiBuYXRpdmVNaW4obG93ZXIgKyAocmFuZCAqICh1cHBlciAtIGxvd2VyICsgZnJlZVBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSksIHVwcGVyKTtcbiAgfVxuICByZXR1cm4gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByYW5kb207XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmFuZ2U7XG4iLCJpbXBvcnQgYmFzZVJhbmdlIGZyb20gJy4vX2Jhc2VSYW5nZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvRmluaXRlIGZyb20gJy4vdG9GaW5pdGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJhbmdlO1xuIiwiaW1wb3J0IGNyZWF0ZVJhbmdlIGZyb20gJy4vX2NyZWF0ZVJhbmdlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgKHBvc2l0aXZlIGFuZC9vciBuZWdhdGl2ZSkgcHJvZ3Jlc3NpbmcgZnJvbVxuICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAqIGBzdGFydGAgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYW4gYGVuZGAgb3IgYHN0ZXBgLiBJZiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLFxuICogaXQncyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICpcbiAqICoqTm90ZToqKiBKYXZhU2NyaXB0IGZvbGxvd3MgdGhlIElFRUUtNzU0IHN0YW5kYXJkIGZvciByZXNvbHZpbmdcbiAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aGljaCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucmFuZ2UoNCk7XG4gKiAvLyA9PiBbMCwgMSwgMiwgM11cbiAqXG4gKiBfLnJhbmdlKC00KTtcbiAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICpcbiAqIF8ucmFuZ2UoMSwgNSk7XG4gKiAvLyA9PiBbMSwgMiwgMywgNF1cbiAqXG4gKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAqIC8vID0+IFswLCA1LCAxMCwgMTVdXG4gKlxuICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA0LCAwKTtcbiAqIC8vID0+IFsxLCAxLCAxXVxuICpcbiAqIF8ucmFuZ2UoMCk7XG4gKiAvLyA9PiBbXVxuICovXG52YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG5leHBvcnQgZGVmYXVsdCByYW5nZTtcbiIsImltcG9ydCBjcmVhdGVSYW5nZSBmcm9tICcuL19jcmVhdGVSYW5nZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICogZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucmFuZ2VSaWdodCg0KTtcbiAqIC8vID0+IFszLCAyLCAxLCAwXVxuICpcbiAqIF8ucmFuZ2VSaWdodCgtNCk7XG4gKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAqXG4gKiBfLnJhbmdlUmlnaHQoMSwgNSk7XG4gKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAqXG4gKiBfLnJhbmdlUmlnaHQoMCwgMjAsIDUpO1xuICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAqXG4gKiBfLnJhbmdlUmlnaHQoMCwgLTQsIC0xKTtcbiAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICpcbiAqIF8ucmFuZ2VSaWdodCgxLCA0LCAwKTtcbiAqIC8vID0+IFsxLCAxLCAxXVxuICpcbiAqIF8ucmFuZ2VSaWdodCgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZVJpZ2h0ID0gY3JlYXRlUmFuZ2UodHJ1ZSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbmdlUmlnaHQ7XG4iLCJpbXBvcnQgY3JlYXRlV3JhcCBmcm9tICcuL19jcmVhdGVXcmFwLmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAqIHRvIHRoZSBzcGVjaWZpZWQgYGluZGV4ZXNgIHdoZXJlIHRoZSBhcmd1bWVudCB2YWx1ZSBhdCB0aGUgZmlyc3QgaW5kZXggaXNcbiAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAqIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlYXJyYW5nZSBhcmd1bWVudHMgZm9yLlxuICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJndW1lbnQgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICogICByZXR1cm4gW2EsIGIsIGNdO1xuICogfSwgWzIsIDAsIDFdKTtcbiAqXG4gKiByZWFyZ2VkKCdiJywgJ2MnLCAnYScpXG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqL1xudmFyIHJlYXJnID0gZmxhdFJlc3QoZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1JFQVJHX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGluZGV4ZXMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJlYXJnO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZWR1Y2VgIGFuZCBgXy5yZWR1Y2VSaWdodGAsIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gIHVzaW5nIGBlYWNoRnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBpbml0QWNjdW0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IG9mXG4gKiAgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGVhY2hGdW5jKSB7XG4gIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGFjY3VtdWxhdG9yID0gaW5pdEFjY3VtXG4gICAgICA/IChpbml0QWNjdW0gPSBmYWxzZSwgdmFsdWUpXG4gICAgICA6IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVkdWNlO1xuIiwiaW1wb3J0IGFycmF5UmVkdWNlIGZyb20gJy4vX2FycmF5UmVkdWNlLmpzJztcbmltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlZHVjZSBmcm9tICcuL19iYXNlUmVkdWNlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogUmVkdWNlcyBgY29sbGVjdGlvbmAgdG8gYSB2YWx1ZSB3aGljaCBpcyB0aGUgYWNjdW11bGF0ZWQgcmVzdWx0IG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuIElmIGBhY2N1bXVsYXRvcmBcbiAqIGlzIG5vdCBnaXZlbiwgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIGlzIHVzZWQgYXMgdGhlIGluaXRpYWxcbiAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICogKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAqIGBfLnJlZHVjZWAsIGBfLnJlZHVjZVJpZ2h0YCwgYW5kIGBfLnRyYW5zZm9ybWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXNzaWduYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBpbmNsdWRlc2AsIGBtZXJnZWAsIGBvcmRlckJ5YCxcbiAqIGFuZCBgc29ydEJ5YFxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICogICByZXR1cm4gc3VtICsgbjtcbiAqIH0sIDApO1xuICogLy8gPT4gM1xuICpcbiAqIF8ucmVkdWNlKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAqICAgcmV0dXJuIHJlc3VsdDtcbiAqIH0sIHt9KTtcbiAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24gcmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZSA6IGJhc2VSZWR1Y2UsXG4gICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlZHVjZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzXG4gKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UmVkdWNlUmlnaHQoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5Wy0tbGVuZ3RoXTtcbiAgfVxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtsZW5ndGhdLCBsZW5ndGgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5UmVkdWNlUmlnaHQ7XG4iLCJpbXBvcnQgYXJyYXlSZWR1Y2VSaWdodCBmcm9tICcuL19hcnJheVJlZHVjZVJpZ2h0LmpzJztcbmltcG9ydCBiYXNlRWFjaFJpZ2h0IGZyb20gJy4vX2Jhc2VFYWNoUmlnaHQuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZWR1Y2UgZnJvbSAnLi9fYmFzZVJlZHVjZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmVkdWNlYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBzZWUgXy5yZWR1Y2VcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gW1swLCAxXSwgWzIsIDNdLCBbNCwgNV1dO1xuICpcbiAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAqICAgcmV0dXJuIGZsYXR0ZW5lZC5jb25jYXQob3RoZXIpO1xuICogfSwgW10pO1xuICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZVJpZ2h0IDogYmFzZVJlZHVjZSxcbiAgICAgIGluaXRBY2N1bSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzO1xuXG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgNCksIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGJhc2VFYWNoUmlnaHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZWR1Y2VSaWdodDtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbmVnYXRlIGZyb20gJy4vbmVnYXRlLmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gKiB0aGF0IGBwcmVkaWNhdGVgIGRvZXMgKipub3QqKiByZXR1cm4gdHJ1dGh5IGZvci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8uZmlsdGVyXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlamVjdDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUHVsbEF0IGZyb20gJy4vX2Jhc2VQdWxsQXQuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLmZpbHRlcmAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnB1bGxgXG4gKiB0byBwdWxsIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgdmFsdWUuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICogdmFyIGV2ZW5zID0gXy5yZW1vdmUoYXJyYXksIGZ1bmN0aW9uKG4pIHtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gKiAvLyA9PiBbMSwgM11cbiAqXG4gKiBjb25zb2xlLmxvZyhldmVucyk7XG4gKiAvLyA9PiBbMiwgNF1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluZGV4ZXMgPSBbXSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9XG4gIH1cbiAgYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbW92ZTtcbiIsImltcG9ydCBiYXNlUmVwZWF0IGZyb20gJy4vX2Jhc2VSZXBlYXQuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIFJlcGVhdHMgdGhlIGdpdmVuIHN0cmluZyBgbmAgdGltZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJlcGVhdCgnKicsIDMpO1xuICogLy8gPT4gJyoqKidcbiAqXG4gKiBfLnJlcGVhdCgnYWJjJywgMik7XG4gKiAvLyA9PiAnYWJjYWJjJ1xuICpcbiAqIF8ucmVwZWF0KCdhYmMnLCAwKTtcbiAqIC8vID0+ICcnXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7XG4gIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG4sIGd1YXJkKSA6IG4gPT09IHVuZGVmaW5lZCkpIHtcbiAgICBuID0gMTtcbiAgfSBlbHNlIHtcbiAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICB9XG4gIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0cmluZyksIG4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXBlYXQ7XG4iLCJpbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogUmVwbGFjZXMgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGBzdHJpbmdgIHdpdGggYHJlcGxhY2VtZW50YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgU3RyaW5nI3JlcGxhY2VgXShodHRwczovL21kbi5pby9TdHJpbmcvcmVwbGFjZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gcmVwbGFjZW1lbnQgVGhlIG1hdGNoIHJlcGxhY2VtZW50LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJlcGxhY2UoJ0hpIEZyZWQnLCAnRnJlZCcsICdCYXJuZXknKTtcbiAqIC8vID0+ICdIaSBCYXJuZXknXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2UoKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoYXJnc1swXSk7XG5cbiAgcmV0dXJuIGFyZ3MubGVuZ3RoIDwgMyA/IHN0cmluZyA6IHN0cmluZy5yZXBsYWNlKGFyZ3NbMV0sIGFyZ3NbMl0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXBsYWNlO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICogY3JlYXRlZCBmdW5jdGlvbiBhbmQgYXJndW1lbnRzIGZyb20gYHN0YXJ0YCBhbmQgYmV5b25kIHByb3ZpZGVkIGFzXG4gKiBhbiBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gKiBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vbWRuLmlvL3Jlc3RfcGFyYW1ldGVycykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzYXkgPSBfLnJlc3QoZnVuY3Rpb24od2hhdCwgbmFtZXMpIHtcbiAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICogICAgIChfLnNpemUobmFtZXMpID4gMSA/ICcsICYgJyA6ICcnKSArIF8ubGFzdChuYW1lcyk7XG4gKiB9KTtcbiAqXG4gKiBzYXkoJ2hlbGxvJywgJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gcmVzdChmdW5jLCBzdGFydCkge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBzdGFydCA9IHN0YXJ0ID09PSB1bmRlZmluZWQgPyBzdGFydCA6IHRvSW50ZWdlcihzdGFydCk7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jLCBzdGFydCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3Q7XG4iLCJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhXG4gKiBmdW5jdGlvbiBpdCdzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgaXRzIHBhcmVudCBvYmplY3QgYW5kXG4gKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MxJzogMywgJ2MyJzogXy5jb25zdGFudCg0KSB9IH1dIH07XG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMxJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMyJyk7XG4gKiAvLyA9PiA0XG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICpcbiAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsIF8uY29uc3RhbnQoJ2RlZmF1bHQnKSk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gcmVzdWx0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgLy8gRW5zdXJlIHRoZSBsb29wIGlzIGVudGVyZWQgd2hlbiBwYXRoIGlzIGVtcHR5LlxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IDE7XG4gICAgb2JqZWN0ID0gdW5kZWZpbmVkO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3RbdG9LZXkocGF0aFtpbmRleF0pXTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSBsZW5ndGg7XG4gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgb2JqZWN0ID0gaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXN1bHQ7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZVJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7XG5cbi8qKlxuICogUmV2ZXJzZXMgYGFycmF5YCBzbyB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZSBzZWNvbmRcbiAqIGVsZW1lbnQgYmVjb21lcyB0aGUgc2Vjb25kIHRvIGxhc3QsIGFuZCBzbyBvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgIGFuZCBpcyBiYXNlZCBvblxuICogW2BBcnJheSNyZXZlcnNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvcmV2ZXJzZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAqXG4gKiBfLnJldmVyc2UoYXJyYXkpO1xuICogLy8gPT4gWzMsIDIsIDFdXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzMsIDIsIDFdXG4gKi9cbmZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5ID09IG51bGwgPyBhcnJheSA6IG5hdGl2ZVJldmVyc2UuY2FsbChhcnJheSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJldmVyc2U7XG4iLCJpbXBvcnQgY3JlYXRlUm91bmQgZnJvbSAnLi9fY3JlYXRlUm91bmQuanMnO1xuXG4vKipcbiAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjEwLjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucm91bmQoNC4wMDYpO1xuICogLy8gPT4gNFxuICpcbiAqIF8ucm91bmQoNC4wMDYsIDIpO1xuICogLy8gPT4gNC4wMVxuICpcbiAqIF8ucm91bmQoNDA2MCwgLTIpO1xuICogLy8gPT4gNDEwMFxuICovXG52YXIgcm91bmQgPSBjcmVhdGVSb3VuZCgncm91bmQnKTtcblxuZXhwb3J0IGRlZmF1bHQgcm91bmQ7XG4iLCJpbXBvcnQgYmFzZVJhbmRvbSBmcm9tICcuL19iYXNlUmFuZG9tLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2FtcGxlYCBmb3IgYXJyYXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhcnJheVNhbXBsZShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbYmFzZVJhbmRvbSgwLCBsZW5ndGggLSAxKV0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U2FtcGxlO1xuIiwiaW1wb3J0IGFycmF5U2FtcGxlIGZyb20gJy4vX2FycmF5U2FtcGxlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2FtcGxlO1xuIiwiaW1wb3J0IGFycmF5U2FtcGxlIGZyb20gJy4vX2FycmF5U2FtcGxlLmpzJztcbmltcG9ydCBiYXNlU2FtcGxlIGZyb20gJy4vX2Jhc2VTYW1wbGUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBHZXRzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTYW1wbGUgOiBiYXNlU2FtcGxlO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2FtcGxlO1xuIiwiaW1wb3J0IGJhc2VSYW5kb20gZnJvbSAnLi9fYmFzZVJhbmRvbS5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIHdoaWNoIG11dGF0ZXMgYW5kIHNldHMgdGhlIHNpemUgb2YgYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9YXJyYXkubGVuZ3RoXSBUaGUgc2l6ZSBvZiBgYXJyYXlgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICBzaXplID0gc2l6ZSA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogc2l6ZTtcbiAgd2hpbGUgKCsraW5kZXggPCBzaXplKSB7XG4gICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICB2YWx1ZSA9IGFycmF5W3JhbmRdO1xuXG4gICAgYXJyYXlbcmFuZF0gPSBhcnJheVtpbmRleF07XG4gICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG4gIH1cbiAgYXJyYXkubGVuZ3RoID0gc2l6ZTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaHVmZmxlU2VsZjtcbiIsImltcG9ydCBiYXNlQ2xhbXAgZnJvbSAnLi9fYmFzZUNsYW1wLmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBzaHVmZmxlU2VsZiBmcm9tICcuL19zaHVmZmxlU2VsZi5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZVNpemVgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksIG4pIHtcbiAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlTYW1wbGVTaXplO1xuIiwiaW1wb3J0IGJhc2VDbGFtcCBmcm9tICcuL19iYXNlQ2xhbXAuanMnO1xuaW1wb3J0IHNodWZmbGVTZWxmIGZyb20gJy4vX3NodWZmbGVTZWxmLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZVNpemVgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuKSB7XG4gIHZhciBhcnJheSA9IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgcmV0dXJuIHNodWZmbGVTZWxmKGFycmF5LCBiYXNlQ2xhbXAobiwgMCwgYXJyYXkubGVuZ3RoKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTYW1wbGVTaXplO1xuIiwiaW1wb3J0IGFycmF5U2FtcGxlU2l6ZSBmcm9tICcuL19hcnJheVNhbXBsZVNpemUuanMnO1xuaW1wb3J0IGJhc2VTYW1wbGVTaXplIGZyb20gJy4vX2Jhc2VTYW1wbGVTaXplLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogR2V0cyBgbmAgcmFuZG9tIGVsZW1lbnRzIGF0IHVuaXF1ZSBrZXlzIGZyb20gYGNvbGxlY3Rpb25gIHVwIHRvIHRoZVxuICogc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgMik7XG4gKiAvLyA9PiBbMywgMV1cbiAqXG4gKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCA0KTtcbiAqIC8vID0+IFsyLCAzLCAxXVxuICovXG5mdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSB7XG4gIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgbiA9IDE7XG4gIH0gZWxzZSB7XG4gICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgfVxuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemUgOiBiYXNlU2FtcGxlU2l6ZTtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNhbXBsZVNpemU7XG4iLCJpbXBvcnQgYmFzZVNldCBmcm9tICcuL19iYXNlU2V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIGEgcG9ydGlvbiBvZiBgcGF0aGAgZG9lc24ndCBleGlzdCxcbiAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICogYXJlIGNyZWF0ZWQgZm9yIGFsbCBvdGhlciBtaXNzaW5nIHByb3BlcnRpZXMuIFVzZSBgXy5zZXRXaXRoYCB0byBjdXN0b21pemVcbiAqIGBwYXRoYCBjcmVhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gKiAvLyA9PiA0XG4gKlxuICogXy5zZXQob2JqZWN0LCBbJ3gnLCAnMCcsICd5JywgJ3onXSwgNSk7XG4gKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICogLy8gPT4gNVxuICovXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXQ7XG4iLCJpbXBvcnQgYmFzZVNldCBmcm9tICcuL19iYXNlU2V0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHt9O1xuICpcbiAqIF8uc2V0V2l0aChvYmplY3QsICdbMF1bMV0nLCAnYScsIE9iamVjdCk7XG4gKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAqL1xuZnVuY3Rpb24gc2V0V2l0aChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0V2l0aDtcbiIsImltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBzaHVmZmxlU2VsZiBmcm9tICcuL19zaHVmZmxlU2VsZi5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U2h1ZmZsZShhcnJheSkge1xuICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U2h1ZmZsZTtcbiIsImltcG9ydCBzaHVmZmxlU2VsZiBmcm9tICcuL19zaHVmZmxlU2VsZi5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zaHVmZmxlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlU2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2h1ZmZsZTtcbiIsImltcG9ydCBhcnJheVNodWZmbGUgZnJvbSAnLi9fYXJyYXlTaHVmZmxlLmpzJztcbmltcG9ydCBiYXNlU2h1ZmZsZSBmcm9tICcuL19iYXNlU2h1ZmZsZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gKiBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNodWZmbGUoWzEsIDIsIDMsIDRdKTtcbiAqIC8vID0+IFs0LCAxLCAzLCAyXVxuICovXG5mdW5jdGlvbiBzaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaHVmZmxlO1xuIiwiaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAgYnkgcmV0dXJuaW5nIGl0cyBsZW5ndGggZm9yIGFycmF5LWxpa2VcbiAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zaXplKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiAyXG4gKlxuICogXy5zaXplKCdwZWJibGVzJyk7XG4gKiAvLyA9PiA3XG4gKi9cbmZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcoY29sbGVjdGlvbik7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICB9XG4gIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpemU7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zdGVhZCBvZlxuICogW2BBcnJheSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJyYXlzIGFyZVxuICogcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7XG4gICAgc3RhcnQgPSAwO1xuICAgIGVuZCA9IGxlbmd0aDtcbiAgfVxuICBlbHNlIHtcbiAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICB9XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzbGljZTtcbiIsImltcG9ydCBjcmVhdGVDb21wb3VuZGVyIGZyb20gJy4vX2NyZWF0ZUNvbXBvdW5kZXIuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gKiBbc25ha2UgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU25ha2VfY2FzZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAqIC8vID0+ICdmb29fYmFyJ1xuICpcbiAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAqIC8vID0+ICdmb29fYmFyJ1xuICpcbiAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICogLy8gPT4gJ2Zvb19iYXInXG4gKi9cbnZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzbmFrZUNhc2U7XG4iLCJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvbWVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdDtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gIXJlc3VsdDtcbiAgfSk7XG4gIHJldHVybiAhIXJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNvbWU7XG4iLCJpbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVNvbWUgZnJvbSAnLi9fYmFzZVNvbWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeS4gVGhlIHByZWRpY2F0ZSBpc1xuICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb21lKFtudWxsLCAwLCAneWVzJywgZmFsc2VdLCBCb29sZWFuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5zb21lKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnNvbWUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gc29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U29tZSA6IGJhc2VTb21lO1xuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzb21lO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBiYXNlT3JkZXJCeSBmcm9tICcuL19iYXNlT3JkZXJCeS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSByZXN1bHRzIG9mXG4gKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gKiBlcXVhbCBlbGVtZW50cy4gVGhlIGl0ZXJhdGVlcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gKiBdO1xuICpcbiAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAqXG4gKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDQwXSwgWydmcmVkJywgNDhdXVxuICovXG52YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPiAxICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdKSkge1xuICAgIGl0ZXJhdGVlcyA9IFtdO1xuICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICBpdGVyYXRlZXMgPSBbaXRlcmF0ZWVzWzBdXTtcbiAgfVxuICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRCeTtcbiIsImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICBNQVhfQVJSQVlfSU5ERVggPSBNQVhfQVJSQVlfTEVOR1RIIC0gMTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleEJ5YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4QnlgXG4gKiB3aGljaCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGVcbiAqIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICogIGludG8gYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICB2YWx1ZSA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICB2YXIgbG93ID0gMCxcbiAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHZhbElzTmFOID0gdmFsdWUgIT09IHZhbHVlLFxuICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICB2YWxJc1N5bWJvbCA9IGlzU3ltYm9sKHZhbHVlKSxcbiAgICAgIHZhbElzVW5kZWZpbmVkID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIHZhciBtaWQgPSBuYXRpdmVGbG9vcigobG93ICsgaGlnaCkgLyAyKSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZShhcnJheVttaWRdKSxcbiAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgb3RoSXNOdWxsID0gY29tcHV0ZWQgPT09IG51bGwsXG4gICAgICAgIG90aElzUmVmbGV4aXZlID0gY29tcHV0ZWQgPT09IGNvbXB1dGVkLFxuICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKGNvbXB1dGVkKTtcblxuICAgIGlmICh2YWxJc05hTikge1xuICAgICAgdmFyIHNldExvdyA9IHJldEhpZ2hlc3QgfHwgb3RoSXNSZWZsZXhpdmU7XG4gICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmaW5lZCkge1xuICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgKHJldEhpZ2hlc3QgfHwgb3RoSXNEZWZpbmVkKTtcbiAgICB9IGVsc2UgaWYgKHZhbElzTnVsbCkge1xuICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc051bGwpO1xuICAgIH0gZWxzZSBpZiAodmFsSXNTeW1ib2wpIHtcbiAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAhb3RoSXNOdWxsICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc1N5bWJvbCk7XG4gICAgfSBlbHNlIGlmIChvdGhJc051bGwgfHwgb3RoSXNTeW1ib2wpIHtcbiAgICAgIHNldExvdyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHNldExvdykge1xuICAgICAgbG93ID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaCA9IG1pZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU29ydGVkSW5kZXhCeTtcbiIsImltcG9ydCBiYXNlU29ydGVkSW5kZXhCeSBmcm9tICcuL19iYXNlU29ydGVkSW5kZXhCeS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTUsXG4gICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2hcbiAqIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaCBvZiBgYXJyYXlgIHRvIGRldGVybWluZSB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYFxuICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICogIGludG8gYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkge1xuICB2YXIgbG93ID0gMCxcbiAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gbG93IDogYXJyYXkubGVuZ3RoO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDEsXG4gICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICBpZiAoY29tcHV0ZWQgIT09IG51bGwgJiYgIWlzU3ltYm9sKGNvbXB1dGVkKSAmJlxuICAgICAgICAgIChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkpIHtcbiAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoaWdoO1xuICB9XG4gIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNvcnRlZEluZGV4O1xuIiwiaW1wb3J0IGJhc2VTb3J0ZWRJbmRleCBmcm9tICcuL19iYXNlU29ydGVkSW5kZXguanMnO1xuXG4vKipcbiAqIFVzZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGRldGVybWluZSB0aGUgbG93ZXN0IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gKiAgaW50byBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gKiAvLyA9PiAxXG4gKi9cbmZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZEluZGV4O1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VTb3J0ZWRJbmRleEJ5IGZyb20gJy4vX2Jhc2VTb3J0ZWRJbmRleEJ5LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gKiAgaW50byBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAqXG4gKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICogLy8gPT4gMFxuICovXG5mdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZEluZGV4Qnk7XG4iLCJpbXBvcnQgYmFzZVNvcnRlZEluZGV4IGZyb20gJy4vX2Jhc2VTb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNvcnRlZEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAqIC8vID0+IDFcbiAqL1xuZnVuY3Rpb24gc29ydGVkSW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAobGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkSW5kZXhPZjtcbiIsImltcG9ydCBiYXNlU29ydGVkSW5kZXggZnJvbSAnLi9fYmFzZVNvcnRlZEluZGV4LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBoaWdoZXN0XG4gKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAqIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICogIGludG8gYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAqIC8vID0+IDRcbiAqL1xuZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZExhc3RJbmRleDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlU29ydGVkSW5kZXhCeSBmcm9tICcuL19iYXNlU29ydGVkSW5kZXhCeS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRMYXN0SW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAqICBpbnRvIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICpcbiAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAqIC8vID0+IDFcbiAqL1xuZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCB0cnVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkTGFzdEluZGV4Qnk7XG4iLCJpbXBvcnQgYmFzZVNvcnRlZEluZGV4IGZyb20gJy4vX2Jhc2VTb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5sYXN0SW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb3J0ZWRMYXN0SW5kZXhPZihbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAobGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSkgLSAxO1xuICAgIGlmIChlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZExhc3RJbmRleE9mO1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZFVuaXFgIGFuZCBgXy5zb3J0ZWRVbmlxQnlgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlU29ydGVkVW5pcShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgaWYgKCFpbmRleCB8fCAhZXEoY29tcHV0ZWQsIHNlZW4pKSB7XG4gICAgICB2YXIgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTb3J0ZWRVbmlxO1xuIiwiaW1wb3J0IGJhc2VTb3J0ZWRVbmlxIGZyb20gJy4vX2Jhc2VTb3J0ZWRVbmlxLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICogZm9yIHNvcnRlZCBhcnJheXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNvcnRlZFVuaXEoWzEsIDEsIDJdKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXkpXG4gICAgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkVW5pcTtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlU29ydGVkVW5pcSBmcm9tICcuL19iYXNlU29ydGVkVW5pcS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxQnlgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICogZm9yIHNvcnRlZCBhcnJheXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb3J0ZWRVbmlxQnkoWzEuMSwgMS4yLCAyLjMsIDIuNF0sIE1hdGguZmxvb3IpO1xuICogLy8gPT4gWzEuMSwgMi4zXVxuICovXG5mdW5jdGlvbiBzb3J0ZWRVbmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkVW5pcUJ5O1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGlzUmVnRXhwIGZyb20gJy4vaXNSZWdFeHAuanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogU3BsaXRzIGBzdHJpbmdgIGJ5IGBzZXBhcmF0b3JgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BTdHJpbmcjc3BsaXRgXShodHRwczovL21kbi5pby9TdHJpbmcvc3BsaXQpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHNwbGl0LlxuICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHNwbGl0IGJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtsaW1pdF0gVGhlIGxlbmd0aCB0byB0cnVuY2F0ZSByZXN1bHRzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzdHJpbmcgc2VnbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc3BsaXQoJ2EtYi1jJywgJy0nLCAyKTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqL1xuZnVuY3Rpb24gc3BsaXQoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSB7XG4gIGlmIChsaW1pdCAmJiB0eXBlb2YgbGltaXQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSkge1xuICAgIHNlcGFyYXRvciA9IGxpbWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIGxpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdCA+Pj4gMDtcbiAgaWYgKCFsaW1pdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBpZiAoc3RyaW5nICYmIChcbiAgICAgICAgdHlwZW9mIHNlcGFyYXRvciA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAoc2VwYXJhdG9yICE9IG51bGwgJiYgIWlzUmVnRXhwKHNlcGFyYXRvcikpXG4gICAgICApKSB7XG4gICAgc2VwYXJhdG9yID0gYmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7XG4gICAgaWYgKCFzZXBhcmF0b3IgJiYgaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwgMCwgbGltaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nLnNwbGl0KHNlcGFyYXRvciwgbGltaXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGxpdDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAqIGNyZWF0ZSBmdW5jdGlvbiBhbmQgYW4gYXJyYXkgb2YgYXJndW1lbnRzIG11Y2ggbGlrZVxuICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjIuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc3ByZWFkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzYXkgPSBfLnNwcmVhZChmdW5jdGlvbih3aG8sIHdoYXQpIHtcbiAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAqIH0pO1xuICpcbiAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gKiAvLyA9PiAnZnJlZCBzYXlzIGhlbGxvJ1xuICpcbiAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICogICBQcm9taXNlLnJlc29sdmUoMzYpXG4gKiBdKTtcbiAqXG4gKiBudW1iZXJzLnRoZW4oXy5zcHJlYWQoZnVuY3Rpb24oeCwgeSkge1xuICogICByZXR1cm4geCArIHk7XG4gKiB9KSk7XG4gKiAvLyA9PiBhIFByb21pc2Ugb2YgNzZcbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGZ1bmMsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKHN0YXJ0KSwgMCk7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgdmFyIGFycmF5ID0gYXJnc1tzdGFydF0sXG4gICAgICAgIG90aGVyQXJncyA9IGNhc3RTbGljZShhcmdzLCAwLCBzdGFydCk7XG5cbiAgICBpZiAoYXJyYXkpIHtcbiAgICAgIGFycmF5UHVzaChvdGhlckFyZ3MsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcHJlYWQ7XG4iLCJpbXBvcnQgY3JlYXRlQ29tcG91bmRlciBmcm9tICcuL19jcmVhdGVDb21wb3VuZGVyLmpzJztcbmltcG9ydCB1cHBlckZpcnN0IGZyb20gJy4vdXBwZXJGaXJzdC5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAqIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdGFydCBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc3RhcnRDYXNlKCctLWZvby1iYXItLScpO1xuICogLy8gPT4gJ0ZvbyBCYXInXG4gKlxuICogXy5zdGFydENhc2UoJ2Zvb0JhcicpO1xuICogLy8gPT4gJ0ZvbyBCYXInXG4gKlxuICogXy5zdGFydENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gKiAvLyA9PiAnRk9PIEJBUidcbiAqL1xudmFyIHN0YXJ0Q2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgdXBwZXJGaXJzdCh3b3JkKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFydENhc2U7XG4iLCJpbXBvcnQgYmFzZUNsYW1wIGZyb20gJy4vX2Jhc2VDbGFtcC5qcyc7XG5pbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPTBdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCBgdGFyZ2V0YCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsXG4gICAgPyAwXG4gICAgOiBiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwgMCwgc3RyaW5nLmxlbmd0aCk7XG5cbiAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG4gIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFydHNXaXRoO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLnN0dWJPYmplY3QpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3t9LCB7fV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJPYmplY3QoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1Yk9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViU3RyaW5nKTtcbiAqIC8vID0+IFsnJywgJyddXG4gKi9cbmZ1bmN0aW9uIHN0dWJTdHJpbmcoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YlN0cmluZztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViVHJ1ZSk7XG4gKiAvLyA9PiBbdHJ1ZSwgdHJ1ZV1cbiAqL1xuZnVuY3Rpb24gc3R1YlRydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViVHJ1ZTtcbiIsImltcG9ydCBjcmVhdGVNYXRoT3BlcmF0aW9uIGZyb20gJy4vX2NyZWF0ZU1hdGhPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIFN1YnRyYWN0IHR3byBudW1iZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge251bWJlcn0gbWludWVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gc3VidHJhaGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAqIC8vID0+IDJcbiAqL1xudmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gIHJldHVybiBtaW51ZW5kIC0gc3VidHJhaGVuZDtcbn0sIDApO1xuXG5leHBvcnQgZGVmYXVsdCBzdWJ0cmFjdDtcbiIsImltcG9ydCBiYXNlU3VtIGZyb20gJy4vX2Jhc2VTdW0uanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnN1bShbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMjBcbiAqL1xuZnVuY3Rpb24gc3VtKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVN1bShhcnJheSwgaWRlbnRpdHkpXG4gICAgOiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdW07XG4iLCJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVN1bSBmcm9tICcuL19iYXNlU3VtLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnN1bWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgdmFsdWUgdG8gYmUgc3VtbWVkLlxuICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ24nOiA0IH0sIHsgJ24nOiAyIH0sIHsgJ24nOiA4IH0sIHsgJ24nOiA2IH1dO1xuICpcbiAqIF8uc3VtQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAqIC8vID0+IDIwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnN1bUJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiAyMFxuICovXG5mdW5jdGlvbiBzdW1CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlU3VtKGFycmF5LCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3VtQnk7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5cbi8qKlxuICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGFpbChbMSwgMiwgM10pO1xuICogLy8gPT4gWzIsIDNdXG4gKi9cbmZ1bmN0aW9uIHRhaWwoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAxLCBsZW5ndGgpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRhaWw7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50YWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqXG4gKiBfLnRha2UoWzEsIDIsIDNdLCAyKTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udGFrZShbMSwgMiwgM10sIDUpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogXy50YWtlKFsxLCAyLCAzXSwgMCk7XG4gKiAvLyA9PiBbXVxuICovXG5mdW5jdGlvbiB0YWtlKGFycmF5LCBuLCBndWFyZCkge1xuICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YWtlO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBbM11cbiAqXG4gKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDIpO1xuICogLy8gPT4gWzIsIDNdXG4gKlxuICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gKiAvLyA9PiBbXVxuICovXG5mdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgbiA9IGxlbmd0aCAtIG47XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRha2VSaWdodDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlV2hpbGUgZnJvbSAnLi9fYmFzZVdoaWxlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC4gRWxlbWVudHMgYXJlXG4gKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRha2VSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlV2hpbGUoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBmYWxzZSwgdHJ1ZSlcbiAgICA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YWtlUmlnaHRXaGlsZTtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlV2hpbGUgZnJvbSAnLi9fYmFzZVdoaWxlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy4gRWxlbWVudHNcbiAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLnRha2VXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnRha2VXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy50YWtlV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVdoaWxlKGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSlcbiAgICA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YWtlV2hpbGU7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIGludm9rZXMgYGludGVyY2VwdG9yYCBhbmQgcmV0dXJucyBgdmFsdWVgLiBUaGUgaW50ZXJjZXB0b3JcbiAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvXG4gKiBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UgaW4gb3JkZXIgdG8gbW9kaWZ5IGludGVybWVkaWF0ZSByZXN1bHRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfKFsxLCAyLCAzXSlcbiAqICAudGFwKGZ1bmN0aW9uKGFycmF5KSB7XG4gKiAgICAvLyBNdXRhdGUgaW5wdXQgYXJyYXkuXG4gKiAgICBhcnJheS5wb3AoKTtcbiAqICB9KVxuICogIC5yZXZlcnNlKClcbiAqICAudmFsdWUoKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG5mdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YXA7XG4iLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICByZXR1cm4gc3JjVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9ialZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluO1xuIiwiLyoqIFVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgJ1xcXFwnOiAnXFxcXCcsXG4gIFwiJ1wiOiBcIidcIixcbiAgJ1xcbic6ICduJyxcbiAgJ1xccic6ICdyJyxcbiAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAnXFx1MjAyOSc6ICd1MjAyOSdcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy50ZW1wbGF0ZWAgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFyKGNocikge1xuICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVTdHJpbmdDaGFyO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlSW50ZXJwb2xhdGU7XG4iLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlRXNjYXBlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcbiIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICcuL2RlYm91bmNlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICogbWV0aG9kIHRvIGNhbmNlbCBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0b1xuICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgXG4gKiB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWQgd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlXG4gKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7XG4gKlxuICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gKiB2YXIgdGhyb3R0bGVkID0gXy50aHJvdHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7XG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdGhyb3R0bGVkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAnbGVhZGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5sZWFkaW5nIDogbGVhZGluZztcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG4gIHJldHVybiBkZWJvdW5jZShmdW5jLCB3YWl0LCB7XG4gICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAndHJhaWxpbmcnOiB0cmFpbGluZ1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udGFwYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwicGFzcyB0aHJ1XCIgdmFsdWVzIHJlcGxhY2luZyBpbnRlcm1lZGlhdGVcbiAqIHJlc3VsdHMgaW4gYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFNlcVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXygnICBhYmMgICcpXG4gKiAgLmNoYWluKClcbiAqICAudHJpbSgpXG4gKiAgLnRocnUoZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgIHJldHVybiBbdmFsdWVdO1xuICogIH0pXG4gKiAgLnZhbHVlKCk7XG4gKiAvLyA9PiBbJ2FiYyddXG4gKi9cbmZ1bmN0aW9uIHRocnUodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gIHJldHVybiBpbnRlcmNlcHRvcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocnU7XG4iLCJpbXBvcnQgYmFzZVRpbWVzIGZyb20gJy4vX2Jhc2VUaW1lcy5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBJbnZva2VzIHRoZSBpdGVyYXRlZSBgbmAgdGltZXMsIHJldHVybmluZyBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZlxuICogZWFjaCBpbnZvY2F0aW9uLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKGluZGV4KS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDMsIFN0cmluZyk7XG4gKiAvLyA9PiBbJzAnLCAnMScsICcyJ11cbiAqXG4gKiAgXy50aW1lcyg0LCBfLmNvbnN0YW50KDApKTtcbiAqIC8vID0+IFswLCAwLCAwLCAwXVxuICovXG5mdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSkge1xuICBuID0gdG9JbnRlZ2VyKG4pO1xuICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKTtcblxuICBpdGVyYXRlZSA9IGNhc3RGdW5jdGlvbihpdGVyYXRlZSk7XG4gIG4gLT0gTUFYX0FSUkFZX0xFTkdUSDtcblxuICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGltZXM7XG4iLCIvKipcbiAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gKlxuICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gKlxuICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogQXJyYXkuZnJvbSh3cmFwcGVkKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJUb0l0ZXJhdG9yO1xuIiwiaW1wb3J0IExhenlXcmFwcGVyIGZyb20gJy4vX0xhenlXcmFwcGVyLmpzJztcbmltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBhcnJheVJlZHVjZSBmcm9tICcuL19hcnJheVJlZHVjZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHdyYXBwZXJWYWx1ZWAgd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0IG9mXG4gKiBwZXJmb3JtaW5nIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucyBvbiB0aGUgdW53cmFwcGVkIGB2YWx1ZWAsIHdoZXJlIGVhY2hcbiAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIEFjdGlvbnMgdG8gcGVyZm9ybSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VXcmFwcGVyVmFsdWUodmFsdWUsIGFjdGlvbnMpIHtcbiAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXN1bHQgPSByZXN1bHQudmFsdWUoKTtcbiAgfVxuICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24pIHtcbiAgICByZXR1cm4gYWN0aW9uLmZ1bmMuYXBwbHkoYWN0aW9uLnRoaXNBcmcsIGFycmF5UHVzaChbcmVzdWx0XSwgYWN0aW9uLmFyZ3MpKTtcbiAgfSwgcmVzdWx0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVdyYXBwZXJWYWx1ZTtcbiIsImltcG9ydCBiYXNlV3JhcHBlclZhbHVlIGZyb20gJy4vX2Jhc2VXcmFwcGVyVmFsdWUuanMnO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gKlxuICogQG5hbWUgdmFsdWVcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyB0b0pTT04sIHZhbHVlT2ZcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB1bndyYXBwZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8oWzEsIDIsIDNdKS52YWx1ZSgpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpIHtcbiAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXywgdGhpcy5fX2FjdGlvbnNfXyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJWYWx1ZTtcbiIsImltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gbG93ZXIgY2FzZSBqdXN0IGxpa2VcbiAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbG93ZXIgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTG93ZXIoJy0tRm9vLUJhci0tJyk7XG4gKiAvLyA9PiAnLS1mb28tYmFyLS0nXG4gKlxuICogXy50b0xvd2VyKCdmb29CYXInKTtcbiAqIC8vID0+ICdmb29iYXInXG4gKlxuICogXy50b0xvd2VyKCdfX0ZPT19CQVJfXycpO1xuICogLy8gPT4gJ19fZm9vX2Jhcl9fJ1xuICovXG5mdW5jdGlvbiB0b0xvd2VyKHZhbHVlKSB7XG4gIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Mb3dlcjtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuaW1wb3J0IHN0cmluZ1RvUGF0aCBmcm9tICcuL19zdHJpbmdUb1BhdGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9QYXRoKCdhLmIuYycpO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gKlxuICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICovXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCB0b0tleSk7XG4gIH1cbiAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1BhdGg7XG4iLCJpbXBvcnQgYmFzZUNsYW1wIGZyb20gJy4vX2Jhc2VDbGFtcC5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNhZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZFxuICogcmVwcmVzZW50ZWQgY29ycmVjdGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TYWZlSW50ZWdlcigzLjIpO1xuICogLy8gPT4gM1xuICpcbiAqIF8udG9TYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MVxuICpcbiAqIF8udG9TYWZlSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvU2FmZUludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpXG4gICAgOiAodmFsdWUgPT09IDAgPyB2YWx1ZSA6IDApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NhZmVJbnRlZ2VyO1xuIiwiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZVxuICogW1N0cmluZyN0b1VwcGVyQ2FzZV0oaHR0cHM6Ly9tZG4uaW8vdG9VcHBlckNhc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9VcHBlcignLS1mb28tYmFyLS0nKTtcbiAqIC8vID0+ICctLUZPTy1CQVItLSdcbiAqXG4gKiBfLnRvVXBwZXIoJ2Zvb0JhcicpO1xuICogLy8gPT4gJ0ZPT0JBUidcbiAqXG4gKiBfLnRvVXBwZXIoJ19fZm9vX2Jhcl9fJyk7XG4gKiAvLyA9PiAnX19GT09fQkFSX18nXG4gKi9cbmZ1bmN0aW9uIHRvVXBwZXIodmFsdWUpIHtcbiAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1VwcGVyO1xuIiwiaW1wb3J0IGFycmF5RWFjaCBmcm9tICcuL19hcnJheUVhY2guanMnO1xuaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKlxuICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9LCBbXSk7XG4gKiAvLyA9PiBbNCwgOV1cbiAqXG4gKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICB9XG4gIH1cbiAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmb3JtO1xuIiwiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAqIHRoYXQgaXMgbm90IGZvdW5kIGluIHRoZSBjaGFyYWN0ZXIgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc3RyU3ltYm9scyBUaGUgc3RyaW5nIHN5bWJvbHMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAqL1xuZnVuY3Rpb24gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSB7XG4gIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNoYXJzRW5kSW5kZXg7XG4iLCJpbXBvcnQgYmFzZUluZGV4T2YgZnJvbSAnLi9fYmFzZUluZGV4T2YuanMnO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1TdGFydGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgc3RyaW5nIHN5bWJvbFxuICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gY2hyU3ltYm9scyBUaGUgY2hhcmFjdGVyIHN5bWJvbHMgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAqL1xuZnVuY3Rpb24gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiBiYXNlSW5kZXhPZihjaHJTeW1ib2xzLCBzdHJTeW1ib2xzW2luZGV4XSwgMCkgPiAtMSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjaGFyc1N0YXJ0SW5kZXg7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5pbXBvcnQgY2FzdFNsaWNlIGZyb20gJy4vX2Nhc3RTbGljZS5qcyc7XG5pbXBvcnQgY2hhcnNFbmRJbmRleCBmcm9tICcuL19jaGFyc0VuZEluZGV4LmpzJztcbmltcG9ydCBjaGFyc1N0YXJ0SW5kZXggZnJvbSAnLi9fY2hhcnNTdGFydEluZGV4LmpzJztcbmltcG9ydCBzdHJpbmdUb0FycmF5IGZyb20gJy4vX3N0cmluZ1RvQXJyYXkuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJpbSgnICBhYmMgICcpO1xuICogLy8gPT4gJ2FiYydcbiAqXG4gKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICogLy8gPT4gJ2FiYydcbiAqXG4gKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICogLy8gPT4gWydmb28nLCAnYmFyJ11cbiAqL1xuZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgfVxuICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scyksXG4gICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpICsgMTtcblxuICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltO1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGNoYXJzRW5kSW5kZXggZnJvbSAnLi9fY2hhcnNFbmRJbmRleC5qcyc7XG5pbXBvcnQgc3RyaW5nVG9BcnJheSBmcm9tICcuL19zdHJpbmdUb0FycmF5LmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1FbmQgPSAvXFxzKyQvO1xuXG4vKipcbiAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICogLy8gPT4gJyAgYWJjJ1xuICpcbiAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gKiAvLyA9PiAnLV8tYWJjJ1xuICovXG5mdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbUVuZCwgJycpO1xuICB9XG4gIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltRW5kO1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGNoYXJzU3RhcnRJbmRleCBmcm9tICcuL19jaGFyc1N0YXJ0SW5kZXguanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmltU3RhcnQoJyAgYWJjICAnKTtcbiAqIC8vID0+ICdhYmMgICdcbiAqXG4gKiBfLnRyaW1TdGFydCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gKiAvLyA9PiAnYWJjLV8tJ1xuICovXG5mdW5jdGlvbiB0cmltU3RhcnQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKTtcbiAgfVxuICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgc3RyaW5nVG9BcnJheShjaGFycykpO1xuXG4gIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgc3RhcnQpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltU3RhcnQ7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5pbXBvcnQgY2FzdFNsaWNlIGZyb20gJy4vX2Nhc3RTbGljZS5qcyc7XG5pbXBvcnQgaGFzVW5pY29kZSBmcm9tICcuL19oYXNVbmljb2RlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1JlZ0V4cCBmcm9tICcuL2lzUmVnRXhwLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgYXMgZGVmYXVsdCBvcHRpb25zIGZvciBgXy50cnVuY2F0ZWAuICovXG52YXIgREVGQVVMVF9UUlVOQ19MRU5HVEggPSAzMCxcbiAgICBERUZBVUxUX1RSVU5DX09NSVNTSU9OID0gJy4uLic7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIFRydW5jYXRlcyBgc3RyaW5nYCBpZiBpdCdzIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICogc3RyaW5nIHdoaWNoIGRlZmF1bHRzIHRvIFwiLi4uXCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJ1bmNhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBbb3B0aW9ucy5zZXBhcmF0b3JdIFRoZSBzZXBhcmF0b3IgcGF0dGVybiB0byB0cnVuY2F0ZSB0by5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gKlxuICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAqICAgJ2xlbmd0aCc6IDI0LFxuICogICAnc2VwYXJhdG9yJzogJyAnXG4gKiB9KTtcbiAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gKiAgICdsZW5ndGgnOiAyNCxcbiAqICAgJ3NlcGFyYXRvcic6IC8sPyArL1xuICogfSk7XG4gKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gKiB9KTtcbiAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICBvbWlzc2lvbiA9IERFRkFVTFRfVFJVTkNfT01JU1NJT047XG5cbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gdG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKSA6IGxlbmd0aDtcbiAgICBvbWlzc2lvbiA9ICdvbWlzc2lvbicgaW4gb3B0aW9ucyA/IGJhc2VUb1N0cmluZyhvcHRpb25zLm9taXNzaW9uKSA6IG9taXNzaW9uO1xuICB9XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcbiAgICBzdHJMZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcbiAgfVxuICBpZiAobGVuZ3RoID49IHN0ckxlbmd0aCkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgdmFyIGVuZCA9IGxlbmd0aCAtIHN0cmluZ1NpemUob21pc3Npb24pO1xuICBpZiAoZW5kIDwgMSkge1xuICAgIHJldHVybiBvbWlzc2lvbjtcbiAgfVxuICB2YXIgcmVzdWx0ID0gc3RyU3ltYm9sc1xuICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICA6IHN0cmluZy5zbGljZSgwLCBlbmQpO1xuXG4gIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgfVxuICBpZiAoc3RyU3ltYm9scykge1xuICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gIH1cbiAgaWYgKGlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgIHZhciBtYXRjaCxcbiAgICAgICAgICBzdWJzdHJpbmcgPSByZXN1bHQ7XG5cbiAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICBzZXBhcmF0b3IgPSBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgdG9TdHJpbmcocmVGbGFncy5leGVjKHNlcGFyYXRvcikpICsgJ2cnKTtcbiAgICAgIH1cbiAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgd2hpbGUgKChtYXRjaCA9IHNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpKSB7XG4gICAgICAgIHZhciBuZXdFbmQgPSBtYXRjaC5pbmRleDtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBuZXdFbmQgPT09IHVuZGVmaW5lZCA/IGVuZCA6IG5ld0VuZCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgIHZhciBpbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRydW5jYXRlO1xuIiwiaW1wb3J0IGFyeSBmcm9tICcuL2FyeS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB1cCB0byBvbmUgYXJndW1lbnQsIGlnbm9yaW5nIGFueVxuICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy51bmFyeShwYXJzZUludCkpO1xuICogLy8gPT4gWzYsIDgsIDEwXVxuICovXG5mdW5jdGlvbiB1bmFyeShmdW5jKSB7XG4gIHJldHVybiBhcnkoZnVuYywgMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuYXJ5O1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy4gKi9cbnZhciBodG1sVW5lc2NhcGVzID0ge1xuICAnJmFtcDsnOiAnJicsXG4gICcmbHQ7JzogJzwnLFxuICAnJmd0Oyc6ICc+JyxcbiAgJyZxdW90Oyc6ICdcIicsXG4gICcmIzM5Oyc6IFwiJ1wiXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbnZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbmV4cG9ydCBkZWZhdWx0IHVuZXNjYXBlSHRtbENoYXI7XG4iLCJpbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5pbXBvcnQgdW5lc2NhcGVIdG1sQ2hhciBmcm9tICcuL191bmVzY2FwZUh0bWxDaGFyLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlRXNjYXBlZEh0bWwgPSAvJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csXG4gICAgcmVIYXNFc2NhcGVkSHRtbCA9IFJlZ0V4cChyZUVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAqIGAmYW1wO2AsIGAmbHQ7YCwgYCZndDtgLCBgJnF1b3Q7YCwgYW5kIGAmIzM5O2AgaW4gYHN0cmluZ2AgdG9cbiAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgSFRNTCBlbnRpdGllcyBhcmUgdW5lc2NhcGVkLiBUbyB1bmVzY2FwZSBhZGRpdGlvbmFsXG4gKiBIVE1MIGVudGl0aWVzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNi4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNFc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bmVzY2FwZTtcbiIsImltcG9ydCBTZXQgZnJvbSAnLi9fU2V0LmpzJztcbmltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2V0O1xuIiwiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzIGZyb20gJy4vX2FycmF5SW5jbHVkZXMuanMnO1xuaW1wb3J0IGFycmF5SW5jbHVkZXNXaXRoIGZyb20gJy4vX2FycmF5SW5jbHVkZXNXaXRoLmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5pbXBvcnQgY3JlYXRlU2V0IGZyb20gJy4vX2NyZWF0ZVNldC5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBzZWVuID0gcmVzdWx0O1xuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICB9XG4gIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgaWYgKHNldCkge1xuICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICB9XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuaXE7XG4iLCJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbjtcbiIsImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gKiB3aGljaCB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbSB0aGUgZmlyc3RcbiAqIGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbkJ5KFsyLjFdLCBbMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAqIC8vID0+IFsyLjEsIDEuMl1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8udW5pb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAqIC8vID0+IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9XVxuICovXG52YXIgdW5pb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHVuaW9uQnk7XG4iLCJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tXG4gKiB0aGUgZmlyc3QgYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICpcbiAqIF8udW5pb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICovXG52YXIgdW5pb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbldpdGg7XG4iLCJpbXBvcnQgYmFzZVVuaXEgZnJvbSAnLi9fYmFzZVVuaXEuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucywgaW4gd2hpY2ggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIGVsZW1lbnRcbiAqIGlzIGtlcHQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXJcbiAqIGluIHRoZSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcShbMiwgMSwgMl0pO1xuICogLy8gPT4gWzIsIDFdXG4gKi9cbmZ1bmN0aW9uIHVuaXEoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXkpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXE7XG4iLCJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVVuaXEgZnJvbSAnLi9fYmFzZVVuaXEuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiBbMi4xLCAxLjJdXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAqL1xuZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pcUJ5O1xuIiwiaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LlRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gKlxuICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XVxuICovXG5mdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXFXaXRoO1xuIiwiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xudmFyIGlkQ291bnRlciA9IDA7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdW5pcXVlIElELiBJZiBgcHJlZml4YCBpcyBnaXZlbiwgdGhlIElEIGlzIGFwcGVuZGVkIHRvIGl0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0nJ10gVGhlIHZhbHVlIHRvIHByZWZpeCB0aGUgSUQgd2l0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuaXF1ZSBJRC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlxdWVJZCgnY29udGFjdF8nKTtcbiAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAqXG4gKiBfLnVuaXF1ZUlkKCk7XG4gKiAvLyA9PiAnMTA1J1xuICovXG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gIHJldHVybiB0b1N0cmluZyhwcmVmaXgpICsgaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXF1ZUlkO1xuIiwiaW1wb3J0IGJhc2VVbnNldCBmcm9tICcuL19iYXNlVW5zZXQuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHByb3BlcnR5IGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gKiBfLnVuc2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gKlxuICogXy51bnNldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAqL1xuZnVuY3Rpb24gdW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHRydWUgOiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5zZXQ7XG4iLCJpbXBvcnQgYXJyYXlGaWx0ZXIgZnJvbSAnLi9fYXJyYXlGaWx0ZXIuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAqIGVsZW1lbnRzIGFuZCBjcmVhdGVzIGFuIGFycmF5IHJlZ3JvdXBpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZWlyIHByZS16aXBcbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjIuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgemlwcGVkID0gXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICpcbiAqIF8udW56aXAoemlwcGVkKTtcbiAqIC8vID0+IFtbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV1dXG4gKi9cbmZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlbmd0aCA9IDA7XG4gIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSkge1xuICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGdyb3VwLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBiYXNlVGltZXMobGVuZ3RoLCBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiBhcnJheU1hcChhcnJheSwgYmFzZVByb3BlcnR5KGluZGV4KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bnppcDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IHVuemlwIGZyb20gJy4vdW56aXAuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gKiBob3cgcmVncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy44LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICogIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB6aXBwZWQgPSBfLnppcChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdKTtcbiAqIC8vID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV1cbiAqXG4gKiBfLnVuemlwV2l0aCh6aXBwZWQsIF8uYWRkKTtcbiAqIC8vID0+IFszLCAzMCwgMzAwXVxuICovXG5mdW5jdGlvbiB1bnppcFdpdGgoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHVuemlwKGFycmF5KTtcbiAgaWYgKGl0ZXJhdGVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhcnJheU1hcChyZXN1bHQsIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB1bmRlZmluZWQsIGdyb3VwKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuemlwV2l0aDtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udXBkYXRlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyLCBjdXN0b21pemVyKSB7XG4gIHJldHVybiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdXBkYXRlcihiYXNlR2V0KG9iamVjdCwgcGF0aCkpLCBjdXN0b21pemVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVwZGF0ZTtcbiIsImltcG9ydCBiYXNlVXBkYXRlIGZyb20gJy4vX2Jhc2VVcGRhdGUuanMnO1xuaW1wb3J0IGNhc3RGdW5jdGlvbiBmcm9tICcuL19jYXN0RnVuY3Rpb24uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBhY2NlcHRzIGB1cGRhdGVyYCB0byBwcm9kdWNlIHRoZVxuICogdmFsdWUgdG8gc2V0LiBVc2UgYF8udXBkYXRlV2l0aGAgdG8gY3VzdG9taXplIGBwYXRoYCBjcmVhdGlvbi4gVGhlIGB1cGRhdGVyYFxuICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNi4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8udXBkYXRlKG9iamVjdCwgJ2FbMF0uYi5jJywgZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIG47IH0pO1xuICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAqIC8vID0+IDlcbiAqXG4gKiBfLnVwZGF0ZShvYmplY3QsICd4WzBdLnkueicsIGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPyBuICsgMSA6IDA7IH0pO1xuICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAqIC8vID0+IDBcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlcikge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXBkYXRlO1xuIiwiaW1wb3J0IGJhc2VVcGRhdGUgZnJvbSAnLi9fYmFzZVVwZGF0ZS5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51cGRhdGVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNi4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge307XG4gKlxuICogXy51cGRhdGVXaXRoKG9iamVjdCwgJ1swXVsxXScsIF8uY29uc3RhbnQoJ2EnKSwgT2JqZWN0KTtcbiAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICovXG5mdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlciksIGN1c3RvbWl6ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1cGRhdGVXaXRoO1xuIiwiaW1wb3J0IGNyZWF0ZUNvbXBvdW5kZXIgZnJvbSAnLi9fY3JlYXRlQ29tcG91bmRlci5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gdXBwZXIgY2FzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gKiAvLyA9PiAnRk9PIEJBUidcbiAqXG4gKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gKiAvLyA9PiAnRk9PIEJBUidcbiAqXG4gKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAqIC8vID0+ICdGT08gQkFSJ1xuICovXG52YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvVXBwZXJDYXNlKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXBwZXJDYXNlO1xuIiwiaW1wb3J0IGJhc2VWYWx1ZXMgZnJvbSAnLi9fYmFzZVZhbHVlcy5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eVxuICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlc0luKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDIsIDNdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIHZhbHVlc0luKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzSW4ob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlc0luO1xuIiwiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBleGNsdWRpbmcgYWxsIGdpdmVuIHZhbHVlcyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLnhvclxuICogQGV4YW1wbGVcbiAqXG4gKiBfLndpdGhvdXQoWzIsIDEsIDIsIDNdLCAxLCAyKTtcbiAqIC8vID0+IFszXVxuICovXG52YXIgd2l0aG91dCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICA6IFtdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhvdXQ7XG4iLCJpbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgcGFydGlhbCBmcm9tICcuL3BhcnRpYWwuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGB2YWx1ZWAgdG8gYHdyYXBwZXJgIGFzIGl0cyBmaXJzdFxuICogYXJndW1lbnQuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gYXJlIGFwcGVuZGVkXG4gKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICogYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbd3JhcHBlcj1pZGVudGl0eV0gVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAqICAgcmV0dXJuICc8cD4nICsgZnVuYyh0ZXh0KSArICc8L3A+JztcbiAqIH0pO1xuICpcbiAqIHAoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnPHA+ZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzPC9wPidcbiAqL1xuZnVuY3Rpb24gd3JhcCh2YWx1ZSwgd3JhcHBlcikge1xuICByZXR1cm4gcGFydGlhbChjYXN0RnVuY3Rpb24od3JhcHBlciksIHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcDtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5pbXBvcnQgTG9kYXNoV3JhcHBlciBmcm9tICcuL19Mb2Rhc2hXcmFwcGVyLmpzJztcbmltcG9ydCBiYXNlQXQgZnJvbSAnLi9fYmFzZUF0LmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCB0aHJ1IGZyb20gJy4vdGhydS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5hdGAuXG4gKlxuICogQG5hbWUgYXRcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfSwgNF0gfTtcbiAqXG4gKiBfKG9iamVjdCkuYXQoWydhWzBdLmIuYycsICdhWzFdJ10pLnZhbHVlKCk7XG4gKiAvLyA9PiBbMywgNF1cbiAqL1xudmFyIHdyYXBwZXJBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKHBhdGhzKSB7XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICBzdGFydCA9IGxlbmd0aCA/IHBhdGhzWzBdIDogMCxcbiAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgIGludGVyY2VwdG9yID0gZnVuY3Rpb24ob2JqZWN0KSB7IHJldHVybiBiYXNlQXQob2JqZWN0LCBwYXRocyk7IH07XG5cbiAgaWYgKGxlbmd0aCA+IDEgfHwgdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGggfHxcbiAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgfHwgIWlzSW5kZXgoc3RhcnQpKSB7XG4gICAgcmV0dXJuIHRoaXMudGhydShpbnRlcmNlcHRvcik7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgK3N0YXJ0ICsgKGxlbmd0aCA/IDEgOiAwKSk7XG4gIHZhbHVlLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICdmdW5jJzogdGhydSxcbiAgICAnYXJncyc6IFtpbnRlcmNlcHRvcl0sXG4gICAgJ3RoaXNBcmcnOiB1bmRlZmluZWRcbiAgfSk7XG4gIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSwgdGhpcy5fX2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICBpZiAobGVuZ3RoICYmICFhcnJheS5sZW5ndGgpIHtcbiAgICAgIGFycmF5LnB1c2godW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyQXQ7XG4iLCJpbXBvcnQgY2hhaW4gZnJvbSAnLi9jaGFpbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2Ugd2l0aCBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuXG4gKlxuICogQG5hbWUgY2hhaW5cbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAqIF07XG4gKlxuICogLy8gQSBzZXF1ZW5jZSB3aXRob3V0IGV4cGxpY2l0IGNoYWluaW5nLlxuICogXyh1c2VycykuaGVhZCgpO1xuICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICpcbiAqIC8vIEEgc2VxdWVuY2Ugd2l0aCBleHBsaWNpdCBjaGFpbmluZy5cbiAqIF8odXNlcnMpXG4gKiAgIC5jaGFpbigpXG4gKiAgIC5oZWFkKClcbiAqICAgLnBpY2soJ3VzZXInKVxuICogICAudmFsdWUoKTtcbiAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JyB9XG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgcmV0dXJuIGNoYWluKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyQ2hhaW47XG4iLCJpbXBvcnQgTGF6eVdyYXBwZXIgZnJvbSAnLi9fTGF6eVdyYXBwZXIuanMnO1xuaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgcmV2ZXJzZSBmcm9tICcuL3JldmVyc2UuanMnO1xuaW1wb3J0IHRocnUgZnJvbSAnLi90aHJ1LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFwcGVkIGFycmF5LlxuICpcbiAqIEBuYW1lIHJldmVyc2VcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gKlxuICogXyhhcnJheSkucmV2ZXJzZSgpLnZhbHVlKClcbiAqIC8vID0+IFszLCAyLCAxXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFszLCAyLCAxXVxuICovXG5mdW5jdGlvbiB3cmFwcGVyUmV2ZXJzZSgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICB2YXIgd3JhcHBlZCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkge1xuICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICB9XG4gICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpO1xuICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAnYXJncyc6IFtyZXZlcnNlXSxcbiAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgfVxuICByZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyUmV2ZXJzZTtcbiIsImltcG9ydCBiYXNlRGlmZmVyZW5jZSBmcm9tICcuL19iYXNlRGlmZmVyZW5jZS5qcyc7XG5pbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgYXJyYXkgPSBhcnJheXNbaW5kZXhdLFxuICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChvdGhJbmRleCAhPSBpbmRleCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlWG9yO1xuIiwiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgYmFzZVhvciBmcm9tICcuL19iYXNlWG9yLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBpcyB0aGVcbiAqIFtzeW1tZXRyaWMgZGlmZmVyZW5jZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ltbWV0cmljX2RpZmZlcmVuY2UpXG4gKiBvZiB0aGUgZ2l2ZW4gYXJyYXlzLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlclxuICogdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ud2l0aG91dFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnhvcihbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMSwgM11cbiAqL1xudmFyIHhvciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgeG9yO1xuIiwiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgYmFzZVhvciBmcm9tICcuL19iYXNlWG9yLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZFxuICogYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmVcbiAqIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnhvckJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICogLy8gPT4gWzEuMiwgMy40XVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy54b3JCeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAqIC8vID0+IFt7ICd4JzogMiB9XVxuICovXG52YXIgeG9yQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHhvckJ5O1xuIiwiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgYmFzZVhvciBmcm9tICcuL19iYXNlWG9yLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoIGlzXG4gKiBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAqXG4gKiBfLnhvcldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICovXG52YXIgeG9yV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB4b3JXaXRoO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCB1bnppcCBmcm9tICcuL3VuemlwLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMsIHRoZSBmaXJzdCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAqIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gKiBzZWNvbmQgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICovXG52YXIgemlwID0gYmFzZVJlc3QodW56aXApO1xuXG5leHBvcnQgZGVmYXVsdCB6aXA7XG4iLCIvKipcbiAqIFRoaXMgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy56aXBPYmplY3RgIHdoaWNoIGFzc2lnbnMgdmFsdWVzIHVzaW5nIGBhc3NpZ25GdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25GdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVppcE9iamVjdChwcm9wcywgdmFsdWVzLCBhc3NpZ25GdW5jKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgdmFsc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICByZXN1bHQgPSB7fTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGluZGV4IDwgdmFsc0xlbmd0aCA/IHZhbHVlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgYXNzaWduRnVuYyhyZXN1bHQsIHByb3BzW2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VaaXBPYmplY3Q7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VaaXBPYmplY3QgZnJvbSAnLi9fYmFzZVppcE9iamVjdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAqIG9uZSBvZiBwcm9wZXJ0eSBpZGVudGlmaWVycyBhbmQgb25lIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG5mdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBhc3NpZ25WYWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHppcE9iamVjdDtcbiIsImltcG9ydCBiYXNlU2V0IGZyb20gJy4vX2Jhc2VTZXQuanMnO1xuaW1wb3J0IGJhc2VaaXBPYmplY3QgZnJvbSAnLi9fYmFzZVppcE9iamVjdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBPYmplY3RgIGV4Y2VwdCB0aGF0IGl0IHN1cHBvcnRzIHByb3BlcnR5IHBhdGhzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBPYmplY3REZWVwKFsnYS5iWzBdLmMnLCAnYS5iWzFdLmQnXSwgWzEsIDJdKTtcbiAqIC8vID0+IHsgJ2EnOiB7ICdiJzogW3sgJ2MnOiAxIH0sIHsgJ2QnOiAyIH1dIH0gfVxuICovXG5mdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYmFzZVNldCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHppcE9iamVjdERlZXA7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHVuemlwV2l0aCBmcm9tICcuL3VuemlwV2l0aC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gKiBob3cgZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuOC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICogIGdyb3VwZWQgdmFsdWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBXaXRoKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0sIGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgcmV0dXJuIGEgKyBiICsgYztcbiAqIH0pO1xuICogLy8gPT4gWzExMSwgMjIyXVxuICovXG52YXIgemlwV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgIGl0ZXJhdGVlID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICBpdGVyYXRlZSA9IHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nID8gKGFycmF5cy5wb3AoKSwgaXRlcmF0ZWUpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHppcFdpdGg7XG4iLCJpbXBvcnQgY2h1bmsgZnJvbSAnLi9jaHVuay5qcyc7XG5pbXBvcnQgY29tcGFjdCBmcm9tICcuL2NvbXBhY3QuanMnO1xuaW1wb3J0IGNvbmNhdCBmcm9tICcuL2NvbmNhdC5qcyc7XG5pbXBvcnQgZGlmZmVyZW5jZSBmcm9tICcuL2RpZmZlcmVuY2UuanMnO1xuaW1wb3J0IGRpZmZlcmVuY2VCeSBmcm9tICcuL2RpZmZlcmVuY2VCeS5qcyc7XG5pbXBvcnQgZGlmZmVyZW5jZVdpdGggZnJvbSAnLi9kaWZmZXJlbmNlV2l0aC5qcyc7XG5pbXBvcnQgZHJvcCBmcm9tICcuL2Ryb3AuanMnO1xuaW1wb3J0IGRyb3BSaWdodCBmcm9tICcuL2Ryb3BSaWdodC5qcyc7XG5pbXBvcnQgZHJvcFJpZ2h0V2hpbGUgZnJvbSAnLi9kcm9wUmlnaHRXaGlsZS5qcyc7XG5pbXBvcnQgZHJvcFdoaWxlIGZyb20gJy4vZHJvcFdoaWxlLmpzJztcbmltcG9ydCBmaWxsIGZyb20gJy4vZmlsbC5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4vZmluZExhc3RJbmRleC5qcyc7XG5pbXBvcnQgZmlyc3QgZnJvbSAnLi9maXJzdC5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJy4vZmxhdHRlbkRlZXAuanMnO1xuaW1wb3J0IGZsYXR0ZW5EZXB0aCBmcm9tICcuL2ZsYXR0ZW5EZXB0aC5qcyc7XG5pbXBvcnQgZnJvbVBhaXJzIGZyb20gJy4vZnJvbVBhaXJzLmpzJztcbmltcG9ydCBoZWFkIGZyb20gJy4vaGVhZC5qcyc7XG5pbXBvcnQgaW5kZXhPZiBmcm9tICcuL2luZGV4T2YuanMnO1xuaW1wb3J0IGluaXRpYWwgZnJvbSAnLi9pbml0aWFsLmpzJztcbmltcG9ydCBpbnRlcnNlY3Rpb24gZnJvbSAnLi9pbnRlcnNlY3Rpb24uanMnO1xuaW1wb3J0IGludGVyc2VjdGlvbkJ5IGZyb20gJy4vaW50ZXJzZWN0aW9uQnkuanMnO1xuaW1wb3J0IGludGVyc2VjdGlvbldpdGggZnJvbSAnLi9pbnRlcnNlY3Rpb25XaXRoLmpzJztcbmltcG9ydCBqb2luIGZyb20gJy4vam9pbi5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuaW1wb3J0IGxhc3RJbmRleE9mIGZyb20gJy4vbGFzdEluZGV4T2YuanMnO1xuaW1wb3J0IG50aCBmcm9tICcuL250aC5qcyc7XG5pbXBvcnQgcHVsbCBmcm9tICcuL3B1bGwuanMnO1xuaW1wb3J0IHB1bGxBbGwgZnJvbSAnLi9wdWxsQWxsLmpzJztcbmltcG9ydCBwdWxsQWxsQnkgZnJvbSAnLi9wdWxsQWxsQnkuanMnO1xuaW1wb3J0IHB1bGxBbGxXaXRoIGZyb20gJy4vcHVsbEFsbFdpdGguanMnO1xuaW1wb3J0IHB1bGxBdCBmcm9tICcuL3B1bGxBdC5qcyc7XG5pbXBvcnQgcmVtb3ZlIGZyb20gJy4vcmVtb3ZlLmpzJztcbmltcG9ydCByZXZlcnNlIGZyb20gJy4vcmV2ZXJzZS5qcyc7XG5pbXBvcnQgc2xpY2UgZnJvbSAnLi9zbGljZS5qcyc7XG5pbXBvcnQgc29ydGVkSW5kZXggZnJvbSAnLi9zb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgc29ydGVkSW5kZXhCeSBmcm9tICcuL3NvcnRlZEluZGV4QnkuanMnO1xuaW1wb3J0IHNvcnRlZEluZGV4T2YgZnJvbSAnLi9zb3J0ZWRJbmRleE9mLmpzJztcbmltcG9ydCBzb3J0ZWRMYXN0SW5kZXggZnJvbSAnLi9zb3J0ZWRMYXN0SW5kZXguanMnO1xuaW1wb3J0IHNvcnRlZExhc3RJbmRleEJ5IGZyb20gJy4vc29ydGVkTGFzdEluZGV4QnkuanMnO1xuaW1wb3J0IHNvcnRlZExhc3RJbmRleE9mIGZyb20gJy4vc29ydGVkTGFzdEluZGV4T2YuanMnO1xuaW1wb3J0IHNvcnRlZFVuaXEgZnJvbSAnLi9zb3J0ZWRVbmlxLmpzJztcbmltcG9ydCBzb3J0ZWRVbmlxQnkgZnJvbSAnLi9zb3J0ZWRVbmlxQnkuanMnO1xuaW1wb3J0IHRhaWwgZnJvbSAnLi90YWlsLmpzJztcbmltcG9ydCB0YWtlIGZyb20gJy4vdGFrZS5qcyc7XG5pbXBvcnQgdGFrZVJpZ2h0IGZyb20gJy4vdGFrZVJpZ2h0LmpzJztcbmltcG9ydCB0YWtlUmlnaHRXaGlsZSBmcm9tICcuL3Rha2VSaWdodFdoaWxlLmpzJztcbmltcG9ydCB0YWtlV2hpbGUgZnJvbSAnLi90YWtlV2hpbGUuanMnO1xuaW1wb3J0IHVuaW9uIGZyb20gJy4vdW5pb24uanMnO1xuaW1wb3J0IHVuaW9uQnkgZnJvbSAnLi91bmlvbkJ5LmpzJztcbmltcG9ydCB1bmlvbldpdGggZnJvbSAnLi91bmlvbldpdGguanMnO1xuaW1wb3J0IHVuaXEgZnJvbSAnLi91bmlxLmpzJztcbmltcG9ydCB1bmlxQnkgZnJvbSAnLi91bmlxQnkuanMnO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJy4vdW5pcVdpdGguanMnO1xuaW1wb3J0IHVuemlwIGZyb20gJy4vdW56aXAuanMnO1xuaW1wb3J0IHVuemlwV2l0aCBmcm9tICcuL3VuemlwV2l0aC5qcyc7XG5pbXBvcnQgd2l0aG91dCBmcm9tICcuL3dpdGhvdXQuanMnO1xuaW1wb3J0IHhvciBmcm9tICcuL3hvci5qcyc7XG5pbXBvcnQgeG9yQnkgZnJvbSAnLi94b3JCeS5qcyc7XG5pbXBvcnQgeG9yV2l0aCBmcm9tICcuL3hvcldpdGguanMnO1xuaW1wb3J0IHppcCBmcm9tICcuL3ppcC5qcyc7XG5pbXBvcnQgemlwT2JqZWN0IGZyb20gJy4vemlwT2JqZWN0LmpzJztcbmltcG9ydCB6aXBPYmplY3REZWVwIGZyb20gJy4vemlwT2JqZWN0RGVlcC5qcyc7XG5pbXBvcnQgemlwV2l0aCBmcm9tICcuL3ppcFdpdGguanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNodW5rLCBjb21wYWN0LCBjb25jYXQsIGRpZmZlcmVuY2UsIGRpZmZlcmVuY2VCeSxcbiAgZGlmZmVyZW5jZVdpdGgsIGRyb3AsIGRyb3BSaWdodCwgZHJvcFJpZ2h0V2hpbGUsIGRyb3BXaGlsZSxcbiAgZmlsbCwgZmluZEluZGV4LCBmaW5kTGFzdEluZGV4LCBmaXJzdCwgZmxhdHRlbixcbiAgZmxhdHRlbkRlZXAsIGZsYXR0ZW5EZXB0aCwgZnJvbVBhaXJzLCBoZWFkLCBpbmRleE9mLFxuICBpbml0aWFsLCBpbnRlcnNlY3Rpb24sIGludGVyc2VjdGlvbkJ5LCBpbnRlcnNlY3Rpb25XaXRoLCBqb2luLFxuICBsYXN0LCBsYXN0SW5kZXhPZiwgbnRoLCBwdWxsLCBwdWxsQWxsLFxuICBwdWxsQWxsQnksIHB1bGxBbGxXaXRoLCBwdWxsQXQsIHJlbW92ZSwgcmV2ZXJzZSxcbiAgc2xpY2UsIHNvcnRlZEluZGV4LCBzb3J0ZWRJbmRleEJ5LCBzb3J0ZWRJbmRleE9mLCBzb3J0ZWRMYXN0SW5kZXgsXG4gIHNvcnRlZExhc3RJbmRleEJ5LCBzb3J0ZWRMYXN0SW5kZXhPZiwgc29ydGVkVW5pcSwgc29ydGVkVW5pcUJ5LCB0YWlsLFxuICB0YWtlLCB0YWtlUmlnaHQsIHRha2VSaWdodFdoaWxlLCB0YWtlV2hpbGUsIHVuaW9uLFxuICB1bmlvbkJ5LCB1bmlvbldpdGgsIHVuaXEsIHVuaXFCeSwgdW5pcVdpdGgsXG4gIHVuemlwLCB1bnppcFdpdGgsIHdpdGhvdXQsIHhvciwgeG9yQnksXG4gIHhvcldpdGgsIHppcCwgemlwT2JqZWN0LCB6aXBPYmplY3REZWVwLCB6aXBXaXRoXG59O1xuIiwiaW1wb3J0IGNvdW50QnkgZnJvbSAnLi9jb3VudEJ5LmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgZWFjaFJpZ2h0IGZyb20gJy4vZWFjaFJpZ2h0LmpzJztcbmltcG9ydCBldmVyeSBmcm9tICcuL2V2ZXJ5LmpzJztcbmltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IGZpbmQgZnJvbSAnLi9maW5kLmpzJztcbmltcG9ydCBmaW5kTGFzdCBmcm9tICcuL2ZpbmRMYXN0LmpzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJy4vZmxhdE1hcC5qcyc7XG5pbXBvcnQgZmxhdE1hcERlZXAgZnJvbSAnLi9mbGF0TWFwRGVlcC5qcyc7XG5pbXBvcnQgZmxhdE1hcERlcHRoIGZyb20gJy4vZmxhdE1hcERlcHRoLmpzJztcbmltcG9ydCBmb3JFYWNoIGZyb20gJy4vZm9yRWFjaC5qcyc7XG5pbXBvcnQgZm9yRWFjaFJpZ2h0IGZyb20gJy4vZm9yRWFjaFJpZ2h0LmpzJztcbmltcG9ydCBncm91cEJ5IGZyb20gJy4vZ3JvdXBCeS5qcyc7XG5pbXBvcnQgaW5jbHVkZXMgZnJvbSAnLi9pbmNsdWRlcy5qcyc7XG5pbXBvcnQgaW52b2tlTWFwIGZyb20gJy4vaW52b2tlTWFwLmpzJztcbmltcG9ydCBrZXlCeSBmcm9tICcuL2tleUJ5LmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnLi9vcmRlckJ5LmpzJztcbmltcG9ydCBwYXJ0aXRpb24gZnJvbSAnLi9wYXJ0aXRpb24uanMnO1xuaW1wb3J0IHJlZHVjZSBmcm9tICcuL3JlZHVjZS5qcyc7XG5pbXBvcnQgcmVkdWNlUmlnaHQgZnJvbSAnLi9yZWR1Y2VSaWdodC5qcyc7XG5pbXBvcnQgcmVqZWN0IGZyb20gJy4vcmVqZWN0LmpzJztcbmltcG9ydCBzYW1wbGUgZnJvbSAnLi9zYW1wbGUuanMnO1xuaW1wb3J0IHNhbXBsZVNpemUgZnJvbSAnLi9zYW1wbGVTaXplLmpzJztcbmltcG9ydCBzaHVmZmxlIGZyb20gJy4vc2h1ZmZsZS5qcyc7XG5pbXBvcnQgc2l6ZSBmcm9tICcuL3NpemUuanMnO1xuaW1wb3J0IHNvbWUgZnJvbSAnLi9zb21lLmpzJztcbmltcG9ydCBzb3J0QnkgZnJvbSAnLi9zb3J0QnkuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvdW50QnksIGVhY2gsIGVhY2hSaWdodCwgZXZlcnksIGZpbHRlcixcbiAgZmluZCwgZmluZExhc3QsIGZsYXRNYXAsIGZsYXRNYXBEZWVwLCBmbGF0TWFwRGVwdGgsXG4gIGZvckVhY2gsIGZvckVhY2hSaWdodCwgZ3JvdXBCeSwgaW5jbHVkZXMsIGludm9rZU1hcCxcbiAga2V5QnksIG1hcCwgb3JkZXJCeSwgcGFydGl0aW9uLCByZWR1Y2UsXG4gIHJlZHVjZVJpZ2h0LCByZWplY3QsIHNhbXBsZSwgc2FtcGxlU2l6ZSwgc2h1ZmZsZSxcbiAgc2l6ZSwgc29tZSwgc29ydEJ5XG59O1xuIiwiaW1wb3J0IG5vdyBmcm9tICcuL25vdy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbm93XG59O1xuIiwiaW1wb3J0IGFmdGVyIGZyb20gJy4vYWZ0ZXIuanMnO1xuaW1wb3J0IGFyeSBmcm9tICcuL2FyeS5qcyc7XG5pbXBvcnQgYmVmb3JlIGZyb20gJy4vYmVmb3JlLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vYmluZC5qcyc7XG5pbXBvcnQgYmluZEtleSBmcm9tICcuL2JpbmRLZXkuanMnO1xuaW1wb3J0IGN1cnJ5IGZyb20gJy4vY3VycnkuanMnO1xuaW1wb3J0IGN1cnJ5UmlnaHQgZnJvbSAnLi9jdXJyeVJpZ2h0LmpzJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuL2RlYm91bmNlLmpzJztcbmltcG9ydCBkZWZlciBmcm9tICcuL2RlZmVyLmpzJztcbmltcG9ydCBkZWxheSBmcm9tICcuL2RlbGF5LmpzJztcbmltcG9ydCBmbGlwIGZyb20gJy4vZmxpcC5qcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgb25jZSBmcm9tICcuL29uY2UuanMnO1xuaW1wb3J0IG92ZXJBcmdzIGZyb20gJy4vb3ZlckFyZ3MuanMnO1xuaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcbmltcG9ydCBwYXJ0aWFsUmlnaHQgZnJvbSAnLi9wYXJ0aWFsUmlnaHQuanMnO1xuaW1wb3J0IHJlYXJnIGZyb20gJy4vcmVhcmcuanMnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi9yZXN0LmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9zcHJlYWQuanMnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJy4vdGhyb3R0bGUuanMnO1xuaW1wb3J0IHVuYXJ5IGZyb20gJy4vdW5hcnkuanMnO1xuaW1wb3J0IHdyYXAgZnJvbSAnLi93cmFwLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhZnRlciwgYXJ5LCBiZWZvcmUsIGJpbmQsIGJpbmRLZXksXG4gIGN1cnJ5LCBjdXJyeVJpZ2h0LCBkZWJvdW5jZSwgZGVmZXIsIGRlbGF5LFxuICBmbGlwLCBtZW1vaXplLCBuZWdhdGUsIG9uY2UsIG92ZXJBcmdzLFxuICBwYXJ0aWFsLCBwYXJ0aWFsUmlnaHQsIHJlYXJnLCByZXN0LCBzcHJlYWQsXG4gIHRocm90dGxlLCB1bmFyeSwgd3JhcFxufTtcbiIsImltcG9ydCBjYXN0QXJyYXkgZnJvbSAnLi9jYXN0QXJyYXkuanMnO1xuaW1wb3J0IGNsb25lIGZyb20gJy4vY2xvbmUuanMnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICcuL2Nsb25lRGVlcC5qcyc7XG5pbXBvcnQgY2xvbmVEZWVwV2l0aCBmcm9tICcuL2Nsb25lRGVlcFdpdGguanMnO1xuaW1wb3J0IGNsb25lV2l0aCBmcm9tICcuL2Nsb25lV2l0aC5qcyc7XG5pbXBvcnQgY29uZm9ybXNUbyBmcm9tICcuL2NvbmZvcm1zVG8uanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGd0IGZyb20gJy4vZ3QuanMnO1xuaW1wb3J0IGd0ZSBmcm9tICcuL2d0ZS5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXlCdWZmZXIgZnJvbSAnLi9pc0FycmF5QnVmZmVyLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBpc0Jvb2xlYW4gZnJvbSAnLi9pc0Jvb2xlYW4uanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzRGF0ZSBmcm9tICcuL2lzRGF0ZS5qcyc7XG5pbXBvcnQgaXNFbGVtZW50IGZyb20gJy4vaXNFbGVtZW50LmpzJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJy4vaXNFbXB0eS5qcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICcuL2lzRXF1YWwuanMnO1xuaW1wb3J0IGlzRXF1YWxXaXRoIGZyb20gJy4vaXNFcXVhbFdpdGguanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcbmltcG9ydCBpc0Zpbml0ZSBmcm9tICcuL2lzRmluaXRlLmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNJbnRlZ2VyIGZyb20gJy4vaXNJbnRlZ2VyLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCBpc01hcCBmcm9tICcuL2lzTWFwLmpzJztcbmltcG9ydCBpc01hdGNoIGZyb20gJy4vaXNNYXRjaC5qcyc7XG5pbXBvcnQgaXNNYXRjaFdpdGggZnJvbSAnLi9pc01hdGNoV2l0aC5qcyc7XG5pbXBvcnQgaXNOYU4gZnJvbSAnLi9pc05hTi5qcyc7XG5pbXBvcnQgaXNOYXRpdmUgZnJvbSAnLi9pc05hdGl2ZS5qcyc7XG5pbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbC5qcyc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsLmpzJztcbmltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1JlZ0V4cCBmcm9tICcuL2lzUmVnRXhwLmpzJztcbmltcG9ydCBpc1NhZmVJbnRlZ2VyIGZyb20gJy4vaXNTYWZlSW50ZWdlci5qcyc7XG5pbXBvcnQgaXNTZXQgZnJvbSAnLi9pc1NldC5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkLmpzJztcbmltcG9ydCBpc1dlYWtNYXAgZnJvbSAnLi9pc1dlYWtNYXAuanMnO1xuaW1wb3J0IGlzV2Vha1NldCBmcm9tICcuL2lzV2Vha1NldC5qcyc7XG5pbXBvcnQgbHQgZnJvbSAnLi9sdC5qcyc7XG5pbXBvcnQgbHRlIGZyb20gJy4vbHRlLmpzJztcbmltcG9ydCB0b0FycmF5IGZyb20gJy4vdG9BcnJheS5qcyc7XG5pbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b0xlbmd0aCBmcm9tICcuL3RvTGVuZ3RoLmpzJztcbmltcG9ydCB0b051bWJlciBmcm9tICcuL3RvTnVtYmVyLmpzJztcbmltcG9ydCB0b1BsYWluT2JqZWN0IGZyb20gJy4vdG9QbGFpbk9iamVjdC5qcyc7XG5pbXBvcnQgdG9TYWZlSW50ZWdlciBmcm9tICcuL3RvU2FmZUludGVnZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNhc3RBcnJheSwgY2xvbmUsIGNsb25lRGVlcCwgY2xvbmVEZWVwV2l0aCwgY2xvbmVXaXRoLFxuICBjb25mb3Jtc1RvLCBlcSwgZ3QsIGd0ZSwgaXNBcmd1bWVudHMsXG4gIGlzQXJyYXksIGlzQXJyYXlCdWZmZXIsIGlzQXJyYXlMaWtlLCBpc0FycmF5TGlrZU9iamVjdCwgaXNCb29sZWFuLFxuICBpc0J1ZmZlciwgaXNEYXRlLCBpc0VsZW1lbnQsIGlzRW1wdHksIGlzRXF1YWwsXG4gIGlzRXF1YWxXaXRoLCBpc0Vycm9yLCBpc0Zpbml0ZSwgaXNGdW5jdGlvbiwgaXNJbnRlZ2VyLFxuICBpc0xlbmd0aCwgaXNNYXAsIGlzTWF0Y2gsIGlzTWF0Y2hXaXRoLCBpc05hTixcbiAgaXNOYXRpdmUsIGlzTmlsLCBpc051bGwsIGlzTnVtYmVyLCBpc09iamVjdCxcbiAgaXNPYmplY3RMaWtlLCBpc1BsYWluT2JqZWN0LCBpc1JlZ0V4cCwgaXNTYWZlSW50ZWdlciwgaXNTZXQsXG4gIGlzU3RyaW5nLCBpc1N5bWJvbCwgaXNUeXBlZEFycmF5LCBpc1VuZGVmaW5lZCwgaXNXZWFrTWFwLFxuICBpc1dlYWtTZXQsIGx0LCBsdGUsIHRvQXJyYXksIHRvRmluaXRlLFxuICB0b0ludGVnZXIsIHRvTGVuZ3RoLCB0b051bWJlciwgdG9QbGFpbk9iamVjdCwgdG9TYWZlSW50ZWdlcixcbiAgdG9TdHJpbmdcbn07XG4iLCJpbXBvcnQgYWRkIGZyb20gJy4vYWRkLmpzJztcbmltcG9ydCBjZWlsIGZyb20gJy4vY2VpbC5qcyc7XG5pbXBvcnQgZGl2aWRlIGZyb20gJy4vZGl2aWRlLmpzJztcbmltcG9ydCBmbG9vciBmcm9tICcuL2Zsb29yLmpzJztcbmltcG9ydCBtYXggZnJvbSAnLi9tYXguanMnO1xuaW1wb3J0IG1heEJ5IGZyb20gJy4vbWF4QnkuanMnO1xuaW1wb3J0IG1lYW4gZnJvbSAnLi9tZWFuLmpzJztcbmltcG9ydCBtZWFuQnkgZnJvbSAnLi9tZWFuQnkuanMnO1xuaW1wb3J0IG1pbiBmcm9tICcuL21pbi5qcyc7XG5pbXBvcnQgbWluQnkgZnJvbSAnLi9taW5CeS5qcyc7XG5pbXBvcnQgbXVsdGlwbHkgZnJvbSAnLi9tdWx0aXBseS5qcyc7XG5pbXBvcnQgcm91bmQgZnJvbSAnLi9yb3VuZC5qcyc7XG5pbXBvcnQgc3VidHJhY3QgZnJvbSAnLi9zdWJ0cmFjdC5qcyc7XG5pbXBvcnQgc3VtIGZyb20gJy4vc3VtLmpzJztcbmltcG9ydCBzdW1CeSBmcm9tICcuL3N1bUJ5LmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhZGQsIGNlaWwsIGRpdmlkZSwgZmxvb3IsIG1heCxcbiAgbWF4QnksIG1lYW4sIG1lYW5CeSwgbWluLCBtaW5CeSxcbiAgbXVsdGlwbHksIHJvdW5kLCBzdWJ0cmFjdCwgc3VtLCBzdW1CeVxufTtcbiIsImltcG9ydCBjbGFtcCBmcm9tICcuL2NsYW1wLmpzJztcbmltcG9ydCBpblJhbmdlIGZyb20gJy4vaW5SYW5nZS5qcyc7XG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjbGFtcCwgaW5SYW5nZSwgcmFuZG9tXG59O1xuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICcuL2Fzc2lnbi5qcyc7XG5pbXBvcnQgYXNzaWduSW4gZnJvbSAnLi9hc3NpZ25Jbi5qcyc7XG5pbXBvcnQgYXNzaWduSW5XaXRoIGZyb20gJy4vYXNzaWduSW5XaXRoLmpzJztcbmltcG9ydCBhc3NpZ25XaXRoIGZyb20gJy4vYXNzaWduV2l0aC5qcyc7XG5pbXBvcnQgYXQgZnJvbSAnLi9hdC5qcyc7XG5pbXBvcnQgY3JlYXRlIGZyb20gJy4vY3JlYXRlLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzLmpzJztcbmltcG9ydCBkZWZhdWx0c0RlZXAgZnJvbSAnLi9kZWZhdWx0c0RlZXAuanMnO1xuaW1wb3J0IGVudHJpZXMgZnJvbSAnLi9lbnRyaWVzLmpzJztcbmltcG9ydCBlbnRyaWVzSW4gZnJvbSAnLi9lbnRyaWVzSW4uanMnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuL2V4dGVuZC5qcyc7XG5pbXBvcnQgZXh0ZW5kV2l0aCBmcm9tICcuL2V4dGVuZFdpdGguanMnO1xuaW1wb3J0IGZpbmRLZXkgZnJvbSAnLi9maW5kS2V5LmpzJztcbmltcG9ydCBmaW5kTGFzdEtleSBmcm9tICcuL2ZpbmRMYXN0S2V5LmpzJztcbmltcG9ydCBmb3JJbiBmcm9tICcuL2ZvckluLmpzJztcbmltcG9ydCBmb3JJblJpZ2h0IGZyb20gJy4vZm9ySW5SaWdodC5qcyc7XG5pbXBvcnQgZm9yT3duIGZyb20gJy4vZm9yT3duLmpzJztcbmltcG9ydCBmb3JPd25SaWdodCBmcm9tICcuL2Zvck93blJpZ2h0LmpzJztcbmltcG9ydCBmdW5jdGlvbnMgZnJvbSAnLi9mdW5jdGlvbnMuanMnO1xuaW1wb3J0IGZ1bmN0aW9uc0luIGZyb20gJy4vZnVuY3Rpb25zSW4uanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzLmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcbmltcG9ydCBpbnZlcnQgZnJvbSAnLi9pbnZlcnQuanMnO1xuaW1wb3J0IGludmVydEJ5IGZyb20gJy4vaW52ZXJ0QnkuanMnO1xuaW1wb3J0IGludm9rZSBmcm9tICcuL2ludm9rZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5pbXBvcnQgbWFwS2V5cyBmcm9tICcuL21hcEtleXMuanMnO1xuaW1wb3J0IG1hcFZhbHVlcyBmcm9tICcuL21hcFZhbHVlcy5qcyc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZS5qcyc7XG5pbXBvcnQgbWVyZ2VXaXRoIGZyb20gJy4vbWVyZ2VXaXRoLmpzJztcbmltcG9ydCBvbWl0IGZyb20gJy4vb21pdC5qcyc7XG5pbXBvcnQgb21pdEJ5IGZyb20gJy4vb21pdEJ5LmpzJztcbmltcG9ydCBwaWNrIGZyb20gJy4vcGljay5qcyc7XG5pbXBvcnQgcGlja0J5IGZyb20gJy4vcGlja0J5LmpzJztcbmltcG9ydCByZXN1bHQgZnJvbSAnLi9yZXN1bHQuanMnO1xuaW1wb3J0IHNldCBmcm9tICcuL3NldC5qcyc7XG5pbXBvcnQgc2V0V2l0aCBmcm9tICcuL3NldFdpdGguanMnO1xuaW1wb3J0IHRvUGFpcnMgZnJvbSAnLi90b1BhaXJzLmpzJztcbmltcG9ydCB0b1BhaXJzSW4gZnJvbSAnLi90b1BhaXJzSW4uanMnO1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybS5qcyc7XG5pbXBvcnQgdW5zZXQgZnJvbSAnLi91bnNldC5qcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJy4vdXBkYXRlLmpzJztcbmltcG9ydCB1cGRhdGVXaXRoIGZyb20gJy4vdXBkYXRlV2l0aC5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCB2YWx1ZXNJbiBmcm9tICcuL3ZhbHVlc0luLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NpZ24sIGFzc2lnbkluLCBhc3NpZ25JbldpdGgsIGFzc2lnbldpdGgsIGF0LFxuICBjcmVhdGUsIGRlZmF1bHRzLCBkZWZhdWx0c0RlZXAsIGVudHJpZXMsIGVudHJpZXNJbixcbiAgZXh0ZW5kLCBleHRlbmRXaXRoLCBmaW5kS2V5LCBmaW5kTGFzdEtleSwgZm9ySW4sXG4gIGZvckluUmlnaHQsIGZvck93biwgZm9yT3duUmlnaHQsIGZ1bmN0aW9ucywgZnVuY3Rpb25zSW4sXG4gIGdldCwgaGFzLCBoYXNJbiwgaW52ZXJ0LCBpbnZlcnRCeSxcbiAgaW52b2tlLCBrZXlzLCBrZXlzSW4sIG1hcEtleXMsIG1hcFZhbHVlcyxcbiAgbWVyZ2UsIG1lcmdlV2l0aCwgb21pdCwgb21pdEJ5LCBwaWNrLFxuICBwaWNrQnksIHJlc3VsdCwgc2V0LCBzZXRXaXRoLCB0b1BhaXJzLFxuICB0b1BhaXJzSW4sIHRyYW5zZm9ybSwgdW5zZXQsIHVwZGF0ZSwgdXBkYXRlV2l0aCxcbiAgdmFsdWVzLCB2YWx1ZXNJblxufTtcbiIsImltcG9ydCBhdCBmcm9tICcuL3dyYXBwZXJBdC5qcyc7XG5pbXBvcnQgY2hhaW4gZnJvbSAnLi9jaGFpbi5qcyc7XG5pbXBvcnQgY29tbWl0IGZyb20gJy4vY29tbWl0LmpzJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcbmltcG9ydCBuZXh0IGZyb20gJy4vbmV4dC5qcyc7XG5pbXBvcnQgcGxhbnQgZnJvbSAnLi9wbGFudC5qcyc7XG5pbXBvcnQgcmV2ZXJzZSBmcm9tICcuL3dyYXBwZXJSZXZlcnNlLmpzJztcbmltcG9ydCB0YXAgZnJvbSAnLi90YXAuanMnO1xuaW1wb3J0IHRocnUgZnJvbSAnLi90aHJ1LmpzJztcbmltcG9ydCB0b0l0ZXJhdG9yIGZyb20gJy4vdG9JdGVyYXRvci5qcyc7XG5pbXBvcnQgdG9KU09OIGZyb20gJy4vdG9KU09OLmpzJztcbmltcG9ydCB2YWx1ZSBmcm9tICcuL3dyYXBwZXJWYWx1ZS5qcyc7XG5pbXBvcnQgdmFsdWVPZiBmcm9tICcuL3ZhbHVlT2YuanMnO1xuaW1wb3J0IHdyYXBwZXJDaGFpbiBmcm9tICcuL3dyYXBwZXJDaGFpbi5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXQsIGNoYWluLCBjb21taXQsIGxvZGFzaCwgbmV4dCxcbiAgcGxhbnQsIHJldmVyc2UsIHRhcCwgdGhydSwgdG9JdGVyYXRvcixcbiAgdG9KU09OLCB2YWx1ZSwgdmFsdWVPZiwgd3JhcHBlckNoYWluXG59O1xuIiwiaW1wb3J0IGNhbWVsQ2FzZSBmcm9tICcuL2NhbWVsQ2FzZS5qcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuL2NhcGl0YWxpemUuanMnO1xuaW1wb3J0IGRlYnVyciBmcm9tICcuL2RlYnVyci5qcyc7XG5pbXBvcnQgZW5kc1dpdGggZnJvbSAnLi9lbmRzV2l0aC5qcyc7XG5pbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnLi9lc2NhcGVSZWdFeHAuanMnO1xuaW1wb3J0IGtlYmFiQ2FzZSBmcm9tICcuL2tlYmFiQ2FzZS5qcyc7XG5pbXBvcnQgbG93ZXJDYXNlIGZyb20gJy4vbG93ZXJDYXNlLmpzJztcbmltcG9ydCBsb3dlckZpcnN0IGZyb20gJy4vbG93ZXJGaXJzdC5qcyc7XG5pbXBvcnQgcGFkIGZyb20gJy4vcGFkLmpzJztcbmltcG9ydCBwYWRFbmQgZnJvbSAnLi9wYWRFbmQuanMnO1xuaW1wb3J0IHBhZFN0YXJ0IGZyb20gJy4vcGFkU3RhcnQuanMnO1xuaW1wb3J0IHBhcnNlSW50IGZyb20gJy4vcGFyc2VJbnQuanMnO1xuaW1wb3J0IHJlcGVhdCBmcm9tICcuL3JlcGVhdC5qcyc7XG5pbXBvcnQgcmVwbGFjZSBmcm9tICcuL3JlcGxhY2UuanMnO1xuaW1wb3J0IHNuYWtlQ2FzZSBmcm9tICcuL3NuYWtlQ2FzZS5qcyc7XG5pbXBvcnQgc3BsaXQgZnJvbSAnLi9zcGxpdC5qcyc7XG5pbXBvcnQgc3RhcnRDYXNlIGZyb20gJy4vc3RhcnRDYXNlLmpzJztcbmltcG9ydCBzdGFydHNXaXRoIGZyb20gJy4vc3RhcnRzV2l0aC5qcyc7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZS5qcyc7XG5pbXBvcnQgdGVtcGxhdGVTZXR0aW5ncyBmcm9tICcuL3RlbXBsYXRlU2V0dGluZ3MuanMnO1xuaW1wb3J0IHRvTG93ZXIgZnJvbSAnLi90b0xvd2VyLmpzJztcbmltcG9ydCB0b1VwcGVyIGZyb20gJy4vdG9VcHBlci5qcyc7XG5pbXBvcnQgdHJpbSBmcm9tICcuL3RyaW0uanMnO1xuaW1wb3J0IHRyaW1FbmQgZnJvbSAnLi90cmltRW5kLmpzJztcbmltcG9ydCB0cmltU3RhcnQgZnJvbSAnLi90cmltU3RhcnQuanMnO1xuaW1wb3J0IHRydW5jYXRlIGZyb20gJy4vdHJ1bmNhdGUuanMnO1xuaW1wb3J0IHVuZXNjYXBlIGZyb20gJy4vdW5lc2NhcGUuanMnO1xuaW1wb3J0IHVwcGVyQ2FzZSBmcm9tICcuL3VwcGVyQ2FzZS5qcyc7XG5pbXBvcnQgdXBwZXJGaXJzdCBmcm9tICcuL3VwcGVyRmlyc3QuanMnO1xuaW1wb3J0IHdvcmRzIGZyb20gJy4vd29yZHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgZGVidXJyLCBlbmRzV2l0aCwgZXNjYXBlLFxuICBlc2NhcGVSZWdFeHAsIGtlYmFiQ2FzZSwgbG93ZXJDYXNlLCBsb3dlckZpcnN0LCBwYWQsXG4gIHBhZEVuZCwgcGFkU3RhcnQsIHBhcnNlSW50LCByZXBlYXQsIHJlcGxhY2UsXG4gIHNuYWtlQ2FzZSwgc3BsaXQsIHN0YXJ0Q2FzZSwgc3RhcnRzV2l0aCwgdGVtcGxhdGUsXG4gIHRlbXBsYXRlU2V0dGluZ3MsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW0sIHRyaW1FbmQsXG4gIHRyaW1TdGFydCwgdHJ1bmNhdGUsIHVuZXNjYXBlLCB1cHBlckNhc2UsIHVwcGVyRmlyc3QsXG4gIHdvcmRzXG59O1xuIiwiaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiaW5kQWxsIGZyb20gJy4vYmluZEFsbC5qcyc7XG5pbXBvcnQgY29uZCBmcm9tICcuL2NvbmQuanMnO1xuaW1wb3J0IGNvbmZvcm1zIGZyb20gJy4vY29uZm9ybXMuanMnO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmF1bHRUbyBmcm9tICcuL2RlZmF1bHRUby5qcyc7XG5pbXBvcnQgZmxvdyBmcm9tICcuL2Zsb3cuanMnO1xuaW1wb3J0IGZsb3dSaWdodCBmcm9tICcuL2Zsb3dSaWdodC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXRlcmF0ZWUgZnJvbSAnLi9pdGVyYXRlZS5qcyc7XG5pbXBvcnQgbWF0Y2hlcyBmcm9tICcuL21hdGNoZXMuanMnO1xuaW1wb3J0IG1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL21hdGNoZXNQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgbWV0aG9kIGZyb20gJy4vbWV0aG9kLmpzJztcbmltcG9ydCBtZXRob2RPZiBmcm9tICcuL21ldGhvZE9mLmpzJztcbmltcG9ydCBtaXhpbiBmcm9tICcuL21peGluLmpzJztcbmltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgbnRoQXJnIGZyb20gJy4vbnRoQXJnLmpzJztcbmltcG9ydCBvdmVyIGZyb20gJy4vb3Zlci5qcyc7XG5pbXBvcnQgb3ZlckV2ZXJ5IGZyb20gJy4vb3ZlckV2ZXJ5LmpzJztcbmltcG9ydCBvdmVyU29tZSBmcm9tICcuL292ZXJTb21lLmpzJztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICcuL3Byb3BlcnR5LmpzJztcbmltcG9ydCBwcm9wZXJ0eU9mIGZyb20gJy4vcHJvcGVydHlPZi5qcyc7XG5pbXBvcnQgcmFuZ2UgZnJvbSAnLi9yYW5nZS5qcyc7XG5pbXBvcnQgcmFuZ2VSaWdodCBmcm9tICcuL3JhbmdlUmlnaHQuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5pbXBvcnQgc3R1YkZhbHNlIGZyb20gJy4vc3R1YkZhbHNlLmpzJztcbmltcG9ydCBzdHViT2JqZWN0IGZyb20gJy4vc3R1Yk9iamVjdC5qcyc7XG5pbXBvcnQgc3R1YlN0cmluZyBmcm9tICcuL3N0dWJTdHJpbmcuanMnO1xuaW1wb3J0IHN0dWJUcnVlIGZyb20gJy4vc3R1YlRydWUuanMnO1xuaW1wb3J0IHRpbWVzIGZyb20gJy4vdGltZXMuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL3RvUGF0aC5qcyc7XG5pbXBvcnQgdW5pcXVlSWQgZnJvbSAnLi91bmlxdWVJZC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXR0ZW1wdCwgYmluZEFsbCwgY29uZCwgY29uZm9ybXMsIGNvbnN0YW50LFxuICBkZWZhdWx0VG8sIGZsb3csIGZsb3dSaWdodCwgaWRlbnRpdHksIGl0ZXJhdGVlLFxuICBtYXRjaGVzLCBtYXRjaGVzUHJvcGVydHksIG1ldGhvZCwgbWV0aG9kT2YsIG1peGluLFxuICBub29wLCBudGhBcmcsIG92ZXIsIG92ZXJFdmVyeSwgb3ZlclNvbWUsXG4gIHByb3BlcnR5LCBwcm9wZXJ0eU9mLCByYW5nZSwgcmFuZ2VSaWdodCwgc3R1YkFycmF5LFxuICBzdHViRmFsc2UsIHN0dWJPYmplY3QsIHN0dWJTdHJpbmcsIHN0dWJUcnVlLCB0aW1lcyxcbiAgdG9QYXRoLCB1bmlxdWVJZFxufTtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbG9uZVxuICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGxhenlDbG9uZSgpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzLl9fd3JhcHBlZF9fKTtcbiAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICByZXN1bHQuX19kaXJfXyA9IHRoaXMuX19kaXJfXztcbiAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRoaXMuX19maWx0ZXJlZF9fO1xuICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICByZXN1bHQuX190YWtlQ291bnRfXyA9IHRoaXMuX190YWtlQ291bnRfXztcbiAgcmVzdWx0Ll9fdmlld3NfXyA9IGNvcHlBcnJheSh0aGlzLl9fdmlld3NfXyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhenlDbG9uZTtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5cbi8qKlxuICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgcmV2ZXJzZVxuICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgcmV2ZXJzZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGxhenlSZXZlcnNlKCkge1xuICBpZiAodGhpcy5fX2ZpbHRlcmVkX18pIHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgIHJlc3VsdC5fX2Rpcl9fID0gLTE7XG4gICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgIHJlc3VsdC5fX2Rpcl9fICo9IC0xO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhenlSZXZlcnNlO1xuIiwiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIEdldHMgdGhlIHZpZXcsIGFwcGx5aW5nIGFueSBgdHJhbnNmb3Jtc2AgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSB7QXJyYXl9IHRyYW5zZm9ybXMgVGhlIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgdmlldy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzdGFydGAgYW5kIGBlbmRgXG4gKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICovXG5mdW5jdGlvbiBnZXRWaWV3KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICBjYXNlICdkcm9wUmlnaHQnOiBlbmQgLT0gc2l6ZTsgYnJlYWs7XG4gICAgICBjYXNlICd0YWtlJzogICAgICBlbmQgPSBuYXRpdmVNaW4oZW5kLCBzdGFydCArIHNpemUpOyBicmVhaztcbiAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZpZXc7XG4iLCJpbXBvcnQgYmFzZVdyYXBwZXJWYWx1ZSBmcm9tICcuL19iYXNlV3JhcHBlclZhbHVlLmpzJztcbmltcG9ydCBnZXRWaWV3IGZyb20gJy4vX2dldFZpZXcuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgbGF6eSBpdGVyYXRlZXMuICovXG52YXIgTEFaWV9GSUxURVJfRkxBRyA9IDEsXG4gICAgTEFaWV9NQVBfRkxBRyA9IDI7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdW53cmFwcGVkIHZhbHVlIGZyb20gaXRzIGxhenkgd3JhcHBlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgdmFsdWVcbiAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICB2YXIgYXJyYXkgPSB0aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksXG4gICAgICBkaXIgPSB0aGlzLl9fZGlyX18sXG4gICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgaXNSaWdodCA9IGRpciA8IDAsXG4gICAgICBhcnJMZW5ndGggPSBpc0FyciA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgIHN0YXJ0ID0gdmlldy5zdGFydCxcbiAgICAgIGVuZCA9IHZpZXcuZW5kLFxuICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICBpbmRleCA9IGlzUmlnaHQgPyBlbmQgOiAoc3RhcnQgLSAxKSxcbiAgICAgIGl0ZXJhdGVlcyA9IHRoaXMuX19pdGVyYXRlZXNfXyxcbiAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgdGFrZUNvdW50ID0gbmF0aXZlTWluKGxlbmd0aCwgdGhpcy5fX3Rha2VDb3VudF9fKTtcblxuICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoYXJyYXksIHRoaXMuX19hY3Rpb25zX18pO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBvdXRlcjpcbiAgd2hpbGUgKGxlbmd0aC0tICYmIHJlc0luZGV4IDwgdGFrZUNvdW50KSB7XG4gICAgaW5kZXggKz0gZGlyO1xuXG4gICAgdmFyIGl0ZXJJbmRleCA9IC0xLFxuICAgICAgICB2YWx1ZSA9IGFycmF5W2luZGV4XTtcblxuICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sXG4gICAgICAgICAgaXRlcmF0ZWUgPSBkYXRhLml0ZXJhdGVlLFxuICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgIGlmICh0eXBlID09IExBWllfTUFQX0ZMQUcpIHtcbiAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICAgIGlmICh0eXBlID09IExBWllfRklMVEVSX0ZMQUcpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXp5VmFsdWU7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJlc1wiIC1vIC4vYFxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5pbXBvcnQgYXJyYXkgZnJvbSAnLi9hcnJheS5qcyc7XG5pbXBvcnQgY29sbGVjdGlvbiBmcm9tICcuL2NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IGRhdGUgZnJvbSAnLi9kYXRlLmpzJztcbmltcG9ydCBmdW5jIGZyb20gJy4vZnVuY3Rpb24uanMnO1xuaW1wb3J0IGxhbmcgZnJvbSAnLi9sYW5nLmpzJztcbmltcG9ydCBtYXRoIGZyb20gJy4vbWF0aC5qcyc7XG5pbXBvcnQgbnVtYmVyIGZyb20gJy4vbnVtYmVyLmpzJztcbmltcG9ydCBvYmplY3QgZnJvbSAnLi9vYmplY3QuanMnO1xuaW1wb3J0IHNlcSBmcm9tICcuL3NlcS5qcyc7XG5pbXBvcnQgc3RyaW5nIGZyb20gJy4vc3RyaW5nLmpzJztcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbC5qcyc7XG5pbXBvcnQgTGF6eVdyYXBwZXIgZnJvbSAnLi9fTGF6eVdyYXBwZXIuanMnO1xuaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBiYXNlRnVuY3Rpb25zIGZyb20gJy4vX2Jhc2VGdW5jdGlvbnMuanMnO1xuaW1wb3J0IGJhc2VJbnZva2UgZnJvbSAnLi9fYmFzZUludm9rZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNyZWF0ZUh5YnJpZCBmcm9tICcuL19jcmVhdGVIeWJyaWQuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuaW1wb3J0IGxhenlDbG9uZSBmcm9tICcuL19sYXp5Q2xvbmUuanMnO1xuaW1wb3J0IGxhenlSZXZlcnNlIGZyb20gJy4vX2xhenlSZXZlcnNlLmpzJztcbmltcG9ydCBsYXp5VmFsdWUgZnJvbSAnLi9fbGF6eVZhbHVlLmpzJztcbmltcG9ydCBfbWl4aW4gZnJvbSAnLi9taXhpbi5qcyc7XG5pbXBvcnQgbmVnYXRlIGZyb20gJy4vbmVnYXRlLmpzJztcbmltcG9ydCByZWFsTmFtZXMgZnJvbSAnLi9fcmVhbE5hbWVzLmpzJztcbmltcG9ydCB0aHJ1IGZyb20gJy4vdGhydS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLiAqL1xudmFyIFZFUlNJT04gPSAnNC4xNy4xNSc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9LRVlfRkxBRyA9IDI7XG5cbi8qKiBVc2VkIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGxhenkgaXRlcmF0ZWVzLiAqL1xudmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgIExBWllfV0hJTEVfRkxBRyA9IDM7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLy8gd3JhcCBgXy5taXhpbmAgc28gaXQgd29ya3Mgd2hlbiBwcm92aWRlZCBvbmx5IG9uZSBhcmd1bWVudFxudmFyIG1peGluID0gKGZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgdmFyIGlzT2JqID0gaXNPYmplY3Qoc291cmNlKSxcbiAgICAgICAgICBwcm9wcyA9IGlzT2JqICYmIGtleXMoc291cmNlKSxcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IHByb3BzICYmIHByb3BzLmxlbmd0aCAmJiBiYXNlRnVuY3Rpb25zKHNvdXJjZSwgcHJvcHMpO1xuXG4gICAgICBpZiAoIShtZXRob2ROYW1lcyA/IG1ldGhvZE5hbWVzLmxlbmd0aCA6IGlzT2JqKSkge1xuICAgICAgICBvcHRpb25zID0gc291cmNlO1xuICAgICAgICBzb3VyY2UgPSBvYmplY3Q7XG4gICAgICAgIG9iamVjdCA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jKG9iamVjdCwgc291cmNlLCBvcHRpb25zKTtcbiAgfTtcbn0oX21peGluKSk7XG5cbi8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHdyYXBwZWQgdmFsdWVzIGluIGNoYWluIHNlcXVlbmNlcy5cbmxvZGFzaC5hZnRlciA9IGZ1bmMuYWZ0ZXI7XG5sb2Rhc2guYXJ5ID0gZnVuYy5hcnk7XG5sb2Rhc2guYXNzaWduID0gb2JqZWN0LmFzc2lnbjtcbmxvZGFzaC5hc3NpZ25JbiA9IG9iamVjdC5hc3NpZ25JbjtcbmxvZGFzaC5hc3NpZ25JbldpdGggPSBvYmplY3QuYXNzaWduSW5XaXRoO1xubG9kYXNoLmFzc2lnbldpdGggPSBvYmplY3QuYXNzaWduV2l0aDtcbmxvZGFzaC5hdCA9IG9iamVjdC5hdDtcbmxvZGFzaC5iZWZvcmUgPSBmdW5jLmJlZm9yZTtcbmxvZGFzaC5iaW5kID0gZnVuYy5iaW5kO1xubG9kYXNoLmJpbmRBbGwgPSB1dGlsLmJpbmRBbGw7XG5sb2Rhc2guYmluZEtleSA9IGZ1bmMuYmluZEtleTtcbmxvZGFzaC5jYXN0QXJyYXkgPSBsYW5nLmNhc3RBcnJheTtcbmxvZGFzaC5jaGFpbiA9IHNlcS5jaGFpbjtcbmxvZGFzaC5jaHVuayA9IGFycmF5LmNodW5rO1xubG9kYXNoLmNvbXBhY3QgPSBhcnJheS5jb21wYWN0O1xubG9kYXNoLmNvbmNhdCA9IGFycmF5LmNvbmNhdDtcbmxvZGFzaC5jb25kID0gdXRpbC5jb25kO1xubG9kYXNoLmNvbmZvcm1zID0gdXRpbC5jb25mb3JtcztcbmxvZGFzaC5jb25zdGFudCA9IHV0aWwuY29uc3RhbnQ7XG5sb2Rhc2guY291bnRCeSA9IGNvbGxlY3Rpb24uY291bnRCeTtcbmxvZGFzaC5jcmVhdGUgPSBvYmplY3QuY3JlYXRlO1xubG9kYXNoLmN1cnJ5ID0gZnVuYy5jdXJyeTtcbmxvZGFzaC5jdXJyeVJpZ2h0ID0gZnVuYy5jdXJyeVJpZ2h0O1xubG9kYXNoLmRlYm91bmNlID0gZnVuYy5kZWJvdW5jZTtcbmxvZGFzaC5kZWZhdWx0cyA9IG9iamVjdC5kZWZhdWx0cztcbmxvZGFzaC5kZWZhdWx0c0RlZXAgPSBvYmplY3QuZGVmYXVsdHNEZWVwO1xubG9kYXNoLmRlZmVyID0gZnVuYy5kZWZlcjtcbmxvZGFzaC5kZWxheSA9IGZ1bmMuZGVsYXk7XG5sb2Rhc2guZGlmZmVyZW5jZSA9IGFycmF5LmRpZmZlcmVuY2U7XG5sb2Rhc2guZGlmZmVyZW5jZUJ5ID0gYXJyYXkuZGlmZmVyZW5jZUJ5O1xubG9kYXNoLmRpZmZlcmVuY2VXaXRoID0gYXJyYXkuZGlmZmVyZW5jZVdpdGg7XG5sb2Rhc2guZHJvcCA9IGFycmF5LmRyb3A7XG5sb2Rhc2guZHJvcFJpZ2h0ID0gYXJyYXkuZHJvcFJpZ2h0O1xubG9kYXNoLmRyb3BSaWdodFdoaWxlID0gYXJyYXkuZHJvcFJpZ2h0V2hpbGU7XG5sb2Rhc2guZHJvcFdoaWxlID0gYXJyYXkuZHJvcFdoaWxlO1xubG9kYXNoLmZpbGwgPSBhcnJheS5maWxsO1xubG9kYXNoLmZpbHRlciA9IGNvbGxlY3Rpb24uZmlsdGVyO1xubG9kYXNoLmZsYXRNYXAgPSBjb2xsZWN0aW9uLmZsYXRNYXA7XG5sb2Rhc2guZmxhdE1hcERlZXAgPSBjb2xsZWN0aW9uLmZsYXRNYXBEZWVwO1xubG9kYXNoLmZsYXRNYXBEZXB0aCA9IGNvbGxlY3Rpb24uZmxhdE1hcERlcHRoO1xubG9kYXNoLmZsYXR0ZW4gPSBhcnJheS5mbGF0dGVuO1xubG9kYXNoLmZsYXR0ZW5EZWVwID0gYXJyYXkuZmxhdHRlbkRlZXA7XG5sb2Rhc2guZmxhdHRlbkRlcHRoID0gYXJyYXkuZmxhdHRlbkRlcHRoO1xubG9kYXNoLmZsaXAgPSBmdW5jLmZsaXA7XG5sb2Rhc2guZmxvdyA9IHV0aWwuZmxvdztcbmxvZGFzaC5mbG93UmlnaHQgPSB1dGlsLmZsb3dSaWdodDtcbmxvZGFzaC5mcm9tUGFpcnMgPSBhcnJheS5mcm9tUGFpcnM7XG5sb2Rhc2guZnVuY3Rpb25zID0gb2JqZWN0LmZ1bmN0aW9ucztcbmxvZGFzaC5mdW5jdGlvbnNJbiA9IG9iamVjdC5mdW5jdGlvbnNJbjtcbmxvZGFzaC5ncm91cEJ5ID0gY29sbGVjdGlvbi5ncm91cEJ5O1xubG9kYXNoLmluaXRpYWwgPSBhcnJheS5pbml0aWFsO1xubG9kYXNoLmludGVyc2VjdGlvbiA9IGFycmF5LmludGVyc2VjdGlvbjtcbmxvZGFzaC5pbnRlcnNlY3Rpb25CeSA9IGFycmF5LmludGVyc2VjdGlvbkJ5O1xubG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBhcnJheS5pbnRlcnNlY3Rpb25XaXRoO1xubG9kYXNoLmludmVydCA9IG9iamVjdC5pbnZlcnQ7XG5sb2Rhc2guaW52ZXJ0QnkgPSBvYmplY3QuaW52ZXJ0Qnk7XG5sb2Rhc2guaW52b2tlTWFwID0gY29sbGVjdGlvbi5pbnZva2VNYXA7XG5sb2Rhc2guaXRlcmF0ZWUgPSB1dGlsLml0ZXJhdGVlO1xubG9kYXNoLmtleUJ5ID0gY29sbGVjdGlvbi5rZXlCeTtcbmxvZGFzaC5rZXlzID0ga2V5cztcbmxvZGFzaC5rZXlzSW4gPSBvYmplY3Qua2V5c0luO1xubG9kYXNoLm1hcCA9IGNvbGxlY3Rpb24ubWFwO1xubG9kYXNoLm1hcEtleXMgPSBvYmplY3QubWFwS2V5cztcbmxvZGFzaC5tYXBWYWx1ZXMgPSBvYmplY3QubWFwVmFsdWVzO1xubG9kYXNoLm1hdGNoZXMgPSB1dGlsLm1hdGNoZXM7XG5sb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gdXRpbC5tYXRjaGVzUHJvcGVydHk7XG5sb2Rhc2gubWVtb2l6ZSA9IGZ1bmMubWVtb2l6ZTtcbmxvZGFzaC5tZXJnZSA9IG9iamVjdC5tZXJnZTtcbmxvZGFzaC5tZXJnZVdpdGggPSBvYmplY3QubWVyZ2VXaXRoO1xubG9kYXNoLm1ldGhvZCA9IHV0aWwubWV0aG9kO1xubG9kYXNoLm1ldGhvZE9mID0gdXRpbC5tZXRob2RPZjtcbmxvZGFzaC5taXhpbiA9IG1peGluO1xubG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbmxvZGFzaC5udGhBcmcgPSB1dGlsLm50aEFyZztcbmxvZGFzaC5vbWl0ID0gb2JqZWN0Lm9taXQ7XG5sb2Rhc2gub21pdEJ5ID0gb2JqZWN0Lm9taXRCeTtcbmxvZGFzaC5vbmNlID0gZnVuYy5vbmNlO1xubG9kYXNoLm9yZGVyQnkgPSBjb2xsZWN0aW9uLm9yZGVyQnk7XG5sb2Rhc2gub3ZlciA9IHV0aWwub3ZlcjtcbmxvZGFzaC5vdmVyQXJncyA9IGZ1bmMub3ZlckFyZ3M7XG5sb2Rhc2gub3ZlckV2ZXJ5ID0gdXRpbC5vdmVyRXZlcnk7XG5sb2Rhc2gub3ZlclNvbWUgPSB1dGlsLm92ZXJTb21lO1xubG9kYXNoLnBhcnRpYWwgPSBmdW5jLnBhcnRpYWw7XG5sb2Rhc2gucGFydGlhbFJpZ2h0ID0gZnVuYy5wYXJ0aWFsUmlnaHQ7XG5sb2Rhc2gucGFydGl0aW9uID0gY29sbGVjdGlvbi5wYXJ0aXRpb247XG5sb2Rhc2gucGljayA9IG9iamVjdC5waWNrO1xubG9kYXNoLnBpY2tCeSA9IG9iamVjdC5waWNrQnk7XG5sb2Rhc2gucHJvcGVydHkgPSB1dGlsLnByb3BlcnR5O1xubG9kYXNoLnByb3BlcnR5T2YgPSB1dGlsLnByb3BlcnR5T2Y7XG5sb2Rhc2gucHVsbCA9IGFycmF5LnB1bGw7XG5sb2Rhc2gucHVsbEFsbCA9IGFycmF5LnB1bGxBbGw7XG5sb2Rhc2gucHVsbEFsbEJ5ID0gYXJyYXkucHVsbEFsbEJ5O1xubG9kYXNoLnB1bGxBbGxXaXRoID0gYXJyYXkucHVsbEFsbFdpdGg7XG5sb2Rhc2gucHVsbEF0ID0gYXJyYXkucHVsbEF0O1xubG9kYXNoLnJhbmdlID0gdXRpbC5yYW5nZTtcbmxvZGFzaC5yYW5nZVJpZ2h0ID0gdXRpbC5yYW5nZVJpZ2h0O1xubG9kYXNoLnJlYXJnID0gZnVuYy5yZWFyZztcbmxvZGFzaC5yZWplY3QgPSBjb2xsZWN0aW9uLnJlamVjdDtcbmxvZGFzaC5yZW1vdmUgPSBhcnJheS5yZW1vdmU7XG5sb2Rhc2gucmVzdCA9IGZ1bmMucmVzdDtcbmxvZGFzaC5yZXZlcnNlID0gYXJyYXkucmV2ZXJzZTtcbmxvZGFzaC5zYW1wbGVTaXplID0gY29sbGVjdGlvbi5zYW1wbGVTaXplO1xubG9kYXNoLnNldCA9IG9iamVjdC5zZXQ7XG5sb2Rhc2guc2V0V2l0aCA9IG9iamVjdC5zZXRXaXRoO1xubG9kYXNoLnNodWZmbGUgPSBjb2xsZWN0aW9uLnNodWZmbGU7XG5sb2Rhc2guc2xpY2UgPSBhcnJheS5zbGljZTtcbmxvZGFzaC5zb3J0QnkgPSBjb2xsZWN0aW9uLnNvcnRCeTtcbmxvZGFzaC5zb3J0ZWRVbmlxID0gYXJyYXkuc29ydGVkVW5pcTtcbmxvZGFzaC5zb3J0ZWRVbmlxQnkgPSBhcnJheS5zb3J0ZWRVbmlxQnk7XG5sb2Rhc2guc3BsaXQgPSBzdHJpbmcuc3BsaXQ7XG5sb2Rhc2guc3ByZWFkID0gZnVuYy5zcHJlYWQ7XG5sb2Rhc2gudGFpbCA9IGFycmF5LnRhaWw7XG5sb2Rhc2gudGFrZSA9IGFycmF5LnRha2U7XG5sb2Rhc2gudGFrZVJpZ2h0ID0gYXJyYXkudGFrZVJpZ2h0O1xubG9kYXNoLnRha2VSaWdodFdoaWxlID0gYXJyYXkudGFrZVJpZ2h0V2hpbGU7XG5sb2Rhc2gudGFrZVdoaWxlID0gYXJyYXkudGFrZVdoaWxlO1xubG9kYXNoLnRhcCA9IHNlcS50YXA7XG5sb2Rhc2gudGhyb3R0bGUgPSBmdW5jLnRocm90dGxlO1xubG9kYXNoLnRocnUgPSB0aHJ1O1xubG9kYXNoLnRvQXJyYXkgPSBsYW5nLnRvQXJyYXk7XG5sb2Rhc2gudG9QYWlycyA9IG9iamVjdC50b1BhaXJzO1xubG9kYXNoLnRvUGFpcnNJbiA9IG9iamVjdC50b1BhaXJzSW47XG5sb2Rhc2gudG9QYXRoID0gdXRpbC50b1BhdGg7XG5sb2Rhc2gudG9QbGFpbk9iamVjdCA9IGxhbmcudG9QbGFpbk9iamVjdDtcbmxvZGFzaC50cmFuc2Zvcm0gPSBvYmplY3QudHJhbnNmb3JtO1xubG9kYXNoLnVuYXJ5ID0gZnVuYy51bmFyeTtcbmxvZGFzaC51bmlvbiA9IGFycmF5LnVuaW9uO1xubG9kYXNoLnVuaW9uQnkgPSBhcnJheS51bmlvbkJ5O1xubG9kYXNoLnVuaW9uV2l0aCA9IGFycmF5LnVuaW9uV2l0aDtcbmxvZGFzaC51bmlxID0gYXJyYXkudW5pcTtcbmxvZGFzaC51bmlxQnkgPSBhcnJheS51bmlxQnk7XG5sb2Rhc2gudW5pcVdpdGggPSBhcnJheS51bmlxV2l0aDtcbmxvZGFzaC51bnNldCA9IG9iamVjdC51bnNldDtcbmxvZGFzaC51bnppcCA9IGFycmF5LnVuemlwO1xubG9kYXNoLnVuemlwV2l0aCA9IGFycmF5LnVuemlwV2l0aDtcbmxvZGFzaC51cGRhdGUgPSBvYmplY3QudXBkYXRlO1xubG9kYXNoLnVwZGF0ZVdpdGggPSBvYmplY3QudXBkYXRlV2l0aDtcbmxvZGFzaC52YWx1ZXMgPSBvYmplY3QudmFsdWVzO1xubG9kYXNoLnZhbHVlc0luID0gb2JqZWN0LnZhbHVlc0luO1xubG9kYXNoLndpdGhvdXQgPSBhcnJheS53aXRob3V0O1xubG9kYXNoLndvcmRzID0gc3RyaW5nLndvcmRzO1xubG9kYXNoLndyYXAgPSBmdW5jLndyYXA7XG5sb2Rhc2gueG9yID0gYXJyYXkueG9yO1xubG9kYXNoLnhvckJ5ID0gYXJyYXkueG9yQnk7XG5sb2Rhc2gueG9yV2l0aCA9IGFycmF5LnhvcldpdGg7XG5sb2Rhc2guemlwID0gYXJyYXkuemlwO1xubG9kYXNoLnppcE9iamVjdCA9IGFycmF5LnppcE9iamVjdDtcbmxvZGFzaC56aXBPYmplY3REZWVwID0gYXJyYXkuemlwT2JqZWN0RGVlcDtcbmxvZGFzaC56aXBXaXRoID0gYXJyYXkuemlwV2l0aDtcblxuLy8gQWRkIGFsaWFzZXMuXG5sb2Rhc2guZW50cmllcyA9IG9iamVjdC50b1BhaXJzO1xubG9kYXNoLmVudHJpZXNJbiA9IG9iamVjdC50b1BhaXJzSW47XG5sb2Rhc2guZXh0ZW5kID0gb2JqZWN0LmFzc2lnbkluO1xubG9kYXNoLmV4dGVuZFdpdGggPSBvYmplY3QuYXNzaWduSW5XaXRoO1xuXG4vLyBBZGQgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG5taXhpbihsb2Rhc2gsIGxvZGFzaCk7XG5cbi8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxubG9kYXNoLmFkZCA9IG1hdGguYWRkO1xubG9kYXNoLmF0dGVtcHQgPSB1dGlsLmF0dGVtcHQ7XG5sb2Rhc2guY2FtZWxDYXNlID0gc3RyaW5nLmNhbWVsQ2FzZTtcbmxvZGFzaC5jYXBpdGFsaXplID0gc3RyaW5nLmNhcGl0YWxpemU7XG5sb2Rhc2guY2VpbCA9IG1hdGguY2VpbDtcbmxvZGFzaC5jbGFtcCA9IG51bWJlci5jbGFtcDtcbmxvZGFzaC5jbG9uZSA9IGxhbmcuY2xvbmU7XG5sb2Rhc2guY2xvbmVEZWVwID0gbGFuZy5jbG9uZURlZXA7XG5sb2Rhc2guY2xvbmVEZWVwV2l0aCA9IGxhbmcuY2xvbmVEZWVwV2l0aDtcbmxvZGFzaC5jbG9uZVdpdGggPSBsYW5nLmNsb25lV2l0aDtcbmxvZGFzaC5jb25mb3Jtc1RvID0gbGFuZy5jb25mb3Jtc1RvO1xubG9kYXNoLmRlYnVyciA9IHN0cmluZy5kZWJ1cnI7XG5sb2Rhc2guZGVmYXVsdFRvID0gdXRpbC5kZWZhdWx0VG87XG5sb2Rhc2guZGl2aWRlID0gbWF0aC5kaXZpZGU7XG5sb2Rhc2guZW5kc1dpdGggPSBzdHJpbmcuZW5kc1dpdGg7XG5sb2Rhc2guZXEgPSBsYW5nLmVxO1xubG9kYXNoLmVzY2FwZSA9IHN0cmluZy5lc2NhcGU7XG5sb2Rhc2guZXNjYXBlUmVnRXhwID0gc3RyaW5nLmVzY2FwZVJlZ0V4cDtcbmxvZGFzaC5ldmVyeSA9IGNvbGxlY3Rpb24uZXZlcnk7XG5sb2Rhc2guZmluZCA9IGNvbGxlY3Rpb24uZmluZDtcbmxvZGFzaC5maW5kSW5kZXggPSBhcnJheS5maW5kSW5kZXg7XG5sb2Rhc2guZmluZEtleSA9IG9iamVjdC5maW5kS2V5O1xubG9kYXNoLmZpbmRMYXN0ID0gY29sbGVjdGlvbi5maW5kTGFzdDtcbmxvZGFzaC5maW5kTGFzdEluZGV4ID0gYXJyYXkuZmluZExhc3RJbmRleDtcbmxvZGFzaC5maW5kTGFzdEtleSA9IG9iamVjdC5maW5kTGFzdEtleTtcbmxvZGFzaC5mbG9vciA9IG1hdGguZmxvb3I7XG5sb2Rhc2guZm9yRWFjaCA9IGNvbGxlY3Rpb24uZm9yRWFjaDtcbmxvZGFzaC5mb3JFYWNoUmlnaHQgPSBjb2xsZWN0aW9uLmZvckVhY2hSaWdodDtcbmxvZGFzaC5mb3JJbiA9IG9iamVjdC5mb3JJbjtcbmxvZGFzaC5mb3JJblJpZ2h0ID0gb2JqZWN0LmZvckluUmlnaHQ7XG5sb2Rhc2guZm9yT3duID0gb2JqZWN0LmZvck93bjtcbmxvZGFzaC5mb3JPd25SaWdodCA9IG9iamVjdC5mb3JPd25SaWdodDtcbmxvZGFzaC5nZXQgPSBvYmplY3QuZ2V0O1xubG9kYXNoLmd0ID0gbGFuZy5ndDtcbmxvZGFzaC5ndGUgPSBsYW5nLmd0ZTtcbmxvZGFzaC5oYXMgPSBvYmplY3QuaGFzO1xubG9kYXNoLmhhc0luID0gb2JqZWN0Lmhhc0luO1xubG9kYXNoLmhlYWQgPSBhcnJheS5oZWFkO1xubG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG5sb2Rhc2guaW5jbHVkZXMgPSBjb2xsZWN0aW9uLmluY2x1ZGVzO1xubG9kYXNoLmluZGV4T2YgPSBhcnJheS5pbmRleE9mO1xubG9kYXNoLmluUmFuZ2UgPSBudW1iZXIuaW5SYW5nZTtcbmxvZGFzaC5pbnZva2UgPSBvYmplY3QuaW52b2tlO1xubG9kYXNoLmlzQXJndW1lbnRzID0gbGFuZy5pc0FyZ3VtZW50cztcbmxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbmxvZGFzaC5pc0FycmF5QnVmZmVyID0gbGFuZy5pc0FycmF5QnVmZmVyO1xubG9kYXNoLmlzQXJyYXlMaWtlID0gbGFuZy5pc0FycmF5TGlrZTtcbmxvZGFzaC5pc0FycmF5TGlrZU9iamVjdCA9IGxhbmcuaXNBcnJheUxpa2VPYmplY3Q7XG5sb2Rhc2guaXNCb29sZWFuID0gbGFuZy5pc0Jvb2xlYW47XG5sb2Rhc2guaXNCdWZmZXIgPSBsYW5nLmlzQnVmZmVyO1xubG9kYXNoLmlzRGF0ZSA9IGxhbmcuaXNEYXRlO1xubG9kYXNoLmlzRWxlbWVudCA9IGxhbmcuaXNFbGVtZW50O1xubG9kYXNoLmlzRW1wdHkgPSBsYW5nLmlzRW1wdHk7XG5sb2Rhc2guaXNFcXVhbCA9IGxhbmcuaXNFcXVhbDtcbmxvZGFzaC5pc0VxdWFsV2l0aCA9IGxhbmcuaXNFcXVhbFdpdGg7XG5sb2Rhc2guaXNFcnJvciA9IGxhbmcuaXNFcnJvcjtcbmxvZGFzaC5pc0Zpbml0ZSA9IGxhbmcuaXNGaW5pdGU7XG5sb2Rhc2guaXNGdW5jdGlvbiA9IGxhbmcuaXNGdW5jdGlvbjtcbmxvZGFzaC5pc0ludGVnZXIgPSBsYW5nLmlzSW50ZWdlcjtcbmxvZGFzaC5pc0xlbmd0aCA9IGxhbmcuaXNMZW5ndGg7XG5sb2Rhc2guaXNNYXAgPSBsYW5nLmlzTWFwO1xubG9kYXNoLmlzTWF0Y2ggPSBsYW5nLmlzTWF0Y2g7XG5sb2Rhc2guaXNNYXRjaFdpdGggPSBsYW5nLmlzTWF0Y2hXaXRoO1xubG9kYXNoLmlzTmFOID0gbGFuZy5pc05hTjtcbmxvZGFzaC5pc05hdGl2ZSA9IGxhbmcuaXNOYXRpdmU7XG5sb2Rhc2guaXNOaWwgPSBsYW5nLmlzTmlsO1xubG9kYXNoLmlzTnVsbCA9IGxhbmcuaXNOdWxsO1xubG9kYXNoLmlzTnVtYmVyID0gbGFuZy5pc051bWJlcjtcbmxvZGFzaC5pc09iamVjdCA9IGlzT2JqZWN0O1xubG9kYXNoLmlzT2JqZWN0TGlrZSA9IGxhbmcuaXNPYmplY3RMaWtlO1xubG9kYXNoLmlzUGxhaW5PYmplY3QgPSBsYW5nLmlzUGxhaW5PYmplY3Q7XG5sb2Rhc2guaXNSZWdFeHAgPSBsYW5nLmlzUmVnRXhwO1xubG9kYXNoLmlzU2FmZUludGVnZXIgPSBsYW5nLmlzU2FmZUludGVnZXI7XG5sb2Rhc2guaXNTZXQgPSBsYW5nLmlzU2V0O1xubG9kYXNoLmlzU3RyaW5nID0gbGFuZy5pc1N0cmluZztcbmxvZGFzaC5pc1N5bWJvbCA9IGxhbmcuaXNTeW1ib2w7XG5sb2Rhc2guaXNUeXBlZEFycmF5ID0gbGFuZy5pc1R5cGVkQXJyYXk7XG5sb2Rhc2guaXNVbmRlZmluZWQgPSBsYW5nLmlzVW5kZWZpbmVkO1xubG9kYXNoLmlzV2Vha01hcCA9IGxhbmcuaXNXZWFrTWFwO1xubG9kYXNoLmlzV2Vha1NldCA9IGxhbmcuaXNXZWFrU2V0O1xubG9kYXNoLmpvaW4gPSBhcnJheS5qb2luO1xubG9kYXNoLmtlYmFiQ2FzZSA9IHN0cmluZy5rZWJhYkNhc2U7XG5sb2Rhc2gubGFzdCA9IGxhc3Q7XG5sb2Rhc2gubGFzdEluZGV4T2YgPSBhcnJheS5sYXN0SW5kZXhPZjtcbmxvZGFzaC5sb3dlckNhc2UgPSBzdHJpbmcubG93ZXJDYXNlO1xubG9kYXNoLmxvd2VyRmlyc3QgPSBzdHJpbmcubG93ZXJGaXJzdDtcbmxvZGFzaC5sdCA9IGxhbmcubHQ7XG5sb2Rhc2gubHRlID0gbGFuZy5sdGU7XG5sb2Rhc2gubWF4ID0gbWF0aC5tYXg7XG5sb2Rhc2gubWF4QnkgPSBtYXRoLm1heEJ5O1xubG9kYXNoLm1lYW4gPSBtYXRoLm1lYW47XG5sb2Rhc2gubWVhbkJ5ID0gbWF0aC5tZWFuQnk7XG5sb2Rhc2gubWluID0gbWF0aC5taW47XG5sb2Rhc2gubWluQnkgPSBtYXRoLm1pbkJ5O1xubG9kYXNoLnN0dWJBcnJheSA9IHV0aWwuc3R1YkFycmF5O1xubG9kYXNoLnN0dWJGYWxzZSA9IHV0aWwuc3R1YkZhbHNlO1xubG9kYXNoLnN0dWJPYmplY3QgPSB1dGlsLnN0dWJPYmplY3Q7XG5sb2Rhc2guc3R1YlN0cmluZyA9IHV0aWwuc3R1YlN0cmluZztcbmxvZGFzaC5zdHViVHJ1ZSA9IHV0aWwuc3R1YlRydWU7XG5sb2Rhc2gubXVsdGlwbHkgPSBtYXRoLm11bHRpcGx5O1xubG9kYXNoLm50aCA9IGFycmF5Lm50aDtcbmxvZGFzaC5ub29wID0gdXRpbC5ub29wO1xubG9kYXNoLm5vdyA9IGRhdGUubm93O1xubG9kYXNoLnBhZCA9IHN0cmluZy5wYWQ7XG5sb2Rhc2gucGFkRW5kID0gc3RyaW5nLnBhZEVuZDtcbmxvZGFzaC5wYWRTdGFydCA9IHN0cmluZy5wYWRTdGFydDtcbmxvZGFzaC5wYXJzZUludCA9IHN0cmluZy5wYXJzZUludDtcbmxvZGFzaC5yYW5kb20gPSBudW1iZXIucmFuZG9tO1xubG9kYXNoLnJlZHVjZSA9IGNvbGxlY3Rpb24ucmVkdWNlO1xubG9kYXNoLnJlZHVjZVJpZ2h0ID0gY29sbGVjdGlvbi5yZWR1Y2VSaWdodDtcbmxvZGFzaC5yZXBlYXQgPSBzdHJpbmcucmVwZWF0O1xubG9kYXNoLnJlcGxhY2UgPSBzdHJpbmcucmVwbGFjZTtcbmxvZGFzaC5yZXN1bHQgPSBvYmplY3QucmVzdWx0O1xubG9kYXNoLnJvdW5kID0gbWF0aC5yb3VuZDtcbmxvZGFzaC5zYW1wbGUgPSBjb2xsZWN0aW9uLnNhbXBsZTtcbmxvZGFzaC5zaXplID0gY29sbGVjdGlvbi5zaXplO1xubG9kYXNoLnNuYWtlQ2FzZSA9IHN0cmluZy5zbmFrZUNhc2U7XG5sb2Rhc2guc29tZSA9IGNvbGxlY3Rpb24uc29tZTtcbmxvZGFzaC5zb3J0ZWRJbmRleCA9IGFycmF5LnNvcnRlZEluZGV4O1xubG9kYXNoLnNvcnRlZEluZGV4QnkgPSBhcnJheS5zb3J0ZWRJbmRleEJ5O1xubG9kYXNoLnNvcnRlZEluZGV4T2YgPSBhcnJheS5zb3J0ZWRJbmRleE9mO1xubG9kYXNoLnNvcnRlZExhc3RJbmRleCA9IGFycmF5LnNvcnRlZExhc3RJbmRleDtcbmxvZGFzaC5zb3J0ZWRMYXN0SW5kZXhCeSA9IGFycmF5LnNvcnRlZExhc3RJbmRleEJ5O1xubG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gYXJyYXkuc29ydGVkTGFzdEluZGV4T2Y7XG5sb2Rhc2guc3RhcnRDYXNlID0gc3RyaW5nLnN0YXJ0Q2FzZTtcbmxvZGFzaC5zdGFydHNXaXRoID0gc3RyaW5nLnN0YXJ0c1dpdGg7XG5sb2Rhc2guc3VidHJhY3QgPSBtYXRoLnN1YnRyYWN0O1xubG9kYXNoLnN1bSA9IG1hdGguc3VtO1xubG9kYXNoLnN1bUJ5ID0gbWF0aC5zdW1CeTtcbmxvZGFzaC50ZW1wbGF0ZSA9IHN0cmluZy50ZW1wbGF0ZTtcbmxvZGFzaC50aW1lcyA9IHV0aWwudGltZXM7XG5sb2Rhc2gudG9GaW5pdGUgPSBsYW5nLnRvRmluaXRlO1xubG9kYXNoLnRvSW50ZWdlciA9IHRvSW50ZWdlcjtcbmxvZGFzaC50b0xlbmd0aCA9IGxhbmcudG9MZW5ndGg7XG5sb2Rhc2gudG9Mb3dlciA9IHN0cmluZy50b0xvd2VyO1xubG9kYXNoLnRvTnVtYmVyID0gbGFuZy50b051bWJlcjtcbmxvZGFzaC50b1NhZmVJbnRlZ2VyID0gbGFuZy50b1NhZmVJbnRlZ2VyO1xubG9kYXNoLnRvU3RyaW5nID0gbGFuZy50b1N0cmluZztcbmxvZGFzaC50b1VwcGVyID0gc3RyaW5nLnRvVXBwZXI7XG5sb2Rhc2gudHJpbSA9IHN0cmluZy50cmltO1xubG9kYXNoLnRyaW1FbmQgPSBzdHJpbmcudHJpbUVuZDtcbmxvZGFzaC50cmltU3RhcnQgPSBzdHJpbmcudHJpbVN0YXJ0O1xubG9kYXNoLnRydW5jYXRlID0gc3RyaW5nLnRydW5jYXRlO1xubG9kYXNoLnVuZXNjYXBlID0gc3RyaW5nLnVuZXNjYXBlO1xubG9kYXNoLnVuaXF1ZUlkID0gdXRpbC51bmlxdWVJZDtcbmxvZGFzaC51cHBlckNhc2UgPSBzdHJpbmcudXBwZXJDYXNlO1xubG9kYXNoLnVwcGVyRmlyc3QgPSBzdHJpbmcudXBwZXJGaXJzdDtcblxuLy8gQWRkIGFsaWFzZXMuXG5sb2Rhc2guZWFjaCA9IGNvbGxlY3Rpb24uZm9yRWFjaDtcbmxvZGFzaC5lYWNoUmlnaHQgPSBjb2xsZWN0aW9uLmZvckVhY2hSaWdodDtcbmxvZGFzaC5maXJzdCA9IGFycmF5LmhlYWQ7XG5cbm1peGluKGxvZGFzaCwgKGZ1bmN0aW9uKCkge1xuICB2YXIgc291cmNlID0ge307XG4gIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaC5wcm90b3R5cGUsIG1ldGhvZE5hbWUpKSB7XG4gICAgICBzb3VyY2VbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzb3VyY2U7XG59KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4vKipcbiAqIFRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xubG9kYXNoLlZFUlNJT04gPSBWRVJTSU9OO1xuKGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzID0gc3RyaW5nLnRlbXBsYXRlU2V0dGluZ3MpLmltcG9ydHMuXyA9IGxvZGFzaDtcblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICBsb2Rhc2hbbWV0aG9kTmFtZV0ucGxhY2Vob2xkZXIgPSBsb2Rhc2g7XG59KTtcblxuLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuYXJyYXlFYWNoKFsnZHJvcCcsICd0YWtlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgdmFyIHJlc3VsdCA9ICh0aGlzLl9fZmlsdGVyZWRfXyAmJiAhaW5kZXgpXG4gICAgICA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKVxuICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXykge1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSBuYXRpdmVNaW4obiwgcmVzdWx0Ll9fdGFrZUNvdW50X18pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQuX192aWV3c19fLnB1c2goe1xuICAgICAgICAnc2l6ZSc6IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKSxcbiAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lICsgJ1JpZ2h0J10gPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgfTtcbn0pO1xuXG4vLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG5hcnJheUVhY2goWydmaWx0ZXInLCAnbWFwJywgJ3Rha2VXaGlsZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICB2YXIgdHlwZSA9IGluZGV4ICsgMSxcbiAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICdpdGVyYXRlZSc6IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAndHlwZSc6IHR5cGVcbiAgICB9KTtcbiAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSk7XG5cbi8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmhlYWRgIGFuZCBgXy5sYXN0YC5cbmFycmF5RWFjaChbJ2hlYWQnLCAnbGFzdCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzW3Rha2VOYW1lXSgxKS52YWx1ZSgpWzBdO1xuICB9O1xufSk7XG5cbi8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy50YWlsYC5cbmFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICB2YXIgZHJvcE5hbWUgPSAnZHJvcCcgKyAoaW5kZXggPyAnJyA6ICdSaWdodCcpO1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICB9O1xufSk7XG5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7XG59O1xuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICByZXR1cm4gdGhpcy5maWx0ZXIocHJlZGljYXRlKS5oZWFkKCk7XG59O1xuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTtcbn07XG5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgfVxuICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xufSk7XG5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShiYXNlSXRlcmF0ZWUocHJlZGljYXRlKSkpO1xufTtcblxuTGF6eVdyYXBwZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5kIDwgMCkpIHtcbiAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHJlc3VsdCk7XG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC50YWtlUmlnaHQoLXN0YXJ0KTtcbiAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5kcm9wKHN0YXJ0KTtcbiAgfVxuICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0b0ludGVnZXIoZW5kKTtcbiAgICByZXN1bHQgPSBlbmQgPCAwID8gcmVzdWx0LmRyb3BSaWdodCgtZW5kKSA6IHJlc3VsdC50YWtlKGVuZCAtIHN0YXJ0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlKS5yZXZlcnNlKCk7XG59O1xuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50YWtlKE1BWF9BUlJBWV9MRU5HVEgpO1xufTtcblxuLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG5iYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICB2YXIgY2hlY2tJdGVyYXRlZSA9IC9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICBsb2Rhc2hGdW5jID0gbG9kYXNoW2lzVGFrZXIgPyAoJ3Rha2UnICsgKG1ldGhvZE5hbWUgPT0gJ2xhc3QnID8gJ1JpZ2h0JyA6ICcnKSkgOiBtZXRob2ROYW1lXSxcbiAgICAgIHJldFVud3JhcHBlZCA9IGlzVGFrZXIgfHwgL15maW5kLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gIGlmICghbG9kYXNoRnVuYykge1xuICAgIHJldHVybjtcbiAgfVxuICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgYXJncyA9IGlzVGFrZXIgPyBbMV0gOiBhcmd1bWVudHMsXG4gICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgIGl0ZXJhdGVlID0gYXJnc1swXSxcbiAgICAgICAgdXNlTGF6eSA9IGlzTGF6eSB8fCBpc0FycmF5KHZhbHVlKTtcblxuICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoRnVuYy5hcHBseShsb2Rhc2gsIGFycmF5UHVzaChbdmFsdWVdLCBhcmdzKSk7XG4gICAgICByZXR1cm4gKGlzVGFrZXIgJiYgY2hhaW5BbGwpID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICAgIH07XG5cbiAgICBpZiAodXNlTGF6eSAmJiBjaGVja0l0ZXJhdGVlICYmIHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIGl0ZXJhdGVlLmxlbmd0aCAhPSAxKSB7XG4gICAgICAvLyBBdm9pZCBsYXp5IHVzZSBpZiB0aGUgaXRlcmF0ZWUgaGFzIGEgXCJsZW5ndGhcIiB2YWx1ZSBvdGhlciB0aGFuIGAxYC5cbiAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX18sXG4gICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgaXNVbndyYXBwZWQgPSByZXRVbndyYXBwZWQgJiYgIWNoYWluQWxsLFxuICAgICAgICBvbmx5TGF6eSA9IGlzTGF6eSAmJiAhaXNIeWJyaWQ7XG5cbiAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICB2YWx1ZSA9IG9ubHlMYXp5ID8gdmFsdWUgOiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsIGNoYWluQWxsKTtcbiAgICB9XG4gICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICByZXR1cm4gaXNVbndyYXBwZWQgPyAoaXNUYWtlciA/IHJlc3VsdC52YWx1ZSgpWzBdIDogcmVzdWx0LnZhbHVlKCkpIDogcmVzdWx0O1xuICB9O1xufSk7XG5cbi8vIEFkZCBgQXJyYXlgIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuYXJyYXlFYWNoKFsncG9wJywgJ3B1c2gnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgIGNoYWluTmFtZSA9IC9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKSA/ICd0YXAnIDogJ3RocnUnLFxuICAgICAgcmV0VW53cmFwcGVkID0gL14oPzpwb3B8c2hpZnQpJC8udGVzdChtZXRob2ROYW1lKTtcblxuICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgaWYgKHJldFVud3JhcHBlZCAmJiAhdGhpcy5fX2NoYWluX18pIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG59KTtcblxuLy8gTWFwIG1pbmlmaWVkIG1ldGhvZCBuYW1lcyB0byB0aGVpciByZWFsIG5hbWVzLlxuYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgdmFyIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbbWV0aG9kTmFtZV07XG4gIGlmIChsb2Rhc2hGdW5jKSB7XG4gICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSArICcnO1xuICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIGtleSkpIHtcbiAgICAgIHJlYWxOYW1lc1trZXldID0gW107XG4gICAgfVxuICAgIHJlYWxOYW1lc1trZXldLnB1c2goeyAnbmFtZSc6IG1ldGhvZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTtcbiAgfVxufSk7XG5cbnJlYWxOYW1lc1tjcmVhdGVIeWJyaWQodW5kZWZpbmVkLCBXUkFQX0JJTkRfS0VZX0ZMQUcpLm5hbWVdID0gW3tcbiAgJ25hbWUnOiAnd3JhcHBlcicsXG4gICdmdW5jJzogdW5kZWZpbmVkXG59XTtcblxuLy8gQWRkIG1ldGhvZHMgdG8gYExhenlXcmFwcGVyYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5yZXZlcnNlID0gbGF6eVJldmVyc2U7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUudmFsdWUgPSBsYXp5VmFsdWU7XG5cbi8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxubG9kYXNoLnByb3RvdHlwZS5hdCA9IHNlcS5hdDtcbmxvZGFzaC5wcm90b3R5cGUuY2hhaW4gPSBzZXEud3JhcHBlckNoYWluO1xubG9kYXNoLnByb3RvdHlwZS5jb21taXQgPSBzZXEuY29tbWl0O1xubG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gc2VxLm5leHQ7XG5sb2Rhc2gucHJvdG90eXBlLnBsYW50ID0gc2VxLnBsYW50O1xubG9kYXNoLnByb3RvdHlwZS5yZXZlcnNlID0gc2VxLnJldmVyc2U7XG5sb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSBzZXEudmFsdWU7XG5cbi8vIEFkZCBsYXp5IGFsaWFzZXMuXG5sb2Rhc2gucHJvdG90eXBlLmZpcnN0ID0gbG9kYXNoLnByb3RvdHlwZS5oZWFkO1xuXG5pZiAoc3ltSXRlcmF0b3IpIHtcbiAgbG9kYXNoLnByb3RvdHlwZVtzeW1JdGVyYXRvcl0gPSBzZXEudG9JdGVyYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbG9kYXNoO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..18f1b77 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,47 @@ + + + + + + + Cool-MD-Editor + + + +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index 48a009f..459b3eb 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "cool-md-editor", - "version": "1.2.1", + "version": "1.3.0", "description": "a markedown editor width webpack & codemirror & marked & highlight", - "main": "dist/CMDEditor.js", - "unpkg": "dist/CMDEditor.js", + "main": "dist/cMDEditor.js", + "unpkg": "dist/cMDEditor.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "webpack-dev-server --open --progress --colors", diff --git a/src/index.html b/src/index.html index 1c8a5b7..9e490eb 100644 --- a/src/index.html +++ b/src/index.html @@ -34,12 +34,12 @@ // shortcuts: { // isOpen: false, // }, - // qiniu: { - // tokenApiUrl: 'http://127.0.0.1:3001/api/qiniu/blog/get_token', + qiniu: { + tokenApiUrl: 'http://121.42.230.245:9001/api/qiniu/test/get_token', // region: 'z1', // config: {}, // putExtra: {} - // } + } }); console.log(cMdEditor); diff --git a/src/index.js b/src/index.js index d9cdfe4..b424dd2 100644 --- a/src/index.js +++ b/src/index.js @@ -241,16 +241,18 @@ class CMdEditor { lang: 'zh', // ========== 七牛 ========== qiniu: { - tokenApiUrl: 'http://127.0.0.1:3001/api/qiniu/blog/get_token', + tokenApiUrl: 'http://127.0.0.1:3001/api/qiniu/test/get_token', region: 'z1', config: {}, putExtra: {} } } - Object.assign(defaultOptions, options); - this._options = defaultOptions; + // Object.assign(defaultOptions, options); + // this._options = defaultOptions; + this._options = UTIL.extend({}, defaultOptions, options); this._options.$tools = $tools; const _options = this._options; + console.log(this._options); // 默认语言处理. if (typeof _options.lang === 'string') { diff --git a/src/util/Util.js b/src/util/Util.js index 0d0c0db..7be24fa 100644 --- a/src/util/Util.js +++ b/src/util/Util.js @@ -2,11 +2,13 @@ const Util = { /** * Merge the properties of one object into another. * 将一个对象的属性合并到另一个对象上. + * Object.assign({}, {person: {name: 1, age: 16}}, {person: {name:1}}) + * 使用 Object.assign 需要处理多层数据前台的问题,这里就自行封装了. */ _mergeProperties(target, source) { for (let property in source) { if (source.hasOwnProperty(property)) { - if (souce[property] instanceof Array) { + if (source[property] instanceof Array) { const value = target[property] instanceof Array ? target[property] : []; target[property] = source[property].concat(value); } else if ( @@ -14,7 +16,7 @@ const Util = { typeof source[property] === 'object' && source[property].constructor === Object ) { - target[property] = this._mergeProperties(target[property] || {}, souce[property]); + target[property] = this._mergeProperties(target[property] || {}, source[property]); } else { target[property] = source[property]; }