From 082a42903fa57a2b5379c50a742ca23c2954d412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beatriz=20Sope=C3=B1a=20Merino?= Date: Tue, 12 Dec 2023 13:18:41 +0000 Subject: [PATCH] gh-pages --- css/app.5a05368e.css | 1 + favicon.ico | Bin 0 -> 4286 bytes icon-sprite.svg | 21 + img/jsoneditor-icons.bb13d455.svg | 893 ++++++++++++++++++++++++++++++ index.html | 1 + js/app.56397685.js | 2 + js/app.56397685.js.map | 1 + js/chunk-vendors.aaa2d4d7.js | 50 ++ js/chunk-vendors.aaa2d4d7.js.map | 1 + 9 files changed, 970 insertions(+) create mode 100644 css/app.5a05368e.css create mode 100644 favicon.ico create mode 100644 icon-sprite.svg create mode 100644 img/jsoneditor-icons.bb13d455.svg create mode 100644 index.html create mode 100644 js/app.56397685.js create mode 100644 js/app.56397685.js.map create mode 100644 js/chunk-vendors.aaa2d4d7.js create mode 100644 js/chunk-vendors.aaa2d4d7.js.map diff --git a/css/app.5a05368e.css b/css/app.5a05368e.css new file mode 100644 index 00000000..6e42d135 --- /dev/null +++ b/css/app.5a05368e.css @@ -0,0 +1 @@ +.page-nav[data-v-6936054d]{display:flex;justify-content:center}.page-nav__list[data-v-6936054d]{display:flex;margin:0;padding:0;list-style:none}.page-nav__item[data-v-6936054d]{display:flex;align-items:center;justify-content:center}.page-nav__item[data-v-6936054d]:not(:last-child):after{content:"|";display:inline-block;padding:0 1rem}.page-nav__link[data-v-6936054d]{color:#273849;font-weight:700}.page-nav__link.router-link-exact-active[data-v-6936054d]{color:#42b983}*,:after,:before{box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,:after,:before,a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{padding:0;margin:0}:focus{outline:0}address,textarea{font-style:normal}a,span{display:inline-block}a{outline:none}p:only-child{margin:0}p:not(:last-child){margin-bottom:10px}img,table{width:100%}img{font-style:italic;vertical-align:middle;display:block}button,input,select{-webkit-appearance:none;-moz-appearance:none;appearance:none}fieldset{margin:0;padding:0;border:none}input,select,textarea{border-radius:0;outline:none}textarea{min-height:150px;display:inherit;resize:vertical}input[type=reset],input[type=submit]{cursor:pointer}::-moz-selection{color:#fff;background-color:#42b983}::selection{color:#fff;background-color:#42b983}body,button,html,input,select,textarea{font-family:Raleway,helvetica,sans-serif}html{overflow-x:hidden;font-size:62.5%;font-weight:400}body,html{background-color:#fff}body{font-size:10px}a{display:inline-block;text-decoration:none}a,a:hover{color:inherit}p{font-size:1.6rem;line-height:160%}p:not(:last-child){margin-bottom:1rem}p:only-of-type{margin-bottom:0}.page{color:#273849;font-family:Avenir,Helvetica,Arial,sans-serif;text-align:center}.page__container{width:100%;max-width:140rem;margin:0 auto}.page__inner{padding-right:3rem;padding-left:3rem;position:relative}@media(max-width:768px){.page__inner{padding-right:2rem;padding-left:2rem}}.page__title{margin-bottom:3.6rem;font-size:3.6rem;line-height:3.6rem}.page__subtitle{margin-bottom:2.4rem;font-size:2.4rem;line-height:2.4rem}.page__header{padding-top:2rem;padding-bottom:2rem}.page__body{font-size:1.6rem;line-height:2.4rem}.page__main{padding-top:5rem;padding-bottom:5rem;align-items:center;flex-direction:column;background-color:#fff}.page__main,.page__section{display:flex;justify-content:center}.page__article:not(:last-child){margin-bottom:4rem}.page__subtitle[data-v-4a6dfa69]{margin-bottom:1rem}ul[data-v-4a6dfa69]{padding:0;list-style-type:none}li[data-v-4a6dfa69]{display:inline-block;margin:0 10px}a[data-v-4a6dfa69]{color:#42b983;font-weight:500}.page-home .icon-logo-vue[data-v-7cdb44a3]{width:15rem;height:15rem;margin:0 auto 3rem}div.jsoneditor .jsoneditor-search input{height:auto;border:inherit}div.jsoneditor .jsoneditor-search input:focus{border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}div.jsoneditor table{border-collapse:collapse;width:auto}div.jsoneditor td,div.jsoneditor th{padding:0;display:table-cell;text-align:left;vertical-align:inherit;border-radius:inherit}div.jsoneditor-field,div.jsoneditor-readonly,div.jsoneditor-value{border:1px solid transparent;min-height:16px;min-width:32px;padding:2px;margin:1px;word-wrap:break-word;float:left}div.jsoneditor-field p,div.jsoneditor-value p{margin:0}div.jsoneditor-value{word-break:break-word}div.jsoneditor-readonly{min-width:16px;color:gray}div.jsoneditor-empty{border-color:#d3d3d3;border-style:dashed;border-radius:2px}div.jsoneditor-field.jsoneditor-empty:after,div.jsoneditor-value.jsoneditor-empty:after{pointer-events:none;color:#d3d3d3;font-size:8pt}div.jsoneditor-field.jsoneditor-empty:after{content:"field"}div.jsoneditor-value.jsoneditor-empty:after{content:"value"}a.jsoneditor-value.jsoneditor-url,div.jsoneditor-value.jsoneditor-url{color:green;text-decoration:underline}a.jsoneditor-value.jsoneditor-url{display:inline-block;padding:2px;margin:2px}a.jsoneditor-value.jsoneditor-url:focus,a.jsoneditor-value.jsoneditor-url:hover{color:#ee422e}div.jsoneditor td.jsoneditor-separator{padding:3px 0;vertical-align:top;color:gray}div.jsoneditor-field.jsoneditor-highlight,div.jsoneditor-field[contenteditable=true]:focus,div.jsoneditor-field[contenteditable=true]:hover,div.jsoneditor-value.jsoneditor-highlight,div.jsoneditor-value[contenteditable=true]:focus,div.jsoneditor-value[contenteditable=true]:hover{background-color:#ffffab;border:1px solid #ff0;border-radius:2px}div.jsoneditor-field.jsoneditor-highlight-active,div.jsoneditor-field.jsoneditor-highlight-active:focus,div.jsoneditor-field.jsoneditor-highlight-active:hover,div.jsoneditor-value.jsoneditor-highlight-active,div.jsoneditor-value.jsoneditor-highlight-active:focus,div.jsoneditor-value.jsoneditor-highlight-active:hover{background-color:#fe0;border:1px solid #ffc700;border-radius:2px}div.jsoneditor-value.jsoneditor-string{color:green}div.jsoneditor-value.jsoneditor-array,div.jsoneditor-value.jsoneditor-object{min-width:16px;color:grey}div.jsoneditor-value.jsoneditor-number{color:#ee422e}div.jsoneditor-value.jsoneditor-boolean{color:#ff8c00}div.jsoneditor-value.jsoneditor-null{color:#004ed0}div.jsoneditor-value.jsoneditor-invalid{color:#000}div.jsoneditor-tree button{width:24px;height:24px;padding:0;margin:0;border:none;cursor:pointer;background:transparent url(/vue-editor/img/jsoneditor-icons.bb13d455.svg)}div.jsoneditor-mode-form tr.jsoneditor-expandable td.jsoneditor-tree,div.jsoneditor-mode-view tr.jsoneditor-expandable td.jsoneditor-tree{cursor:pointer}div.jsoneditor-tree button.jsoneditor-collapsed{background-position:0 -48px}div.jsoneditor-tree button.jsoneditor-expanded{background-position:0 -72px}div.jsoneditor-tree button.jsoneditor-contextmenu{background-position:-48px -72px}div.jsoneditor-tree button.jsoneditor-contextmenu.jsoneditor-selected,div.jsoneditor-tree button.jsoneditor-contextmenu:focus,div.jsoneditor-tree button.jsoneditor-contextmenu:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu{background-position:-48px -48px}div.jsoneditor-tree :focus{outline:none}div.jsoneditor-tree button:focus{background-color:#f5f5f5;outline:1px solid #e5e5e5}div.jsoneditor-tree button.jsoneditor-invisible{visibility:hidden;background:none}div.jsoneditor{color:#1a1a1a;border:1px solid #3883fa;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;overflow:hidden;position:relative;padding:0;line-height:100%}div.jsoneditor-tree table.jsoneditor-tree{border-collapse:collapse;border-spacing:0;width:100%;margin:0}div.jsoneditor-outer{position:static;width:100%;height:100%;margin:-35px 0 0 0;padding:35px 0 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.ace-jsoneditor,textarea.jsoneditor-text{min-height:150px}div.jsoneditor-tree{width:100%;height:100%;position:relative;overflow:auto}textarea.jsoneditor-text{width:100%;height:100%;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;outline-width:0;border:none;background-color:#fff;resize:none}tr.jsoneditor-highlight,tr.jsoneditor-selected{background-color:#e6e6e6}tr.jsoneditor-selected button.jsoneditor-contextmenu,tr.jsoneditor-selected button.jsoneditor-dragarea{visibility:hidden}tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{visibility:visible}div.jsoneditor-tree button.jsoneditor-dragarea{background:url(/vue-editor/img/jsoneditor-icons.bb13d455.svg) -72px -72px;cursor:move}div.jsoneditor-tree button.jsoneditor-dragarea:focus,div.jsoneditor-tree button.jsoneditor-dragarea:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{background-position:-72px -48px}div.jsoneditor td,div.jsoneditor th,div.jsoneditor tr{padding:0;margin:0}div.jsoneditor td,div.jsoneditor td.jsoneditor-tree{vertical-align:top}.jsoneditor-schema-error,div.jsoneditor td,div.jsoneditor textarea,div.jsoneditor th,div.jsoneditor-field,div.jsoneditor-value{font-family:droid sans mono,consolas,monospace,courier new,courier,sans-serif;font-size:10pt;color:#1a1a1a}.jsoneditor-schema-error{cursor:default;display:inline-block;height:24px;line-height:24px;position:relative;text-align:center;width:24px}div.jsoneditor-tree .jsoneditor-schema-error{width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(/vue-editor/img/jsoneditor-icons.bb13d455.svg) -168px -48px}.jsoneditor-schema-error .jsoneditor-popover{background-color:#4c4c4c;border-radius:3px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4);color:#fff;display:none;padding:7px 10px;position:absolute;width:200px;z-index:4}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above{bottom:32px;left:-98px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below{top:32px;left:-98px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left{top:-7px;right:32px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right{top:-7px;left:32px}.jsoneditor-schema-error .jsoneditor-popover:before{border-right:7px solid transparent;border-left:7px solid transparent;content:"";display:block;left:50%;margin-left:-7px;position:absolute}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-above:before{border-top:7px solid #4c4c4c;bottom:-7px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-below:before{border-bottom:7px solid #4c4c4c;top:-7px}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left:before{border-left:7px solid #4c4c4c;right:-14px;left:inherit}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-left:before,.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right:before{border-top:7px solid transparent;border-bottom:7px solid transparent;content:"";top:19px;margin-left:inherit;margin-top:-7px;position:absolute}.jsoneditor-schema-error .jsoneditor-popover.jsoneditor-right:before{border-right:7px solid #4c4c4c;left:-14px}.jsoneditor-schema-error:focus .jsoneditor-popover,.jsoneditor-schema-error:hover .jsoneditor-popover{display:block;-webkit-animation:fade-in .3s linear 1,move-up .3s linear 1;-moz-animation:fade-in .3s linear 1,move-up .3s linear 1;-ms-animation:fade-in .3s linear 1,move-up .3s linear 1}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}.jsoneditor .jsoneditor-text-errors{width:100%;border-collapse:collapse;background-color:#ffef8b;border-top:1px solid gold}.jsoneditor .jsoneditor-text-errors td{padding:3px 6px;vertical-align:middle}.jsoneditor-text-errors .jsoneditor-schema-error{border:none;width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(/vue-editor/img/jsoneditor-icons.bb13d455.svg) -168px -48px}div.jsoneditor-contextmenu-root{position:relative;width:0;height:0}div.jsoneditor-contextmenu{position:absolute;z-index:99999}div.jsoneditor-contextmenu,div.jsoneditor-contextmenu li,div.jsoneditor-contextmenu ul{-webkit-box-sizing:content-box;box-sizing:content-box}div.jsoneditor-contextmenu ul{position:relative;left:0;top:0;width:124px;background:#fff;border:1px solid #d3d3d3;-webkit-box-shadow:2px 2px 12px hsla(0,0%,50%,.3);box-shadow:2px 2px 12px hsla(0,0%,50%,.3);list-style:none;margin:0;padding:0}div.jsoneditor-contextmenu ul li button{padding:0;margin:0;width:124px;height:24px;border:none;cursor:pointer;color:#4d4d4d;background:transparent;font-size:10pt;font-family:arial,sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:26px;text-align:left}div.jsoneditor-contextmenu ul li button::-moz-focus-inner{padding:0;border:0}div.jsoneditor-contextmenu ul li button:focus,div.jsoneditor-contextmenu ul li button:hover{color:#1a1a1a;background-color:#f5f5f5;outline:none}div.jsoneditor-contextmenu ul li button.jsoneditor-default{width:92px}div.jsoneditor-contextmenu ul li button.jsoneditor-expand{float:right;width:32px;height:24px;border-left:1px solid #e5e5e5}div.jsoneditor-contextmenu div.jsoneditor-icon{float:left;width:24px;height:24px;border:none;padding:0;margin:0;background-image:url(/vue-editor/img/jsoneditor-icons.bb13d455.svg)}div.jsoneditor-contextmenu ul li button div.jsoneditor-expand{float:right;width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(/vue-editor/img/jsoneditor-icons.bb13d455.svg) 0 -72px;opacity:.4}div.jsoneditor-contextmenu ul li button.jsoneditor-expand:focus div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button.jsoneditor-expand:hover div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button:focus div.jsoneditor-expand,div.jsoneditor-contextmenu ul li button:hover div.jsoneditor-expand,div.jsoneditor-contextmenu ul li.jsoneditor-selected div.jsoneditor-expand{opacity:1}div.jsoneditor-contextmenu div.jsoneditor-separator{height:0;border-top:1px solid #e5e5e5;padding-top:5px;margin-top:5px}div.jsoneditor-contextmenu button.jsoneditor-remove>div.jsoneditor-icon{background-position:-24px -24px}div.jsoneditor-contextmenu button.jsoneditor-remove:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-remove:hover>div.jsoneditor-icon{background-position:-24px 0}div.jsoneditor-contextmenu button.jsoneditor-append>div.jsoneditor-icon{background-position:0 -24px}div.jsoneditor-contextmenu button.jsoneditor-append:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-append:hover>div.jsoneditor-icon{background-position:0 0}div.jsoneditor-contextmenu button.jsoneditor-insert>div.jsoneditor-icon{background-position:0 -24px}div.jsoneditor-contextmenu button.jsoneditor-insert:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-insert:hover>div.jsoneditor-icon{background-position:0 0}div.jsoneditor-contextmenu button.jsoneditor-duplicate>div.jsoneditor-icon{background-position:-48px -24px}div.jsoneditor-contextmenu button.jsoneditor-duplicate:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-duplicate:hover>div.jsoneditor-icon{background-position:-48px 0}div.jsoneditor-contextmenu button.jsoneditor-sort-asc>div.jsoneditor-icon{background-position:-168px -24px}div.jsoneditor-contextmenu button.jsoneditor-sort-asc:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-sort-asc:hover>div.jsoneditor-icon{background-position:-168px 0}div.jsoneditor-contextmenu button.jsoneditor-sort-desc>div.jsoneditor-icon{background-position:-192px -24px}div.jsoneditor-contextmenu button.jsoneditor-sort-desc:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-sort-desc:hover>div.jsoneditor-icon{background-position:-192px 0}div.jsoneditor-contextmenu ul li button.jsoneditor-selected,div.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus,div.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover{color:#fff;background-color:#ee422e}div.jsoneditor-contextmenu ul li{overflow:hidden}div.jsoneditor-contextmenu ul li ul{display:none;position:relative;left:-10px;top:0;border:none;-webkit-box-shadow:inset 0 0 10px hsla(0,0%,50%,.5);box-shadow:inset 0 0 10px hsla(0,0%,50%,.5);padding:0 10px;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}div.jsoneditor-contextmenu ul li ul li button{padding-left:24px;-webkit-animation:all 1s ease-in-out;animation:all 1s ease-in-out}div.jsoneditor-contextmenu ul li ul li button:focus,div.jsoneditor-contextmenu ul li ul li button:hover{background-color:#f5f5f5}div.jsoneditor-contextmenu button.jsoneditor-type-string>div.jsoneditor-icon{background-position:-144px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-string.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-string:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-string:hover>div.jsoneditor-icon{background-position:-144px 0}div.jsoneditor-contextmenu button.jsoneditor-type-auto>div.jsoneditor-icon{background-position:-120px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-auto.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-auto:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-auto:hover>div.jsoneditor-icon{background-position:-120px 0}div.jsoneditor-contextmenu button.jsoneditor-type-object>div.jsoneditor-icon{background-position:-72px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-object.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-object:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-object:hover>div.jsoneditor-icon{background-position:-72px 0}div.jsoneditor-contextmenu button.jsoneditor-type-array>div.jsoneditor-icon{background-position:-96px -24px}div.jsoneditor-contextmenu button.jsoneditor-type-array.jsoneditor-selected>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-array:focus>div.jsoneditor-icon,div.jsoneditor-contextmenu button.jsoneditor-type-array:hover>div.jsoneditor-icon{background-position:-96px 0}div.jsoneditor-contextmenu button.jsoneditor-type-modes>div.jsoneditor-icon{background-image:none;width:6px}div.jsoneditor-menu{width:100%;height:35px;padding:2px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;background-color:#3883fa;border-bottom:1px solid #3883fa}div.jsoneditor-menu>button,div.jsoneditor-menu>div.jsoneditor-modes>button{width:26px;height:26px;margin:2px;padding:0;border-radius:2px;border:1px solid transparent;background:transparent url(/vue-editor/img/jsoneditor-icons.bb13d455.svg);color:#fff;opacity:.8;font-family:arial,sans-serif;font-size:10pt;float:left}div.jsoneditor-menu>button:hover,div.jsoneditor-menu>div.jsoneditor-modes>button:hover{background-color:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.4)}div.jsoneditor-menu>button:active,div.jsoneditor-menu>button:focus,div.jsoneditor-menu>div.jsoneditor-modes>button:active,div.jsoneditor-menu>div.jsoneditor-modes>button:focus{background-color:hsla(0,0%,100%,.3)}div.jsoneditor-menu>button:disabled,div.jsoneditor-menu>div.jsoneditor-modes>button:disabled{opacity:.5}div.jsoneditor-menu>button.jsoneditor-collapse-all{background-position:0 -96px}div.jsoneditor-menu>button.jsoneditor-expand-all{background-position:0 -120px}div.jsoneditor-menu>button.jsoneditor-undo{background-position:-24px -96px}div.jsoneditor-menu>button.jsoneditor-undo:disabled{background-position:-24px -120px}div.jsoneditor-menu>button.jsoneditor-redo{background-position:-48px -96px}div.jsoneditor-menu>button.jsoneditor-redo:disabled{background-position:-48px -120px}div.jsoneditor-menu>button.jsoneditor-compact{background-position:-72px -96px}div.jsoneditor-menu>button.jsoneditor-format{background-position:-72px -120px}div.jsoneditor-menu>div.jsoneditor-modes{display:inline-block;float:left}div.jsoneditor-menu>div.jsoneditor-modes>button{background-image:none;width:auto;padding-left:6px;padding-right:6px}div.jsoneditor-menu>button.jsoneditor-separator,div.jsoneditor-menu>div.jsoneditor-modes>button.jsoneditor-separator{margin-left:10px}div.jsoneditor-menu a{font-family:arial,sans-serif;font-size:10pt;color:#fff;opacity:.8;vertical-align:middle}div.jsoneditor-menu a:hover{opacity:1}div.jsoneditor-menu a.jsoneditor-poweredBy{font-size:8pt;position:absolute;right:0;top:0;padding:10px}table.jsoneditor-search div.jsoneditor-results,table.jsoneditor-search input{font-family:arial,sans-serif;font-size:10pt;color:#1a1a1a;background:transparent}table.jsoneditor-search div.jsoneditor-results{color:#fff;padding-right:5px;line-height:24px}table.jsoneditor-search{position:absolute;right:4px;top:4px;border-collapse:collapse;border-spacing:0}table.jsoneditor-search div.jsoneditor-frame{border:1px solid transparent;background-color:#fff;padding:0 2px;margin:0}table.jsoneditor-search div.jsoneditor-frame table{border-collapse:collapse}table.jsoneditor-search input{width:120px;border:none;outline:none;margin:1px;line-height:20px}table.jsoneditor-search button{width:16px;height:24px;padding:0;margin:0;border:none;background:url(/vue-editor/img/jsoneditor-icons.bb13d455.svg);vertical-align:top}table.jsoneditor-search button:hover{background-color:transparent}table.jsoneditor-search button.jsoneditor-refresh{width:18px;background-position:-99px -73px}table.jsoneditor-search button.jsoneditor-next{cursor:pointer;background-position:-124px -73px}table.jsoneditor-search button.jsoneditor-next:hover{background-position:-124px -49px}table.jsoneditor-search button.jsoneditor-previous{cursor:pointer;background-position:-148px -73px;margin-right:2px}table.jsoneditor-search button.jsoneditor-previous:hover{background-position:-148px -49px}.ace_line_group[data-v-9b72cb1a]{text-align:left}.json-editor-container[data-v-9b72cb1a]{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.json-editor-container .tree-mode[data-v-9b72cb1a]{width:50%}.json-editor-container .code-mode[data-v-9b72cb1a]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.jsoneditor-btns[data-v-9b72cb1a]{text-align:center;margin-top:10px}.jsoneditor-vue .jsoneditor-outer[data-v-9b72cb1a]{min-height:150px}.jsoneditor-vue div.jsoneditor-tree[data-v-9b72cb1a]{min-height:350px}.json-save-btn[data-v-9b72cb1a]{background-color:#20a0ff;border:none;color:#fff;padding:5px 10px;border-radius:5px;cursor:pointer}.json-save-btn[data-v-9b72cb1a]:focus{outline:none}.json-save-btn[disabled][data-v-9b72cb1a]{background-color:#1d8ce0;cursor:not-allowed}code[data-v-9b72cb1a]{background-color:#f5f5f5}.editor-json__actions[data-v-585e5226]{display:flex;justify-content:flex-end;margin-top:1rem}.editor-json__actions>[data-v-585e5226]:not(:last-child){margin-right:1rem}.editor-json__button[data-v-585e5226]{display:flex;align-items:center;padding:.5rem 1.5rem;border:.2rem solid transparent;border-radius:.3rem;font-size:1.6rem;font-weight:700;cursor:pointer}.editor-json__button>[data-v-585e5226]:not(:last-child){margin-right:.5rem}.editor-json[data-v-585e5226] .jsoneditor-vue{height:50vh}.editor-json[data-v-585e5226] .jsoneditor-poweredBy{display:none}.editor-json[data-v-585e5226] .jsoneditor-btns{display:flex;justify-content:flex-end}.editor-json[data-v-585e5226] .json-save-btn{padding:.5rem 1rem;font-size:1.2rem}.editor-json[data-v-585e5226] .jsoneditor-contextmenu button,.editor-json[data-v-585e5226] .jsoneditor-frame button{filter:none!important}.editor-json.theme--light .editor-json__button-copy[data-v-585e5226]{border-color:#ccc;background-color:#fff;color:#ccc}.editor-json.theme--light .editor-json__button-copy[data-v-585e5226]:hover{border-color:#b3b3b3;background-color:#b3b3b3;color:#fff}.editor-json.theme--light .editor-json__button-save[data-v-585e5226]{border-color:#ccc;background-color:#ccc;color:#fff}.editor-json.theme--light .editor-json__button-save[data-v-585e5226]:hover{border-color:#b3b3b3;background-color:#b3b3b3}.editor-json.theme--light[data-v-585e5226] .jsoneditor{border-color:#e6e6e6!important}.editor-json.theme--light[data-v-585e5226] .jsoneditor-menu{border-bottom-color:#e6e6e6;background-color:#e6e6e6}.editor-json.theme--light[data-v-585e5226] .jsoneditor-menu button{filter:brightness(.4)}.editor-json.theme--light[data-v-585e5226] .jsoneditor-menu button:disabled{filter:brightness(.6)}.editor-json.theme--light[data-v-585e5226] .jsoneditor-menu .jsoneditor-modes button{color:#2a2a2a}.editor-json.theme--light[data-v-585e5226] .jsoneditor-contextmenu ul li{background-color:#fff!important}.editor-json.theme--light[data-v-585e5226] .jsoneditor-contextmenu ul li .jsoneditor-selected{background-color:#e6e6e6!important;color:#2a2a2a!important}.editor-json.theme--light[data-v-585e5226] .json-save-btn{background-color:#2a2a2a;color:#fff}.editor-json.theme--light[data-v-585e5226] .json-save-btn:hover{background-color:#e6e6e6}.editor-json.theme--brand-1 .editor-json__button-copy[data-v-585e5226]{border-color:#42b983;background-color:#fff;color:#42b983}.editor-json.theme--brand-1 .editor-json__button-copy[data-v-585e5226]:hover{border-color:#273849;background-color:#fff;color:#273849}.editor-json.theme--brand-1 .editor-json__button-save[data-v-585e5226]{border-color:#42b983;background-color:#42b983;color:#fff}.editor-json.theme--brand-1 .editor-json__button-save[data-v-585e5226]:hover{border-color:#273849;background-color:#273849}.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor{border-color:#42b983}.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor-menu{border-bottom-color:#42b983;background-color:#42b983}.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor-menu button,.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor-menu button:disabled{filter:brightness(0) saturate(100%) invert(100%)}.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor-contextmenu ul li{background-color:#fff!important}.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor-contextmenu ul li button{color:#2a2a2a!important}.editor-json.theme--brand-1[data-v-585e5226] .jsoneditor-contextmenu ul li button.jsoneditor-selected{background-color:#42b983!important;color:#fff!important}.editor-json.theme--brand-2 .editor-json__button-copy[data-v-585e5226]{border-color:#273849;background-color:#fff;color:#273849}.editor-json.theme--brand-2 .editor-json__button-copy[data-v-585e5226]:hover{border-color:#42b983;background-color:#fff;color:#42b983}.editor-json.theme--brand-2 .editor-json__button-save[data-v-585e5226]{border-color:#273849;background-color:#273849;color:#fff}.editor-json.theme--brand-2 .editor-json__button-save[data-v-585e5226]:hover{border-color:#42b983;background-color:#42b983}.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor{border-color:#273849}.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor-menu{border-bottom-color:#273849;background-color:#273849}.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor-menu button,.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor-menu button:disabled{filter:brightness(0) saturate(100%) invert(100%)}.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor-contextmenu ul li{background-color:#fff!important}.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor-contextmenu ul li button{color:#2a2a2a!important}.editor-json.theme--brand-2[data-v-585e5226] .jsoneditor-contextmenu ul li button.jsoneditor-selected{background-color:#273849!important;color:#fff!important}.editor-json.theme--brand-2[data-v-585e5226] .json-save-btn{background-color:#273849;color:#fff}.editor-json.theme--brand-2[data-v-585e5226] .json-save-btn:hover{background-color:#42b983}.icon[data-v-850a519a]{display:flex;align-items:center;justify-content:center;width:1.8rem;height:1.8rem}.icon__svg[data-v-850a519a]{display:inline-block;width:100%;height:100%;fill:currentcolor} \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/icon-sprite.svg b/icon-sprite.svg new file mode 100644 index 00000000..493bebce --- /dev/null +++ b/icon-sprite.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/img/jsoneditor-icons.bb13d455.svg b/img/jsoneditor-icons.bb13d455.svg new file mode 100644 index 00000000..19bfe8b3 --- /dev/null +++ b/img/jsoneditor-icons.bb13d455.svg @@ -0,0 +1,893 @@ + + + JSON Editor Icons + + + + image/svg+xml + + JSON Editor Icons + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..af1e2b5f --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +vue-editor
\ No newline at end of file diff --git a/js/app.56397685.js b/js/app.56397685.js new file mode 100644 index 00000000..82f8ddea --- /dev/null +++ b/js/app.56397685.js @@ -0,0 +1,2 @@ +(function(){"use strict";var e={758:function(e,t,a){var n=a(144),o=function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"app"}},[t("header",{staticClass:"page__header"},[t("PageNav")],1),t("main",{staticClass:"page__main"},[t("router-view")],1)])},r=[],s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"page-nav page__inner"},[t("ul",{staticClass:"page-nav__list"},e._l(e.navList,(function(a,n){return t("li",{key:n,staticClass:"page-nav__item"},[t("router-link",{staticClass:"page-nav__link",attrs:{to:a.path}},[e._v(" "+e._s(a.name)+" ")])],1)})),0)])},i=[],l={name:"PageNav",data(){return{navList:[{name:"Home",path:"/"},{name:"About",path:"/about"},{name:"Editors",path:"/editors"}]}}},u=l,c=a(736),p=(0,c.Z)(u,s,i,!1,null,"6936054d",null),v=p.exports,_={name:"App",components:{PageNav:v},watch:{$route:{handler(e,t){const a=document.getElementsByTagName("html")[0],n=document.getElementsByTagName("body")[0];"undefined"!==typeof t&&a.classList.remove("page",`page-${t.name.toLowerCase()}`),a.classList.add("page",`page-${e.name.toLowerCase()}`),n.classList.add("page__body")},immediate:!0}}},d=_,g=(0,c.Z)(d,o,r,!1,null,null,null),h=g.exports,f=a(345),m=function(){var e=this,t=e._self._c;return t("div",{staticClass:"page__inner page__container"},[t("Icon",{attrs:{name:"logoVue","aria-label":"Vue logo",title:"Vue logo"}}),t("HelloWorld",{attrs:{msg:"Welcome to Your Vue.js App"}})],1)},b=[],j=function(){var e=this,t=e._self._c;return t("section",{staticClass:"hello"},[t("h2",{staticClass:"page__title"},[e._v(" "+e._s(e.msg)+" ")]),e._m(0),e._m(1),e._m(2),e._m(3)])},C=[function(){var e=this,t=e._self._c;return t("article",{staticClass:"page__article"},[t("p",[e._v(" For a guide and recipes on how to configure / customize this project, "),t("br"),e._v(" check out the "),t("a",{attrs:{href:"https://cli.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" vue-cli documentation ")]),e._v(" . ")])])},function(){var e=this,t=e._self._c;return t("article",{staticClass:"page__article"},[t("h3",{staticClass:"page__subtitle"},[e._v(" Installed CLI Plugins ")]),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel",target:"_blank",rel:"noopener"}},[e._v(" babel ")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router",target:"_blank",rel:"noopener"}},[e._v(" router ")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex",target:"_blank",rel:"noopener"}},[e._v(" vuex ")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint",target:"_blank",rel:"noopener"}},[e._v(" eslint ")])])])])},function(){var e=this,t=e._self._c;return t("article",{staticClass:"page__article"},[t("h3",{staticClass:"page__subtitle"},[e._v(" Essential Links ")]),t("ul",[t("li",[t("a",{attrs:{href:"https://vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" Core Docs ")])]),t("li",[t("a",{attrs:{href:"https://forum.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" Forum ")])]),t("li",[t("a",{attrs:{href:"https://chat.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" Community Chat ")])]),t("li",[t("a",{attrs:{href:"https://twitter.com/vuejs",target:"_blank",rel:"noopener"}},[e._v(" Twitter ")])]),t("li",[t("a",{attrs:{href:"https://news.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" News ")])])])])},function(){var e=this,t=e._self._c;return t("article",{staticClass:"page__article"},[t("h3",{staticClass:"page__subtitle"},[e._v(" Ecosystem ")]),t("ul",[t("li",[t("a",{attrs:{href:"https://router.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" vue-router ")])]),t("li",[t("a",{attrs:{href:"https://vuex.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" vuex ")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-devtools#vue-devtools",target:"_blank",rel:"noopener"}},[e._v(" vue-devtools ")])]),t("li",[t("a",{attrs:{href:"https://vue-loader.vuejs.org",target:"_blank",rel:"noopener"}},[e._v(" vue-loader ")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/awesome-vue",target:"_blank",rel:"noopener"}},[e._v(" awesome-vue ")])])])])}],k={name:"HelloWorld",props:{msg:String}},y=k,w=(0,c.Z)(y,j,C,!1,null,"4a6dfa69",null),x=w.exports,O={name:"Home",components:{HelloWorld:x}},Z=O,S=(0,c.Z)(Z,m,b,!1,null,"7cdb44a3",null),P=S.exports,N=function(){var e=this;e._self._c;return e._m(0)},E=[function(){var e=this,t=e._self._c;return t("div",{staticClass:"page__inner page__container"},[t("h1",{staticClass:"page__title"},[e._v(" This is an about page ")])])}],I={},J=(0,c.Z)(I,N,E,!1,null,null,null),L=J.exports,H=function(){var e=this,t=e._self._c;return t("div",{staticClass:"page__inner page__container"},[t("h1",{staticClass:"page__title"},[e._v(" Editors page ")]),t("EditorJSON")],1)},T=[],V=function(){var e=this,t=e._self._c;return t("div",{staticClass:"editor-json theme--brand-2"},[t("h2",{staticClass:"page__subtitle"},[e._v(" Vue JSON editor ")]),t("div",{staticClass:"editor-json__content"},[t("vue-json-editor",{attrs:{"show-btns":!1,"expanded-on-start":!0},on:{"json-change":e.onJsonChange},model:{value:e.json,callback:function(t){e.json=t},expression:"json"}}),t("div",{staticClass:"editor-json__actions"},[t("button",{directives:[{name:"clipboard",rawName:"v-clipboard:copy",value:JSON.stringify(e.json),expression:"JSON.stringify(json)",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:e.onCopy,expression:"onCopy",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:e.onError,expression:"onError",arg:"error"}],staticClass:"editor-json__button editor-json__button-copy",attrs:{type:"button"}},[t("Icon",{attrs:{name:"copy","aria-label":"Copy json",title:"Copy json"}}),t("span",[e._v("Copy")])],1),t("button",{staticClass:"editor-json__button editor-json__button-save",on:{click:e.onSave}},[t("Icon",{attrs:{name:"save","aria-label":"Save json",title:"Save json"}}),t("span",[e._v("Save")])],1)])],1)])},$=[],A=a(957),F={name:"Editor",components:{vueJsonEditor:A.Z},data(){return{json:{msg:"demo of jsoneditor"}}},created(){this.getPikachu()},methods:{onJsonChange(e){console.log("value:",e)},getPikachu(){const e="https://pokeapi.co/api/v2/pokemon/pikachu";fetch(e).then((e=>e.json())).then((e=>{this.json=e}))},onCopy(){alert("Copied JSON to the clipboard")},onError(e){alert("Failed to copy JSON to the clipboard"),console.log(e)},onSave(){localStorage.setItem("editor-json",JSON.stringify(this.json))}}},W=F,B=(0,c.Z)(W,V,$,!1,null,"585e5226",null),q=B.exports,z={name:"Editors",components:{EditorJSON:q}},D=z,M=(0,c.Z)(D,H,T,!1,null,null,null),Y=M.exports;n.ZP.use(f.ZP);const G=[{path:"/",name:"Home",component:P},{path:"/home",name:"Home",component:P},{path:"/about",name:"About",component:L},{path:"/editors",name:"Editors",component:Y}],K=new f.ZP({mode:"history",base:"/vue-editor/",routes:G});var Q=K,R=a(629);n.ZP.use(R.ZP);var U=new R.ZP.Store({state:{},mutations:{},actions:{},modules:{}}),X=a(53);(0,X.Z)({useCache:!0});var ee=function(){var e=this,t=e._self._c;return t("i",{staticClass:"icon",class:`${e.iconId}`,attrs:{"aria-label":e.ariaLabel,title:e.title}},[t("svg",{staticClass:"icon__svg"},[t("use",{staticClass:"icon__use",attrs:{"xlink:href":`#${e.iconId}`}})])])},te=[],ae={id:"icon-copy"},ne={id:"icon-logo-vue"},oe={id:"icon-save"};const re={copy:ae.id,logoVue:ne.id,save:oe.id};var se={name:"Icon",props:{name:{type:String,required:!0,validate:e=>Object.keys(re).includes(e)},ariaLabel:{type:String,default:""},title:{type:String,default:""}},computed:{iconId(){return re[this.name]}}},ie=se,le=(0,c.Z)(ie,ee,te,!1,null,"850a519a",null),ue=le.exports,ce=a(705),pe=a.n(ce);n.ZP.component("Icon",ue),n.ZP.use(pe()),n.ZP.config.productionTip=!1,new n.ZP({router:Q,store:U,render:e=>e(h)}).$mount("#app")}},t={};function a(n){var o=t[n];if(void 0!==o)return o.exports;var r=t[n]={exports:{}};return e[n].call(r.exports,r,r.exports,a),r.exports}a.m=e,function(){var e=[];a.O=function(t,n,o,r){if(!n){var s=1/0;for(c=0;c=r)&&Object.keys(a.O).every((function(e){return a.O[e](n[l])}))?n.splice(l--,1):(i=!1,r0&&e[c-1][2]>r;c--)e[c]=e[c-1];e[c]=[n,o,r]}}(),function(){a.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return a.d(t,{a:t}),t}}(),function(){a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={143:0};a.O.j=function(t){return 0===e[t]};var t=function(t,n){var o,r,s=n[0],i=n[1],l=n[2],u=0;if(s.some((function(t){return 0!==e[t]}))){for(o in i)a.o(i,o)&&(a.m[o]=i[o]);if(l)var c=l(a)}for(t&&t(n);u\n\t
\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t\n\t\t\t\n\t\t
\n\t
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PageNav.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PageNav.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PageNav.vue?vue&type=template&id=6936054d&scoped=true\"\nimport script from \"./PageNav.vue?vue&type=script&lang=js\"\nexport * from \"./PageNav.vue?vue&type=script&lang=js\"\nimport style0 from \"./PageNav.vue?vue&type=style&index=0&id=6936054d&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6936054d\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=0abbc875\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=0abbc875&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"page__inner page__container\"},[_c('Icon',{attrs:{\"name\":\"logoVue\",\"aria-label\":\"Vue logo\",\"title\":\"Vue logo\"}}),_c('HelloWorld',{attrs:{\"msg\":\"Welcome to Your Vue.js App\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"hello\"},[_c('h2',{staticClass:\"page__title\"},[_vm._v(\" \"+_vm._s(_vm.msg)+\" \")]),_vm._m(0),_vm._m(1),_vm._m(2),_vm._m(3)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('article',{staticClass:\"page__article\"},[_c('p',[_vm._v(\" For a guide and recipes on how to configure / customize this project, \"),_c('br'),_vm._v(\" check out the \"),_c('a',{attrs:{\"href\":\"https://cli.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" vue-cli documentation \")]),_vm._v(\" . \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('article',{staticClass:\"page__article\"},[_c('h3',{staticClass:\"page__subtitle\"},[_vm._v(\" Installed CLI Plugins \")]),_c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" babel \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" router \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" vuex \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" eslint \")])])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('article',{staticClass:\"page__article\"},[_c('h3',{staticClass:\"page__subtitle\"},[_vm._v(\" Essential Links \")]),_c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" Core Docs \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://forum.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" Forum \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://chat.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" Community Chat \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://twitter.com/vuejs\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" Twitter \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://news.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" News \")])])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('article',{staticClass:\"page__article\"},[_c('h3',{staticClass:\"page__subtitle\"},[_vm._v(\" Ecosystem \")]),_c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://router.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" vue-router \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://vuex.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" vuex \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-devtools#vue-devtools\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" vue-devtools \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://vue-loader.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" vue-loader \")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/awesome-vue\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" awesome-vue \")])])])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=4a6dfa69&scoped=true\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js\"\nimport style0 from \"./HelloWorld.vue?vue&type=style&index=0&id=4a6dfa69&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4a6dfa69\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=7cdb44a3&scoped=true\"\nimport script from \"./Home.vue?vue&type=script&lang=js\"\nexport * from \"./Home.vue?vue&type=script&lang=js\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=7cdb44a3&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7cdb44a3\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _vm._m(0)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"page__inner page__container\"},[_c('h1',{staticClass:\"page__title\"},[_vm._v(\" This is an about page \")])])\n}]\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./About.vue?vue&type=template&id=bb4dcdfc\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"page__inner page__container\"},[_c('h1',{staticClass:\"page__title\"},[_vm._v(\" Editors page \")]),_c('EditorJSON')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"editor-json theme--brand-2\"},[_c('h2',{staticClass:\"page__subtitle\"},[_vm._v(\" Vue JSON editor \")]),_c('div',{staticClass:\"editor-json__content\"},[_c('vue-json-editor',{attrs:{\"show-btns\":false,\"expanded-on-start\":true},on:{\"json-change\":_vm.onJsonChange},model:{value:(_vm.json),callback:function ($$v) {_vm.json=$$v},expression:\"json\"}}),_c('div',{staticClass:\"editor-json__actions\"},[_c('button',{directives:[{name:\"clipboard\",rawName:\"v-clipboard:copy\",value:(JSON.stringify(_vm.json)),expression:\"JSON.stringify(json)\",arg:\"copy\"},{name:\"clipboard\",rawName:\"v-clipboard:success\",value:(_vm.onCopy),expression:\"onCopy\",arg:\"success\"},{name:\"clipboard\",rawName:\"v-clipboard:error\",value:(_vm.onError),expression:\"onError\",arg:\"error\"}],staticClass:\"editor-json__button editor-json__button-copy\",attrs:{\"type\":\"button\"}},[_c('Icon',{attrs:{\"name\":\"copy\",\"aria-label\":\"Copy json\",\"title\":\"Copy json\"}}),_c('span',[_vm._v(\"Copy\")])],1),_c('button',{staticClass:\"editor-json__button editor-json__button-save\",on:{\"click\":_vm.onSave}},[_c('Icon',{attrs:{\"name\":\"save\",\"aria-label\":\"Save json\",\"title\":\"Save json\"}}),_c('span',[_vm._v(\"Save\")])],1)])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EditorJSON.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EditorJSON.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./EditorJSON.vue?vue&type=template&id=585e5226&scoped=true\"\nimport script from \"./EditorJSON.vue?vue&type=script&lang=js\"\nexport * from \"./EditorJSON.vue?vue&type=script&lang=js\"\nimport style0 from \"./EditorJSON.vue?vue&type=style&index=0&id=585e5226&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"585e5226\",\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Editors.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Editors.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Editors.vue?vue&type=template&id=5fe17678\"\nimport script from \"./Editors.vue?vue&type=script&lang=js\"\nexport * from \"./Editors.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport VueRouter from \"vue-router\";\nimport Home from \"../views/Home.vue\";\nimport About from \"../views/About.vue\";\nimport Editors from \"../views/Editors.vue\";\n\nVue.use(VueRouter);\n\nconst routes = [\n\t{\n\t\t\"path\": \"/\",\n\t\t\"name\": \"Home\",\n\t\t\"component\": Home,\n\t},\n\t{\n\t\t\"path\": \"/home\",\n\t\t\"name\": \"Home\",\n\t\t\"component\": Home,\n\t},\n\t{\n\t\t\"path\": \"/about\",\n\t\t\"name\": \"About\",\n\t\t\"component\": About,\n\t},\n\t{\n\t\t\"path\": \"/editors\",\n\t\t\"name\": \"Editors\",\n\t\t\"component\": Editors,\n\t},\n];\n\nconst router = new VueRouter({\n\t\"mode\": \"history\",\n\t\"base\": process.env.BASE_URL,\n\troutes,\n});\n\nexport default router;\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n\t\"state\": {},\n\t\"mutations\": {},\n\t\"actions\": {},\n\t\"modules\": {},\n});\n","import svgSymbolSpriteLoader from \"svg-symbol-sprite-loader\";\n\nsvgSymbolSpriteLoader({\n\t\"useCache\": process.env.NODE_ENV === \"production\",\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('i',{staticClass:\"icon\",class:`${_vm.iconId}`,attrs:{\"aria-label\":_vm.ariaLabel,\"title\":_vm.title}},[_c('svg',{staticClass:\"icon__svg\"},[_c('use',{staticClass:\"icon__use\",attrs:{\"xlink:href\":`#${_vm.iconId}`}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\"id\":\"icon-copy\"}","export default {\"id\":\"icon-logo-vue\"}","export default {\"id\":\"icon-save\"}","// List of svg icons (import and export)\nimport copy from \"@/assets/images/icons/svg/copy.svg\";\nimport logoVue from \"@/assets/images/icons/svg/logo-vue.svg\";\nimport save from \"@/assets/images/icons/svg/save.svg\";\n\nexport const iconMap = {\n\t\"copy\": copy.id,\n\t\"logoVue\": logoVue.id,\n\t\"save\": save.id,\n};\n","\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Icon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Icon.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Icon.vue?vue&type=template&id=850a519a&scoped=true\"\nimport script from \"./Icon.vue?vue&type=script&lang=js\"\nexport * from \"./Icon.vue?vue&type=script&lang=js\"\nimport style0 from \"./Icon.vue?vue&type=style&index=0&id=850a519a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"850a519a\",\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport router from \"./router\";\nimport store from \"./store\";\n\nimport \"@/assets/images/icons/icons-import.js\";\nimport Icon from \"@/components/Icon\";\nVue.component(\"Icon\", Icon);\n\nimport VueClipboard from \"vue-clipboard2\";\nVue.use(VueClipboard);\n\nVue.config.productionTip = false;\n\nnew Vue({\n\trouter,\n\tstore,\n\t\"render\": h => h(App),\n}).$mount(\"#app\");\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkvue_editor\"] = self[\"webpackChunkvue_editor\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(758); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","attrs","staticClass","staticRenderFns","_l","navList","item","index","key","path","_v","_s","name","data","component","PageNav","handler","to","from","html","document","getElementsByTagName","body","classList","remove","toLowerCase","add","msg","_m","String","HelloWorld","script","on","onJsonChange","model","value","json","callback","$$v","expression","directives","rawName","JSON","stringify","arg","onCopy","onError","onSave","vueJsonEditor","created","getPikachu","console","log","url","fetch","then","res","alert","e","localStorage","setItem","EditorJSON","Vue","use","VueRouter","routes","Home","About","Editors","router","process","Vuex","svgSymbolSpriteLoader","class","iconId","ariaLabel","title","iconMap","copy","id","logoVue","save","Object","keys","includes","Icon","VueClipboard","config","productionTip","store","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","push","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/js/chunk-vendors.aaa2d4d7.js b/js/chunk-vendors.aaa2d4d7.js new file mode 100644 index 00000000..3a2de6f1 --- /dev/null +++ b/js/chunk-vendors.aaa2d4d7.js @@ -0,0 +1,50 @@ +(self["webpackChunkvue_editor"]=self["webpackChunkvue_editor"]||[]).push([[998],{957:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var i=function(){var e=this,t=e._self._c;return t("div",[t("div",{staticClass:"jsoneditor-vue"}),!1!==e.showBtns?t("div",{staticClass:"jsoneditor-btns"},[t("button",{staticClass:"json-save-btn",attrs:{type:"button",disabled:e.error},on:{click:function(t){return e.onSave()}}},[e._v(e._s(e.locale[e.lang].save))])]):e._e()])},r=[],o=n(696),s=n.n(o),a={props:{value:[String,Number,Object,Array],showBtns:[Boolean],expandedOnStart:{type:Boolean,default:!1},mode:{type:String,default:"tree"},modes:{type:Array,default:function(){return["tree","code","form","text","view"]}},lang:{type:String,default:"en"}},watch:{value:{immediate:!0,async handler(e){this.internalChange||(await this.setEditor(e),this.error=!1,this.expandAll())},deep:!0}},data(){return{editor:null,error:!1,json:this.value,internalChange:!1,expandedModes:["tree","view","form"],locale:{it:{save:"SALVA"},en:{save:"SAVE"},zh:{save:"保存"}}}},mounted(){let e=this,t={mode:this.mode,modes:this.modes,onChange(){try{let t=e.editor.get();e.json=t,e.error=!1,e.$emit("json-change",t),e.internalChange=!0,e.$emit("input",t),e.$nextTick((function(){e.internalChange=!1}))}catch(t){e.error=!0,e.$emit("has-error",t)}},onModeChange(){e.expandAll()}};this.editor=new(s())(this.$el.querySelector(".jsoneditor-vue"),t,this.json)},methods:{expandAll(){this.expandedOnStart&&this.expandedModes.includes(this.editor.getMode())&&this.editor.expandAll()},onSave(){this.$emit("json-save",this.json)},async setEditor(e){this.editor&&this.editor.set(e)}}},l=a,c=n(736),h=(0,c.Z)(l,i,r,!1,null,"9b72cb1a",null),u=h.exports},736:function(e,t,n){"use strict";function i(e,t,n,i,r,o,s,a){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),s?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},c._ssrRegister=l):r&&(l=a?function(){r.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var h=c.render;c.render=function(e,t){return l.call(t),h(e,t)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,l):[l]}return{exports:e,options:c}}n.d(t,{Z:function(){return i}})},653:function(e){ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,n){e.exports=n()}(0,(function(){return t={686:function(e,t,n){"use strict";n.d(t,{default:function(){return y}});t=n(279);var i=n.n(t),r=(t=n(370),n.n(t)),o=(t=n(817),n.n(t));function s(e){try{return document.execCommand(e)}catch(e){return}}var a=function(e){return e=o()(e),s("cut"),e};function l(e,t){var n,i;n=e,i="rtl"===document.documentElement.getAttribute("dir"),(e=document.createElement("textarea")).style.fontSize="12pt",e.style.border="0",e.style.padding="0",e.style.margin="0",e.style.position="absolute",e.style[i?"right":"left"]="-9999px",i=window.pageYOffset||document.documentElement.scrollTop,e.style.top="".concat(i,"px"),e.setAttribute("readonly",""),e.value=n;return t.container.appendChild(e),t=o()(e),s("copy"),e.remove(),t}var c=function(e){var t=1{if(!e.ok)throw new Error(e.statusText);return e})).then((e=>e.text())).then((e=>{document.body.insertAdjacentHTML("afterbegin",e),n&&n.setItem&&(n.setItem("ICON_SPRITE_ID",o),n.setItem("SVG_SPRITE_DATA",e))})).catch((e=>console.warn(`SVG sprite fetch failure: ${e.message}`)))}t.Z=r},705:function(e,t,n){var i=n(653),r={autoSetContainer:!1,appendToBody:!0},o={install:function(e){var t="3."===e.version.slice(0,2)?e.config.globalProperties:e.prototype;t.$clipboardConfig=r,t.$copyText=function(e,t){return new Promise((function(n,o){var s=document.createElement("button"),a=new i(s,{text:function(){return e},action:function(){return"copy"},container:"object"===typeof t?t:document.body});a.on("success",(function(e){a.destroy(),n(e)})),a.on("error",(function(e){a.destroy(),o(e)})),r.appendToBody&&document.body.appendChild(s),s.click(),r.appendToBody&&document.body.removeChild(s)}))},e.directive("clipboard",{bind:function(e,t,n){if("success"===t.arg)e._vClipboard_success=t.value;else if("error"===t.arg)e._vClipboard_error=t.value;else{var o=new i(e,{text:function(){return t.value},action:function(){return"cut"===t.arg?"cut":"copy"},container:r.autoSetContainer?e:void 0});o.on("success",(function(t){var n=e._vClipboard_success;n&&n(t)})),o.on("error",(function(t){var n=e._vClipboard_error;n&&n(t)})),e._vClipboard=o}},update:function(e,t){"success"===t.arg?e._vClipboard_success=t.value:"error"===t.arg?e._vClipboard_error=t.value:(e._vClipboard.text=function(){return t.value},e._vClipboard.action=function(){return"cut"===t.arg?"cut":"copy"})},unbind:function(e,t){e._vClipboard&&("success"===t.arg?delete e._vClipboard_success:"error"===t.arg?delete e._vClipboard_error:(e._vClipboard.destroy(),delete e._vClipboard))}})},config:r};e.exports=o},696:function(module){ +/*! + * jsoneditor.js + * + * @brief + * JSONEditor is a web-based tool to view, edit, format, and validate JSON. + * It has various modes such as a tree editor, a code editor, and a plain text + * editor. + * + * Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+ + * + * @license + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org + * + * @author Jos de Jong, + * @version 5.5.11 + * @date 2017-01-06 + */ +(function(e,t){module.exports=t()})(0,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={exports:{},id:i,loaded:!1};return e[i].call(r.exports,r,r.exports,n),r.loaded=!0,r.exports}return n.m=e,n.c=t,n.p="",n(0)}([function(e,t,n){"use strict";var i;try{i=n(1)}catch(l){}var r=n(51),o=n(62),s=n(54);function a(e,t,n){if(!(this instanceof a))throw new Error('JSONEditor constructor called without "new".');var i=s.getInternetExplorerVersion();if(-1!=i&&i<9)throw new Error("Unsupported browser, IE9 or newer required. Please install the newest version of your browser.");if(t&&(t.error&&(console.warn('Option "error" has been renamed to "onError"'),t.onError=t.error,delete t.error),t.change&&(console.warn('Option "change" has been renamed to "onChange"'),t.onChange=t.change,delete t.change),t.editable&&(console.warn('Option "editable" has been renamed to "onEditable"'),t.onEditable=t.editable,delete t.editable),t)){var r=["ace","theme","ajv","schema","onChange","onEditable","onError","onModeChange","escapeUnicode","history","search","mode","modes","name","indentation","sortObjectKeys"];Object.keys(t).forEach((function(e){-1===r.indexOf(e)&&console.warn('Unknown option "'+e+'". This option will be ignored')}))}arguments.length&&this._create(e,t,n)}a.modes={},a.prototype.DEBOUNCE_INTERVAL=150,a.prototype._create=function(e,t,n){this.container=e,this.options=t||{},this.json=n||{};var i=this.options.mode||"tree";this.setMode(i)},a.prototype.destroy=function(){},a.prototype.set=function(e){this.json=e},a.prototype.get=function(){return this.json},a.prototype.setText=function(e){this.json=s.parse(e)},a.prototype.getText=function(){return JSON.stringify(this.json)},a.prototype.setName=function(e){this.options||(this.options={}),this.options.name=e},a.prototype.getName=function(){return this.options&&this.options.name},a.prototype.setMode=function(e){var t,n,i=this.container,r=s.extend({},this.options),o=r.mode;r.mode=e;var c=a.modes[e];if(!c)throw new Error('Unknown mode "'+r.mode+'"');try{var h="text"==c.data;if(n=this.getName(),t=this[h?"getText":"get"](),this.destroy(),s.clear(this),s.extend(this,c.mixin),this.create(i,r),this.setName(n),this[h?"setText":"set"](t),"function"===typeof c.load)try{c.load.call(this)}catch(l){console.error(l)}if("function"===typeof r.onModeChange&&e!==o)try{r.onModeChange(e,o)}catch(l){console.error(l)}}catch(l){this._onError(l)}},a.prototype.getMode=function(){return this.options.mode},a.prototype._onError=function(e){if(!this.options||"function"!==typeof this.options.onError)throw e;this.options.onError(e)},a.prototype.setSchema=function(e){if(e){var t;try{t=this.options.ajv||i({allErrors:!0,verbose:!0})}catch(l){console.warn("Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.")}t&&(this.validateSchema=t.compile(e),this.options.schema=e,this.validate()),this.refresh()}else this.validateSchema=null,this.options.schema=null,this.validate(),this.refresh()},a.prototype.validate=function(){},a.prototype.refresh=function(){},a.registerMode=function(e){var t,n;if(s.isArray(e))for(t=0;t",'"',"`"," ","\r","\n","\t"],l=["{","}","|","\\","^","`"].concat(a),c=["'"].concat(l),h=["%","/","?",";","#"].concat(c),u=["/","?","#"],d=255,f=/^[a-z0-9A-Z_-]{0,63}$/,p=/^([a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=n(7);function w(e,t,n){if(e&&F(e)&&e instanceof r)return e;var i=new r;return i.parse(e,t,n),i}function b(e){return E(e)&&(e=w(e)),e instanceof r?e.format():r.prototype.format.call(e)}function A(e,t){return w(e,!1,!0).resolve(t)}function C(e,t){return e?w(e,!1,!0).resolveObject(t):t}function E(e){return"string"===typeof e}function F(e){return"object"===typeof e&&null!==e}function x(e){return null===e}function _(e){return null==e}r.prototype.parse=function(e,t,n){if(!E(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e;r=r.trim();var s=o.exec(r);if(s){s=s[0];var a=s.toLowerCase();this.protocol=a,r=r.substr(s.length)}if(n||s||r.match(/^\/\/[^@\/]+@[^@\/]+/)){var l="//"===r.substr(0,2);!l||s&&g[s]||(r=r.substr(2),this.slashes=!0)}if(!g[s]&&(l||s&&!v[s])){for(var w,b,A=-1,C=0;C127?k+="x":k+=$[D];if(!k.match(f)){var L=_.slice(0,C),R=_.slice(C+1),T=$.match(p);T&&(L.push(T[1]),R.unshift(T[2])),R.length&&(r="/"+R.join(".")+r),this.hostname=L.join(".");break}}}if(this.hostname.length>d?this.hostname="":this.hostname=this.hostname.toLowerCase(),!x){var O=this.hostname.split("."),P=[];for(C=0;C0)&&n.host.split("@");f&&(n.auth=f.shift(),n.host=n.hostname=f.shift())}return n.search=e.search,n.query=e.query,x(n.pathname)&&x(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!u.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var p=u.slice(-1)[0],m=(n.host||e.host)&&("."===p||".."===p)||""===p,y=0,w=u.length;w>=0;w--)p=u[w],"."==p?u.splice(w,1):".."===p?(u.splice(w,1),y++):y&&(u.splice(w,1),y--);if(!c&&!h)for(;y--;y)u.unshift("..");!c||""===u[0]||u[0]&&"/"===u[0].charAt(0)||u.unshift(""),m&&"/"!==u.join("/").substr(-1)&&u.push("");var b=""===u[0]||u[0]&&"/"===u[0].charAt(0);if(d){n.hostname=n.host=b?"":u.length?u.shift():"";f=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");f&&(n.auth=f.shift(),n.host=n.hostname=f.shift())}return c=c||n.host&&u.length,c&&!b&&u.unshift(""),u.length?n.pathname=u.join("/"):(n.pathname=null,n.path=null),x(n.pathname)&&x(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){var i;(function(e,r){(function(o){"object"==typeof t&&t&&t.nodeType,"object"==typeof e&&e&&e.nodeType;var s="object"==typeof r&&r;s.global!==s&&s.window!==s&&s.self;var a,l=2147483647,c=36,h=1,u=26,d=38,f=700,p=72,m=128,g="-",v=/^xn--/,y=/[^\x20-\x7E]/,w=/[\x2E\u3002\uFF0E\uFF61]/g,b={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},A=c-h,C=Math.floor,E=String.fromCharCode;function F(e){throw RangeError(b[e])}function x(e,t){var n=e.length,i=[];while(n--)i[n]=t(e[n]);return i}function _(e,t){var n=e.split("@"),i="";n.length>1&&(i=n[0]+"@",e=n[1]),e=e.replace(w,".");var r=e.split("."),o=x(r,t).join(".");return i+o}function S(e){var t,n,i=[],r=0,o=e.length;while(r=55296&&t<=56319&&r65535&&(e-=65536,t+=E(e>>>10&1023|55296),e=56320|1023&e),t+=E(e),t})).join("")}function k(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:c}function D(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function B(e,t,n){var i=0;for(e=n?C(e/f):e>>1,e+=C(e/t);e>A*u>>1;i+=c)e=C(e/A);return C(i+(A+1)*e/(e+d))}function L(e){var t,n,i,r,o,s,a,d,f,v,y=[],w=e.length,b=0,A=m,E=p;for(n=e.lastIndexOf(g),n<0&&(n=0),i=0;i=128&&F("not-basic"),y.push(e.charCodeAt(i));for(r=n>0?n+1:0;r=w&&F("invalid-input"),d=k(e.charCodeAt(r++)),(d>=c||d>C((l-b)/s))&&F("overflow"),b+=d*s,f=a<=E?h:a>=E+u?u:a-E,dC(l/v)&&F("overflow"),s*=v}t=y.length+1,E=B(b-o,t,0==o),C(b/t)>l-A&&F("overflow"),A+=C(b/t),b%=t,y.splice(b++,0,A)}return $(y)}function R(e){var t,n,i,r,o,s,a,d,f,v,y,w,b,A,x,_=[];for(e=S(e),w=e.length,t=m,n=0,o=p,s=0;s=t&&yC((l-n)/b)&&F("overflow"),n+=(a-t)*b,t=a,s=0;sl&&F("overflow"),y==t){for(d=n,f=c;;f+=c){if(v=f<=o?h:f>=o+u?u:f-o,d0&&l>a&&(l=a);for(var c=0;c=0?(h=p.substr(0,m),u=p.substr(m+1)):(h=p,u=""),d=decodeURIComponent(h),f=decodeURIComponent(u),n(o,d)?Array.isArray(o[d])?o[d].push(f):o[d]=[o[d],f]:o[d]=f}return o}},function(e,t){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,i,r){return t=t||"&",i=i||"=",null===e&&(e=void 0),"object"===typeof e?Object.keys(e).map((function(r){var o=encodeURIComponent(n(r))+i;return Array.isArray(e[r])?e[r].map((function(e){return o+encodeURIComponent(n(e))})).join(t):o+encodeURIComponent(n(e[r]))})).join(t):r?encodeURIComponent(n(r))+i+encodeURIComponent(n(e)):""}},function(e,t){"use strict";e.exports=function e(t,n){if(t===n)return!0;var i,r=Array.isArray(t),o=Array.isArray(n);if(r&&o){if(t.length!=n.length)return!1;for(i=0;i=55296&&t<=56319&&r=t)throw new Error("Cannot access property/index "+r+" levels up, current level is "+t);return n[t-r]}if(r>t)throw new Error("Cannot access data "+r+" levels up, current level is "+t);var s="data"+(t-r||"");if(!o)return s;for(var a=s,l=o.split("/"),c=0;c="0"&&i<="9")t+=i,l();if("."===i){t+=".";while(l()&&i>="0"&&i<="9")t+=i}if("e"===i||"E"===i){t+=i,l(),"-"!==i&&"+"!==i||(t+=i,l());while(i>="0"&&i<="9")t+=i,l()}if(e=+t,isFinite(e))return e;a("Bad number")},h=function(){var e,t,n,r="";if('"'===i)while(l()){if('"'===i)return l(),r;if("\\"===i)if(l(),"u"===i){for(n=0,t=0;t<4;t+=1){if(e=parseInt(l(),16),!isFinite(e))break;n=16*n+e}r+=String.fromCharCode(n)}else{if("string"!==typeof s[i])break;r+=s[i]}else r+=i}a("Bad string")},u=function(){while(i&&i<=" ")l()},d=function(){switch(i){case"t":return l("t"),l("r"),l("u"),l("e"),!0;case"f":return l("f"),l("a"),l("l"),l("s"),l("e"),!1;case"n":return l("n"),l("u"),l("l"),l("l"),null}a("Unexpected '"+i+"'")},f=function(){var e=[];if("["===i){if(l("["),u(),"]"===i)return l("]"),e;while(i){if(e.push(o()),u(),"]"===i)return l("]"),e;l(","),u()}}a("Bad array")},p=function(){var e,t={};if("{"===i){if(l("{"),u(),"}"===i)return l("}"),t;while(i){if(e=h(),u(),l(":"),Object.hasOwnProperty.call(t,e)&&a('Duplicate key "'+e+'"'),t[e]=o(),u(),"}"===i)return l("}"),t;l(","),u()}}a("Bad object")};o=function(){switch(u(),i){case"{":return p();case"[":return f();case'"':return h();case"-":return c();default:return i>="0"&&i<="9"?c():d()}},e.exports=function(e,t){var s;return r=e,n=0,i=" ",s=o(),u(),i&&a("Syntax error"),"function"===typeof t?function e(n,i){var r,o,s=n[i];if(s&&"object"===typeof s)for(r in s)Object.prototype.hasOwnProperty.call(s,r)&&(o=e(s,r),void 0!==o?s[r]=o:delete s[r]);return t.call(n,i,s)}({"":s},""):s}},function(e,t){var n,i,r,o=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function a(e){return o.lastIndex=0,o.test(e)?'"'+e.replace(o,(function(e){var t=s[e];return"string"===typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function l(e,t){var o,s,c,h,u,d=n,f=t[e];switch(f&&"object"===typeof f&&"function"===typeof f.toJSON&&(f=f.toJSON(e)),"function"===typeof r&&(f=r.call(t,e,f)),typeof f){case"string":return a(f);case"number":return isFinite(f)?String(f):"null";case"boolean":case"null":return String(f);case"object":if(!f)return"null";if(n+=i,u=[],"[object Array]"===Object.prototype.toString.apply(f)){for(h=f.length,o=0;o2&&(t=n.call(arguments,1)),i(t)}))}))}function s(e){return Promise.all(e.map(r,this))}function a(e){for(var t=new e.constructor,n=Object.keys(e),i=[],o=0;o=1&&n<=12&&i>=1&&i<=o[n]}function p(e,t){var n=e.match(s);if(!n)return!1;var i=n[1],r=n[2],o=n[3],a=n[5];return i<=23&&r<=59&&o<=59&&(!t||a)}e.exports=d,d.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*)?(?:\:|\/)\/?[^\s]*$/i,email:/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:a,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-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-f]{1,4}:){5}(?:(?:(?::[0-9a-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-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-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-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-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-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-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-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-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-f]{1,4}){1,7})|(?:(?::[0-9a-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}))|:)))(?:%.+)?\s*$/i,regex:b,uuid:c,"json-pointer":h,"relative-json-pointer":u},d.full={date:f,time:p,"date-time":g,uri:w,email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:v,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-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-f]{1,4}:){5}(?:(?:(?::[0-9a-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-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-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-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-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-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-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-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-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-f]{1,4}){1,7})|(?:(?::[0-9a-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}))|:)))(?:%.+)?\s*$/i,regex:b,uuid:c,"json-pointer":h,"relative-json-pointer":u},d.compare={date:A,time:C,"date-time":E};var m=/t|\s/i;function g(e){var t=e.split(m);return f(t[0])&&p(t[1],!0)}function v(e){return e.length<=255&&a.test(e)}var y=/\/|\:/;function w(e){return y.test(e)&&l.test(e)}function b(e){try{return new RegExp(e),!0}catch(t){return!1}}function A(e,t){if(e&&t)return e>t?1:et?1:e "+E+") { ";var x=h+"["+E+"]";f.schema=C,f.schemaPath=a+"["+E+"]",f.errSchemaPath=l+"/"+E,f.errorPath=e.util.getPathExpr(e.errorPath,E,e.opts.jsonPointers,!0),f.dataPathArr[m]=E;var _=e.validate(f);e.util.varOccurences(_,g)<2?i+=" "+e.util.varReplace(_,g,x)+" ":i+=" var "+g+" = "+x+"; "+_+" ",i+=" } ",c&&(i+=" if (valid"+f.level+") { ",p+="}")}}if("object"==typeof v&&e.util.schemaHasRules(v,e.RULES.all)){f.schema=v,f.schemaPath=e.schemaPath+".additionalItems",f.errSchemaPath=e.errSchemaPath+"/additionalItems",i+=" valid"+f.level+" = true; if ("+h+".length > "+s.length+") { for (var i"+r+" = "+s.length+"; i"+r+" < "+h+".length; i"+r+"++) { ",f.errorPath=e.util.getPathExpr(e.errorPath,"i"+r,e.opts.jsonPointers,!0);x=h+"[i"+r+"]";f.dataPathArr[m]="i"+r;_=e.validate(f);e.util.varOccurences(_,g)<2?i+=" "+e.util.varReplace(_,g,x)+" ":i+=" var "+g+" = "+x+"; "+_+" ",c&&(i+=" if (!valid"+f.level+") break; "),i+=" } } ",c&&(i+=" if (valid"+f.level+") { ",p+="}")}}else if(e.util.schemaHasRules(s,e.RULES.all)){f.schema=s,f.schemaPath=a,f.errSchemaPath=l,i+=" for (var i"+r+" = 0; i"+r+" < "+h+".length; i"+r+"++) { ",f.errorPath=e.util.getPathExpr(e.errorPath,"i"+r,e.opts.jsonPointers,!0);x=h+"[i"+r+"]";f.dataPathArr[m]="i"+r;_=e.validate(f);e.util.varOccurences(_,g)<2?i+=" "+e.util.varReplace(_,g,x)+" ":i+=" var "+g+" = "+x+"; "+_+" ",c&&(i+=" if (!valid"+f.level+") break; "),i+=" } ",c&&(i+=" if (valid"+f.level+") { ",p+="}")}return c&&(i+=" "+p+" if ("+d+" == errors) {"),i=e.util.cleanUpCode(i),i}},function(e,t){"use strict";e.exports=function(e,t){var n=" ",i=e.level,r=e.dataLevel,o=e.schema[t],s=e.schemaPath+"."+t,a=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,c="data"+(r||""),h=e.opts.v5&&o.$data,u=h?e.util.getData(o.$data,r,e.dataPathArr):o;h&&(n+=" var schema"+i+" = "+u+"; ",u="schema"+i);var d="maximum"==t,f=d?"exclusiveMaximum":"exclusiveMinimum",p=e.schema[f],m=e.opts.v5&&p&&p.$data,g=d?"<":">",v=d?">":"<";if(m){var y=e.util.getData(p.$data,r,e.dataPathArr),w="exclusive"+i,b="op"+i,A="' + "+b+" + '";n+=" var schemaExcl"+i+" = "+y+"; ",y="schemaExcl"+i,n+=" var exclusive"+i+"; if (typeof "+y+" != 'boolean' && typeof "+y+" != 'undefined') { ";var C=f,E=E||[];E.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(C||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: {} ',!1!==e.opts.messages&&(n+=" , message: '"+f+" should be boolean' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";var F=n;n=E.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+F+"]); ":n+=" validate.errors = ["+F+"]; return false; ":n+=" var err = "+F+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else if( ",h&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" ((exclusive"+i+" = "+y+" === true) ? "+c+" "+v+"= "+u+" : "+c+" "+v+" "+u+")) { var op"+i+" = exclusive"+i+" ? '"+g+"' : '"+g+"=';"}else{w=!0===p,A=g;w||(A+="=");b="'"+A+"'";n+=" if ( ",h&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+c+" "+v,w&&(n+="="),n+=" "+u+") {"}C=t,E=E||[];E.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(C||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: { comparison: '+b+", limit: "+u+", exclusive: "+w+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be "+A+" ",n+=h?"' + "+u:o+"'"),e.opts.verbose&&(n+=" , schema: ",n+=h?"validate.schema"+s:""+o,n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";F=n;return n=E.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+F+"]); ":n+=" validate.errors = ["+F+"]; return false; ":n+=" var err = "+F+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",l&&(n+=" else { "),n}},function(e,t){"use strict";e.exports=function(e,t){var n=" ",i=e.level,r=e.dataLevel,o=e.schema[t],s=e.schemaPath+"."+t,a=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,c="data"+(r||""),h=e.opts.v5&&o.$data,u=h?e.util.getData(o.$data,r,e.dataPathArr):o;h&&(n+=" var schema"+i+" = "+u+"; ",u="schema"+i);var d="maxItems"==t?">":"<";n+="if ( ",h&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" "+c+".length "+d+" "+u+") { ";var f=t,p=p||[];p.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(f||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: { limit: '+u+" } ",!1!==e.opts.messages&&(n+=" , message: 'should NOT have ",n+="maxItems"==t?"more":"less",n+=" than ",n+=h?"' + "+u+" + '":""+o,n+=" items' "),e.opts.verbose&&(n+=" , schema: ",n+=h?"validate.schema"+s:""+o,n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";var m=n;return n=p.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",l&&(n+=" else { "),n}},function(e,t){"use strict";e.exports=function(e,t){var n=" ",i=e.level,r=e.dataLevel,o=e.schema[t],s=e.schemaPath+"."+t,a=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,c="data"+(r||""),h=e.opts.v5&&o.$data,u=h?e.util.getData(o.$data,r,e.dataPathArr):o;h&&(n+=" var schema"+i+" = "+u+"; ",u="schema"+i);var d="maxLength"==t?">":"<";n+="if ( ",h&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),!1===e.opts.unicode?n+=" "+c+".length ":n+=" ucs2length("+c+") ",n+=" "+d+" "+u+") { ";var f=t,p=p||[];p.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(f||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: { limit: '+u+" } ",!1!==e.opts.messages&&(n+=" , message: 'should NOT be ",n+="maxLength"==t?"longer":"shorter",n+=" than ",n+=h?"' + "+u+" + '":""+o,n+=" characters' "),e.opts.verbose&&(n+=" , schema: ",n+=h?"validate.schema"+s:""+o,n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";var m=n;return n=p.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",l&&(n+=" else { "),n}},function(e,t){"use strict";e.exports=function(e,t){var n=" ",i=e.level,r=e.dataLevel,o=e.schema[t],s=e.schemaPath+"."+t,a=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,c="data"+(r||""),h=e.opts.v5&&o.$data,u=h?e.util.getData(o.$data,r,e.dataPathArr):o;h&&(n+=" var schema"+i+" = "+u+"; ",u="schema"+i);var d="maxProperties"==t?">":"<";n+="if ( ",h&&(n+=" ("+u+" !== undefined && typeof "+u+" != 'number') || "),n+=" Object.keys("+c+").length "+d+" "+u+") { ";var f=t,p=p||[];p.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(f||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: { limit: '+u+" } ",!1!==e.opts.messages&&(n+=" , message: 'should NOT have ",n+="maxProperties"==t?"more":"less",n+=" than ",n+=h?"' + "+u+" + '":""+o,n+=" properties' "),e.opts.verbose&&(n+=" , schema: ",n+=h?"validate.schema"+s:""+o,n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";var m=n;return n=p.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+m+"]); ":n+=" validate.errors = ["+m+"]; return false; ":n+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="} ",l&&(n+=" else { "),n}},function(e,t){"use strict";e.exports=function(e,t){var n,i=" ",r=e.level,o=e.dataLevel,s=e.schema[t],a=e.schemaPath+"."+t,l=e.errSchemaPath+"/"+t,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&s.$data,d=u?e.util.getData(s.$data,o,e.dataPathArr):s;u&&(i+=" var schema"+r+" = "+d+"; ",d="schema"+r),i+="var division"+r+";if (",u&&(i+=" "+d+" !== undefined && ( typeof "+d+" != 'number' || "),i+=" (division"+r+" = "+h+" / "+d+", ",e.opts.multipleOfPrecision?i+=" Math.abs(Math.round(division"+r+") - division"+r+") > 1e-"+e.opts.multipleOfPrecision+" ":i+=" division"+r+" !== parseInt(division"+r+") ",i+=" ) ",u&&(i+=" ) "),i+=" ) { ";var f=f||[];f.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"multipleOf")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { multipleOf: '+d+" } ",!1!==e.opts.messages&&(i+=" , message: 'should be multiple of ",i+=u?"' + "+d:s+"'"),e.opts.verbose&&(i+=" , schema: ",i+=u?"validate.schema"+a:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";var p=i;return i=f.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+p+"]); ":i+=" validate.errors = ["+p+"]; return false; ":i+=" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",c&&(i+=" else { "),i}},function(e,t){"use strict";e.exports=function(e,t){var n,i=" ",r=e.level,o=e.dataLevel,s=e.schema[t],a=e.schemaPath+"."+t,l=e.errSchemaPath+"/"+t,c=!e.opts.allErrors,h="data"+(o||""),u="errs__"+r,d=e.util.copy(e);if(d.level++,e.util.schemaHasRules(s,e.RULES.all)){d.schema=s,d.schemaPath=a,d.errSchemaPath=l,i+=" var "+u+" = errors; ";var f,p=e.compositeRule;e.compositeRule=d.compositeRule=!0,d.createErrors=!1,d.opts.allErrors&&(f=d.opts.allErrors,d.opts.allErrors=!1),i+=" "+e.validate(d)+" ",d.createErrors=!0,f&&(d.opts.allErrors=f),e.compositeRule=d.compositeRule=p,i+=" if (valid"+d.level+") { ";var m=m||[];m.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"not")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',!1!==e.opts.messages&&(i+=" , message: 'should NOT be valid' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";var g=i;i=m.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+g+"]); ":i+=" validate.errors = ["+g+"]; return false; ":i+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",e.opts.allErrors&&(i+=" } ")}else i+=" var err = ",!1!==e.createErrors?(i+=" { keyword: '"+(n||"not")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',!1!==e.opts.messages&&(i+=" , message: 'should NOT be valid' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(i+=" if (false) { ");return i}},function(e,t){"use strict";e.exports=function(e,t){var n,i=" ",r=e.level,o=e.dataLevel,s=e.schema[t],a=e.schemaPath+"."+t,l=e.errSchemaPath+"/"+t,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+r,d="errs__"+r,f=e.util.copy(e),p="";f.level++,i+="var "+d+" = errors;var prevValid"+r+" = false;var "+u+" = false; ";var m=e.compositeRule;e.compositeRule=f.compositeRule=!0;var g=s;if(g){var v,y=-1,w=g.length-1;while(y5)i+=" || validate.schema"+a+"[key"+r+"] ";else{var D=v;if(D){var B=-1,L=D.length-1;while(B= "+ue+"; ",l=e.errSchemaPath+"/patternGroups/minimum",i+=" if (!"+u+") { ";H=H||[];H.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"patternGroups")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { reason: '"+pe+"', limit: "+fe+", pattern: '"+e.util.escapeQuotes(ae)+"' } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have "+me+" than "+fe+' properties matching pattern "'+e.util.escapeQuotes(ae)+"\"' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";W=i;i=H.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+W+"]); ":i+=" validate.errors = ["+W+"]; return false; ":i+=" var err = "+W+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",void 0!==de&&(i+=" else ")}if(void 0!==de){fe=de,pe="maximum",me="more";i+=" "+u+" = pgPropCount"+r+" <= "+de+"; ",l=e.errSchemaPath+"/patternGroups/maximum",i+=" if (!"+u+") { ";H=H||[];H.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"patternGroups")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { reason: '"+pe+"', limit: "+fe+", pattern: '"+e.util.escapeQuotes(ae)+"' } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have "+me+" than "+fe+' properties matching pattern "'+e.util.escapeQuotes(ae)+"\"' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";W=i;i=H.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+W+"]); ":i+=" validate.errors = ["+W+"]; return false; ":i+=" var err = "+W+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } "}l=N,c&&(i+=" if ("+u+") { ",p+="}")}}}}}return c&&(i+=" "+p+" if ("+d+" == errors) {"),i=e.util.cleanUpCode(i),i}},function(e,t){"use strict";e.exports=function(e,t){var n,i=" ",r=e.level,o=e.dataLevel,s=e.schema[t],a=e.schemaPath+"."+t,l=e.errSchemaPath+"/"+t,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+r,d=e.opts.v5&&s.$data,f=d?e.util.getData(s.$data,o,e.dataPathArr):s;if(d&&(i+=" var schema"+r+" = "+f+"; ",f="schema"+r),!d)if(s.length=e.opts.loopRequired;if(c)if(i+=" var missing"+r+"; ",b){d||(i+=" var schema"+r+" = validate.schema"+a+"; ");var A="i"+r,C="schema"+r+"["+A+"]",E="' + "+C+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(w,C,e.opts.jsonPointers)),i+=" var "+u+" = true; ",d&&(i+=" if (schema"+r+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+r+")) "+u+" = false; else {"),i+=" for (var "+A+" = 0; "+A+" < schema"+r+".length; "+A+"++) { "+u+" = "+h+"[schema"+r+"["+A+"]] !== undefined; if (!"+u+") break; } ",d&&(i+=" } "),i+=" if (!"+u+") { ";var F=F||[];F.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+E+"' } ",!1!==e.opts.messages&&(i+=" , message: '",e.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+E+"\\'",i+="' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";var x=i;i=F.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+x+"]); ":i+=" validate.errors = ["+x+"]; return false; ":i+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { "}else{i+=" if ( ";var _=p;if(_){A=-1;var S,$=_.length-1;while(A<$){S=_[A+=1],A&&(i+=" || ");var k=e.util.getProperty(S);i+=" ( "+h+k+" === undefined && (missing"+r+" = "+e.util.toQuotedString(e.opts.jsonPointers?S:k)+") ) "}}i+=") { ";C="missing"+r,E="' + "+C+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(w,C,!0):w+" + "+C);F=F||[];F.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+E+"' } ",!1!==e.opts.messages&&(i+=" , message: '",e.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+E+"\\'",i+="' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";x=i;i=F.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+x+"]); ":i+=" validate.errors = ["+x+"]; return false; ":i+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else { "}else if(b){d||(i+=" var schema"+r+" = validate.schema"+a+"; ");A="i"+r,C="schema"+r+"["+A+"]",E="' + "+C+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(w,C,e.opts.jsonPointers)),d&&(i+=" if (schema"+r+" && !Array.isArray(schema"+r+")) { var err = ",!1!==e.createErrors?(i+=" { keyword: '"+(n||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+E+"' } ",!1!==e.opts.messages&&(i+=" , message: '",e.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+E+"\\'",i+="' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema"+r+" !== undefined) { "),i+=" for (var "+A+" = 0; "+A+" < schema"+r+".length; "+A+"++) { if ("+h+"[schema"+r+"["+A+"]] === undefined) { var err = ",!1!==e.createErrors?(i+=" { keyword: '"+(n||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+E+"' } ",!1!==e.opts.messages&&(i+=" , message: '",e.opts._errorDataPathProperty?i+="is a required property":i+="should have required property \\'"+E+"\\'",i+="' "),e.opts.verbose&&(i+=" , schema: validate.schema"+a+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ",i+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ",d&&(i+=" } ")}else{var D=p;if(D){A=-1;var B,L=D.length-1;while(A 1) { var i = "+h+".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal("+h+"[i], "+h+"[j])) { "+u+" = false; break outer; } } } } ",d&&(i+=" } "),i+=" if (!"+u+") { ";var p=p||[];p.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(n||"uniqueItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { i: i, j: j } ',!1!==e.opts.messages&&(i+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(i+=" , schema: ",i+=d?"validate.schema"+a:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),i+=" } "):i+=" {} ";var m=i;i=p.pop(),!e.compositeRule&&c?e.async?i+=" throw new ValidationError(["+m+"]); ":i+=" validate.errors = ["+m+"]; return false; ":i+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",c&&(i+=" else { ")}else c&&(i+=" if (true) { ");return i}},function(e,t,n){"use strict";var i="https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json";function r(e){var t={switch:n(44),constant:n(45),_formatLimit:n(46),patternRequired:n(47)};if(!1!==e._opts.meta){var r=n(48);e.addMetaSchema(r,i)}function s(n,i,r){var o={inline:r||t[n],statements:!0,errors:"full"};i&&(o.type=i),e.addKeyword(n,o)}s("constant"),e.addKeyword("contains",{type:"array",macro:o}),s("formatMaximum","string",t._formatLimit),s("formatMinimum","string",t._formatLimit),e.addKeyword("exclusiveFormatMaximum"),e.addKeyword("exclusiveFormatMinimum"),e.addKeyword("patternGroups"),s("patternRequired","object"),s("switch")}function o(e){return{not:{items:{not:e}}}}e.exports={enable:r,META_SCHEMA_ID:i}},function(e,t){"use strict";e.exports=function(e,t){var n,i=" ",r=e.level,o=e.dataLevel,s=e.schema[t],a=e.schemaPath+"."+t,l=e.errSchemaPath+"/"+t,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+r,d="errs__"+r,f=e.util.copy(e),p="";f.level++;var m,g="ifPassed"+e.level;i+="var "+g+";";var v=s;if(v){var y,w=-1,b=v.length-1;while(w",C="result"+i,E=e.opts.v5&&o.$data,F=E?e.util.getData(o.$data,r,e.dataPathArr):o;if(E&&(n+=" var schema"+i+" = "+F+"; ",F="schema"+i),b){var x=e.util.getData(w.$data,r,e.dataPathArr),_="exclusive"+i,S="op"+i,$="' + "+S+" + '";n+=" var schemaExcl"+i+" = "+x+"; ",x="schemaExcl"+i,n+=" if (typeof "+x+" != 'boolean' && "+x+" !== undefined) { "+h+" = false; ";var k=y,D=D||[];D.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(k||"_exclusiveFormatLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: {} ',!1!==e.opts.messages&&(n+=" , message: '"+y+" should be boolean' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";var B=n;n=D.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+B+"]); ":n+=" validate.errors = ["+B+"]; return false; ":n+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",l&&(f+="}",n+=" else { "),E&&(n+=" if ("+F+" === undefined) "+h+" = true; else if (typeof "+F+" != 'string') "+h+" = false; else { ",f+="}"),d&&(n+=" if (!"+g+") "+h+" = true; else { ",f+="}"),n+=" var "+C+" = "+g+"("+c+", ",n+=E?""+F:""+e.util.toQuotedString(o),n+=" ); if ("+C+" === undefined) "+h+" = false; var exclusive"+i+" = "+x+" === true; if ("+h+" === undefined) { "+h+" = exclusive"+i+" ? "+C+" "+A+" 0 : "+C+" "+A+"= 0; } if (!"+h+") var op"+i+" = exclusive"+i+" ? '"+A+"' : '"+A+"=';"}else{_=!0===w,$=A;_||($+="=");S="'"+$+"'";E&&(n+=" if ("+F+" === undefined) "+h+" = true; else if (typeof "+F+" != 'string') "+h+" = false; else { ",f+="}"),d&&(n+=" if (!"+g+") "+h+" = true; else { ",f+="}"),n+=" var "+C+" = "+g+"("+c+", ",n+=E?""+F:""+e.util.toQuotedString(o),n+=" ); if ("+C+" === undefined) "+h+" = false; if ("+h+" === undefined) "+h+" = "+C+" "+A,_||(n+="="),n+=" 0;"}n+=f+"if (!"+h+") { ";k=t,D=D||[];D.push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(k||"_formatLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+a+'" , params: { limit: ',n+=E?""+F:""+e.util.toQuotedString(o),n+=" } ",!1!==e.opts.messages&&(n+=" , message: 'should be "+$+' "',n+=E?"' + "+F+" + '":""+e.util.escapeQuotes(o),n+="\"' "),e.opts.verbose&&(n+=" , schema: ",n+=E?"validate.schema"+s:""+e.util.toQuotedString(o),n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),n+=" } "):n+=" {} ";B=n;return n=D.pop(),!e.compositeRule&&l?e.async?n+=" throw new ValidationError(["+B+"]); ":n+=" validate.errors = ["+B+"]; return false; ":n+=" var err = "+B+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+="}",n}},function(e,t){"use strict";e.exports=function(e,t){var n,i=" ",r=e.level,o=e.dataLevel,s=e.schema[t],a=e.schemaPath+"."+t,l=e.errSchemaPath+"/"+t,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+r,d="key"+r,f="patternMatched"+r,p="";i+="var "+u+" = true;";var m=s;if(m){var g,v=-1,y=m.length-1;while(v0?this.autoScrollStep=(i+s-e)/3:e>o-s&&r+n.scrollTop3?(n.scrollTop+=r/3,i.animateCallback=t,i.animateTimeout=setTimeout(a,50)):(t&&t(!0),n.scrollTop=s,delete i.animateTimeout,delete i.animateCallback)};a()}else t&&t(!1)},_createFrame:function(){this.frame=document.createElement("div"),this.frame.className="jsoneditor jsoneditor-mode-"+this.options.mode,this.container.appendChild(this.frame);var e=this;function t(t){e._onEvent&&e._onEvent(t)}this.frame.onclick=function(e){var n=e.target;t(e),"BUTTON"==n.nodeName&&e.preventDefault()},this.frame.oninput=t,this.frame.onchange=t,this.frame.onkeydown=t,this.frame.onkeyup=t,this.frame.oncut=t,this.frame.onpaste=t,this.frame.onmousedown=t,this.frame.onmouseup=t,this.frame.onmouseover=t,this.frame.onmouseout=t,c.addEventListener(this.frame,"focus",t,!0),c.addEventListener(this.frame,"blur",t,!0),this.frame.onfocusin=t,this.frame.onfocusout=t,this.menu=document.createElement("div"),this.menu.className="jsoneditor-menu",this.frame.appendChild(this.menu);var n=document.createElement("button");n.type="button",n.className="jsoneditor-expand-all",n.title="Expand all fields",n.onclick=function(){e.expandAll()},this.menu.appendChild(n);var i=document.createElement("button");if(i.type="button",i.title="Collapse all fields",i.className="jsoneditor-collapse-all",i.onclick=function(){e.collapseAll()},this.menu.appendChild(i),this.history){var r=document.createElement("button");r.type="button",r.className="jsoneditor-undo jsoneditor-separator",r.title="Undo last action (Ctrl+Z)",r.onclick=function(){e._onUndo()},this.menu.appendChild(r),this.dom.undo=r;var s=document.createElement("button");s.type="button",s.className="jsoneditor-redo",s.title="Redo (Ctrl+Shift+Z)",s.onclick=function(){e._onRedo()},this.menu.appendChild(s),this.dom.redo=s,this.history.onChange=function(){r.disabled=!e.history.canUndo(),s.disabled=!e.history.canRedo()},this.history.onChange()}if(this.options&&this.options.modes&&this.options.modes.length){var a=this;this.modeSwitcher=new l(this.menu,this.options.modes,this.options.mode,(function(e){a.modeSwitcher.destroy(),a.setMode(e),a.modeSwitcher.focus()}))}this.options.search&&(this.searchBox=new o(this,this.menu))},_onUndo:function(){this.history&&(this.history.undo(),this._onChange())},_onRedo:function(){this.history&&(this.history.redo(),this._onChange())},_onEvent:function(e){"keydown"==e.type&&this._onKeyDown(e),"focus"==e.type&&(this.focusTarget=e.target),"mousedown"==e.type&&this._startDragDistance(e),"mousemove"!=e.type&&"mouseup"!=e.type&&"click"!=e.type||this._updateDragDistance(e);var t=a.getNodeFromTarget(e.target);if(t&&t.selected){if("click"==e.type){if(e.target==t.dom.menu)return void this.showContextMenu(e.target);e.hasMoved||this.deselect()}"mousedown"==e.type&&a.onDragStart(this.multiselection.nodes,e)}else"mousedown"==e.type&&(this.deselect(),t&&e.target==t.dom.drag?a.onDragStart(t,e):(!t||e.target!=t.dom.field&&e.target!=t.dom.value&&e.target!=t.dom.select)&&this._onMultiSelectStart(e));t&&t.onEvent(e)},_startDragDistance:function(e){this.dragDistanceEvent={initialTarget:e.target,initialPageX:e.pageX,initialPageY:e.pageY,dragDistance:0,hasMoved:!1}},_updateDragDistance:function(e){this.dragDistanceEvent||this._startDragDistance(e);var t=e.pageX-this.dragDistanceEvent.initialPageX,n=e.pageY-this.dragDistanceEvent.initialPageY;return this.dragDistanceEvent.dragDistance=Math.sqrt(t*t+n*n),this.dragDistanceEvent.hasMoved=this.dragDistanceEvent.hasMoved||this.dragDistanceEvent.dragDistance>10,e.dragDistance=this.dragDistanceEvent.dragDistance,e.hasMoved=this.dragDistanceEvent.hasMoved,e.dragDistance},_onMultiSelectStart:function(e){var t=a.getNodeFromTarget(e.target);if("tree"===this.options.mode&&void 0===this.options.onEditable){this.multiselection={start:t||null,end:null,nodes:[]},this._startDragDistance(e);var n=this;this.mousemove||(this.mousemove=c.addEventListener(window,"mousemove",(function(e){n._onMultiSelect(e)}))),this.mouseup||(this.mouseup=c.addEventListener(window,"mouseup",(function(e){n._onMultiSelectEnd(e)})))}},_onMultiSelect:function(e){if(e.preventDefault(),this._updateDragDistance(e),e.hasMoved){var t=a.getNodeFromTarget(e.target);t&&(null==this.multiselection.start&&(this.multiselection.start=t),this.multiselection.end=t),this.deselect();var n=this.multiselection.start,i=this.multiselection.end||this.multiselection.start;n&&i&&(this.multiselection.nodes=this._findTopLevelNodes(n,i),this.select(this.multiselection.nodes))}},_onMultiSelectEnd:function(e){this.multiselection.nodes[0]&&this.multiselection.nodes[0].dom.menu.focus(),this.multiselection.start=null,this.multiselection.end=null,this.mousemove&&(c.removeEventListener(window,"mousemove",this.mousemove),delete this.mousemove),this.mouseup&&(c.removeEventListener(window,"mouseup",this.mouseup),delete this.mouseup)},deselect:function(e){this.multiselection.nodes.forEach((function(e){e.setSelected(!1)})),this.multiselection.nodes=[],e&&(this.multiselection.start=null,this.multiselection.end=null)},select:function(e){if(!Array.isArray(e))return this.select([e]);if(e){this.deselect(),this.multiselection.nodes=e.slice(0);var t=e[0];e.forEach((function(e){e.setSelected(!0,e===t)}))}},_findTopLevelNodes:function(e,t){var n=e.getNodePath(),i=t.getNodePath(),r=0;while(r=0},i.prototype.canRedo=function(){return this.index=0){var n=t[e];if(" "!==n&&"\n"!==n&&"\r"!==n&&"\t"!==n)return n;e--}return""}function l(){n+=2;while(n=0;a--){var l=s[a];!0===l.specified&&o.removeAttribute(l.name)}t.stripFormatting(o)}},t.setEndOfContentEditable=function(e){var t,n;document.createRange&&(t=document.createRange(),t.selectNodeContents(e),t.collapse(!1),n=window.getSelection(),n.removeAllRanges(),n.addRange(t))},t.selectContentEditable=function(e){var t,n;e&&"DIV"==e.nodeName&&(window.getSelection&&document.createRange&&(n=document.createRange(),n.selectNodeContents(e),t=window.getSelection(),t.removeAllRanges(),t.addRange(n)))},t.getSelection=function(){if(window.getSelection){var e=window.getSelection();if(e.getRangeAt&&e.rangeCount)return e.getRangeAt(0)}return null},t.setSelection=function(e){if(e&&window.getSelection){var t=window.getSelection();t.removeAllRanges(),t.addRange(e)}},t.getSelectionOffset=function(){var e=t.getSelection();return e&&"startOffset"in e&&"endOffset"in e&&e.startContainer&&e.startContainer==e.endContainer?{startOffset:e.startOffset,endOffset:e.endOffset,container:e.startContainer.parentNode}:null},t.setSelectionOffset=function(e){if(document.createRange&&window.getSelection){var n=window.getSelection();if(n){var i=document.createRange();e.container.firstChild||e.container.appendChild(document.createTextNode("")),i.setStart(e.container.firstChild,e.startOffset),i.setEnd(e.container.firstChild,e.endOffset),t.setSelection(i)}}},t.getInnerText=function(e,n){var i=void 0==n;if(i&&(n={text:"",flush:function(){var e=this.text;return this.text="",e},set:function(e){this.text=e}}),e.nodeValue)return n.flush()+e.nodeValue;if(e.hasChildNodes()){for(var r=e.childNodes,o="",s=0,a=r.length;s5){var n=["("+(t.length-5)+" more...)"];t=t.slice(0,5),t.push(n)}e.message="should be equal to one of: "+t.join(", ")}}return"additionalProperties"===e.keyword&&(e.message="should NOT have additional property: "+e.params.additionalProperty),e},t.insideRect=function(e,t,n){var i=void 0!==n?n:0;return t.left-i>=e.left&&t.right+i<=e.right&&t.top-i>=e.top&&t.bottom+i<=e.bottom},t.debounce=function(e,t,n){var i;return function(){var r=this,o=arguments,s=function(){i=null,n||e.apply(r,o)},a=n&&!i;clearTimeout(i),i=setTimeout(s,t),a&&e.apply(r,o)}},t.textDiff=function(e,t){var n=t.length,i=0,r=e.length,o=t.length;while(t.charAt(i)===e.charAt(i)&&ii&&r>0)o--,r--;return{start:i,end:o}}},function(e,t,n){var i=function(){var e={trace:function(){},yy:{},symbols_:{error:2,JSONString:3,STRING:4,JSONNumber:5,NUMBER:6,JSONNullLiteral:7,NULL:8,JSONBooleanLiteral:9,TRUE:10,FALSE:11,JSONText:12,JSONValue:13,EOF:14,JSONObject:15,JSONArray:16,"{":17,"}":18,JSONMemberList:19,JSONMember:20,":":21,",":22,"[":23,"]":24,JSONElementList:25,$accept:0,$end:1},terminals_:{2:"error",4:"STRING",6:"NUMBER",8:"NULL",10:"TRUE",11:"FALSE",14:"EOF",17:"{",18:"}",21:":",22:",",23:"[",24:"]"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function(e,t,n,i,r,o,s){var a=o.length-1;switch(r){case 1:this.$=e.replace(/\\(\\|")/g,"$1").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"\t").replace(/\\v/g,"\v").replace(/\\f/g,"\f").replace(/\\b/g,"\b");break;case 2:this.$=Number(e);break;case 3:this.$=null;break;case 4:this.$=!0;break;case 5:this.$=!1;break;case 6:return this.$=o[a-1];case 13:this.$={};break;case 14:this.$=o[a-1];break;case 15:this.$=[o[a-2],o[a]];break;case 16:this.$={},this.$[o[a][0]]=o[a][1];break;case 17:this.$=o[a-2],o[a-2][o[a][0]]=o[a][1];break;case 18:this.$=[];break;case 19:this.$=o[a-1];break;case 20:this.$=[o[a]];break;case 21:this.$=o[a-2],o[a-2].push(o[a]);break}},table:[{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],defaultActions:{16:[2,6]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],i=[null],r=[],o=this.table,s="",a=0,l=0,c=0,h=2,u=1;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var d=this.lexer.yylloc;function f(e){n.length=n.length-2*e,i.length=i.length-e,r.length=r.length-e}function p(){var e;return e=t.lexer.lex()||1,"number"!==typeof e&&(e=t.symbols_[e]||e),e}r.push(d),"function"===typeof this.yy.parseError&&(this.parseError=this.yy.parseError);var m,g,v,y,w,b,A,C,E,F={};while(1){if(v=n[n.length-1],this.defaultActions[v]?y=this.defaultActions[v]:(null==m&&(m=p()),y=o[v]&&o[v][m]),"undefined"===typeof y||!y.length||!y[0]){if(!c){for(b in E=[],o[v])this.terminals_[b]&&b>2&&E.push("'"+this.terminals_[b]+"'");var x="";x=this.lexer.showPosition?"Parse error on line "+(a+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+E.join(", ")+", got '"+this.terminals_[m]+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[m]||m,line:this.lexer.yylineno,loc:d,expected:E})}if(3==c){if(m==u)throw new Error(x||"Parsing halted.");l=this.lexer.yyleng,s=this.lexer.yytext,a=this.lexer.yylineno,d=this.lexer.yylloc,m=p()}while(1){if(h.toString()in o[v])break;if(0==v)throw new Error(x||"Parsing halted.");f(1),v=n[n.length-1]}g=m,m=h,v=n[n.length-1],y=o[v]&&o[v][h],c=3}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+v+", token: "+m);switch(y[0]){case 1:n.push(m),i.push(this.lexer.yytext),r.push(this.lexer.yylloc),n.push(y[1]),m=null,g?(m=g,g=null):(l=this.lexer.yyleng,s=this.lexer.yytext,a=this.lexer.yylineno,d=this.lexer.yylloc,c>0&&c--);break;case 2:if(A=this.productions_[y[1]][1],F.$=i[i.length-A],F._$={first_line:r[r.length-(A||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(A||1)].first_column,last_column:r[r.length-1].last_column},w=this.performAction.call(F,s,l,a,this.yy,y[1],i,r),"undefined"!==typeof w)return w;A&&(n=n.slice(0,-1*A*2),i=i.slice(0,-1*A),r=r.slice(0,-1*A)),n.push(this.productions_[y[1]][0]),i.push(F.$),r.push(F._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},t=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e;var t=e.match(/\n/);return t&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},less:function(e){this._input=this.match.slice(e)+this._input},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t,n,i,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),s=0;st[0].length)&&(t=n,i=s,!this.options.flex))break;return t?(r=t[0].match(/\n.*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-1:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,o[i],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e||void 0):""===this._input?this.EOF:void this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return"undefined"!==typeof e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},options:{},performAction:function(e,t,n,i){switch(n){case 0:break;case 1:return 6;case 2:return t.yytext=t.yytext.substr(1,t.yyleng-2),4;case 3:return 17;case 4:return 18;case 5:return 23;case 6:return 24;case 7:return 22;case 8:return 21;case 9:return 10;case 10:return 11;case 11:return 8;case 12:return 14;case 13:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};return e}();return e.lexer=t,e}();t.parser=i,t.parse=i.parse.bind(i)},function(e,t){"use strict";function n(e,t){var n=this;this.editor=e,this.timeout=void 0,this.delay=200,this.lastText=void 0,this.dom={},this.dom.container=t;var i=document.createElement("table");this.dom.table=i,i.className="jsoneditor-search",t.appendChild(i);var r=document.createElement("tbody");this.dom.tbody=r,i.appendChild(r);var o=document.createElement("tr");r.appendChild(o);var s=document.createElement("td");o.appendChild(s);var a=document.createElement("div");this.dom.results=a,a.className="jsoneditor-results",s.appendChild(a),s=document.createElement("td"),o.appendChild(s);var l=document.createElement("div");this.dom.input=l,l.className="jsoneditor-frame",l.title="Search fields and values",s.appendChild(l);var c=document.createElement("table");l.appendChild(c);var h=document.createElement("tbody");c.appendChild(h),o=document.createElement("tr"),h.appendChild(o);var u=document.createElement("button");u.type="button",u.className="jsoneditor-refresh",s=document.createElement("td"),s.appendChild(u),o.appendChild(s);var d=document.createElement("input");this.dom.search=d,d.oninput=function(e){n._onDelayedSearch(e)},d.onchange=function(e){n._onSearch()},d.onkeydown=function(e){n._onKeyDown(e)},d.onkeyup=function(e){n._onKeyUp(e)},u.onclick=function(e){d.select()},s=document.createElement("td"),s.appendChild(d),o.appendChild(s);var f=document.createElement("button");f.type="button",f.title="Next result (Enter)",f.className="jsoneditor-next",f.onclick=function(){n.next()},s=document.createElement("td"),s.appendChild(f),o.appendChild(s);var p=document.createElement("button");p.type="button",p.title="Previous result (Shift+Enter)",p.className="jsoneditor-previous",p.onclick=function(){n.previous()},s=document.createElement("td"),s.appendChild(p),o.appendChild(s)}n.prototype.next=function(e){if(void 0!=this.results){var t=void 0!=this.resultIndex?this.resultIndex+1:0;t>this.results.length-1&&(t=0),this._setActiveResult(t,e)}},n.prototype.previous=function(e){if(void 0!=this.results){var t=this.results.length-1,n=void 0!=this.resultIndex?this.resultIndex-1:t;n<0&&(n=t),this._setActiveResult(n,e)}},n.prototype._setActiveResult=function(e,t){if(this.activeResult){var n=this.activeResult.node,i=this.activeResult.elem;"field"==i?delete n.searchFieldActive:delete n.searchValueActive,n.updateDom()}if(!this.results||!this.results[e])return this.resultIndex=void 0,void(this.activeResult=void 0);this.resultIndex=e;var r=this.results[this.resultIndex].node,o=this.results[this.resultIndex].elem;"field"==o?r.searchFieldActive=!0:r.searchValueActive=!0,this.activeResult=this.results[this.resultIndex],r.updateDom(),r.scrollTo((function(){t&&r.focus(o)}))},n.prototype._clearDelay=function(){void 0!=this.timeout&&(clearTimeout(this.timeout),delete this.timeout)},n.prototype._onDelayedSearch=function(e){this._clearDelay();var t=this;this.timeout=setTimeout((function(e){t._onSearch()}),this.delay)},n.prototype._onSearch=function(e){this._clearDelay();var t=this.dom.search.value,n=t.length>0?t:void 0;if(n!=this.lastText||e)if(this.lastText=n,this.results=this.editor.search(n),this._setActiveResult(void 0),void 0!=n){var i=this.results.length;switch(i){case 0:this.dom.results.innerHTML="no results";break;case 1:this.dom.results.innerHTML="1 result";break;default:this.dom.results.innerHTML=i+" results";break}}else this.dom.results.innerHTML=""},n.prototype._onKeyDown=function(e){var t=e.which;27==t?(this.dom.search.value="",this._onSearch(),e.preventDefault(),e.stopPropagation()):13==t&&(e.ctrlKey?this._onSearch(!0):e.shiftKey?this.previous():this.next(),e.preventDefault(),e.stopPropagation())},n.prototype._onKeyUp=function(e){var t=e.keyCode;27!=t&&13!=t&&this._onDelayedSearch(e)},n.prototype.clear=function(){this.dom.search.value="",this._onSearch()},n.prototype.destroy=function(){this.editor=null,this.dom.container.removeChild(this.dom.table),this.dom=null,this.results=null,this.activeResult=null,this._clearDelay()},e.exports=n},function(e,t,n){"use strict";var i=n(54);function r(e,t){this.dom={};var n=this,i=this.dom;this.anchor=void 0,this.items=e,this.eventListeners={},this.selection=void 0,this.onClose=t?t.close:void 0;var r=document.createElement("div");r.className="jsoneditor-contextmenu-root",i.root=r;var o=document.createElement("div");o.className="jsoneditor-contextmenu",i.menu=o,r.appendChild(o);var s=document.createElement("ul");s.className="jsoneditor-menu",o.appendChild(s),i.list=s,i.items=[];var a=document.createElement("button");a.type="button",i.focusButton=a;var l=document.createElement("li");function c(e,t,i){i.forEach((function(i){if("separator"==i.type){var r=document.createElement("div");r.className="jsoneditor-separator",s=document.createElement("li"),s.appendChild(r),e.appendChild(s)}else{var o={},s=document.createElement("li");e.appendChild(s);var a=document.createElement("button");if(a.type="button",a.className=i.className,o.button=a,i.title&&(a.title=i.title),i.click&&(a.onclick=function(e){e.preventDefault(),n.hide(),i.click()}),s.appendChild(a),i.submenu){var l,h=document.createElement("div");if(h.className="jsoneditor-icon",a.appendChild(h),a.appendChild(document.createTextNode(i.text)),i.click){a.className+=" jsoneditor-default";var u=document.createElement("button");u.type="button",o.buttonExpand=u,u.className="jsoneditor-expand",u.innerHTML='
',s.appendChild(u),i.submenuTitle&&(u.title=i.submenuTitle),l=u}else{var d=document.createElement("div");d.className="jsoneditor-expand",a.appendChild(d),l=a}l.onclick=function(e){e.preventDefault(),n._onExpandItem(o),l.focus()};var f=[];o.subItems=f;var p=document.createElement("ul");o.ul=p,p.className="jsoneditor-menu",p.style.height="0",s.appendChild(p),c(p,f,i.submenu)}else a.innerHTML='
'+i.text;t.push(o)}}))}l.style.overflow="hidden",l.style.height="0",l.appendChild(a),s.appendChild(l),c(s,this.dom.items,e),this.maxHeight=0,e.forEach((function(t){var i=24*(e.length+(t.submenu?t.submenu.length:0));n.maxHeight=Math.max(n.maxHeight,i)}))}r.prototype._getVisibleButtons=function(){var e=[],t=this;return this.dom.items.forEach((function(n){e.push(n.button),n.buttonExpand&&e.push(n.buttonExpand),n.subItems&&n==t.expandedItem&&n.subItems.forEach((function(t){e.push(t.button),t.buttonExpand&&e.push(t.buttonExpand)}))})),e},r.visibleMenu=void 0,r.prototype.show=function(e,t){this.hide();var n=!0;if(t){var o=e.getBoundingClientRect(),s=t.getBoundingClientRect();o.bottom+this.maxHeights.top&&(n=!1)}if(n){var a=e.offsetHeight;this.dom.menu.style.left="0px",this.dom.menu.style.top=a+"px",this.dom.menu.style.bottom=""}else this.dom.menu.style.left="0px",this.dom.menu.style.top="",this.dom.menu.style.bottom="0px";var l=e.parentNode;l.insertBefore(this.dom.root,l.firstChild);var c=this,h=this.dom.list;this.eventListeners.mousedown=i.addEventListener(window,"mousedown",(function(e){var t=e.target;t==h||c._isChildOf(t,h)||(c.hide(),e.stopPropagation(),e.preventDefault())})),this.eventListeners.keydown=i.addEventListener(window,"keydown",(function(e){c._onKeyDown(e)})),this.selection=i.getSelection(),this.anchor=e,setTimeout((function(){c.dom.focusButton.focus()}),0),r.visibleMenu&&r.visibleMenu.hide(),r.visibleMenu=this},r.prototype.hide=function(){for(var e in this.dom.root.parentNode&&(this.dom.root.parentNode.removeChild(this.dom.root),this.onClose&&this.onClose()),this.eventListeners)if(this.eventListeners.hasOwnProperty(e)){var t=this.eventListeners[e];t&&i.removeEventListener(window,e,t),delete this.eventListeners[e]}r.visibleMenu==this&&(r.visibleMenu=void 0)},r.prototype._onExpandItem=function(e){var t=this,n=e==this.expandedItem,r=this.expandedItem;if(r&&(r.ul.style.height="0",r.ul.style.padding="",setTimeout((function(){t.expandedItem!=r&&(r.ul.style.display="",i.removeClassName(r.ul.parentNode,"jsoneditor-selected"))}),300),this.expandedItem=void 0),!n){var o=e.ul;o.style.display="block";o.clientHeight;setTimeout((function(){t.expandedItem==e&&(o.style.height=24*o.childNodes.length+"px",o.style.padding="5px 10px")}),0),i.addClassName(o.parentNode,"jsoneditor-selected"),this.expandedItem=e}},r.prototype._onKeyDown=function(e){var t,n,r,o,s=e.target,a=e.which,l=!1;27==a?(this.selection&&i.setSelection(this.selection),this.anchor&&this.anchor.focus(),this.hide(),l=!0):9==a?e.shiftKey?(t=this._getVisibleButtons(),n=t.indexOf(s),0==n&&(t[t.length-1].focus(),l=!0)):(t=this._getVisibleButtons(),n=t.indexOf(s),n==t.length-1&&(t[0].focus(),l=!0)):37==a?("jsoneditor-expand"==s.className&&(t=this._getVisibleButtons(),n=t.indexOf(s),r=t[n-1],r&&r.focus()),l=!0):38==a?(t=this._getVisibleButtons(),n=t.indexOf(s),r=t[n-1],r&&"jsoneditor-expand"==r.className&&(r=t[n-2]),r||(r=t[t.length-1]),r&&r.focus(),l=!0):39==a?(t=this._getVisibleButtons(),n=t.indexOf(s),o=t[n+1],o&&"jsoneditor-expand"==o.className&&o.focus(),l=!0):40==a&&(t=this._getVisibleButtons(),n=t.indexOf(s),o=t[n+1],o&&"jsoneditor-expand"==o.className&&(o=t[n+2]),o||(o=t[0]),o&&(o.focus(),l=!0),l=!0),l&&(e.stopPropagation(),e.preventDefault())},r.prototype._isChildOf=function(e,t){var n=e.parentNode;while(n){if(n==t)return!0;n=n.parentNode}return!1},e.exports=r},function(e,t,n){"use strict";var i=n(59),r=n(57),o=n(60),s=n(54);function a(e,t){this.editor=e,this.dom={},this.expanded=!1,t&&t instanceof Object?(this.setField(t.field,t.fieldEditable),this.setValue(t.value,t.type)):(this.setField(""),this.setValue(null)),this._debouncedOnChangeValue=s.debounce(this._onChangeValue.bind(this),a.prototype.DEBOUNCE_INTERVAL),this._debouncedOnChangeField=s.debounce(this._onChangeField.bind(this),a.prototype.DEBOUNCE_INTERVAL)}a.prototype.DEBOUNCE_INTERVAL=150,a.prototype._updateEditability=function(){if(this.editable={field:!0,value:!0},this.editor&&(this.editable.field="tree"===this.editor.options.mode,this.editable.value="view"!==this.editor.options.mode,("tree"===this.editor.options.mode||"form"===this.editor.options.mode)&&"function"===typeof this.editor.options.onEditable)){var e=this.editor.options.onEditable({field:this.field,value:this.value,path:this.getPath()});"boolean"===typeof e?(this.editable.field=e,this.editable.value=e):("boolean"===typeof e.field&&(this.editable.field=e.field),"boolean"===typeof e.value&&(this.editable.value=e.value))}},a.prototype.getPath=function(){var e=this,t=[];while(e){var n=e.parent?"array"!=e.parent.type?e.field:e.index:void 0;void 0!==n&&t.unshift(n),e=e.parent}return t},a.prototype.findNode=function(e){var t=s.parsePath(e),n=this;while(n&&t.length>0){var i=t.shift();if("number"===typeof i){if("array"!==n.type)throw new Error("Cannot get child node at index "+i+": node is no array");n=n.childs[i]}else{if("object"!==n.type)throw new Error("Cannot get child node "+i+": node is no object");n=n.childs.filter((function(e){return e.field===i}))[0]}}return n},a.prototype.findParents=function(){var e=[],t=this.parent;while(t)e.unshift(t),t=t.parent;return e},a.prototype.setError=function(e,t){this.getDom(),this.error=e;var n=this.dom.tdError;if(e){n||(n=document.createElement("td"),this.dom.tdError=n,this.dom.tdValue.parentNode.appendChild(n));var i=document.createElement("div");i.className="jsoneditor-popover jsoneditor-right",i.appendChild(document.createTextNode(e.message));var r=document.createElement("button");r.type="button",r.className="jsoneditor-schema-error",r.appendChild(i),r.onmouseover=r.onfocus=function(){for(var e=["right","above","below","left"],t=0;t0&&(e=this.childs.filter((function(e){return-1!==n.indexOf(e.field)})).map((function(e){return{node:e,error:{message:'duplicate key "'+e.field+'"'}}})))}if(this.childs)for(i=0;i0&&(e=e.concat(o))}return e},a.prototype.clearDom=function(){this.dom={}},a.prototype.getDom=function(){var e=this.dom;if(e.tr)return e.tr;if(this._updateEditability(),e.tr=document.createElement("tr"),e.tr.node=this,"tree"===this.editor.options.mode){var t=document.createElement("td");if(this.editable.field&&this.parent){var n=document.createElement("button");n.type="button",e.drag=n,n.className="jsoneditor-dragarea",n.title="Drag to move this field (Alt+Shift+Arrows)",t.appendChild(n)}e.tr.appendChild(t);var i=document.createElement("td"),r=document.createElement("button");r.type="button",e.menu=r,r.className="jsoneditor-contextmenu",r.title="Click to open the actions menu (Ctrl+M)",i.appendChild(e.menu),e.tr.appendChild(i)}var o=document.createElement("td");return e.tr.appendChild(o),e.tree=this._createDomTree(),o.appendChild(e.tree),this.updateDom({updateIndexes:!0}),e.tr},a.onDragStart=function(e,t){if(!Array.isArray(e))return a.onDragStart([e],t);if(0!==e.length){var n=e[0],i=e[e.length-1],r=a.getNodeFromTarget(t.target),o=i._nextSibling(),l=n.editor,c=s.getAbsoluteTop(r.dom.tr)-s.getAbsoluteTop(n.dom.tr);l.mousemove||(l.mousemove=s.addEventListener(window,"mousemove",(function(t){a.onDrag(e,t)}))),l.mouseup||(l.mouseup=s.addEventListener(window,"mouseup",(function(t){a.onDragEnd(e,t)}))),l.highlighter.lock(),l.drag={oldCursor:document.body.style.cursor,oldSelection:l.getSelection(),oldBeforeNode:o,mouseX:t.pageX,offsetY:c,level:n.getLevel()},document.body.style.cursor="move",t.preventDefault()}},a.onDrag=function(e,t){if(!Array.isArray(e))return a.onDrag([e],t);if(0!==e.length){var n,i,r,o,c,h,u,d,f,p,m,g,v,y,w=e[0].editor,b=t.pageY-w.drag.offsetY,A=t.pageX,C=!1,E=e[0];if(n=E.dom.tr,f=s.getAbsoluteTop(n),g=n.offsetHeight,bp+g&&(u=void 0)),u&&(e.forEach((function(e){u.parent.moveBefore(e,u)})),C=!0)}else{var F=e[e.length-1];if(c=F.expanded&&F.append?F.append.getDom():F.dom.tr,o=c?c.nextSibling:void 0,o){m=s.getAbsoluteTop(o),r=o;do{d=a.getNodeFromTarget(r),r&&(v=r.nextSibling?s.getAbsoluteTop(r.nextSibling):0,y=r?v-m:0,d.parent.childs.length==e.length&&d.parent.childs[e.length-1]==F&&(f+=27)),r=r.nextSibling}while(r&&b>f+y);if(d&&d.parent){var x=A-w.drag.mouseX,_=Math.round(x/24/2),S=w.drag.level+_,$=d.getLevel();i=d.dom.tr.previousSibling;while($0)return n[0].enum}return null},a._findSchema=function(e,t){for(var n=e,i=0;i0?this.editor.multiselection.nodes:[this],b=w[0],A=w[w.length-1];if(13==d){if(f==this.dom.value)this.editable.value&&!e.ctrlKey||s.isUrl(this.value)&&(window.open(this.value,"_blank"),v=!0);else if(f==this.dom.expand){var C=this._hasChilds();if(C){var E=e.ctrlKey;this._onExpand(E),f.focus(),v=!0}}}else if(68==d)p&&y&&(a.onDuplicate(w),v=!0);else if(69==d)p&&(this._onExpand(m),f.focus(),v=!0);else if(77==d&&y)p&&(this.showContextMenu(f),v=!0);else if(46==d&&y)p&&(a.onRemove(w),v=!0);else if(45==d&&y)p&&!m?(this._onInsertBefore(),v=!0):p&&m&&(this._onInsertAfter(),v=!0);else if(35==d){if(g){var F=this._lastNode();F&&F.focus(a.focusElement||this._getElementName(f)),v=!0}}else if(36==d){if(g){var x=this._firstNode();x&&x.focus(a.focusElement||this._getElementName(f)),v=!0}}else if(37==d){if(g&&!m){var _=this._previousElement(f);_&&this.focus(this._getElementName(_)),v=!0}else if(g&&m&&y){if(A.expanded){var S=A.getAppend();i=S?S.nextSibling:void 0}else{var $=A.getDom();i=$.nextSibling}i&&(n=a.getNodeFromTarget(i),r=i.nextSibling,B=a.getNodeFromTarget(r),n&&n instanceof l&&1!=A.parent.childs.length&&B&&B.parent&&(o=this.editor.getSelection(),c=A._nextSibling(),w.forEach((function(e){B.parent.moveBefore(e,B)})),this.focus(a.focusElement||this._getElementName(f)),this.editor._onAction("moveNodes",{nodes:w,oldBeforeNode:c,newBeforeNode:B,oldSelection:o,newSelection:this.editor.getSelection()})))}}else if(38==d)g&&!m?(t=this._previousNode(),t&&(this.editor.deselect(!0),t.focus(a.focusElement||this._getElementName(f))),v=!0):!g&&p&&m&&y?(t=this._previousNode(),t&&(u=this.editor.multiselection,u.start=u.start||this,u.end=t,h=this.editor._findTopLevelNodes(u.start,u.end),this.editor.select(h),t.focus("field")),v=!0):g&&m&&y&&(t=b._previousNode(),t&&t.parent&&(o=this.editor.getSelection(),c=A._nextSibling(),w.forEach((function(e){t.parent.moveBefore(e,t)})),this.focus(a.focusElement||this._getElementName(f)),this.editor._onAction("moveNodes",{nodes:w,oldBeforeNode:c,newBeforeNode:t,oldSelection:o,newSelection:this.editor.getSelection()})),v=!0);else if(39==d){if(g&&!m){var k=this._nextElement(f);k&&this.focus(this._getElementName(k)),v=!0}else if(g&&m&&y){$=b.getDom();var D=$.previousSibling;D&&(t=a.getNodeFromTarget(D),t&&t.parent&&t instanceof l&&!t.isVisible()&&(o=this.editor.getSelection(),c=A._nextSibling(),w.forEach((function(e){t.parent.moveBefore(e,t)})),this.focus(a.focusElement||this._getElementName(f)),this.editor._onAction("moveNodes",{nodes:w,oldBeforeNode:c,newBeforeNode:t,oldSelection:o,newSelection:this.editor.getSelection()})))}}else if(40==d)if(g&&!m)n=this._nextNode(),n&&(this.editor.deselect(!0),n.focus(a.focusElement||this._getElementName(f))),v=!0;else if(!g&&p&&m&&y)n=this._nextNode(),n&&(u=this.editor.multiselection,u.start=u.start||this,u.end=n,h=this.editor._findTopLevelNodes(u.start,u.end),this.editor.select(h),n.focus("field")),v=!0;else if(g&&m&&y){n=A.expanded?A.append?A.append._nextNode():void 0:A._nextNode();var B=n&&(n._nextNode()||n.parent.append);B&&B.parent&&(o=this.editor.getSelection(),c=A._nextSibling(),w.forEach((function(e){B.parent.moveBefore(e,B)})),this.focus(a.focusElement||this._getElementName(f)),this.editor._onAction("moveNodes",{nodes:w,oldBeforeNode:c,newBeforeNode:B,oldSelection:o,newSelection:this.editor.getSelection()})),v=!0}v&&(e.preventDefault(),e.stopPropagation())},a.prototype._onExpand=function(e){if(e){var t=this.dom.tr.parentNode,n=t.parentNode,i=n.scrollTop;n.removeChild(t)}this.expanded?this.collapse(e):this.expand(e),e&&(n.appendChild(t),n.scrollTop=i)},a.onRemove=function(e){if(!Array.isArray(e))return a.onRemove([e]);if(e&&e.length>0){var t=e[0],n=t.parent,i=t.editor,r=t.getIndex();i.highlighter.unhighlight();var o=i.getSelection();a.blurNodes(e);var s=i.getSelection();e.forEach((function(e){e.parent._remove(e)})),i._onAction("removeNodes",{nodes:e.slice(0),parent:n,index:r,oldSelection:o,newSelection:s})}},a.onDuplicate=function(e){if(!Array.isArray(e))return a.onDuplicate([e]);if(e&&e.length>0){var t=e[e.length-1],n=t.parent,i=t.editor;i.deselect(i.multiselection.nodes);var r=i.getSelection(),o=t,s=e.map((function(e){var t=e.clone();return n.insertAfter(t,o),o=t,t}));1===e.length?s[0].focus():i.select(s);var l=i.getSelection();i._onAction("duplicateNodes",{afterNode:t,nodes:s,parent:n,oldSelection:r,newSelection:l})}},a.prototype._onInsertBefore=function(e,t,n){var i=this.editor.getSelection(),r=new a(this.editor,{field:void 0!=e?e:"",value:void 0!=t?t:"",type:n});r.expand(!0),this.parent.insertBefore(r,this),this.editor.highlighter.unhighlight(),r.focus("field");var o=this.editor.getSelection();this.editor._onAction("insertBeforeNodes",{nodes:[r],beforeNode:this,parent:this.parent,oldSelection:i,newSelection:o})},a.prototype._onInsertAfter=function(e,t,n){var i=this.editor.getSelection(),r=new a(this.editor,{field:void 0!=e?e:"",value:void 0!=t?t:"",type:n});r.expand(!0),this.parent.insertAfter(r,this),this.editor.highlighter.unhighlight(),r.focus("field");var o=this.editor.getSelection();this.editor._onAction("insertAfterNodes",{nodes:[r],afterNode:this,parent:this.parent,oldSelection:i,newSelection:o})},a.prototype._onAppend=function(e,t,n){var i=this.editor.getSelection(),r=new a(this.editor,{field:void 0!=e?e:"",value:void 0!=t?t:"",type:n});r.expand(!0),this.parent.appendChild(r),this.editor.highlighter.unhighlight(),r.focus("field");var o=this.editor.getSelection();this.editor._onAction("appendNodes",{nodes:[r],parent:this.parent,oldSelection:i,newSelection:o})},a.prototype._onChangeType=function(e){var t=this.type;if(e!=t){var n=this.editor.getSelection();this.changeType(e);var i=this.editor.getSelection();this.editor._onAction("changeType",{node:this,oldType:t,newType:e,oldSelection:n,newSelection:i})}},a.prototype.sort=function(e){if(this._hasChilds()){var t="desc"==e?-1:1,n="array"==this.type?"value":"field";this.hideChilds();var r=this.childs,o=this.sortOrder;this.childs=this.childs.concat(),this.childs.sort((function(e,r){return t*i(e[n],r[n])})),this.sortOrder=1==t?"asc":"desc",this.editor._onAction("sort",{node:this,oldChilds:r,oldSort:o,newChilds:this.childs,newSort:this.sortOrder}),this.showChilds()}},a.prototype.getAppend=function(){return this.append||(this.append=new l(this.editor),this.append.setParent(this)),this.append.getDom()},a.getNodeFromTarget=function(e){while(e){if(e.node)return e.node;e=e.parentNode}},a.blurNodes=function(e){if(Array.isArray(e)){var t=e[0],n=t.parent,i=t.getIndex();n.childs[i+e.length]?n.childs[i+e.length].focus():n.childs[i-1]?n.childs[i-1].focus():n.focus()}else a.blurNodes([e])},a.prototype._nextSibling=function(){var e=this.parent.childs.indexOf(this);return this.parent.childs[e+1]||this.parent.append},a.prototype._previousNode=function(){var e=null,t=this.getDom();if(t&&t.parentNode){var n=t;do{n=n.previousSibling,e=a.getNodeFromTarget(n)}while(n&&e instanceof l&&!e.isVisible())}return e},a.prototype._nextNode=function(){var e=null,t=this.getDom();if(t&&t.parentNode){var n=t;do{n=n.nextSibling,e=a.getNodeFromTarget(n)}while(n&&e instanceof l&&!e.isVisible())}return e},a.prototype._firstNode=function(){var e=null,t=this.getDom();if(t&&t.parentNode){var n=t.parentNode.firstChild;e=a.getNodeFromTarget(n)}return e},a.prototype._lastNode=function(){var e=null,t=this.getDom();if(t&&t.parentNode){var n=t.parentNode.lastChild;e=a.getNodeFromTarget(n);while(n&&e instanceof l&&!e.isVisible())n=n.previousSibling,e=a.getNodeFromTarget(n)}return e},a.prototype._previousElement=function(e){var t=this.dom;switch(e){case t.value:if(this.fieldEditable)return t.field;case t.field:if(this._hasChilds())return t.expand;case t.expand:return t.menu;case t.menu:if(t.drag)return t.drag;default:return null}},a.prototype._nextElement=function(e){var t=this.dom;switch(e){case t.drag:return t.menu;case t.menu:if(this._hasChilds())return t.expand;case t.expand:if(this.fieldEditable)return t.field;case t.field:if(!this._hasChilds())return t.value;default:return null}},a.prototype._getElementName=function(e){var t=this.dom;for(var n in t)if(t.hasOwnProperty(n)&&t[n]==e)return n;return null},a.prototype._hasChilds=function(){return"array"==this.type||"object"==this.type},a.TYPE_TITLES={auto:'Field type "auto". The field type is automatically determined from the value and can be a string, number, boolean, or null.',object:'Field type "object". An object contains an unordered set of key/value pairs.',array:'Field type "array". An array contains an ordered collection of values.',string:'Field type "string". Field type is not determined from the value, but always returned as string.'},a.prototype.showContextMenu=function(e,t){var n=this,i=a.TYPE_TITLES,o=[];if(this.editable.value&&o.push({text:"Type",title:"Change the type of this field",className:"jsoneditor-type-"+this.type,submenu:[{text:"Auto",className:"jsoneditor-type-auto"+("auto"==this.type?" jsoneditor-selected":""),title:i.auto,click:function(){n._onChangeType("auto")}},{text:"Array",className:"jsoneditor-type-array"+("array"==this.type?" jsoneditor-selected":""),title:i.array,click:function(){n._onChangeType("array")}},{text:"Object",className:"jsoneditor-type-object"+("object"==this.type?" jsoneditor-selected":""),title:i.object,click:function(){n._onChangeType("object")}},{text:"String",className:"jsoneditor-type-string"+("string"==this.type?" jsoneditor-selected":""),title:i.string,click:function(){n._onChangeType("string")}}]}),this._hasChilds()){var s="asc"==this.sortOrder?"desc":"asc";o.push({text:"Sort",title:"Sort the childs of this "+this.type,className:"jsoneditor-sort-"+s,click:function(){n.sort(s)},submenu:[{text:"Ascending",className:"jsoneditor-sort-asc",title:"Sort the childs of this "+this.type+" in ascending order",click:function(){n.sort("asc")}},{text:"Descending",className:"jsoneditor-sort-desc",title:"Sort the childs of this "+this.type+" in descending order",click:function(){n.sort("desc")}}]})}if(this.parent&&this.parent._hasChilds()){o.length&&o.push({type:"separator"});var l=n.parent.childs;n==l[l.length-1]&&o.push({text:"Append",title:"Append a new field with type 'auto' after this field (Ctrl+Shift+Ins)",submenuTitle:"Select the type of the field to be appended",className:"jsoneditor-append",click:function(){n._onAppend("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:i.auto,click:function(){n._onAppend("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:i.array,click:function(){n._onAppend("",[])}},{text:"Object",className:"jsoneditor-type-object",title:i.object,click:function(){n._onAppend("",{})}},{text:"String",className:"jsoneditor-type-string",title:i.string,click:function(){n._onAppend("","","string")}}]}),o.push({text:"Insert",title:"Insert a new field with type 'auto' before this field (Ctrl+Ins)",submenuTitle:"Select the type of the field to be inserted",className:"jsoneditor-insert",click:function(){n._onInsertBefore("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:i.auto,click:function(){n._onInsertBefore("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:i.array,click:function(){n._onInsertBefore("",[])}},{text:"Object",className:"jsoneditor-type-object",title:i.object,click:function(){n._onInsertBefore("",{})}},{text:"String",className:"jsoneditor-type-string",title:i.string,click:function(){n._onInsertBefore("","","string")}}]}),this.editable.field&&(o.push({text:"Duplicate",title:"Duplicate this field (Ctrl+D)",className:"jsoneditor-duplicate",click:function(){a.onDuplicate(n)}}),o.push({text:"Remove",title:"Remove this field (Ctrl+Del)",className:"jsoneditor-remove",click:function(){a.onRemove(n)}}))}var c=new r(o,{close:t});c.show(e,this.editor.content)},a.prototype._getType=function(e){return e instanceof Array?"array":e instanceof Object?"object":"string"==typeof e&&"string"!=typeof this._stringCast(e)?"string":"auto"},a.prototype._stringCast=function(e){var t=e.toLowerCase(),n=Number(e),i=parseFloat(e);return""==e?"":"null"==t?null:"true"==t||"false"!=t&&(isNaN(n)||isNaN(i)?e:n)},a.prototype._escapeHTML=function(e){if("string"!==typeof e)return String(e);var t=String(e).replace(/&/g,"&").replace(//g,">").replace(/ /g,"  ").replace(/^ /," ").replace(/ $/," "),n=JSON.stringify(t),i=n.substring(1,n.length-1);return!0===this.editor.options.escapeUnicode&&(i=s.escapeUnicodeChars(i)),i},a.prototype._unescapeHTML=function(e){var t='"'+this._escapeJSON(e)+'"',n=s.parse(t);return n.replace(/</g,"<").replace(/>/g,">").replace(/ |\u00A0/g," ").replace(/&/g,"&")},a.prototype._escapeJSON=function(e){var t="",n=0;while(ng)return 1}for(var v=0,y=Math.max(f.length,p.length);vr)return 1}return 0}},function(e,t,n){"use strict";var i=n(54),r=n(57);function o(e){function t(e){this.editor=e,this.dom={}}return t.prototype=new e,t.prototype.getDom=function(){var e=this.dom;if(e.tr)return e.tr;this._updateEditability();var t=document.createElement("tr");if(t.node=this,e.tr=t,"tree"===this.editor.options.mode){e.tdDrag=document.createElement("td");var n=document.createElement("td");e.tdMenu=n;var i=document.createElement("button");i.type="button",i.className="jsoneditor-contextmenu",i.title="Click to open the actions menu (Ctrl+M)",e.menu=i,n.appendChild(e.menu)}var r=document.createElement("td"),o=document.createElement("div");return o.innerHTML="(empty)",o.className="jsoneditor-readonly",r.appendChild(o),e.td=r,e.text=o,this.updateDom(),t},t.prototype.updateDom=function(){var e=this.dom,t=e.td;t&&(t.style.paddingLeft=24*this.getLevel()+26+"px");var n=e.text;n&&(n.innerHTML="(empty "+this.parent.type+")");var i=e.tr;this.isVisible()?e.tr.firstChild||(e.tdDrag&&i.appendChild(e.tdDrag),e.tdMenu&&i.appendChild(e.tdMenu),i.appendChild(t)):e.tr.firstChild&&(e.tdDrag&&i.removeChild(e.tdDrag),e.tdMenu&&i.removeChild(e.tdMenu),i.removeChild(t))},t.prototype.isVisible=function(){return 0==this.parent.childs.length},t.prototype.showContextMenu=function(t,n){var i=this,o=e.TYPE_TITLES,s=[{text:"Append",title:"Append a new field with type 'auto' (Ctrl+Shift+Ins)",submenuTitle:"Select the type of the field to be appended",className:"jsoneditor-insert",click:function(){i._onAppend("","","auto")},submenu:[{text:"Auto",className:"jsoneditor-type-auto",title:o.auto,click:function(){i._onAppend("","","auto")}},{text:"Array",className:"jsoneditor-type-array",title:o.array,click:function(){i._onAppend("",[])}},{text:"Object",className:"jsoneditor-type-object",title:o.object,click:function(){i._onAppend("",{})}},{text:"String",className:"jsoneditor-type-string",title:o.string,click:function(){i._onAppend("","","string")}}]}],a=new r(s,{close:n});a.show(t,this.editor.content)},t.prototype.onEvent=function(e){var t=e.type,n=e.target||e.srcElement,r=this.dom,o=r.menu;if(n==o&&("mouseover"==t?this.editor.highlighter.highlight(this.parent):"mouseout"==t&&this.editor.highlighter.unhighlight()),"click"==t&&n==r.menu){var s=this.editor.highlighter;s.highlight(this.parent),s.lock(),i.addClassName(r.menu,"jsoneditor-selected"),this.showContextMenu(r.menu,(function(){i.removeClassName(r.menu,"jsoneditor-selected"),s.unlock(),s.unhighlight()}))}"keydown"==t&&this.onKeyDown(e)},t}e.exports=o},function(e,t,n){"use strict";var i=n(57);function r(e,t,n,r){for(var o={code:{text:"Code",title:"Switch to code highlighter",click:function(){r("code")}},form:{text:"Form",title:"Switch to form editor",click:function(){r("form")}},text:{text:"Text",title:"Switch to plain text editor",click:function(){r("text")}},tree:{text:"Tree",title:"Switch to tree editor",click:function(){r("tree")}},view:{text:"View",title:"Switch to tree view",click:function(){r("view")}}},s=[],a=0;a0){var r=n.length>a;if(r){n=n.slice(0,a);var s=this.validateSchema.errors.length-a;n.push("("+s+" more errors...)")}var l=document.createElement("div");l.innerHTML=''+n.map((function(e){var t;return t="string"===typeof e?'":"",''+t+""})).join("")+"
'+e+"
"+e.dataPath+""+e.message+"
",this.dom.validationErrors=l,this.frame.appendChild(l);var h=l.clientHeight;this.content.style.marginBottom=-h+"px",this.content.style.paddingBottom=h+"px"}if(this.aceEditor){var u=!1;this.aceEditor.resize(u)}},e.exports=[{mode:"text",mixin:s,data:"text",load:s.format},{mode:"code",mixin:s,data:"text",load:s.format}]},function(e,t,n){var i=n(64);n(67),n(69),e.exports=i},function(e,t,n){(function(){var e="ace",t=function(){return this}();if(t||"undefined"==typeof window||(t=window),e||"undefined"===typeof acequirejs){var n=function(e,t,i){"string"===typeof e?(2==arguments.length&&(i=t),n.modules[e]||(n.payloads[e]=i,n.modules[e]=null)):n.original?n.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};n.modules={},n.payloads={};var i=function(e,t,n){if("string"===typeof t){var i=s(e,t);if(void 0!=i)return n&&n(),i}else if("[object Array]"===Object.prototype.toString.call(t)){for(var o=[],a=0,l=t.length;a1&&a(l,"")>-1&&(n=RegExp(this.source,i.replace.call(s(this),"g","")),i.replace.call(e.slice(l.index),n,(function(){for(var e=1;el.index&&this.lastIndex--}return l},o||(RegExp.prototype.test=function(e){var t=i.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var n=d.call(arguments,1),r=function(){if(this instanceof r){var i=t.apply(this,n.concat(d.call(arguments)));return Object(i)===i?i:this}return t.apply(e,n.concat(d.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,o,s,a,l,c=Function.prototype.call,h=Array.prototype,u=Object.prototype,d=h.slice,f=c.bind(u.toString),p=c.bind(u.hasOwnProperty);if((l=p(u,"__defineGetter__"))&&(r=c.bind(u.__defineGetter__),o=c.bind(u.__defineSetter__),s=c.bind(u.__lookupGetter__),a=c.bind(u.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,"XXX"),n.length,t+1==n.length)return!0}()){var m=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?m.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):void 0==e?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(u=c;u--;)this[l+u]=this[a+u];if(o&&e===h)this.length=h,this.push.apply(this,r);else for(this.length=h+o,u=0;u>>0;if("[object Function]"!=f(e))throw new TypeError;while(++r>>0,r=Array(i),o=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0,o=[],s=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,o=0;if(arguments.length>=2)r=arguments[1];else do{if(o in n){r=n[o++];break}if(++o>=i)throw new TypeError("reduce of empty array with no initial value")}while(1);for(;o>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,o=i-1;if(arguments.length>=2)r=arguments[1];else do{if(o in n){r=n[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(1);do{o in this&&(r=e.call(void 0,r,n[o],o,t))}while(o--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=y&&"[object String]"==f(this)?this.split(""):O(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=T(arguments[1])),i=i>=0?i:Math.max(0,n+i);i>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,T(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:u)}),!Object.getOwnPropertyDescriptor){var w="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(w+e);if(p(e,t)){var n;if(n={enumerable:!0,configurable:!0},l){var i=e.__proto__;e.__proto__=u;var r=s(e,t),o=a(e,t);if(e.__proto__=i,r||o)return r&&(n.get=r),o&&(n.set=o),n}return n.value=e[t],n}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(g=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=g();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var i=function(){};i.prototype=e,n=new i,n.__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n});function b(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}if(Object.defineProperty){var A=b({}),C="undefined"==typeof document||b(document.createElement("div"));if(!A||!C)var E=Object.defineProperty}if(!Object.defineProperty||E){var F="Property description must be an object: ",x="Object.defineProperty called on non-object: ",_="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(e,t,n){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(x+e);if("object"!=typeof n&&"function"!=typeof n||null===n)throw new TypeError(F+n);if(E)try{return E.call(Object,e,t,n)}catch(c){}if(p(n,"value"))if(l&&(s(e,t)||a(e,t))){var i=e.__proto__;e.__proto__=u,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!l)throw new TypeError(_);p(n,"get")&&r(e,t,n.get),p(n,"set")&&o(e,t,n.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)p(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(P){Object.freeze=function(e){return function(t){return"function"==typeof t?t:e(t)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;var t="";while(p(e,t))t+="?";e[t]=!0;var n=p(e,t);return delete e[t],n}),!Object.keys){var S=!0,$=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],k=$.length;for(var D in{toString:null})S=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var n in e)p(e,n)&&t.push(n);if(S)for(var i=0,r=k;i0||-1)*Math.floor(Math.abs(e))),e}var O=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,n){"use strict";e("./regexp"),e("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(e,t,n){"use strict";var i="http://www.w3.org/1999/xhtml";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||i,e):document.createElement(e)},t.hasCssClass=function(e,t){var n=(e.className||"").split(/\s+/g);return-1!==n.indexOf(t)},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=" "+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\s+/g);while(1){var i=n.indexOf(t);if(-1==i)break;n.splice(i,1)}e.className=n.join(" ")},t.toggleCssClass=function(e,t){var n=e.className.split(/\s+/g),i=!0;while(1){var r=n.indexOf(t);if(-1==r)break;i=!1,n.splice(r,1)}return i&&n.push(t),e.className=n.join(" "),i},t.setCssClass=function(e,n,i){i?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n,i=0;if(t=t||document,t.createStyleSheet&&(n=t.styleSheets)){while(i=0?parseFloat((r.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((r.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((r.match(/rv\:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(r.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(r.split(" Chrome/")[1])||void 0,t.isAIR=r.indexOf("AdobeAIR")>=0,t.isIPad=r.indexOf("iPad")>=0,t.isTouchPad=r.indexOf("TouchPad")>=0,t.isChromeOS=r.indexOf(" CrOS ")>=0}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./keys"),r=e("./useragent"),o=null,s=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent("on"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",r,!0),t.removeListener(document,"dragstart",r,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",r,!0),t.addListener(document,"dragstart",r,!0),r},t.addTouchMoveListener=function(e,n){var i,r;"ontouchmove"in e&&(t.addListener(e,"touchstart",(function(e){var t=e.changedTouches[0];i=t.clientX,r=t.clientY})),t.addListener(e,"touchmove",(function(e){var t=1,o=e.changedTouches[0];e.wheelX=-(o.clientX-i)/t,e.wheelY=-(o.clientY-r)/t,i=o.clientX,r=o.clientY,n(e)})))},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){var t=8;void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0);break}n(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,o){var s,a,l,c=0,h={2:"dblclick",3:"tripleclick",4:"quadclick"};function u(e){if(0!==t.getButton(e)?c=0:e.detail>1?(c++,c>4&&(c=1)):c=1,r.isIE){var u=Math.abs(e.clientX-s)>5||Math.abs(e.clientY-a)>5;l&&!u||(c=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),1==c&&(s=e.clientX,a=e.clientY)}if(e._clicks=c,i[o]("mousedown",e),c>4)c=0;else if(c>1)return i[o](h[c],e)}function d(e){c=2,l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),i[o]("mousedown",e),i[o](h[c],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",u),r.isOldIE&&t.addListener(e,"dblclick",d)}))};var a=r.isMac&&r.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,n){var l=a(t);if(!r.isMac&&o){if(o.OSKey&&(l|=8),o.altGr){if(3==(3&l))return;o.altGr=0}if(18===n||17===n){var c="location"in t?t.location:t.keyLocation;if(17===n&&1===c)1==o[n]&&(s=t.timeStamp);else if(18===n&&3===l&&2===c){var h=t.timeStamp-s;h<50&&(o.altGr=!0)}}}if(n in i.MODIFIER_KEYS&&(n=-1),8&l&&n>=91&&n<=93&&(n=-1),!l&&13===n){c="location"in t?t.location:t.keyLocation;if(3===c&&(e(t,l,-n),t.defaultPrevented))return}if(r.isChromeOS&&8&l){if(e(t,l,n),t.defaultPrevented)return;l&=-9}return!!(l||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,l,n)}function c(){o=Object.create(null),o.count=0,o.lastT=0}if(t.getModifierString=function(e){return i.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!("KeyboardEvent"in window)){var s=null;i(e,"keydown",(function(e){s=e.keyCode})),i(e,"keypress",(function(e){return l(n,e,s)}))}else{var a=null;i(e,"keydown",(function(e){var t=e.keyCode;o[t]=(o[t]||0)+1,91==t||92==t?o.OSKey=!0:o.OSKey&&e.timeStamp-o.lastT>200&&1==o.count&&c(),1==o[t]&&o.count++,o.lastT=e.timeStamp;var i=l(n,e,t);return a=e.defaultPrevented,i})),i(e,"keypress",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),i(e,"keyup",(function(e){var t=e.keyCode;o[t]?o.count=Math.max(o.count-1,0):c(),91!=t&&92!=t||(o.OSKey=!1),o[t]=null})),o||(c(),i(window,"focus",c))}},"object"==typeof window&&window.postMessage&&!r.isOldIE){var h=1;t.nextTick=function(e,n){n=n||window;var i="zero-timeout-message-"+h;t.addListener(n,"message",(function r(o){o.data==i&&(t.stopPropagation(o),t.removeListener(n,"message",r),e())})),n.postMessage(i,"*")}}t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\s\s*/,r=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(i,"")},t.stringTrimRight=function(e){return e.replace(r,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;n1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=s(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(n.$blockScrolling++,this.$clickSelection){var o=this.$clickSelection.comparePoint(r.start),a=this.$clickSelection.comparePoint(r.end);if(-1==o&&a<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==a&&o>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==o&&1==a)i=r.end,t=r.start;else{var l=s(this.$clickSelection,i);i=l.cursor,t=l.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=o(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>i||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session,r=i.getBracketRange(t);r?(r.isEmpty()&&(r.start.column--,r.end.column++),this.setState("select")):(r=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=r,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),i=this.editor,r=i.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);return r||n<200?(this.$lastScrollTime=t,i.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),i=this.editor,r=i.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(r||n<200)return this.$lastScrollTime=t,i.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(r.prototype),t.DefaultHandlers=r})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");function r(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(r.prototype),t.Tooltip=r})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),o=e("../lib/event"),s=e("../tooltip").Tooltip;function a(e){var t,n,r,s=e.editor,a=s.renderer.$gutterLayer,c=new l(s.container);function h(){var t=n.getDocumentPosition().row,i=a.$annotations[t];if(!i)return u();var o=s.session.getLength();if(t==o){var l=s.renderer.pixelToScreenCoordinates(0,n.y).row,h=n.$pos;if(l>s.session.documentToScreenRow(h.row,h.column))return u()}if(r!=i)if(r=i.text.join("
"),c.setHtml(r),c.show(),s.on("mousewheel",u),e.$tooltipFollowsMouse)d(n);else{var f=n.domEvent.target,p=f.getBoundingClientRect(),m=c.getElement().style;m.left=p.right+"px",m.top=p.bottom+"px"}}function u(){t&&(t=clearTimeout(t)),r&&(c.hide(),r=null,s.removeEventListener("mousewheel",u))}function d(e){c.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(s.isFocused()&&0==t.getButton()){var n=a.getRegion(t);if("foldWidgets"!=n){var i=t.getDocumentPosition().row,r=s.session.selection;if(t.getShiftKey())r.selectTo(i,0);else{if(2==t.domEvent.detail)return s.selectAll(),t.preventDefault();e.$clickSelection=s.selection.getLineRange(i)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}}})),e.editor.setDefaultHandler("guttermousemove",(function(o){var s=o.domEvent.target||o.domEvent.srcElement;if(i.hasCssClass(s,"ace_fold-widget"))return u();r&&e.$tooltipFollowsMouse&&d(o),n=o,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?h():u()}),50))})),o.addListener(s.renderer.$gutter,"mouseout",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,u()}),50))})),s.on("changeSession",u)}function l(e){s.call(this,e)}r.inherits(l,s),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),o=this.getHeight();e+=15,t+=15,e+r>n&&(e-=e+r-n),t+o>i&&(t-=20+o),s.prototype.setPosition.call(this,e,t)}}.call(l.prototype),t.GutterHandler=a})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/event"),o=e("../lib/useragent"),s=200,a=200,l=5;function c(e){var t=e.editor,n=i.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",o.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var c=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];c.forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var u,d,f,p,m,g,v,y,w,b,A,C=t.container,E=0;function F(e,n){var i=Date.now(),r=!n||e.row!=n.row,o=!n||e.column!=n.column;if(!b||r||o)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,b=i,A={x:d,y:f};else{var s=h(A.x,A.y,d,f);s>l?b=null:i-b>=a&&(t.renderer.scrollCursorIntoView(),b=null)}}function x(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,a=t.renderer.scroller.getBoundingClientRect(),l={x:{left:d-a.left,right:a.right-d},y:{top:f-a.top,bottom:a.bottom-f}},c=Math.min(l.x.left,l.x.right),h=Math.min(l.y.top,l.y.bottom),u={row:e.row,column:e.column};c/o<=2&&(u.column+=l.x.left=s&&t.renderer.scrollCursorIntoView(u):w=i:w=null}function _(){var e=g;g=t.renderer.screenToTextCoordinates(d,f),F(g,e),x(g,e)}function S(){m=t.selection.toOrientedRange(),u=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(p),_(),p=setInterval(_,20),E=0,r.addListener(document,"mousemove",D)}function $(){clearInterval(p),t.session.removeMarker(u),u=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!y&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,E=0,w=null,b=null,r.removeListener(document,"mousemove",D)}this.onDragStart=function(e){if(this.cancelDrag||!C.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}m=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?"copy":"copyMove",o.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),o.isOpera&&t.container.removeChild(n),r.clearData(),r.setData("Text",t.session.getTextRange()),y=!0,this.setState("drag")},this.onDragEnd=function(e){if(C.draggable=!1,y=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;v||"move"!=n||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&B(e.dataTransfer))return d=e.clientX,f=e.clientY,u||S(),E++,e.dataTransfer.dropEffect=v=L(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&B(e.dataTransfer))return d=e.clientX,f=e.clientY,u||(S(),E++),null!==k&&(k=null),e.dataTransfer.dropEffect=v=L(e),r.preventDefault(e)},this.onDragLeave=function(e){if(E--,E<=0&&u)return $(),v=null,r.preventDefault(e)},this.onDrop=function(e){if(g){var n=e.dataTransfer;if(y)switch(v){case"move":m=m.contains(g.row,g.column)?{start:g,end:g}:t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0);break}else{var i=n.getData("Text");m={start:g,end:t.session.insert(g,i)},t.focus(),v=null}return $(),r.preventDefault(e)}},r.addListener(C,"dragstart",this.onDragStart.bind(e)),r.addListener(C,"dragend",this.onDragEnd.bind(e)),r.addListener(C,"dragenter",this.onDragEnter.bind(e)),r.addListener(C,"dragover",this.onDragOver.bind(e)),r.addListener(C,"dragleave",this.onDragLeave.bind(e)),r.addListener(C,"drop",this.onDrop.bind(e));var k=null;function D(){null==k&&(k=setTimeout((function(){null!=k&&u&&$()}),20))}function B(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function L(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],i=o.isMac?e.altKey:e.ctrlKey,r="uninitialized";try{r=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var s="none";return i&&t.indexOf(r)>=0?s="copy":n.indexOf(r)>=0?s="move":t.indexOf(r)>=0&&(s="copy"),s}}function h(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=o.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(o.isIE&&"dragReady"==this.state){var n=h(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if("dragWait"===this.state){n=h(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton(),r=e.domEvent.detail||1;if(1===r&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var s=e.domEvent.target||e.domEvent.srcElement;if("unselectable"in s&&(s.unselectable="on"),t.getDragDelay()){if(o.isWebKit){this.cancelDrag=!0;var a=t.container;a.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(c.prototype),t.DragdropHandler=c})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){4===n.readyState&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=i.getDocumentHead(),r=document.createElement("script");r.src=e,n.appendChild(r),r.onload=r.onreadystatechange=function(e,n){!n&&r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(r=r.onload=r.onreadystatechange=null,n||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(e,t,n){"use strict";var i={},r=function(){this.propagationStopped=!0},o=function(){this.defaultPrevented=!0};i._emit=i._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],i=this._defaultHandlers[e];if(n.length||i){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=r),t.preventDefault||(t.preventDefault=o),n=n.slice();for(var s=0;s1&&(r=n[n.length-2]);var s=l[t+"Path"];return null==s?s=l.basePath:"/"==i&&(t=i=""),s&&"/"!=s.slice(-1)&&(s+="/"),s+t+i+r+this.get("suffix")},t.setModuleUrl=function(e,t){return l.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,s;Array.isArray(n)&&(s=n[0],n=n[1]);try{r=e(n)}catch(l){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var a=function(){e([n],(function(e){t._emit("load.module",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return a();o.loadScript(t.moduleUrl(n,s),a)}},c(!0),t.init=c})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),o=e("./default_handlers").DefaultHandlers,s=e("./default_gutter_handler").GutterHandler,a=e("./mouse_event").MouseEvent,l=e("./dragdrop_handler").DragdropHandler,c=e("../config"),h=function(e){var t=this;this.editor=e,new o(this),new s(this),new l(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();i.addListener(a,"click",this.onMouseEvent.bind(this,"click")),i.addListener(a,"mousemove",this.onMouseMove.bind(this,"mousemove")),i.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),i.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),i.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var c=e.renderer.$gutter;i.addListener(c,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),i.addListener(c,"click",this.onMouseEvent.bind(this,"gutterclick")),i.addListener(c,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),i.addListener(c,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),i.addListener(a,"mousedown",n),i.addListener(c,"mousedown",n),r.isIE&&e.renderer.scrollBarV&&(i.addListener(e.renderer.scrollBarV.element,"mousedown",n),i.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",(function(n){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var i=e.renderer.screenToTextCoordinates(n.x,n.y),r=e.session.selection.getRange(),o=e.renderer;!r.isEmpty()&&r.insideStart(i.row,i.column)?o.setCursorStyle("default"):o.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;n&&n.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var n=new a(t,this.editor);n.speed=2*this.$scrollSpeed,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new a(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var o=this,s=function(e){if(e){if(r.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new a(e,o.editor),o.$mouseMoved=!0}},l=function(e){clearInterval(h),c(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",null==n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e)},c=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(r.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout((function(){l(e)}));o.$onCaptureMouseMove=s,o.releaseMouse=i.capture(this.editor.container,s,l);var h=setInterval(c,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&i.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(h.prototype),c.defineOptions(h.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:r.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=h})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(e,t,n){"use strict";function i(e){e.on("click",(function(t){var n=t.getDocumentPosition(),i=e.session,r=i.getFoldAt(n.row,n.column,1);r&&(t.getAccelKey()?i.removeFold(r):i.expandFold(r),t.stop())})),e.on("gutterclick",(function(t){var n=e.renderer.$gutterLayer.getRegion(t);if("foldWidgets"==n){var i=t.getDocumentPosition().row,r=e.session;r.foldWidgets&&r.foldWidgets[i]&&e.session.onFoldWidgetClick(i,t),e.isFocused()||e.focus(),t.stop()}})),e.on("gutterdblclick",(function(t){var n=e.renderer.$gutterLayer.getRegion(t);if("foldWidgets"==n){var i=t.getDocumentPosition().row,r=e.session,o=r.getParentFoldRangeData(i,!0),s=o.range||o.firstRange;if(s){i=s.start.row;var a=r.getFoldAt(i,r.getLine(i).length,1);a?r.removeFold(a):(r.addFold("...",s),e.renderer.scrollCursorIntoView({row:s.start.row,column:0}))}t.stop()}}))}t.FoldHandler=i})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/event"),o=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);-1!=n&&this.$handlers.splice(n,1),void 0==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==n&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(n){return n.getStatusText&&n.getStatusText(t,e)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,i){for(var o,s=!1,a=this.$editor.commands,l=this.$handlers.length;l--;)if(o=this.$handlers[l].handleKeyboard(this.$data,e,t,n,i),o&&o.command&&(s="null"==o.command||a.exec(o.command,this.$editor,o.args,i),s&&i&&-1!=e&&1!=o.passEvent&&1!=o.command.passEvent&&r.stopEvent(i),s))break;return s||-1!=e||(o={command:"insertstring"},s=a.exec("insertstring",this.$editor,t)),s&&this.$editor._signal("keyboardActivity",o),s},this.onCommandKey=function(e,t,n){var r=i.keyCodeToString(n);this.$callKeyboardHandlers(t,r,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(o.prototype),t.KeyBinding=o})),ace.define("ace/range",["require","exports","module"],(function(e,t,n){"use strict";var i=function(e,t){return e.row-t.row||e.column-t.column},r=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return t=this.compare(n.row,n.column),1==t?(t=this.compare(i.row,i.column),1==t?2:0==t?1:0):-1==t?-2:(t=this.compare(i.row,i.column),-1==t?-1:1==t?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var i={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?s.fromPoints(t,t):this.isBackwards()?s.fromPoints(t,e):s.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if("undefined"==typeof t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i="number"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new s(i,0,n,this.session.getLine(n).length):new s(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(t)&&this.doc.getLine(t.row).slice(t.column-n,t.column).split(" ").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((t=e[n])&&i.test(t))n++;if(n<1){r.lastIndex=0;while((t=e[n])&&!r.test(t))if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}while((t=e[n])&&i.test(t))n++;if(n>2)break}}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var o=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e0&&/^\s*$/.test(i));n=i.length,/\s+$/.test(i)||(i="")}var o=r.stringReverse(i),s=this.$shortWordEndIndex(o);return this.moveCursorTo(t,n-s)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column);0!==e&&0===t&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return s.fromPoints(t,n)}catch(i){return s.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else{e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(void 0==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=s.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,n){"use strict";var i=e("./config"),r=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,o=this.matchMappings[t]={defaultToken:"text"},s="g",a=[],l=0;l1?this.$applyToken:c.token),u>1&&(/\\\d/.test(c.regex)?h=c.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+r+1)})):(u=1,h=this.removeCapturingGroups(c.regex)),c.splitRegex||"string"==typeof c.token||a.push(c)),o[r]=l,r+=u,i.push(h),c.onMatch||(c.onMatch=null)}}i.length||(o[0]=0,i.push("$")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,s)}),this),this.regExps[t]=new RegExp("("+i.join(")|(")+")|($)",s)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if("string"===typeof n)return[{type:n,value:e}];for(var i=[],r=0,o=n.length;rh){var v=e.substring(h,g-m.length);d.type==f?d.value+=v:(d.type&&c.push(d),d={type:f,value:v})}for(var y=0;yr){u>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(h1&&n[0]!==i&&n.unshift("#tmp",i),{tokens:c,state:n.length?n:i}},this.reportError=i.reportError}).call(o.prototype),t.Tokenizer=o})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r=this.$rowTokens.length){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(i.prototype),t.TokenIterator=i})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../tokenizer").Tokenizer,r=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour").Behaviour,s=e("../unicode"),a=e("../lib/lang"),l=e("../token_iterator").TokenIterator,c=e("../range").Range,h=function(){this.HighlightRules=r,this.$behaviour=new o};(function(){this.tokenRe=new RegExp("^["+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,i){var r=t.doc,o=!0,s=!0,l=1/0,c=t.getTabSize(),h=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))m=this.lineCommentStart.map(a.escapeRegExp).join("|"),f=this.lineCommentStart[0];else m=a.escapeRegExp(this.lineCommentStart),f=this.lineCommentStart;m=new RegExp("^(\\s*)(?:"+m+") ?"),h=t.getUseSoftTabs();y=function(e,t){var n=e.match(m);if(n){var i=n[1].length,o=n[0].length;d(e,i,o)||" "!=n[0][o-1]||o--,r.removeInLine(t,i,o)}};var u=f+" ",d=(v=function(e,t){o&&!/\S/.test(e)||(d(e,l,l)?r.insertInLine({row:t,column:l},u):r.insertInLine({row:t,column:l},f))},w=function(e,t){return m.test(e)},function(e,t,n){var i=0;while(t--&&" "==e.charAt(t))i++;if(i%c!=0)return!1;i=0;while(" "==e.charAt(n++))i++;return c>2?i%c!=c-1:i%c==0})}else{if(!this.blockComment)return!1;var f=this.blockComment.start,p=this.blockComment.end,m=new RegExp("^(\\s*)(?:"+a.escapeRegExp(f)+")"),g=new RegExp("(?:"+a.escapeRegExp(p)+")\\s*$"),v=function(e,t){w(e,t)||o&&!/\S/.test(e)||(r.insertInLine({row:t,column:e.length},p),r.insertInLine({row:t,column:l},f))},y=function(e,t){var n;(n=e.match(g))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(m))&&r.removeInLine(t,n[1].length,n[0].length)},w=function(e,n){if(m.test(e))return!0;for(var i=t.getTokens(n),r=0;re.length&&(A=e.length)})),l==1/0&&(l=A,o=!1,s=!1),h&&l%c!=0&&(l=Math.floor(l/c)*c),b(s?y:v)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var o,s,a=new l(t,i.row,i.column),h=a.getCurrentToken(),u=(t.selection,t.selection.toOrientedRange());if(h&&/comment/.test(h.type)){var d,f;while(h&&/comment/.test(h.type)){var p=h.value.indexOf(r.start);if(-1!=p){var m=a.getCurrentTokenRow(),g=a.getCurrentTokenColumn()+p;d=new c(m,g,m,g+r.start.length);break}h=a.stepBackward()}a=new l(t,i.row,i.column),h=a.getCurrentToken();while(h&&/comment/.test(h.type)){p=h.value.indexOf(r.end);if(-1!=p){m=a.getCurrentTokenRow(),g=a.getCurrentTokenColumn()+p;f=new c(m,g,m,g+r.end.length);break}h=a.stepForward()}f&&t.remove(f),d&&(t.remove(d),o=d.start.row,s=-r.start.length)}else s=r.start.length,o=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);u.start.row==o&&(u.start.column+=s),u.end.row==o&&(u.end.column+=s),t.selection.fromOrientedRange(u)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(o.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./apply_delta").applyDelta,o=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,a=e("./anchor").Anchor,l=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new s(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:"insert",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return void 0==t&&(t=i.length),t=Math.min(Math.max(t,0),i.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,i=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof s||(e=s.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),n=t?this.insert(e.start,t):e.start,n);var n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n="insert"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!s.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),r(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,i=n.length,r=e.start.row,o=e.start.column,s=0,a=0;do{s=a,a+=t-1;var l=n.slice(s,a);if(a>i){e.lines=l,e.start.row=r+s,e.start.column=o;break}l.push(""),this.applyDelta({start:this.pos(r+s,o),end:this.pos(r+a,o=0),action:e.action,lines:l},!0)}while(1)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var n=this.$lines||this.getAllLines(),i=this.getNewLineCharacter().length,r=t||0,o=n.length;r20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,o<=i&&n.fireUpdateEvent(o,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!==i.state+""?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(o.prototype),t.BackgroundTokenizer=o})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=(e("./lib/oop"),e("./range").Range),o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,o){if(this.regExp)for(var s=o.firstRow,a=o.lastRow,l=s;l<=a;l++){var c=this.cache[l];null==c&&(c=i.getMatchOffsets(n.getLine(l),this.regExp),c.length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map((function(e){return new r(l,e.offset,l,e.offset+e.length)})),this.cache[l]=c.length?c:"");for(var h=c.length;h--;)t.drawSingleLineMarker(e,c[h].toScreenRange(n),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,o,s=0,a=this.folds,l=!0;null==t&&(t=this.end.row,n=this.end.column);for(var c=0;c0)){var l=r(e,s.start);return 0===a?t&&0!==l?-o-2:o:l>0||0===l&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort((function(e,t){return r(e.start,t.start)}));for(var n,i=t[0],o=1;o=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowi)break;if(h.start.row==i&&h.start.column>=t.column&&(h.start.column==t.column&&this.$insertRight||(h.start.column+=s,h.start.row+=o)),h.end.row==i&&h.end.column>=t.column){if(h.end.column==t.column&&this.$insertRight)continue;h.end.column==t.column&&s>0&&lh.start.column&&h.end.column==a[l+1].start.column&&(h.end.column-=s),h.end.column+=s,h.end.row+=o}}}if(0!=o&&l=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0),i;i=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r=t){a=e?i-=t-a:i=0);break}s>=e&&(i-=a>=e?s-a:s-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,s=!1;e instanceof o?n=e:(n=new o(t,e),n.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(n.range);var a=n.start.row,l=n.start.column,c=n.end.row,h=n.end.column;if(!(a0&&(this.removeFolds(f),f.forEach((function(e){n.addSubFold(e)})));for(var p=0;p0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n="number"==typeof e?new i(e,0,e,this.getLine(e).length):"row"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else{var o=r;while(o.length)this.expandFolds(o),o=this.getFoldsInRangeList(n)}if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var o=this.doc,s="";return e.walk((function(e,t,n,a){if(!(t=e){r=o.end.row;try{var s=this.addFold("...",o);s&&(s.collapseChildren=n)}catch(a){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var i,r=e-1;while(r>=0){var o=n[r];if(null==o&&(o=n[r]=this.getFoldWidget(r)),"start"==o){var s=this.getFoldWidgetRange(r);if(i||(i=s),s&&s.end.row>=e)break}r--}return{range:-1!==r&&s,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},i=this.$toggleFoldWidget(e,n);if(!i){var r=t.target||t.srcElement;r&&/ace_fold-widget/.test(r.className)&&(r.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r="end"===n?-1:1,o=this.getFoldAt(e,-1===r?0:i.length,r);if(o)t.children||t.all?this.removeFold(o):this.expandFold(o);else{var s=this.getFoldWidgetRange(e,!0);if(!s||s.isMultiLine()||(o=this.getFoldAt(s.start.row,s.start.column,1),!o||!s.isEqual(o.range))){if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=s?s.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):s&&(t.all&&(s.collapseChildren=1e4),this.addFold("...",s));return s}this.removeFold(o)}}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange,n){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold("...",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}t.Folding=a})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../token_iterator").TokenIterator,r=e("../range").Range;function o(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(""==n)return null;var i=n.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,o=n.charAt(e.column-1),s=o&&o.match(/([\(\[\{])|([\)\]\}])/);if(s||(o=n.charAt(e.column),e={row:e.row,column:e.column+1},s=o&&o.match(/([\(\[\{])|([\)\]\}])/),i=!1),!s)return null;if(s[1]){var a=this.$findClosingBracket(s[1],e);if(!a)return null;t=r.fromPoints(e,a),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{a=this.$findOpeningBracket(s[2],e);if(!a)return null;t=r.fromPoints(a,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],o=1,s=new i(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var l=t.column-s.getCurrentTokenColumn()-2,c=a.value;while(1){while(l>=0){var h=c.charAt(l);if(h==r){if(o-=1,0==o)return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else h==e&&(o+=1);l-=1}do{a=s.stepBackward()}while(a&&!n.test(a.type));if(null==a)break;c=a.value,l=c.length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],o=1,s=new i(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var l=t.column-s.getCurrentTokenColumn();while(1){var c=a.value,h=c.length;while(ln&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,i=e.length-1;while(n<=i){var r=n+i>>1,o=e[r];if(t>o)n=r+1;else{if(!(t=t)break;return n=i[o],n?(n.index=o,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))r=/\s/;else r=this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&n.charAt(o).match(r));o++}var s=t;while(se&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,o=this.$foldData[r],s=o?o.start.row:1/0,a=t.length,l=0;ls){if(l=o.end.row+1,l>=a)break;o=this.$foldData[r++],s=o?o.start.row:1/0}null==n[l]&&(n[l]=this.$getStringScreenWidth(t[l])[0]),n[l]>i&&(i=n[l])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=e.length-1;-1!=i;i--){var r=e[i];"doc"==r.group?(this.doc.revertDeltas(r.deltas),n=this.$getUndoSelection(r.deltas,!0,n)):r.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=0;ie.end.column&&(o.start.column+=a),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=a)),s&&o.start.row>=e.end.row&&(o.start.row+=s,o.end.row+=s)}if(o.end=this.insert(o.start,i),r.length){var l=e.start,h=o.start;s=h.row-l.row,a=h.column-l.column;this.addFolds(r.map((function(e){return e=e.clone(),e.start.row==l.row&&(e.start.column+=a),e.end.row==l.row&&(e.end.column+=a),e.start.row+=s,e.end.row+=s,e})))}return o},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new c(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var o=this.getLine(r);n.start.row=r,n.end.row=r;for(var s=0;s0){i=this.getRowFoldEnd(t+n);if(i>this.doc.getLength()-1)return 0;r=i-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);r=t-e+1}var o=new c(e,0,t,Number.MAX_VALUE),s=this.getFoldsInRange(o).map((function(e){return e=e.clone(),e.start.row+=r,e.end.row+=r,e})),a=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+r,a),s.length&&this.addFolds(s),r},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,o=i.row,s=r.row,a=s-o,l=null;if(this.$updating=!0,0!=a)if("remove"===n){this[t?"$wrapData":"$rowLengthCache"].splice(o,a);var c=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var h=this.getFoldLine(r.row),u=0;if(h){h.addRemoveChars(r.row,r.column,i.column-r.column),h.shiftRow(-a);var d=this.getFoldLine(o);d&&d!==h&&(d.merge(h),h=d),u=c.indexOf(h)+1}for(u;u=r.row&&h.shiftRow(-a)}s=o}else{var f=Array(a);f.unshift(o,0);var p=t?this.$wrapData:this.$rowLengthCache;p.splice.apply(p,f);c=this.$foldData,h=this.getFoldLine(o),u=0;if(h){var m=h.range.compareInside(i.row,i.column);0==m?(h=h.split(i.row,i.column),h&&(h.shiftRow(a),h.addRemoveChars(s,0,r.column-i.column))):-1==m&&(h.addRemoveChars(o,0,r.column-i.column),h.shiftRow(a)),u=c.indexOf(h)+1}for(u;u=o&&h.shiftRow(a)}}else{a=Math.abs(e.start.column-e.end.column),"remove"===n&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a);h=this.getFoldLine(o);h&&h.addRemoveChars(o,i.column,a)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(o,s):this.$updateRowLengthCache(o,s),l},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var i,r,o=this.doc.getAllLines(),s=this.getTabSize(),l=this.$wrapData,c=this.$wrapLimit,h=e;t=Math.min(t,o.length-1);while(h<=t)r=this.getFoldLine(h,r),r?(i=[],r.walk(function(e,t,r,s){var l;if(null!=e){l=this.$getDisplayTokens(e,i.length),l[0]=n;for(var c=1;c=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(e,i,r){if(0==e.length)return[];var o=[],s=e.length,l=0,c=0,u=this.$wrapAsCode,d=this.$indentedSoftWrap,g=i<=Math.max(2*r,8)||!1===d?0:Math.floor(i/2);function v(){var t=0;if(0===g)return t;if(d)for(var n=0;ni-w){var b=l+i-w;if(e[b-1]>=f&&e[b]>=f)y(b);else if(e[b]!=n&&e[b]!=a){var A=Math.max(b-(i-(i>>2)),l-1);while(b>A&&e[b]A&&e[b]A&&e[b]==h)b--}else while(b>A&&e[b]A?y(++b):(b=l+i,e[b]==t&&b--,y(b-w))}else{for(b;b!=l-1;b--)if(e[b]==n)break;if(b>l){y(b);continue}for(b=l+i,b;b39&&a<48||a>57&&a<64?o.push(h):a>=4352&&g(a)?o.push(e,t):o.push(e)}return o},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var i,r;for(null==t&&(t=1/0),n=n||0,r=0;r=4352&&g(i)?n+=2:n+=1,n>t)break;return[n,r]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0){s=l[c],r=this.$docRowCache[c];var u=e>l[h-1]}else u=!h;var d=this.getLength()-1,f=this.getNextFoldLine(r),p=f?f.start.row:1/0;while(s<=e){if(a=this.getRowLength(r),s+a>e||r>=d)break;s+=a,r++,r>p&&(r=f.end.row+1,f=this.getNextFoldLine(r,f),p=f?f.start.row:1/0),u&&(this.$docRowCache.push(r),this.$screenRowCache.push(s))}if(f&&f.start.row<=r)n=this.getFoldDisplayLine(f),r=f.start.row;else{if(s+a<=e||r>d)return{row:d,column:this.getLine(d).length};n=this.getLine(r),f=null}var m=0;if(this.$useWrapMode){var g=this.$wrapData[r];if(g){var v=Math.floor(e-s);i=g[v],v>0&&g.length&&(m=g.indent,o=g[v-1]||g[g.length-1],n=n.substring(o))}}return o+=this.$getStringScreenWidth(n,t-m)[1],this.$useWrapMode&&o>=i&&(o=i-1),f?f.idxToPosition(o):{row:r,column:o}},this.documentToScreenPosition=function(e,t){if("undefined"===typeof t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i=0,r=null,o=null;o=this.getFoldAt(e,t,1),o&&(e=o.start.row,t=o.start.column);var s,a=0,l=this.$docRowCache,c=this.$getRowCacheIndex(l,e),h=l.length;if(h&&c>=0){a=l[c],i=this.$screenRowCache[c];var u=e>l[h-1]}else u=!h;var d=this.getNextFoldLine(a),f=d?d.start.row:1/0;while(a=f){if(s=d.end.row+1,s>e)break;d=this.getNextFoldLine(s,d),f=d?d.start.row:1/0}else s=a+1;i+=this.getRowLength(a),a=s,u&&(this.$docRowCache.push(a),this.$screenRowCache.push(i))}var p="";d&&a>=f?(p=this.getFoldDisplayLine(d,e,t),r=d.start.row):(p=this.getLine(e).substring(0,t),r=e);var m=0;if(this.$useWrapMode){var g=this.$wrapData[r];if(g){var v=0;while(p.length>=g[v])i++,v++;p=p.substring(g[v-1]||0,p.length),m=v>0?g.indent:0}}return{row:i,column:m+this.$getStringScreenWidth(p)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode){var n=this.$wrapData.length,i=0,r=(a=0,t=this.$foldData[a++],t?t.start.row:1/0);while(ir&&(i=t.end.row+1,t=this.$foldData[a++],r=t?t.start.row:1/0)}}else{e=this.getLength();for(var s=this.$foldData,a=0;an)break;return[i,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(f.prototype),e("./edit_session/folding").Folding.call(f.prototype),e("./edit_session/bracket_match").BracketMatch.call(f.prototype),o.defineOptions(f.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e="auto"==e?"text"!=this.$mode.type:"text"!=e,e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=f})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=e("./lib/oop"),o=e("./range").Range,s=function(){this.$options={}};(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r){if(e.start)i=e;else{var s=e.offset+(r||0);if(i=new o(n,s,n,s+e.length),!e.length&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start))return i=null,!1}return!0})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),s=[],a=t.re;if(t.$isMultiLine){var l,c=a.length,h=r.length-c;e:for(var u=a.offset||0;u<=h;u++){for(var d=0;dm||(s.push(l=new o(u,m,u+c-1,g)),c>2&&(u=u+c-2))}}else for(var v=0;vA&&s[d].end.row==n.end.row)d--;for(s=s.slice(v,d+1),v=0,d=s.length;v=0;a--)if(n(s[a],t,o))return!0};else a=function(e,t,o){for(var s=i.getMatchOffsets(e,r),a=0;a=s;i--)if(n(e.getLine(i),i))return;if(0!=t.wrap)for(i=a,s=o.row;i>=s;i--)if(n(e.getLine(i),i))return}}:function(n){var i=o.row,r=e.getLine(i).substr(o.column);if(!n(r,i,o.column)){for(i+=1;i<=a;i++)if(n(e.getLine(i),i))return;if(0!=t.wrap)for(i=s,a=o.row;i<=a;i++)if(n(e.getLine(i),i))return}};return{forEach:l}}}).call(s.prototype),t.Search=s})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/useragent"),o=i.KEY_MODS;function s(e,t){this.platform=t||(r.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){s.call(this,e,t),this.$singleCommand=!1}a.prototype=s.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||0}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&("string"===typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var o=i[r];if(o==e)delete i[r];else if(Array.isArray(o)){var s=o.indexOf(e);-1!=s&&(o.splice(s,1),1==o.length&&(i[r]=o[0]))}}},this.bindKey=function(e,t,n){if("object"==typeof e&&e&&(void 0==n&&(n=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var i="";if(-1!=e.indexOf(" ")){var r=e.split(/\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=o[t.hashId]+t.key;i+=(i?" ":"")+n,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var s=this.parseKeys(e),a=o[s.hashId]+s.key;this._addCommandToBinding(i+a,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,o=this.commandKeyBinding;if(n)if(!o[t]||this.$singleCommand)o[t]=n;else{Array.isArray(o[t])?-1!=(r=o[t].indexOf(n))&&o[t].splice(r,1):o[t]=[o[t]],"number"!=typeof i&&(i=i||n.isDefault?-100:e(n));var s=o[t];for(r=0;ri)break}s.splice(r,0,n)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if("string"===typeof n)return this.bindKey(n,t);"function"===typeof n&&(n={exec:n}),"object"===typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var o=0,s=t.length;s--;){var a=i.KEY_MODS[t[s]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[s]+" in "+e),!1;o|=a}return{key:n,hashId:o}},this.findKeyCommand=function(e,t){var n=o[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=o[t]+n,s=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=" "+r,s=this.commandKeyBinding[e.$keyChain]||s),!s||"chainKeys"!=s&&"chainKeys"!=s[s.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:s}):(e.$keyChain=e.$keyChain||r,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(s.prototype),t.HashHandler=s,t.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../keyboard/hash_handler").MultiHashHandler,o=e("../lib/event_emitter").EventEmitter,s=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(s,r),function(){i.implement(this,o),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if("string"===typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit("exec",r),this._signal("afterExec",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(s.prototype),t.CommandManager=s})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=e("../config"),o=e("../range").Range;function s(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:s("Ctrl-,","Command-,"),exec:function(e){r.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:s("Alt-E","Ctrl-E"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:s("Alt-Shift-E","Ctrl-Shift-E"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:s("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:s(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:s("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:s("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:s("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:s("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:s("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:s(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:s("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:s("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:s("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:s("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:s("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:s("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:s("Ctrl-F","Command-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:s("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:s("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:s("Shift-Up","Shift-Up"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:s("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:s("Ctrl-Shift-End","Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:s("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:s("Shift-Down","Shift-Down"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:s("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:s("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:s("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:s("Alt-Shift-Left","Command-Shift-Left"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:s("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:s("Shift-Left","Shift-Left"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:s("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:s("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:s("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:s("Alt-Shift-Right","Command-Shift-Right"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:s("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:s("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:s("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:s(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:s("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:s(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:s("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:s("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:s("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:s("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:s("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:s("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:s("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:s("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:s("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:s("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:s("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:s("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:s("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:s("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:s("Ctrl-H","Command-Option-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",bindKey:s("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:s("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:s("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:s("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:s("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:s("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:s("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:s("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:s("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:s("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:s("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:s("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:s("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:s("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:s("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:s("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:s("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(i.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:s(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:s("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:s("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:s("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:s("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:s(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),s=e.session.doc.getLine(n.row).length,a=e.session.doc.getTextRange(e.selection.getRange()),l=a.replace(/\n\s*/," ").length,c=e.session.doc.getLine(n.row),h=n.row+1;h<=r.row+1;h++){var u=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(h)));0!==u.length&&(u=" "+u),c+=u}r.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+l)):(s=e.session.doc.getLine(n.row).length>s?s+1:s,e.selection.moveCursorTo(n.row,s))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:s(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var s=0;s0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case"center-animate":n="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var i=this.selection.getRange(),r=this.renderer.layerConfig;(i.start.row>=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:break}"animate"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(r)||/\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"===typeof e){this.$keybindingId=e;var n=this;v.loadModule(["keybinding",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this})}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||r.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new f(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)i=t.$mode.getMatching(e.session);i&&(t.$bracketHighlight=t.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new y(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf("tag-open")||(r=i.stepForward(),r)){var o=r.value,s=0,a=i.stepBackward();if("<"==a.value)do{a=r,r=i.stepForward(),r&&r.value===o&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?s++:"=0);else{do{r=a,a=i.stepBackward(),r&&r.value===o&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?s++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new f(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,"ace_active-line","screenLine"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column-1,i=t.end.column+1,r=e.getLine(t.start.row),o=r.length,s=r.substring(Math.max(n,0),Math.min(i,o));if(!(n>=0&&/^[\w\d]/.test(s)||i<=o&&/[\w\d]$/.test(s))&&(s=r.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(s))){var a=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s});return a}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec("paste",this,n)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\r\n|\r|\n/),i=this.selection.rangeList.ranges;if(n.length>i.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,t);for(var r=i.length;r--;){var o=i[r];o.isEmpty()||this.session.remove(o),this.session.insert(o.start,n[r])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,i=n.getMode(),r=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=i.transformAction(n.getState(r.row),"insertion",this,n,e);o&&(e!==o.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=o.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()){s=new f.fromPoints(r,r);s.end.column+=e.length,this.session.remove(s)}}else{var s=this.getSelectionRange();r=this.session.remove(s),this.clearSelection()}if("\n"==e||"\r\n"==e){var a=n.getLine(r.row);if(r.column>a.search(/\S|$/)){var l=a.substr(r.column).search(/\S|$/);n.doc.removeInLine(r.row,r.column,r.column+l)}}this.clearSelection();var c=r.column,h=n.getState(r.row),u=(a=n.getLine(r.row),i.checkOutdent(h,a,e));n.insert(r,e);if(o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new f(r.row,c+o.selection[0],r.row,c+o.selection[1])):this.selection.setSelectionRange(new f(r.row+o.selection[0],o.selection[1],r.row+o.selection[2],o.selection[3]))),n.getDocument().isNewLine(e)){var d=i.getNextLineIndent(h,a.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},d)}u&&i.autoOutdent(h,n,r.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,"deletion",this,n,t);if(0===t.end.column){var o=n.getTextRange(t);if("\n"==o[o.length-1]){var s=n.getLine(t.end.row);/^\s+$/.test(s)&&(t.end.column=s.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);tt.toLowerCase()?1:0}));for(var i=new f(0,0,0,0),r=e.first;r<=e.last;r++){var o=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=o.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var i=this.session.getLine(e);while(n.lastIndex=t){var o={value:r[0],start:r.index,end:r.index+r[0].length};return o}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new f(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var o=this.getNumberAt(t,n);if(o){var s=o.value.indexOf(".")>=0?o.start+o.value.indexOf(".")+1:o.end,a=o.start+o.value.length-s,l=parseFloat(o.value);l*=Math.pow(10,a),s!==o.end&&nf+1)break;f=p.last}h--,a=this.session.$moveLines(d,f,t?0:e),t&&-1==e&&(u=h+1);while(u<=h)s[u].moveBy(a,0),u++;t||(a=0),l+=a}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection()),this.$blockScrolling--;var o=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new y(this.session,n.row,n.column),r=i.getCurrentToken(),o=r||i.stepForward();if(o){var s,a,l=!1,c={},h=n.column-o.start,u={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(o.value.match(/[{}()\[\]]/g)){for(;h=0;--o)this.$tryReplace(n[o],e)&&i++;return this.selection.setSelectionRange(r),this.$blockScrolling-=1,i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),null!==t?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&(e=this.session.getTextRange(r)||this.$search.$options.needle,e||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,n),o):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var r=this.$scrollAnchor;r.style.cssText="position:absolute",this.container.insertBefore(r,this.container.firstChild);var o=this.on("changeSelection",(function(){i=!0})),s=this.renderer.on("beforeRender",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on("afterRender",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,o=e.$cursorLayer.$pixelPos,s=e.layerConfig,a=o.top-s.offset;i=o.top>=0&&a+t.top<0||!(o.topwindow.innerHeight)&&null,null!=i&&(r.style.top=a+"px",r.style.left=o.left+"px",r.style.height=s.lineHeight+"px",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",o),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",s))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,r.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}).call(w.prototype),v.defineOptions(w.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=w})),ace.define("ace/undomanager",["require","exports","module"],(function(e,t,n){"use strict";var i=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){for(var n=new Array(e.length),i=0;i0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(i.prototype),t.UndoManager=i})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),o=e("../lib/lang"),s=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){r.implement(this,s),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;ts&&(m=o.end.row+1,o=t.getNextFoldLine(m,o),s=o?o.start.row:1/0),m>r){while(this.$cells.length>p+1)f=this.$cells.pop(),this.element.removeChild(f.element);break}f=this.$cells[++p],f||(f={element:null,textNode:null,foldWidget:null},f.element=i.createElement("div"),f.textNode=document.createTextNode(""),f.element.appendChild(f.textNode),this.element.appendChild(f.element),this.$cells[p]=f);var g="ace_gutter-cell ";l[m]&&(g+=l[m]),c[m]&&(g+=c[m]),this.$annotations[m]&&(g+=this.$annotations[m].className),f.element.className!=g&&(f.element.className=g);var v=t.getRowLength(m)*e.lineHeight+"px";if(v!=f.element.style.height&&(f.element.style.height=v),a){var y=a[m];null==y&&(y=a[m]=t.getFoldWidget(m))}if(y){f.foldWidget||(f.foldWidget=i.createElement("span"),f.element.appendChild(f.foldWidget));g="ace_fold-widget ace_"+y;"start"==y&&m==s&&mn.right-t.right?"foldWidgets":void 0}}).call(a.prototype),t.Gutter=a})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("../lib/dom"),o=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,i){return(e?1:0)|(t?2:0)|(n?4:0)|(i?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){e=e||this.config;if(e){this.config=e;var t=[];for(var n in this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var o=this.$getTop(r.start.row,e),s=this.$padding+r.start.column*e.characterWidth;i.renderer(t,r,s,o,e)}else"fullLine"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):"screenLine"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?"text"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.drawSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e)}else i.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,r,o,s){for(var a=this.session,l=n.start.row,c=n.end.row,h=l,u=0,d=0,f=a.getScreenLastRowColumn(h),p=new i(h,n.start.column,h,d);h<=c;h++)p.start.row=p.end.row=h,p.start.column=h==l?n.start.column:a.getRowWrapIndent(h),p.end.column=f,u=d,d=f,f=h+1f,h==c),o,h==c?0:1,s)},this.drawMultiLineMarker=function(e,t,n,i,r){var o=this.$padding,s=i.lineHeight,a=this.$getTop(t.start.row,i),l=o+t.start.column*i.characterWidth;r=r||"",e.push("
"),a=this.$getTop(t.end.row,i);var c=t.end.column*i.characterWidth;if(e.push("
"),s=(t.end.row-t.start.row-1)*i.lineHeight,!(s<=0)){a=this.$getTop(t.start.row+1,i);var h=(t.start.column?1:0)|(t.end.column?0:8);e.push("
")}},this.drawSingleLineMarker=function(e,t,n,i,r,o){var s=i.lineHeight,a=(t.end.column+(r||0)-t.start.column)*i.characterWidth,l=this.$getTop(t.start.row,i),c=this.$padding+t.start.column*i.characterWidth;e.push("
")},this.drawFullLineMarker=function(e,t,n,i,r){var o=this.$getTop(t.start.row,i),s=i.lineHeight;t.start.row!=t.end.row&&(s+=this.$getTop(t.end.row,i)-o),e.push("
")},this.drawScreenLineMarker=function(e,t,n,i,r){var o=this.$getTop(t.start.row,i),s=i.lineHeight;e.push("
")}}).call(o.prototype),t.Marker=o})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/dom"),o=e("../lib/lang"),s=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),a=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){i.implement(this,s),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;n"+o.stringRepeat(this.TAB_CHAR,n)+""):t.push(o.stringRepeat(" ",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var i="ace_indent-guide",r="",s="";if(this.showInvisibles){i+=" ace_invisible",r=" ace_invisible_space",s=" ace_invisible_tab";var a=o.stringRepeat(this.SPACE_CHAR,this.tabSize),l=o.stringRepeat(this.TAB_CHAR,this.tabSize)}else a=o.stringRepeat(" ",this.tabSize),l=a;this.$tabStrings[" "]=""+a+"",this.$tabStrings["\t"]=""+l+""}},this.updateLines=function(e,t,n){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var i=Math.max(t,e.firstRow),r=Math.min(n,e.lastRow),o=this.element.childNodes,s=0,a=e.firstRow;ac&&(a=l.end.row+1,l=this.session.getNextFoldLine(a,l),c=l?l.start.row:1/0),a>r)break;var h=o[s++];if(h){var u=[];this.$renderLine(u,a,!this.$useLineGroups(),a==c&&l),h.style.height=e.lineHeight*this.session.getRowLength(a)+"px",h.innerHTML=u.join("")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow0;i--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){r=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(r)}},this.$renderLinesFragment=function(e,t,n){var i=this.element.ownerDocument.createDocumentFragment(),o=t,s=this.session.getNextFoldLine(o),a=s?s.start.row:1/0;while(1){if(o>a&&(o=s.end.row+1,s=this.session.getNextFoldLine(o,s),a=s?s.start.row:1/0),o>n)break;var l=r.createElement("div"),c=[];if(this.$renderLine(c,o,!1,o==a&&s),l.innerHTML=c.join(""),this.$useLineGroups())l.className="ace_line_group",i.appendChild(l),l.style.height=e.lineHeight*this.session.getRowLength(o)+"px";else while(l.firstChild)i.appendChild(l.firstChild);o++}return i},this.update=function(e){this.config=e;var t=[],n=e.firstRow,i=e.lastRow,r=n,o=this.session.getNextFoldLine(r),s=o?o.start.row:1/0;while(1){if(r>s&&(r=o.end.row+1,o=this.session.getNextFoldLine(r,o),s=o?o.start.row:1/0),r>i)break;this.$useLineGroups()&&t.push("
"),this.$renderLine(t,r,!1,r==s&&o),this.$useLineGroups()&&t.push("
"),r++}this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){var r=this,s=/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,a=function(e,n,i,s,a){if(n)return r.showInvisibles?""+o.stringRepeat(r.SPACE_CHAR,e.length)+"":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var l=r.session.getScreenTabSize(t+s);return t+=l-1,r.$tabStrings[l]}if(" "==e){var c=r.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",h=r.showInvisibles?r.SPACE_CHAR:"";return t+=1,""+h+""}return i?""+r.SPACE_CHAR+"":(t+=1,""+e+"")},l=i.replace(s,a);if(this.$textToken[n.type])e.push(l);else{var c="ace_"+n.type.replace(/\./g," ace_"),h="";"fold"==n.type&&(h=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",l,"")}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);return i<=0||i>=n?t:" "==t[0]?(i-=i%this.tabSize,e.push(o.stringRepeat(this.$tabStrings[" "],i/this.tabSize)),t.substr(i)):"\t"==t[0]?(e.push(o.stringRepeat(this.$tabStrings["\t"],i)),t.substr(i)):t},this.$renderWrappedLine=function(e,t,n,i){for(var r=0,s=0,a=n[0],l=0,c=0;c=a)l=this.$renderToken(e,l,h,u.substring(0,a-r)),u=u.substring(a-r),r=a,i||e.push("","
"),e.push(o.stringRepeat(" ",n.indent)),s++,l=0,a=n[s]||Number.MAX_VALUE;0!=u.length&&(r+=u.length,l=this.$renderToken(e,l,h,u))}}},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var o=1;o"),r.length){var o=this.session.getRowSplitData(t);o&&o.length?this.$renderWrappedLine(e,r,o,n):this.$renderSimpleLine(e,r)}this.showInvisibles&&(i&&(t=i.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
")},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[];function r(e,t,n){var r=0,o=0;while(o+e[r].value.lengthn-t&&(s=s.substring(0,n-t)),i.push({type:e[r].type,value:s}),o=t+s.length,r+=1}while(on?i.push({type:e[r].type,value:s.substring(0,n-o)}):i.push(e[r]),o+=s.length,r+=1}}var o=n.getTokens(e);return t.walk((function(e,t,s,a,l){null!=e?i.push({type:"fold",value:e}):(l&&(o=n.getTokens(t)),o.length&&r(o,a,s))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i,r=e("../lib/dom"),o=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===i&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||i||(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),i=this.$padding+n.column*this.config.characterWidth,r=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:i,top:r}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);n=0;for(var r=t.length;ne.height+e.offset||o.top<0)&&n>1)){var s=(this.cursors[i++]||this.addCursor()).style;this.drawCursor?this.drawCursor(s,o,e,t[n],this.session):(s.left=o.left+"px",s.top=o.top+"px",s.width=e.characterWidth+"px",s.height=e.lineHeight+"px")}}while(this.cursors.length>i)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(o.prototype),t.Cursor=o})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),o=e("./lib/event"),s=e("./lib/event_emitter").EventEmitter,a=function(e){this.element=r.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=r.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,"scroll",this.onScroll.bind(this)),o.addListener(this.element,"mousedown",o.preventDefault)};(function(){i.implement(this,s),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e}}).call(a.prototype);var l=function(e,t){a.call(this,e),this.scrollTop=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};i.inherits(l,a),function(){this.classSuffix="-v",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=function(e){this.inner.style.height=e+"px"},this.setScrollHeight=function(e){this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}.call(l.prototype);var c=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(c,a),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(c.prototype),t.ScrollBar=l,t.ScrollBarV=l,t.ScrollBarH=c,t.VScrollBar=l,t.HScrollBar=c})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,n){"use strict";var i=e("./lib/event"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;i.nextFrame((function(){var e;t.pending=!1;while(e=t.changes)t.changes=0,t.onRender(e)}),this.window)}}}).call(r.prototype),t.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){var i=e("../lib/oop"),r=e("../lib/dom"),o=e("../lib/lang"),s=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,l=0,c=t.FontMetrics=function(e){this.el=r.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),l||this.$testFractionalRect(),this.$measureNode.innerHTML=o.stringRepeat("X",l),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){i.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=r.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;l=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",s.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===l){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(n){e={width:0,height:0}}var t={height:e.height,width:e.width/l}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/l};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=o.stringRepeat(e,l);var t=this.$main.getBoundingClientRect();return t.width/l},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(c.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),o=e("./config"),s=e("./lib/useragent"),a=e("./layer/gutter").Gutter,l=e("./layer/marker").Marker,c=e("./layer/text").Text,h=e("./layer/cursor").Cursor,u=e("./scrollbar").HScrollBar,d=e("./scrollbar").VScrollBar,f=e("./renderloop").RenderLoop,p=e("./layer/font_metrics").FontMetrics,m=e("./lib/event_emitter").EventEmitter,g='.ace_editor {\tposition: relative;\toverflow: hidden;\tfont: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;\tdirection: ltr;\t}\t.ace_scroller {\tposition: absolute;\toverflow: hidden;\ttop: 0;\tbottom: 0;\tbackground-color: inherit;\t-ms-user-select: none;\t-moz-user-select: none;\t-webkit-user-select: none;\tuser-select: none;\tcursor: text;\t}\t.ace_content {\tposition: absolute;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tmin-width: 100%;\t}\t.ace_dragging .ace_scroller:before{\tposition: absolute;\ttop: 0;\tleft: 0;\tright: 0;\tbottom: 0;\tcontent: \'\';\tbackground: rgba(250, 250, 250, 0.01);\tz-index: 1000;\t}\t.ace_dragging.ace_dark .ace_scroller:before{\tbackground: rgba(0, 0, 0, 0.01);\t}\t.ace_selecting, .ace_selecting * {\tcursor: text !important;\t}\t.ace_gutter {\tposition: absolute;\toverflow : hidden;\twidth: auto;\ttop: 0;\tbottom: 0;\tleft: 0;\tcursor: default;\tz-index: 4;\t-ms-user-select: none;\t-moz-user-select: none;\t-webkit-user-select: none;\tuser-select: none;\t}\t.ace_gutter-active-line {\tposition: absolute;\tleft: 0;\tright: 0;\t}\t.ace_scroller.ace_scroll-left {\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\t}\t.ace_gutter-cell {\tpadding-left: 19px;\tpadding-right: 6px;\tbackground-repeat: no-repeat;\t}\t.ace_gutter-cell.ace_error {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");\tbackground-repeat: no-repeat;\tbackground-position: 2px center;\t}\t.ace_gutter-cell.ace_warning {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");\tbackground-position: 2px center;\t}\t.ace_gutter-cell.ace_info {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");\tbackground-position: 2px center;\t}\t.ace_dark .ace_gutter-cell.ace_info {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");\t}\t.ace_scrollbar {\tposition: absolute;\tright: 0;\tbottom: 0;\tz-index: 6;\t}\t.ace_scrollbar-inner {\tposition: absolute;\tcursor: text;\tleft: 0;\ttop: 0;\t}\t.ace_scrollbar-v{\toverflow-x: hidden;\toverflow-y: scroll;\ttop: 0;\t}\t.ace_scrollbar-h {\toverflow-x: scroll;\toverflow-y: hidden;\tleft: 0;\t}\t.ace_print-margin {\tposition: absolute;\theight: 100%;\t}\t.ace_text-input {\tposition: absolute;\tz-index: 0;\twidth: 0.5em;\theight: 1em;\topacity: 0;\tbackground: transparent;\t-moz-appearance: none;\tappearance: none;\tborder: none;\tresize: none;\toutline: none;\toverflow: hidden;\tfont: inherit;\tpadding: 0 1px;\tmargin: 0 -1px;\ttext-indent: -1em;\t-ms-user-select: text;\t-moz-user-select: text;\t-webkit-user-select: text;\tuser-select: text;\twhite-space: pre!important;\t}\t.ace_text-input.ace_composition {\tbackground: inherit;\tcolor: inherit;\tz-index: 1000;\topacity: 1;\ttext-indent: 0;\t}\t.ace_layer {\tz-index: 1;\tposition: absolute;\toverflow: hidden;\tword-wrap: normal;\twhite-space: pre;\theight: 100%;\twidth: 100%;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tpointer-events: none;\t}\t.ace_gutter-layer {\tposition: relative;\twidth: auto;\ttext-align: right;\tpointer-events: auto;\t}\t.ace_text-layer {\tfont: inherit !important;\t}\t.ace_cjk {\tdisplay: inline-block;\ttext-align: center;\t}\t.ace_cursor-layer {\tz-index: 4;\t}\t.ace_cursor {\tz-index: 4;\tposition: absolute;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tborder-left: 2px solid;\ttransform: translatez(0);\t}\t.ace_slim-cursors .ace_cursor {\tborder-left-width: 1px;\t}\t.ace_overwrite-cursors .ace_cursor {\tborder-left-width: 0;\tborder-bottom: 1px solid;\t}\t.ace_hidden-cursors .ace_cursor {\topacity: 0.2;\t}\t.ace_smooth-blinking .ace_cursor {\t-webkit-transition: opacity 0.18s;\ttransition: opacity 0.18s;\t}\t.ace_editor.ace_multiselect .ace_cursor {\tborder-left-width: 1px;\t}\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\tposition: absolute;\tz-index: 3;\t}\t.ace_marker-layer .ace_selection {\tposition: absolute;\tz-index: 5;\t}\t.ace_marker-layer .ace_bracket {\tposition: absolute;\tz-index: 6;\t}\t.ace_marker-layer .ace_active-line {\tposition: absolute;\tz-index: 2;\t}\t.ace_marker-layer .ace_selected-word {\tposition: absolute;\tz-index: 4;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\t}\t.ace_line .ace_fold {\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tdisplay: inline-block;\theight: 11px;\tmargin-top: -2px;\tvertical-align: middle;\tbackground-image:\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");\tbackground-repeat: no-repeat, repeat-x;\tbackground-position: center center, top left;\tcolor: transparent;\tborder: 1px solid black;\tborder-radius: 2px;\tcursor: pointer;\tpointer-events: auto;\t}\t.ace_dark .ace_fold {\t}\t.ace_fold:hover{\tbackground-image:\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),\turl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");\t}\t.ace_tooltip {\tbackground-color: #FFF;\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\tborder: 1px solid gray;\tborder-radius: 1px;\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\tcolor: black;\tmax-width: 100%;\tpadding: 3px 4px;\tposition: fixed;\tz-index: 999999;\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tcursor: default;\twhite-space: pre;\tword-wrap: break-word;\tline-height: normal;\tfont-style: normal;\tfont-weight: normal;\tletter-spacing: normal;\tpointer-events: none;\t}\t.ace_folding-enabled > .ace_gutter-cell {\tpadding-right: 13px;\t}\t.ace_fold-widget {\t-moz-box-sizing: border-box;\t-webkit-box-sizing: border-box;\tbox-sizing: border-box;\tmargin: 0 -12px 0 1px;\tdisplay: none;\twidth: 11px;\tvertical-align: top;\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");\tbackground-repeat: no-repeat;\tbackground-position: center;\tborder-radius: 3px;\tborder: 1px solid transparent;\tcursor: pointer;\t}\t.ace_folding-enabled .ace_fold-widget {\tdisplay: inline-block; \t}\t.ace_fold-widget.ace_end {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");\t}\t.ace_fold-widget.ace_closed {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");\t}\t.ace_fold-widget:hover {\tborder: 1px solid rgba(0, 0, 0, 0.3);\tbackground-color: rgba(255, 255, 255, 0.2);\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\t}\t.ace_fold-widget:active {\tborder: 1px solid rgba(0, 0, 0, 0.4);\tbackground-color: rgba(0, 0, 0, 0.05);\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\t}\t.ace_dark .ace_fold-widget {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");\t}\t.ace_dark .ace_fold-widget.ace_end {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");\t}\t.ace_dark .ace_fold-widget.ace_closed {\tbackground-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");\t}\t.ace_dark .ace_fold-widget:hover {\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\tbackground-color: rgba(255, 255, 255, 0.1);\t}\t.ace_dark .ace_fold-widget:active {\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\t}\t.ace_fold-widget.ace_invalid {\tbackground-color: #FFB4B4;\tborder-color: #DE5555;\t}\t.ace_fade-fold-widgets .ace_fold-widget {\t-webkit-transition: opacity 0.4s ease 0.05s;\ttransition: opacity 0.4s ease 0.05s;\topacity: 0;\t}\t.ace_fade-fold-widgets:hover .ace_fold-widget {\t-webkit-transition: opacity 0.05s ease 0.05s;\ttransition: opacity 0.05s ease 0.05s;\topacity:1;\t}\t.ace_underline {\ttext-decoration: underline;\t}\t.ace_bold {\tfont-weight: bold;\t}\t.ace_nobold .ace_bold {\tfont-weight: normal;\t}\t.ace_italic {\tfont-style: italic;\t}\t.ace_error-marker {\tbackground-color: rgba(255, 0, 0,0.2);\tposition: absolute;\tz-index: 9;\t}\t.ace_highlight-marker {\tbackground-color: rgba(255, 255, 0,0.2);\tposition: absolute;\tz-index: 8;\t}\t.ace_br1 {border-top-left-radius : 3px;}\t.ace_br2 {border-top-right-radius : 3px;}\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\t.ace_br4 {border-bottom-right-radius: 3px;}\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\t.ace_br8 {border-bottom-left-radius : 3px;}\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\t';r.importCssString(g,"ace_editor.css");var v=function(e,t){var n=this;this.container=e||r.createElement("div"),this.$keepTextAreaAtCursor=!s.isOldIE,r.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=r.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=r.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=r.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var i=this.$textLayer=new c(this.content);this.canvas=i.element,this.$markerFront=new l(this.content),this.$cursorLayer=new h(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new d(this.container,this),this.scrollBarH=new u(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new f(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,m),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var o=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var r=0,o=this.$size,s={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return i&&(e||o.height!=i)&&(o.height=i,r|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",r|=this.CHANGE_SCROLL),n&&(e||o.width!=n)&&(r|=this.CHANGE_SIZE,o.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(r|=this.CHANGE_FULL)),o.$dirty=!n||!i,r&&this._signal("resize",s),r},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=r.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var i=this.textarea.style,r=this.lineHeight;if(t<0||t>e.height-r)i.top=i.left="0";else{var o=this.characterWidth;if(this.$composition){var s=this.textarea.value.replace(/^\x01+/,"");o*=this.session.$getStringScreenWidth(s)[0]+2,r+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-o&&(n=this.$size.scrollerWidth-o),n+=this.gutterWidth,i.height=r+"px",i.width=o+"px",i.left=Math.min(n,this.$size.scrollerWidth-o)+"px",i.top=Math.min(t,this.$size.height-r)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.max((this.$minLines||1)*this.lineHeight,Math.min(t,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight());var i=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength(),r=i*this.lineHeight,o=this.$getLongestLine(),s=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-o-2*this.$padding<0),a=this.$horizScroll!==s;a&&(this.$horizScroll=s,this.scrollBarH.setVisible(s));var l=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var c=this.scrollTop%this.lineHeight,h=t.scrollerHeight+this.lineHeight,u=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;r+=u;var d=this.scrollMargin;this.session.setScrollTop(Math.max(-d.top,Math.min(this.scrollTop,r-t.scrollerHeight+d.bottom))),this.session.setScrollLeft(Math.max(-d.left,Math.min(this.scrollLeft,o+2*this.$padding-t.scrollerWidth+d.right)));var f=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-r+u<0||this.scrollTop>d.top),p=l!==f;p&&(this.$vScroll=f,this.scrollBarV.setVisible(f));var m,g,v=Math.ceil(h/this.lineHeight)-1,y=Math.max(0,Math.round((this.scrollTop-c)/this.lineHeight)),w=y+v,b=this.lineHeight;y=e.screenToDocumentRow(y,0);var A=e.getFoldLine(y);A&&(y=A.start.row),m=e.documentToScreenRow(y,0),g=e.getRowLength(y)*b,w=Math.min(e.screenToDocumentRow(w,0),e.getLength()-1),h=t.scrollerHeight+e.getRowLength(w)*b+g,c=this.scrollTop-m*b;var C=0;return this.layerConfig.width!=o&&(C=this.CHANGE_H_SCROLL),(a||p)&&(C=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),p&&(o=this.$getLongestLine())),this.layerConfig={width:o,padding:this.$padding,firstRow:y,firstRowScreen:m,lastRow:w,lineHeight:b,characterWidth:this.characterWidth,minHeight:h,maxHeight:r,offset:c,gutterOffset:Math.max(0,Math.ceil((c+t.height-t.scrollerHeight)/b)),height:this.$size.scrollerHeight},C},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1)&&!(to?(t&&l+s>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):l+this.$size.scrollerHeight-ar?(r=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,r=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),o=Math.round(i);return{row:r,column:o,side:i-o>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),r=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(r,Math.max(i,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+Math.round(i.column*this.characterWidth),o=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+o-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){r.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,r.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(r.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var n=this;if(this.$themeId=e,n._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)s(e);else{var i=e||this.$options.theme.initialValue;o.loadModule(["theme",i],s)}function s(i){if(n.$themeId!=e)return t&&t();if(i.cssClass){r.importCssString(i.cssText,i.cssClass,n.container.ownerDocument),n.theme&&r.removeCssClass(n.container,n.theme.cssClass);var o="padding"in i?i.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&o!=n.$padding&&n.setPadding(o),n.$theme=i.cssClass,n.theme=i,r.addCssClass(n.container,i.cssClass),r.setCssClass(n.container,"ace_dark",i.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:i}),t&&t()}}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){r.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){r.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(v.prototype),o.defineOptions(v.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){r.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=r.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=v})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(e,t,i){"use strict";var r=e("../lib/oop"),o=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,a=e("../config"),l=function(t,i,r,o){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),a.get("packaged")||!e.toUrl)o=o||a.moduleUrl(i.id,"worker");else{var s=this.$normalizePath;o=o||s(e.toUrl("ace/worker/worker.js",null,"_"));var l={};t.forEach((function(t){l[t]=s(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}try{var c=i.src,h=n(66),u=new h([c],{type:"application/javascript"}),d=(window.URL||window.webkitURL).createObjectURL(u);this.$worker=new Worker(d)}catch(m){if(!(m instanceof window.DOMException))throw m;u=this.$workerBlob(o);var f=window.URL||window.webkitURL,p=f.createObjectURL(u);this.$worker=new Worker(p),f.revokeObjectURL(p)}this.$worker.postMessage({init:!0,tlns:l,module:i.id,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data);break}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return o.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var i=this.callbackId++;this.callbacks[i]=n,t.push(i)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))},this.$workerBlob=function(e){var t="importScripts('"+o.qualifyURL(e)+"');";try{return new Blob([t],{type:"application/javascript"})}catch(r){var n=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,i=new n;return i.append(t),i.getBlob("application/javascript")}}}).call(l.prototype);var c=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var i=null,r=!1,o=Object.create(s),l=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){l.messageBuffer.push(e),i&&(r?setTimeout(c):c())},this.setEmitSync=function(e){r=e};var c=function(){var e=l.messageBuffer.shift();e.command?i[e.command].apply(i,e.args):e.event&&o._signal(e.event,e.data)};o.postMessage=function(e){l.onMessage({data:e})},o.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},o.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},a.loadModule(["worker",t],(function(e){i=new e[n](o);while(l.messageBuffer.length)c()}))};c.prototype=l.prototype,t.UIWorkerClient=c,t.WorkerClient=l})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./range").Range,r=e("./lib/event_emitter").EventEmitter,o=e("./lib/oop"),s=function(e,t,n,i,r,o){var s=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){s.onCursorChange()}))},this.$pos=n;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){o.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if("insert"===e.action)for(var s=this.others.length-1;s>=0;s--){var a=this.others[s],l={row:a.row,column:a.column+o};this.doc.insertMergedLines(l,e.lines)}else if("remove"===e.action)for(s=this.others.length-1;s>=0;s--){a=this.others[s],l={row:a.row,column:a.column+o};this.doc.remove(new i(l.row,l.column,l.row,l.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),o=n.start.row,s=n.end.row;if(o==s){if(i)var a=n.end,l=n.start;else a=n.start,l=n.end;return this.addRange(r.fromPoints(l,l)),void this.addRange(r.fromPoints(a,a))}var c=[],h=this.getLineRange(o,!0);h.start.column=n.start.column,c.push(h);for(var u=o+1;u1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.selectionLead),o=this.session.documentToScreenPosition(this.selectionAnchor),s=this.rectangularRangeBlock(i,o);s.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],o=e.column0)p--;if(p>0){var g=0;while(i[g].isEmpty())g++}for(var v=p;v>=g;v--)i[v].isEmpty()&&i.splice(v,1)}return i}}.call(o.prototype);var p=e("./editor").Editor;function m(e,t){return e.row==t.row&&e.column==t.column}function g(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",s),e.commands.addCommands(c.defaultCommands),v(e))}function v(e){var t=e.textInput.getElement(),n=!1;function i(t){n&&(e.renderer.setMouseCursor(""),n=!1)}a.addListener(t,"keydown",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor("crosshair"),n=!0):n&&i()})),a.addListener(t,"keyup",i),a.addListener(t,"blur",i)}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(c.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(c.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?i=n.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,s=1==n||n&&n.$byLines,a=this.session,l=this.selection,c=l.rangeList,h=(r?l:c).ranges;if(!h.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var u=l._eventRegistry;l._eventRegistry={};var d=new o(a);this.inVirtualSelectionMode=!0;for(var f=h.length;f--;){if(s)while(f>0&&h[f].start.row==h[f-1].end.row)f--;d.fromOrientedRange(h[f]),d.index=f,this.selection=a.selection=d;var p=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===p||(i=p),d.toOrientedRange(h[f])}d.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=u,l.mergeOverlappingRanges();var m=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),m&&m.from==m.to&&this.renderer.animateScrolling(m.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;is&&(s=n.column),rh?e.insert(i,l.stringRepeat(" ",o-h)):e.remove(new r(i.row,i.column,i.row,i.column-o+h)),t.start.column=t.end.column=s,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var h=this.selection.getRange(),u=h.start.row,d=h.end.row,f=u==d;if(f){var p,m=this.session.getLength();do{p=this.session.getLine(d)}while(/[=:]/.test(p)&&++d0);u<0&&(u=0),d>=m&&(d=m-1)}var g=this.session.removeFullLines(u,d);g=this.$reAlignText(g,f),this.session.insert({row:u,column:0},g.join("\n")+"\n"),f||(h.start.column=0,h.end.column=g[g.length-1].length),this.selection.setRange(h)}},this.$reAlignText=function(e,t){var n,i,r,o=!0,s=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(s=!1),n!=t[1].length&&(o=!1),n>t[1].length&&(n=t[1].length),it[3].length&&(r=t[3].length),t):[e]})).map(t?c:o?s?h:c:u);function a(e){return l.stringRepeat(" ",e)}function c(e){return e[2]?a(n)+e[2]+a(i-e[2].length+r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function h(e){return e[2]?a(n+i-e[2].length)+e[2]+a(r," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function u(e){return e[2]?a(n)+e[2]+a(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(p.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=g,e("./config").defineOptions(p.prototype,"editor",{enableMultiselect:{set:function(e){g(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",s)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",s))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../../range").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\S/,o=e.getLine(t),s=o.search(r);if(-1!=s){var a=n||o.length,l=e.getLength(),c=t,h=t;while(++tc){var d=e.getLine(h).length;return new i(c,a,h,d)}}},this.openingBracketBlock=function(e,t,n,r,o){var s={row:n,column:r+1},a=e.$findClosingBracket(t,s,o);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),"start"==l&&a.row>s.row&&(a.row--,a.column=e.getLine(a.row).length),i.fromPoints(s,a)}},this.closingBracketBlock=function(e,t,n,r,o){var s={row:n,column:r},a=e.$findOpeningBracket(t,s);if(a)return a.column++,s.column--,i.fromPoints(a,s)}}).call(r.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {\tbackground: #f0f0f0;\tcolor: #333;\t}\t.ace-tm .ace_print-margin {\twidth: 1px;\tbackground: #e8e8e8;\t}\t.ace-tm .ace_fold {\tbackground-color: #6B72E6;\t}\t.ace-tm {\tbackground-color: #FFFFFF;\tcolor: black;\t}\t.ace-tm .ace_cursor {\tcolor: black;\t}\t.ace-tm .ace_invisible {\tcolor: rgb(191, 191, 191);\t}\t.ace-tm .ace_storage,\t.ace-tm .ace_keyword {\tcolor: blue;\t}\t.ace-tm .ace_constant {\tcolor: rgb(197, 6, 11);\t}\t.ace-tm .ace_constant.ace_buildin {\tcolor: rgb(88, 72, 246);\t}\t.ace-tm .ace_constant.ace_language {\tcolor: rgb(88, 92, 246);\t}\t.ace-tm .ace_constant.ace_library {\tcolor: rgb(6, 150, 14);\t}\t.ace-tm .ace_invalid {\tbackground-color: rgba(255, 0, 0, 0.1);\tcolor: red;\t}\t.ace-tm .ace_support.ace_function {\tcolor: rgb(60, 76, 114);\t}\t.ace-tm .ace_support.ace_constant {\tcolor: rgb(6, 150, 14);\t}\t.ace-tm .ace_support.ace_type,\t.ace-tm .ace_support.ace_class {\tcolor: rgb(109, 121, 222);\t}\t.ace-tm .ace_keyword.ace_operator {\tcolor: rgb(104, 118, 135);\t}\t.ace-tm .ace_string {\tcolor: rgb(3, 106, 7);\t}\t.ace-tm .ace_comment {\tcolor: rgb(76, 136, 107);\t}\t.ace-tm .ace_comment.ace_doc {\tcolor: rgb(0, 102, 255);\t}\t.ace-tm .ace_comment.ace_doc.ace_tag {\tcolor: rgb(128, 159, 191);\t}\t.ace-tm .ace_constant.ace_numeric {\tcolor: rgb(0, 0, 205);\t}\t.ace-tm .ace_variable {\tcolor: rgb(49, 132, 149);\t}\t.ace-tm .ace_xml-pe {\tcolor: rgb(104, 104, 91);\t}\t.ace-tm .ace_entity.ace_name.ace_function {\tcolor: #0000A2;\t}\t.ace-tm .ace_heading {\tcolor: rgb(12, 7, 255);\t}\t.ace-tm .ace_list {\tcolor:rgb(185, 6, 144);\t}\t.ace-tm .ace_meta.ace_tag {\tcolor:rgb(0, 22, 142);\t}\t.ace-tm .ace_string.ace_regex {\tcolor: rgb(255, 0, 0)\t}\t.ace-tm .ace_marker-layer .ace_selection {\tbackground: rgb(181, 213, 255);\t}\t.ace-tm.ace_multiselect .ace_selection.ace_start {\tbox-shadow: 0 0 3px 0px white;\t}\t.ace-tm .ace_marker-layer .ace_step {\tbackground: rgb(252, 255, 0);\t}\t.ace-tm .ace_marker-layer .ace_stack {\tbackground: rgb(164, 229, 101);\t}\t.ace-tm .ace_marker-layer .ace_bracket {\tmargin: -1px 0 0 -1px;\tborder: 1px solid rgb(192, 192, 192);\t}\t.ace-tm .ace_marker-layer .ace_active-line {\tbackground: rgba(0, 0, 0, 0.07);\t}\t.ace-tm .ace_gutter-active-line {\tbackground-color : #dcdcdc;\t}\t.ace-tm .ace_marker-layer .ace_selected-word {\tbackground: rgb(250, 250, 255);\tborder: 1px solid rgb(200, 200, 250);\t}\t.ace-tm .ace_indent-guide {\tbackground: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;\t}\t';var i=e("../lib/dom");i.importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");e("./range").Range;function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,o=i.end.row,s="add"==e.action,a=r+1;a0&&!i[r])r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var s=r;s<=o;s++){var a=i[s];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:s,column:0},!0).top;a.coverLine||(l+=n.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-n.offset+"px";var c=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(c-=t.scrollLeft),a.el.style.left=c+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=n.width+2*n.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}).call(r.prototype),t.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";var i=e("../line_widgets").LineWidgets,r=e("../lib/dom"),o=e("../range").Range;function s(e,t,n){var i=0,r=e.length-1;while(i<=r){var o=i+r>>1,s=n(t,e[o]);if(s>0)i=o+1;else{if(!(s<0))return o;r=o-1}}return-(i+1)}function a(e,t,n){var i=e.getAnnotations().sort(o.comparePoints);if(i.length){var r=s(i,{row:t,column:-1},o.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var a=i[r];if(a&&n){if(a.row===t){do{a=i[r+=n]}while(a&&a.row===t);if(!a)return i.slice()}var l=[];t=a.row;do{l[n<0?"unshift":"push"](a),a=i[r+=n]}while(a&&a.row==t);return l.length&&l}}}t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var o=e.getCursorPosition(),s=o.row,l=n.widgetManager.getWidgetsAtRow(s).filter((function(e){return"errorMarker"==e.type}))[0];l?l.destroy():s-=t;var c,h=a(n,s,t);if(h){var u=h[0];o.column=(u.pos&&"number"!=typeof u.column?u.pos.sc:u.column)||0,o.row=u.row,c=e.renderer.$gutterLayer.$annotations[o.row]}else{if(l)return;c={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(o.row),e.selection.moveToPosition(o);var d={row:o.row,fixedWidth:!0,coverGutter:!0,el:r.createElement("div"),type:"errorMarker"},f=d.el.appendChild(r.createElement("div")),p=d.el.appendChild(r.createElement("div"));p.className="error_widget_arrow "+c.className;var m=e.renderer.$cursorLayer.getPixelPosition(o).left;p.style.left=m+e.renderer.gutterWidth-5+"px",d.el.className="error_widget_wrapper",f.className="error_widget "+c.className,f.innerHTML=c.text.join("
"),f.appendChild(r.createElement("div"));var g=function(e,t,n){if(0===t&&("esc"===n||"return"===n))return d.destroy(),{command:"null"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(g),n.widgetManager.removeLineWidget(d),e.off("changeSelection",d.destroy),e.off("changeSession",d.destroy),e.off("mouseup",d.destroy),e.off("change",d.destroy))},e.keyBinding.addKeyboardHandler(g),e.on("changeSelection",d.destroy),e.on("changeSession",d.destroy),e.on("mouseup",d.destroy),e.on("change",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},r.importCssString("\t .error_widget_wrapper {\t background: inherit;\t color: inherit;\t border:none\t }\t .error_widget {\t border-top: solid 2px;\t border-bottom: solid 2px;\t margin: 5px 0;\t padding: 10px 40px;\t white-space: pre-wrap;\t }\t .error_widget.ace_error, .error_widget_arrow.ace_error{\t border-color: #ff5a5a\t }\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\t border-color: #F1D817\t }\t .error_widget.ace_info, .error_widget_arrow.ace_info{\t border-color: #5a5a5a\t }\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\t border-color: #5aaa5a\t }\t .error_widget_arrow {\t position: absolute;\t border: solid 5px;\t border-top-color: transparent!important;\t border-right-color: transparent!important;\t border-left-color: transparent!important;\t top: -5px;\t }\t","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var i=e("./lib/dom"),r=e("./lib/event"),o=e("./editor").Editor,s=e("./edit_session").EditSession,a=e("./undomanager").UndoManager,l=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.acequire=e,t.edit=function(e){if("string"==typeof e){var n=e;if(e=document.getElementById(n),!e)throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var s="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;s=a.value,e=i.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(s=i.getInnerText(e),e.innerHTML="");var c=t.createEditSession(s),h=new o(new l(e));h.setSession(c);var u={document:c,editor:h,onResize:h.resize.bind(h,null)};return a&&(u.textarea=a),r.addListener(window,"resize",u.onResize),h.on("destroy",(function(){r.removeListener(window,"resize",u.onResize),u.editor.container.env=null})),h.container.env=h.env=u,h},t.createEditSession=function(e,t){var n=new s(e,t);return n.setUndoManager(new a),n},t.EditSession=s,t.UndoManager=a,t.version="1.2.3"})),function(){ace.acequire(["ace/ace"],(function(e){for(var t in e&&e.config.init(!0),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])}))}(),e.exports=window.ace.acequire("ace/ace")},function(e,t){e.exports=function(){throw new Error("define cannot be used indirect")}},function(e,t){(function(t){function n(){if(t.Blob)try{return new Blob(["asdf"],{type:"text/plain"}),Blob}catch(n){}var e=t.WebKitBlobBuilder||t.MozBlobBuilder||t.MSBlobBuilder;return function(t,n){var i=new e,r=n.endings,o=n.type;if(r)for(var s=0,a=t.length;s-1},f.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),o=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,o,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+o.substr(r.column),i.autoInsertedBrackets++},f.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),o=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,o)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=o.substr(0,r.column)+n,i.maybeInsertedLineEnd=o.substr(r.column),i.maybeInsertedBrackets++},f.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},f.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},f.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},f.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(f,o),t.CstyleBehaviour=f})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(e,t,n){"use strict";var i=e("../../lib/oop"),r=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};i.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return"";var r=this._getFoldWidgetBase(e,t,n);return!r&&this.startRegionRe.test(i)?"start":r},this.getFoldWidgetRange=function(e,t,n,i){var r=e.getLine(n);if(this.startRegionRe.test(r))return this.getCommentRegionBlock(e,r,n);var o=r.match(this.foldingStartMarker);if(o){var s=o.index;if(o[1])return this.openingBracketBlock(e,o[1],n,s);var a=e.getCommentFoldRange(n,s+o[0].length,1);return a&&!a.isMultiLine()&&(i?a=this.getSectionRange(e,n):"all"!=t&&(a=null)),a}if("markbegin"!==t){o=r.match(this.foldingStopMarker);if(o){s=o.index+o[0].length;return o[1]?this.closingBracketBlock(e,o[1],n,s):e.getCommentFoldRange(n,s,-1)}}},this.getSectionRange=function(e,t){var n=e.getLine(t),i=n.search(/\S/),o=t,s=n.length;t+=1;var a=t,l=e.getLength();while(++tc)break;var h=this.getFoldWidgetRange(e,"all",t);if(h){if(h.start.row<=o)break;if(h.isMultiLine())t=h.end.row;else if(i==c)break}a=t}}return new r(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){var i=t.search(/\s*$/),o=e.getLength(),s=n,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;while(++ns)return new r(s,i,h,t.length)}}.call(s.prototype)})),ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"],(function(e,t,i){"use strict";var r=e("../lib/oop"),o=e("./text").Mode,s=e("./json_highlight_rules").JsonHighlightRules,a=e("./matching_brace_outdent").MatchingBraceOutdent,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,h=e("../worker/worker_client").WorkerClient,u=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new l,this.foldingRules=new c};r.inherits(u,o),function(){this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t);if("start"==e){var r=t.match(/^.*[\{\(\[]\s*$/);r&&(i+=n)}return i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new h(["ace"],n(68),"JsonWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",(function(t){e.setAnnotations(t.data)})),t.on("terminate",(function(){e.clearAnnotations()})),t},this.$id="ace/mode/json"}.call(u.prototype),t.Mode=u}))},function(e,t){e.exports.id="ace/mode/json_worker",e.exports.src='"no use strict";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail="";testPath;){var alias=paths[testPath];if("string"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,"/")+(tail||alias.main||alias.name);if(alias===!1)return"";var i=testPath.lastIndexOf("/");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:"error",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf("!")){var chunks=moduleName.split("!");return window.normalizeModule(parentId,chunks[0])+"!"+window.normalizeModule(parentId,chunks[1])}if("."==moduleName.charAt(0)){var base=parentId.split("/").slice(0,-1).join("/");for(moduleName=(base?base+"/":"")+moduleName;-1!==moduleName.indexOf(".")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,"").replace(/\\/\\.\\//,"/").replace(/[^\\/]+\\/\\.\\.\\//,"")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error("worker.js acequire() accepts only (parentId, id) as arguments");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log("unable to load "+id);var path=resolveModuleId(id,window.acequire.tlns);return".js"!=path.slice(-3)&&(path+=".js"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,"string"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),"function"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=["require","exports","module"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case"require":return req;case"exports":return module.exports;case"module":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire("ace/lib/event_emitter").EventEmitter,oop=window.acequire("ace/lib/oop"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:"call",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:"event",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error("Unknown command:"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire("ace/lib/es5-shim"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define("ace/lib/oop",["require","exports","module"],function(acequire,exports){"use strict";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define("ace/range",["require","exports","module"],function(acequire,exports){"use strict";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){"object"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){"object"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define("ace/apply_delta",["require","exports","module"],function(acequire,exports){"use strict";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||"";switch(delta.action){case"insert":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case"remove":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(acequire,exports){"use strict";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){"object"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?"unshift":"push"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),EventEmitter=acequire("./lib/event_emitter").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal("change",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),applyDelta=acequire("./apply_delta").applyDelta,EventEmitter=acequire("./lib/event_emitter").EventEmitter,Range=acequire("./range").Range,Anchor=acequire("./anchor").Anchor,Document=function(textOrLines){this.$lines=[""],0===textOrLines.length?this.$lines=[""]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0==="aaa".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,"\\n").split("\\n")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:"\\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\\r\\n";case"unix":return"\\n";default:return this.$autoNewLine||"\\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return"\\r\\n"==text||"\\r"==text||"\\n"==text},this.getLine=function(row){return this.$lines[row]||""},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||"").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."),this.insertMergedLines(position,["",""])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:"insert",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([""]),column=0):(lines=[""].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:"insert",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:"remove",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:"remove",lines:["",""]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert="insert"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal("change",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(""),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:"insert"==delta.action?"remove":"insert",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define("ace/lib/lang",["require","exports","module"],function(acequire,exports){"use strict";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split("").reverse().join("")},exports.stringRepeat=function(string,count){for(var result="";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,"")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,"")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&"object"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if("object"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,"\\\\$1")},exports.escapeHTML=function(str){return str.replace(/&/g,"&").replace(/"/g,""").replace(/\'/g,"'").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:"insert",start:data[i],lines:data[i+1]};else var d={action:"remove",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define("ace/mode/json/json_parse",["require","exports","module"],function(){"use strict";var at,ch,text,value,escapee={\'"\':\'"\',"\\\\":"\\\\","/":"/",b:"\\b",f:"\\f",n:"\\n",r:"\\r",t:"\t"},error=function(m){throw{name:"SyntaxError",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error("Expected \'"+c+"\' instead of \'"+ch+"\'"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string="";for("-"===ch&&(string="-",next("-"));ch>="0"&&"9">=ch;)string+=ch,next();if("."===ch)for(string+=".";next()&&ch>="0"&&"9">=ch;)string+=ch;if("e"===ch||"E"===ch)for(string+=ch,next(),("-"===ch||"+"===ch)&&(string+=ch,next());ch>="0"&&"9">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error("Bad number"),void 0):number},string=function(){var hex,i,uffff,string="";if(\'"\'===ch)for(;next();){if(\'"\'===ch)return next(),string;if("\\\\"===ch)if(next(),"u"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if("string"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error("Bad string")},white=function(){for(;ch&&" ">=ch;)next()},word=function(){switch(ch){case"t":return next("t"),next("r"),next("u"),next("e"),!0;case"f":return next("f"),next("a"),next("l"),next("s"),next("e"),!1;case"n":return next("n"),next("u"),next("l"),next("l"),null}error("Unexpected \'"+ch+"\'")},array=function(){var array=[];if("["===ch){if(next("["),white(),"]"===ch)return next("]"),array;for(;ch;){if(array.push(value()),white(),"]"===ch)return next("]"),array;next(","),white()}}error("Bad array")},object=function(){var key,object={};if("{"===ch){if(next("{"),white(),"}"===ch)return next("}"),object;for(;ch;){if(key=string(),white(),next(":"),Object.hasOwnProperty.call(object,key)&&error(\'Duplicate key "\'+key+\'"\'),object[key]=value(),white(),"}"===ch)return next("}"),object;next(","),white()}}error("Bad object")};return value=function(){switch(white(),ch){case"{":return object();case"[":return array();case\'"\':return string();case"-":return number();default:return ch>="0"&&"9">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=" ",result=value(),white(),ch&&error("Syntax error"),"function"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&"object"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({"":result},""):result}}),ace.define("ace/mode/json_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/json/json_parse"],function(acequire,exports){"use strict";var oop=acequire("../lib/oop"),Mirror=acequire("../worker/mirror").Mirror,parse=acequire("./json/json_parse"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:"error"})}this.sender.emit("annotate",errors)}}.call(JsonWorker.prototype)}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,"sentinel",{}),"sentinel"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if("function"!=typeof target)throw new TypeError("Function.prototype.bind called on incompatible "+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,"__defineGetter__"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,"XXX"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return"[object Array]"==_toString(obj)});var boxedString=Object("a"),splitString="a"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,thisp=arguments[1],i=-1,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=[],thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError("reduce of empty array with no initial value")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError("reduceRight of empty array with no initial value")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(object,property){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if("object"!=typeof prototype)throw new TypeError("typeof prototype["+typeof prototype+"] != \'object\'");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom="undefined"==typeof document||doesDefinePropertyWork(document.createElement("div"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR="Property description must be an object: ",ERR_NON_OBJECT_TARGET="Object.defineProperty called on non-object: ",ERR_ACCESSORS_NOT_SUPPORTED="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(object,property,descriptor){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if("object"!=typeof descriptor&&"function"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,"value"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,"get")&&defineGetter(object,property,descriptor.get),owns(descriptor,"set")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return"function"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name="";owns(object,name);)name+="?";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError("Object.keys called on a non-object");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws="\t\\n\v\\f\\r   ᠎              \\u2028\\u2029\ufeff";if(!String.prototype.trim||ws.trim()){ws="["+ws+"]";var trimBeginRegexp=RegExp("^"+ws+ws+"*"),trimEndRegexp=RegExp(ws+ws+"*$");String.prototype.trim=function(){return(this+"").replace(trimBeginRegexp,"").replace(trimEndRegexp,"")}}var toObject=function(o){if(null==o)throw new TypeError("can\'t convert "+o+" to object");return Object(o)}});'},function(e,t){ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/lang"),o=e("../lib/event"),s="\t.ace_search {\tbackground-color: #ddd;\tborder: 1px solid #cbcbcb;\tborder-top: 0 none;\tmax-width: 325px;\toverflow: hidden;\tmargin: 0;\tpadding: 4px;\tpadding-right: 6px;\tpadding-bottom: 0;\tposition: absolute;\ttop: 0px;\tz-index: 99;\twhite-space: normal;\t}\t.ace_search.left {\tborder-left: 0 none;\tborder-radius: 0px 0px 5px 0px;\tleft: 0;\t}\t.ace_search.right {\tborder-radius: 0px 0px 0px 5px;\tborder-right: 0 none;\tright: 0;\t}\t.ace_search_form, .ace_replace_form {\tborder-radius: 3px;\tborder: 1px solid #cbcbcb;\tfloat: left;\tmargin-bottom: 4px;\toverflow: hidden;\t}\t.ace_search_form.ace_nomatch {\toutline: 1px solid red;\t}\t.ace_search_field {\tbackground-color: white;\tborder-right: 1px solid #cbcbcb;\tborder: 0 none;\t-webkit-box-sizing: border-box;\t-moz-box-sizing: border-box;\tbox-sizing: border-box;\tfloat: left;\theight: 22px;\toutline: 0;\tpadding: 0 7px;\twidth: 214px;\tmargin: 0;\t}\t.ace_searchbtn,\t.ace_replacebtn {\tbackground: #fff;\tborder: 0 none;\tborder-left: 1px solid #dcdcdc;\tcursor: pointer;\tfloat: left;\theight: 22px;\tmargin: 0;\tposition: relative;\t}\t.ace_searchbtn:last-child,\t.ace_replacebtn:last-child {\tborder-top-right-radius: 3px;\tborder-bottom-right-radius: 3px;\t}\t.ace_searchbtn:disabled {\tbackground: none;\tcursor: default;\t}\t.ace_searchbtn {\tbackground-position: 50% 50%;\tbackground-repeat: no-repeat;\twidth: 27px;\t}\t.ace_searchbtn.prev {\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \t}\t.ace_searchbtn.next {\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \t}\t.ace_searchbtn_close {\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\tborder-radius: 50%;\tborder: 0 none;\tcolor: #656565;\tcursor: pointer;\tfloat: right;\tfont: 16px/16px Arial;\theight: 14px;\tmargin: 5px 1px 9px 5px;\tpadding: 0;\ttext-align: center;\twidth: 14px;\t}\t.ace_searchbtn_close:hover {\tbackground-color: #656565;\tbackground-position: 50% 100%;\tcolor: white;\t}\t.ace_replacebtn.prev {\twidth: 54px\t}\t.ace_replacebtn.next {\twidth: 27px\t}\t.ace_button {\tmargin-left: 2px;\tcursor: pointer;\t-webkit-user-select: none;\t-moz-user-select: none;\t-o-user-select: none;\t-ms-user-select: none;\tuser-select: none;\toverflow: hidden;\topacity: 0.7;\tborder: 1px solid rgba(100,100,100,0.23);\tpadding: 1px;\t-moz-box-sizing: border-box;\tbox-sizing: border-box;\tcolor: black;\t}\t.ace_button:hover {\tbackground-color: #eee;\topacity:1;\t}\t.ace_button:active {\tbackground-color: #ddd;\t}\t.ace_button.checked {\tborder-color: #3399ff;\topacity:1;\t}\t.ace_search_options{\tmargin-bottom: 3px;\ttext-align: right;\t-webkit-user-select: none;\t-moz-user-select: none;\t-o-user-select: none;\t-ms-user-select: none;\tuser-select: none;\t}",a=e("../keyboard/hash_handler").HashHandler,l=e("../lib/keys");i.importCssString(s,"ace_searchbox");var c=''.replace(/>\s+/g,">"),h=function(e,t,n){var r=i.createElement("div");r.innerHTML=c,this.element=r.firstChild,this.$init(),this.setEditor(e)};(function(){this.setEditor=function(e){e.searchBox=this,e.container.appendChild(this.element),this.editor=e},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOptions=e.querySelector(".ace_search_options"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;o.addListener(e,"mousedown",(function(e){setTimeout((function(){t.activeInput.focus()}),0),o.stopPropagation(e)})),o.addListener(e,"click",(function(e){var n=e.target||e.srcElement,i=n.getAttribute("action");i&&t[i]?t[i]():t.$searchBarKb.commands[i]&&t.$searchBarKb.commands[i].exec(t),o.stopPropagation(e)})),o.addCommandKeyListener(e,(function(e,n,i){var r=l.keyCodeToString(i),s=t.$searchBarKb.findKeyCommand(n,r);s&&s.exec&&(s.exec(t),o.stopEvent(e))})),this.$onChange=r.delayedCall((function(){t.find(!1,!1)})),o.addListener(this.searchInput,"input",(function(){t.$onChange.schedule(20)})),o.addListener(this.searchInput,"focus",(function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()})),o.addListener(this.replaceInput,"focus",(function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()}))},this.$closeSearchBarKb=new a([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new a,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e.searchInput.focus()},"Ctrl-H|Command-Option-F":function(e){e.replaceBox.style.display="",e.replaceInput.focus()},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout((function(){e.hide()}))},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}}]),this.$syncOptions=function(){i.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),i.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),i.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var r=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n}),o=!r&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",o),this.editor._emit("findSearchBox",{match:!o}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.element.style.display="",this.replaceBox.style.display=t?"":"none",this.isReplace=t,e&&(this.searchInput.value=e),this.find(!1,!1,!0),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(h.prototype),t.SearchBox=h,t.Search=function(e,t){var n=e.searchBox||new h(e);n.show(e.session.getTextRange(),t)}})),function(){ace.acequire(["ace/ext/searchbox"],(function(){}))}()},function(e,t){ace.define("ace/theme/jsoneditor",["require","exports","module","ace/lib/dom"],(function(e,t,n){t.isDark=!1,t.cssClass="ace-jsoneditor",t.cssText='.ace-jsoneditor .ace_gutter {\tbackground: #ebebeb;\tcolor: #333\t}\t\t.ace-jsoneditor.ace_editor {\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\tline-height: 1.3;\t}\t.ace-jsoneditor .ace_print-margin {\twidth: 1px;\tbackground: #e8e8e8\t}\t.ace-jsoneditor .ace_scroller {\tbackground-color: #FFFFFF\t}\t.ace-jsoneditor .ace_text-layer {\tcolor: gray\t}\t.ace-jsoneditor .ace_variable {\tcolor: #1a1a1a\t}\t.ace-jsoneditor .ace_cursor {\tborder-left: 2px solid #000000\t}\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\tborder-left: 0px;\tborder-bottom: 1px solid #000000\t}\t.ace-jsoneditor .ace_marker-layer .ace_selection {\tbackground: lightgray\t}\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\tbox-shadow: 0 0 3px 0px #FFFFFF;\tborder-radius: 2px\t}\t.ace-jsoneditor .ace_marker-layer .ace_step {\tbackground: rgb(255, 255, 0)\t}\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\tmargin: -1px 0 0 -1px;\tborder: 1px solid #BFBFBF\t}\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\tbackground: #FFFBD1\t}\t.ace-jsoneditor .ace_gutter-active-line {\tbackground-color : #dcdcdc\t}\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\tborder: 1px solid lightgray\t}\t.ace-jsoneditor .ace_invisible {\tcolor: #BFBFBF\t}\t.ace-jsoneditor .ace_keyword,\t.ace-jsoneditor .ace_meta,\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\tcolor: #AF956F\t}\t.ace-jsoneditor .ace_keyword.ace_operator {\tcolor: #484848\t}\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\tcolor: #96DC5F\t}\t.ace-jsoneditor .ace_constant.ace_language {\tcolor: darkorange\t}\t.ace-jsoneditor .ace_constant.ace_numeric {\tcolor: red\t}\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\tcolor: #BF78CC\t}\t.ace-jsoneditor .ace_invalid {\tcolor: #FFFFFF;\tbackground-color: #FF002A;\t}\t.ace-jsoneditor .ace_fold {\tbackground-color: #AF956F;\tborder-color: #000000\t}\t.ace-jsoneditor .ace_storage,\t.ace-jsoneditor .ace_support.ace_class,\t.ace-jsoneditor .ace_support.ace_function,\t.ace-jsoneditor .ace_support.ace_other,\t.ace-jsoneditor .ace_support.ace_type {\tcolor: #C52727\t}\t.ace-jsoneditor .ace_string {\tcolor: green\t}\t.ace-jsoneditor .ace_comment {\tcolor: #BCC8BA\t}\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\tcolor: #606060\t}\t.ace-jsoneditor .ace_markup.ace_underline {\ttext-decoration: underline\t}\t.ace-jsoneditor .ace_indent-guide {\tbackground: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y\t}';var i=e("../lib/dom");i.importCssString(t.cssText,t.cssClass)}))}])}))},345:function(e,t,n){"use strict";function i(e,t){for(var n in t)e[n]=t[n];return e}n.d(t,{ZP:function(){return Ct}});var r=/[!'()*]/g,o=function(e){return"%"+e.charCodeAt(0).toString(16)},s=/%2C/g,a=function(e){return encodeURIComponent(e).replace(r,o).replace(s,",")};function l(e){try{return decodeURIComponent(e)}catch(t){0}return e}function c(e,t,n){void 0===t&&(t={});var i,r=n||u;try{i=r(e||"")}catch(a){i={}}for(var o in t){var s=t[o];i[o]=Array.isArray(s)?s.map(h):h(s)}return i}var h=function(e){return null==e||"object"===typeof e?e:String(e)};function u(e){var t={};return e=e.trim().replace(/^(\?|#|&)/,""),e?(e.split("&").forEach((function(e){var n=e.replace(/\+/g," ").split("="),i=l(n.shift()),r=n.length>0?l(n.join("=")):null;void 0===t[i]?t[i]=r:Array.isArray(t[i])?t[i].push(r):t[i]=[t[i],r]})),t):t}function d(e){var t=e?Object.keys(e).map((function(t){var n=e[t];if(void 0===n)return"";if(null===n)return a(t);if(Array.isArray(n)){var i=[];return n.forEach((function(e){void 0!==e&&(null===e?i.push(a(t)):i.push(a(t)+"="+a(e)))})),i.join("&")}return a(t)+"="+a(n)})).filter((function(e){return e.length>0})).join("&"):null;return t?"?"+t:""}var f=/\/?$/;function p(e,t,n,i){var r=i&&i.options.stringifyQuery,o=t.query||{};try{o=m(o)}catch(a){}var s={name:t.name||e&&e.name,meta:e&&e.meta||{},path:t.path||"/",hash:t.hash||"",query:o,params:t.params||{},fullPath:y(t,r),matched:e?v(e):[]};return n&&(s.redirectedFrom=y(n,r)),Object.freeze(s)}function m(e){if(Array.isArray(e))return e.map(m);if(e&&"object"===typeof e){var t={};for(var n in e)t[n]=m(e[n]);return t}return e}var g=p(null,{path:"/"});function v(e){var t=[];while(e)t.unshift(e),e=e.parent;return t}function y(e,t){var n=e.path,i=e.query;void 0===i&&(i={});var r=e.hash;void 0===r&&(r="");var o=t||d;return(n||"/")+o(i)+r}function w(e,t,n){return t===g?e===t:!!t&&(e.path&&t.path?e.path.replace(f,"")===t.path.replace(f,"")&&(n||e.hash===t.hash&&b(e.query,t.query)):!(!e.name||!t.name)&&(e.name===t.name&&(n||e.hash===t.hash&&b(e.query,t.query)&&b(e.params,t.params))))}function b(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e===t;var n=Object.keys(e).sort(),i=Object.keys(t).sort();return n.length===i.length&&n.every((function(n,r){var o=e[n],s=i[r];if(s!==n)return!1;var a=t[n];return null==o||null==a?o===a:"object"===typeof o&&"object"===typeof a?b(o,a):String(o)===String(a)}))}function A(e,t){return 0===e.path.replace(f,"/").indexOf(t.path.replace(f,"/"))&&(!t.hash||e.hash===t.hash)&&C(e.query,t.query)}function C(e,t){for(var n in t)if(!(n in e))return!1;return!0}function E(e){for(var t=0;t=0&&(t=e.slice(i),e=e.slice(0,i));var r=e.indexOf("?");return r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),{path:e,query:n,hash:t}}function k(e){return e.replace(/\/(?:\s*\/)+/g,"/")}var D=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},B=Q,L=M,R=j,T=H,O=Y,P=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function M(e,t){var n,i=[],r=0,o=0,s="",a=t&&t.delimiter||"/";while(null!=(n=P.exec(e))){var l=n[0],c=n[1],h=n.index;if(s+=e.slice(o,h),o=h+l.length,c)s+=c[1];else{var u=e[o],d=n[2],f=n[3],p=n[4],m=n[5],g=n[6],v=n[7];s&&(i.push(s),s="");var y=null!=d&&null!=u&&u!==d,w="+"===g||"*"===g,b="?"===g||"*"===g,A=n[2]||a,C=p||m;i.push({name:f||r++,prefix:d||"",delimiter:A,optional:b,repeat:w,partial:y,asterisk:!!v,pattern:C?V(C):v?".*":"[^"+W(A)+"]+?"})}}return o1||!F.length)return 0===F.length?e():e("span",{},F)}if("a"===this.tag)E.on=C,E.attrs={href:l,"aria-current":y};else{var x=se(this.$slots.default);if(x){x.isStatic=!1;var _=x.data=i({},x.data);for(var S in _.on=_.on||{},_.on){var $=_.on[S];S in C&&(_.on[S]=Array.isArray($)?$:[$])}for(var k in C)k in _.on?_.on[k].push(C[k]):_.on[k]=b;var D=x.data.attrs=i({},x.data.attrs);D.href=l,D["aria-current"]=y}else E.on=C}return e(this.tag,E,this.$slots.default)}};function oe(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(void 0===e.button||0===e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function se(e){if(e)for(var t,n=0;n-1&&(a.params[u]=n.params[u]);return a.path=X(c.path,a.params,'named route "'+l+'"'),d(c,a,s)}if(a.path){a.params={};for(var f=0;f-1}function Ke(e,t){return Ue(e)&&e._isRouter&&(null==t||e.type===t)}function qe(e,t,n){var i=function(r){r>=e.length?n():e[r]?t(e[r],(function(){i(r+1)})):i(r+1)};i(0)}function Ge(e){return function(t,n,i){var r=!1,o=0,s=null;Ye(e,(function(e,t,n,a){if("function"===typeof e&&void 0===e.cid){r=!0,o++;var l,c=Ze((function(t){Xe(t)&&(t=t.default),e.resolved="function"===typeof t?t:ee.extend(t),n.components[a]=t,o--,o<=0&&i()})),h=Ze((function(e){var t="Failed to resolve async component "+a+": "+e;s||(s=Ue(e)?e:new Error(t),i(s))}));try{l=e(c,h)}catch(d){h(d)}if(l)if("function"===typeof l.then)l.then(c,h);else{var u=l.component;u&&"function"===typeof u.then&&u.then(c,h)}}})),r||i()}}function Ye(e,t){return Qe(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function Qe(e){return Array.prototype.concat.apply([],e)}var Je="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Xe(e){return e.__esModule||Je&&"Module"===e[Symbol.toStringTag]}function Ze(e){var t=!1;return function(){var n=[],i=arguments.length;while(i--)n[i]=arguments[i];if(!t)return t=!0,e.apply(this,n)}}var et=function(e,t){this.router=e,this.base=tt(t),this.current=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function tt(e){if(!e)if(le){var t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^https?:\/\/[^\/]+/,"")}else e="/";return"/"!==e.charAt(0)&&(e="/"+e),e.replace(/\/$/,"")}function nt(e,t){var n,i=Math.max(e.length,t.length);for(n=0;n0)){var t=this.router,n=t.options.scrollBehavior,i=Te&&n;i&&this.listeners.push(Ce());var r=function(){var n=e.current,r=ut(e.base);e.current===g&&r===e._startLocation||e.transitionTo(r,(function(e){i&&Ee(t,e,n,!0)}))};window.addEventListener("popstate",r),this.listeners.push((function(){window.removeEventListener("popstate",r)}))}},t.prototype.go=function(e){window.history.go(e)},t.prototype.push=function(e,t,n){var i=this,r=this,o=r.current;this.transitionTo(e,(function(e){Oe(k(i.base+e.fullPath)),Ee(i.router,e,o,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this,r=this,o=r.current;this.transitionTo(e,(function(e){Pe(k(i.base+e.fullPath)),Ee(i.router,e,o,!1),t&&t(e)}),n)},t.prototype.ensureURL=function(e){if(ut(this.base)!==this.current.fullPath){var t=k(this.base+this.current.fullPath);e?Oe(t):Pe(t)}},t.prototype.getCurrentLocation=function(){return ut(this.base)},t}(et);function ut(e){var t=window.location.pathname,n=t.toLowerCase(),i=e.toLowerCase();return!e||n!==i&&0!==n.indexOf(k(i+"/"))||(t=t.slice(e.length)),(t||"/")+window.location.search+window.location.hash}var dt=function(e){function t(t,n,i){e.call(this,t,n),i&&ft(this.base)||pt()}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router,n=t.options.scrollBehavior,i=Te&&n;i&&this.listeners.push(Ce());var r=function(){var t=e.current;pt()&&e.transitionTo(mt(),(function(n){i&&Ee(e.router,n,t,!0),Te||yt(n.fullPath)}))},o=Te?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},t.prototype.push=function(e,t,n){var i=this,r=this,o=r.current;this.transitionTo(e,(function(e){vt(e.fullPath),Ee(i.router,e,o,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this,r=this,o=r.current;this.transitionTo(e,(function(e){yt(e.fullPath),Ee(i.router,e,o,!1),t&&t(e)}),n)},t.prototype.go=function(e){window.history.go(e)},t.prototype.ensureURL=function(e){var t=this.current.fullPath;mt()!==t&&(e?vt(t):yt(t))},t.prototype.getCurrentLocation=function(){return mt()},t}(et);function ft(e){var t=ut(e);if(!/^\/#/.test(t))return window.location.replace(k(e+"/#"+t)),!0}function pt(){var e=mt();return"/"===e.charAt(0)||(yt("/"+e),!1)}function mt(){var e=window.location.href,t=e.indexOf("#");return t<0?"":(e=e.slice(t+1),e)}function gt(e){var t=window.location.href,n=t.indexOf("#"),i=n>=0?t.slice(0,n):t;return i+"#"+e}function vt(e){Te?Oe(gt(e)):window.location.hash=e}function yt(e){Te?Pe(gt(e)):window.location.replace(gt(e))}var wt=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index+1).concat(e),i.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var i=this.stack[n];this.confirmTransition(i,(function(){var e=t.current;t.index=n,t.updateRoute(i),t.router.afterHooks.forEach((function(t){t&&t(i,e)}))}),(function(e){Ke(e,Me.duplicated)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(et),bt=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=fe(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!Te&&!1!==e.fallback,this.fallback&&(t="hash"),le||(t="abstract"),this.mode=t,t){case"history":this.history=new ht(this,e.base);break;case"hash":this.history=new dt(this,e.base,this.fallback);break;case"abstract":this.history=new wt(this,e.base);break;default:0}},At={currentRoute:{configurable:!0}};bt.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},At.currentRoute.get=function(){return this.history&&this.history.current},bt.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null),t.app||t.history.teardown()})),!this.app){this.app=e;var n=this.history;if(n instanceof ht||n instanceof dt){var i=function(e){var i=n.current,r=t.options.scrollBehavior,o=Te&&r;o&&"fullPath"in e&&Ee(t,e,i,!1)},r=function(e){n.setupListeners(),i(e)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},bt.prototype.beforeEach=function(e){return Et(this.beforeHooks,e)},bt.prototype.beforeResolve=function(e){return Et(this.resolveHooks,e)},bt.prototype.afterEach=function(e){return Et(this.afterHooks,e)},bt.prototype.onReady=function(e,t){this.history.onReady(e,t)},bt.prototype.onError=function(e){this.history.onError(e)},bt.prototype.push=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){i.history.push(e,t,n)}));this.history.push(e,t,n)},bt.prototype.replace=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){i.history.replace(e,t,n)}));this.history.replace(e,t,n)},bt.prototype.go=function(e){this.history.go(e)},bt.prototype.back=function(){this.go(-1)},bt.prototype.forward=function(){this.go(1)},bt.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},bt.prototype.resolve=function(e,t,n){t=t||this.history.current;var i=Z(e,t,n,this),r=this.match(i,t),o=r.redirectedFrom||r.fullPath,s=this.history.base,a=Ft(s,o,this.mode);return{location:i,route:r,href:a,normalizedTo:i,resolved:r}},bt.prototype.getRoutes=function(){return this.matcher.getRoutes()},bt.prototype.addRoute=function(e,t){this.matcher.addRoute(e,t),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},bt.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(bt.prototype,At);var Ct=bt;function Et(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function Ft(e,t,n){var i="hash"===n?"#"+t:t;return e?k(e+"/"+i):i}bt.install=ae,bt.version="3.6.5",bt.isNavigationFailure=Ke,bt.NavigationFailureType=Me,bt.START_LOCATION=g,le&&window.Vue&&window.Vue.use(bt)},144:function(e,t,n){"use strict";n.d(t,{ZP:function(){return Ji}}); +/*! + * Vue.js v2.7.15 + * (c) 2014-2023 Evan You + * Released under the MIT License. + */ +var i=Object.freeze({}),r=Array.isArray;function o(e){return void 0===e||null===e}function s(e){return void 0!==e&&null!==e}function a(e){return!0===e}function l(e){return!1===e}function c(e){return"string"===typeof e||"number"===typeof e||"symbol"===typeof e||"boolean"===typeof e}function h(e){return"function"===typeof e}function u(e){return null!==e&&"object"===typeof e}var d=Object.prototype.toString;function f(e){return"[object Object]"===d.call(e)}function p(e){return"[object RegExp]"===d.call(e)}function m(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function g(e){return s(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function v(e){return null==e?"":Array.isArray(e)||f(e)&&e.toString===d?JSON.stringify(e,null,2):String(e)}function y(e){var t=parseFloat(e);return isNaN(t)?e:t}function w(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r-1)return e.splice(i,1)}}var C=Object.prototype.hasOwnProperty;function E(e,t){return C.call(e,t)}function F(e){var t=Object.create(null);return function(n){var i=t[n];return i||(t[n]=e(n))}}var x=/-(\w)/g,_=F((function(e){return e.replace(x,(function(e,t){return t?t.toUpperCase():""}))})),S=F((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),$=/\B([A-Z])/g,k=F((function(e){return e.replace($,"-$1").toLowerCase()}));function D(e,t){function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function B(e,t){return e.bind(t)}var L=Function.prototype.bind?B:D;function R(e,t){t=t||0;var n=e.length-t,i=new Array(n);while(n--)i[n]=e[n+t];return i}function T(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,ie=ee&&ee.indexOf("edge/")>0;ee&&ee.indexOf("android");var re=ee&&/iphone|ipad|ipod|ios/.test(ee);ee&&/chrome\/\d+/.test(ee),ee&&/phantomjs/.test(ee);var oe,se=ee&&ee.match(/firefox\/(\d+)/),ae={}.watch,le=!1;if(Z)try{var ce={};Object.defineProperty(ce,"passive",{get:function(){le=!0}}),window.addEventListener("test-passive",null,ce)}catch(Xs){}var he=function(){return void 0===oe&&(oe=!Z&&"undefined"!==typeof n.g&&(n.g["process"]&&"server"===n.g["process"].env.VUE_ENV)),oe},ue=Z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function de(e){return"function"===typeof e&&/native code/.test(e.toString())}var fe,pe="undefined"!==typeof Symbol&&de(Symbol)&&"undefined"!==typeof Reflect&&de(Reflect.ownKeys);fe="undefined"!==typeof Set&&de(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var me=null;function ge(e){void 0===e&&(e=null),e||me&&me._scope.off(),me=e,e&&e._scope.on()}var ve=function(){function e(e,t,n,i,r,o,s,a){this.tag=e,this.data=t,this.children=n,this.text=i,this.elm=r,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=s,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=a,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),ye=function(e){void 0===e&&(e="");var t=new ve;return t.text=e,t.isComment=!0,t};function we(e){return new ve(void 0,void 0,void 0,String(e))}function be(e){var t=new ve(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var Ae=0,Ce=[],Ee=function(){for(var e=0;e0&&(i=lt(i,"".concat(t||"","_").concat(n)),at(i[0])&&at(h)&&(u[l]=we(h.text+i[0].text),i.shift()),u.push.apply(u,i)):c(i)?at(h)?u[l]=we(h.text+i):""!==i&&u.push(we(i)):at(i)&&at(h)?u[l]=we(h.text+i.text):(a(e._isVList)&&s(i.tag)&&o(i.key)&&s(t)&&(i.key="__vlist".concat(t,"_").concat(n,"__")),u.push(i)));return u}function ct(e,t){var n,i,o,a,l=null;if(r(e)||"string"===typeof e)for(l=new Array(e.length),n=0,i=e.length;n0,a=t?!!t.$stable:!s,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==i&&l===r.$key&&!s&&!r.$hasNormal)return r;for(var c in o={},t)t[c]&&"$"!==c[0]&&(o[c]=$t(e,n,c,t[c]))}else o={};for(var h in n)h in o||(o[h]=kt(n,h));return t&&Object.isExtensible(t)&&(t._normalized=o),Y(o,"$stable",a),Y(o,"$key",l),Y(o,"$hasNormal",s),o}function $t(e,t,n,i){var o=function(){var t=me;ge(e);var n=arguments.length?i.apply(null,arguments):i({});n=n&&"object"===typeof n&&!r(n)?[n]:st(n);var o=n&&n[0];return ge(t),n&&(!o||1===n.length&&o.isComment&&!_t(o))?void 0:n};return i.proxy&&Object.defineProperty(t,n,{get:o,enumerable:!0,configurable:!0}),o}function kt(e,t){return function(){return e[t]}}function Dt(e){var t=e.$options,n=t.setup;if(n){var i=e._setupContext=Bt(e);ge(e),_e();var r=Qt(n,null,[e._props||We({}),i],e,"setup");if(Se(),ge(),h(r))t.render=r;else if(u(r))if(e._setupState=r,r.__sfc){var o=e._setupProxy={};for(var s in r)"__sfc"!==s&&Ke(o,r,s)}else for(var s in r)G(s)||Ke(e,r,s);else 0}}function Bt(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};Y(t,"_v_attr_proxy",!0),Lt(t,e.$attrs,i,e,"$attrs")}return e._attrsProxy},get listeners(){if(!e._listenersProxy){var t=e._listenersProxy={};Lt(t,e.$listeners,i,e,"$listeners")}return e._listenersProxy},get slots(){return Tt(e)},emit:L(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ke(e,t,n)}))}}}function Lt(e,t,n,i,r){var o=!1;for(var s in t)s in e?t[s]!==n[s]&&(o=!0):(o=!0,Rt(e,s,i,r));for(var s in e)s in t||(o=!0,delete e[s]);return o}function Rt(e,t,n,i){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[i][t]}})}function Tt(e){return e._slotsProxy||Ot(e._slotsProxy={},e.$scopedSlots),e._slotsProxy}function Ot(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}function Pt(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,r=n&&n.context;e.$slots=Ft(t._renderChildren,r),e.$scopedSlots=n?St(e.$parent,n.data.scopedSlots,e.$slots):i,e._c=function(t,n,i,r){return Ut(e,t,n,i,r,!1)},e.$createElement=function(t,n,i,r){return Ut(e,t,n,i,r,!0)};var o=n&&n.data;je(e,"$attrs",o&&o.attrs||i,null,!0),je(e,"$listeners",t._parentListeners||i,null,!0)}var Mt=null;function jt(e){Et(e.prototype),e.prototype.$nextTick=function(e){return cn(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,i=n.render,o=n._parentVnode;o&&t._isMounted&&(t.$scopedSlots=St(t.$parent,o.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&Ot(t._slotsProxy,t.$scopedSlots)),t.$vnode=o;try{ge(t),Mt=t,e=i.call(t._renderProxy,t.$createElement)}catch(Xs){Yt(Xs,t,"render"),e=t._vnode}finally{Mt=null,ge()}return r(e)&&1===e.length&&(e=e[0]),e instanceof ve||(e=ye()),e.parent=o,e}}function It(e,t){return(e.__esModule||pe&&"Module"===e[Symbol.toStringTag])&&(e=e.default),u(e)?t.extend(e):e}function Nt(e,t,n,i,r){var o=ye();return o.asyncFactory=e,o.asyncMeta={data:t,context:n,children:i,tag:r},o}function Ht(e,t){if(a(e.error)&&s(e.errorComp))return e.errorComp;if(s(e.resolved))return e.resolved;var n=Mt;if(n&&s(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),a(e.loading)&&s(e.loadingComp))return e.loadingComp;if(n&&!s(e.owners)){var i=e.owners=[n],r=!0,l=null,c=null;n.$on("hook:destroyed",(function(){return A(i,n)}));var h=function(e){for(var t=0,n=i.length;t1?R(n):n;for(var i=R(arguments,1),r='event handler for "'.concat(e,'"'),o=0,s=n.length;odocument.createEvent("Event").timeStamp&&(Vn=function(){return zn.now()})}var Un=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function Kn(){var e,t;for(Wn=Vn(),In=!0,On.sort(Un),Nn=0;NnNn&&On[n].id>e.id)n--;On.splice(n+1,0,e)}else On.push(e);jn||(jn=!0,cn(Kn))}}function Jn(e){var t=e.$options.provide;if(t){var n=h(t)?t.call(e):t;if(!u(n))return;for(var i=Xe(e),r=pe?Reflect.ownKeys(n):Object.keys(n),o=0;o-1)if(o&&!E(r,"default"))s=!1;else if(""===s||s===k(e)){var l=Di(String,r.type);(l<0||a-1)return this;var n=R(arguments,1);return n.unshift(this),h(e.install)?e.install.apply(e,n):h(e)&&e.apply(null,n),t.push(e),this}}function Zi(e){e.mixin=function(e){return this.options=Ei(this.options,e),this}}function er(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i=n.cid,r=e._Ctor||(e._Ctor={});if(r[i])return r[i];var o=ri(e)||ri(n.options);var s=function(e){this._init(e)};return s.prototype=Object.create(n.prototype),s.prototype.constructor=s,s.cid=t++,s.options=Ei(n.options,e),s["super"]=n,s.options.props&&tr(s),s.options.computed&&nr(s),s.extend=n.extend,s.mixin=n.mixin,s.use=n.use,z.forEach((function(e){s[e]=n[e]})),o&&(s.options.components[o]=s),s.superOptions=n.options,s.extendOptions=e,s.sealedOptions=T({},s.options),r[i]=s,s}}function tr(e){var t=e.options.props;for(var n in t)Li(e.prototype,"_props",n)}function nr(e){var t=e.options.computed;for(var n in t)Ii(e.prototype,n,t[n])}function ir(e){z.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&f(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&h(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function rr(e){return e&&(ri(e.Ctor.options)||e.tag)}function or(e,t){return r(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!p(e)&&e.test(t)}function sr(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var o in n){var s=n[o];if(s){var a=s.name;a&&!t(a)&&ar(n,o,i,r)}}}function ar(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),e[t]=null,A(n,t)}qi(Ji),Ui(Ji),Fn(Ji),$n(Ji),jt(Ji);var lr=[String,RegExp,Array],cr={name:"keep-alive",abstract:!0,props:{include:lr,exclude:lr,max:[String,Number]},methods:{cacheVNode:function(){var e=this,t=e.cache,n=e.keys,i=e.vnodeToCache,r=e.keyToCache;if(i){var o=i.tag,s=i.componentInstance,a=i.componentOptions;t[r]={name:rr(a),tag:o,componentInstance:s},n.push(r),this.max&&n.length>parseInt(this.max)&&ar(t,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)ar(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){sr(e,(function(e){return or(t,e)}))})),this.$watch("exclude",(function(t){sr(e,(function(e){return!or(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=Wt(e),n=t&&t.componentOptions;if(n){var i=rr(n),r=this,o=r.include,s=r.exclude;if(o&&(!i||!or(o,i))||s&&i&&or(s,i))return t;var a=this,l=a.cache,c=a.keys,h=null==t.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):t.key;l[h]?(t.componentInstance=l[h].componentInstance,A(c,h),c.push(h)):(this.vnodeToCache=t,this.keyToCache=h),t.data.keepAlive=!0}return t||e&&e[0]}},hr={KeepAlive:cr};function ur(e){var t={get:function(){return K}};Object.defineProperty(e,"config",t),e.util={warn:di,extend:T,mergeOptions:Ei,defineReactive:je},e.set=Ie,e.delete=Ne,e.nextTick=cn,e.observable=function(e){return Me(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,T(e.options.components,hr),Xi(e),Zi(e),er(e),ir(e)}ur(Ji),Object.defineProperty(Ji.prototype,"$isServer",{get:he}),Object.defineProperty(Ji.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ji,"FunctionalRenderContext",{value:ei}),Ji.version=dn;var dr=w("style,class"),fr=w("input,textarea,option,select,progress"),pr=function(e,t,n){return"value"===n&&fr(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},mr=w("contenteditable,draggable,spellcheck"),gr=w("events,caret,typing,plaintext-only"),vr=function(e,t){return Cr(t)||"false"===t?"false":"contenteditable"===e&&gr(t)?t:"true"},yr=w("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),wr="http://www.w3.org/1999/xlink",br=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Ar=function(e){return br(e)?e.slice(6,e.length):""},Cr=function(e){return null==e||!1===e};function Er(e){var t=e.data,n=e,i=e;while(s(i.componentInstance))i=i.componentInstance._vnode,i&&i.data&&(t=Fr(i.data,t));while(s(n=n.parent))n&&n.data&&(t=Fr(t,n.data));return xr(t.staticClass,t.class)}function Fr(e,t){return{staticClass:_r(e.staticClass,t.staticClass),class:s(e.class)?[e.class,t.class]:t.class}}function xr(e,t){return s(e)||s(t)?_r(e,Sr(t)):""}function _r(e,t){return e?t?e+" "+t:e:t||""}function Sr(e){return Array.isArray(e)?$r(e):u(e)?kr(e):"string"===typeof e?e:""}function $r(e){for(var t,n="",i=0,r=e.length;i-1?Or[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Or[e]=/HTMLUnknownElement/.test(t.toString())}var Mr=w("text,number,password,search,email,tel,url");function jr(e){if("string"===typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function Ir(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function Nr(e,t){return document.createElementNS(Dr[e],t)}function Hr(e){return document.createTextNode(e)}function Wr(e){return document.createComment(e)}function Vr(e,t,n){e.insertBefore(t,n)}function zr(e,t){e.removeChild(t)}function Ur(e,t){e.appendChild(t)}function Kr(e){return e.parentNode}function qr(e){return e.nextSibling}function Gr(e){return e.tagName}function Yr(e,t){e.textContent=t}function Qr(e,t){e.setAttribute(t,"")}var Jr=Object.freeze({__proto__:null,createElement:Ir,createElementNS:Nr,createTextNode:Hr,createComment:Wr,insertBefore:Vr,removeChild:zr,appendChild:Ur,parentNode:Kr,nextSibling:qr,tagName:Gr,setTextContent:Yr,setStyleScope:Qr}),Xr={create:function(e,t){Zr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Zr(e,!0),Zr(t))},destroy:function(e){Zr(e,!0)}};function Zr(e,t){var n=e.data.ref;if(s(n)){var i=e.context,o=e.componentInstance||e.elm,a=t?null:o,l=t?void 0:o;if(h(n))Qt(n,i,[a],i,"template ref function");else{var c=e.data.refInFor,u="string"===typeof n||"number"===typeof n,d=Ue(n),f=i.$refs;if(u||d)if(c){var p=u?f[n]:n.value;t?r(p)&&A(p,o):r(p)?p.includes(o)||p.push(o):u?(f[n]=[o],eo(i,n,f[n])):n.value=[o]}else if(u){if(t&&f[n]!==o)return;f[n]=l,eo(i,n,a)}else if(d){if(t&&n.value!==o)return;n.value=a}else 0}}}function eo(e,t,n){var i=e._setupState;i&&E(i,t)&&(Ue(i[t])?i[t].value=n:i[t]=n)}var to=new ve("",{},[]),no=["create","activate","update","remove","destroy"];function io(e,t){return e.key===t.key&&e.asyncFactory===t.asyncFactory&&(e.tag===t.tag&&e.isComment===t.isComment&&s(e.data)===s(t.data)&&ro(e,t)||a(e.isAsyncPlaceholder)&&o(t.asyncFactory.error))}function ro(e,t){if("input"!==e.tag)return!0;var n,i=s(n=e.data)&&s(n=n.attrs)&&n.type,r=s(n=t.data)&&s(n=n.attrs)&&n.type;return i===r||Mr(i)&&Mr(r)}function oo(e,t,n){var i,r,o={};for(i=t;i<=n;++i)r=e[i].key,s(r)&&(o[r]=i);return o}function so(e){var t,n,i={},l=e.modules,h=e.nodeOps;for(t=0;tm?(u=o(n[y+1])?null:n[y+1].elm,F(e,u,n,f,y,i)):f>y&&_(t,d,m)}function k(e,t,n,i){for(var r=n;r-1?yo(e,t,n):yr(t)?Cr(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):mr(t)?e.setAttribute(t,vr(t,n)):br(t)?Cr(n)?e.removeAttributeNS(wr,Ar(t)):e.setAttributeNS(wr,t,n):yo(e,t,n)}function yo(e,t,n){if(Cr(n))e.removeAttribute(t);else{if(te&&!ne&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var i=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",i)};e.addEventListener("input",i),e.__ieph=!0}e.setAttribute(t,n)}}var wo={create:go,update:go};function bo(e,t){var n=t.elm,i=t.data,r=e.data;if(!(o(i.staticClass)&&o(i.class)&&(o(r)||o(r.staticClass)&&o(r.class)))){var a=Er(t),l=n._transitionClasses;s(l)&&(a=_r(a,Sr(l))),a!==n._prevClass&&(n.setAttribute("class",a),n._prevClass=a)}}var Ao,Co={create:bo,update:bo},Eo="__r",Fo="__c";function xo(e){if(s(e[Eo])){var t=te?"change":"input";e[t]=[].concat(e[Eo],e[t]||[]),delete e[Eo]}s(e[Fo])&&(e.change=[].concat(e[Fo],e.change||[]),delete e[Fo])}function _o(e,t,n){var i=Ao;return function r(){var o=t.apply(null,arguments);null!==o&&ko(e,r,n,i)}}var So=en&&!(se&&Number(se[1])<=53);function $o(e,t,n,i){if(So){var r=Wn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Ao.addEventListener(e,t,le?{capture:n,passive:i}:n)}function ko(e,t,n,i){(i||Ao).removeEventListener(e,t._wrapper||t,n)}function Do(e,t){if(!o(e.data.on)||!o(t.data.on)){var n=t.data.on||{},i=e.data.on||{};Ao=t.elm||e.elm,xo(n),tt(n,i,$o,ko,_o,t.context),Ao=void 0}}var Bo,Lo={create:Do,update:Do,destroy:function(e){return Do(e,to)}};function Ro(e,t){if(!o(e.data.domProps)||!o(t.data.domProps)){var n,i,r=t.elm,l=e.data.domProps||{},c=t.data.domProps||{};for(n in(s(c.__ob__)||a(c._v_attr_proxy))&&(c=t.data.domProps=T({},c)),l)n in c||(r[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),i===l[n])continue;1===r.childNodes.length&&r.removeChild(r.childNodes[0])}if("value"===n&&"PROGRESS"!==r.tagName){r._value=i;var h=o(i)?"":String(i);To(r,h)&&(r.value=h)}else if("innerHTML"===n&&Lr(r.tagName)&&o(r.innerHTML)){Bo=Bo||document.createElement("div"),Bo.innerHTML="".concat(i,"");var u=Bo.firstChild;while(r.firstChild)r.removeChild(r.firstChild);while(u.firstChild)r.appendChild(u.firstChild)}else if(i!==l[n])try{r[n]=i}catch(Xs){}}}}function To(e,t){return!e.composing&&("OPTION"===e.tagName||Oo(e,t)||Po(e,t))}function Oo(e,t){var n=!0;try{n=document.activeElement!==e}catch(Xs){}return n&&e.value!==t}function Po(e,t){var n=e.value,i=e._vModifiers;if(s(i)){if(i.number)return y(n)!==y(t);if(i.trim)return n.trim()!==t.trim()}return n!==t}var Mo={create:Ro,update:Ro},jo=F((function(e){var t={},n=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function Io(e){var t=No(e.style);return e.staticStyle?T(e.staticStyle,t):t}function No(e){return Array.isArray(e)?O(e):"string"===typeof e?jo(e):e}function Ho(e,t){var n,i={};if(t){var r=e;while(r.componentInstance)r=r.componentInstance._vnode,r&&r.data&&(n=Io(r.data))&&T(i,n)}(n=Io(e.data))&&T(i,n);var o=e;while(o=o.parent)o.data&&(n=Io(o.data))&&T(i,n);return i}var Wo,Vo=/^--/,zo=/\s*!important$/,Uo=function(e,t,n){if(Vo.test(t))e.style.setProperty(t,n);else if(zo.test(n))e.style.setProperty(k(t),n.replace(zo,""),"important");else{var i=qo(t);if(Array.isArray(n))for(var r=0,o=n.length;r-1?t.split(Qo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" ".concat(e.getAttribute("class")||""," ");n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Xo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Qo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{var n=" ".concat(e.getAttribute("class")||""," "),i=" "+t+" ";while(n.indexOf(i)>=0)n=n.replace(i," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function Zo(e){if(e){if("object"===typeof e){var t={};return!1!==e.css&&T(t,es(e.name||"v")),T(t,e),t}return"string"===typeof e?es(e):void 0}}var es=F((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),ts=Z&&!ne,ns="transition",is="animation",rs="transition",os="transitionend",ss="animation",as="animationend";ts&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(rs="WebkitTransition",os="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ss="WebkitAnimation",as="webkitAnimationEnd"));var ls=Z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function cs(e){ls((function(){ls(e)}))}function hs(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Jo(e,t))}function us(e,t){e._transitionClasses&&A(e._transitionClasses,t),Xo(e,t)}function ds(e,t,n){var i=ps(e,t),r=i.type,o=i.timeout,s=i.propCount;if(!r)return n();var a=r===ns?os:as,l=0,c=function(){e.removeEventListener(a,h),n()},h=function(t){t.target===e&&++l>=s&&c()};setTimeout((function(){l0&&(n=ns,h=s,u=o.length):t===is?c>0&&(n=is,h=c,u=l.length):(h=Math.max(s,c),n=h>0?s>c?ns:is:null,u=n?n===ns?o.length:l.length:0);var d=n===ns&&fs.test(i[rs+"Property"]);return{type:n,timeout:h,propCount:u,hasTransform:d}}function ms(e,t){while(e.length1}function As(e,t){!0!==t.data.show&&vs(t)}var Cs=Z?{create:As,activate:As,remove:function(e,t){!0!==e.data.show?ys(e,t):t()}}:{},Es=[wo,Co,Lo,Mo,Yo,Cs],Fs=Es.concat(mo),xs=so({nodeOps:Jr,modules:Fs});ne&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&Rs(e,"input")}));var _s={inserted:function(e,t,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?nt(n,"postpatch",(function(){_s.componentUpdated(e,t,n)})):Ss(e,t,n.context),e._vOptions=[].map.call(e.options,Ds)):("textarea"===n.tag||Mr(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",Bs),e.addEventListener("compositionend",Ls),e.addEventListener("change",Ls),ne&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Ss(e,t,n.context);var i=e._vOptions,r=e._vOptions=[].map.call(e.options,Ds);if(r.some((function(e,t){return!I(e,i[t])}))){var o=e.multiple?t.value.some((function(e){return ks(e,r)})):t.value!==t.oldValue&&ks(t.value,r);o&&Rs(e,"change")}}}};function Ss(e,t,n){$s(e,t,n),(te||ie)&&setTimeout((function(){$s(e,t,n)}),0)}function $s(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){for(var o,s,a=0,l=e.options.length;a-1,s.selected!==o&&(s.selected=o);else if(I(Ds(s),i))return void(e.selectedIndex!==a&&(e.selectedIndex=a));r||(e.selectedIndex=-1)}}function ks(e,t){return t.every((function(t){return!I(t,e)}))}function Ds(e){return"_value"in e?e._value:e.value}function Bs(e){e.target.composing=!0}function Ls(e){e.target.composing&&(e.target.composing=!1,Rs(e.target,"input"))}function Rs(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Ts(e){return!e.componentInstance||e.data&&e.data.transition?e:Ts(e.componentInstance._vnode)}var Os={bind:function(e,t,n){var i=t.value;n=Ts(n);var r=n.data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;i&&r?(n.data.show=!0,vs(n,(function(){e.style.display=o}))):e.style.display=i?o:"none"},update:function(e,t,n){var i=t.value,r=t.oldValue;if(!i!==!r){n=Ts(n);var o=n.data&&n.data.transition;o?(n.data.show=!0,i?vs(n,(function(){e.style.display=e.__vOriginalDisplay})):ys(n,(function(){e.style.display="none"}))):e.style.display=i?e.__vOriginalDisplay:"none"}},unbind:function(e,t,n,i,r){r||(e.style.display=e.__vOriginalDisplay)}},Ps={model:_s,show:Os},Ms={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function js(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?js(Wt(t.children)):e}function Is(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];var r=n._parentListeners;for(var i in r)t[_(i)]=r[i];return t}function Ns(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function Hs(e){while(e=e.parent)if(e.data.transition)return!0}function Ws(e,t){return t.key===e.key&&t.tag===e.tag}var Vs=function(e){return e.tag||_t(e)},zs=function(e){return"show"===e.name},Us={name:"transition",props:Ms,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Vs),n.length)){0;var i=this.mode;0;var r=n[0];if(Hs(this.$vnode))return r;var o=js(r);if(!o)return r;if(this._leaving)return Ns(e,r);var s="__transition-".concat(this._uid,"-");o.key=null==o.key?o.isComment?s+"comment":s+o.tag:c(o.key)?0===String(o.key).indexOf(s)?o.key:s+o.key:o.key;var a=(o.data||(o.data={})).transition=Is(this),l=this._vnode,h=js(l);if(o.data.directives&&o.data.directives.some(zs)&&(o.data.show=!0),h&&h.data&&!Ws(o,h)&&!_t(h)&&(!h.componentInstance||!h.componentInstance._vnode.isComment)){var u=h.data.transition=T({},a);if("out-in"===i)return this._leaving=!0,nt(u,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Ns(e,r);if("in-out"===i){if(_t(o))return l;var d,f=function(){d()};nt(a,"afterEnter",f),nt(a,"enterCancelled",f),nt(u,"delayLeave",(function(e){d=e}))}}return r}}},Ks=T({tag:String,moveClass:String},Ms);delete Ks.mode;var qs={props:Ks,beforeMount:function(){var e=this,t=this._update;this._update=function(n,i){var r=_n(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,i)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],o=this.children=[],s=Is(this),a=0;a=2)e.mixin({beforeCreate:i});else{var n=e.prototype._init;e.prototype._init=function(e){void 0===e&&(e={}),e.init=e.init?[i].concat(e.init):i,n.call(this,e)}}function i(){var e=this.$options;e.store?this.$store="function"===typeof e.store?e.store():e.store:e.parent&&e.parent.$store&&(this.$store=e.parent.$store)}}var r="undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:{},o=r.__VUE_DEVTOOLS_GLOBAL_HOOK__;function s(e){o&&(e._devtoolHook=o,o.emit("vuex:init",e),o.on("vuex:travel-to-state",(function(t){e.replaceState(t)})),e.subscribe((function(e,t){o.emit("vuex:mutation",e,t)}),{prepend:!0}),e.subscribeAction((function(e,t){o.emit("vuex:action",e,t)}),{prepend:!0}))}function a(e,t){return e.filter(t)[0]}function l(e,t){if(void 0===t&&(t=[]),null===e||"object"!==typeof e)return e;var n=a(t,(function(t){return t.original===e}));if(n)return n.copy;var i=Array.isArray(e)?[]:{};return t.push({original:e,copy:i}),Object.keys(e).forEach((function(n){i[n]=l(e[n],t)})),i}function c(e,t){Object.keys(e).forEach((function(n){return t(e[n],n)}))}function h(e){return null!==e&&"object"===typeof e}function u(e){return e&&"function"===typeof e.then}function d(e,t){return function(){return e(t)}}var f=function(e,t){this.runtime=t,this._children=Object.create(null),this._rawModule=e;var n=e.state;this.state=("function"===typeof n?n():n)||{}},p={namespaced:{configurable:!0}};p.namespaced.get=function(){return!!this._rawModule.namespaced},f.prototype.addChild=function(e,t){this._children[e]=t},f.prototype.removeChild=function(e){delete this._children[e]},f.prototype.getChild=function(e){return this._children[e]},f.prototype.hasChild=function(e){return e in this._children},f.prototype.update=function(e){this._rawModule.namespaced=e.namespaced,e.actions&&(this._rawModule.actions=e.actions),e.mutations&&(this._rawModule.mutations=e.mutations),e.getters&&(this._rawModule.getters=e.getters)},f.prototype.forEachChild=function(e){c(this._children,e)},f.prototype.forEachGetter=function(e){this._rawModule.getters&&c(this._rawModule.getters,e)},f.prototype.forEachAction=function(e){this._rawModule.actions&&c(this._rawModule.actions,e)},f.prototype.forEachMutation=function(e){this._rawModule.mutations&&c(this._rawModule.mutations,e)},Object.defineProperties(f.prototype,p);var m=function(e){this.register([],e,!1)};function g(e,t,n){if(t.update(n),n.modules)for(var i in n.modules){if(!t.getChild(i))return void 0;g(e.concat(i),t.getChild(i),n.modules[i])}}m.prototype.get=function(e){return e.reduce((function(e,t){return e.getChild(t)}),this.root)},m.prototype.getNamespace=function(e){var t=this.root;return e.reduce((function(e,n){return t=t.getChild(n),e+(t.namespaced?n+"/":"")}),"")},m.prototype.update=function(e){g([],this.root,e)},m.prototype.register=function(e,t,n){var i=this;void 0===n&&(n=!0);var r=new f(t,n);if(0===e.length)this.root=r;else{var o=this.get(e.slice(0,-1));o.addChild(e[e.length-1],r)}t.modules&&c(t.modules,(function(t,r){i.register(e.concat(r),t,n)}))},m.prototype.unregister=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1],i=t.getChild(n);i&&i.runtime&&t.removeChild(n)},m.prototype.isRegistered=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1];return!!t&&t.hasChild(n)};var v;var y=function(e){var t=this;void 0===e&&(e={}),!v&&"undefined"!==typeof window&&window.Vue&&L(window.Vue);var n=e.plugins;void 0===n&&(n=[]);var i=e.strict;void 0===i&&(i=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new m(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new v,this._makeLocalGettersCache=Object.create(null);var r=this,o=this,a=o.dispatch,l=o.commit;this.dispatch=function(e,t){return a.call(r,e,t)},this.commit=function(e,t,n){return l.call(r,e,t,n)},this.strict=i;var c=this._modules.root.state;E(this,c,[],this._modules.root),C(this,c),n.forEach((function(e){return e(t)}));var h=void 0!==e.devtools?e.devtools:v.config.devtools;h&&s(this)},w={state:{configurable:!0}};function b(e,t,n){return t.indexOf(e)<0&&(n&&n.prepend?t.unshift(e):t.push(e)),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function A(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;E(e,n,[],e._modules.root,!0),C(e,n,t)}function C(e,t,n){var i=e._vm;e.getters={},e._makeLocalGettersCache=Object.create(null);var r=e._wrappedGetters,o={};c(r,(function(t,n){o[n]=d(t,e),Object.defineProperty(e.getters,n,{get:function(){return e._vm[n]},enumerable:!0})}));var s=v.config.silent;v.config.silent=!0,e._vm=new v({data:{$$state:t},computed:o}),v.config.silent=s,e.strict&&k(e),i&&(n&&e._withCommit((function(){i._data.$$state=null})),v.nextTick((function(){return i.$destroy()})))}function E(e,t,n,i,r){var o=!n.length,s=e._modules.getNamespace(n);if(i.namespaced&&(e._modulesNamespaceMap[s],e._modulesNamespaceMap[s]=i),!o&&!r){var a=D(t,n.slice(0,-1)),l=n[n.length-1];e._withCommit((function(){v.set(a,l,i.state)}))}var c=i.context=F(e,s,n);i.forEachMutation((function(t,n){var i=s+n;_(e,i,t,c)})),i.forEachAction((function(t,n){var i=t.root?n:s+n,r=t.handler||t;S(e,i,r,c)})),i.forEachGetter((function(t,n){var i=s+n;$(e,i,t,c)})),i.forEachChild((function(i,o){E(e,t,n.concat(o),i,r)}))}function F(e,t,n){var i=""===t,r={dispatch:i?e.dispatch:function(n,i,r){var o=B(n,i,r),s=o.payload,a=o.options,l=o.type;return a&&a.root||(l=t+l),e.dispatch(l,s)},commit:i?e.commit:function(n,i,r){var o=B(n,i,r),s=o.payload,a=o.options,l=o.type;a&&a.root||(l=t+l),e.commit(l,s,a)}};return Object.defineProperties(r,{getters:{get:i?function(){return e.getters}:function(){return x(e,t)}},state:{get:function(){return D(e.state,n)}}}),r}function x(e,t){if(!e._makeLocalGettersCache[t]){var n={},i=t.length;Object.keys(e.getters).forEach((function(r){if(r.slice(0,i)===t){var o=r.slice(i);Object.defineProperty(n,o,{get:function(){return e.getters[r]},enumerable:!0})}})),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function _(e,t,n,i){var r=e._mutations[t]||(e._mutations[t]=[]);r.push((function(t){n.call(e,i.state,t)}))}function S(e,t,n,i){var r=e._actions[t]||(e._actions[t]=[]);r.push((function(t){var r=n.call(e,{dispatch:i.dispatch,commit:i.commit,getters:i.getters,state:i.state,rootGetters:e.getters,rootState:e.state},t);return u(r)||(r=Promise.resolve(r)),e._devtoolHook?r.catch((function(t){throw e._devtoolHook.emit("vuex:error",t),t})):r}))}function $(e,t,n,i){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(i.state,i.getters,e.state,e.getters)})}function k(e){e._vm.$watch((function(){return this._data.$$state}),(function(){0}),{deep:!0,sync:!0})}function D(e,t){return t.reduce((function(e,t){return e[t]}),e)}function B(e,t,n){return h(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}function L(e){v&&e===v||(v=e,i(v))}w.state.get=function(){return this._vm._data.$$state},w.state.set=function(e){0},y.prototype.commit=function(e,t,n){var i=this,r=B(e,t,n),o=r.type,s=r.payload,a=(r.options,{type:o,payload:s}),l=this._mutations[o];l&&(this._withCommit((function(){l.forEach((function(e){e(s)}))})),this._subscribers.slice().forEach((function(e){return e(a,i.state)})))},y.prototype.dispatch=function(e,t){var n=this,i=B(e,t),r=i.type,o=i.payload,s={type:r,payload:o},a=this._actions[r];if(a){try{this._actionSubscribers.slice().filter((function(e){return e.before})).forEach((function(e){return e.before(s,n.state)}))}catch(c){0}var l=a.length>1?Promise.all(a.map((function(e){return e(o)}))):a[0](o);return new Promise((function(e,t){l.then((function(t){try{n._actionSubscribers.filter((function(e){return e.after})).forEach((function(e){return e.after(s,n.state)}))}catch(c){0}e(t)}),(function(e){try{n._actionSubscribers.filter((function(e){return e.error})).forEach((function(t){return t.error(s,n.state,e)}))}catch(c){0}t(e)}))}))}},y.prototype.subscribe=function(e,t){return b(e,this._subscribers,t)},y.prototype.subscribeAction=function(e,t){var n="function"===typeof e?{before:e}:e;return b(n,this._actionSubscribers,t)},y.prototype.watch=function(e,t,n){var i=this;return this._watcherVM.$watch((function(){return e(i.state,i.getters)}),t,n)},y.prototype.replaceState=function(e){var t=this;this._withCommit((function(){t._vm._data.$$state=e}))},y.prototype.registerModule=function(e,t,n){void 0===n&&(n={}),"string"===typeof e&&(e=[e]),this._modules.register(e,t),E(this,this.state,e,this._modules.get(e),n.preserveState),C(this,this.state)},y.prototype.unregisterModule=function(e){var t=this;"string"===typeof e&&(e=[e]),this._modules.unregister(e),this._withCommit((function(){var n=D(t.state,e.slice(0,-1));v.delete(n,e[e.length-1])})),A(this)},y.prototype.hasModule=function(e){return"string"===typeof e&&(e=[e]),this._modules.isRegistered(e)},y.prototype.hotUpdate=function(e){this._modules.update(e),A(this,!0)},y.prototype._withCommit=function(e){var t=this._committing;this._committing=!0,e(),this._committing=t},Object.defineProperties(y.prototype,w);var R=N((function(e,t){var n={};return j(t).forEach((function(t){var i=t.key,r=t.val;n[i]=function(){var t=this.$store.state,n=this.$store.getters;if(e){var i=H(this.$store,"mapState",e);if(!i)return;t=i.context.state,n=i.context.getters}return"function"===typeof r?r.call(this,t,n):t[r]},n[i].vuex=!0})),n})),T=N((function(e,t){var n={};return j(t).forEach((function(t){var i=t.key,r=t.val;n[i]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var i=this.$store.commit;if(e){var o=H(this.$store,"mapMutations",e);if(!o)return;i=o.context.commit}return"function"===typeof r?r.apply(this,[i].concat(t)):i.apply(this.$store,[r].concat(t))}})),n})),O=N((function(e,t){var n={};return j(t).forEach((function(t){var i=t.key,r=t.val;r=e+r,n[i]=function(){if(!e||H(this.$store,"mapGetters",e))return this.$store.getters[r]},n[i].vuex=!0})),n})),P=N((function(e,t){var n={};return j(t).forEach((function(t){var i=t.key,r=t.val;n[i]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var i=this.$store.dispatch;if(e){var o=H(this.$store,"mapActions",e);if(!o)return;i=o.context.dispatch}return"function"===typeof r?r.apply(this,[i].concat(t)):i.apply(this.$store,[r].concat(t))}})),n})),M=function(e){return{mapState:R.bind(null,e),mapGetters:O.bind(null,e),mapMutations:T.bind(null,e),mapActions:P.bind(null,e)}};function j(e){return I(e)?Array.isArray(e)?e.map((function(e){return{key:e,val:e}})):Object.keys(e).map((function(t){return{key:t,val:e[t]}})):[]}function I(e){return Array.isArray(e)||h(e)}function N(e){return function(t,n){return"string"!==typeof t?(n=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),e(t,n)}}function H(e,t,n){var i=e._modulesNamespaceMap[n];return i}function W(e){void 0===e&&(e={});var t=e.collapsed;void 0===t&&(t=!0);var n=e.filter;void 0===n&&(n=function(e,t,n){return!0});var i=e.transformer;void 0===i&&(i=function(e){return e});var r=e.mutationTransformer;void 0===r&&(r=function(e){return e});var o=e.actionFilter;void 0===o&&(o=function(e,t){return!0});var s=e.actionTransformer;void 0===s&&(s=function(e){return e});var a=e.logMutations;void 0===a&&(a=!0);var c=e.logActions;void 0===c&&(c=!0);var h=e.logger;return void 0===h&&(h=console),function(e){var u=l(e.state);"undefined"!==typeof h&&(a&&e.subscribe((function(e,o){var s=l(o);if(n(e,u,s)){var a=U(),c=r(e),d="mutation "+e.type+a;V(h,d,t),h.log("%c prev state","color: #9E9E9E; font-weight: bold",i(u)),h.log("%c mutation","color: #03A9F4; font-weight: bold",c),h.log("%c next state","color: #4CAF50; font-weight: bold",i(s)),z(h)}u=s})),c&&e.subscribeAction((function(e,n){if(o(e,n)){var i=U(),r=s(e),a="action "+e.type+i;V(h,a,t),h.log("%c action","color: #03A9F4; font-weight: bold",r),z(h)}})))}}function V(e,t,n){var i=n?e.groupCollapsed:e.group;try{i.call(e,t)}catch(r){e.log(t)}}function z(e){try{e.groupEnd()}catch(t){e.log("—— log end ——")}}function U(){var e=new Date;return" @ "+q(e.getHours(),2)+":"+q(e.getMinutes(),2)+":"+q(e.getSeconds(),2)+"."+q(e.getMilliseconds(),3)}function K(e,t){return new Array(t+1).join(e)}function q(e,t){return K("0",t-e.toString().length)+e}var G={Store:y,install:L,version:"3.6.2",mapState:R,mapMutations:T,mapGetters:O,mapActions:P,createNamespacedHelpers:M,createLogger:W};t.ZP=G}}]); +//# sourceMappingURL=chunk-vendors.aaa2d4d7.js.map \ No newline at end of file diff --git a/js/chunk-vendors.aaa2d4d7.js.map b/js/chunk-vendors.aaa2d4d7.js.map new file mode 100644 index 00000000..256af218 --- /dev/null +++ b/js/chunk-vendors.aaa2d4d7.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/chunk-vendors.aaa2d4d7.js","mappings":"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GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MACtwCiR,eAAgB,CAAC,GAAG,CAAC,EAAE,IACvBC,WAAY,SAAoBt+B,EAAKmJ,GACjC,MAAM,IAAI1V,MAAMuM,EACpB,EACA1C,MAAO,SAAeiV,GAClB,IAAIvkB,EAAO7C,KACPozC,EAAQ,CAAC,GACTC,EAAS,CAAC,MACVC,EAAS,GACTrR,EAAQjiC,KAAKiiC,MACbyQ,EAAS,GACTE,EAAW,EACXD,EAAS,EACTY,EAAa,EACbC,EAAS,EACTC,EAAM,EAIVzzC,KAAK0zC,MAAMC,SAASvsB,GACpBpnB,KAAK0zC,MAAMrB,GAAKryC,KAAKqyC,GACrBryC,KAAKqyC,GAAGqB,MAAQ1zC,KAAK0zC,MACW,oBAArB1zC,KAAK0zC,MAAME,SAClB5zC,KAAK0zC,MAAME,OAAS,CAAC,GACzB,IAAIC,EAAQ7zC,KAAK0zC,MAAME,OAMvB,SAASE,EAAUluC,GACfwtC,EAAM1rC,OAAS0rC,EAAM1rC,OAAS,EAAE9B,EAChCytC,EAAO3rC,OAAS2rC,EAAO3rC,OAAS9B,EAChC0tC,EAAO5rC,OAAS4rC,EAAO5rC,OAAS9B,CACpC,CAEA,SAASmuC,IACL,IAAIC,EAMJ,OALAA,EAAQnxC,EAAK6wC,MAAMK,OAAS,EAEP,kBAAVC,IACPA,EAAQnxC,EAAKyvC,SAAS0B,IAAUA,GAE7BA,CACX,CAnBAV,EAAO5mC,KAAKmnC,GAEsB,oBAAvB7zC,KAAKqyC,GAAGc,aACfnzC,KAAKmzC,WAAanzC,KAAKqyC,GAAGc,YAkB9B,IAAIc,EAAQC,EAAgBC,EAAOhsC,EAAWlC,EAAYwC,EAAEogB,EAAIurB,EAAUC,EAAzBC,EAAM,CAAC,EACxD,MAAO,EAAM,CAgBT,GAdAH,EAAQf,EAAMA,EAAM1rC,OAAO,GAGvB1H,KAAKkzC,eAAeiB,GACpBhsC,EAASnI,KAAKkzC,eAAeiB,IAEf,MAAVF,IACAA,EAASF,KAEb5rC,EAAS85B,EAAMkS,IAAUlS,EAAMkS,GAAOF,IAKpB,qBAAX9rC,IAA2BA,EAAOT,SAAWS,EAAO,GAAI,CAE/D,IAAKorC,EAAY,CAGb,IAAK9qC,KADL4rC,EAAW,GACDpS,EAAMkS,GAAYn0C,KAAKuyC,WAAW9pC,IAAMA,EAAI,GAClD4rC,EAAS3nC,KAAK,IAAI1M,KAAKuyC,WAAW9pC,GAAG,KAEzC,IAAI8rC,EAAS,GAETA,EADAv0C,KAAK0zC,MAAMc,aACF,wBAAwB5B,EAAS,GAAG,MAAM5yC,KAAK0zC,MAAMc,eAAe,eAAeH,EAASnxB,KAAK,MAAQ,UAAYljB,KAAKuyC,WAAW0B,GAAS,IAE9I,wBAAwBrB,EAAS,GAAG,iBACpB,GAAVqB,EAAsB,eACV,KAAKj0C,KAAKuyC,WAAW0B,IAAWA,GAAQ,KAEvEj0C,KAAKmzC,WAAWoB,EACZ,CAAClsC,KAAMrI,KAAK0zC,MAAMzxB,MAAO+xB,MAAOh0C,KAAKuyC,WAAW0B,IAAWA,EAAQQ,KAAMz0C,KAAK0zC,MAAMd,SAAU8B,IAAKb,EAAOQ,SAAUA,GAC5H,CAGA,GAAkB,GAAdd,EAAiB,CACjB,GAAIU,GAAUR,EACV,MAAM,IAAInrC,MAAMisC,GAAU,mBAI9B5B,EAAS3yC,KAAK0zC,MAAMf,OACpBD,EAAS1yC,KAAK0zC,MAAMhB,OACpBE,EAAW5yC,KAAK0zC,MAAMd,SACtBiB,EAAQ7zC,KAAK0zC,MAAME,OACnBK,EAASF,GACb,CAGA,MAAO,EAAG,CAEN,GAAKP,EAAOjqC,aAAe04B,EAAMkS,GAC7B,MAEJ,GAAa,GAATA,EACA,MAAM,IAAI7rC,MAAMisC,GAAU,mBAE9BT,EAAS,GACTK,EAAQf,EAAMA,EAAM1rC,OAAO,EAC/B,CAEAwsC,EAAiBD,EACjBA,EAAST,EACTW,EAAQf,EAAMA,EAAM1rC,OAAO,GAC3BS,EAAS85B,EAAMkS,IAAUlS,EAAMkS,GAAOX,GACtCD,EAAa,CACjB,CAGA,GAAIprC,EAAO,aAAc7G,OAAS6G,EAAOT,OAAS,EAC9C,MAAM,IAAIY,MAAM,oDAAoD6rC,EAAM,YAAYF,GAG1F,OAAQ9rC,EAAO,IAEX,KAAK,EAGDirC,EAAM1mC,KAAKunC,GACXZ,EAAO3mC,KAAK1M,KAAK0zC,MAAMhB,QACvBY,EAAO5mC,KAAK1M,KAAK0zC,MAAME,QACvBR,EAAM1mC,KAAKvE,EAAO,IAClB8rC,EAAS,KACJC,GAQDD,EAASC,EACTA,EAAiB,OARjBvB,EAAS3yC,KAAK0zC,MAAMf,OACpBD,EAAS1yC,KAAK0zC,MAAMhB,OACpBE,EAAW5yC,KAAK0zC,MAAMd,SACtBiB,EAAQ7zC,KAAK0zC,MAAME,OACfL,EAAa,GACbA,KAKR,MAEJ,KAAK,EAgBD,GAbA1qB,EAAM7oB,KAAKwyC,aAAarqC,EAAO,IAAI,GAGnCmsC,EAAMrB,EAAII,EAAOA,EAAO3rC,OAAOmhB,GAE/ByrB,EAAMvB,GAAK,CACP4B,WAAYrB,EAAOA,EAAO5rC,QAAQmhB,GAAK,IAAI8rB,WAC3CC,UAAWtB,EAAOA,EAAO5rC,OAAO,GAAGktC,UACnCC,aAAcvB,EAAOA,EAAO5rC,QAAQmhB,GAAK,IAAIgsB,aAC7CC,YAAaxB,EAAOA,EAAO5rC,OAAO,GAAGotC,aAEzC7uC,EAAIjG,KAAKyyC,cAAc7tC,KAAK0vC,EAAO5B,EAAQC,EAAQC,EAAU5yC,KAAKqyC,GAAIlqC,EAAO,GAAIkrC,EAAQC,GAExE,qBAANrtC,EACP,OAAOA,EAIP4iB,IACAuqB,EAAQA,EAAMrmC,MAAM,GAAG,EAAE8b,EAAI,GAC7BwqB,EAASA,EAAOtmC,MAAM,GAAI,EAAE8b,GAC5ByqB,EAASA,EAAOvmC,MAAM,GAAI,EAAE8b,IAGhCuqB,EAAM1mC,KAAK1M,KAAKwyC,aAAarqC,EAAO,IAAI,IACxCkrC,EAAO3mC,KAAK4nC,EAAMrB,GAClBK,EAAO5mC,KAAK4nC,EAAMvB,IAElBqB,EAAWnS,EAAMmR,EAAMA,EAAM1rC,OAAO,IAAI0rC,EAAMA,EAAM1rC,OAAO,IAC3D0rC,EAAM1mC,KAAK0nC,GACX,MAEJ,KAAK,EACD,OAAO,EAGnB,CAEA,OAAO,CACX,GAEIV,EAAQ,WACZ,IAAIA,EAAQ,CAAED,IAAI,EAClBN,WAAW,SAAoBt+B,EAAKmJ,GAC5B,IAAIhe,KAAKqyC,GAAGc,WAGR,MAAM,IAAI7qC,MAAMuM,GAFhB7U,KAAKqyC,GAAGc,WAAWt+B,EAAKmJ,EAIhC,EACJ21B,SAAS,SAAUvsB,GAOX,OANApnB,KAAK+0C,OAAS3tB,EACdpnB,KAAKg1C,MAAQh1C,KAAKi1C,MAAQj1C,KAAK+1B,MAAO,EACtC/1B,KAAK4yC,SAAW5yC,KAAK2yC,OAAS,EAC9B3yC,KAAK0yC,OAAS1yC,KAAKk1C,QAAUl1C,KAAKiiB,MAAQ,GAC1CjiB,KAAKm1C,eAAiB,CAAC,WACvBn1C,KAAK4zC,OAAS,CAACe,WAAW,EAAEE,aAAa,EAAED,UAAU,EAAEE,YAAY,GAC5D90C,IACX,EACJonB,MAAM,WACE,IAAIwG,EAAK5tB,KAAK+0C,OAAO,GACrB/0C,KAAK0yC,QAAQ9kB,EACb5tB,KAAK2yC,SACL3yC,KAAKiiB,OAAO2L,EACZ5tB,KAAKk1C,SAAStnB,EACd,IAAIwnB,EAAQxnB,EAAG3L,MAAM,MAGrB,OAFImzB,GAAOp1C,KAAK4yC,WAChB5yC,KAAK+0C,OAAS/0C,KAAK+0C,OAAOhoC,MAAM,GACzB6gB,CACX,EACJynB,MAAM,SAAUznB,GAER,OADA5tB,KAAK+0C,OAASnnB,EAAK5tB,KAAK+0C,OACjB/0C,IACX,EACJmxC,KAAK,WAEG,OADAnxC,KAAKg1C,OAAQ,EACNh1C,IACX,EACJs1C,KAAK,SAAU1vC,GACP5F,KAAK+0C,OAAS/0C,KAAKiiB,MAAMlV,MAAMnH,GAAK5F,KAAK+0C,MAC7C,EACJQ,UAAU,WACF,IAAIC,EAAOx1C,KAAKk1C,QAAQlzB,OAAO,EAAGhiB,KAAKk1C,QAAQxtC,OAAS1H,KAAKiiB,MAAMva,QACnE,OAAQ8tC,EAAK9tC,OAAS,GAAK,MAAM,IAAM8tC,EAAKxzB,QAAQ,IAAI/C,QAAQ,MAAO,GAC3E,EACJw2B,cAAc,WACN,IAAI3nB,EAAO9tB,KAAKiiB,MAIhB,OAHI6L,EAAKpmB,OAAS,KACdomB,GAAQ9tB,KAAK+0C,OAAO/yB,OAAO,EAAG,GAAG8L,EAAKpmB,UAElComB,EAAK9L,OAAO,EAAE,KAAK8L,EAAKpmB,OAAS,GAAK,MAAM,KAAKuX,QAAQ,MAAO,GAC5E,EACJu1B,aAAa,WACL,IAAIkB,EAAM11C,KAAKu1C,YACXrvC,EAAI,IAAI5E,MAAMo0C,EAAIhuC,OAAS,GAAGwb,KAAK,KACvC,OAAOwyB,EAAM11C,KAAKy1C,gBAAkB,KAAOvvC,EAAE,GACjD,EACJ4nB,KAAK,WACG,GAAI9tB,KAAK+1B,KACL,OAAO/1B,KAAKyzC,IAIhB,IAAIO,EACA/xB,EACA0zB,EACAn5B,EAEA44B,EAPCp1C,KAAK+0C,SAAQ/0C,KAAK+1B,MAAO,GAQzB/1B,KAAKg1C,QACNh1C,KAAK0yC,OAAS,GACd1yC,KAAKiiB,MAAQ,IAGjB,IADA,IAAI9N,EAAQnU,KAAK41C,gBACR7vC,EAAE,EAAEA,EAAIoO,EAAMzM,OAAQ3B,IAE3B,GADA4vC,EAAY31C,KAAK+0C,OAAO9yB,MAAMjiB,KAAKmU,MAAMA,EAAMpO,KAC3C4vC,KAAe1zB,GAAS0zB,EAAU,GAAGjuC,OAASua,EAAM,GAAGva,UACvDua,EAAQ0zB,EACRn5B,EAAQzW,GACH/F,KAAK8C,QAAQ+yC,MAAM,MAGhC,OAAI5zB,GACAmzB,EAAQnzB,EAAM,GAAGA,MAAM,SACnBmzB,IAAOp1C,KAAK4yC,UAAYwC,EAAM1tC,QAClC1H,KAAK4zC,OAAS,CAACe,WAAY30C,KAAK4zC,OAAOgB,UACxBA,UAAW50C,KAAK4yC,SAAS,EACzBiC,aAAc70C,KAAK4zC,OAAOkB,YAC1BA,YAAaM,EAAQA,EAAMA,EAAM1tC,OAAO,GAAGA,OAAO,EAAI1H,KAAK4zC,OAAOkB,YAAc7yB,EAAM,GAAGva,QACxG1H,KAAK0yC,QAAUzwB,EAAM,GACrBjiB,KAAKiiB,OAASA,EAAM,GACpBjiB,KAAK2yC,OAAS3yC,KAAK0yC,OAAOhrC,OAC1B1H,KAAKg1C,OAAQ,EACbh1C,KAAK+0C,OAAS/0C,KAAK+0C,OAAOhoC,MAAMkV,EAAM,GAAGva,QACzC1H,KAAKk1C,SAAWjzB,EAAM,GACtB+xB,EAAQh0C,KAAKyyC,cAAc7tC,KAAK5E,KAAMA,KAAKqyC,GAAIryC,KAAMmU,EAAMqI,GAAOxc,KAAKm1C,eAAen1C,KAAKm1C,eAAeztC,OAAO,IAC7G1H,KAAK+1B,MAAQ/1B,KAAK+0C,SAAQ/0C,KAAK+1B,MAAO,GACtCie,QACC,GAEW,KAAhBh0C,KAAK+0C,OACE/0C,KAAKyzC,SAEZzzC,KAAKmzC,WAAW,0BAA0BnzC,KAAK4yC,SAAS,GAAG,yBAAyB5yC,KAAKw0C,eACjF,CAACnsC,KAAM,GAAI2rC,MAAO,KAAMS,KAAMz0C,KAAK4yC,UAEnD,EACJmB,IAAI,WACI,IAAI9tC,EAAIjG,KAAK8tB,OACb,MAAiB,qBAAN7nB,EACAA,EAEAjG,KAAK+zC,KAEpB,EACJ+B,MAAM,SAAeC,GACb/1C,KAAKm1C,eAAezoC,KAAKqpC,EAC7B,EACJC,SAAS,WACD,OAAOh2C,KAAKm1C,eAAe9wB,KAC/B,EACJuxB,cAAc,WACN,OAAO51C,KAAKi2C,WAAWj2C,KAAKm1C,eAAen1C,KAAKm1C,eAAeztC,OAAO,IAAIyM,KAC9E,EACJ+hC,SAAS,WACD,OAAOl2C,KAAKm1C,eAAen1C,KAAKm1C,eAAeztC,OAAO,EAC1D,EACJyuC,UAAU,SAAeJ,GACjB/1C,KAAK81C,MAAMC,EACf,EACJrC,QAAgB,CAAC,EACjBA,cAAsB,SAAmBrB,EAAG+D,EAAIC,EAA0BC,GAG1E,OAAOD,GACP,KAAK,EACL,MACA,KAAK,EAAE,OAAO,EAEd,KAAK,EAAkD,OAAhDD,EAAI1D,OAAS0D,EAAI1D,OAAO1wB,OAAO,EAAEo0B,EAAIzD,OAAO,GAAW,EAE9D,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,EAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,MAAO,UAGf,EACAe,MAAc,CAAC,WAAW,8DAA8D,qEAAqE,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,cAAc,eAAe,cAAc,SAAS,UAC3QA,WAAmB,CAAC,QAAU,CAAC,MAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,WAAY,KAIrF,OAAOA,CAAO,CAzKF,GA2KZ,OADAvB,EAAOuB,MAAQA,EACRvB,CACN,CA5Zc,GA8Zb1sC,EAAQ0sC,OAAS3F,EACjB/mC,EAAQ0M,MAAQq6B,EAASr6B,MAAMxG,KAAK6gC,EAGjC,EAEA,SAAS7mC,EAAQF,GAEtB,aASA,SAASk7B,EAAWr+B,EAAQ+E,GAC1B,IAAIu6B,EAAY5hC,KAEhBA,KAAKsC,OAASA,EACdtC,KAAK0xC,aAAUvhC,EACfnQ,KAAKu2C,MAAQ,IACbv2C,KAAKw2C,cAAWrmC,EAEhBnQ,KAAK+gC,IAAM,CAAC,EACZ/gC,KAAK+gC,IAAI15B,UAAYA,EAErB,IAAI46B,EAAQ97B,SAASM,cAAc,SACnCzG,KAAK+gC,IAAIkB,MAAQA,EACjBA,EAAMkD,UAAY,oBAClB99B,EAAUC,YAAY26B,GACtB,IAAIY,EAAQ18B,SAASM,cAAc,SACnCzG,KAAK+gC,IAAI8B,MAAQA,EACjBZ,EAAM36B,YAAYu7B,GAClB,IAAI4T,EAAKtwC,SAASM,cAAc,MAChCo8B,EAAMv7B,YAAYmvC,GAElB,IAAIC,EAAKvwC,SAASM,cAAc,MAChCgwC,EAAGnvC,YAAYovC,GACf,IAAIlgB,EAAUrwB,SAASM,cAAc,OACrCzG,KAAK+gC,IAAIvK,QAAUA,EACnBA,EAAQ2O,UAAY,qBACpBuR,EAAGpvC,YAAYkvB,GAEfkgB,EAAKvwC,SAASM,cAAc,MAC5BgwC,EAAGnvC,YAAYovC,GACf,IAAIC,EAAWxwC,SAASM,cAAc,OACtCzG,KAAK+gC,IAAI3Z,MAAQuvB,EACjBA,EAASxR,UAAY,mBACrBwR,EAAStQ,MAAQ,2BACjBqQ,EAAGpvC,YAAYqvC,GAGf,IAAIC,EAAazwC,SAASM,cAAc,SACxCkwC,EAASrvC,YAAYsvC,GACrB,IAAIC,EAAc1wC,SAASM,cAAc,SACzCmwC,EAAWtvC,YAAYuvC,GACvBJ,EAAKtwC,SAASM,cAAc,MAC5BowC,EAAYvvC,YAAYmvC,GAExB,IAAIK,EAAgB3wC,SAASM,cAAc,UAC3CqwC,EAAcr1C,KAAO,SACrBq1C,EAAc3R,UAAY,qBAC1BuR,EAAKvwC,SAASM,cAAc,MAC5BiwC,EAAGpvC,YAAYwvC,GACfL,EAAGnvC,YAAYovC,GAEf,IAAIh3B,EAASvZ,SAASM,cAAc,SAEpCzG,KAAK+gC,IAAIrhB,OAASA,EAClBA,EAAO+lB,QAAU,SAAUJ,GACzBzD,EAAUmV,iBAAiB1R,EAC7B,EACA3lB,EAAOgmB,SAAW,SAAUL,GAC1BzD,EAAUoV,WACZ,EACAt3B,EAAOimB,UAAY,SAAUN,GAC3BzD,EAAUkF,WAAWzB,EACvB,EACA3lB,EAAOkmB,QAAU,SAAUP,GACzBzD,EAAUqV,SAAS5R,EACrB,EACAyR,EAAcvR,QAAU,SAAUF,GAChC3lB,EAAOtT,QACT,EAGAsqC,EAAKvwC,SAASM,cAAc,MAC5BiwC,EAAGpvC,YAAYoY,GACf+2B,EAAGnvC,YAAYovC,GAEf,IAAIQ,EAAa/wC,SAASM,cAAc,UACxCywC,EAAWz1C,KAAO,SAClBy1C,EAAW7Q,MAAQ,sBACnB6Q,EAAW/R,UAAY,kBACvB+R,EAAW3R,QAAU,WACnB3D,EAAU9T,MACZ,EACA4oB,EAAKvwC,SAASM,cAAc,MAC5BiwC,EAAGpvC,YAAY4vC,GACfT,EAAGnvC,YAAYovC,GAEf,IAAIS,EAAiBhxC,SAASM,cAAc,UAC5C0wC,EAAe11C,KAAO,SACtB01C,EAAe9Q,MAAQ,gCACvB8Q,EAAehS,UAAY,sBAC3BgS,EAAe5R,QAAU,WACvB3D,EAAUgI,UACZ,EACA8M,EAAKvwC,SAASM,cAAc,MAC5BiwC,EAAGpvC,YAAY6vC,GACfV,EAAGnvC,YAAYovC,EACjB,CAOA/V,EAAU14B,UAAU6lB,KAAO,SAASjjB,GAClC,QAAoBsF,GAAhBnQ,KAAKw2B,QAAsB,CAC7B,IAAIha,OAA6BrM,GAApBnQ,KAAKo3C,YAA4Bp3C,KAAKo3C,YAAc,EAAI,EACjE56B,EAAQxc,KAAKw2B,QAAQ9uB,OAAS,IAChC8U,EAAQ,GAEVxc,KAAKq3C,iBAAiB76B,EAAO3R,EAC/B,CACF,EAOA81B,EAAU14B,UAAU2hC,SAAW,SAAS/+B,GACtC,QAAoBsF,GAAhBnQ,KAAKw2B,QAAsB,CAC7B,IAAIuO,EAAM/kC,KAAKw2B,QAAQ9uB,OAAS,EAC5B8U,OAA6BrM,GAApBnQ,KAAKo3C,YAA4Bp3C,KAAKo3C,YAAc,EAAIrS,EACjEvoB,EAAQ,IACVA,EAAQuoB,GAEV/kC,KAAKq3C,iBAAiB76B,EAAO3R,EAC/B,CACF,EASA81B,EAAU14B,UAAUovC,iBAAmB,SAAS76B,EAAO3R,GAErD,GAAI7K,KAAKs3C,aAAc,CACrB,IAAIC,EAAWv3C,KAAKs3C,aAAaxrC,KAC7B0rC,EAAWx3C,KAAKs3C,aAAa5J,KACjB,SAAZ8J,SACKD,EAASE,yBAGTF,EAASG,kBAElBH,EAAS7T,WACX,CAEA,IAAK1jC,KAAKw2B,UAAYx2B,KAAKw2B,QAAQha,GAIjC,OAFAxc,KAAKo3C,iBAAcjnC,OACnBnQ,KAAKs3C,kBAAennC,GAItBnQ,KAAKo3C,YAAc56B,EAGnB,IAAI1Q,EAAO9L,KAAKw2B,QAAQx2B,KAAKo3C,aAAatrC,KACtC4hC,EAAO1tC,KAAKw2B,QAAQx2B,KAAKo3C,aAAa1J,KAC9B,SAARA,EACF5hC,EAAK2rC,mBAAoB,EAGzB3rC,EAAK4rC,mBAAoB,EAE3B13C,KAAKs3C,aAAet3C,KAAKw2B,QAAQx2B,KAAKo3C,aACtCtrC,EAAK43B,YAGL53B,EAAK6rC,UAAS,WACR9sC,GACFiB,EAAKjB,MAAM6iC,EAEf,GACF,EAMA/M,EAAU14B,UAAU2vC,YAAc,gBACZznC,GAAhBnQ,KAAK0xC,UACPnN,aAAavkC,KAAK0xC,gBACX1xC,KAAK0xC,QAEhB,EAQA/Q,EAAU14B,UAAU8uC,iBAAmB,SAAU1R,GAG/CrlC,KAAK43C,cACL,IAAIhW,EAAY5hC,KAChBA,KAAK0xC,QAAUzhB,YAAW,SAAUoV,GAClCzD,EAAUoV,WACZ,GACAh3C,KAAKu2C,MACP,EASA5V,EAAU14B,UAAU+uC,UAAY,SAAUa,GACxC73C,KAAK43C,cAEL,IAAI12C,EAAQlB,KAAK+gC,IAAIrhB,OAAOxe,MACxBmH,EAAQnH,EAAMwG,OAAS,EAAKxG,OAAQiP,EACxC,GAAI9H,GAAQrI,KAAKw2C,UAAYqB,EAO3B,GALA73C,KAAKw2C,SAAWnuC,EAChBrI,KAAKw2B,QAAUx2B,KAAKsC,OAAOod,OAAOrX,GAClCrI,KAAKq3C,sBAAiBlnC,QAGVA,GAAR9H,EAAmB,CACrB,IAAIyvC,EAAc93C,KAAKw2B,QAAQ9uB,OAC/B,OAAQowC,GACN,KAAK,EAAG93C,KAAK+gC,IAAIvK,QAAQuhB,UAAY,kBAAmB,MACxD,KAAK,EAAG/3C,KAAK+gC,IAAIvK,QAAQuhB,UAAY,gBAAiB,MACtD,QAAS/3C,KAAK+gC,IAAIvK,QAAQuhB,UAAYD,EAAc,gBAAiB,MAEzE,MAEE93C,KAAK+gC,IAAIvK,QAAQuhB,UAAY,EAGnC,EAOApX,EAAU14B,UAAU6+B,WAAa,SAAUzB,GACzC,IAAIgE,EAAShE,EAAMiE,MACL,IAAVD,GACFrpC,KAAK+gC,IAAIrhB,OAAOxe,MAAQ,GACxBlB,KAAKg3C,YACL3R,EAAMG,iBACNH,EAAMwE,mBAEW,IAAVR,IACHhE,EAAMmE,QAERxpC,KAAKg3C,WAAU,GAER3R,EAAMoE,SAEbzpC,KAAK4pC,WAIL5pC,KAAK8tB,OAEPuX,EAAMG,iBACNH,EAAMwE,kBAEV,EAOAlJ,EAAU14B,UAAUgvC,SAAW,SAAU5R,GACvC,IAAIgE,EAAShE,EAAMkE,QACL,IAAVF,GAA0B,IAAVA,GAClBrpC,KAAK+2C,iBAAiB1R,EAE1B,EAKA1E,EAAU14B,UAAU4K,MAAQ,WAC1B7S,KAAK+gC,IAAIrhB,OAAOxe,MAAQ,GACxBlB,KAAKg3C,WACP,EAKArW,EAAU14B,UAAU+C,QAAU,WAC5BhL,KAAKsC,OAAS,KACdtC,KAAK+gC,IAAI15B,UAAUsI,YAAY3P,KAAK+gC,IAAIkB,OACxCjiC,KAAK+gC,IAAM,KAEX/gC,KAAKw2B,QAAU,KACfx2B,KAAKs3C,aAAe,KAEpBt3C,KAAK43C,aAEP,EAEAjyC,EAAOF,QAAUk7B,CAGZ,EAEA,SAASh7B,EAAQF,EAAS,GAE/B,aAEA,IAAIyL,EAAO,EAAoB,IAW/B,SAAS0vB,EAAa/M,EAAO/wB,GAC3B9C,KAAK+gC,IAAM,CAAC,EAEZ,IAAI6C,EAAK5jC,KACL+gC,EAAM/gC,KAAK+gC,IACf/gC,KAAKkqC,YAAS/5B,EACdnQ,KAAK6zB,MAAQA,EACb7zB,KAAKg4C,eAAiB,CAAC,EACvBh4C,KAAKihC,eAAY9wB,EACjBnQ,KAAKmqC,QAAUrnC,EAAUA,EAAQwnC,WAAQn6B,EAGzC,IAAIK,EAAOrK,SAASM,cAAc,OAClC+J,EAAK20B,UAAY,8BACjBpE,EAAIvwB,KAAOA,EAGX,IAAImyB,EAAOx8B,SAASM,cAAc,OAClCk8B,EAAKwC,UAAY,yBACjBpE,EAAI4B,KAAOA,EACXnyB,EAAKlJ,YAAYq7B,GAGjB,IAAIsV,EAAO9xC,SAASM,cAAc,MAClCwxC,EAAK9S,UAAY,kBACjBxC,EAAKr7B,YAAY2wC,GACjBlX,EAAIkX,KAAOA,EACXlX,EAAIlN,MAAQ,GAGZ,IAAIqkB,EAAc/xC,SAASM,cAAc,UACzCyxC,EAAYz2C,KAAO,SACnBs/B,EAAImX,YAAcA,EAClB,IAAIC,EAAKhyC,SAASM,cAAc,MAMhC,SAAS2xC,EAAiBH,EAAMI,EAAUxkB,GACxCA,EAAM3pB,SAAQ,SAAUwU,GACtB,GAAiB,aAAbA,EAAKjd,KAAqB,CAE5B,IAAI0W,EAAYhS,SAASM,cAAc,OACvC0R,EAAUgtB,UAAY,uBACtBgT,EAAKhyC,SAASM,cAAc,MAC5B0xC,EAAG7wC,YAAY6Q,GACf8/B,EAAK3wC,YAAY6wC,EACnB,KACK,CACH,IAAIG,EAAU,CAAC,EAGXH,EAAKhyC,SAASM,cAAc,MAChCwxC,EAAK3wC,YAAY6wC,GAGjB,IAAII,EAASpyC,SAASM,cAAc,UAiBpC,GAhBA8xC,EAAO92C,KAAO,SACd82C,EAAOpT,UAAYzmB,EAAKymB,UACxBmT,EAAQC,OAASA,EACb75B,EAAK2nB,QACPkS,EAAOlS,MAAQ3nB,EAAK2nB,OAElB3nB,EAAKhP,QACP6oC,EAAOhT,QAAU,SAAUF,GACzBA,EAAMG,iBACN5B,EAAG4U,OACH95B,EAAKhP,OACP,GAEFyoC,EAAG7wC,YAAYixC,GAGX75B,EAAK+5B,QAAS,CAEhB,IAKIC,EALAC,EAAUxyC,SAASM,cAAc,OAMrC,GALAkyC,EAAQxT,UAAY,kBACpBoT,EAAOjxC,YAAYqxC,GACnBJ,EAAOjxC,YAAYnB,SAASipC,eAAe1wB,EAAKrW,OAG5CqW,EAAKhP,MAAO,CAEd6oC,EAAOpT,WAAa,sBAEpB,IAAIyT,EAAezyC,SAASM,cAAc,UAC1CmyC,EAAan3C,KAAO,SACpB62C,EAAQM,aAAeA,EACvBA,EAAazT,UAAY,oBACzByT,EAAab,UAAY,wCACzBI,EAAG7wC,YAAYsxC,GACXl6B,EAAKm6B,eACPD,EAAavS,MAAQ3nB,EAAKm6B,cAG5BH,EAAgBE,CAClB,KACK,CAEH,IAAIE,EAAY3yC,SAASM,cAAc,OACvCqyC,EAAU3T,UAAY,oBACtBoT,EAAOjxC,YAAYwxC,GAEnBJ,EAAgBH,CAClB,CAGAG,EAAcnT,QAAU,SAAUF,GAChCA,EAAMG,iBACN5B,EAAGmV,cAAcT,GACjBI,EAAc7tC,OAChB,EAGA,IAAImuC,EAAc,GAClBV,EAAQW,SAAWD,EACnB,IAAIE,EAAK/yC,SAASM,cAAc,MAChC6xC,EAAQY,GAAKA,EACbA,EAAG/T,UAAY,kBACf+T,EAAGxyC,MAAMo9B,OAAS,IAClBqU,EAAG7wC,YAAY4xC,GACfd,EAAgBc,EAAIF,EAAat6B,EAAK+5B,QACxC,MAGEF,EAAOR,UAAY,sCAAwCr5B,EAAKrW,KAGlEgwC,EAAS3rC,KAAK4rC,EAChB,CACF,GACF,CAlGAH,EAAGzxC,MAAMyyC,SAAW,SACpBhB,EAAGzxC,MAAMo9B,OAAS,IAClBqU,EAAG7wC,YAAY4wC,GACfD,EAAK3wC,YAAY6wC,GAgGjBC,EAAgBH,EAAMj4C,KAAK+gC,IAAIlN,MAAOA,GAKtC7zB,KAAKo5C,UAAY,EACjBvlB,EAAM3pB,SAAQ,SAAUwU,GACtB,IAAIolB,EAAqE,IAA3DjQ,EAAMnsB,QAAUgX,EAAK+5B,QAAU/5B,EAAK+5B,QAAQ/wC,OAAS,IACnEk8B,EAAGwV,UAAYvzB,KAAKkf,IAAInB,EAAGwV,UAAWtV,EACxC,GACF,CAOAlD,EAAY34B,UAAUoxC,mBAAqB,WACzC,IAAIC,EAAU,GACV1V,EAAK5jC,KAiBT,OAhBAA,KAAK+gC,IAAIlN,MAAM3pB,SAAQ,SAAUwU,GAC/B46B,EAAQ5sC,KAAKgS,EAAK65B,QACd75B,EAAKk6B,cACPU,EAAQ5sC,KAAKgS,EAAKk6B,cAEhBl6B,EAAKu6B,UAAYv6B,GAAQklB,EAAG2V,cAC9B76B,EAAKu6B,SAAS/uC,SAAQ,SAAUsvC,GAC9BF,EAAQ5sC,KAAK8sC,EAAQjB,QACjBiB,EAAQZ,cACVU,EAAQ5sC,KAAK8sC,EAAQZ,aAGzB,GAEJ,IAEOU,CACT,EAGA1Y,EAAY6Y,iBAActpC,EAQ1BywB,EAAY34B,UAAUsiC,KAAO,SAAUL,EAAQwP,GAC7C15C,KAAKw4C,OAGL,IAAImB,GAAY,EAChB,GAAID,EAAe,CACjB,IAAIE,EAAa1P,EAAO0D,wBACpBiM,EAAcH,EAAc9L,wBAE5BgM,EAAW5V,OAAShkC,KAAKo5C,UAAYS,EAAY7V,QAG5C4V,EAAWzyC,IAAMnH,KAAKo5C,UAAYS,EAAY1yC,MAErDwyC,GAAY,EAKhB,CAGA,GAAIA,EAAW,CAEb,IAAIG,EAAe5P,EAAO6P,aAC1B/5C,KAAK+gC,IAAI4B,KAAKj8B,MAAMmnC,KAAO,MAC3B7tC,KAAK+gC,IAAI4B,KAAKj8B,MAAMS,IAAM2yC,EAAe,KACzC95C,KAAK+gC,IAAI4B,KAAKj8B,MAAMs9B,OAAS,EAC/B,MAGEhkC,KAAK+gC,IAAI4B,KAAKj8B,MAAMmnC,KAAO,MAC3B7tC,KAAK+gC,IAAI4B,KAAKj8B,MAAMS,IAAM,GAC1BnH,KAAK+gC,IAAI4B,KAAKj8B,MAAMs9B,OAAS,MAI/B,IAAIt/B,EAASwlC,EAAO1+B,WACpB9G,EAAO6mC,aAAavrC,KAAK+gC,IAAIvwB,KAAM9L,EAAOyqC,YAG1C,IAAIvL,EAAK5jC,KACLi4C,EAAOj4C,KAAK+gC,IAAIkX,KACpBj4C,KAAKg4C,eAAegC,UAAY9oC,EAAKzF,iBAAiBzE,OAAQ,aAAa,SAAUq+B,GAEnF,IAAIj9B,EAASi9B,EAAMj9B,OACdA,GAAU6vC,GAAUrU,EAAGqW,WAAW7xC,EAAQ6vC,KAC7CrU,EAAG4U,OACHnT,EAAMwE,kBACNxE,EAAMG,iBAEV,IACAxlC,KAAKg4C,eAAekC,QAAUhpC,EAAKzF,iBAAiBzE,OAAQ,WAAW,SAAUq+B,GAC/EzB,EAAGkD,WAAWzB,EAChB,IAGArlC,KAAKihC,UAAY/vB,EAAKpG,eACtB9K,KAAKkqC,OAASA,EACdja,YAAW,WACT2T,EAAG7C,IAAImX,YAAYrtC,OACrB,GAAG,GAEC+1B,EAAY6Y,aACd7Y,EAAY6Y,YAAYjB,OAE1B5X,EAAY6Y,YAAcz5C,IAC5B,EAKA4gC,EAAY34B,UAAUuwC,KAAO,WAW3B,IAAK,IAAIhmC,KATLxS,KAAK+gC,IAAIvwB,KAAKhF,aAChBxL,KAAK+gC,IAAIvwB,KAAKhF,WAAWmE,YAAY3P,KAAK+gC,IAAIvwB,MAC1CxQ,KAAKmqC,SACPnqC,KAAKmqC,WAMQnqC,KAAKg4C,eACpB,GAAIh4C,KAAKg4C,eAAe9qC,eAAesF,GAAO,CAC5C,IAAItG,EAAKlM,KAAKg4C,eAAexlC,GACzBtG,GACFgF,EAAKxF,oBAAoB1E,OAAQwL,EAAMtG,UAElClM,KAAKg4C,eAAexlC,EAC7B,CAGEouB,EAAY6Y,aAAez5C,OAC7B4gC,EAAY6Y,iBAActpC,EAE9B,EAQAywB,EAAY34B,UAAU8wC,cAAgB,SAAUT,GAC9C,IAAI1U,EAAK5jC,KACLm6C,EAAkB7B,GAAWt4C,KAAKu5C,aAGlCA,EAAev5C,KAAKu5C,aAcxB,GAbIA,IAEFA,EAAaL,GAAGxyC,MAAMo9B,OAAS,IAC/ByV,EAAaL,GAAGxyC,MAAMG,QAAU,GAChCopB,YAAW,WACL2T,EAAG2V,cAAgBA,IACrBA,EAAaL,GAAGxyC,MAAM0zC,QAAU,GAChClpC,EAAKg9B,gBAAgBqL,EAAaL,GAAG1tC,WAAY,uBAErD,GAAG,KACHxL,KAAKu5C,kBAAeppC,IAGjBgqC,EAAgB,CACnB,IAAIjB,EAAKZ,EAAQY,GACjBA,EAAGxyC,MAAM0zC,QAAU,QACNlB,EAAGnV,aAChB9T,YAAW,WACL2T,EAAG2V,cAAgBjB,IACrBY,EAAGxyC,MAAMo9B,OAAiC,GAAvBoV,EAAG7K,WAAW3mC,OAAe,KAChDwxC,EAAGxyC,MAAMG,QAAU,WAEvB,GAAG,GACHqK,EAAK88B,aAAakL,EAAG1tC,WAAY,uBACjCxL,KAAKu5C,aAAejB,CACtB,CACF,EAOA1X,EAAY34B,UAAU6+B,WAAa,SAAUzB,GAC3C,IAGIiU,EAASe,EAAaC,EAAYC,EAHlCnyC,EAASi9B,EAAMj9B,OACfihC,EAAShE,EAAMiE,MACfI,GAAU,EAGA,IAAVL,GAIErpC,KAAKihC,WACP/vB,EAAKo7B,aAAatsC,KAAKihC,WAErBjhC,KAAKkqC,QACPlqC,KAAKkqC,OAAOr/B,QAGd7K,KAAKw4C,OAEL9O,GAAU,GAEO,GAAVL,EACFhE,EAAMoE,UAUT6P,EAAUt5C,KAAKq5C,qBACfgB,EAAcf,EAAQznC,QAAQzJ,GACX,GAAfiyC,IAEFf,EAAQA,EAAQ5xC,OAAS,GAAGmD,QAC5B6+B,GAAU,KAdZ4P,EAAUt5C,KAAKq5C,qBACfgB,EAAcf,EAAQznC,QAAQzJ,GAC1BiyC,GAAef,EAAQ5xC,OAAS,IAElC4xC,EAAQ,GAAGzuC,QACX6+B,GAAU,IAaG,IAAVL,GACiB,qBAApBjhC,EAAO+8B,YACTmU,EAAUt5C,KAAKq5C,qBACfgB,EAAcf,EAAQznC,QAAQzJ,GAC9BkyC,EAAahB,EAAQe,EAAc,GAC/BC,GACFA,EAAWzvC,SAGf6+B,GAAU,GAEO,IAAVL,GACPiQ,EAAUt5C,KAAKq5C,qBACfgB,EAAcf,EAAQznC,QAAQzJ,GAC9BkyC,EAAahB,EAAQe,EAAc,GAC/BC,GAAsC,qBAAxBA,EAAWnV,YAE3BmV,EAAahB,EAAQe,EAAc,IAEhCC,IAEHA,EAAahB,EAAQA,EAAQ5xC,OAAS,IAEpC4yC,GACFA,EAAWzvC,QAEb6+B,GAAU,GAEO,IAAVL,GACPiQ,EAAUt5C,KAAKq5C,qBACfgB,EAAcf,EAAQznC,QAAQzJ,GAC9BmyC,EAAajB,EAAQe,EAAc,GAC/BE,GAAsC,qBAAxBA,EAAWpV,WAC3BoV,EAAW1vC,QAEb6+B,GAAU,GAEO,IAAVL,IACPiQ,EAAUt5C,KAAKq5C,qBACfgB,EAAcf,EAAQznC,QAAQzJ,GAC9BmyC,EAAajB,EAAQe,EAAc,GAC/BE,GAAsC,qBAAxBA,EAAWpV,YAE3BoV,EAAajB,EAAQe,EAAc,IAEhCE,IAEHA,EAAajB,EAAQ,IAEnBiB,IACFA,EAAW1vC,QACX6+B,GAAU,GAEZA,GAAU,GAIRA,IACFrE,EAAMwE,kBACNxE,EAAMG,iBAEV,EAQA5E,EAAY34B,UAAUgyC,WAAa,SAAUxW,EAAO/+B,GAClD,IAAIvB,EAAIsgC,EAAMj4B,WACd,MAAOrI,EAAG,CACR,GAAIA,GAAKuB,EACP,OAAO,EAETvB,EAAIA,EAAEqI,UACR,CAEA,OAAO,CACT,EAEA7F,EAAOF,QAAUm7B,CAGZ,EAEA,SAASj7B,EAAQF,EAAS,GAE/B,aAEA,IAAI+0C,EAAc,EAAoB,IAClC5Z,EAAc,EAAoB,IAClC6Z,EAAoB,EAAoB,IACxCvpC,EAAO,EAAoB,IAa/B,SAAS2vB,EAAMv+B,EAAQ4/B,GAErBliC,KAAKsC,OAASA,EACdtC,KAAK+gC,IAAM,CAAC,EACZ/gC,KAAK06C,UAAW,EAEbxY,GAAWA,aAAkB7gC,QAC9BrB,KAAK26C,SAASzY,EAAOC,MAAOD,EAAO0Y,eACnC56C,KAAK66C,SAAS3Y,EAAOhhC,MAAOghC,EAAOzgC,QAGnCzB,KAAK26C,SAAS,IACd36C,KAAK66C,SAAS,OAGhB76C,KAAK86C,wBAA0B5pC,EAAK4wB,SAAS9hC,KAAK+6C,eAAepvC,KAAK3L,MAAO6gC,EAAK54B,UAAU8J,mBAC5F/R,KAAKg7C,wBAA0B9pC,EAAK4wB,SAAS9hC,KAAKi7C,eAAetvC,KAAK3L,MAAO6gC,EAAK54B,UAAU8J,kBAC9F,CAGA8uB,EAAK54B,UAAU8J,kBAAoB,IAMnC8uB,EAAK54B,UAAUizC,mBAAqB,WAMlC,GALAl7C,KAAKwR,SAAW,CACd2wB,OAAO,EACPjhC,OAAO,GAGLlB,KAAKsC,SACPtC,KAAKwR,SAAS2wB,MAAqC,SAA7BniC,KAAKsC,OAAOQ,QAAQnB,KAC1C3B,KAAKwR,SAAStQ,MAAqC,SAA7BlB,KAAKsC,OAAOQ,QAAQnB,MAER,SAA7B3B,KAAKsC,OAAOQ,QAAQnB,MAAgD,SAA7B3B,KAAKsC,OAAOQ,QAAQnB,OACjB,oBAAnC3B,KAAKsC,OAAOQ,QAAQ2O,YAA4B,CAC1D,IAAID,EAAWxR,KAAKsC,OAAOQ,QAAQ2O,WAAW,CAC5C0wB,MAAOniC,KAAKmiC,MACZjhC,MAAOlB,KAAKkB,MACZ6d,KAAM/e,KAAK+qB,YAGW,mBAAbvZ,GACTxR,KAAKwR,SAAS2wB,MAAQ3wB,EACtBxR,KAAKwR,SAAStQ,MAAQsQ,IAGQ,mBAAnBA,EAAS2wB,QAAqBniC,KAAKwR,SAAS2wB,MAAQ3wB,EAAS2wB,OAC1C,mBAAnB3wB,EAAStQ,QAAqBlB,KAAKwR,SAAStQ,MAAQsQ,EAAStQ,OAE5E,CAEJ,EAMA2/B,EAAK54B,UAAU8iB,QAAU,WACvB,IAAIjf,EAAO9L,KACP+e,EAAO,GACX,MAAOjT,EAAM,CACX,IAAIq2B,EAASr2B,EAAKpH,OAEU,SAApBoH,EAAKpH,OAAOjD,KACVqK,EAAKq2B,MACLr2B,EAAK0Q,WAHTrM,OAKQA,IAAVgyB,GACFpjB,EAAKkE,QAAQkf,GAEfr2B,EAAOA,EAAKpH,MACd,CACA,OAAOqa,CACT,EAOA8hB,EAAK54B,UAAUm7B,SAAW,SAAU0N,GAClC,IAAI/xB,EAAO7N,EAAK2/B,UAAUC,GACtBhlC,EAAO9L,KACX,MAAO8L,GAAQiT,EAAKrX,OAAS,EAAG,CAC9B,IAAIiM,EAAOoL,EAAK+E,QAChB,GAAoB,kBAATnQ,EAAmB,CAC5B,GAAkB,UAAd7H,EAAKrK,KACP,MAAM,IAAI6G,MAAM,kCAAoCqL,EAAO,sBAE7D7H,EAAOA,EAAKm9B,OAAOt1B,EACrB,KACK,CACH,GAAkB,WAAd7H,EAAKrK,KACP,MAAM,IAAI6G,MAAM,yBAA2BqL,EAAO,uBAEpD7H,EAAOA,EAAKm9B,OAAO5F,QAAO,SAAUI,GAClC,OAAOA,EAAMtB,QAAUxuB,CACzB,IAAG,EACL,CACF,CAEA,OAAO7H,CACT,EAOA+0B,EAAK54B,UAAUu7B,YAAc,WAC3B,IAAI2X,EAAU,GACVz2C,EAAS1E,KAAK0E,OAClB,MAAOA,EACLy2C,EAAQl4B,QAAQve,GAChBA,EAASA,EAAOA,OAElB,OAAOy2C,CACT,EAUAta,EAAK54B,UAAU+6B,SAAW,SAAU1iC,EAAOmjC,GAEzCzjC,KAAK8iC,SAEL9iC,KAAKM,MAAQA,EACb,IAAI86C,EAAUp7C,KAAK+gC,IAAIqa,QACvB,GAAI96C,EAAO,CACJ86C,IACHA,EAAUj1C,SAASM,cAAc,MACjCzG,KAAK+gC,IAAIqa,QAAUA,EACnBp7C,KAAK+gC,IAAIsa,QAAQ7vC,WAAWlE,YAAY8zC,IAG1C,IAAIE,EAAUn1C,SAASM,cAAc,OACrC60C,EAAQnW,UAAY,sCACpBmW,EAAQh0C,YAAYnB,SAASipC,eAAe9uC,EAAMiO,UAElD,IAAIgqC,EAASpyC,SAASM,cAAc,UACpC8xC,EAAO92C,KAAO,SACd82C,EAAOpT,UAAY,0BACnBoT,EAAOjxC,YAAYg0C,GAGnB/C,EAAOtS,YAAcsS,EAAOgD,QAAU,WAEpC,IADA,IAAIC,EAAa,CAAC,QAAS,QAAS,QAAS,QACpCz1C,EAAI,EAAGA,EAAIy1C,EAAW9zC,OAAQ3B,IAAK,CAC1C,IAAI01C,EAAYD,EAAWz1C,GAC3Bu1C,EAAQnW,UAAY,iCAAmCsW,EAEvD,IAAI5B,EAAc75C,KAAKsC,OAAO0/B,QAAQ4L,wBAClC8N,EAAcJ,EAAQ1N,wBACtB9mC,EAAS,GACT60C,EAAMzqC,EAAKmgC,WAAWwI,EAAa6B,EAAa50C,GAEpD,GAAI60C,EACF,KAEJ,CACF,EAAEhwC,KAAK3L,MAIHyjC,IACF8U,EAAOhT,QAAU,WACf9B,EAAMD,cAAct5B,SAAQ,SAAUxF,GACpCA,EAAO49B,QAAO,EAChB,IAEAmB,EAAMkU,UAAS,WACblU,EAAM54B,OACR,GACF,GAIF,MAAOuwC,EAAQjM,WACbiM,EAAQzrC,YAAYyrC,EAAQjM,YAE9BiM,EAAQ9zC,YAAYixC,EACtB,MAEM6C,IACFp7C,KAAK+gC,IAAIqa,QAAQ5vC,WAAWmE,YAAY3P,KAAK+gC,IAAIqa,gBAC1Cp7C,KAAK+gC,IAAIqa,QAGtB,EAOAva,EAAK54B,UAAU2zC,SAAW,WACxB,OAAO57C,KAAK0E,OAAS1E,KAAK0E,OAAOukC,OAAOp3B,QAAQ7R,OAAS,CAC3D,EAMA6gC,EAAK54B,UAAU4zC,UAAY,SAASn3C,GAClC1E,KAAK0E,OAASA,CAChB,EAOAm8B,EAAK54B,UAAU0yC,SAAW,SAASxY,EAAOyY,GACxC56C,KAAKmiC,MAAQA,EACbniC,KAAK87C,cAAgB3Z,EACrBniC,KAAK46C,eAAmC,IAAlBA,CACxB,EAMA/Z,EAAK54B,UAAU8zC,SAAW,WAKxB,YAJmB5rC,IAAfnQ,KAAKmiC,OACPniC,KAAKg8C,eAGAh8C,KAAKmiC,KACd,EAQAtB,EAAK54B,UAAU4yC,SAAW,SAAS35C,EAAOO,GACxC,IAAIw6C,EAAYxY,EAGZwF,EAASjpC,KAAKipC,OAClB,GAAIA,EACF,MAAOA,EAAOvhC,OACZ1H,KAAK2P,YAAYs5B,EAAO,IAS5B,GAHAjpC,KAAKyB,KAAOzB,KAAKk8C,SAASh7C,GAGtBO,GAAQA,GAAQzB,KAAKyB,KAAM,CAC7B,GAAY,UAARA,GAAiC,QAAbzB,KAAKyB,KAI3B,MAAM,IAAI6G,MAAM,6CACoBtI,KAAKyB,KACrC,2BAA6BA,EAAO,KALxCzB,KAAKyB,KAAOA,CAOhB,CAEA,GAAiB,SAAbzB,KAAKyB,KAAiB,CAExBzB,KAAKipC,OAAS,GACd,IAAK,IAAIljC,EAAI,EAAGuoC,EAAOptC,EAAMwG,OAAQ3B,EAAIuoC,EAAMvoC,IAC7Ck2C,EAAa/6C,EAAM6E,QACAoK,IAAf8rC,GAA8BA,aAAsBla,WAEtD0B,EAAQ,IAAI5C,EAAK7gC,KAAKsC,OAAQ,CAC5BpB,MAAO+6C,IAETj8C,KAAKsH,YAAYm8B,IAGrBzjC,KAAKkB,MAAQ,EACf,MACK,GAAiB,UAAblB,KAAKyB,KAAkB,CAG9B,IAAK,IAAI06C,KADTn8C,KAAKipC,OAAS,GACS/nC,EACjBA,EAAMgM,eAAeivC,KACvBF,EAAa/6C,EAAMi7C,QACAhsC,IAAf8rC,GAA8BA,aAAsBla,WAEtD0B,EAAQ,IAAI5C,EAAK7gC,KAAKsC,OAAQ,CAC5B6/B,MAAOga,EACPj7C,MAAO+6C,IAETj8C,KAAKsH,YAAYm8B,KAIvBzjC,KAAKkB,MAAQ,IAG8B,IAAvClB,KAAKsC,OAAOQ,QAAQs5C,gBACtBp8C,KAAKwtB,KAAK,MAEd,MAGExtB,KAAKipC,YAAS94B,EACdnQ,KAAKkB,MAAQA,EAGflB,KAAKq8C,cAAgBr8C,KAAKkB,KAC5B,EAMA2/B,EAAK54B,UAAUw6B,SAAW,WAGxB,GAAiB,SAAbziC,KAAKyB,KAAiB,CACxB,IAAIub,EAAM,GAIV,OAHAhd,KAAKipC,OAAO/+B,SAAS,SAAUu5B,GAC7BzmB,EAAItQ,KAAK+2B,EAAMhB,WACjB,IACOzlB,CACT,CACK,GAAiB,UAAbhd,KAAKyB,KAAkB,CAC9B,IAAI2f,EAAM,CAAC,EAIX,OAHAphB,KAAKipC,OAAO/+B,SAAS,SAAUu5B,GAC7BriB,EAAIqiB,EAAMsY,YAActY,EAAMhB,UAChC,IACOrhB,CACT,CAME,YAJmBjR,IAAfnQ,KAAKkB,OACPlB,KAAKs8C,eAGAt8C,KAAKkB,KAEhB,EAMA2/B,EAAK54B,UAAUs0C,SAAW,WACxB,OAAQv8C,KAAK0E,OAAS1E,KAAK0E,OAAO63C,WAAa,EAAI,CACrD,EAMA1b,EAAK54B,UAAU4gC,YAAc,WAC3B,IAAI9pB,EAAO/e,KAAK0E,OAAS1E,KAAK0E,OAAOmkC,cAAgB,GAErD,OADA9pB,EAAKrS,KAAK1M,MACH+e,CACT,EAQA8hB,EAAK54B,UAAUu0C,MAAQ,WACrB,IAAIA,EAAQ,IAAI3b,EAAK7gC,KAAKsC,QAS1B,GARAk6C,EAAM/6C,KAAOzB,KAAKyB,KAClB+6C,EAAMra,MAAQniC,KAAKmiC,MACnBqa,EAAMC,eAAiBz8C,KAAKy8C,eAC5BD,EAAM5B,cAAgB56C,KAAK46C,cAC3B4B,EAAMt7C,MAAQlB,KAAKkB,MACnBs7C,EAAME,eAAiB18C,KAAK08C,eAC5BF,EAAM9B,SAAW16C,KAAK06C,SAElB16C,KAAKipC,OAAQ,CAEf,IAAI0T,EAAc,GAClB38C,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5B,IAAImZ,EAAanZ,EAAM+Y,QACvBI,EAAWf,UAAUW,GACrBG,EAAYjwC,KAAKkwC,EACnB,IACAJ,EAAMvT,OAAS0T,CACjB,MAGEH,EAAMvT,YAAS94B,EAGjB,OAAOqsC,CACT,EAOA3b,EAAK54B,UAAUq6B,OAAS,SAASD,GAC1BriC,KAAKipC,SAKVjpC,KAAK06C,UAAW,EACZ16C,KAAK+gC,IAAIuB,SACXtiC,KAAK+gC,IAAIuB,OAAO6C,UAAY,uBAG9BnlC,KAAKksC,cAEW,IAAZ7J,GACFriC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BA,EAAMnB,OAAOD,EACf,IAEJ,EAOAxB,EAAK54B,UAAU26B,SAAW,SAASP,GAC5BriC,KAAKipC,SAIVjpC,KAAK+rC,cAGW,IAAZ1J,GACFriC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BA,EAAMb,SAASP,EACjB,IAKEriC,KAAK+gC,IAAIuB,SACXtiC,KAAK+gC,IAAIuB,OAAO6C,UAAY,wBAE9BnlC,KAAK06C,UAAW,EAClB,EAKA7Z,EAAK54B,UAAUikC,WAAa,WAC1B,IAAIjD,EAASjpC,KAAKipC,OAClB,GAAKA,GAGAjpC,KAAK06C,SAAV,CAIA,IAAIjE,EAAKz2C,KAAK+gC,IAAI0V,GACdxU,EAAQwU,EAAKA,EAAGjrC,gBAAa2E,EACjC,GAAI8xB,EAAO,CAET,IAAI0J,EAAS3rC,KAAK68C,YACdC,EAASrG,EAAGsG,YACZD,EACF7a,EAAMsJ,aAAaI,EAAQmR,GAG3B7a,EAAM36B,YAAYqkC,GAIpB3rC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BxB,EAAMsJ,aAAa9H,EAAMX,SAAU6I,GACnClI,EAAMyI,YACR,GACF,CApBA,CAqBF,EAKArL,EAAK54B,UAAUuwC,KAAO,WACpB,IAAI/B,EAAKz2C,KAAK+gC,IAAI0V,GACdxU,EAAQwU,EAAKA,EAAGjrC,gBAAa2E,EAC7B8xB,GACFA,EAAMtyB,YAAY8mC,GAEpBz2C,KAAK+rC,YACP,EAMAlL,EAAK54B,UAAU8jC,WAAa,WAC1B,IAAI9C,EAASjpC,KAAKipC,OAClB,GAAKA,GAGAjpC,KAAK06C,SAAV,CAKA,IAAI/O,EAAS3rC,KAAK68C,YACdlR,EAAOngC,YACTmgC,EAAOngC,WAAWmE,YAAYg8B,GAIhC3rC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BA,EAAM+U,MACR,GAXA,CAYF,EAQA3X,EAAK54B,UAAUX,YAAc,SAASwE,GACpC,GAAI9L,KAAKg9C,aAAc,CASrB,GAPAlxC,EAAK+vC,UAAU77C,MACf8L,EAAK8uC,cAA8B,UAAb56C,KAAKyB,KACV,SAAbzB,KAAKyB,OACPqK,EAAK0Q,MAAQxc,KAAKipC,OAAOvhC,QAE3B1H,KAAKipC,OAAOv8B,KAAKZ,GAEb9L,KAAK06C,SAAU,CAEjB,IAAIuC,EAAQnxC,EAAKg3B,SACboa,EAAWl9C,KAAK68C,YAChB5a,EAAQib,EAAWA,EAAS1xC,gBAAa2E,EACzC+sC,GAAYjb,GACdA,EAAMsJ,aAAa0R,EAAOC,GAG5BpxC,EAAKogC,YACP,CAEAlsC,KAAK0jC,UAAU,CAAC,eAAiB,IACjC53B,EAAK43B,UAAU,CAAC,SAAW,GAC7B,CACF,EASA7C,EAAK54B,UAAU4jC,WAAa,SAAS//B,EAAM0/B,GACzC,GAAIxrC,KAAKg9C,aAAc,CAGrB,IAAIna,EAAS7iC,KAAK+gC,IAAM,GAAI/gC,KAAK+gC,IAAI0V,GAAGjrC,gBAAa2E,EACrD,GAAI0yB,EAAO,CACT,IAAIsa,EAASh3C,SAASM,cAAc,MACpC02C,EAAOz2C,MAAMo9B,OAASjB,EAAMkB,aAAe,KAC3ClB,EAAMv7B,YAAY61C,EACpB,CAEIrxC,EAAKpH,QACPoH,EAAKpH,OAAOiL,YAAY7D,GAGtB0/B,aAAsB4R,EACxBp9C,KAAKsH,YAAYwE,GAGjB9L,KAAKurC,aAAaz/B,EAAM0/B,GAGtB3I,GACFA,EAAMlzB,YAAYwtC,EAEtB,CACF,EASAtc,EAAK54B,UAAUo1C,OAAS,SAAUvxC,EAAM0Q,GACtC,GAAI1Q,EAAKpH,QAAU1E,KAAM,CAEvB,IAAIs9C,EAAet9C,KAAKipC,OAAOp3B,QAAQ/F,GACnCwxC,EAAe9gC,GAEjBA,GAEJ,CAEA,IAAIgvB,EAAaxrC,KAAKipC,OAAOzsB,IAAUxc,KAAK2rC,OAC5C3rC,KAAK6rC,WAAW//B,EAAM0/B,EACxB,EAQA3K,EAAK54B,UAAUsjC,aAAe,SAASz/B,EAAM0/B,GAC3C,GAAIxrC,KAAKg9C,aAAc,CACrB,GAAIxR,GAAcxrC,KAAK2rC,OAIrB7/B,EAAK+vC,UAAU77C,MACf8L,EAAK8uC,cAA8B,UAAb56C,KAAKyB,KAC3BzB,KAAKipC,OAAOv8B,KAAKZ,OAEd,CAEH,IAAI0Q,EAAQxc,KAAKipC,OAAOp3B,QAAQ25B,GAChC,IAAc,GAAVhvB,EACF,MAAM,IAAIlU,MAAM,kBAIlBwD,EAAK+vC,UAAU77C,MACf8L,EAAK8uC,cAA8B,UAAb56C,KAAKyB,KAC3BzB,KAAKipC,OAAOvkB,OAAOlI,EAAO,EAAG1Q,EAC/B,CAEA,GAAI9L,KAAK06C,SAAU,CAEjB,IAAIuC,EAAQnxC,EAAKg3B,SACbga,EAAStR,EAAW1I,SACpBb,EAAQ6a,EAASA,EAAOtxC,gBAAa2E,EACrC2sC,GAAU7a,GACZA,EAAMsJ,aAAa0R,EAAOH,GAG5BhxC,EAAKogC,YACP,CAEAlsC,KAAK0jC,UAAU,CAAC,eAAiB,IACjC53B,EAAK43B,UAAU,CAAC,SAAW,GAC7B,CACF,EAQA7C,EAAK54B,UAAUyjC,YAAc,SAAS5/B,EAAM2/B,GAC1C,GAAIzrC,KAAKg9C,aAAc,CACrB,IAAIxgC,EAAQxc,KAAKipC,OAAOp3B,QAAQ45B,GAC5BD,EAAaxrC,KAAKipC,OAAOzsB,EAAQ,GACjCgvB,EACFxrC,KAAKurC,aAAaz/B,EAAM0/B,GAGxBxrC,KAAKsH,YAAYwE,EAErB,CACF,EASA+0B,EAAK54B,UAAUyX,OAAS,SAASrX,GAC/B,IACImU,EADAga,EAAU,GAEV9W,EAASrX,EAAOA,EAAK0Z,mBAAgB5R,EAOzC,UAJOnQ,KAAKu9C,mBACLv9C,KAAKw9C,iBAGMrtC,GAAdnQ,KAAKmiC,MAAoB,CAC3B,IAAIA,EAAQhhC,OAAOnB,KAAKmiC,OAAOpgB,cAC/BvF,EAAQ2lB,EAAMtwB,QAAQ6N,IACR,GAAVlD,IACFxc,KAAKu9C,aAAc,EACnB/mB,EAAQ9pB,KAAK,CACX,KAAQ1M,KACR,KAAQ,WAKZA,KAAKy9C,iBACP,CAGA,GAAIz9C,KAAKg9C,aAAc,CAIrB,GAAIh9C,KAAKipC,OAAQ,CACf,IAAIyU,EAAe,GACnB19C,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5Bia,EAAeA,EAAal4C,OAAOi+B,EAAM/jB,OAAOrX,GAClD,IACAmuB,EAAUA,EAAQhxB,OAAOk4C,EAC3B,CAGA,QAAcvtC,GAAVuP,EAAqB,CACvB,IAAI2iB,GAAU,EACa,GAAvBqb,EAAah2C,OACf1H,KAAK4iC,SAASP,GAGdriC,KAAKsiC,OAAOD,EAEhB,CACF,KACK,CAEH,QAAkBlyB,GAAdnQ,KAAKkB,MAAqB,CAC5B,IAAIA,EAAQC,OAAOnB,KAAKkB,OAAO6gB,cAC/BvF,EAAQtb,EAAM2Q,QAAQ6N,IACR,GAAVlD,IACFxc,KAAKw9C,aAAc,EACnBhnB,EAAQ9pB,KAAK,CACX,KAAQ1M,KACR,KAAQ,UAGd,CAGAA,KAAK29C,iBACP,CAEA,OAAOnnB,CACT,EAOAqK,EAAK54B,UAAU0vC,SAAW,SAASvnC,GACjC,IAAKpQ,KAAK+gC,IAAI0V,KAAOz2C,KAAK+gC,IAAI0V,GAAGjrC,WAAY,CAE3C,IAAI9G,EAAS1E,KAAK0E,OACd29B,GAAU,EACd,MAAO39B,EACLA,EAAO49B,OAAOD,GACd39B,EAASA,EAAOA,MAEpB,CAEI1E,KAAK+gC,IAAI0V,IAAMz2C,KAAK+gC,IAAI0V,GAAGjrC,YAC7BxL,KAAKsC,OAAOq1C,SAAS33C,KAAK+gC,IAAI0V,GAAGmH,UAAWxtC,EAEhD,EAIAywB,EAAKgd,kBAAe1tC,EAQpB0wB,EAAK54B,UAAU4C,MAAQ,SAASizC,GAG9B,GAFAjd,EAAKgd,aAAeC,EAEhB99C,KAAK+gC,IAAI0V,IAAMz2C,KAAK+gC,IAAI0V,GAAGjrC,WAAY,CACzC,IAAIu1B,EAAM/gC,KAAK+gC,IAEf,OAAQ+c,GACN,IAAK,OACC/c,EAAIuG,KACNvG,EAAIuG,KAAKz8B,QAGTk2B,EAAI4B,KAAK93B,QAEX,MAEF,IAAK,OACHk2B,EAAI4B,KAAK93B,QACT,MAEF,IAAK,SACC7K,KAAKg9C,aACPjc,EAAIuB,OAAOz3B,QAEJk2B,EAAIoB,OAASniC,KAAK46C,eACzB7Z,EAAIoB,MAAMt3B,QACVqG,EAAKy4B,sBAAsB5I,EAAIoB,QAExBpB,EAAI7/B,QAAUlB,KAAKg9C,cAC1Bjc,EAAI7/B,MAAM2J,QACVqG,EAAKy4B,sBAAsB5I,EAAI7/B,QAG/B6/B,EAAI4B,KAAK93B,QAEX,MAEF,IAAK,QACCk2B,EAAIoB,OAASniC,KAAK46C,eACpB7Z,EAAIoB,MAAMt3B,QACVqG,EAAKy4B,sBAAsB5I,EAAIoB,QAExBpB,EAAI7/B,QAAUlB,KAAKg9C,cAC1Bjc,EAAI7/B,MAAM2J,QACVqG,EAAKy4B,sBAAsB5I,EAAI7/B,QAExBlB,KAAKg9C,aACZjc,EAAIuB,OAAOz3B,QAGXk2B,EAAI4B,KAAK93B,QAEX,MAEF,IAAK,QACL,QACMk2B,EAAI7/B,QAAUlB,KAAKg9C,cACrBjc,EAAI7/B,MAAM2J,QACVqG,EAAKy4B,sBAAsB5I,EAAI7/B,QAExB6/B,EAAIoB,OAASniC,KAAK46C,eACzB7Z,EAAIoB,MAAMt3B,QACVqG,EAAKy4B,sBAAsB5I,EAAIoB,QAExBniC,KAAKg9C,aACZjc,EAAIuB,OAAOz3B,QAGXk2B,EAAI4B,KAAK93B,QAEX,MAEN,CACF,EAMAg2B,EAAKz0B,OAAS,SAAS2xC,GACrB9tB,YAAW,WACT/e,EAAKy4B,sBAAsBoU,EAC7B,GAAG,EACL,EAKAld,EAAK54B,UAAUu6B,KAAO,WAEpBxiC,KAAKs8C,cAAa,GAClBt8C,KAAKg8C,cAAa,EACpB,EAQAnb,EAAK54B,UAAU+1C,aAAe,SAASlyC,GACrC,GAAI9L,MAAQ8L,EACV,OAAO,EAGT,IAAIm9B,EAASjpC,KAAKipC,OAClB,GAAIA,EAEF,IAAK,IAAIljC,EAAI,EAAGuoC,EAAOrF,EAAOvhC,OAAQ3B,EAAIuoC,EAAMvoC,IAC9C,GAAIkjC,EAAOljC,GAAGi4C,aAAalyC,GACzB,OAAO,EAKb,OAAO,CACT,EAUA+0B,EAAK54B,UAAUg2C,MAAQ,SAASnyC,EAAM0/B,GACpC,GAAI1/B,GAAQ0/B,EAAZ,CAMA,GAAI1/B,EAAKkyC,aAAah+C,MACpB,MAAM,IAAIsI,MAAM,8CAIdwD,EAAKpH,QACPoH,EAAKpH,OAAOiL,YAAY7D,GAI1B,IAAI0wC,EAAQ1wC,EAAK0wC,QACjB1wC,EAAKoyC,WAGD1S,EACFxrC,KAAKurC,aAAaiR,EAAOhR,GAGzBxrC,KAAKsH,YAAYk1C,EArBnB,CA4BF,EASA3b,EAAK54B,UAAU0H,YAAc,SAAS7D,GACpC,GAAI9L,KAAKipC,OAAQ,CACf,IAAIzsB,EAAQxc,KAAKipC,OAAOp3B,QAAQ/F,GAEhC,IAAc,GAAV0Q,EAAa,CACf1Q,EAAK0sC,cAGE1sC,EAAKyxC,mBACLzxC,EAAK0xC,YAEZ,IAAIW,EAAcn+C,KAAKipC,OAAOvkB,OAAOlI,EAAO,GAAG,GAK/C,OAJA2hC,EAAYz5C,OAAS,KAErB1E,KAAK0jC,UAAU,CAAC,eAAiB,IAE1Bya,CACT,CACF,CAGF,EASAtd,EAAK54B,UAAUm2C,QAAU,SAAUtyC,GACjC9L,KAAK2P,YAAY7D,EACnB,EAMA+0B,EAAK54B,UAAUmjC,WAAa,SAAUE,GACpC,IAAID,EAAUrrC,KAAKyB,KAEnB,GAAI4pC,GAAWC,EAAf,CAKA,GAAgB,UAAXA,GAAkC,QAAXA,GACZ,UAAXD,GAAkC,QAAXA,EAIvB,CAEH,IACIgT,EADApc,EAAQjiC,KAAK+gC,IAAI0V,GAAKz2C,KAAK+gC,IAAI0V,GAAGjrC,gBAAa2E,EAGjDkuC,EADEr+C,KAAK06C,SACE16C,KAAK68C,YAGL78C,KAAK8iC,SAEhB,IAAIga,EAAUuB,GAAUA,EAAO7yC,WAAc6yC,EAAOtB,iBAAc5sC,EAGlEnQ,KAAKw4C,OACLx4C,KAAKk+C,WAGLl+C,KAAKyB,KAAO6pC,EAGG,UAAXA,GACGtrC,KAAKipC,SACRjpC,KAAKipC,OAAS,IAGhBjpC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,EAAOjnB,GACnCinB,EAAMya,kBACCza,EAAMjnB,MACbinB,EAAMmX,eAAgB,OACHzqC,GAAfszB,EAAMtB,QACRsB,EAAMtB,MAAQ,GAElB,IAEe,UAAXkJ,GAAkC,QAAXA,IACzBrrC,KAAK06C,UAAW,IAGA,SAAXpP,GACFtrC,KAAKipC,SACRjpC,KAAKipC,OAAS,IAGhBjpC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,EAAOjnB,GACnCinB,EAAMya,WACNza,EAAMmX,eAAgB,EACtBnX,EAAMjnB,MAAQA,CAChB,IAEe,UAAX6uB,GAAkC,QAAXA,IACzBrrC,KAAK06C,UAAW,IAIlB16C,KAAK06C,UAAW,EAIdzY,IACE6a,EACF7a,EAAMsJ,aAAavrC,KAAK8iC,SAAUga,GAGlC7a,EAAM36B,YAAYtH,KAAK8iC,WAG3B9iC,KAAKksC,YACP,MArEElsC,KAAKyB,KAAO6pC,EAuEC,QAAXA,GAAgC,UAAXA,IAGrBtrC,KAAKkB,MADQ,UAAXoqC,EACWnqC,OAAOnB,KAAKkB,OAGZlB,KAAKs+C,YAAYn9C,OAAOnB,KAAKkB,QAG5ClB,KAAK6K,SAGP7K,KAAK0jC,UAAU,CAAC,eAAiB,GAxFjC,CAyFF,EAQA7C,EAAK54B,UAAUq0C,aAAe,SAASiC,GAKrC,GAJIv+C,KAAK+gC,IAAI7/B,OAAsB,SAAblB,KAAKyB,MAAgC,UAAbzB,KAAKyB,OACjDzB,KAAK08C,eAAiBxrC,EAAKq+B,aAAavvC,KAAK+gC,IAAI7/B,aAGxBiP,GAAvBnQ,KAAK08C,eACP,IAEE,IAAIx7C,EACJ,GAAiB,UAAblB,KAAKyB,KACPP,EAAQlB,KAAKw+C,cAAcx+C,KAAK08C,oBAE7B,CACH,IAAI7nC,EAAM7U,KAAKw+C,cAAcx+C,KAAK08C,gBAClCx7C,EAAQlB,KAAKs+C,YAAYzpC,EAC3B,CACI3T,IAAUlB,KAAKkB,QACjBlB,KAAKkB,MAAQA,EACblB,KAAK86C,0BAET,CACA,MAAO1sC,GAGL,GAFApO,KAAKkB,WAAQiP,GAEE,IAAXouC,EACF,MAAMnwC,CAEV,CAEJ,EAMAyyB,EAAK54B,UAAU8yC,eAAiB,WAG9B,IAAI1O,EAAersC,KAAKsC,OAAOwI,eAC/B,GAAIuhC,EAAa7H,MAAO,CACtB,IAAIia,EAAWvtC,EAAK2gC,SAAS1wC,OAAOnB,KAAKkB,OAAQC,OAAOnB,KAAKq8C,gBAC7DhQ,EAAa7H,MAAMyK,YAAcwP,EAASvW,MAC1CmE,EAAa7H,MAAM0K,UAAYuP,EAAStW,GAC1C,CACA,IAAIoE,EAAevsC,KAAKsC,OAAOwI,eAC/B,GAAIyhC,EAAa/H,MAAO,CACtB,IAAIka,EAAWxtC,EAAK2gC,SAAS1wC,OAAOnB,KAAKq8C,eAAgBl7C,OAAOnB,KAAKkB,QACrEqrC,EAAa/H,MAAMyK,YAAcyP,EAASxW,MAC1CqE,EAAa/H,MAAM0K,UAAYwP,EAASvW,GAC1C,CAEAnoC,KAAKsC,OAAOq8C,UAAU,YAAa,CACjC7yC,KAAM9L,KACNirC,SAAUjrC,KAAKq8C,cACfnR,SAAUlrC,KAAKkB,MACfmrC,aAAcA,EACdE,aAAcA,IAGhBvsC,KAAKq8C,cAAgBr8C,KAAKkB,KAC5B,EAMA2/B,EAAK54B,UAAUgzC,eAAiB,WAG9B,IAAI5O,EAAersC,KAAKsC,OAAOwI,eAC/B,GAAIuhC,EAAa7H,MAAO,CACtB,IAAIia,EAAWvtC,EAAK2gC,SAAS7xC,KAAKmiC,MAAOniC,KAAK87C,eAC9CzP,EAAa7H,MAAMyK,YAAcwP,EAASvW,MAC1CmE,EAAa7H,MAAM0K,UAAYuP,EAAStW,GAC1C,CACA,IAAIoE,EAAevsC,KAAKsC,OAAOwI,eAC/B,GAAIyhC,EAAa/H,MAAO,CACtB,IAAIka,EAAWxtC,EAAK2gC,SAAS7xC,KAAK87C,cAAe97C,KAAKmiC,OACtDoK,EAAa/H,MAAMyK,YAAcyP,EAASxW,MAC1CqE,EAAa/H,MAAM0K,UAAYwP,EAASvW,GAC1C,CAEAnoC,KAAKsC,OAAOq8C,UAAU,YAAa,CACjC7yC,KAAM9L,KACNirC,SAAUjrC,KAAK87C,cACf5Q,SAAUlrC,KAAKmiC,MACfkK,aAAcA,EACdE,aAAcA,IAGhBvsC,KAAK87C,cAAgB97C,KAAKmiC,KAC5B,EASAtB,EAAK54B,UAAU01C,gBAAkB,WAC/B,IAAIiB,EAAW5+C,KAAK+gC,IAAI7/B,MACxB,GAAI09C,EAAU,CACZ,IAAIC,EAAa,CAAC,oBAId39C,EAAQlB,KAAKkB,MACbO,EAAqB,QAAbzB,KAAKyB,KAAkByP,EAAKzP,KAAKP,GAASlB,KAAKyB,KACvD+rC,EAAgB,UAAR/rC,GAAoByP,EAAKs8B,MAAMtsC,GAC3C29C,EAAWnyC,KAAK,cAAgBjL,GAC5B+rC,GACFqR,EAAWnyC,KAAK,kBAIlB,IAAIoyC,EAAiC,IAAtB39C,OAAOnB,KAAKkB,QAA6B,SAAblB,KAAKyB,MAAgC,UAAbzB,KAAKyB,KAgBxE,GAfIq9C,GACFD,EAAWnyC,KAAK,oBAId1M,KAAK03C,mBACPmH,EAAWnyC,KAAK,+BAEd1M,KAAKw9C,aACPqB,EAAWnyC,KAAK,wBAGlBkyC,EAASzZ,UAAY0Z,EAAW37B,KAAK,KAGzB,SAARzhB,GAA2B,UAARA,EAAkB,CACvC,IAAIkd,EAAQ3e,KAAKipC,OAASjpC,KAAKipC,OAAOvhC,OAAS,EAC/Ck3C,EAASvY,MAAQrmC,KAAKyB,KAAO,eAAiBkd,EAAQ,QACxD,MACS6uB,GAASxtC,KAAKwR,SAAStQ,MAC9B09C,EAASvY,MAAQ,qDAGjBuY,EAASvY,MAAQ,GA0BnB,GAtBa,YAAT5kC,GAAsBzB,KAAKwR,SAAStQ,OACjClB,KAAK+gC,IAAIge,WACZ/+C,KAAK+gC,IAAIge,SAAW54C,SAASM,cAAc,SAC3CzG,KAAK+gC,IAAIge,SAASt9C,KAAO,WACzBzB,KAAK+gC,IAAIie,WAAa74C,SAASM,cAAc,MAC7CzG,KAAK+gC,IAAIie,WAAW7Z,UAAY,kBAChCnlC,KAAK+gC,IAAIie,WAAW13C,YAAYtH,KAAK+gC,IAAIge,UAEzC/+C,KAAK+gC,IAAIsa,QAAQ7vC,WAAW+/B,aAAavrC,KAAK+gC,IAAIie,WAAYh/C,KAAK+gC,IAAIsa,UAGzEr7C,KAAK+gC,IAAIge,SAASE,QAAUj/C,KAAKkB,OAI7BlB,KAAK+gC,IAAIie,aACXh/C,KAAK+gC,IAAIie,WAAWxzC,WAAWmE,YAAY3P,KAAK+gC,IAAIie,mBAC7Ch/C,KAAK+gC,IAAIie,kBACTh/C,KAAK+gC,IAAIge,UAIhB/+C,KAAK25B,MAAQ35B,KAAKwR,SAAStQ,MAAO,CAEpC,IAAKlB,KAAK+gC,IAAI30B,OAAQ,CACpBpM,KAAK+gC,IAAI30B,OAASjG,SAASM,cAAc,UACzCzG,KAAK6Q,GAAK7Q,KAAKmiC,MAAQ,KAAM,IAAI74B,MAAO41C,qBACxCl/C,KAAK+gC,IAAI30B,OAAOyE,GAAK7Q,KAAK6Q,GAC1B7Q,KAAK+gC,IAAI30B,OAAOoG,KAAOxS,KAAK+gC,IAAI30B,OAAOyE,GAGvC7Q,KAAK+gC,IAAI30B,OAAOwF,OAASzL,SAASM,cAAc,UAChDzG,KAAK+gC,IAAI30B,OAAOwF,OAAO1Q,MAAQ,GAC/BlB,KAAK+gC,IAAI30B,OAAOwF,OAAOmmC,UAAY,KACnC/3C,KAAK+gC,IAAI30B,OAAO9E,YAAYtH,KAAK+gC,IAAI30B,OAAOwF,QAG5C,IAAI,IAAI7L,EAAI,EAAGA,EAAI/F,KAAK25B,KAAKjyB,OAAQ3B,IACnC/F,KAAK+gC,IAAI30B,OAAOwF,OAASzL,SAASM,cAAc,UAChDzG,KAAK+gC,IAAI30B,OAAOwF,OAAO1Q,MAAQlB,KAAK25B,KAAK5zB,GACzC/F,KAAK+gC,IAAI30B,OAAOwF,OAAOmmC,UAAY/3C,KAAK25B,KAAK5zB,GAC1C/F,KAAK+gC,IAAI30B,OAAOwF,OAAO1Q,OAASlB,KAAKkB,QACtClB,KAAK+gC,IAAI30B,OAAOwF,OAAOq1B,UAAW,GAEpCjnC,KAAK+gC,IAAI30B,OAAO9E,YAAYtH,KAAK+gC,IAAI30B,OAAOwF,QAG9C5R,KAAK+gC,IAAIoe,SAAWh5C,SAASM,cAAc,MAC3CzG,KAAK+gC,IAAIoe,SAASha,UAAY,kBAC9BnlC,KAAK+gC,IAAIoe,SAAS73C,YAAYtH,KAAK+gC,IAAI30B,QACvCpM,KAAK+gC,IAAIsa,QAAQ7vC,WAAW+/B,aAAavrC,KAAK+gC,IAAIoe,SAAUn/C,KAAK+gC,IAAIsa,QACvE,EAIGr7C,KAAKkT,QACHlT,KAAKkT,OAAOhG,eAAe,UAC3BlN,KAAKkT,OAAOhG,eAAe,UAC3BlN,KAAKkT,OAAOhG,eAAe,gBAMvBlN,KAAKo/C,gBAJZp/C,KAAKo/C,eAAiBp/C,KAAK+gC,IAAIsa,QAAQtD,UACvC/3C,KAAK+gC,IAAIsa,QAAQ30C,MAAM24C,WAAa,SACpCr/C,KAAK+gC,IAAIsa,QAAQtD,UAAY,GAIjC,MAGM/3C,KAAK+gC,IAAIoe,WACXn/C,KAAK+gC,IAAIoe,SAAS3zC,WAAWmE,YAAY3P,KAAK+gC,IAAIoe,iBAC3Cn/C,KAAK+gC,IAAIoe,gBACTn/C,KAAK+gC,IAAI30B,OAChBpM,KAAK+gC,IAAIsa,QAAQtD,UAAY/3C,KAAKo/C,eAClCp/C,KAAK+gC,IAAIsa,QAAQ30C,MAAM24C,WAAa,UAC7Br/C,KAAKo/C,gBAKhBluC,EAAKi9B,gBAAgByQ,EACvB,CACF,EASA/d,EAAK54B,UAAUw1C,gBAAkB,WAC/B,IAAI6B,EAAWt/C,KAAK+gC,IAAIoB,MACxB,GAAImd,EAAU,CAEZ,IAAIR,EAAiC,IAAtB39C,OAAOnB,KAAKmiC,QAAoC,SAApBniC,KAAK0E,OAAOjD,KACnDq9C,EACF5tC,EAAK88B,aAAasR,EAAU,oBAG5BpuC,EAAKg9B,gBAAgBoR,EAAU,oBAI7Bt/C,KAAKy3C,kBACPvmC,EAAK88B,aAAasR,EAAU,+BAG5BpuC,EAAKg9B,gBAAgBoR,EAAU,+BAE7Bt/C,KAAKu9C,YACPrsC,EAAK88B,aAAasR,EAAU,wBAG5BpuC,EAAKg9B,gBAAgBoR,EAAU,wBAIjCpuC,EAAKi9B,gBAAgBmR,EACvB,CACF,EAQAze,EAAK54B,UAAU+zC,aAAe,SAASuC,GAKrC,GAJIv+C,KAAK+gC,IAAIoB,OAASniC,KAAK46C,gBACzB56C,KAAKy8C,eAAiBvrC,EAAKq+B,aAAavvC,KAAK+gC,IAAIoB,aAGxBhyB,GAAvBnQ,KAAKy8C,eACP,IACE,IAAIta,EAAQniC,KAAKw+C,cAAcx+C,KAAKy8C,gBAEhCta,IAAUniC,KAAKmiC,QACjBniC,KAAKmiC,MAAQA,EACbniC,KAAKg7C,0BAET,CACA,MAAO5sC,GAGL,GAFApO,KAAKmiC,WAAQhyB,GAEE,IAAXouC,EACF,MAAMnwC,CAEV,CAEJ,EAMAyyB,EAAK54B,UAAUuL,SAAW,WACxB,IAAIgC,EAAS,GAGb,GAAkB,WAAdxV,KAAKyB,KAAmB,CAG1B,IAFA,IAAIkQ,EAAO,CAAC,EACR4tC,EAAgB,GACXx5C,EAAI,EAAGA,EAAI/F,KAAKipC,OAAOvhC,OAAQ3B,IAAK,CAC3C,IAAI09B,EAAQzjC,KAAKipC,OAAOljC,GACpB4L,EAAKzE,eAAeu2B,EAAMtB,QAC5Bod,EAAc7yC,KAAK+2B,EAAMtB,OAE3BxwB,EAAK8xB,EAAMtB,QAAS,CACtB,CAEIod,EAAc73C,OAAS,IACzB8N,EAASxV,KAAKipC,OACT5F,QAAO,SAAUv3B,GAChB,OAA8C,IAAvCyzC,EAAc1tC,QAAQ/F,EAAKq2B,MACpC,IACCt2B,KAAI,SAAUC,GACb,MAAO,CACLA,KAAMA,EACNxL,MAAO,CACLiO,QAAS,kBAAoBzC,EAAKq2B,MAAQ,KAGhD,IAER,CAGA,GAAIniC,KAAKipC,OACP,IAASljC,EAAI,EAAGA,EAAI/F,KAAKipC,OAAOvhC,OAAQ3B,IAAK,CAC3C,IAAI5C,EAAInD,KAAKipC,OAAOljC,GAAGyN,WACnBrQ,EAAEuE,OAAS,IACb8N,EAASA,EAAOhQ,OAAOrC,GAE3B,CAGF,OAAOqS,CACT,EAKAqrB,EAAK54B,UAAUi2C,SAAW,WAKxBl+C,KAAK+gC,IAAM,CAAC,CACd,EAOAF,EAAK54B,UAAU66B,OAAS,WACtB,IAAI/B,EAAM/gC,KAAK+gC,IACf,GAAIA,EAAI0V,GACN,OAAO1V,EAAI0V,GASb,GANAz2C,KAAKk7C,qBAGLna,EAAI0V,GAAKtwC,SAASM,cAAc,MAChCs6B,EAAI0V,GAAG3qC,KAAO9L,KAEmB,SAA7BA,KAAKsC,OAAOQ,QAAQnB,KAAiB,CACvC,IAAI69C,EAASr5C,SAASM,cAAc,MACpC,GAAIzG,KAAKwR,SAAS2wB,OAEZniC,KAAK0E,OAAQ,CACf,IAAI+6C,EAAUt5C,SAASM,cAAc,UACrCg5C,EAAQh+C,KAAO,SACfs/B,EAAIuG,KAAOmY,EACXA,EAAQta,UAAY,sBACpBsa,EAAQpZ,MAAQ,6CAChBmZ,EAAOl4C,YAAYm4C,EACrB,CAEF1e,EAAI0V,GAAGnvC,YAAYk4C,GAGnB,IAAIE,EAASv5C,SAASM,cAAc,MAChCk8B,EAAOx8B,SAASM,cAAc,UAClCk8B,EAAKlhC,KAAO,SACZs/B,EAAI4B,KAAOA,EACXA,EAAKwC,UAAY,yBACjBxC,EAAK0D,MAAQ,0CACbqZ,EAAOp4C,YAAYy5B,EAAI4B,MACvB5B,EAAI0V,GAAGnvC,YAAYo4C,EACrB,CAGA,IAAIC,EAAUx5C,SAASM,cAAc,MAOrC,OANAs6B,EAAI0V,GAAGnvC,YAAYq4C,GACnB5e,EAAI6e,KAAO5/C,KAAK6/C,iBAChBF,EAAQr4C,YAAYy5B,EAAI6e,MAExB5/C,KAAK0jC,UAAU,CAAC,eAAiB,IAE1B3C,EAAI0V,EACb,EAOA5V,EAAKwG,YAAc,SAAUlG,EAAOkE,GAClC,IAAK/jC,MAAMsS,QAAQutB,GACjB,OAAON,EAAKwG,YAAY,CAAClG,GAAQkE,GAEnC,GAAqB,IAAjBlE,EAAMz5B,OAAV,CAIA,IAAIo4C,EAAY3e,EAAM,GAClB4e,EAAW5e,EAAMA,EAAMz5B,OAAS,GAChCs4C,EAAcnf,EAAK0B,kBAAkB8C,EAAMj9B,QAC3CojC,EAAauU,EAASE,eACtB39C,EAASw9C,EAAUx9C,OAInB49C,EAAUhvC,EAAK2yB,eAAemc,EAAYjf,IAAI0V,IAAMvlC,EAAK2yB,eAAeic,EAAU/e,IAAI0V,IAErFn0C,EAAO8lC,YACV9lC,EAAO8lC,UAAYl3B,EAAKzF,iBAAiBzE,OAAQ,aAAa,SAAUq+B,GACtExE,EAAKsf,OAAOhf,EAAOkE,EACrB,KAGG/iC,EAAOgmC,UACVhmC,EAAOgmC,QAAUp3B,EAAKzF,iBAAiBzE,OAAQ,WAAU,SAAUq+B,GACjExE,EAAKuf,UAAUjf,EAAOkE,EACxB,KAGF/iC,EAAO0+B,YAAY8J,OACnBxoC,EAAOglC,KAAO,CACZ+Y,UAAWl6C,SAASwB,KAAKjB,MAAM45C,OAC/BjU,aAAc/pC,EAAOwI,eACrB8gC,cAAeJ,EACf+U,OAAQlb,EAAMsC,MACduY,QAASA,EACT/yB,MAAO2yB,EAAUvD,YAEnBp2C,SAASwB,KAAKjB,MAAM45C,OAAS,OAE7Bjb,EAAMG,gBAnCN,CAoCF,EAOA3E,EAAKsf,OAAS,SAAUhf,EAAOkE,GAC7B,IAAK/jC,MAAMsS,QAAQutB,GACjB,OAAON,EAAKsf,OAAO,CAAChf,GAAQkE,GAE9B,GAAqB,IAAjBlE,EAAMz5B,OAAV,CAKA,IAGI84C,EAAQC,EAAQC,EAAQC,EAASC,EAAQC,EACzCC,EAAUC,EACVC,EAASC,EAASC,EAAUC,EAAYC,EAAYC,EALpD/+C,EAAS6+B,EAAM,GAAG7+B,OAClBqhC,EAAS0B,EAAMwC,MAAQvlC,EAAOglC,KAAK4Y,QACnCK,EAASlb,EAAMsC,MAIf2Z,GAAQ,EAKRxB,EAAY3e,EAAM,GAItB,GAHAqf,EAASV,EAAU/e,IAAI0V,GACvBuK,EAAU9vC,EAAK2yB,eAAe2c,GAC9BW,EAAaX,EAAOzG,aAChBpW,EAASqd,EAAS,CAEpBP,EAASD,EACT,GACEC,EAASA,EAAOc,gBAChBT,EAAWjgB,EAAK0B,kBAAkBke,GAClCQ,EAAUR,EAASvvC,EAAK2yB,eAAe4c,GAAU,QAE5CA,GAAU9c,EAASsd,GAEtBH,IAAaA,EAASp8C,SACxBo8C,OAAW3wC,GAGR2wC,IAEHD,EAASL,EAAOh1C,WAAW2jC,WAC3BsR,EAASI,EAASA,EAAO9D,iBAAc5sC,EACvC2wC,EAAWjgB,EAAK0B,kBAAkBke,GAC9BK,GAAYhB,IACdgB,OAAW3wC,IAIX2wC,IAEFL,EAASK,EAAS/f,IAAI0V,GACtBwK,EAAUR,EAASvvC,EAAK2yB,eAAe4c,GAAU,EAC7C9c,EAASsd,EAAUE,IACrBL,OAAW3wC,IAIX2wC,IACF3f,EAAMj3B,SAAQ,SAAU4B,GACtBg1C,EAASp8C,OAAOmnC,WAAW//B,EAAMg1C,EACnC,IACAQ,GAAQ,EAEZ,KACK,CAEH,IAAIvB,EAAW5e,EAAMA,EAAMz5B,OAAS,GAGpC,GAFAk5C,EAAUb,EAASrF,UAAYqF,EAASpU,OAAUoU,EAASpU,OAAO7I,SAAWid,EAAShf,IAAI0V,GAC1FkK,EAAUC,EAASA,EAAO7D,iBAAc5sC,EACpCwwC,EAAS,CACXO,EAAWhwC,EAAK2yB,eAAe8c,GAC/BD,EAASC,EACT,GACEI,EAAWlgB,EAAK0B,kBAAkBme,GAC9BA,IACFU,EAAaV,EAAO3D,YAChB7rC,EAAK2yB,eAAe6c,EAAO3D,aAAe,EAC9CsE,EAAaX,EAAUU,EAAaF,EAAY,EAE5CH,EAASr8C,OAAOukC,OAAOvhC,QAAUy5B,EAAMz5B,QACvCq5C,EAASr8C,OAAOukC,OAAO9H,EAAMz5B,OAAS,IAAMq4C,IAG9CiB,GAAW,KAKfN,EAASA,EAAO3D,kBAEX2D,GAAU/c,EAASqd,EAAUK,GAEpC,GAAIN,GAAYA,EAASr8C,OAAQ,CAE/B,IAAIqjC,EAASwY,EAASj+C,EAAOglC,KAAKiZ,OAC9BiB,EAAY37B,KAAK47B,MAAM1Z,EAAQ,GAAK,GACpC5a,EAAQ7qB,EAAOglC,KAAKna,MAAQq0B,EAC5BE,EAAYX,EAASxE,WAGzBkE,EAASM,EAAShgB,IAAI0V,GAAG8K,gBACzB,MAAOG,EAAYv0B,GAASszB,EAAQ,CAClCK,EAAWjgB,EAAK0B,kBAAkBke,GAElC,IAAIkB,EAAgBxgB,EAAMygB,MAAK,SAAU91C,GACvC,OAAOA,IAASg1C,GAAYA,EAAS7G,WAAWnuC,EAClD,IAEA,GAAI61C,OAGC,MAAIb,aAAoB1D,GAe3B,MAdA,IAAInU,EAAS6X,EAASp8C,OAAOukC,OAC7B,GAAIA,EAAOvhC,QAAUy5B,EAAMz5B,QAAUuhC,EAAO9H,EAAMz5B,OAAS,IAAMq4C,EAS/D,MAJAgB,EAAWlgB,EAAK0B,kBAAkBke,GAClCiB,EAAYX,EAASxE,UAQzB,CAEAkE,EAASA,EAAOc,eAClB,CAGIX,EAAO7D,aAAegE,EAAShgB,IAAI0V,KACrCtV,EAAMj3B,SAAQ,SAAU4B,GACtBi1C,EAASr8C,OAAOmnC,WAAW//B,EAAMi1C,EACnC,IACAO,GAAQ,EAEZ,CACF,CACF,CAEIA,IAEFh/C,EAAOglC,KAAKiZ,OAASA,EACrBj+C,EAAOglC,KAAKna,MAAQ2yB,EAAUvD,YAIhCj6C,EAAOu/C,gBAAgBle,GAEvB0B,EAAMG,gBAlJN,CAmJF,EAOA3E,EAAKuf,UAAY,SAAUjf,EAAOkE,GAChC,IAAK/jC,MAAMsS,QAAQutB,GACjB,OAAON,EAAKsf,OAAO,CAAChf,GAAQkE,GAE9B,GAAqB,IAAjBlE,EAAMz5B,OAAV,CAIA,IAAIo4C,EAAY3e,EAAM,GAClB7+B,EAASw9C,EAAUx9C,OACnBoC,EAASo7C,EAAUp7C,OACnB0kC,EAAa1kC,EAAOukC,OAAOp3B,QAAQiuC,GACnCtU,EAAa9mC,EAAOukC,OAAOG,EAAajI,EAAMz5B,SAAWhD,EAAOinC,OAGhExK,EAAM,IACRA,EAAM,GAAGJ,IAAI4B,KAAK93B,QAGpB,IAAIq3B,EAAS,CACXf,MAAOA,EACPkL,aAAc/pC,EAAOglC,KAAK+E,aAC1BE,aAAcjqC,EAAOwI,eACrB8gC,cAAetpC,EAAOglC,KAAKsE,cAC3BE,cAAeN,GAGbtJ,EAAO0J,eAAiB1J,EAAO4J,eAEjCxpC,EAAOq8C,UAAU,YAAazc,GAGhC/7B,SAASwB,KAAKjB,MAAM45C,OAASh+C,EAAOglC,KAAK+Y,UACzC/9C,EAAO0+B,YAAY+J,SACnB5J,EAAMj3B,SAAQ,SAAU4B,GAClBu5B,EAAMj9B,SAAW0D,EAAKi1B,IAAIuG,MAAQjC,EAAMj9B,SAAW0D,EAAKi1B,IAAI4B,MAC9DrgC,EAAO0+B,YAAY4J,aAEvB,WACOtoC,EAAOglC,KAEVhlC,EAAO8lC,YACTl3B,EAAKxF,oBAAoB1E,OAAQ,YAAa1E,EAAO8lC,kBAC9C9lC,EAAO8lC,WAEZ9lC,EAAOgmC,UACTp3B,EAAKxF,oBAAoB1E,OAAQ,UAAW1E,EAAOgmC,gBAC5ChmC,EAAOgmC,SAIhBhmC,EAAOgiC,iBAEPe,EAAMG,gBA/CN,CAgDF,EAQA3E,EAAK54B,UAAUgyC,WAAa,SAAUnuC,GACpC,IAAIlG,EAAI5F,KAAK0E,OACb,MAAOkB,EAAG,CACR,GAAIA,GAAKkG,EACP,OAAO,EAETlG,EAAIA,EAAElB,MACR,CAEA,OAAO,CACT,EAOAm8B,EAAK54B,UAAU65C,gBAAkB,WAC/B,OAAO37C,SAASM,cAAc,MAChC,EAOAo6B,EAAK54B,UAAUyiC,aAAe,SAAUD,GAClCzqC,KAAK+gC,IAAI0V,KACPhM,EACFv5B,EAAK88B,aAAahuC,KAAK+gC,IAAI0V,GAAI,wBAG/BvlC,EAAKg9B,gBAAgBluC,KAAK+gC,IAAI0V,GAAI,wBAGhCz2C,KAAK2rC,QACP3rC,KAAK2rC,OAAOjB,aAAaD,GAGvBzqC,KAAKipC,QACPjpC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BA,EAAMiH,aAAaD,EACrB,IAGN,EAOA5J,EAAK54B,UAAUygC,YAAc,SAAUzB,EAAU8a,GAC/C/hD,KAAKinC,SAAWA,EAEZjnC,KAAK+gC,IAAI0V,KACPxP,EACF/1B,EAAK88B,aAAahuC,KAAK+gC,IAAI0V,GAAI,uBAG/BvlC,EAAKg9B,gBAAgBluC,KAAK+gC,IAAI0V,GAAI,uBAGhCsL,EACF7wC,EAAK88B,aAAahuC,KAAK+gC,IAAI0V,GAAI,oBAG/BvlC,EAAKg9B,gBAAgBluC,KAAK+gC,IAAI0V,GAAI,oBAGhCz2C,KAAK2rC,QACP3rC,KAAK2rC,OAAOjD,YAAYzB,GAGtBjnC,KAAKipC,QACPjpC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BA,EAAMiF,YAAYzB,EACpB,IAGN,EAOApG,EAAK54B,UAAUkjC,YAAc,SAAUjqC,GACrClB,KAAKkB,MAAQA,EACblB,KAAK0jC,WACP,EAMA7C,EAAK54B,UAAUy6B,YAAc,SAAUP,GACrCniC,KAAKmiC,MAAQA,EACbniC,KAAK0jC,WACP,EAYA7C,EAAK54B,UAAUy7B,UAAY,SAAU5gC,GAEnC,IAAIk/C,EAAUhiD,KAAK+gC,IAAI6e,KACnBoC,IACFA,EAAQt7C,MAAMu7C,WAA+B,GAAlBjiD,KAAKu8C,WAAkB,MAIpD,IAaM2F,EAbF5C,EAAWt/C,KAAK+gC,IAAIoB,MACpBmd,IACEt/C,KAAK46C,eAEP0E,EAAS6C,gBAAkBniD,KAAKwR,SAAS2wB,MACzCmd,EAAS8C,YAAa,EACtB9C,EAASna,UAAY,oBAIrBma,EAASna,UAAY,sBAKrB+c,OADgB/xC,GAAdnQ,KAAKwc,MACKxc,KAAKwc,WAEIrM,GAAdnQ,KAAKmiC,MACAniC,KAAKmiC,MAEVniC,KAAKg9C,aACAh9C,KAAKyB,KAGL,GAEd69C,EAASvH,UAAY/3C,KAAKqiD,YAAYH,GAEtCliD,KAAKsiD,iBAIP,IAAI1D,EAAW5+C,KAAK+gC,IAAI7/B,MACxB,GAAI09C,EAAU,CACZ,IAAIjgC,EAAQ3e,KAAKipC,OAASjpC,KAAKipC,OAAOvhC,OAAS,EAC9B,SAAb1H,KAAKyB,MACPm9C,EAAS7G,UAAY,IAAMp5B,EAAQ,IACnCzN,EAAK88B,aAAahuC,KAAK+gC,IAAI0V,GAAI,0BAEX,UAAbz2C,KAAKyB,MACZm9C,EAAS7G,UAAY,IAAMp5B,EAAQ,IACnCzN,EAAK88B,aAAahuC,KAAK+gC,IAAI0V,GAAI,2BAG/BmI,EAAS7G,UAAY/3C,KAAKqiD,YAAYriD,KAAKkB,OAC3CgQ,EAAKg9B,gBAAgBluC,KAAK+gC,IAAI0V,GAAI,yBAEtC,CAGAz2C,KAAKy9C,kBACLz9C,KAAK29C,kBAGD76C,IAAqC,IAA1BA,EAAQy/C,eAErBviD,KAAKwiD,oBAGH1/C,IAA+B,IAApBA,EAAQu/B,SAEjBriC,KAAKipC,QACPjpC,KAAKipC,OAAO/+B,SAAQ,SAAUu5B,GAC5BA,EAAMC,UAAU5gC,EAClB,IAKA9C,KAAK2rC,QACP3rC,KAAK2rC,OAAOjI,WAEhB,EAMA7C,EAAK54B,UAAUq6C,cAAgB,WAE1BtiD,KAAKsC,QAAUtC,KAAKsC,OAAOQ,UAE5B9C,KAAKkT,OAAS2tB,EAAK4hB,YAAYziD,KAAKsC,OAAOQ,QAAQoQ,OAAQlT,KAAK+qB,WAC5D/qB,KAAKkT,OACPlT,KAAK25B,KAAOkH,EAAK6hB,UAAU1iD,KAAKkT,eAGzBlT,KAAK25B,KAGlB,EASAkH,EAAK6hB,UAAY,SAAUxvC,GACzB,GAAIA,EAAOymB,KACT,OAAOzmB,EAAOymB,KAGhB,IAAIgpB,EAAYzvC,EAAOonB,OAASpnB,EAAOumB,OAASvmB,EAAOsmB,MACvD,GAAImpB,EAAW,CACb,IAAI1gC,EAAQ0gC,EAAUtf,QAAO,SAAUC,GAAQ,OAAOA,EAAM3J,IAAI,IAChE,GAAI1X,EAAMva,OAAS,EACjB,OAAOua,EAAM,GAAG0X,IAEpB,CAEA,OAAO,IACT,EASAkH,EAAK4hB,YAAc,SAAUvvC,EAAQ6L,GAGnC,IAFA,IAAI6jC,EAAc1vC,EAETnN,EAAI,EAAGA,EAAIgZ,EAAKrX,QAAUk7C,EAAa78C,IAAK,CACnD,IAAI+C,EAAMiW,EAAKhZ,GACI,kBAAR+C,GAAoB85C,EAAYvvB,WACzCuvB,EAAcA,EAAYvvB,WAAWvqB,IAAQ,KAEvB,kBAARA,GAAoB85C,EAAY/uB,QAC9C+uB,EAAcA,EAAY/uB,MAE9B,CAEA,OAAO+uB,CACT,EAQA/hB,EAAK54B,UAAUu6C,kBAAoB,WACjC,IAAI5D,EAAW5+C,KAAK+gC,IAAI7/B,MACpB+nC,EAASjpC,KAAKipC,OACd2V,GAAY3V,IACG,SAAbjpC,KAAKyB,KACPwnC,EAAO/+B,SAAQ,SAAUu5B,EAAOjnB,GAC9BinB,EAAMjnB,MAAQA,EACd,IAAI2/B,EAAa1Y,EAAM1C,IAAIoB,MACvBga,IACFA,EAAWpE,UAAYv7B,EAE3B,IAEoB,UAAbxc,KAAKyB,MACZwnC,EAAO/+B,SAAQ,SAAUu5B,QACJtzB,GAAfszB,EAAMjnB,eACDinB,EAAMjnB,WAEMrM,GAAfszB,EAAMtB,QACRsB,EAAMtB,MAAQ,IAGpB,IAGN,EAMAtB,EAAK54B,UAAU46C,gBAAkB,WAC/B,IAAIjE,EA2BJ,MAzBiB,SAAb5+C,KAAKyB,MACPm9C,EAAWz4C,SAASM,cAAc,OAClCm4C,EAAS7G,UAAY,SAED,UAAb/3C,KAAKyB,MACZm9C,EAAWz4C,SAASM,cAAc,OAClCm4C,EAAS7G,UAAY,UAGhB/3C,KAAKwR,SAAStQ,OAASgQ,EAAKs8B,MAAMxtC,KAAKkB,QAE1C09C,EAAWz4C,SAASM,cAAc,KAClCm4C,EAAS/+B,KAAO7f,KAAKkB,MACrB09C,EAASx2C,OAAS,SAClBw2C,EAAS7G,UAAY/3C,KAAKqiD,YAAYriD,KAAKkB,SAI3C09C,EAAWz4C,SAASM,cAAc,OAClCm4C,EAASuD,gBAAkBniD,KAAKwR,SAAStQ,MACzC09C,EAASwD,YAAa,EACtBxD,EAAS7G,UAAY/3C,KAAKqiD,YAAYriD,KAAKkB,QAIxC09C,CACT,EAOA/d,EAAK54B,UAAU66C,uBAAyB,WAEtC,IAAIxgB,EAASn8B,SAASM,cAAc,UAapC,OAZA67B,EAAO7gC,KAAO,SACVzB,KAAKg9C,cACP1a,EAAO6C,UAAYnlC,KAAK06C,SAAW,sBAAwB,uBAC3DpY,EAAO+D,MACH,wGAIJ/D,EAAO6C,UAAY,uBACnB7C,EAAO+D,MAAQ,IAGV/D,CACT,EAQAzB,EAAK54B,UAAU43C,eAAiB,WAC9B,IAAI9e,EAAM/gC,KAAK+gC,IACXihB,EAAU77C,SAASM,cAAc,SACjCo8B,EAAQ18B,SAASM,cAAc,SACnCu7C,EAAQt7C,MAAMq8C,eAAiB,WAC/Bf,EAAQ7c,UAAY,oBACpB6c,EAAQ16C,YAAYu7B,GACpB,IAAI4T,EAAKtwC,SAASM,cAAc,MAChCo8B,EAAMv7B,YAAYmvC,GAGlB,IAAIuM,EAAW78C,SAASM,cAAc,MACtCu8C,EAAS7d,UAAY,kBACrBsR,EAAGnvC,YAAY07C,GACfjiB,EAAIuB,OAAStiC,KAAK8iD,yBAClBE,EAAS17C,YAAYy5B,EAAIuB,QACzBvB,EAAIiiB,SAAWA,EAGf,IAAIrD,EAAUx5C,SAASM,cAAc,MACrCk5C,EAAQxa,UAAY,kBACpBsR,EAAGnvC,YAAYq4C,GACf5e,EAAIoB,MAAQniC,KAAK8hD,kBACjBnC,EAAQr4C,YAAYy5B,EAAIoB,OACxBpB,EAAI4e,QAAUA,EAGd,IAAIsD,EAAc98C,SAASM,cAAc,MACzCw8C,EAAY9d,UAAY,kBACxBsR,EAAGnvC,YAAY27C,GACE,UAAbjjD,KAAKyB,MAAiC,SAAbzB,KAAKyB,OAChCwhD,EAAY37C,YAAYnB,SAASipC,eAAe,MAChD6T,EAAY9d,UAAY,wBAE1BpE,EAAIkiB,YAAcA,EAGlB,IAAI5H,EAAUl1C,SAASM,cAAc,MAOrC,OANA40C,EAAQlW,UAAY,kBACpBsR,EAAGnvC,YAAY+zC,GACfta,EAAI7/B,MAAQlB,KAAK6iD,kBACjBxH,EAAQ/zC,YAAYy5B,EAAI7/B,OACxB6/B,EAAIsa,QAAUA,EAEP2G,CACT,EAMAnhB,EAAK54B,UAAUm9B,QAAU,SAAUC,GACjC,IAAI5jC,EAAO4jC,EAAM5jC,KACb2G,EAASi9B,EAAMj9B,QAAUi9B,EAAM6d,WAC/BniB,EAAM/gC,KAAK+gC,IACXj1B,EAAO9L,KACPmjD,EAAanjD,KAAKg9C,aActB,GAVI50C,GAAU24B,EAAIuG,MAAQl/B,GAAU24B,EAAI4B,OAC1B,aAARlhC,EACFzB,KAAKsC,OAAO0+B,YAAYyJ,UAAUzqC,MAEnB,YAARyB,GACPzB,KAAKsC,OAAO0+B,YAAY4J,eAKhB,SAARnpC,GAAmB2G,GAAU24B,EAAI4B,KAAM,CACzC,IAAI3B,EAAcl1B,EAAKxJ,OAAO0+B,YAC9BA,EAAYyJ,UAAU3+B,GACtBk1B,EAAY8J,OACZ55B,EAAK88B,aAAajN,EAAI4B,KAAM,uBAC5B3iC,KAAKknC,gBAAgBnG,EAAI4B,MAAM,WAC7BzxB,EAAKg9B,gBAAgBnN,EAAI4B,KAAM,uBAC/B3B,EAAY+J,SACZ/J,EAAY4J,aACd,GACF,CAGA,GAAY,SAARnpC,IACE2G,GAAU24B,EAAIuB,SACiB,SAA7Bx2B,EAAKxJ,OAAOQ,QAAQnB,MAAgD,SAA7BmK,EAAKxJ,OAAOQ,QAAQnB,OAAwC,QAApByG,EAAO+D,WACtFg3C,EAAY,CACd,IAAI9gB,EAAUgD,EAAMmE,QACpBxpC,KAAKojD,UAAU/gB,EACjB,CAKQ,UAAR5gC,GAAoB2G,GAAU24B,EAAIge,WACpC/+C,KAAK+gC,IAAI7/B,MAAM62C,WAAa/3C,KAAKkB,MACjClB,KAAKs8C,gBAIK,UAAR76C,GAAoB2G,GAAU24B,EAAI30B,SACpCpM,KAAK+gC,IAAI7/B,MAAM62C,UAAYhX,EAAI30B,OAAOlL,MACtClB,KAAKs8C,eACLt8C,KAAK29C,mBAIP,IAAIiB,EAAW7d,EAAI7/B,MACnB,GAAIkH,GAAUw2C,EAEZ,OAAQn9C,GACN,IAAK,OACL,IAAK,SACHzB,KAAKs8C,cAAa,GAClBt8C,KAAK29C,kBACD39C,KAAKkB,QACP09C,EAAS7G,UAAY/3C,KAAKqiD,YAAYriD,KAAKkB,QAE7C,MAEF,IAAK,QAEHlB,KAAKs8C,cAAa,GAClBt8C,KAAK29C,kBACL,MAEF,IAAK,UACL,IAAK,YAEH39C,KAAKsC,OAAO2+B,UAAYjhC,KAAKsC,OAAOwI,eACpC,MAEF,IAAK,SACCu6B,EAAMmE,SAAYxpC,KAAKwR,SAAStQ,OAC9BgQ,EAAKs8B,MAAMxtC,KAAKkB,QAClB8F,OAAOq8C,KAAKrjD,KAAKkB,MAAO,UAG5B,MAEF,IAAK,QAEHlB,KAAKs8C,cAAa,GAClBt8C,KAAK29C,kBACL,MAEF,IAAK,MACL,IAAK,QACH1tB,YAAW,WACTnkB,EAAKwwC,cAAa,GAClBxwC,EAAK6xC,iBACP,GAAG,GACH,MAKN,IAAI2B,EAAWve,EAAIoB,MACnB,GAAI/5B,GAAUk3C,EACZ,OAAQ79C,GACN,IAAK,OACL,IAAK,SACHzB,KAAKg8C,cAAa,GAClBh8C,KAAKy9C,kBACDz9C,KAAKmiC,QACPmd,EAASvH,UAAY/3C,KAAKqiD,YAAYriD,KAAKmiC,QAE7C,MAEF,IAAK,QACHniC,KAAKg8C,cAAa,GAClBh8C,KAAKsiD,gBACLtiD,KAAKy9C,kBACLz9C,KAAK29C,kBACL,MAEF,IAAK,UACL,IAAK,YACH39C,KAAKsC,OAAO2+B,UAAYjhC,KAAKsC,OAAOwI,eACpC,MAEF,IAAK,QACH9K,KAAKg8C,cAAa,GAClBh8C,KAAKy9C,kBACL,MAEF,IAAK,MACL,IAAK,QACHxtB,YAAW,WACTnkB,EAAKkwC,cAAa,GAClBlwC,EAAK2xC,iBACP,GAAG,GACH,MAMN,IAAIuE,EAAUjhB,EAAI6e,KAClB,GAAIx3C,GAAU45C,EAAQx2C,YAAsB,SAAR/J,IAAoB4jC,EAAM8B,SAAU,CACtE,IAAI0G,OAAyB19B,GAAjBk1B,EAAMie,QACbje,EAAMie,QAAkC,IAAvBtjD,KAAKu8C,WAAa,GACnClX,EAAMsC,MAAQz2B,EAAKu8B,gBAAgB1M,EAAIkiB,aACxCpV,GAAQsV,EAEN7D,IACFpuC,EAAKw9B,wBAAwB4Q,GAC7BA,EAASz0C,SAIP+zC,IAAa5+C,KAAK25B,OACpBzoB,EAAKw9B,wBAAwBkQ,GAC7BA,EAAS/zC,QAGf,EACMzC,GAAU24B,EAAIiiB,UAAaG,IAAe/6C,GAAU24B,EAAI4e,SAAWv3C,GAAU24B,EAAIkiB,aAC1E,SAARxhD,GAAoB4jC,EAAM8B,UACzBmY,IACFpuC,EAAKw9B,wBAAwB4Q,GAC7BA,EAASz0C,SAID,WAARpJ,GACFzB,KAAKujD,UAAUle,EAEnB,EAMAxE,EAAK54B,UAAUs7C,UAAY,SAAUle,GACnC,IAMIkS,EAAUiM,EAAUC,EAASC,EAE7BrX,EACAT,EACAzK,EACAD,EAXAmI,EAAShE,EAAMiE,OAASjE,EAAMkE,QAC9BnhC,EAASi9B,EAAMj9B,QAAUi9B,EAAM6d,WAC/B1Z,EAAUnE,EAAMmE,QAChBC,EAAWpE,EAAMoE,SACjBka,EAASte,EAAMse,OACfja,GAAU,EAEVl4B,EAAwC,SAA7BxR,KAAKsC,OAAOQ,QAAQnB,KAK/BiiD,EAAgB5jD,KAAKsC,OAAO4+B,eAAeC,MAAMz5B,OAAS,EACxD1H,KAAKsC,OAAO4+B,eAAeC,MAC3B,CAACnhC,MACH8/C,EAAY8D,EAAc,GAC1B7D,EAAW6D,EAAcA,EAAcl8C,OAAS,GAGpD,GAAc,IAAV2hC,GACF,GAAIjhC,GAAUpI,KAAK+gC,IAAI7/B,MAChBlB,KAAKwR,SAAStQ,QAASmkC,EAAMmE,SAC5Bt4B,EAAKs8B,MAAMxtC,KAAKkB,SAClB8F,OAAOq8C,KAAKrjD,KAAKkB,MAAO,UACxBwoC,GAAU,QAIX,GAAIthC,GAAUpI,KAAK+gC,IAAIuB,OAAQ,CAClC,IAAI6gB,EAAanjD,KAAKg9C,aACtB,GAAImG,EAAY,CACd,IAAI9gB,EAAUgD,EAAMmE,QACpBxpC,KAAKojD,UAAU/gB,GACfj6B,EAAOyC,QACP6+B,GAAU,CACZ,CACF,OAEG,GAAc,IAAVL,EACHG,GAAWh4B,IACbqvB,EAAKuJ,YAAYwZ,GACjBla,GAAU,QAGT,GAAc,IAAVL,EACHG,IACFxpC,KAAKojD,UAAU3Z,GACfrhC,EAAOyC,QACP6+B,GAAU,QAGT,GAAc,IAAVL,GAAgB73B,EACnBg4B,IACFxpC,KAAKknC,gBAAgB9+B,GACrBshC,GAAU,QAGT,GAAc,IAAVL,GAAgB73B,EACnBg4B,IACF3I,EAAKwJ,SAASuZ,GACdla,GAAU,QAGT,GAAc,IAAVL,GAAgB73B,EACnBg4B,IAAYC,GACdzpC,KAAK6jD,kBACLna,GAAU,GAEHF,GAAWC,IAClBzpC,KAAK8jD,iBACLpa,GAAU,QAGT,GAAc,IAAVL,GACP,GAAIsa,EAAQ,CAEV,IAAII,EAAU/jD,KAAKgkD,YACfD,GACFA,EAAQl5C,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,IAE1DshC,GAAU,CACZ,OAEG,GAAc,IAAVL,GACP,GAAIsa,EAAQ,CAEV,IAAIO,EAAWlkD,KAAKmkD,aAChBD,GACFA,EAASr5C,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,IAE3DshC,GAAU,CACZ,OAEG,GAAc,IAAVL,GACP,GAAIsa,IAAWla,EAAU,CAEvB,IAAI2a,EAAcpkD,KAAKqkD,iBAAiBj8C,GACpCg8C,GACFpkD,KAAK6K,MAAM7K,KAAKikD,gBAAgBG,IAElC1a,GAAU,CACZ,MACK,GAAIia,GAAUla,GAAYj4B,EAAU,CACvC,GAAIuuC,EAASrF,SAAU,CACrB,IAAI4J,EAAYvE,EAASlD,YACzB4G,EAAUa,EAAYA,EAAUvH,iBAAc5sC,CAChD,KACK,CACH,IAAI4wB,EAAMgf,EAASjd,SACnB2gB,EAAU1iB,EAAIgc,WAChB,CACI0G,IACFD,EAAW3iB,EAAK0B,kBAAkBkhB,GAClCC,EAAWD,EAAQ1G,YACnBwH,EAAY1jB,EAAK0B,kBAAkBmhB,GAC/BF,GAAYA,aAAoBpG,GACG,GAAjC2C,EAASr7C,OAAOukC,OAAOvhC,QACzB68C,GAAaA,EAAU7/C,SACzB2nC,EAAersC,KAAKsC,OAAOwI,eAC3B8gC,EAAgBmU,EAASE,eAEzB2D,EAAc15C,SAAQ,SAAU4B,GAC9By4C,EAAU7/C,OAAOmnC,WAAW//B,EAAMy4C,EACpC,IACAvkD,KAAK6K,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,IAErDpI,KAAKsC,OAAOq8C,UAAU,YAAa,CACjCxd,MAAOyiB,EACPhY,cAAeA,EACfE,cAAeyY,EACflY,aAAcA,EACdE,aAAcvsC,KAAKsC,OAAOwI,kBAIlC,OAEG,GAAc,IAAVu+B,EACHsa,IAAWla,GAEb8N,EAAWv3C,KAAKwkD,gBACZjN,IACFv3C,KAAKsC,OAAO8kC,UAAS,GACrBmQ,EAAS1sC,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,KAE3DshC,GAAU,IAEFia,GAAUna,GAAWC,GAAYj4B,GAEzC+lC,EAAWv3C,KAAKwkD,gBACZjN,IACFrW,EAAiBlhC,KAAKsC,OAAO4+B,eAC7BA,EAAegH,MAAQhH,EAAegH,OAASloC,KAC/CkhC,EAAeiH,IAAMoP,EACrBpW,EAAQnhC,KAAKsC,OAAOkmC,mBAAmBtH,EAAegH,MAAOhH,EAAeiH,KAE5EnoC,KAAKsC,OAAO8J,OAAO+0B,GACnBoW,EAAS1sC,MAAM,UAEjB6+B,GAAU,GAEHia,GAAUla,GAAYj4B,IAE7B+lC,EAAWuI,EAAU0E,gBACjBjN,GAAYA,EAAS7yC,SACvB2nC,EAAersC,KAAKsC,OAAOwI,eAC3B8gC,EAAgBmU,EAASE,eAEzB2D,EAAc15C,SAAQ,SAAU4B,GAC9ByrC,EAAS7yC,OAAOmnC,WAAW//B,EAAMyrC,EACnC,IACAv3C,KAAK6K,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,IAErDpI,KAAKsC,OAAOq8C,UAAU,YAAa,CACjCxd,MAAOyiB,EACPhY,cAAeA,EACfE,cAAeyL,EACflL,aAAcA,EACdE,aAAcvsC,KAAKsC,OAAOwI,kBAG9B4+B,GAAU,QAGT,GAAc,IAAVL,GACP,GAAIsa,IAAWla,EAAU,CAEvB,IAAIgb,EAAczkD,KAAK0kD,aAAat8C,GAChCq8C,GACFzkD,KAAK6K,MAAM7K,KAAKikD,gBAAgBQ,IAElC/a,GAAU,CACZ,MACK,GAAIia,GAAUla,GAAYj4B,EAAU,CACvCuvB,EAAM+e,EAAUhd,SAChB,IAAI6hB,EAAU5jB,EAAIwgB,gBACdoD,IACFpN,EAAW1W,EAAK0B,kBAAkBoiB,GAC9BpN,GAAYA,EAAS7yC,QACpB6yC,aAAoB6F,IACjB7F,EAASqN,cACfvY,EAAersC,KAAKsC,OAAOwI,eAC3B8gC,EAAgBmU,EAASE,eAEzB2D,EAAc15C,SAAQ,SAAU4B,GAC9ByrC,EAAS7yC,OAAOmnC,WAAW//B,EAAMyrC,EACnC,IACAv3C,KAAK6K,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,IAErDpI,KAAKsC,OAAOq8C,UAAU,YAAa,CACjCxd,MAAOyiB,EACPhY,cAAeA,EACfE,cAAeyL,EACflL,aAAcA,EACdE,aAAcvsC,KAAKsC,OAAOwI,kBAIlC,OAEG,GAAc,IAAVu+B,EACP,GAAIsa,IAAWla,EAEb+Z,EAAWxjD,KAAK6kD,YACZrB,IACFxjD,KAAKsC,OAAO8kC,UAAS,GACrBoc,EAAS34C,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,KAE3DshC,GAAU,OAEP,IAAKia,GAAUna,GAAWC,GAAYj4B,EAEzCgyC,EAAWxjD,KAAK6kD,YACZrB,IACFtiB,EAAiBlhC,KAAKsC,OAAO4+B,eAC7BA,EAAegH,MAAQhH,EAAegH,OAASloC,KAC/CkhC,EAAeiH,IAAMqb,EACrBriB,EAAQnhC,KAAKsC,OAAOkmC,mBAAmBtH,EAAegH,MAAOhH,EAAeiH,KAE5EnoC,KAAKsC,OAAO8J,OAAO+0B,GACnBqiB,EAAS34C,MAAM,UAEjB6+B,GAAU,OAEP,GAAIia,GAAUla,GAAYj4B,EAAU,CAGrCgyC,EADEzD,EAASrF,SACAqF,EAASpU,OAASoU,EAASpU,OAAOkZ,iBAAc10C,EAGhD4vC,EAAS8E,YAEtB,IAAIN,EAAYf,IAAaA,EAASqB,aAAerB,EAAS9+C,OAAOinC,QACjE4Y,GAAaA,EAAU7/C,SACzB2nC,EAAersC,KAAKsC,OAAOwI,eAC3B8gC,EAAgBmU,EAASE,eAEzB2D,EAAc15C,SAAQ,SAAU4B,GAC9By4C,EAAU7/C,OAAOmnC,WAAW//B,EAAMy4C,EACpC,IACAvkD,KAAK6K,MAAMg2B,EAAKgd,cAAgB79C,KAAKikD,gBAAgB77C,IAErDpI,KAAKsC,OAAOq8C,UAAU,YAAa,CACjCxd,MAAOyiB,EACPhY,cAAeA,EACfE,cAAeyY,EACflY,aAAcA,EACdE,aAAcvsC,KAAKsC,OAAOwI,kBAG9B4+B,GAAU,CACZ,CAGEA,IACFrE,EAAMG,iBACNH,EAAMwE,kBAEV,EAOAhJ,EAAK54B,UAAUm7C,UAAY,SAAU/gB,GACnC,GAAIA,EAAS,CAEX,IAAIJ,EAAQjiC,KAAK+gC,IAAI0V,GAAGjrC,WACpBk2B,EAAQO,EAAMz2B,WACdtE,EAAYw6B,EAAMx6B,UACtBw6B,EAAM/xB,YAAYsyB,EACpB,CAEIjiC,KAAK06C,SACP16C,KAAK4iC,SAASP,GAGdriC,KAAKsiC,OAAOD,GAGVA,IAEFX,EAAMp6B,YAAY26B,GAClBP,EAAMx6B,UAAYA,EAEtB,EAMA25B,EAAKwJ,SAAW,SAASlJ,GACvB,IAAK7/B,MAAMsS,QAAQutB,GACjB,OAAON,EAAKwJ,SAAS,CAAClJ,IAGxB,GAAIA,GAASA,EAAMz5B,OAAS,EAAG,CAC7B,IAAIo4C,EAAY3e,EAAM,GAClBz8B,EAASo7C,EAAUp7C,OACnBpC,EAASw9C,EAAUx9C,OACnB8mC,EAAa0W,EAAUlE,WAC3Bt5C,EAAO0+B,YAAY4J,cAGnB,IAAIyB,EAAe/pC,EAAOwI,eAC1B+1B,EAAKikB,UAAU3jB,GACf,IAAIoL,EAAejqC,EAAOwI,eAG1Bq2B,EAAMj3B,SAAQ,SAAU4B,GACtBA,EAAKpH,OAAO05C,QAAQtyC,EACtB,IAGAxJ,EAAOq8C,UAAU,cAAe,CAC9Bxd,MAAOA,EAAMp0B,MAAM,GACnBrI,OAAQA,EACR8X,MAAO4sB,EACPiD,aAAcA,EACdE,aAAcA,GAElB,CACF,EAQA1L,EAAKuJ,YAAc,SAASjJ,GAC1B,IAAK7/B,MAAMsS,QAAQutB,GACjB,OAAON,EAAKuJ,YAAY,CAACjJ,IAG3B,GAAIA,GAASA,EAAMz5B,OAAS,EAAG,CAC7B,IAAIq4C,EAAW5e,EAAMA,EAAMz5B,OAAS,GAChChD,EAASq7C,EAASr7C,OAClBpC,EAASy9C,EAASz9C,OAEtBA,EAAO8kC,SAAS9kC,EAAO4+B,eAAeC,OAGtC,IAAIkL,EAAe/pC,EAAOwI,eACtB2gC,EAAYsU,EACZgF,EAAS5jB,EAAMt1B,KAAI,SAAUC,GAC/B,IAAI0wC,EAAQ1wC,EAAK0wC,QAGjB,OAFA93C,EAAOgnC,YAAY8Q,EAAO/Q,GAC1BA,EAAY+Q,EACLA,CACT,IAGqB,IAAjBrb,EAAMz5B,OACRq9C,EAAO,GAAGl6C,QAGVvI,EAAO8J,OAAO24C,GAEhB,IAAIxY,EAAejqC,EAAOwI,eAE1BxI,EAAOq8C,UAAU,iBAAkB,CACjClT,UAAWsU,EACX5e,MAAO4jB,EACPrgD,OAAQA,EACR2nC,aAAcA,EACdE,aAAcA,GAElB,CACF,EASA1L,EAAK54B,UAAU47C,gBAAkB,SAAU1hB,EAAOjhC,EAAOO,GACvD,IAAI4qC,EAAersC,KAAKsC,OAAOwI,eAE3Bk6C,EAAU,IAAInkB,EAAK7gC,KAAKsC,OAAQ,CAClC6/B,WAAiBhyB,GAATgyB,EAAsBA,EAAQ,GACtCjhC,WAAiBiP,GAATjP,EAAsBA,EAAQ,GACtCO,KAAMA,IAERujD,EAAQ1iB,QAAO,GACftiC,KAAK0E,OAAO6mC,aAAayZ,EAAShlD,MAClCA,KAAKsC,OAAO0+B,YAAY4J,cACxBoa,EAAQn6C,MAAM,SACd,IAAI0hC,EAAevsC,KAAKsC,OAAOwI,eAE/B9K,KAAKsC,OAAOq8C,UAAU,oBAAqB,CACzCxd,MAAO,CAAC6jB,GACRxZ,WAAYxrC,KACZ0E,OAAQ1E,KAAK0E,OACb2nC,aAAcA,EACdE,aAAcA,GAElB,EASA1L,EAAK54B,UAAU67C,eAAiB,SAAU3hB,EAAOjhC,EAAOO,GACtD,IAAI4qC,EAAersC,KAAKsC,OAAOwI,eAE3Bk6C,EAAU,IAAInkB,EAAK7gC,KAAKsC,OAAQ,CAClC6/B,WAAiBhyB,GAATgyB,EAAsBA,EAAQ,GACtCjhC,WAAiBiP,GAATjP,EAAsBA,EAAQ,GACtCO,KAAMA,IAERujD,EAAQ1iB,QAAO,GACftiC,KAAK0E,OAAOgnC,YAAYsZ,EAAShlD,MACjCA,KAAKsC,OAAO0+B,YAAY4J,cACxBoa,EAAQn6C,MAAM,SACd,IAAI0hC,EAAevsC,KAAKsC,OAAOwI,eAE/B9K,KAAKsC,OAAOq8C,UAAU,mBAAoB,CACxCxd,MAAO,CAAC6jB,GACRvZ,UAAWzrC,KACX0E,OAAQ1E,KAAK0E,OACb2nC,aAAcA,EACdE,aAAcA,GAElB,EASA1L,EAAK54B,UAAUg9C,UAAY,SAAU9iB,EAAOjhC,EAAOO,GACjD,IAAI4qC,EAAersC,KAAKsC,OAAOwI,eAE3Bk6C,EAAU,IAAInkB,EAAK7gC,KAAKsC,OAAQ,CAClC6/B,WAAiBhyB,GAATgyB,EAAsBA,EAAQ,GACtCjhC,WAAiBiP,GAATjP,EAAsBA,EAAQ,GACtCO,KAAMA,IAERujD,EAAQ1iB,QAAO,GACftiC,KAAK0E,OAAO4C,YAAY09C,GACxBhlD,KAAKsC,OAAO0+B,YAAY4J,cACxBoa,EAAQn6C,MAAM,SACd,IAAI0hC,EAAevsC,KAAKsC,OAAOwI,eAE/B9K,KAAKsC,OAAOq8C,UAAU,cAAe,CACnCxd,MAAO,CAAC6jB,GACRtgD,OAAQ1E,KAAK0E,OACb2nC,aAAcA,EACdE,aAAcA,GAElB,EAOA1L,EAAK54B,UAAUi9C,cAAgB,SAAU5Z,GACvC,IAAID,EAAUrrC,KAAKyB,KACnB,GAAI6pC,GAAWD,EAAS,CACtB,IAAIgB,EAAersC,KAAKsC,OAAOwI,eAC/B9K,KAAKorC,WAAWE,GAChB,IAAIiB,EAAevsC,KAAKsC,OAAOwI,eAE/B9K,KAAKsC,OAAOq8C,UAAU,aAAc,CAClC7yC,KAAM9L,KACNqrC,QAASA,EACTC,QAASA,EACTe,aAAcA,EACdE,aAAcA,GAElB,CACF,EAQA1L,EAAK54B,UAAUulB,KAAO,SAAUiuB,GAC9B,GAAKz7C,KAAKg9C,aAAV,CAIA,IAAImI,EAAsB,QAAb1J,GAAwB,EAAI,EACrC9nC,EAAqB,SAAb3T,KAAKyB,KAAmB,QAAS,QAC7CzB,KAAK+rC,aAEL,IAAIE,EAAYjsC,KAAKipC,OACjBmc,EAAeplD,KAAKqlD,UAGxBrlD,KAAKipC,OAASjpC,KAAKipC,OAAOzjC,SAG1BxF,KAAKipC,OAAOzb,MAAK,SAAUnnB,EAAGP,GAC5B,OAAOq/C,EAAQ3K,EAAYn0C,EAAEsN,GAAO7N,EAAE6N,GACxC,IACA3T,KAAKqlD,UAAsB,GAATF,EAAc,MAAQ,OAExCnlD,KAAKsC,OAAOq8C,UAAU,OAAQ,CAC5B7yC,KAAM9L,KACNisC,UAAWA,EACXD,QAASoZ,EACThZ,UAAWpsC,KAAKipC,OAChBkD,QAASnsC,KAAKqlD,YAGhBrlD,KAAKksC,YA1BL,CA2BF,EAMArL,EAAK54B,UAAU40C,UAAY,WAKzB,OAJK78C,KAAK2rC,SACR3rC,KAAK2rC,OAAS,IAAIyR,EAAWp9C,KAAKsC,QAClCtC,KAAK2rC,OAAOkQ,UAAU77C,OAEjBA,KAAK2rC,OAAO7I,QACrB,EAQAjC,EAAK0B,kBAAoB,SAAUn6B,GACjC,MAAOA,EAAQ,CACb,GAAIA,EAAO0D,KACT,OAAO1D,EAAO0D,KAEhB1D,EAASA,EAAOoD,UAClB,CAGF,EAOAq1B,EAAKikB,UAAY,SAAU3jB,GACzB,GAAK7/B,MAAMsS,QAAQutB,GAAnB,CAKA,IAAI2e,EAAY3e,EAAM,GAClBz8B,EAASo7C,EAAUp7C,OACnB0kC,EAAa0W,EAAUlE,WAEvBl3C,EAAOukC,OAAOG,EAAajI,EAAMz5B,QACnChD,EAAOukC,OAAOG,EAAajI,EAAMz5B,QAAQmD,QAElCnG,EAAOukC,OAAOG,EAAa,GAClC1kC,EAAOukC,OAAOG,EAAa,GAAGv+B,QAG9BnG,EAAOmG,OAbT,MAFEg2B,EAAKikB,UAAU,CAAC3jB,GAiBpB,EAOAN,EAAK54B,UAAUg4C,aAAe,WAC5B,IAAIzjC,EAAQxc,KAAK0E,OAAOukC,OAAOp3B,QAAQ7R,MACvC,OAAOA,KAAK0E,OAAOukC,OAAOzsB,EAAQ,IAAMxc,KAAK0E,OAAOinC,MACtD,EAOA9K,EAAK54B,UAAUu8C,cAAgB,WAC7B,IAAIjN,EAAW,KACXxW,EAAM/gC,KAAK8iC,SACf,GAAI/B,GAAOA,EAAIv1B,WAAY,CAEzB,IAAIm5C,EAAU5jB,EACd,GACE4jB,EAAUA,EAAQpD,gBAClBhK,EAAW1W,EAAK0B,kBAAkBoiB,SAE7BA,GAAYpN,aAAoB6F,IAAe7F,EAASqN,YACjE,CACA,OAAOrN,CACT,EAOA1W,EAAK54B,UAAU48C,UAAY,WACzB,IAAIrB,EAAW,KACXziB,EAAM/gC,KAAK8iC,SACf,GAAI/B,GAAOA,EAAIv1B,WAAY,CAEzB,IAAIi4C,EAAU1iB,EACd,GACE0iB,EAAUA,EAAQ1G,YAClByG,EAAW3iB,EAAK0B,kBAAkBkhB,SAE7BA,GAAYD,aAAoBpG,IAAeoG,EAASoB,YACjE,CAEA,OAAOpB,CACT,EAOA3iB,EAAK54B,UAAUk8C,WAAa,WAC1B,IAAIrE,EAAY,KACZ/e,EAAM/gC,KAAK8iC,SACf,GAAI/B,GAAOA,EAAIv1B,WAAY,CACzB,IAAI85C,EAAWvkB,EAAIv1B,WAAW2jC,WAC9B2Q,EAAYjf,EAAK0B,kBAAkB+iB,EACrC,CAEA,OAAOxF,CACT,EAOAjf,EAAK54B,UAAU+7C,UAAY,WACzB,IAAIjE,EAAW,KACXhf,EAAM/gC,KAAK8iC,SACf,GAAI/B,GAAOA,EAAIv1B,WAAY,CACzB,IAAI+5C,EAAUxkB,EAAIv1B,WAAWg6C,UAC7BzF,EAAYlf,EAAK0B,kBAAkBgjB,GACnC,MAAOA,GAAYxF,aAAoB3C,IAAe2C,EAAS6E,YAC7DW,EAAUA,EAAQhE,gBAClBxB,EAAYlf,EAAK0B,kBAAkBgjB,EAEvC,CACA,OAAOxF,CACT,EAQAlf,EAAK54B,UAAUo8C,iBAAmB,SAAU3W,GAC1C,IAAI3M,EAAM/gC,KAAK+gC,IAEf,OAAQ2M,GACN,KAAK3M,EAAI7/B,MACP,GAAIlB,KAAK46C,cACP,OAAO7Z,EAAIoB,MAGf,KAAKpB,EAAIoB,MACP,GAAIniC,KAAKg9C,aACP,OAAOjc,EAAIuB,OAGf,KAAKvB,EAAIuB,OACP,OAAOvB,EAAI4B,KACb,KAAK5B,EAAI4B,KACP,GAAI5B,EAAIuG,KACN,OAAOvG,EAAIuG,KAGf,QACE,OAAO,KAEb,EAQAzG,EAAK54B,UAAUy8C,aAAe,SAAUhX,GACtC,IAAI3M,EAAM/gC,KAAK+gC,IAEf,OAAQ2M,GACN,KAAK3M,EAAIuG,KACP,OAAOvG,EAAI4B,KACb,KAAK5B,EAAI4B,KACP,GAAI3iC,KAAKg9C,aACP,OAAOjc,EAAIuB,OAGf,KAAKvB,EAAIuB,OACP,GAAItiC,KAAK46C,cACP,OAAO7Z,EAAIoB,MAGf,KAAKpB,EAAIoB,MACP,IAAKniC,KAAKg9C,aACR,OAAOjc,EAAI7/B,MAEf,QACE,OAAO,KAEb,EAUA2/B,EAAK54B,UAAUg8C,gBAAkB,SAAUzU,GACzC,IAAIzO,EAAM/gC,KAAK+gC,IACf,IAAK,IAAIvuB,KAAQuuB,EACf,GAAIA,EAAI7zB,eAAesF,IACjBuuB,EAAIvuB,IAASg9B,EACf,OAAOh9B,EAIb,OAAO,IACT,EAQAquB,EAAK54B,UAAU+0C,WAAa,WAC1B,MAAoB,SAAbh9C,KAAKyB,MAAgC,UAAbzB,KAAKyB,IACtC,EAGAo/B,EAAK4kB,YAAc,CACjB,KAAQ,8HAGR,OAAU,+EAEV,MAAS,yEAET,OAAU,oGAYZ5kB,EAAK54B,UAAUi/B,gBAAkB,SAAUgD,EAAQC,GACjD,IAAIr+B,EAAO9L,KACP0lD,EAAS7kB,EAAK4kB,YACd5xB,EAAQ,GAgDZ,GA9CI7zB,KAAKwR,SAAStQ,OAChB2yB,EAAMnnB,KAAK,CACTrE,KAAM,OACNg+B,MAAO,gCACPlB,UAAW,mBAAqBnlC,KAAKyB,KACrCg3C,QAAS,CACP,CACEpwC,KAAM,OACN88B,UAAW,wBACO,QAAbnlC,KAAKyB,KAAiB,uBAAyB,IACpD4kC,MAAOqf,EAAOC,KACdj2C,MAAO,WACL5D,EAAKo5C,cAAc,OACrB,GAEF,CACE78C,KAAM,QACN88B,UAAW,yBACO,SAAbnlC,KAAKyB,KAAkB,uBAAyB,IACrD4kC,MAAOqf,EAAOz/B,MACdvW,MAAO,WACL5D,EAAKo5C,cAAc,QACrB,GAEF,CACE78C,KAAM,SACN88B,UAAW,0BACO,UAAbnlC,KAAKyB,KAAmB,uBAAyB,IACtD4kC,MAAOqf,EAAOx7B,OACdxa,MAAO,WACL5D,EAAKo5C,cAAc,SACrB,GAEF,CACE78C,KAAM,SACN88B,UAAW,0BACO,UAAbnlC,KAAKyB,KAAmB,uBAAyB,IACtD4kC,MAAOqf,EAAOz5C,OACdyD,MAAO,WACL5D,EAAKo5C,cAAc,SACrB,MAMJllD,KAAKg9C,aAAc,CACrB,IAAIvB,EAAgC,OAAlBz7C,KAAKqlD,UAAsB,OAAQ,MACrDxxB,EAAMnnB,KAAK,CACTrE,KAAM,OACNg+B,MAAO,2BAA6BrmC,KAAKyB,KACzC0jC,UAAW,mBAAqBsW,EAChC/rC,MAAO,WACL5D,EAAK0hB,KAAKiuB,EACZ,EACAhD,QAAS,CACP,CACEpwC,KAAM,YACN88B,UAAW,sBACXkB,MAAO,2BAA6BrmC,KAAKyB,KAAO,sBAChDiO,MAAO,WACL5D,EAAK0hB,KAAK,MACZ,GAEF,CACEnlB,KAAM,aACN88B,UAAW,uBACXkB,MAAO,2BAA6BrmC,KAAKyB,KAAM,uBAC/CiO,MAAO,WACL5D,EAAK0hB,KAAK,OACZ,KAIR,CAEA,GAAIxtB,KAAK0E,QAAU1E,KAAK0E,OAAOs4C,aAAc,CACvCnpB,EAAMnsB,QAERmsB,EAAMnnB,KAAK,CACT,KAAQ,cAKZ,IAAIu8B,EAASn9B,EAAKpH,OAAOukC,OACrBn9B,GAAQm9B,EAAOA,EAAOvhC,OAAS,IACjCmsB,EAAMnnB,KAAK,CACTrE,KAAM,SACNg+B,MAAO,wEACPwS,aAAc,8CACd1T,UAAW,oBACXz1B,MAAO,WACL5D,EAAKm5C,UAAU,GAAI,GAAI,OACzB,EACAxM,QAAS,CACP,CACEpwC,KAAM,OACN88B,UAAW,uBACXkB,MAAOqf,EAAOC,KACdj2C,MAAO,WACL5D,EAAKm5C,UAAU,GAAI,GAAI,OACzB,GAEF,CACE58C,KAAM,QACN88B,UAAW,wBACXkB,MAAOqf,EAAOz/B,MACdvW,MAAO,WACL5D,EAAKm5C,UAAU,GAAI,GACrB,GAEF,CACE58C,KAAM,SACN88B,UAAW,yBACXkB,MAAOqf,EAAOx7B,OACdxa,MAAO,WACL5D,EAAKm5C,UAAU,GAAI,CAAC,EACtB,GAEF,CACE58C,KAAM,SACN88B,UAAW,yBACXkB,MAAOqf,EAAOz5C,OACdyD,MAAO,WACL5D,EAAKm5C,UAAU,GAAI,GAAI,SACzB,MAORpxB,EAAMnnB,KAAK,CACTrE,KAAM,SACNg+B,MAAO,mEACPwS,aAAc,8CACd1T,UAAW,oBACXz1B,MAAO,WACL5D,EAAK+3C,gBAAgB,GAAI,GAAI,OAC/B,EACApL,QAAS,CACP,CACEpwC,KAAM,OACN88B,UAAW,uBACXkB,MAAOqf,EAAOC,KACdj2C,MAAO,WACL5D,EAAK+3C,gBAAgB,GAAI,GAAI,OAC/B,GAEF,CACEx7C,KAAM,QACN88B,UAAW,wBACXkB,MAAOqf,EAAOz/B,MACdvW,MAAO,WACL5D,EAAK+3C,gBAAgB,GAAI,GAC3B,GAEF,CACEx7C,KAAM,SACN88B,UAAW,yBACXkB,MAAOqf,EAAOx7B,OACdxa,MAAO,WACL5D,EAAK+3C,gBAAgB,GAAI,CAAC,EAC5B,GAEF,CACEx7C,KAAM,SACN88B,UAAW,yBACXkB,MAAOqf,EAAOz5C,OACdyD,MAAO,WACL5D,EAAK+3C,gBAAgB,GAAI,GAAI,SAC/B,MAKF7jD,KAAKwR,SAAS2wB,QAEhBtO,EAAMnnB,KAAK,CACTrE,KAAM,YACNg+B,MAAO,gCACPlB,UAAW,uBACXz1B,MAAO,WACLmxB,EAAKuJ,YAAYt+B,EACnB,IAIF+nB,EAAMnnB,KAAK,CACTrE,KAAM,SACNg+B,MAAO,+BACPlB,UAAW,oBACXz1B,MAAO,WACLmxB,EAAKwJ,SAASv+B,EAChB,IAGN,CAEA,IAAI62B,EAAO,IAAI/B,EAAY/M,EAAO,CAACyW,MAAOH,IAC1CxH,EAAK4H,KAAKL,EAAQlqC,KAAKsC,OAAO0/B,QAChC,EAQAnB,EAAK54B,UAAUi0C,SAAW,SAASh7C,GACjC,OAAIA,aAAiBI,MACZ,QAELJ,aAAiBG,OACZ,SAEY,iBAAX,GAA0D,iBAA5BrB,KAAKs+C,YAAYp9C,GAChD,SAGF,MACT,EASA2/B,EAAK54B,UAAUq2C,YAAc,SAASzpC,GACpC,IAAI+wC,EAAQ/wC,EAAIkN,cACZ8jC,EAAMzkD,OAAOyT,GACbixC,EAAWvV,WAAW17B,GAE1B,MAAW,IAAPA,EACK,GAES,QAAT+wC,EACA,KAES,QAATA,GAGS,SAATA,IAGCG,MAAMF,IAASE,MAAMD,GAItBjxC,EAHAgxC,EAKX,EAQAhlB,EAAK54B,UAAUo6C,YAAc,SAAUh6C,GACrC,GAAoB,kBAATA,EACT,OAAOlH,OAAOkH,GAGd,IAAI29C,EAAc7kD,OAAOkH,GACpB4W,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,MAAO,WACfA,QAAQ,KAAM,UACdA,QAAQ,KAAM,UAEf1c,EAAO8P,KAAKC,UAAU0zC,GACtBC,EAAO1jD,EAAK0uC,UAAU,EAAG1uC,EAAKmF,OAAS,GAI3C,OAH0C,IAAtC1H,KAAKsC,OAAOQ,QAAQojD,gBACtBD,EAAO/0C,EAAKo8B,mBAAmB2Y,IAE1BA,CAEX,EAQAplB,EAAK54B,UAAUu2C,cAAgB,SAAU2H,GACvC,IAAI5jD,EAAO,IAAMvC,KAAKomD,YAAYD,GAAe,IAC7CH,EAAc90C,EAAKiB,MAAM5P,GAE7B,OAAOyjD,EACF/mC,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KACjBA,QAAQ,iBAAkB,KAC1BA,QAAQ,SAAU,IACzB,EAWA4hB,EAAK54B,UAAUm+C,YAAc,SAAU/9C,GAErC,IAAIg+C,EAAU,GACVtgD,EAAI,EACR,MAAOA,EAAIsC,EAAKX,OAAQ,CACtB,IAAIxB,EAAImC,EAAKsb,OAAO5d,GACX,MAALG,EACFmgD,GAAW,MAEC,MAALngD,GACPmgD,GAAWngD,EACXH,IAEAG,EAAImC,EAAKsb,OAAO5d,GACN,KAANG,IAAwC,GAA5B,aAAa2L,QAAQ3L,KACnCmgD,GAAW,MAEbA,GAAWngD,GAGXmgD,GADY,KAALngD,EACI,MAGAA,EAEbH,GACF,CAEA,OAAOsgD,CACT,EAGA,IAAIjJ,EAAa3C,EAAkB5Z,GAEnCl7B,EAAOF,QAAUo7B,CAGZ,EAEA,SAASl7B,EAAQF,GAOtBE,EAAOF,QAAU,SAAS+0C,EAAan0C,EAAGP,GACzC,aACA,IAeCwgD,EAAQC,EAfLjW,EAAK,8EACRkW,EAAM,iBACNC,EAAM,iHACNC,EAAM,iBACNC,EAAM,KACN5gD,EAAI,SAASmC,GAAK,OAAOsyC,EAAYoM,cAAgB,GAAK1+C,GAAG6Z,eAAiB,GAAK7Z,CAAG,EAEtF8gB,EAAIjjB,EAAEM,GAAG4Y,QAAQunC,EAAK,KAAO,GAC7Bz9C,EAAIhD,EAAED,GAAGmZ,QAAQunC,EAAK,KAAO,GAE7BK,EAAK79B,EAAE/J,QAAQqxB,EAAI,UAAUrxB,QAAQ,MAAM,IAAIA,QAAQ,MAAM,IAAIf,MAAM,MACvE4oC,EAAK/9C,EAAEkW,QAAQqxB,EAAI,UAAUrxB,QAAQ,MAAM,IAAIA,QAAQ,MAAM,IAAIf,MAAM,MAEvE6oC,EAAK94B,SAASjF,EAAE/G,MAAMykC,GAAM,KAAsB,IAAdG,EAAGn/C,QAAgBshB,EAAE/G,MAAMwkC,IAAQn9C,KAAK6I,MAAM6W,GAClFg+B,EAAK/4B,SAASllB,EAAEkZ,MAAMykC,GAAM,KAAOK,GAAMh+C,EAAEkZ,MAAMwkC,IAAQn9C,KAAK6I,MAAMpJ,IAAM,KAG3E,GAAIi+C,EAAI,CACP,GAAKD,EAAKC,EAAO,OAAQ,EACpB,GAAKD,EAAKC,EAAO,OAAO,CAC9B,CAEA,IAAI,IAAIC,EAAK,EAAGC,EAAKrhC,KAAKkf,IAAI8hB,EAAGn/C,OAAQo/C,EAAGp/C,QAASu/C,EAAOC,EAAMD,IAAQ,CAKzE,GAHAX,IAAWO,EAAGI,IAAS,IAAIhlC,MAAM0kC,IAAQpW,WAAWsW,EAAGI,KAAUJ,EAAGI,IAAS,EAC7EV,IAAWO,EAAGG,IAAS,IAAIhlC,MAAM0kC,IAAQpW,WAAWuW,EAAGG,KAAUH,EAAGG,IAAS,EAEzElB,MAAMO,KAAYP,MAAMQ,GAAW,OAAQR,MAAMO,GAAW,GAAK,EAMrE,UAJgBA,WAAkBC,IACjCD,GAAU,GACVC,GAAU,IAEPD,EAASC,EAAU,OAAQ,EAC/B,GAAID,EAASC,EAAU,OAAO,CAC/B,CACA,OAAO,CACR,CAGK,EAEA,SAAS5gD,EAAQF,EAAS,GAE/B,aAEA,IAAIyL,EAAO,EAAoB,IAC3B0vB,EAAc,EAAoB,IAMtC,SAAS6Z,EAAkB5Z,GAQzB,SAASuc,EAAY96C,GAEnBtC,KAAKsC,OAASA,EACdtC,KAAK+gC,IAAM,CAAC,CACd,CA4MA,OA1MAqc,EAAWn1C,UAAY,IAAI44B,EAM3Buc,EAAWn1C,UAAU66B,OAAS,WAE5B,IAAI/B,EAAM/gC,KAAK+gC,IAEf,GAAIA,EAAI0V,GACN,OAAO1V,EAAI0V,GAGbz2C,KAAKk7C,qBAGL,IAAIiM,EAAWhhD,SAASM,cAAc,MAMtC,GALA0gD,EAASr7C,KAAO9L,KAChB+gC,EAAI0V,GAAK0Q,EAIwB,SAA7BnnD,KAAKsC,OAAOQ,QAAQnB,KAAiB,CAEvCo/B,EAAIye,OAASr5C,SAASM,cAAc,MAGpC,IAAIi5C,EAASv5C,SAASM,cAAc,MACpCs6B,EAAI2e,OAASA,EACb,IAAI/c,EAAOx8B,SAASM,cAAc,UAClCk8B,EAAKlhC,KAAO,SACZkhC,EAAKwC,UAAY,yBACjBxC,EAAK0D,MAAQ,0CACbtF,EAAI4B,KAAOA,EACX+c,EAAOp4C,YAAYy5B,EAAI4B,KACzB,CAGA,IAAIykB,EAAWjhD,SAASM,cAAc,MAClC4gD,EAAUlhD,SAASM,cAAc,OASrC,OARA4gD,EAAQtP,UAAY,UACpBsP,EAAQliB,UAAY,sBACpBiiB,EAAS9/C,YAAY+/C,GACrBtmB,EAAI2V,GAAK0Q,EACTrmB,EAAI14B,KAAOg/C,EAEXrnD,KAAK0jC,YAEEyjB,CACT,EAKA/J,EAAWn1C,UAAUy7B,UAAY,WAC/B,IAAI3C,EAAM/gC,KAAK+gC,IACXqmB,EAAWrmB,EAAI2V,GACf0Q,IACFA,EAAS1gD,MAAM4gD,YAAiC,GAAlBtnD,KAAKu8C,WAAkB,GAAM,MAI7D,IAAI8K,EAAUtmB,EAAI14B,KACdg/C,IACFA,EAAQtP,UAAY,UAAY/3C,KAAK0E,OAAOjD,KAAO,KAKrD,IAAI0lD,EAAWpmB,EAAI0V,GACdz2C,KAAK4kD,YAYH7jB,EAAI0V,GAAGtH,aACNpO,EAAIye,QACN2H,EAAS7/C,YAAYy5B,EAAIye,QAEvBze,EAAI2e,QACNyH,EAAS7/C,YAAYy5B,EAAI2e,QAE3ByH,EAAS7/C,YAAY8/C,IAlBnBrmB,EAAI0V,GAAGtH,aACLpO,EAAIye,QACN2H,EAASx3C,YAAYoxB,EAAIye,QAEvBze,EAAI2e,QACNyH,EAASx3C,YAAYoxB,EAAI2e,QAE3ByH,EAASx3C,YAAYy3C,GAc3B,EAOAhK,EAAWn1C,UAAU28C,UAAY,WAC/B,OAAqC,GAA7B5kD,KAAK0E,OAAOukC,OAAOvhC,MAC7B,EAQA01C,EAAWn1C,UAAUi/B,gBAAkB,SAAUgD,EAAQC,GACvD,IAAIr+B,EAAO9L,KACP0lD,EAAS7kB,EAAK4kB,YACd5xB,EAAQ,CAEV,CACE,KAAQ,SACR,MAAS,uDACT,aAAgB,8CAChB,UAAa,oBACb,MAAS,WACP/nB,EAAKm5C,UAAU,GAAI,GAAI,OACzB,EACA,QAAW,CACT,CACE,KAAQ,OACR,UAAa,uBACb,MAASS,EAAOC,KAChB,MAAS,WACP75C,EAAKm5C,UAAU,GAAI,GAAI,OACzB,GAEF,CACE,KAAQ,QACR,UAAa,wBACb,MAASS,EAAOz/B,MAChB,MAAS,WACPna,EAAKm5C,UAAU,GAAI,GACrB,GAEF,CACE,KAAQ,SACR,UAAa,yBACb,MAASS,EAAOx7B,OAChB,MAAS,WACPpe,EAAKm5C,UAAU,GAAI,CAAC,EACtB,GAEF,CACE,KAAQ,SACR,UAAa,yBACb,MAASS,EAAOz5C,OAChB,MAAS,WACPH,EAAKm5C,UAAU,GAAI,GAAI,SACzB,MAMJtiB,EAAO,IAAI/B,EAAY/M,EAAO,CAACyW,MAAOH,IAC1CxH,EAAK4H,KAAKL,EAAQlqC,KAAKsC,OAAO0/B,QAChC,EAMAob,EAAWn1C,UAAUm9B,QAAU,SAAUC,GACvC,IAAI5jC,EAAO4jC,EAAM5jC,KACb2G,EAASi9B,EAAMj9B,QAAUi9B,EAAM6d,WAC/BniB,EAAM/gC,KAAK+gC,IAGX4B,EAAO5B,EAAI4B,KAWf,GAVIv6B,GAAUu6B,IACA,aAARlhC,EACFzB,KAAKsC,OAAO0+B,YAAYyJ,UAAUzqC,KAAK0E,QAExB,YAARjD,GACPzB,KAAKsC,OAAO0+B,YAAY4J,eAKhB,SAARnpC,GAAmB2G,GAAU24B,EAAI4B,KAAM,CACzC,IAAI3B,EAAchhC,KAAKsC,OAAO0+B,YAC9BA,EAAYyJ,UAAUzqC,KAAK0E,QAC3Bs8B,EAAY8J,OACZ55B,EAAK88B,aAAajN,EAAI4B,KAAM,uBAC5B3iC,KAAKknC,gBAAgBnG,EAAI4B,MAAM,WAC7BzxB,EAAKg9B,gBAAgBnN,EAAI4B,KAAM,uBAC/B3B,EAAY+J,SACZ/J,EAAY4J,aACd,GACF,CAEY,WAARnpC,GACFzB,KAAKujD,UAAUle,EAEnB,EAEO+X,CACT,CAEAz3C,EAAOF,QAAUg1C,CAGZ,EAEA,SAAS90C,EAAQF,EAAS,GAE/B,aAEA,IAAIm7B,EAAc,EAAoB,IAUtC,SAASE,EAAaz5B,EAAWzF,EAAO2lD,EAASC,GA0C/C,IAxCA,IAAIC,EAAiB,CACnB9tC,KAAM,CACJ,KAAQ,OACR,MAAS,6BACT,MAAS,WACP6tC,EAAS,OACX,GAEFE,KAAM,CACJ,KAAQ,OACR,MAAS,wBACT,MAAS,WACPF,EAAS,OACX,GAEFn/C,KAAM,CACJ,KAAQ,OACR,MAAS,8BACT,MAAS,WACPm/C,EAAS,OACX,GAEF5H,KAAM,CACJ,KAAQ,OACR,MAAS,wBACT,MAAS,WACP4H,EAAS,OACX,GAEFG,KAAM,CACJ,KAAQ,OACR,MAAS,sBACT,MAAS,WACPH,EAAS,OACX,IAKA3zB,EAAQ,GACH9tB,EAAI,EAAGA,EAAInE,EAAM8F,OAAQ3B,IAAK,CACrC,IAAIpE,EAAOC,EAAMmE,GACb2Y,EAAO+oC,EAAe9lD,GAC1B,IAAK+c,EACH,MAAM,IAAIpW,MAAM,iBAAmB3G,EAAO,KAG5C+c,EAAKymB,UAAY,yBAA4BoiB,GAAW5lD,EAAQ,uBAAyB,IACzFkyB,EAAMnnB,KAAKgS,EACb,CAGA,IAAIkpC,EAAcH,EAAeF,GACjC,IAAKK,EACH,MAAM,IAAIt/C,MAAM,iBAAmBi/C,EAAU,KAE/C,IAAIM,EAAeD,EAAYv/C,KAG3By/C,EAAM3hD,SAASM,cAAc,UACjCqhD,EAAIrmD,KAAO,SACXqmD,EAAI3iB,UAAY,wCAChB2iB,EAAI/P,UAAY8P,EAAe,YAC/BC,EAAIzhB,MAAQ,qBACZyhB,EAAIviB,QAAU,WACZ,IAAI5C,EAAO,IAAI/B,EAAY/M,GAC3B8O,EAAK4H,KAAKud,EACZ,EAEA,IAAIpmB,EAAQv7B,SAASM,cAAc,OACnCi7B,EAAMyD,UAAY,mBAClBzD,EAAMh7B,MAAMK,SAAW,WACvB26B,EAAMp6B,YAAYwgD,GAElBzgD,EAAUC,YAAYo6B,GAEtB1hC,KAAK+gC,IAAM,CACT15B,UAAWA,EACXygD,IAAKA,EACLpmB,MAAOA,EAEX,CAKAZ,EAAa74B,UAAU4C,MAAQ,WAC7B7K,KAAK+gC,IAAI+mB,IAAIj9C,OACf,EAKAi2B,EAAa74B,UAAU+C,QAAU,WAC3BhL,KAAK+gC,KAAO/gC,KAAK+gC,IAAIW,OAAS1hC,KAAK+gC,IAAIW,MAAMl2B,YAC/CxL,KAAK+gC,IAAIW,MAAMl2B,WAAWmE,YAAY3P,KAAK+gC,IAAIW,OAEjD1hC,KAAK+gC,IAAM,IACb,EAEAp7B,EAAOF,QAAUq7B,CAGZ,EAEA,SAASn7B,EAAQF,EAAS,GAE/B,aAEA,IAAIsiD,EACJ,IACEA,EAAM,EAAoB,GAC5B,CACA,MAAO35C,GAEP,CAEA,IAAI0yB,EAAe,EAAoB,IACnC5vB,EAAO,EAAoB,IAG3BD,EAAW,CAAC,EAEZ+2C,EAAa,EAEbC,EAAgB,uBAsBpBh3C,EAASnH,OAAS,SAAUzC,EAAWvE,GAErCA,EAAUA,GAAW,CAAC,EACtB9C,KAAK8C,QAAUA,EAGXA,EAAQolD,YACVloD,KAAKkoD,YAAc9mD,OAAO0B,EAAQolD,aAGlCloD,KAAKkoD,YAAc,EAIrB,IAAIC,EAAOrlD,EAAQilD,IAAMjlD,EAAQilD,IAAMA,EAGvC/nD,KAAK2B,KAAwB,QAAhBmB,EAAQnB,KAAkB,OAAS,OAC/B,QAAb3B,KAAK2B,MAEa,qBAATwmD,IACTnoD,KAAK2B,KAAO,OACZ0M,QAAQC,KAAK,iKAKjBtO,KAAKooD,MAAQtlD,EAAQslD,OAASH,EAC1BjoD,KAAKooD,QAAUH,GAAiBjhD,OAAO+gD,KACzC,EAAoB,IAGtB,IAAInkB,EAAK5jC,KACTA,KAAKqH,UAAYA,EACjBrH,KAAK+gC,IAAM,CAAC,EACZ/gC,KAAKqoD,eAAYl4C,EACjBnQ,KAAKsoD,cAAWn4C,EAChBnQ,KAAKsT,eAAiB,KAGtBtT,KAAK2hC,mBAAqBzwB,EAAK4wB,SAAS9hC,KAAKwT,SAAS7H,KAAK3L,MAAOA,KAAK+R,mBAEvE/R,KAAKiqC,MAAQ5iC,EAAUkhD,YACvBvoD,KAAK8jC,OAASz8B,EAAU08B,aAExB/jC,KAAK0hC,MAAQv7B,SAASM,cAAc,OACpCzG,KAAK0hC,MAAMyD,UAAY,8BAAgCnlC,KAAK8C,QAAQnB,KACpE3B,KAAK0hC,MAAM6D,QAAU,SAAUF,GAE7BA,EAAMG,gBACR,EACAxlC,KAAK0hC,MAAMiE,UAAY,SAAUN,GAC/BzB,EAAGkD,WAAWzB,EAChB,EAGArlC,KAAK2iC,KAAOx8B,SAASM,cAAc,OACnCzG,KAAK2iC,KAAKwC,UAAY,kBACtBnlC,KAAK0hC,MAAMp6B,YAAYtH,KAAK2iC,MAG5B,IAAI6lB,EAAeriD,SAASM,cAAc,UAC1C+hD,EAAa/mD,KAAO,SACpB+mD,EAAarjB,UAAY,oBACzBqjB,EAAaniB,MAAQ,qEACrBrmC,KAAK2iC,KAAKr7B,YAAYkhD,GACtBA,EAAajjB,QAAU,WACrB,IACE3B,EAAGrrB,SACHqrB,EAAGb,WACL,CACA,MAAO30B,GACLw1B,EAAG5wB,SAAS5E,EACd,CACF,EAGA,IAAIq6C,EAAgBtiD,SAASM,cAAc,UA8B3C,GA7BAgiD,EAAchnD,KAAO,SACrBgnD,EAActjB,UAAY,qBAC1BsjB,EAAcpiB,MAAQ,4DACtBrmC,KAAK2iC,KAAKr7B,YAAYmhD,GACtBA,EAAcljB,QAAU,WACtB,IACE3B,EAAG8kB,UACH9kB,EAAGb,WACL,CACA,MAAO30B,GACLw1B,EAAG5wB,SAAS5E,EACd,CACF,EAGIpO,KAAK8C,SAAW9C,KAAK8C,QAAQlB,OAAS5B,KAAK8C,QAAQlB,MAAM8F,SAC3D1H,KAAK6hC,aAAe,IAAIf,EAAa9gC,KAAK2iC,KAAM3iC,KAAK8C,QAAQlB,MAAO5B,KAAK8C,QAAQnB,MAAM,SAAkBA,GAEvGiiC,EAAG5xB,QAAQrQ,GACXiiC,EAAG/B,aAAah3B,OAClB,KAGF7K,KAAKgiC,QAAU77B,SAASM,cAAc,OACtCzG,KAAKgiC,QAAQmD,UAAY,mBACzBnlC,KAAK0hC,MAAMp6B,YAAYtH,KAAKgiC,SAE5BhiC,KAAKqH,UAAUC,YAAYtH,KAAK0hC,OAEf,QAAb1hC,KAAK2B,KAAgB,CACvB3B,KAAK2oD,UAAYxiD,SAASM,cAAc,OACxCzG,KAAK2oD,UAAUjiD,MAAMo9B,OAAS,OAC9B9jC,KAAK2oD,UAAUjiD,MAAMujC,MAAQ,OAC7BjqC,KAAKgiC,QAAQ16B,YAAYtH,KAAK2oD,WAE9B,IAAIN,EAAYF,EAAKS,KAAK5oD,KAAK2oD,WAC/BN,EAAUQ,gBAAkB1vC,IAC5BkvC,EAAUS,SAAS9oD,KAAKooD,OACxBC,EAAUU,oBAAmB,GAC7BV,EAAUW,YAAY,IACtBX,EAAUY,aAAaj3C,QAAQ,iBAC/Bq2C,EAAUY,aAAaC,WAAWlpD,KAAKkoD,aACvCG,EAAUY,aAAaE,gBAAe,GACtCd,EAAUY,aAAaG,gBAAe,GACtCf,EAAUgB,SAASC,QAAQ,SAAU,MACrCjB,EAAUgB,SAASC,QAAQ,YAAa,MACxCtpD,KAAKqoD,UAAYA,EAGZroD,KAAKkN,eAAe,WACvB7L,OAAOwH,eAAe7I,KAAM,SAAU,CACpCgD,IAAK,WAEH,OADAqL,QAAQC,KAAK,sDACNs1B,EAAGykB,SACZ,EACA3kD,IAAK,SAAU2kD,GACbh6C,QAAQC,KAAK,sDACbs1B,EAAGykB,UAAYA,CACjB,IAIJ,IAAIkB,EAAYpjD,SAASM,cAAc,KACvC8iD,EAAUjiD,YAAYnB,SAASipC,eAAe,mBAC9Cma,EAAU1pC,KAAO,sBACjB0pC,EAAUnhD,OAAS,SACnBmhD,EAAUpkB,UAAY,uBACtBokB,EAAUhkB,QAAU,WAIlBv+B,OAAOq8C,KAAKkG,EAAU1pC,KAAM0pC,EAAUnhD,OACxC,EACApI,KAAK2iC,KAAKr7B,YAAYiiD,GAGtBlB,EAAU9nD,GAAG,SAAUP,KAAK+iC,UAAUp3B,KAAK3L,MAC7C,KACK,CAEH,IAAIsoD,EAAWniD,SAASM,cAAc,YACtC6hD,EAASnjB,UAAY,kBACrBmjB,EAASlG,YAAa,EACtBpiD,KAAKgiC,QAAQ16B,YAAYghD,GACzBtoD,KAAKsoD,SAAWA,EAGc,OAA1BtoD,KAAKsoD,SAAS7iB,QAChBzlC,KAAKsoD,SAAS7iB,QAAUzlC,KAAK+iC,UAAUp3B,KAAK3L,MAI5CA,KAAKsoD,SAAS5iB,SAAW1lC,KAAK+iC,UAAUp3B,KAAK3L,KAEjD,CAEAA,KAAKiT,UAAUjT,KAAK8C,QAAQoQ,OAC9B,EAQAjC,EAAS8xB,UAAY,WAKnB,GAHA/iC,KAAK2hC,qBAGD3hC,KAAK8C,QAAQC,SACf,IACE/C,KAAK8C,QAAQC,UACf,CACA,MAAOqL,GACLC,QAAQ/N,MAAM,+BAAgC8N,EAChD,CAEJ,EAOA6C,EAAS61B,WAAa,SAAUzB,GAC9B,IAAIgE,EAAShE,EAAMiE,OAASjE,EAAMkE,QAC9BG,GAAU,EAEA,KAAVL,GAAiBhE,EAAMmE,UACrBnE,EAAMoE,UACRzpC,KAAK0oD,UACL1oD,KAAK+iC,cAGL/iC,KAAKuY,SACLvY,KAAK+iC,aAEP2G,GAAU,GAGRA,IACFrE,EAAMG,iBACNH,EAAMwE,kBAEV,EAKA54B,EAASjG,QAAU,WAEbhL,KAAKqoD,YACProD,KAAKqoD,UAAUr9C,UACfhL,KAAKqoD,UAAY,MAGfroD,KAAK0hC,OAAS1hC,KAAKqH,WAAarH,KAAK0hC,MAAMl2B,YAAcxL,KAAKqH,WAChErH,KAAKqH,UAAUsI,YAAY3P,KAAK0hC,OAG9B1hC,KAAK6hC,eACP7hC,KAAK6hC,aAAa72B,UAClBhL,KAAK6hC,aAAe,MAGtB7hC,KAAKsoD,SAAW,KAEhBtoD,KAAK2hC,mBAAqB,IAC5B,EAKA1wB,EAASy3C,QAAU,WACjB,IAAInmD,EAAOvC,KAAKgD,MACZqF,EAAOgK,KAAKC,UAAU/P,GAC1BvC,KAAKiS,QAAQ5J,EACf,EAKA4I,EAASsH,OAAS,WAChB,IAAIhW,EAAOvC,KAAKgD,MACZqF,EAAOgK,KAAKC,UAAU/P,EAAM,KAAMvC,KAAKkoD,aAC3CloD,KAAKiS,QAAQ5J,EACf,EAKA4I,EAASpG,MAAQ,WACX7K,KAAKsoD,UACPtoD,KAAKsoD,SAASz9C,QAEZ7K,KAAKqoD,WACProD,KAAKqoD,UAAUx9C,OAEnB,EAKAoG,EAASu4C,OAAS,WAChB,GAAIxpD,KAAKqoD,UAAW,CAClB,IAAIoB,GAAQ,EACZzpD,KAAKqoD,UAAUmB,OAAOC,EACxB,CACF,EAMAx4C,EAASvN,IAAM,SAASnB,GACtBvC,KAAKiS,QAAQI,KAAKC,UAAU/P,EAAM,KAAMvC,KAAKkoD,aAC/C,EAMAj3C,EAASjO,IAAM,WACb,IACIT,EADA8F,EAAOrI,KAAKoS,UAGhB,IACE7P,EAAO2O,EAAKiB,MAAM9J,EACpB,CACA,MAAO+F,GAEL/F,EAAO6I,EAAKw7B,SAASrkC,GAGrB9F,EAAO2O,EAAKiB,MAAM9J,EACpB,CAEA,OAAO9F,CACT,EAMA0O,EAASmB,QAAU,WACjB,OAAIpS,KAAKsoD,SACAtoD,KAAKsoD,SAASpnD,MAEnBlB,KAAKqoD,UACAroD,KAAKqoD,UAAU5lB,WAEjB,EACT,EAMAxxB,EAASgB,QAAU,SAASC,GAC1B,IAAI7J,EAYJ,GATEA,GADiC,IAA/BrI,KAAK8C,QAAQojD,cACRh1C,EAAKo8B,mBAAmBp7B,GAGxBA,EAGLlS,KAAKsoD,WACPtoD,KAAKsoD,SAASpnD,MAAQmH,GAEpBrI,KAAKqoD,UAAW,CAElB,IAAIqB,EAAmB1pD,KAAK8C,QAAQC,SACpC/C,KAAK8C,QAAQC,SAAW,KAExB/C,KAAKqoD,UAAUxN,SAASxyC,GAAO,GAE/BrI,KAAK8C,QAAQC,SAAW2mD,CAC1B,CAGA1pD,KAAKwT,UACP,EAMAvC,EAASuC,SAAW,WAEdxT,KAAK+gC,IAAI4oB,mBACX3pD,KAAK+gC,IAAI4oB,iBAAiBn+C,WAAWmE,YAAY3P,KAAK+gC,IAAI4oB,kBAC1D3pD,KAAK+gC,IAAI4oB,iBAAmB,KAE5B3pD,KAAKgiC,QAAQt7B,MAAMkjD,aAAe,GAClC5pD,KAAKgiC,QAAQt7B,MAAMmjD,cAAgB,IAGrC,IAEItnD,EAFAunD,GAAa,EACbt0C,EAAS,GAEb,IACEjT,EAAOvC,KAAKgD,MACZ8mD,GAAa,CACf,CACA,MAAO17C,GAEP,CAGA,GAAI07C,GAAc9pD,KAAKsT,eAAgB,CACrC,IAAIgC,EAAQtV,KAAKsT,eAAe/Q,GAC3B+S,IACHE,EAASxV,KAAKsT,eAAekC,OAAO3J,KAAI,SAAUvL,GAChD,OAAO4Q,EAAKiyB,mBAAmB7iC,EACjC,IAEJ,CAEA,GAAIkV,EAAO9N,OAAS,EAAG,CAErB,IAAI6W,EAAQ/I,EAAO9N,OAASsgD,EAC5B,GAAIzpC,EAAO,CACT/I,EAASA,EAAOzI,MAAM,EAAGi7C,GACzB,IAAI+B,EAAS/pD,KAAKsT,eAAekC,OAAO9N,OAASsgD,EACjDxyC,EAAO9I,KAAK,IAAMq9C,EAAS,mBAC7B,CAEA,IAAIJ,EAAmBxjD,SAASM,cAAc,OAC9CkjD,EAAiB5R,UAAY,gDAEzBviC,EAAO3J,KAAI,SAAUvL,GACnB,IAAIiO,EASJ,OAPEA,EADmB,kBAAVjO,EACC,wBAA0BA,EAAQ,cAGlC,OAASA,EAAM+X,SAAf,YACG/X,EAAMiO,QAAU,QAGxB,iEAAmEA,EAAU,OACtF,IAAG2U,KAAK,IAbiB,mBAiB7BljB,KAAK+gC,IAAI4oB,iBAAmBA,EAC5B3pD,KAAK0hC,MAAMp6B,YAAYqiD,GAEvB,IAAI7lB,EAAS6lB,EAAiB5lB,aAC9B/jC,KAAKgiC,QAAQt7B,MAAMkjD,cAAiB9lB,EAAU,KAC9C9jC,KAAKgiC,QAAQt7B,MAAMmjD,cAAgB/lB,EAAS,IAC9C,CAGA,GAAI9jC,KAAKqoD,UAAW,CAClB,IAAIoB,GAAQ,EACZzpD,KAAKqoD,UAAUmB,OAAOC,EACxB,CACF,EAGA9jD,EAAOF,QAAU,CACf,CACE9D,KAAM,OACNmR,MAAO7B,EACP5O,KAAM,OACN0Q,KAAM9B,EAASsH,QAEjB,CACE5W,KAAM,OACNmR,MAAO7B,EACP5O,KAAM,OACN0Q,KAAM9B,EAASsH,QAKd,EAEA,SAAS5S,EAAQF,EAAS,GAG/B,IAAIsiD,EAAM,EAAoB,IAG9B,EAAoB,IACpB,EAAoB,IAEpBpiD,EAAOF,QAAUsiD,CAGZ,EAEA,SAASpiD,EAAQF,EAAS,IAsC/B,WAEA,IAAIukD,EAAgB,MAEhBnlC,EAAS,WAAc,OAAO7kB,IAAO,CAA5B,GAIb,GAHK6kB,GAA2B,oBAAV7d,SAAuB6d,EAAS7d,QAGjDgjD,GAAuC,qBAAfC,WAA7B,CAIA,IAAIC,EAAS,SAASvkD,EAAQwkD,EAAMC,GACV,kBAAXzkD,GASa,GAApB8B,UAAUC,SACV0iD,EAAUD,GACTD,EAAOx5C,QAAQ/K,KAChBukD,EAAOG,SAAS1kD,GAAUykD,EAC1BF,EAAOx5C,QAAQ/K,GAAU,OAZrBukD,EAAOI,SACPJ,EAAOI,SAAS7gD,MAAMzJ,KAAMyH,YAE5B4G,QAAQ/N,MAAM,mDACd+N,QAAQ+jC,QAUpB,EAEA8X,EAAOx5C,QAAU,CAAC,EAClBw5C,EAAOG,SAAW,CAAC,EAKnB,IAAIE,EAAY,SAASC,EAAU7kD,EAAQyK,GACvC,GAAsB,kBAAXzK,EAAqB,CAC5B,IAAIykD,EAAUK,EAAOD,EAAU7kD,GAC/B,QAAewK,GAAXi6C,EAEA,OADAh6C,GAAYA,IACLg6C,CAEf,MAAO,GAA+C,mBAA3C/oD,OAAO4G,UAAUsB,SAAS3E,KAAKe,GAA8B,CAEpE,IADA,IAAIu8B,EAAS,GACJn8B,EAAI,EAAG8B,EAAIlC,EAAO+B,OAAQ3B,EAAI8B,IAAK9B,EAAG,CAC3C,IAAI2kD,EAAMD,EAAOD,EAAU7kD,EAAOI,IAClC,QAAWoK,GAAPu6C,GAAoBC,EAASL,SAC7B,OACJpoB,EAAOx1B,KAAKg+C,EAChB,CACA,OAAOt6C,GAAYA,EAAS3G,MAAM,KAAMy4B,KAAW,CACvD,CACJ,EAEIyoB,EAAW,SAAShlD,EAAQyK,GAC5B,IAAIw6C,EAAiBL,EAAU,GAAI5kD,EAAQyK,GAC3C,YAAsBD,GAAlBy6C,GAA+BD,EAASL,SACjCK,EAASL,SAAS7gD,MAAMzJ,KAAMyH,WAClCmjD,CACX,EAEIC,EAAkB,SAASL,EAAUM,GAErC,IAAiC,IAA7BA,EAAWj5C,QAAQ,KAAa,CAChC,IAAIk5C,EAASD,EAAW5sC,MAAM,KAC9B,OAAO2sC,EAAgBL,EAAUO,EAAO,IAAM,IAAMF,EAAgBL,EAAUO,EAAO,GACzF,CAEA,GAA4B,KAAxBD,EAAWnnC,OAAO,GAAW,CAC7B,IAAIqB,EAAOwlC,EAAStsC,MAAM,KAAKnR,MAAM,GAAI,GAAGmW,KAAK,KACjD4nC,EAAa9lC,EAAO,IAAM8lC,EAE1B,OAAmC,IAA7BA,EAAWj5C,QAAQ,MAAe+3B,GAAYkhB,EAAY,CAC5D,IAAIlhB,EAAWkhB,EACfA,EAAaA,EAAW7rC,QAAQ,SAAU,KAAKA,QAAQ,iBAAkB,GAC7E,CACJ,CACA,OAAO6rC,CACX,EAMIL,EAAS,SAASD,EAAUM,GAC5BA,EAAaD,EAAgBL,EAAUM,GAEvC,IAAInlD,EAASukD,EAAOx5C,QAAQo6C,GAC5B,IAAKnlD,EAAQ,CAET,GADAA,EAASukD,EAAOG,SAASS,GACH,oBAAXnlD,EAAuB,CAC9B,IAAIF,EAAU,CAAC,EACXulD,EAAM,CACNn6C,GAAIi6C,EACJv0C,IAAK,GACL9Q,QAASA,EACTwlD,UAAU,GAGVC,EAAM,SAASvlD,EAAQyK,GACvB,OAAOm6C,EAAUO,EAAYnlD,EAAQyK,EACzC,EAEI+6C,EAAcxlD,EAAOulD,EAAKzlD,EAASulD,GACvCvlD,EAAU0lD,GAAeH,EAAIvlD,QAC7BykD,EAAOx5C,QAAQo6C,GAAcrlD,SACtBykD,EAAOG,SAASS,EAC3B,CACAnlD,EAASukD,EAAOx5C,QAAQo6C,GAAcrlD,GAAWE,CACrD,CACA,OAAOA,CACX,EAuBAylD,EAAUpB,EA9HA,CAyGV,SAASoB,EAAUC,GACf,IAAI76C,EAAOqU,EACPwmC,IACKxmC,EAAOwmC,KACRxmC,EAAOwmC,GAAM,CAAC,GAClB76C,EAAOqU,EAAOwmC,IAGb76C,EAAK05C,QAAW15C,EAAK05C,OAAOe,WAC7Bf,EAAOI,SAAW95C,EAAK05C,OACvB15C,EAAK05C,OAASA,EACd15C,EAAK05C,OAAOe,UAAW,GAGtBz6C,EAAKm6C,UAAan6C,EAAKm6C,SAASM,WACjCN,EAASL,SAAW95C,EAAKm6C,SACzBn6C,EAAKm6C,SAAWA,EAChBn6C,EAAKm6C,SAASM,UAAW,EAEjC,CAIC,EAzID,GA2IAlD,IAAImC,OAAO,iBAAiB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACxF,aAEI,IAAI2lD,EAAO,CACHzpC,KAAM5K,OAAOhP,UAAU4Z,KACvB/M,KAAMmC,OAAOhP,UAAU6M,KACvBmN,MAAO9gB,OAAO8G,UAAUga,MACxBhD,QAAS9d,OAAO8G,UAAUgX,QAC1Bf,MAAO/c,OAAO8G,UAAUiW,OAE5BqtC,OAAsDp7C,IAAlCm7C,EAAKzpC,KAAKjd,KAAK,OAAQ,IAAI,GAC/C4mD,EAA8B,WAC1B,IAAIxiC,EAAI,KAER,OADAsiC,EAAKx2C,KAAKlQ,KAAKokB,EAAG,KACVA,EAAE2F,SACd,CAJ8B,GA0ClC,SAAS88B,EAAgBt0C,GACrB,OAAQA,EAAM0N,OAAa,IAAM,KACzB1N,EAAMu0C,WAAa,IAAM,KACzBv0C,EAAMw0C,UAAa,IAAM,KACzBx0C,EAAMy0C,SAAa,IAAM,KACzBz0C,EAAM00C,OAAa,IAAM,GACrC,CAEA,SAASh6C,EAASoU,EAAOvH,EAAMotC,GAC3B,GAAIxqD,MAAM2G,UAAU4J,QAChB,OAAOoU,EAAMpU,QAAQ6M,EAAMotC,GAC/B,IAAK,IAAI/lD,EAAI+lD,GAAQ,EAAG/lD,EAAIkgB,EAAMve,OAAQ3B,IACtC,GAAIkgB,EAAMlgB,KAAO2Y,EACb,OAAO3Y,EAEf,OAAQ,CACZ,CApDIylD,GAA+BD,IAEnCt0C,OAAOhP,UAAU4Z,KAAO,SAAUhN,GAC9B,IACIrC,EAAMu5C,EADN9pC,EAAQqpC,EAAKzpC,KAAKpY,MAAMzJ,KAAMyH,WAElC,GAAoB,iBAAT,GAAqBwa,EAAO,CAUnC,IATKspC,GAAqBtpC,EAAMva,OAAS,GAAKmK,EAAQoQ,EAAO,KAAO,IAChE8pC,EAAK90C,OAAOjX,KAAKshB,OAAQgqC,EAAKrsC,QAAQra,KAAK6mD,EAAezrD,MAAO,IAAK,KACtEsrD,EAAKrsC,QAAQra,KAAKiQ,EAAI9H,MAAMkV,EAAMzF,OAAQuvC,GAAI,WAC1C,IAAK,IAAIhmD,EAAI,EAAGA,EAAI0B,UAAUC,OAAS,EAAG3B,SACjBoK,IAAjB1I,UAAU1B,KACVkc,EAAMlc,QAAKoK,EAEvB,KAEAnQ,KAAKgsD,UAAYhsD,KAAKgsD,SAASC,aAC/B,IAAK,IAAIlmD,EAAI,EAAGA,EAAIkc,EAAMva,OAAQ3B,IAC9ByM,EAAOxS,KAAKgsD,SAASC,aAAalmD,EAAI,GAClCyM,IACDyP,EAAMzP,GAAQyP,EAAMlc,KAG1BylD,GAA+BxrD,KAAK6kB,SAAW5C,EAAM,GAAGva,QAAW1H,KAAK2uB,UAAY1M,EAAMzF,OAC3Fxc,KAAK2uB,WACb,CACA,OAAO1M,CACX,EACKupC,IACDv0C,OAAOhP,UAAU6M,KAAO,SAAUD,GAC9B,IAAIoN,EAAQqpC,EAAKzpC,KAAKjd,KAAK5E,KAAM6U,GAGjC,OAFIoN,GAASjiB,KAAK6kB,SAAW5C,EAAM,GAAGva,QAAW1H,KAAK2uB,UAAY1M,EAAMzF,OACpExc,KAAK2uB,cACA1M,CACb,GAqBR,IAEA8lC,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GAE1F,SAASumD,IAAS,CAEbnqB,SAAS95B,UAAU0D,OACpBo2B,SAAS95B,UAAU0D,KAAO,SAAcwgD,GACpC,IAAI/jD,EAASpI,KACb,GAAqB,mBAAVoI,EACP,MAAM,IAAIyB,UAAU,kDAAoDzB,GAE5E,IAAIstB,EAAO3oB,EAAMnI,KAAK6C,UAAW,GAC7B2kD,EAAQ,WAER,GAAIpsD,gBAAgBosD,EAAO,CAEvB,IAAIl0C,EAAS9P,EAAOqB,MAChBzJ,KACA01B,EAAKlwB,OAAOuH,EAAMnI,KAAK6C,aAE3B,OAAIpG,OAAO6W,KAAYA,EACZA,EAEJlY,IAEX,CACI,OAAOoI,EAAOqB,MACV0iD,EACAz2B,EAAKlwB,OAAOuH,EAAMnI,KAAK6C,YAKnC,EAMA,OALGW,EAAOH,YACNikD,EAAMjkD,UAAYG,EAAOH,UACzBmkD,EAAMnkD,UAAY,IAAIikD,EACtBA,EAAMjkD,UAAY,MAEfmkD,CACX,GAEJ,IAMIC,EACAC,EACAC,EACAC,EACAC,EAVA7nD,EAAOm9B,SAAS95B,UAAUrD,KAC1B8nD,EAAmBprD,MAAM2G,UACzB0kD,EAAoBtrD,OAAO4G,UAC3B8E,EAAQ2/C,EAAiB3/C,MACzB6/C,EAAYhoD,EAAK+G,KAAKghD,EAAkBpjD,UACxCsjD,EAAOjoD,EAAK+G,KAAKghD,EAAkBz/C,gBAYvC,IANKu/C,EAAoBI,EAAKF,EAAmB,uBAC7CN,EAAeznD,EAAK+G,KAAKghD,EAAkBG,kBAC3CR,EAAe1nD,EAAK+G,KAAKghD,EAAkBI,kBAC3CR,EAAe3nD,EAAK+G,KAAKghD,EAAkBK,kBAC3CR,EAAe5nD,EAAK+G,KAAKghD,EAAkBM,mBAEjB,GAA1B,CAAC,EAAE,GAAGvoC,OAAO,GAAGhd,OAChB,GAAG,WACC,SAASwlD,EAAUrlD,GACf,IAAIxB,EAAI,IAAI/E,MAAMuG,EAAE,GAEpB,OADAxB,EAAE,GAAKA,EAAE,GAAK,EACPA,CACX,CACA,IAAgB8mD,EAAZlnC,EAAQ,GAUZ,GARAA,EAAMvB,OAAOjb,MAAMwc,EAAOinC,EAAU,KACpCjnC,EAAMvB,OAAOjb,MAAMwc,EAAOinC,EAAU,KAEpCC,EAAelnC,EAAMve,OACrBue,EAAMvB,OAAO,EAAG,EAAG,OAECuB,EAAMve,OAEtBylD,EAAe,GAAKlnC,EAAMve,OAC1B,OAAO,CAEf,CAnBG,GAmBE,CACD,IAAI0lD,EAAe9rD,MAAM2G,UAAUyc,OACnCpjB,MAAM2G,UAAUyc,OAAS,SAASwjB,EAAOmlB,GACrC,OAAK5lD,UAAUC,OAGJ0lD,EAAa3jD,MAAMzJ,KAAM,MAClB,IAAVkoC,EAAmB,EAAIA,OACP,IAAhBmlB,EAA0BrtD,KAAK0H,OAASwgC,EAASmlB,GACnD7nD,OAAOuH,EAAMnI,KAAK6C,UAAW,KALxB,EAOf,CACJ,MACInG,MAAM2G,UAAUyc,OAAS,SAAS2G,EAAKiiC,GACnC,IAAI5lD,EAAS1H,KAAK0H,OACd2jB,EAAM,EACFA,EAAM3jB,IACN2jB,EAAM3jB,QACI,GAAP2jB,EACPA,EAAM,EACCA,EAAM,IACbA,EAAMxF,KAAKkf,IAAIr9B,EAAS2jB,EAAK,IAG3BA,EAAIiiC,EAAc5lD,IACpB4lD,EAAc5lD,EAAS2jB,GAE3B,IAAIkiC,EAAUvtD,KAAK+M,MAAMse,EAAKA,EAAIiiC,GAC9BE,EAASzgD,EAAMnI,KAAK6C,UAAW,GAC/B3C,EAAM0oD,EAAO9lD,OACjB,GAAI2jB,IAAQ3jB,EACJ5C,GACA9E,KAAK0M,KAAKjD,MAAMzJ,KAAMwtD,OAEvB,CACH,IAAIjmD,EAASse,KAAKif,IAAIwoB,EAAa5lD,EAAS2jB,GACxCoiC,EAAapiC,EAAM9jB,EACnBmmD,EAAaD,EAAa3oD,EAAMyC,EAChComD,EAAYjmD,EAAS+lD,EACrBG,EAAoBlmD,EAASH,EAEjC,GAAImmD,EAAaD,EACb,IAAK,IAAI1nD,EAAI,EAAGA,EAAI4nD,IAAa5nD,EAC7B/F,KAAK0tD,EAAW3nD,GAAK/F,KAAKytD,EAAW1nD,QAEtC,GAAI2nD,EAAaD,EACpB,IAAK1nD,EAAI4nD,EAAW5nD,KAChB/F,KAAK0tD,EAAW3nD,GAAK/F,KAAKytD,EAAW1nD,GAI7C,GAAIjB,GAAOumB,IAAQuiC,EACf5tD,KAAK0H,OAASkmD,EACd5tD,KAAK0M,KAAKjD,MAAMzJ,KAAMwtD,QAGtB,IADAxtD,KAAK0H,OAASkmD,EAAoB9oD,EAC7BiB,EAAI,EAAGA,EAAIjB,IAAOiB,EACnB/F,KAAKqrB,EAAItlB,GAAKynD,EAAOznD,EAGjC,CACA,OAAOwnD,CACX,EAGHjsD,MAAMsS,UACPtS,MAAMsS,QAAU,SAAiBwN,GAC7B,MAAyB,kBAAlBwrC,EAAUxrC,EACrB,GAEJ,IAoRQysC,EApRJC,EAAczsD,OAAO,KACrB0sD,EAAgC,KAAlBD,EAAY,MAAe,KAAKA,GAgPlD,GA9OKxsD,MAAM2G,UAAUiC,UACjB5I,MAAM2G,UAAUiC,QAAU,SAAiB8jD,GACvC,IAAI9jC,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACXgM,EACJgkC,EAAQzmD,UAAU,GAClB1B,GAAK,EACL2B,EAAS7E,EAAK6E,SAAW,EAC7B,GAAsB,qBAAlBklD,EAAUoB,GACV,MAAM,IAAInkD,UAGd,QAAS9D,EAAI2B,EACL3B,KAAKlD,GACLmrD,EAAIppD,KAAKspD,EAAOrrD,EAAKkD,GAAIA,EAAGmkB,EAGxC,GAEC5oB,MAAM2G,UAAU4D,MACjBvK,MAAM2G,UAAU4D,IAAM,SAAamiD,GAC/B,IAAI9jC,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACXgM,EACJxiB,EAAS7E,EAAK6E,SAAW,EACzBwQ,EAAS5W,MAAMoG,GACfwmD,EAAQzmD,UAAU,GACtB,GAAsB,qBAAlBmlD,EAAUoB,GACV,MAAM,IAAInkD,UAAUmkD,EAAM,sBAG9B,IAAK,IAAIjoD,EAAI,EAAGA,EAAI2B,EAAQ3B,IACpBA,KAAKlD,IACLqV,EAAOnS,GAAKioD,EAAIppD,KAAKspD,EAAOrrD,EAAKkD,GAAIA,EAAGmkB,IAEhD,OAAOhS,CACX,GAEC5W,MAAM2G,UAAUo7B,SACjB/hC,MAAM2G,UAAUo7B,OAAS,SAAgB2qB,GACrC,IAMI9sD,EANAgpB,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACPgM,EACRxiB,EAAS7E,EAAK6E,SAAW,EACzBwQ,EAAS,GAETg2C,EAAQzmD,UAAU,GACtB,GAAsB,qBAAlBmlD,EAAUoB,GACV,MAAM,IAAInkD,UAAUmkD,EAAM,sBAG9B,IAAK,IAAIjoD,EAAI,EAAGA,EAAI2B,EAAQ3B,IACpBA,KAAKlD,IACL3B,EAAQ2B,EAAKkD,GACTioD,EAAIppD,KAAKspD,EAAOhtD,EAAO6E,EAAGmkB,IAC1BhS,EAAOxL,KAAKxL,IAIxB,OAAOgX,CACX,GAEC5W,MAAM2G,UAAUgzB,QACjB35B,MAAM2G,UAAUgzB,MAAQ,SAAe+yB,GACnC,IAAI9jC,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACXgM,EACJxiB,EAAS7E,EAAK6E,SAAW,EACzBwmD,EAAQzmD,UAAU,GACtB,GAAsB,qBAAlBmlD,EAAUoB,GACV,MAAM,IAAInkD,UAAUmkD,EAAM,sBAG9B,IAAK,IAAIjoD,EAAI,EAAGA,EAAI2B,EAAQ3B,IACxB,GAAIA,KAAKlD,IAASmrD,EAAIppD,KAAKspD,EAAOrrD,EAAKkD,GAAIA,EAAGmkB,GAC1C,OAAO,EAGf,OAAO,CACX,GAEC5oB,MAAM2G,UAAU25C,OACjBtgD,MAAM2G,UAAU25C,KAAO,SAAcoM,GACjC,IAAI9jC,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACXgM,EACJxiB,EAAS7E,EAAK6E,SAAW,EACzBwmD,EAAQzmD,UAAU,GACtB,GAAsB,qBAAlBmlD,EAAUoB,GACV,MAAM,IAAInkD,UAAUmkD,EAAM,sBAG9B,IAAK,IAAIjoD,EAAI,EAAGA,EAAI2B,EAAQ3B,IACxB,GAAIA,KAAKlD,GAAQmrD,EAAIppD,KAAKspD,EAAOrrD,EAAKkD,GAAIA,EAAGmkB,GACzC,OAAO,EAGf,OAAO,CACX,GAEC5oB,MAAM2G,UAAUs7B,SACjBjiC,MAAM2G,UAAUs7B,OAAS,SAAgByqB,GACrC,IAAI9jC,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACXgM,EACJxiB,EAAS7E,EAAK6E,SAAW,EAC7B,GAAsB,qBAAlBklD,EAAUoB,GACV,MAAM,IAAInkD,UAAUmkD,EAAM,sBAE9B,IAAKtmD,GAA8B,GAApBD,UAAUC,OACrB,MAAM,IAAImC,UAAU,+CAGxB,IACIqO,EADAnS,EAAI,EAER,GAAI0B,UAAUC,QAAU,EACpBwQ,EAASzQ,UAAU,QAEnB,EAAG,CACC,GAAI1B,KAAKlD,EAAM,CACXqV,EAASrV,EAAKkD,KACd,KACJ,CACA,KAAMA,GAAK2B,EACP,MAAM,IAAImC,UAAU,8CAE5B,OAAS,GAGb,KAAO9D,EAAI2B,EAAQ3B,IACXA,KAAKlD,IACLqV,EAAS81C,EAAIppD,UAAK,EAAQsT,EAAQrV,EAAKkD,GAAIA,EAAGmkB,IAItD,OAAOhS,CACX,GAEC5W,MAAM2G,UAAUkmD,cACjB7sD,MAAM2G,UAAUkmD,YAAc,SAAqBH,GAC/C,IAAI9jC,EAAS+jC,EAASjuD,MAClB6C,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACXgM,EACJxiB,EAAS7E,EAAK6E,SAAW,EAC7B,GAAsB,qBAAlBklD,EAAUoB,GACV,MAAM,IAAInkD,UAAUmkD,EAAM,sBAE9B,IAAKtmD,GAA8B,GAApBD,UAAUC,OACrB,MAAM,IAAImC,UAAU,oDAGxB,IAAIqO,EAAQnS,EAAI2B,EAAS,EACzB,GAAID,UAAUC,QAAU,EACpBwQ,EAASzQ,UAAU,QAEnB,EAAG,CACC,GAAI1B,KAAKlD,EAAM,CACXqV,EAASrV,EAAKkD,KACd,KACJ,CACA,KAAMA,EAAI,EACN,MAAM,IAAI8D,UAAU,mDAE5B,OAAS,GAGb,GACQ9D,KAAK/F,OACLkY,EAAS81C,EAAIppD,UAAK,EAAQsT,EAAQrV,EAAKkD,GAAIA,EAAGmkB,UAE7CnkB,KAET,OAAOmS,CACX,GAEC5W,MAAM2G,UAAU4J,UAAqC,GAAzB,CAAC,EAAG,GAAGA,QAAQ,EAAG,KAC/CvQ,MAAM2G,UAAU4J,QAAU,SAAiBu8C,GACvC,IAAIvrD,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACX+vC,EAASjuD,MACb0H,EAAS7E,EAAK6E,SAAW,EAE7B,IAAKA,EACD,OAAQ,EAGZ,IAAI3B,EAAI,EAKR,IAJI0B,UAAUC,OAAS,IACnB3B,EAAIsoD,EAAU5mD,UAAU,KAE5B1B,EAAIA,GAAK,EAAIA,EAAI8f,KAAKkf,IAAI,EAAGr9B,EAAS3B,GAC/BA,EAAI2B,EAAQ3B,IACf,GAAIA,KAAKlD,GAAQA,EAAKkD,KAAOqoD,EACzB,OAAOroD,EAGf,OAAQ,CACZ,GAECzE,MAAM2G,UAAUoa,cAA8C,GAA9B,CAAC,EAAG,GAAGA,YAAY,GAAI,KACxD/gB,MAAM2G,UAAUoa,YAAc,SAAqB+rC,GAC/C,IAAIvrD,EAAOkrD,GAAkC,mBAAnBnB,EAAU5sD,MAC5BA,KAAKke,MAAM,IACX+vC,EAASjuD,MACb0H,EAAS7E,EAAK6E,SAAW,EAE7B,IAAKA,EACD,OAAQ,EAEZ,IAAI3B,EAAI2B,EAAS,EAKjB,IAJID,UAAUC,OAAS,IACnB3B,EAAI8f,KAAKif,IAAI/+B,EAAGsoD,EAAU5mD,UAAU,MAExC1B,EAAIA,GAAK,EAAIA,EAAI2B,EAASme,KAAKqf,IAAIn/B,GAC5BA,GAAK,EAAGA,IACX,GAAIA,KAAKlD,GAAQurD,IAAWvrD,EAAKkD,GAC7B,OAAOA,EAGf,OAAQ,CACZ,GAEC1E,OAAOsI,iBACRtI,OAAOsI,eAAiB,SAAwBugB,GAC5C,OAAOA,EAAOjhB,YACVihB,EAAOliB,YACPkiB,EAAOliB,YAAYC,UACnB0kD,EAER,IAECtrD,OAAOitD,yBAA0B,CAClC,IAAIC,EAAiB,2DAErBltD,OAAOitD,yBAA2B,SAAkCpkC,EAAQskC,GACxE,GAAsB,iBAAVtkC,GAAuC,mBAAVA,GAAoC,OAAXA,EAC9D,MAAM,IAAIrgB,UAAU0kD,EAAiBrkC,GACzC,GAAK2iC,EAAK3iC,EAAQskC,GAAlB,CAGA,IAAIC,EAEJ,GADAA,EAAc,CAAE/lD,YAAY,EAAMC,cAAc,GAC5C8jD,EAAmB,CACnB,IAAIxkD,EAAYiiB,EAAOjhB,UACvBihB,EAAOjhB,UAAY0jD,EAEnB,IAAI+B,EAASnC,EAAariC,EAAQskC,GAC9BG,EAASnC,EAAatiC,EAAQskC,GAGlC,GAFAtkC,EAAOjhB,UAAYhB,EAEfymD,GAAUC,EAGV,OAFID,IAAQD,EAAWzrD,IAAM0rD,GACzBC,IAAQF,EAAW/qD,IAAMirD,GACtBF,CAEf,CAEA,OADAA,EAAWvtD,MAAQgpB,EAAOskC,GACnBC,CAnBG,CAoBd,CACJ,EACKptD,OAAOutD,sBACRvtD,OAAOutD,oBAAsB,SAA6B1kC,GACtD,OAAO7oB,OAAOsQ,KAAKuY,EACvB,GAEC7oB,OAAOyI,UAGJ+jD,EAD+B,OAA/BxsD,OAAO4G,UAAUgB,UACH,WACV,MAAO,CAAE,UAAa,KAC1B,EAEc,WACV,IAAI4lD,EAAQ,CAAC,EACb,IAAK,IAAI9oD,KAAK8oD,EACVA,EAAM9oD,GAAK,KASf,OARA8oD,EAAM7mD,YACN6mD,EAAM3hD,eACN2hD,EAAMC,qBACND,EAAME,cACNF,EAAMG,eACNH,EAAMtlD,SACNslD,EAAMI,QACNJ,EAAM5lD,UAAY,KACX4lD,CACX,EAGJxtD,OAAOyI,OAAS,SAAgB7B,EAAWorB,GACvC,IAAInJ,EACJ,GAAkB,OAAdjiB,EACAiiB,EAAS2jC,QACN,CACH,GAAwB,iBAAb5lD,EACP,MAAM,IAAI4B,UAAU,2BAA4B5B,EAAW,iBAC/D,IAAIinD,EAAO,WAAa,EACxBA,EAAKjnD,UAAYA,EACjBiiB,EAAS,IAAIglC,EACbhlC,EAAOjhB,UAAYhB,CACvB,CAGA,YAFmB,IAAforB,GACAhyB,OAAO8tD,iBAAiBjlC,EAAQmJ,GAC7BnJ,CACX,GAGJ,SAASklC,EAAuBllC,GAC5B,IAEI,OADA7oB,OAAOwH,eAAeqhB,EAAQ,WAAY,CAAC,GACpC,aAAcA,CACzB,CAAE,MAAOmlC,GACT,CACJ,CACA,GAAIhuD,OAAOwH,eAAgB,CACvB,IAAIymD,EAA8BF,EAAuB,CAAC,GACtDG,EAA8C,oBAAZppD,UAClCipD,EAAuBjpD,SAASM,cAAc,QAClD,IAAK6oD,IAAgCC,EACjC,IAAIC,EAAyBnuD,OAAOwH,cAE5C,CAEA,IAAKxH,OAAOwH,gBAAkB2mD,EAAwB,CAClD,IAAIC,EAA4B,2CAC5BC,EAAwB,+CACxBC,EAA8B,iEAGlCtuD,OAAOwH,eAAiB,SAAwBqhB,EAAQskC,EAAUC,GAC9D,GAAsB,iBAAVvkC,GAAuC,mBAAVA,GAAoC,OAAXA,EAC9D,MAAM,IAAIrgB,UAAU6lD,EAAwBxlC,GAChD,GAA0B,iBAAdukC,GAA+C,mBAAdA,GAA4C,OAAfA,EACtE,MAAM,IAAI5kD,UAAU4lD,EAA4BhB,GACpD,GAAIe,EACA,IACI,OAAOA,EAAuB5qD,KAAKvD,OAAQ6oB,EAAQskC,EAAUC,EACjE,CAAE,MAAOY,GACT,CAEJ,GAAIxC,EAAK4B,EAAY,SAEjB,GAAIhC,IAAsBF,EAAariC,EAAQskC,IACrBhC,EAAatiC,EAAQskC,IAC/C,CACI,IAAIvmD,EAAYiiB,EAAOjhB,UACvBihB,EAAOjhB,UAAY0jD,SACZziC,EAAOskC,GACdtkC,EAAOskC,GAAYC,EAAWvtD,MAC9BgpB,EAAOjhB,UAAYhB,CACvB,MACIiiB,EAAOskC,GAAYC,EAAWvtD,UAE/B,CACH,IAAKurD,EACD,MAAM,IAAI5iD,UAAU8lD,GACpB9C,EAAK4B,EAAY,QACjBpC,EAAaniC,EAAQskC,EAAUC,EAAWzrD,KAC1C6pD,EAAK4B,EAAY,QACjBnC,EAAapiC,EAAQskC,EAAUC,EAAW/qD,IAClD,CAEA,OAAOwmB,CACX,CACJ,CACK7oB,OAAO8tD,mBACR9tD,OAAO8tD,iBAAmB,SAA0BjlC,EAAQmJ,GACxD,IAAK,IAAIm7B,KAAYn7B,EACbw5B,EAAKx5B,EAAYm7B,IACjBntD,OAAOwH,eAAeqhB,EAAQskC,EAAUn7B,EAAWm7B,IAE3D,OAAOtkC,CACX,GAEC7oB,OAAOuuD,OACRvuD,OAAOuuD,KAAO,SAAc1lC,GACxB,OAAOA,CACX,GAEC7oB,OAAOwuD,SACRxuD,OAAOwuD,OAAS,SAAgB3lC,GAC5B,OAAOA,CACX,GAEJ,IACI7oB,OAAOwuD,QAAO,WAAa,GAC/B,CAAE,MAAOR,GACLhuD,OAAOwuD,OAAS,SAAiBC,GAC7B,OAAO,SAAgB5lC,GACnB,MAAqB,mBAAVA,EACAA,EAEA4lC,EAAa5lC,EAE5B,CACH,CARe,CAQb7oB,OAAOwuD,OACd,CA+BA,GA9BKxuD,OAAO0uD,oBACR1uD,OAAO0uD,kBAAoB,SAA2B7lC,GAClD,OAAOA,CACX,GAEC7oB,OAAO2uD,WACR3uD,OAAO2uD,SAAW,SAAkB9lC,GAChC,OAAO,CACX,GAEC7oB,OAAO4uD,WACR5uD,OAAO4uD,SAAW,SAAkB/lC,GAChC,OAAO,CACX,GAEC7oB,OAAO6uD,eACR7uD,OAAO6uD,aAAe,SAAsBhmC,GACxC,GAAI7oB,OAAO6oB,KAAYA,EACnB,MAAM,IAAIrgB,UAEd,IAAI2I,EAAO,GACX,MAAOq6C,EAAK3iC,EAAQ1X,GAChBA,GAAQ,IAEZ0X,EAAO1X,IAAQ,EACf,IAAI24C,EAAc0B,EAAK3iC,EAAQ1X,GAE/B,cADO0X,EAAO1X,GACP24C,CACX,IAEC9pD,OAAOsQ,KAAM,CACd,IAAIw+C,GAAiB,EACjBC,EAAY,CACR,WACA,iBACA,UACA,iBACA,gBACA,uBACA,eAEJC,EAAkBD,EAAU1oD,OAEhC,IAAK,IAAIoB,IAAO,CAAC,SAAY,MACzBqnD,GAAiB,EAGrB9uD,OAAOsQ,KAAO,SAAcuY,GAExB,GACsB,iBAAVA,GAAuC,mBAAVA,GAC1B,OAAXA,EAEA,MAAM,IAAIrgB,UAAU,sCAGxB,IAAI8H,EAAO,GACX,IAAK,IAAIa,KAAQ0X,EACT2iC,EAAK3iC,EAAQ1X,IACbb,EAAKjF,KAAK8F,GAIlB,GAAI29C,EACA,IAAK,IAAIpqD,EAAI,EAAGuqD,EAAKD,EAAiBtqD,EAAIuqD,EAAIvqD,IAAK,CAC/C,IAAIwqD,EAAWH,EAAUrqD,GACrB8mD,EAAK3iC,EAAQqmC,IACb5+C,EAAKjF,KAAK6jD,EAElB,CAEJ,OAAO5+C,CACX,CAEJ,CACKrI,KAAKknD,MACNlnD,KAAKknD,IAAM,WACP,OAAO,IAAIlnD,MAAOmnD,SACtB,GAEJ,IAAIC,EAAK,iDAGT,IAAKvvD,OAAO8G,UAAU0Z,MAAQ+uC,EAAG/uC,OAAQ,CACrC+uC,EAAK,IAAMA,EAAK,IAChB,IAAIC,EAAkB,IAAI15C,OAAO,IAAMy5C,EAAKA,EAAK,KAC7CE,EAAgB,IAAI35C,OAAOy5C,EAAKA,EAAK,MACzCvvD,OAAO8G,UAAU0Z,KAAO,WACpB,OAAOxgB,OAAOnB,MAAMif,QAAQ0xC,EAAiB,IAAI1xC,QAAQ2xC,EAAe,GAC5E,CACJ,CAEA,SAASvC,EAAUzoD,GAOf,OANAA,GAAKA,EACDA,IAAMA,EACNA,EAAI,EACS,IAANA,GAAWA,IAAM,KAASA,KAAO,MACxCA,GAAKA,EAAI,IAAM,GAAKigB,KAAKD,MAAMC,KAAKqf,IAAIt/B,KAErCA,CACX,CAkCA,IAAIqoD,EAAW,SAAU3nD,GACrB,GAAS,MAALA,EACA,MAAM,IAAIuD,UAAU,iBAAiBvD,EAAE,cAE3C,OAAOjF,OAAOiF,EAClB,CAEA,IAEAyhD,IAAImC,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,iBAAiB,qBAAqB,SAASS,EAAUllD,EAASE,GACpI,aAEAglD,EAAS,YACTA,EAAS,aAET,IAEA5C,IAAImC,OAAO,cAAc,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACrF,aAEA,IAAIkrD,EAAW,+BAEfprD,EAAQqrD,gBAAkB,SAASC,GAG/B,OAFKA,IACDA,EAAM5qD,UACH4qD,EAAIC,MAAQD,EAAIE,qBAAqB,QAAQ,IAAMF,EAAIxqD,eAClE,EAEAd,EAAQgB,cAAgB,SAASyqD,EAAK7F,GAClC,OAAOllD,SAASgrD,gBACThrD,SAASgrD,gBAAgB9F,GAAMwF,EAAUK,GACzC/qD,SAASM,cAAcyqD,EAClC,EAEAzrD,EAAQ2rD,YAAc,SAASvhD,EAAI2C,GAC/B,IAAIy7B,GAAWp+B,EAAGs1B,WAAa,IAAIjnB,MAAM,QACzC,OAAkC,IAA3B+vB,EAAQp8B,QAAQW,EAC3B,EACA/M,EAAQ4rD,YAAc,SAASxhD,EAAI2C,GAC1B/M,EAAQ2rD,YAAYvhD,EAAI2C,KACzB3C,EAAGs1B,WAAa,IAAM3yB,EAE9B,EACA/M,EAAQ6rD,eAAiB,SAASzhD,EAAI2C,GAClC,IAAIy7B,EAAUp+B,EAAGs1B,UAAUjnB,MAAM,QACjC,MAAO,EAAM,CACT,IAAI1B,EAAQyxB,EAAQp8B,QAAQW,GAC5B,IAAc,GAAVgK,EACA,MAEJyxB,EAAQvpB,OAAOlI,EAAO,EAC1B,CACA3M,EAAGs1B,UAAY8I,EAAQ/qB,KAAK,IAChC,EAEAzd,EAAQ8rD,eAAiB,SAAS1hD,EAAI2C,GAClC,IAAIy7B,EAAUp+B,EAAGs1B,UAAUjnB,MAAM,QAASpZ,GAAM,EAChD,MAAO,EAAM,CACT,IAAI0X,EAAQyxB,EAAQp8B,QAAQW,GAC5B,IAAc,GAAVgK,EACA,MAEJ1X,GAAM,EACNmpC,EAAQvpB,OAAOlI,EAAO,EAC1B,CAKA,OAJI1X,GACAmpC,EAAQvhC,KAAK8F,GAEjB3C,EAAGs1B,UAAY8I,EAAQ/qB,KAAK,KACrBpe,CACX,EACAW,EAAQ+rD,YAAc,SAAS1lD,EAAMq5B,EAAWssB,GACxCA,EACAhsD,EAAQ4rD,YAAYvlD,EAAMq5B,GAE1B1/B,EAAQ6rD,eAAexlD,EAAMq5B,EAErC,EAEA1/B,EAAQisD,aAAe,SAAS7gD,EAAIkgD,GAChC,IAAeY,EAAXn1C,EAAQ,EAGZ,GAFAu0C,EAAMA,GAAO5qD,SAET4qD,EAAIa,mBAAqBD,EAASZ,EAAIc,cACtC,MAAOr1C,EAAQm1C,EAAOjqD,UACdiqD,EAAOn1C,KAASs1C,cAAcjhD,KAAOA,EAAI,OAAO,OACrD,GAAK8gD,EAASZ,EAAIE,qBAAqB,SAC1C,MAAOz0C,EAAQm1C,EAAOjqD,UACdiqD,EAAOn1C,KAAS3L,KAAOA,EAAI,OAAO,EAG9C,OAAO,CACX,EAEApL,EAAQssD,gBAAkB,SAAyBC,EAASnhD,EAAIkgD,GAE5D,GADAA,EAAMA,GAAO5qD,SACT0K,GAAMpL,EAAQisD,aAAa7gD,EAAIkgD,GAC/B,OAAO,KAEX,IAAIrqD,EAEAmK,IACAmhD,GAAW,2BAA6BnhD,EAAK,OAE7CkgD,EAAIa,kBACJlrD,EAAQqqD,EAAIa,mBACZlrD,EAAMsrD,QAAUA,EACZnhD,IACAnK,EAAMorD,cAAcjhD,GAAKA,KAE7BnK,EAAQjB,EAAQgB,cAAc,SAC9BC,EAAMY,YAAYypD,EAAI3hB,eAAe4iB,IACjCnhD,IACAnK,EAAMmK,GAAKA,GAEfpL,EAAQqrD,gBAAgBC,GAAKzpD,YAAYZ,GAEjD,EAEAjB,EAAQwsD,mBAAqB,SAAS17C,EAAKw6C,GACvC,GAAIA,EAAIa,iBACJb,EAAIa,iBAAiBr7C,OAClB,CACH,IAAI27C,EAAOzsD,EAAQgB,cAAc,QACjCyrD,EAAKtuC,IAAM,aACXsuC,EAAKryC,KAAOtJ,EAEZ9Q,EAAQqrD,gBAAgBC,GAAKzpD,YAAY4qD,EAC7C,CACJ,EAEAzsD,EAAQ0sD,cAAgB,SAAS3iB,GAC7B,OACIvhB,SAASxoB,EAAQ2sD,cAAc5iB,EAAS,eAAgB,IACxDvhB,SAASxoB,EAAQ2sD,cAAc5iB,EAAS,gBAAiB,IACzDA,EAAQ+Y,WAEhB,EAEA9iD,EAAQ4sD,eAAiB,SAAS7iB,GAC9B,OACIvhB,SAASxoB,EAAQ2sD,cAAc5iB,EAAS,cAAe,IACvDvhB,SAASxoB,EAAQ2sD,cAAc5iB,EAAS,iBAAkB,IAC1DA,EAAQzL,YAEhB,EAEAt+B,EAAQ6sD,eAAiB,SAASnsD,GAC9B,IAAIosD,EAAQ9sD,EAAQgB,cAAc,aAClC8rD,EAAM7rD,MAAMujC,MAAQ,OACpBsoB,EAAM7rD,MAAM8rD,SAAW,MACvBD,EAAM7rD,MAAMo9B,OAAS,QACrByuB,EAAM7rD,MAAM0zC,QAAU,QAEtB,IAAIqY,EAAQhtD,EAAQgB,cAAc,aAC9BC,EAAQ+rD,EAAM/rD,MAElBA,EAAMK,SAAW,WACjBL,EAAMmnC,KAAO,WACbnnC,EAAMyyC,SAAW,SACjBzyC,EAAMujC,MAAQ,QACdvjC,EAAM8rD,SAAW,MACjB9rD,EAAMo9B,OAAS,QACfp9B,EAAM0zC,QAAU,QAEhBqY,EAAMnrD,YAAYirD,GAElB,IAAI5qD,EAAOxB,EAASI,gBACpBoB,EAAKL,YAAYmrD,GAEjB,IAAIC,EAAcH,EAAMI,YAExBjsD,EAAMyyC,SAAW,SACjB,IAAIyZ,EAAgBL,EAAMI,YAQ1B,OANID,GAAeE,IACfA,EAAgBH,EAAMlK,aAG1B5gD,EAAKgI,YAAY8iD,GAEVC,EAAYE,CACvB,EAEuB,oBAAZzsD,eAKgBgK,IAAvBnJ,OAAOC,aACPxB,EAAQotD,iBAAmB,WACvB,OAAO7rD,OAAOC,WAClB,EAEAxB,EAAQqtD,kBAAoB,WACxB,OAAO9rD,OAAO8mC,WAClB,IAGAroC,EAAQotD,iBAAmB,WACvB,OAAO1sD,SAASwB,KAAKT,SACzB,EAEAzB,EAAQqtD,kBAAoB,WACxB,OAAO3sD,SAASwB,KAAKomC,UACzB,GAGA/mC,OAAO+rD,iBACPttD,EAAQ2sD,cAAgB,SAAS5iB,EAAS9oC,GACtC,OAAIA,GACQM,OAAO+rD,iBAAiBvjB,EAAS,KAAO,CAAC,GAAG9oC,IAAU,GAC3DM,OAAO+rD,iBAAiBvjB,EAAS,KAAO,CAAC,CACpD,EAEA/pC,EAAQ2sD,cAAgB,SAAS5iB,EAAS9oC,GACtC,OAAIA,EACO8oC,EAAQwjB,aAAatsD,GACzB8oC,EAAQwjB,YACnB,EACJvtD,EAAQwtD,aAAe,SAASpjD,EAAIqjD,GAChC,IAAI1jB,EAAU3/B,EAAGsjD,WAAU,GAG3B,OAFA3jB,EAAQuI,UAAYmb,EACpBrjD,EAAGrE,WAAW4nD,aAAa5jB,EAAS3/B,GAC7B2/B,CACX,EAEI,gBAAiBrpC,SAASI,iBAC1Bd,EAAQ4tD,aAAe,SAASxjD,EAAIggC,GAChChgC,EAAGyjD,YAAczjB,CACrB,EAEApqC,EAAQ8pC,aAAe,SAAS1/B,GAC5B,OAAOA,EAAGyjD,WACd,IAGA7tD,EAAQ4tD,aAAe,SAASxjD,EAAIggC,GAChChgC,EAAGggC,UAAYA,CACnB,EAEApqC,EAAQ8pC,aAAe,SAAS1/B,GAC5B,OAAOA,EAAGggC,SACd,GAGJpqC,EAAQ8tD,gBAAkB,SAASptD,GAC/B,OAAOA,EAASqtD,aAAertD,EAASstD,YAC5C,GA/DIhuD,EAAQssD,gBAAkB,WAAY,CAiE1C,IAEAhK,IAAImC,OAAO,cAAc,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACrF,aAEAF,EAAQiuD,SAAW,SAASC,EAAMC,GAC9BD,EAAKE,OAASD,EACdD,EAAK1rD,UAAY5G,OAAOyI,OAAO8pD,EAAU3rD,UAAW,CAChDD,YAAa,CACT9G,MAAOyyD,EACPjrD,YAAY,EACZE,UAAU,EACVD,cAAc,IAG1B,EAEAlD,EAAQqN,MAAQ,SAASsO,EAAKtO,GAC1B,IAAK,IAAIhK,KAAOgK,EACZsO,EAAItY,GAAOgK,EAAMhK,GAErB,OAAOsY,CACX,EAEA3b,EAAQquD,UAAY,SAASlyC,EAAO9O,GAChCrN,EAAQqN,MAAM8O,EAAO9O,EACzB,CAEA,IAEAi1C,IAAImC,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,yBAAyB,gBAAgB,SAASS,EAAUllD,EAASE,GAC7H,aAEAglD,EAAS,oBAET,IAAIoJ,EAAMpJ,EAAS,SACfqJ,EAAO,WACP,IAkEIxhD,EAAMzM,EAlEN6vB,EAAM,CACNq+B,cAAe,CACX,GAAI,QAAS,GAAI,OAAQ,GAAI,MAAO,IAAK,QAG7CC,SAAU,CACN,KAAQ,EAAG,IAAO,EAAG,OAAW,EAAG,MAAS,EAC5C,MAAS,EAAG,KAAQ,EAAG,QAAW,EAAG,IAAO,GAGhDC,cAAgB,CACZ,EAAK,YACL,EAAK,MACL,GAAK,SACL,GAAK,QACL,GAAK,MACL,GAAK,QACL,GAAK,SACL,GAAK,WACL,GAAK,MACL,GAAK,OACL,GAAK,OACL,GAAK,KACL,GAAK,QACL,GAAK,OACL,GAAK,QACL,GAAK,SACL,GAAK,SACL,GAAK,UACL,GAAK,UACL,GAAK,UACL,GAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,MAAO,cACP,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,cAGTC,eAAgB,CACb,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAK,GAAK,IAChE,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAK,GAAK,IAChE,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAK,GAAK,IAChE,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAK,GAAK,IAChE,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAK,GAAK,IAChE,GAAI,IAAM,GAAI,IAAM,GAAI,IAAM,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAI7D,IAAKruD,KAAK6vB,EAAIu+B,cACV3hD,EAAOojB,EAAIu+B,cAAcpuD,GAAGgc,cAC5B6T,EAAIpjB,GAAQyb,SAASloB,EAAG,IAE5B,IAAKA,KAAK6vB,EAAIw+B,eACV5hD,EAAOojB,EAAIw+B,eAAeruD,GAAGgc,cAC7B6T,EAAIpjB,GAAQyb,SAASloB,EAAG,IAsB5B,OApBAguD,EAAIjhD,MAAM8iB,EAAKA,EAAIq+B,eACnBF,EAAIjhD,MAAM8iB,EAAKA,EAAIw+B,gBACnBL,EAAIjhD,MAAM8iB,EAAKA,EAAIu+B,eACnBv+B,EAAIy+B,MAAQz+B,EAAI,UAChBA,EAAInS,OAASmS,EAAIrS,IACjBqS,EAAI7e,IAAM6e,EAAI,UACdA,EAAI,KAAO,IAEX,WAEI,IADA,IAAI0+B,EAAO,CAAC,MAAO,OAAQ,MAAO,SACzBvuD,EAAI8f,KAAK0uC,IAAI,EAAGD,EAAK5sD,QAAS3B,KACnC6vB,EAAIs+B,SAASnuD,GAAKuuD,EAAKjxB,QAAO,SAASra,GACnC,OAAOjjB,EAAI6vB,EAAIs+B,SAASlrC,EAC5B,IAAG9F,KAAK,KAAO,GAEtB,CAPD,GASA0S,EAAIs+B,SAAS,GAAK,GAClBt+B,EAAIs+B,UAAU,GAAK,SAEZt+B,CACV,CAjGU,GAkGXm+B,EAAIjhD,MAAMrN,EAASuuD,GAEnBvuD,EAAQ+uD,gBAAkB,SAASjrB,GAC/B,IAAIkrB,EAAYT,EAAKzqB,GAGrB,MAFwB,iBAAbkrB,IACPA,EAAYtzD,OAAO4kB,aAAawjB,IAC7BkrB,EAAU1yC,aACrB,CAEA,IAEAgmC,IAAImC,OAAO,oBAAoB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GAC3F,aAeA,GAdAF,EAAQivD,GAAK,CACTC,MAAO,QACPC,IAAK,MACLC,QAAS,WAEbpvD,EAAQqvD,MAAQ,WACZ,OAAIrvD,EAAQsvD,MACDtvD,EAAQivD,GAAGE,IACXnvD,EAAQuvD,QACRvvD,EAAQivD,GAAGC,MAEXlvD,EAAQivD,GAAGG,OAE1B,EACwB,iBAAb3kB,UAAX,CAGA,IAAI+kB,GAAM/kB,UAAUglB,SAASjzC,MAAM,mBAAqB,CAAC,UAAU,GAAGF,cAClEquB,EAAKF,UAAUG,UACnB5qC,EAAQ0vD,MAAe,OAANF,EACjBxvD,EAAQsvD,MAAe,OAANE,EACjBxvD,EAAQuvD,QAAiB,SAANC,EACnBxvD,EAAQ2vD,KACkB,+BAArBllB,UAAUC,SAA4CD,UAAUC,QAAQt+B,QAAQ,cAAgB,EAC/F0+B,YAAYH,EAAGnuB,MAAM,4DAA4D,IAAI,IACrFsuB,YAAYH,EAAGnuB,MAAM,sDAAsD,IAAI,IAErFxc,EAAQ4vD,QAAU5vD,EAAQ2vD,MAAQ3vD,EAAQ2vD,KAAO,EACjD3vD,EAAQ6vD,QAAU7vD,EAAQ8vD,WAAavuD,OAAOwuD,aAAexuD,OAAOyuD,cAA6C,UAA7BzuD,OAAOkpC,UAAUwlB,QACrGjwD,EAAQkwD,WAAalwD,EAAQ6vD,SAAWrnC,UAAUmiB,EAAGnuB,MAAM,cAAc,IAAI,GAAI,IAAM,EACvFxc,EAAQmwD,QAAU5uD,OAAO6uD,OAAyD,kBAAhDx0D,OAAO4G,UAAUsB,SAAS3E,KAAKoC,OAAO6uD,OACxEpwD,EAAQqwD,SAAWvlB,WAAWH,EAAGlyB,MAAM,WAAW,UAAO/N,EAEzD1K,EAAQswD,SAAWxlB,WAAWH,EAAGlyB,MAAM,YAAY,UAAO/N,EAE1D1K,EAAQuwD,MAAQ5lB,EAAGv+B,QAAQ,aAAe,EAE1CpM,EAAQwwD,OAAS7lB,EAAGv+B,QAAQ,SAAW,EAEvCpM,EAAQywD,WAAa9lB,EAAGv+B,QAAQ,aAAe,EAE/CpM,EAAQ0wD,WAAa/lB,EAAGv+B,QAAQ,WAAa,CA1BnC,CA4BV,IAEAk2C,IAAImC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,eAAe,sBAAsB,SAASS,EAAUllD,EAASE,GAC1H,aAEA,IAAIgM,EAAOg5C,EAAS,UAChByL,EAAYzL,EAAS,eAErB0L,EAAc,KACdC,EAAK,EAET7wD,EAAQ8wD,YAAc,SAAS7oB,EAAMjsC,EAAM2O,GACvC,GAAIs9B,EAAKjiC,iBACL,OAAOiiC,EAAKjiC,iBAAiBhK,EAAM2O,GAAU,GAEjD,GAAIs9B,EAAKiD,YAAa,CAClB,IAAI6lB,EAAU,WACVpmD,EAASxL,KAAK8oC,EAAM1mC,OAAOq+B,MAC/B,EACAj1B,EAASqmD,SAAWD,EACpB9oB,EAAKiD,YAAY,KAAOlvC,EAAM+0D,EAClC,CACJ,EAEA/wD,EAAQixD,eAAiB,SAAShpB,EAAMjsC,EAAM2O,GAC1C,GAAIs9B,EAAKhiC,oBACL,OAAOgiC,EAAKhiC,oBAAoBjK,EAAM2O,GAAU,GAEhDs9B,EAAKkD,aACLlD,EAAKkD,YAAY,KAAOnvC,EAAM2O,EAASqmD,UAAYrmD,EAE3D,EACA3K,EAAQkxD,UAAY,SAASxzD,GAGzB,OAFAsC,EAAQokC,gBAAgB1mC,GACxBsC,EAAQ+/B,eAAeriC,IAChB,CACX,EAEAsC,EAAQokC,gBAAkB,SAAS1mC,GAC3BA,EAAE0mC,gBACF1mC,EAAE0mC,kBAEF1mC,EAAEyzD,cAAe,CACzB,EAEAnxD,EAAQ+/B,eAAiB,SAASriC,GAC1BA,EAAEqiC,eACFriC,EAAEqiC,iBAEFriC,EAAEgoD,aAAc,CACxB,EACA1lD,EAAQoxD,UAAY,SAAS1zD,GACzB,MAAc,YAAVA,EAAE1B,KACK,EACG,eAAV0B,EAAE1B,MAA0B20D,EAAUrB,OAAU5xD,EAAEqmC,UAAYrmC,EAAEwgD,SAAWxgD,EAAEsmC,SACtE,EACPtmC,EAAEqiC,eACKriC,EAAEo1C,OAGF,CAAC,EAAE,EAAG,EAAE,EAAG,EAAE,GAAGp1C,EAAEo1C,OAEjC,EAEA9yC,EAAQqxD,QAAU,SAASjnD,EAAIknD,EAAcC,GACzC,SAASC,EAAU9zD,GACf4zD,GAAgBA,EAAa5zD,GAC7B6zD,GAAyBA,EAAsB7zD,GAE/CsC,EAAQixD,eAAevwD,SAAU,YAAa4wD,GAAc,GAC5DtxD,EAAQixD,eAAevwD,SAAU,UAAW8wD,GAAW,GACvDxxD,EAAQixD,eAAevwD,SAAU,YAAa8wD,GAAW,EAC7D,CAMA,OAJAxxD,EAAQ8wD,YAAYpwD,SAAU,YAAa4wD,GAAc,GACzDtxD,EAAQ8wD,YAAYpwD,SAAU,UAAW8wD,GAAW,GACpDxxD,EAAQ8wD,YAAYpwD,SAAU,YAAa8wD,GAAW,GAE/CA,CACX,EAEAxxD,EAAQyxD,qBAAuB,SAAUrnD,EAAIO,GAErC,IAAI+mD,EAAQC,EADZ,gBAAiBvnD,IAEjBpK,EAAQ8wD,YAAY1mD,EAAI,cAAc,SAAU1M,GAC5C,IAAIk0D,EAAWl0D,EAAEm0D,eAAe,GAChCH,EAASE,EAASE,QAClBH,EAASC,EAASG,OACtB,IACA/xD,EAAQ8wD,YAAY1mD,EAAI,aAAa,SAAU1M,GAC3C,IAAIs0D,EAAS,EACbJ,EAAWl0D,EAAEm0D,eAAe,GAE5Bn0D,EAAEu0D,SAAWL,EAASE,QAAUJ,GAAUM,EAC1Ct0D,EAAEw0D,SAAWN,EAASG,QAAUJ,GAAUK,EAE1CN,EAASE,EAASE,QAClBH,EAASC,EAASG,QAElBpnD,EAASjN,EACb,IAER,EAEAsC,EAAQmyD,sBAAwB,SAAS/nD,EAAIO,GACrC,iBAAkBP,EAClBpK,EAAQ8wD,YAAY1mD,EAAI,cAAc,SAAS1M,GAC3C,IAAIs0D,EAAS,OACStnD,IAAlBhN,EAAE00D,aACF10D,EAAEu0D,QAAUv0D,EAAE00D,YAAcJ,EAC5Bt0D,EAAEw0D,QAAUx0D,EAAE20D,YAAcL,IAE5Bt0D,EAAEu0D,OAAS,EACXv0D,EAAEw0D,QAAUx0D,EAAE40D,WAAaN,GAE/BrnD,EAASjN,EACb,IACO,YAAa0M,EACpBpK,EAAQ8wD,YAAY1mD,EAAI,SAAU,SAAS1M,GACvC,IAAIs0D,EAAS,IACb,OAAQt0D,EAAE60D,WACN,KAAK70D,EAAE80D,gBACH90D,EAAEu0D,OAASv0D,EAAE+0D,OAAST,GAAU,EAChCt0D,EAAEw0D,OAASx0D,EAAEg1D,OAASV,GAAU,EAChC,MACJ,KAAKt0D,EAAEi1D,eACP,KAAKj1D,EAAEk1D,eACHl1D,EAAEu0D,OAA2B,GAAjBv0D,EAAE+0D,QAAU,GACxB/0D,EAAEw0D,OAA2B,GAAjBx0D,EAAEg1D,QAAU,GACxB,MAGR/nD,EAASjN,EACb,IAEAsC,EAAQ8wD,YAAY1mD,EAAI,kBAAkB,SAAS1M,GAC3CA,EAAEm1D,MAAQn1D,EAAEm1D,MAAQn1D,EAAEo1D,iBACtBp1D,EAAEu0D,OAA2B,GAAjBv0D,EAAEq1D,QAAU,GACxBr1D,EAAEw0D,OAAS,IAEXx0D,EAAEu0D,OAAS,EACXv0D,EAAEw0D,OAA2B,GAAjBx0D,EAAEq1D,QAAU,IAE5BpoD,EAASjN,EACb,GAER,EAEAsC,EAAQgzD,0BAA4B,SAASC,EAAUC,EAAU5B,EAAc6B,GAC3E,IACIC,EAAQC,EAAQC,EADhBC,EAAS,EAETC,EAAa,CACb,EAAG,WACH,EAAG,cACH,EAAG,aAGP,SAASC,EAAY/1D,GAUjB,GAT6B,IAAzBsC,EAAQoxD,UAAU1zD,GAClB61D,EAAS,EACF71D,EAAEq1D,OAAS,GAClBQ,IACIA,EAAS,IACTA,EAAS,IAEbA,EAAS,EAET5C,EAAUhB,KAAM,CAChB,IAAI+D,EAAatzC,KAAKqf,IAAI/hC,EAAEo0D,QAAUsB,GAAU,GAAKhzC,KAAKqf,IAAI/hC,EAAEq0D,QAAUsB,GAAU,EAC/EC,IAASI,IACVH,EAAS,GACTD,GACAx0B,aAAaw0B,GACjBA,EAAQ9oC,YAAW,WAAY8oC,EAAQ,IAAI,GAAGJ,EAASK,EAAS,IAAM,KAExD,GAAVA,IACAH,EAAS11D,EAAEo0D,QACXuB,EAAS31D,EAAEq0D,QAEnB,CAMA,GAJAr0D,EAAEi2D,QAAUJ,EAEZjC,EAAa6B,GAAc,YAAaz1D,GAEpC61D,EAAS,EACTA,EAAS,OACR,GAAIA,EAAS,EACd,OAAOjC,EAAa6B,GAAcK,EAAWD,GAAS71D,EAC9D,CACA,SAASk2D,EAAWl2D,GAChB61D,EAAS,EACLD,GACAx0B,aAAaw0B,GACjBA,EAAQ9oC,YAAW,WAAY8oC,EAAQ,IAAI,GAAGJ,EAASK,EAAS,IAAM,KACtEjC,EAAa6B,GAAc,YAAaz1D,GACxC4zD,EAAa6B,GAAcK,EAAWD,GAAS71D,EACnD,CACK7B,MAAMsS,QAAQ8kD,KACfA,EAAW,CAACA,IAChBA,EAASxuD,SAAQ,SAAS2F,GACtBpK,EAAQ8wD,YAAY1mD,EAAI,YAAaqpD,GACjC9C,EAAUf,SACV5vD,EAAQ8wD,YAAY1mD,EAAI,WAAYwpD,EAC5C,GACJ,EAEA,IAAIC,EAAkBlD,EAAUrB,OAASqB,EAAUR,WAAa,kBAAmB5uD,QAC7E,SAAS7D,GACP,OAAO,GAAKA,EAAEo2D,QAAU,EAAI,IAAMp2D,EAAEwgD,OAAS,EAAI,IAAMxgD,EAAEsmC,SAAW,EAAI,IAAMtmC,EAAEqmC,QAAU,EAAI,EAClG,EACE,SAASrmC,GACP,OAAO,GAAKA,EAAEqmC,QAAU,EAAI,IAAMrmC,EAAEwgD,OAAS,EAAI,IAAMxgD,EAAEsmC,SAAW,EAAI,IAAMtmC,EAAEo2D,QAAU,EAAI,EAClG,EAMJ,SAASC,EAAqBppD,EAAUjN,EAAGomC,GACvC,IAAIkwB,EAASH,EAAgBn2D,GAE7B,IAAKizD,EAAUrB,OAASsB,EAAa,CAGjC,GAFIA,EAAYqD,QACZD,GAAU,GACVpD,EAAYsD,MAAO,CACnB,GAAoB,IAAf,EAAIF,GAGL,OAFApD,EAAYsD,MAAQ,CAG5B,CACA,GAAgB,KAAZpwB,GAA8B,KAAZA,EAAgB,CAClC,IAAIqwB,EAAW,aAAcz2D,EAAIA,EAAEy2D,SAAWz2D,EAAE02D,YAChD,GAAgB,KAAZtwB,GAA+B,IAAbqwB,EACU,GAAxBvD,EAAY9sB,KACZ+sB,EAAKnzD,EAAE22D,gBACR,GAAgB,KAAZvwB,GAA6B,IAAXkwB,GAA6B,IAAbG,EAAgB,CACzD,IAAIG,EAAK52D,EAAE22D,UAAYxD,EACnByD,EAAK,KACL1D,EAAYsD,OAAQ,EAC5B,CACJ,CACJ,CASA,GAPIpwB,KAAW53B,EAAKsiD,gBAChB1qB,GAAW,GAEF,EAATkwB,GAAelwB,GAAW,IAAMA,GAAW,KAC3CA,GAAW,IAGVkwB,GAAsB,KAAZlwB,EAAgB,CACvBqwB,EAAW,aAAcz2D,EAAIA,EAAEy2D,SAAWz2D,EAAE02D,YAChD,GAAiB,IAAbD,IACAxpD,EAASjN,EAAGs2D,GAASlwB,GACjBpmC,EAAE62D,kBACF,MAEZ,CAEA,GAAI5D,EAAUD,YAAuB,EAATsD,EAAY,CAEpC,GADArpD,EAASjN,EAAGs2D,EAAQlwB,GAChBpmC,EAAE62D,iBACF,OAEAP,IAAU,CAClB,CACA,SAAKA,GAAYlwB,KAAW53B,EAAKwiD,eAAoB5qB,KAAW53B,EAAKyiD,iBAI9DhkD,EAASjN,EAAGs2D,EAAQlwB,EAC/B,CA2DA,SAAS0wB,IACL5D,EAAch1D,OAAOyI,OAAO,MAC5BusD,EAAY13C,MAAQ,EACpB03C,EAAY6D,MAAQ,CACxB,CAEA,GA1HAz0D,EAAQ00D,kBAAoB,SAASh3D,GACjC,OAAOwO,EAAKuiD,SAASoF,EAAgBn2D,GACzC,EA0DAsC,EAAQ20D,sBAAwB,SAASvqD,EAAIO,GACzC,IAAImmD,EAAc9wD,EAAQ8wD,YAC1B,GAAIH,EAAUT,YAAeS,EAAUR,WAAa,kBAAmB5uD,QAAU,CAC7E,IAAIqzD,EAAqB,KACzB9D,EAAY1mD,EAAI,WAAW,SAAS1M,GAChCk3D,EAAqBl3D,EAAEomC,OAC3B,IACAgtB,EAAY1mD,EAAI,YAAY,SAAS1M,GACjC,OAAOq2D,EAAqBppD,EAAUjN,EAAGk3D,EAC7C,GACJ,KAAO,CACH,IAAIC,EAAuB,KAE3B/D,EAAY1mD,EAAI,WAAW,SAAS1M,GAChC,IAAIomC,EAAUpmC,EAAEomC,QAChB8sB,EAAY9sB,IAAY8sB,EAAY9sB,IAAY,GAAK,EACtC,IAAXA,GAA4B,IAAXA,EACjB8sB,EAAYqD,OAAQ,EACbrD,EAAYqD,OACfv2D,EAAE22D,UAAYzD,EAAY6D,MAAQ,KAA4B,GAArB7D,EAAY13C,OACrDs7C,IAEoB,GAAxB5D,EAAY9sB,IACZ8sB,EAAY13C,QAChB03C,EAAY6D,MAAQ/2D,EAAE22D,UACtB,IAAI5hD,EAASshD,EAAqBppD,EAAUjN,EAAGomC,GAE/C,OADA+wB,EAAuBn3D,EAAE62D,iBAClB9hD,CACX,IAEAq+C,EAAY1mD,EAAI,YAAY,SAAS1M,GAC7Bm3D,IAAyBn3D,EAAEqmC,SAAWrmC,EAAEwgD,QAAUxgD,EAAEsmC,UAAYtmC,EAAEo2D,WAClE9zD,EAAQkxD,UAAUxzD,GAClBm3D,EAAuB,KAE/B,IAEA/D,EAAY1mD,EAAI,SAAS,SAAS1M,GAC9B,IAAIomC,EAAUpmC,EAAEomC,QACX8sB,EAAY9sB,GAGb8sB,EAAY13C,MAAQkH,KAAKkf,IAAIsxB,EAAY13C,MAAQ,EAAG,GAFpDs7C,IAIW,IAAX1wB,GAA4B,IAAXA,IACjB8sB,EAAYqD,OAAQ,GAExBrD,EAAY9sB,GAAW,IAC3B,IAEK8sB,IACD4D,IACA1D,EAAYvvD,OAAQ,QAASizD,GAErC,CACJ,EAOqB,iBAAVjzD,QAAsBA,OAAOuzD,cAAgBnE,EAAUf,QAAS,CACvE,IAAImF,EAAgB,EACpB/0D,EAAQg1D,SAAW,SAASrqD,EAAUsqD,GAClCA,EAAMA,GAAO1zD,OACb,IAAI2zD,EAAc,wBAA0BH,EAC5C/0D,EAAQ8wD,YAAYmE,EAAK,WAAW,SAASpwD,EAASnH,GAC9CA,EAAEd,MAAQs4D,IACVl1D,EAAQokC,gBAAgB1mC,GACxBsC,EAAQixD,eAAegE,EAAK,UAAWpwD,GACvC8F,IAER,IACAsqD,EAAIH,YAAYI,EAAa,IACjC,CACJ,CAGAl1D,EAAQm1D,UAA6B,iBAAV5zD,SAAuBA,OAAO6zD,uBAClD7zD,OAAO8zD,0BACP9zD,OAAO+zD,6BACP/zD,OAAOg0D,yBACPh0D,OAAOi0D,wBAEVx1D,EAAQm1D,UACRn1D,EAAQm1D,UAAYn1D,EAAQm1D,UAAUjvD,KAAK3E,QAE3CvB,EAAQm1D,UAAY,SAASxqD,GACzB6f,WAAW7f,EAAU,GACzB,CACJ,IAEA23C,IAAImC,OAAO,eAAe,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACtF,aAEAF,EAAQ8e,KAAO,SAASle,GACpB,OAAOA,EAAEA,EAAEqB,OAAS,EACxB,EAEAjC,EAAQy1D,cAAgB,SAASjvD,GAC7B,OAAOA,EAAOiS,MAAM,IAAIi9C,UAAUj4C,KAAK,GAC3C,EAEAzd,EAAQ21D,aAAe,SAAUnvD,EAAQ0S,GACrC,IAAIzG,EAAS,GACb,MAAOyG,EAAQ,EACC,EAARA,IACAzG,GAAUjM,IAEV0S,IAAU,KACV1S,GAAUA,GAElB,OAAOiM,CACX,EAEA,IAAIy4C,EAAkB,SAClBC,EAAgB,SAEpBnrD,EAAQ41D,eAAiB,SAAUpvD,GAC/B,OAAOA,EAAOgT,QAAQ0xC,EAAiB,GAC3C,EAEAlrD,EAAQ61D,gBAAkB,SAAUrvD,GAChC,OAAOA,EAAOgT,QAAQ2xC,EAAe,GACzC,EAEAnrD,EAAQ81D,WAAa,SAASn6C,GAC1B,IAAItI,EAAO,CAAC,EACZ,IAAK,IAAIhQ,KAAOsY,EACZtI,EAAKhQ,GAAOsY,EAAItY,GAEpB,OAAOgQ,CACX,EAEArT,EAAQ+1D,UAAY,SAASv1C,GAEzB,IADA,IAAInN,EAAO,GACF/S,EAAE,EAAG8B,EAAEoe,EAAMve,OAAQ3B,EAAE8B,EAAG9B,IAC3BkgB,EAAMlgB,IAAyB,iBAAZkgB,EAAMlgB,GACzB+S,EAAK/S,GAAK/F,KAAKu7D,WAAYt1C,EAAMlgB,IAEjC+S,EAAK/S,GAAKkgB,EAAMlgB,GAExB,OAAO+S,CACX,EAEArT,EAAQg2D,SAAW,SAASA,EAASr6C,GACjC,GAAmB,kBAARA,IAAqBA,EAC5B,OAAOA,EACX,IAAItI,EACJ,GAAIxX,MAAMsS,QAAQwN,GAAM,CACpBtI,EAAO,GACP,IAAK,IAAIhQ,EAAM,EAAGA,EAAMsY,EAAI1Z,OAAQoB,IAChCgQ,EAAKhQ,GAAO2yD,EAASr6C,EAAItY,IAE7B,OAAOgQ,CACX,CACA,IAAI4iD,EAAOt6C,EAAIpZ,YACf,GAAI0zD,IAASzkD,OACT,OAAOmK,EAGX,IAAK,IAAItY,KADTgQ,EAAO4iD,IACSt6C,EACZtI,EAAKhQ,GAAO2yD,EAASr6C,EAAItY,IAE7B,OAAOgQ,CACX,EAEArT,EAAQk2D,WAAa,SAAS3+C,GAE1B,IADA,IAAInR,EAAM,CAAC,EACF9F,EAAE,EAAGA,EAAEiX,EAAItV,OAAQ3B,IACxB8F,EAAImR,EAAIjX,IAAM,EAElB,OAAO8F,CAEX,EAEApG,EAAQm2D,UAAY,SAAS36D,GACzB,IAAI4K,EAAMxK,OAAOyI,OAAO,MACxB,IAAK,IAAI/D,KAAK9E,EACV4K,EAAI9F,GAAK9E,EAAM8E,GAEnB,OAAO8F,CACX,EACApG,EAAQo2D,YAAc,SAAS51C,EAAO/kB,GACpC,IAAK,IAAI6E,EAAI,EAAGA,GAAKkgB,EAAMve,OAAQ3B,IAC7B7E,IAAU+kB,EAAMlgB,IAClBkgB,EAAMvB,OAAO3e,EAAG,EAGtB,EAEAN,EAAQq2D,aAAe,SAASjnD,GAC5B,OAAOA,EAAIoK,QAAQ,0BAA2B,OAClD,EAEAxZ,EAAQs2D,WAAa,SAASlnD,GAC1B,OAAOA,EAAIoK,QAAQ,KAAM,SAASA,QAAQ,KAAM,SAASA,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAClG,EAEAxZ,EAAQu2D,gBAAkB,SAAS/vD,EAAQgwD,GACvC,IAAI/wD,EAAU,GASd,OAPAe,EAAOgT,QAAQg9C,GAAQ,SAASpnD,GAC5B3J,EAAQwB,KAAK,CACTwvD,OAAQz0D,UAAUA,UAAUC,OAAO,GACnCA,OAAQmN,EAAInN,QAEpB,IAEOwD,CACX,EACAzF,EAAQ02D,aAAe,SAASC,GAC5B,IAAIrD,EAAQ,KACR3oD,EAAW,WACX2oD,EAAQ,KACRqD,GACJ,EAEIC,EAAW,SAAS3qB,GAGpB,OAFA2qB,EAASC,SACTvD,EAAQ9oC,WAAW7f,EAAUshC,GAAW,GACjC2qB,CACX,EAoBA,OAlBAA,EAASE,SAAWF,EAEpBA,EAASz3D,KAAO,WAGZ,OAFA5E,KAAKs8D,SACLF,IACOC,CACX,EAEAA,EAASC,OAAS,WAGd,OAFA/3B,aAAaw0B,GACbA,EAAQ,KACDsD,CACX,EAEAA,EAASG,UAAY,WACjB,OAAOzD,CACX,EAEOsD,CACX,EAGA52D,EAAQg3D,YAAc,SAASL,EAAKM,GAChC,IAAI3D,EAAQ,KACR3oD,EAAW,WACX2oD,EAAQ,KACRqD,GACJ,EAEIl8D,EAAQ,SAASwxC,GACJ,MAATqnB,IACAA,EAAQ9oC,WAAW7f,EAAUshC,GAAWgrB,GAChD,EAsBA,OApBAx8D,EAAMq2C,MAAQ,SAAS7E,GACnBqnB,GAASx0B,aAAaw0B,GACtBA,EAAQ9oC,WAAW7f,EAAUshC,GAAWgrB,EAC5C,EACAx8D,EAAMq8D,SAAWr8D,EAEjBA,EAAM0E,KAAO,WACT5E,KAAKs8D,SACLF,GACJ,EAEAl8D,EAAMo8D,OAAS,WACXvD,GAASx0B,aAAaw0B,GACtBA,EAAQ,IACZ,EAEA74D,EAAMs8D,UAAY,WACd,OAAOzD,CACX,EAEO74D,CACX,CACA,IAEA6nD,IAAImC,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,gBAAgB,oBAAoB,cAAc,iBAAiB,SAASS,EAAUllD,EAASE,GACjK,aAEA,IAAI0/B,EAAQslB,EAAS,gBACjByL,EAAYzL,EAAS,oBACrB5pB,EAAM4pB,EAAS,cACf9pD,EAAO8pD,EAAS,eAChBgS,EAAiBvG,EAAUL,SAAW,GACtC6G,EAAoBxG,EAAUhB,KAE9ByH,EAAY,SAASrxD,EAAYsT,GACjC,IAAIzW,EAAO04B,EAAIt6B,cAAc,YAC7B4B,EAAK88B,UAAY,iBAEbixB,EAAUF,YACV7tD,EAAKjB,aAAa,2BAA2B,GAEjDiB,EAAKjB,aAAa,OAAQ,OAC1BiB,EAAKjB,aAAa,cAAe,OACjCiB,EAAKjB,aAAa,iBAAkB,OACpCiB,EAAKjB,aAAa,cAAc,GAEhCiB,EAAK3B,MAAMo2D,QAAU,IACjB1G,EAAUf,UAAShtD,EAAK3B,MAAMS,IAAM,WACxCqE,EAAW+/B,aAAaljC,EAAMmD,EAAW2jC,YAEzC,IAAI4tB,EAAc,KAEdC,GAAS,EACTC,GAAS,EACTC,GAAgB,EAChBC,EAAY,GACZC,GAAmB,EACvB,IAAM,IAAIC,EAAYl3D,SAASm3D,gBAAkBj1D,CAAM,CAAE,MAAMlF,GAAI,CAEnEkiC,EAAMkxB,YAAYluD,EAAM,QAAQ,SAASlF,GACrC2b,EAAKy+C,OAAOp6D,GACZk6D,GAAY,CAChB,IACAh4B,EAAMkxB,YAAYluD,EAAM,SAAS,SAASlF,GACtCk6D,GAAY,EACZv+C,EAAK0+C,QAAQr6D,GACbs6D,GACJ,IACAz9D,KAAK6K,MAAQ,WACT,GAAIsyD,EAAW,OAAO90D,EAAKwC,QAC3B,IAAI1D,EAAMkB,EAAK3B,MAAMS,IACrBkB,EAAK3B,MAAMK,SAAW,QACtBsB,EAAK3B,MAAMS,IAAM,MACjBkB,EAAKwC,QACLolB,YAAW,WACP5nB,EAAK3B,MAAMK,SAAW,GACA,OAAlBsB,EAAK3B,MAAMS,MACXkB,EAAK3B,MAAMS,IAAMA,EACzB,GAAG,EACP,EACAnH,KAAKwiC,KAAO,WACRn6B,EAAKm6B,MACT,EACAxiC,KAAKq9D,UAAY,WACb,OAAOA,CACX,EACA,IAAIK,EAAgB78D,EAAK47D,aAAY,WACjCY,GAAaI,EAAeL,EAChC,IACIO,EAAY98D,EAAK47D,aAAY,WACvBS,IACF70D,EAAKnH,MAAQ67D,EACbM,GAAaI,IAErB,IAEA,SAASA,EAAe3e,GACpB,IAAIoe,EAAJ,CAIA,GAFAA,GAAgB,EAEZU,EACAC,EAAiB,EACjBC,EAAehf,EAAU,EAAIz2C,EAAKnH,MAAMwG,OAAS,OAEjD,IAAIm2D,EAAiB/e,EAAU,EAAI,EAC/Bgf,EAAe,EAEvB,IACIz1D,EAAKgE,kBAAkBwxD,EAAgBC,EAC3C,CAAE,MAAM36D,GAAG,CAEX+5D,GAAgB,CAdN,CAed,CAEA,SAASa,IACDb,IAEJ70D,EAAKnH,MAAQ67D,EACT3G,EAAUN,UACV6H,EAAUpB,WAClB,CAEAnG,EAAUN,UAAYh3C,EAAKrT,iBAAiB,mBAAmB,WACvDqT,EAAKmiB,UAAU6d,WAAase,IAC5BA,GAAoBA,EACpBM,EAAcnB,WAEtB,IAEAwB,IACIV,GACAv+C,EAAK0+C,UAGT,IAAIQ,EAAgB,SAAS31D,GACzB,OAA+B,IAAxBA,EAAKw1D,gBAAwBx1D,EAAKy1D,eAAiBz1D,EAAKnH,MAAMwG,MACzE,EAiBA,IAhBKW,EAAKgE,mBAAqBhE,EAAK41D,kBAChC51D,EAAKgE,kBAAoB,SAASwxD,EAAgBC,GAC9C,IAAIt5B,EAAQxkC,KAAKi+D,kBACjBz5B,EAAM5B,UAAS,GACf4B,EAAM05B,UAAU,YAAaL,GAC7Br5B,EAAM25B,QAAQ,YAAaL,GAC3Bt5B,EAAMp4B,QACV,EACA4xD,EAAgB,SAAS31D,GACrB,IACI,IAAIm8B,EAAQn8B,EAAK+1D,cAAcn9B,UAAU10B,aAC7C,CAAC,MAAMpJ,GAAI,CACX,SAAKqhC,GAASA,EAAM65B,iBAAmBh2D,IAC5Bm8B,EAAMn8B,MAAQA,EAAKnH,KAClC,GAEAk1D,EAAUf,QAAS,CACnB,IAAIiJ,GAAmB,EACnBC,EAAmB,SAASp7D,GAC5B,IAAIm7D,EAAJ,CAEA,IAAIj8D,EAAOgG,EAAKnH,MAChB,IAAIg8D,GAAkB76D,GAAQA,GAAQ06D,EAAtC,CAEA,GAAI55D,GAAKd,GAAQ06D,EAAY,GACzB,OAAOyB,EAAajC,WAExBkC,EAASp8D,GACTi8D,GAAmB,EACnBP,IACAO,GAAmB,CAPT,CAHA,CAWd,EACIE,EAAe39D,EAAK47D,YAAY8B,GACpCl5B,EAAMkxB,YAAYluD,EAAM,iBAAkBk2D,GAE1C,IAAIG,EAAW,CAAE,GAAG,EAAG,GAAG,GAC1Br5B,EAAMkxB,YAAYluD,EAAM,SAAS,SAAUlF,GAGvC,IAFI+5D,GAAmB70D,EAAKnH,QAASw9D,EAASv7D,EAAEomC,UAC5CtZ,WAAW0uC,EAAkB,IAC5Bt2D,EAAKnH,MAAM2hB,WAAW,IAAI,GAAK,IAChC,OAAO27C,EAAa55D,OAExBs4D,EAAgB0B,IAAwBC,GAC5C,IACAx5B,EAAMkxB,YAAYluD,EAAM,WAAW,SAAUlF,GACzCq7D,EAAajC,SAAS,GAC1B,GACJ,CAEA,IAAIuC,EAAW,SAAS37D,GAChB65D,EACAA,GAAS,EACFgB,EAAc31D,IACrByW,EAAKigD,YACLtB,KACOG,GACPH,EAAe3+C,EAAKmiB,UAAU6d,UAEtC,EAEI8e,EAAe,KACnB59D,KAAKg/D,gBAAkB,SAASC,GAAKrB,EAAeqB,CAAE,EACtDj/D,KAAKk/D,gBAAkB,WAAY,OAAOtB,CAAY,EACtD,IAAIuB,GAAmB,EAEnBV,EAAW,SAASp8D,GAChBu7D,IACAv7D,EAAOu7D,EAAav7D,GACpBu7D,EAAe,MAEfX,GACAQ,IACIp7D,GACAyc,EAAKsgD,QAAQ/8D,GACjB46D,GAAS,GACF56D,GAAQ06D,EAAYp5C,OAAO,GAC9Bw7C,EACArgD,EAAK1Y,YAAY,MAAO,CAACkb,OAAQ,QAEjCxC,EAAK1Y,YAAY,YAAa,CAACkb,OAAQ,SAEvCjf,EAAK4uC,UAAU,EAAG,IAAM8rB,EACxB16D,EAAOA,EAAK2f,OAAO,GACd3f,EAAKshB,OAAO,IAAMo5C,EAAYp5C,OAAO,GAC1CthB,EAAOA,EAAK2f,OAAO,GACd3f,EAAKshB,OAAOthB,EAAKqF,OAAS,IAAMq1D,EAAYp5C,OAAO,KACxDthB,EAAOA,EAAK0K,MAAM,GAAI,IACtB1K,EAAKshB,OAAOthB,EAAKqF,OAAS,IAAMq1D,EAAYp5C,OAAO,KACnDthB,EAAOA,EAAK0K,MAAM,GAAI,IAEtB1K,GACAyc,EAAKugD,YAAYh9D,IAErB88D,IACAA,GAAmB,EAC3B,EACIG,EAAU,SAASn8D,GACnB,IAAI+5D,EAAJ,CAEA,IAAI76D,EAAOgG,EAAKnH,MAChBu9D,EAASp8D,GACT07D,GAHU,CAId,EAEIwB,EAAsB,SAASp8D,EAAGd,GAClC,IAAIm9D,EAAgBr8D,EAAEq8D,eAAiBx4D,OAAOw4D,cAC9C,GAAKA,IAAiB7C,EAAtB,CAEA,IAAI8C,EAAO7C,EAAmB,OAAS,aACvC,OAAIv6D,GAC6C,IAAtCm9D,EAAcE,QAAQD,EAAMp9D,GAE5Bm9D,EAAcx0C,QAAQy0C,EALvB,CAOd,EAEIE,EAAS,SAASx8D,EAAGy8D,GACrB,IAAIv9D,EAAOyc,EAAK+gD,cAChB,IAAKx9D,EACD,OAAOgjC,EAAMG,eAAeriC,GAE5Bo8D,EAAoBp8D,EAAGd,IACvBu9D,EAAQ9gD,EAAKghD,QAAUhhD,EAAKihD,SAC5B16B,EAAMG,eAAeriC,KAErB65D,GAAS,EACT30D,EAAKnH,MAAQmB,EACbgG,EAAK+D,SACL6jB,YAAW,WACP+sC,GAAS,EACTe,IACAN,IACAmC,EAAQ9gD,EAAKghD,QAAUhhD,EAAKihD,QAChC,IAER,EAEID,EAAQ,SAAS38D,GACjBw8D,EAAOx8D,GAAG,EACd,EAEI48D,EAAS,SAAS58D,GAClBw8D,EAAOx8D,GAAG,EACd,EAEIi8D,EAAU,SAASj8D,GACnB,IAAId,EAAOk9D,EAAoBp8D,GACZ,iBAARd,GACHA,GACAyc,EAAKsgD,QAAQ/8D,EAAMc,GACnBizD,EAAUhB,MACVnlC,WAAWwtC,GACfp4B,EAAMG,eAAeriC,KAGrBkF,EAAKnH,MAAQ,GACb+7D,GAAS,EAEjB,EAEA53B,EAAM+0B,sBAAsB/xD,EAAMyW,EAAKkhD,aAAar0D,KAAKmT,IAEzDumB,EAAMkxB,YAAYluD,EAAM,SAAUy2D,GAElCz5B,EAAMkxB,YAAYluD,EAAM,QAASi3D,GAEjCj6B,EAAMkxB,YAAYluD,EAAM,MAAOy3D,GAC/Bz6B,EAAMkxB,YAAYluD,EAAM,OAAQ03D,GAChC16B,EAAMkxB,YAAYluD,EAAM,QAAS+2D,GAC3B,UAAW/2D,GAAW,WAAYA,GAAW,YAAaA,GAC5Dg9B,EAAMkxB,YAAY/qD,EAAY,WAAW,SAASrI,GAC9C,KAAKizD,EAAUrB,OAAU5xD,EAAEo2D,UAAap2D,EAAEqmC,QAG1C,OAAQrmC,EAAEomC,SACN,KAAK,GACDw2B,EAAO58D,GACP,MACJ,KAAK,GACDi8D,EAAQj8D,GACR,MACJ,KAAK,GACD28D,EAAM38D,GACN,MAEZ,IAEJ,IAgII88D,EAhIApB,EAAqB,SAAS17D,GAC1B+5D,IAAkBp+C,EAAK+/C,oBAAsB//C,EAAKohD,YAEtDhD,EAAgB,CAAC,EACjBp+C,EAAK+/C,qBACL5uC,WAAW2uC,EAAqB,GAChC9/C,EAAKve,GAAG,YAAao+D,GAChB7/C,EAAKmiB,UAAU6d,YAChBhgC,EAAK0uC,OAAO,IACZ1uC,EAAKqhD,QAAQC,gBACbthD,EAAKmiB,UAAUr2B,kBAEnBkU,EAAKqhD,QAAQC,gBACjB,EAEIxB,EAAsB,WACtB,GAAK1B,GAAkBp+C,EAAK8/C,sBAAuB9/C,EAAKohD,UAAxD,CAEA,IAAIl+D,EAAMqG,EAAKnH,MAAM+d,QAAQ,QAAS,IACtC,GAAIi+C,EAAcmD,YAAcr+D,IAEhC8c,EAAK8/C,oBAAoB58D,GACrBk7D,EAAcmD,WACdvhD,EAAKynB,OACT22B,EAAcmD,UAAYr+D,EACtBk7D,EAAcmD,WAAW,CACzB,IAAIp6D,EAAI6Y,EAAKmiB,UAAUq/B,WACvBxhD,EAAK0uC,OAAO0P,EAAcmD,WAC1BvhD,EAAKqhD,QAAQC,gBACblD,EAAc14B,MAAQ1lB,EAAKmiB,UAAUq/B,WACrCxhD,EAAKmiB,UAAUs/B,SAASt6D,GACxB6Y,EAAKmiB,UAAUr2B,gBACnB,CAfU,CAgBd,EAEI+zD,EAAmB,SAASx7D,GAC5B,GAAK2b,EAAK6/C,mBAAoB7/C,EAAKohD,UAAnC,CACA,IAAIh6D,EAAIg3D,EACRA,GAAgB,EAChB,IAAInE,EAAQ9oC,YAAW,WACnB8oC,EAAQ,KACR,IAAIlkD,EAAMxM,EAAKnH,MAAM+d,QAAQ,QAAS,IAClCi+C,IAEKroD,GAAO3O,EAAEm6D,UACdtC,KACM73D,EAAEm6D,WAAaxrD,IACrBkpD,IACAU,EAAS5pD,IAEjB,IACA+oD,EAAe,SAAiC/oD,GAI5C,OAHIkkD,GACAx0B,aAAaw0B,GACjBlkD,EAAMA,EAAIoK,QAAQ,QAAS,IACvBpK,GAAO3O,EAAEm6D,UACF,IACPn6D,EAAEm6D,WAAatH,GACfj6C,EAAKynB,OACF1xB,EACX,EACAiK,EAAK6/C,mBACL7/C,EAAK43C,eAAe,YAAaiI,GACnB,kBAAVx7D,EAAE1B,MAA4ByE,EAAEs+B,OAChC1lB,EAAKmiB,UAAUs/B,SAASr6D,EAAEs+B,MA5BsB,CA8BxD,EAIIg8B,EAAkB3/D,EAAK47D,YAAYmC,EAAqB,IA2D5D,SAAS6B,IACLl8B,aAAa07B,GACbA,EAAehwC,YAAW,WAClBktC,IACA90D,EAAK3B,MAAMsrD,QAAUmL,EACrBA,EAAY,IAE2B,MAAvCr+C,EAAK4hD,SAASC,wBACd7hD,EAAK4hD,SAASC,uBAAwB,EACtC7hD,EAAK4hD,SAASE,wBAEtB,GAAGxK,EAAUf,QAAU,IAAM,EACjC,CArEAhwB,EAAMkxB,YAAYluD,EAAM,mBAAoBw2D,GACxCzI,EAAUd,QACVjwB,EAAMkxB,YAAYluD,EAAM,QAAQ,WAAWm4D,EAAgBjE,UAAU,KAErEl3B,EAAMkxB,YAAYluD,EAAM,SAAS,WAAWm4D,EAAgBjE,UAAU,IACtEl3B,EAAMkxB,YAAYluD,EAAM,WAAW,WAAWm4D,EAAgBjE,UAAU,KAE5El3B,EAAMkxB,YAAYluD,EAAM,iBAAkBs2D,GAE1C3+D,KAAK6gE,WAAa,WACd,OAAOx4D,CACX,EAEArI,KAAK8gE,YAAc,SAASC,GACzB14D,EAAK04D,SAAWA,CACnB,EAEA/gE,KAAKghE,cAAgB,SAAS79D,GAC1Bg8D,GAAmB,EACnB1B,EAAe3+C,EAAKmiB,UAAU6d,WAC9BhgC,EAAKmiD,MAAM,oBAAqB,CAAC74D,OAAQ0W,EAAMoiD,SAAU/9D,IACzDnD,KAAKmhE,YAAYh+D,GAAG,EACxB,EAEAnD,KAAKmhE,YAAc,SAASh+D,EAAGi+D,GAC3B,GAAKA,IAAgBhL,EAAUf,QAA/B,CAEK8H,IACDA,EAAY90D,EAAK3B,MAAMsrD,SAC3B3pD,EAAK3B,MAAMsrD,SAAWoP,EAAe,kBAAoB,IACnD,UAAY/4D,EAAK3B,MAAMo9B,OAAS,KAC/BsyB,EAAUhB,KAAO,eAAiB,IAEzC,IAAIznB,EAAO7uB,EAAKzX,UAAUumC,wBACtBlnC,EAAQq6B,EAAIqxB,cAActzC,EAAKzX,WAC/BF,EAAMwmC,EAAKxmC,KAAO8mB,SAASvnB,EAAM26D,iBAAmB,GACpDxzB,EAAOF,EAAKE,MAAQ5f,SAAS0f,EAAK2zB,kBAAoB,GACtDC,EAAS5zB,EAAK3J,OAAS78B,EAAMkB,EAAK07B,aAAc,EAChDy9B,EAAO,SAASr+D,GAChBkF,EAAK3B,MAAMmnC,KAAO1qC,EAAEo0D,QAAU1pB,EAAO,EAAI,KACzCxlC,EAAK3B,MAAMS,IAAM0e,KAAKif,IAAI3hC,EAAEq0D,QAAUrwD,EAAM,EAAGo6D,GAAU,IAC7D,EACAC,EAAKr+D,GAES,aAAVA,EAAE1B,OAGFqd,EAAK4hD,SAASC,wBACd7hD,EAAK4hD,SAASC,sBAAwB,MAE1Cp8B,aAAa07B,GACT7J,EAAUjB,QAAUiB,EAAUf,SAC9BhwB,EAAMyxB,QAAQh4C,EAAKzX,UAAWm6D,EAAMf,GA1B9B,CA2Bd,EAEAzgE,KAAKygE,mBAAqBA,EAgB1B,IAAIO,EAAgB,SAAS79D,GACzB2b,EAAK2iD,UAAUT,cAAc79D,GAC7Bs9D,GACJ,EACAp7B,EAAMkxB,YAAYluD,EAAM,UAAW24D,GACnC37B,EAAMkxB,YAAYluD,EAAM,aAAa,SAASlF,GAC1CA,EAAEqiC,iBACFi7B,GACJ,IACAp7B,EAAMkxB,YAAYz3C,EAAK4hD,SAASgB,SAAU,cAAeV,GACzD37B,EAAMkxB,YAAYluD,EAAM,cAAe24D,EAC3C,EAEAv7D,EAAQo3D,UAAYA,CACpB,IAEA9U,IAAImC,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,sBAAsB,SAASS,EAAUllD,EAASE,GACtJ,aAEUglD,EAAS,cACPA,EAAS,gBACLA,EAAS,oBAFzB,IAIIgX,EAAc,EAElB,SAASC,EAAgBC,GACrBA,EAAaC,gBAAkB,KAE/B,IAAIx/D,EAASu/D,EAAav/D,OAC1BA,EAAOy/D,kBAAkB,YAAa/hE,KAAKgiE,YAAYr2D,KAAKk2D,IAC5Dv/D,EAAOy/D,kBAAkB,WAAY/hE,KAAKiiE,cAAct2D,KAAKk2D,IAC7Dv/D,EAAOy/D,kBAAkB,cAAe/hE,KAAKkiE,cAAcv2D,KAAKk2D,IAChEv/D,EAAOy/D,kBAAkB,YAAa/hE,KAAKmiE,YAAYx2D,KAAKk2D,IAC5Dv/D,EAAOy/D,kBAAkB,aAAc/hE,KAAKoiE,aAAaz2D,KAAKk2D,IAC9Dv/D,EAAOy/D,kBAAkB,YAAa/hE,KAAKqiE,YAAY12D,KAAKk2D,IAE5D,IAAIp8D,EAAU,CAAC,SAAU,cAAe,YAAa,eAAgB,mBACjE,mBAAoB,WAAY,cAAe,aAEnDA,EAAQyE,SAAQ,SAAS8e,GACrB64C,EAAa74C,GAAKhpB,KAAKgpB,EAC3B,GAAGhpB,MAEH6hE,EAAaS,cAAgBtiE,KAAKuiE,kBAAkB52D,KAAKk2D,EAAc,gBACvEA,EAAaW,cAAgBxiE,KAAKuiE,kBAAkB52D,KAAKk2D,EAAc,eAC3E,CAkNA,SAASY,EAAaC,EAAIC,EAAIC,EAAIC,GAC9B,OAAOh9C,KAAKoiB,KAAKpiB,KAAK0uC,IAAIqO,EAAKF,EAAI,GAAK78C,KAAK0uC,IAAIsO,EAAKF,EAAI,GAC9D,CAEA,SAASG,EAAqBt+B,EAAO8b,GACjC,GAAI9b,EAAM0D,MAAM66B,KAAOv+B,EAAM2D,IAAI46B,IAC7B,IAAIn2C,EAAM,EAAI0zB,EAAO0iB,OAASx+B,EAAM0D,MAAM86B,OAASx+B,EAAM2D,IAAI66B,YAC5D,GAAIx+B,EAAM0D,MAAM66B,KAAOv+B,EAAM2D,IAAI46B,IAAM,GAAMv+B,EAAM0D,MAAM86B,QAAWx+B,EAAM2D,IAAI66B,OAG3Ep2C,EAAM,EAAI0zB,EAAOyiB,IAAMv+B,EAAM0D,MAAM66B,IAAMv+B,EAAM2D,IAAI46B,SAFvD,IAAIn2C,EAAM0zB,EAAO0iB,OAAS,EAI9B,OAAIp2C,EAAM,EACC,CAAC0zB,OAAQ9b,EAAM0D,MAAOgC,OAAQ1F,EAAM2D,KAEpC,CAACmY,OAAQ9b,EAAM2D,IAAK+B,OAAQ1F,EAAM0D,MACjD,EAhOA,WAEIloC,KAAKgiE,YAAc,SAASiB,GACxB,IAAIC,EAAcD,EAAGC,cACjB73C,EAAM43C,EAAGE,sBACbnjE,KAAKojE,eAAiBH,EACtB,IAAI3gE,EAAStC,KAAKsC,OAEdi2C,EAAS0qB,EAAGpM,YAChB,GAAe,IAAXte,EAAc,CACd,IAAI8qB,EAAiB/gE,EAAOghE,oBACxBC,EAAiBF,EAAevkB,UAOpC,OANAx8C,EAAOumD,mBACH0a,GAA4B,GAAVhrB,IAClBj2C,EAAO2+B,UAAUuiC,eAAen4C,GACpC/oB,EAAOumD,uBACO,GAAVtQ,GACAj2C,EAAOm/D,UAAUT,cAAciC,EAAG/B,UAE1C,CAGA,OADAlhE,KAAKojE,eAAevrC,KAAOvuB,KAAKknD,OAC5B0S,GAAgB5gE,EAAO+6D,cACvB/6D,EAAOuI,SACH7K,KAAKyjE,cAAiBzjE,KAAK8hE,iBAAoBx/D,EAAOohE,oBAO9D1jE,KAAK2jE,aAAaV,GAClBjjE,KAAK4jE,YAAYv4C,EAAK43C,EAAG/B,SAAS9H,QAAU,GACrC6J,EAAGz9B,mBARFxlC,KAAK6jE,SAAS,kBACd7jE,KAAK2jE,aAAaV,GAQ9B,EAEAjjE,KAAK4jE,YAAc,SAASv4C,EAAKy4C,GAC7Bz4C,EAAMA,GAAOrrB,KAAKsC,OAAOo+D,SAASqD,wBAAwB/jE,KAAKgpB,EAAGhpB,KAAK+I,GACvE,IAAIzG,EAAStC,KAAKsC,OAClBA,EAAOumD,kBACH7oD,KAAKojE,eAAeY,cACpB1hE,EAAO2+B,UAAUgjC,iBAAiB54C,GAC5By4C,GACNxhE,EAAO2+B,UAAUuiC,eAAen4C,GAC/By4C,GACD9jE,KAAKoM,SACL9J,EAAOo+D,SAASgB,SAASwC,YACzB5hE,EAAOo+D,SAASgB,SAASwC,aAE7B5hE,EAAO6hE,SAAS,iBAChBnkE,KAAK6jE,SAAS,UACdvhE,EAAOumD,iBACX,EAEA7oD,KAAKoM,OAAS,WACV,IAAI89B,EAAQ5nC,EAAStC,KAAKsC,OACtBg+C,EAASh+C,EAAOo+D,SAASqD,wBAAwB/jE,KAAKgpB,EAAGhpB,KAAK+I,GAElE,GADAzG,EAAOumD,kBACH7oD,KAAK8hE,gBAAiB,CACtB,IAAIl1C,EAAM5sB,KAAK8hE,gBAAgBsC,aAAa9jB,GAE5C,IAAY,GAAR1zB,EACAsd,EAASlqC,KAAK8hE,gBAAgB35B,SAC3B,GAAW,GAAPvb,EACPsd,EAASlqC,KAAK8hE,gBAAgB55B,UAC3B,CACH,IAAIm8B,EAAgBvB,EAAqB9iE,KAAK8hE,gBAAiBxhB,GAC/DA,EAAS+jB,EAAc/jB,OACvBpW,EAASm6B,EAAcn6B,MAC3B,CACA5nC,EAAO2+B,UAAUqjC,mBAAmBp6B,EAAO64B,IAAK74B,EAAO84B,OAC3D,CACA1gE,EAAO2+B,UAAUgjC,iBAAiB3jB,GAClCh+C,EAAOumD,kBACPvmD,EAAOo+D,SAAS6D,sBACpB,EAEAvkE,KAAKuiE,kBAAoB,SAASiC,GAC9B,IAAIt6B,EAAQ5nC,EAAStC,KAAKsC,OACtBg+C,EAASh+C,EAAOo+D,SAASqD,wBAAwB/jE,KAAKgpB,EAAGhpB,KAAK+I,GAC9Dy7B,EAAQliC,EAAO2+B,UAAUujC,GAAUlkB,EAAOyiB,IAAKziB,EAAO0iB,QAE1D,GADA1gE,EAAOumD,kBACH7oD,KAAK8hE,gBAAiB,CACtB,IAAI2C,EAAWzkE,KAAK8hE,gBAAgBsC,aAAa5/B,EAAM0D,OACnDw8B,EAAS1kE,KAAK8hE,gBAAgBsC,aAAa5/B,EAAM2D,KAErD,IAAiB,GAAbs8B,GAAkBC,GAAU,EAC5Bx6B,EAASlqC,KAAK8hE,gBAAgB35B,IAC1B3D,EAAM2D,IAAI46B,KAAOziB,EAAOyiB,KAAOv+B,EAAM2D,IAAI66B,QAAU1iB,EAAO0iB,SAC1D1iB,EAAS9b,EAAM0D,YAChB,GAAc,GAAVw8B,GAAeD,GAAY,EAClCv6B,EAASlqC,KAAK8hE,gBAAgB55B,MAC1B1D,EAAM0D,MAAM66B,KAAOziB,EAAOyiB,KAAOv+B,EAAM0D,MAAM86B,QAAU1iB,EAAO0iB,SAC9D1iB,EAAS9b,EAAM2D,UAChB,IAAiB,GAAbs8B,GAA4B,GAAVC,EACzBpkB,EAAS9b,EAAM2D,IACf+B,EAAS1F,EAAM0D,UACZ,CACH,IAAIm8B,EAAgBvB,EAAqB9iE,KAAK8hE,gBAAiBxhB,GAC/DA,EAAS+jB,EAAc/jB,OACvBpW,EAASm6B,EAAcn6B,MAC3B,CACA5nC,EAAO2+B,UAAUqjC,mBAAmBp6B,EAAO64B,IAAK74B,EAAO84B,OAC3D,CACA1gE,EAAO2+B,UAAUgjC,iBAAiB3jB,GAClCh+C,EAAOumD,kBACPvmD,EAAOo+D,SAAS6D,sBACpB,EAEAvkE,KAAK2kE,UACL3kE,KAAK4kE,aACL5kE,KAAK6kE,iBACL7kE,KAAK8kE,iBAAmB,WACpB9kE,KAAK8hE,gBAAkB,KACvB9hE,KAAKsC,OAAOyiE,WAAW,iBACnB/kE,KAAKsC,OAAOo+D,SAASgB,SAASsD,gBAC9BhlE,KAAKsC,OAAOo+D,SAASgB,SAASsD,gBAEtC,EAEAhlE,KAAKilE,UAAY,WACb,IAAIC,EAAWzC,EAAaziE,KAAKojE,eAAep6C,EAAGhpB,KAAKojE,eAAer6D,EAAG/I,KAAKgpB,EAAGhpB,KAAK+I,GACnF8uB,EAAOvuB,KAAKknD,OAEZ0U,EAAWvD,GAAe9pC,EAAO73B,KAAKojE,eAAevrC,KAAO73B,KAAKyjE,eACjEzjE,KAAK4jE,YAAY5jE,KAAKojE,eAAeD,sBAC7C,EAEAnjE,KAAKiiE,cAAgB,SAASgB,GAC1B,IAAI53C,EAAM43C,EAAGE,sBACT7gE,EAAStC,KAAKsC,OACd69D,EAAU79D,EAAO69D,QAEjB37B,EAAQ27B,EAAQgF,gBAAgB95C,GAChCmZ,GACIA,EAAMsa,YACNta,EAAM0D,MAAM86B,SACZx+B,EAAM2D,IAAI66B,UAEdhjE,KAAK6jE,SAAS,YAEdr/B,EAAQliC,EAAO2+B,UAAUmkC,aAAa/5C,EAAI03C,IAAK13C,EAAI23C,QACnDhjE,KAAK6jE,SAAS,kBAElB7jE,KAAK8hE,gBAAkBt9B,EACvBxkC,KAAKoM,QACT,EAEApM,KAAKkiE,cAAgB,SAASe,GAC1B,IAAI53C,EAAM43C,EAAGE,sBACT7gE,EAAStC,KAAKsC,OAElBtC,KAAK6jE,SAAS,iBACd,IAAIr/B,EAAQliC,EAAOghE,oBACf9+B,EAAM6gC,eAAiB7gC,EAAM8gC,SAASj6C,EAAI03C,IAAK13C,EAAI23C,SACnDhjE,KAAK8hE,gBAAkBx/D,EAAO2+B,UAAUskC,aAAa/gC,EAAM0D,MAAM66B,KACjE/iE,KAAK8hE,gBAAgB35B,IAAM7lC,EAAO2+B,UAAUskC,aAAa/gC,EAAM2D,IAAI46B,KAAK56B,KAExEnoC,KAAK8hE,gBAAkBx/D,EAAO2+B,UAAUskC,aAAal6C,EAAI03C,KAE7D/iE,KAAKoM,QACT,EAEApM,KAAKmiE,YAAc,SAASc,GACxB,IAAI3gE,EAAStC,KAAKsC,OAElBA,EAAOy8D,YACP/+D,KAAK8hE,gBAAkBx/D,EAAOghE,oBAC9BtjE,KAAK6jE,SAAS,YAClB,EAEA7jE,KAAKoiE,aAAe,SAASa,GACzB,IAAIA,EAAGuC,cAAP,CAEIvC,EAAGe,eAAiBf,EAAGtL,SAAWsL,EAAGvL,SACrCuL,EAAGvL,OAASuL,EAAGtL,OACfsL,EAAGtL,OAAS,GAGhB,IAAIjyD,EAAIu9D,EAAG/B,SAASpH,UAChBC,EAAKr0D,GAAK1F,KAAKylE,iBAAiB,GAEhCnjE,EAAStC,KAAKsC,OACdojE,EAAcpjE,EAAOo+D,SAASiF,eAAe1C,EAAGvL,OAASuL,EAAG2C,MAAO3C,EAAGtL,OAASsL,EAAG2C,OACtF,OAAIF,GAAe3L,EAAK,KACpB/5D,KAAKylE,gBAAkB//D,EACvBpD,EAAOo+D,SAASmF,SAAS5C,EAAGvL,OAASuL,EAAG2C,MAAO3C,EAAGtL,OAASsL,EAAG2C,OACvD3C,EAAG6C,aAHd,CAXU,CAgBd,EAEA9lE,KAAKqiE,YAAc,SAAUY,GACzB,IAAIv9D,EAAIu9D,EAAG/B,SAASpH,UAChBC,EAAKr0D,GAAK1F,KAAKylE,iBAAmB,GAElCnjE,EAAStC,KAAKsC,OACdojE,EAAcpjE,EAAOo+D,SAASiF,eAAe1C,EAAGvL,OAASuL,EAAG2C,MAAO3C,EAAGtL,OAASsL,EAAG2C,OACtF,GAAIF,GAAe3L,EAAK,IAGpB,OAFA/5D,KAAKylE,gBAAkB//D,EACvBpD,EAAOo+D,SAASmF,SAAS5C,EAAGvL,OAASuL,EAAG2C,MAAO3C,EAAGtL,OAASsL,EAAG2C,OACvD3C,EAAG6C,MAElB,CAEH,GAAElhE,KAAKg9D,EAAgB35D,WAExBxC,EAAQm8D,gBAAkBA,CAoB1B,IAEA7Z,IAAImC,OAAO,cAAc,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,SAASS,EAAUllD,EAASE,GACjH,aAEUglD,EAAS,aAAnB,IACI5pB,EAAM4pB,EAAS,aACnB,SAASob,EAASv6D,GACdxL,KAAKgmE,QAAS,EACdhmE,KAAKimE,SAAW,KAChBjmE,KAAKkmE,YAAc16D,CACvB,EAEA,WACIxL,KAAKmmE,MAAQ,WAKT,OAJAnmE,KAAKimE,SAAWllC,EAAIt6B,cAAc,OAClCzG,KAAKimE,SAAS9gC,UAAY,cAC1BnlC,KAAKimE,SAASv/D,MAAM0zC,QAAU,OAC9Bp6C,KAAKkmE,YAAY5+D,YAAYtH,KAAKimE,UAC3BjmE,KAAKimE,QAChB,EACAjmE,KAAK6gE,WAAa,WACd,OAAO7gE,KAAKimE,UAAYjmE,KAAKmmE,OACjC,EACAnmE,KAAKiS,QAAU,SAAS5J,GACpB04B,EAAIsyB,aAAarzD,KAAK6gE,aAAcx4D,EACxC,EACArI,KAAKomE,QAAU,SAASngB,GACpBjmD,KAAK6gE,aAAa9oB,UAAYkO,CAClC,EACAjmD,KAAKqmE,YAAc,SAASr9C,EAAGjgB,GAC3B/I,KAAK6gE,aAAan6D,MAAMmnC,KAAO7kB,EAAI,KACnChpB,KAAK6gE,aAAan6D,MAAMS,IAAM4B,EAAI,IACtC,EACA/I,KAAKsmE,aAAe,SAASnhC,GACzBpE,EAAIswB,YAAYrxD,KAAK6gE,aAAc17B,EACvC,EACAnlC,KAAKuqC,KAAO,SAASliC,EAAM2gB,EAAGjgB,GACd,MAARV,GACArI,KAAKiS,QAAQ5J,GACR,MAAL2gB,GAAkB,MAALjgB,GACb/I,KAAKqmE,YAAYr9C,EAAGjgB,GACnB/I,KAAKgmE,SACNhmE,KAAK6gE,aAAan6D,MAAM0zC,QAAU,QAClCp6C,KAAKgmE,QAAS,EAEtB,EAEAhmE,KAAKw4C,KAAO,WACJx4C,KAAKgmE,SACLhmE,KAAK6gE,aAAan6D,MAAM0zC,QAAU,OAClCp6C,KAAKgmE,QAAS,EAEtB,EACAhmE,KAAKumE,UAAY,WACb,OAAOvmE,KAAK6gE,aAAa9mB,YAC7B,EACA/5C,KAAKwmE,SAAW,WACZ,OAAOxmE,KAAK6gE,aAAalO,WAC7B,CAEH,GAAE/tD,KAAKmhE,EAAQ99D,WAEhBxC,EAAQsgE,QAAUA,CAClB,IAEAhe,IAAImC,OAAO,mCAAmC,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,gBAAgB,SAASS,EAAUllD,EAASE,GACpK,aACA,IAAIo7B,EAAM4pB,EAAS,cACfoJ,EAAMpJ,EAAS,cACftlB,EAAQslB,EAAS,gBACjBob,EAAUpb,EAAS,cAAcob,QAErC,SAASU,EAAc5E,GACnB,IA8BI6E,EAAgBC,EAAYC,EA9B5BtkE,EAASu/D,EAAav/D,OACtBukE,EAASvkE,EAAOo+D,SAASoG,aACzBC,EAAU,IAAIC,EAAc1kE,EAAO+E,WA8BvC,SAAS4/D,IACL,IAAIlE,EAAM4D,EAAWxD,sBAAsBJ,IACvCmE,EAAaL,EAAOM,aAAapE,GACrC,IAAKmE,EACD,OAAOE,IAEX,IAAIC,EAAS/kE,EAAO69D,QAAQmH,YAC5B,GAAIvE,GAAOsE,EAAQ,CACf,IAAIE,EAAYjlE,EAAOo+D,SAAS8G,yBAAyB,EAAGb,EAAW59D,GAAGg6D,IACtE13C,EAAMs7C,EAAWc,KACrB,GAAIF,EAAYjlE,EAAO69D,QAAQuH,oBAAoBr8C,EAAI03C,IAAK13C,EAAI23C,QAC5D,OAAOoE,GACf,CAEA,GAAIR,GAAqBM,EAQzB,GANAN,EAAoBM,EAAW7+D,KAAK6a,KAAK,SAEzC6jD,EAAQX,QAAQQ,GAChBG,EAAQx8B,OACRjoC,EAAO/B,GAAG,aAAc6mE,GAEpBvF,EAAa8F,qBACbC,EAAYjB,OACT,CACH,IAAIkB,EAAgBlB,EAAWzF,SAAS94D,OACpCulC,EAAOk6B,EAAcj6B,wBACrBlnC,EAAQqgE,EAAQlG,aAAan6D,MACjCA,EAAMmnC,KAAOF,EAAK4D,MAAQ,KAC1B7qC,EAAMS,IAAMwmC,EAAK3J,OAAS,IAC9B,CACJ,CAEA,SAASojC,IACDV,IACAA,EAAiBniC,aAAamiC,IAC9BE,IACAG,EAAQvuB,OACRouB,EAAoB,KACpBtkE,EAAOoJ,oBAAoB,aAAc07D,GAEjD,CAEA,SAASQ,EAAYzkE,GACjB4jE,EAAQV,YAAYljE,EAAE6lB,EAAG7lB,EAAE4F,EAC/B,CAzEA84D,EAAav/D,OAAOy/D,kBAAkB,mBAAmB,SAAS5+D,GAC9D,GAAKb,EAAO+6D,aAAgC,GAAjBl6D,EAAE0zD,YAA7B,CAEA,IAAIiR,EAAejB,EAAOkB,UAAU5kE,GAEpC,GAAoB,eAAhB2kE,EAAJ,CAGA,IAAI/E,EAAM5/D,EAAEggE,sBAAsBJ,IAC9B9hC,EAAY3+B,EAAO69D,QAAQl/B,UAE/B,GAAI99B,EAAE6gE,cACF/iC,EAAU+mC,SAASjF,EAAK,OACvB,CACD,GAAyB,GAArB5/D,EAAE+9D,SAAS1I,OAEX,OADAl2D,EAAOy8D,YACA57D,EAAEqiC,iBAEbq8B,EAAaC,gBAAkBx/D,EAAO2+B,UAAUskC,aAAaxC,EACjE,CAGA,OAFAlB,EAAagC,SAAS,iBACtBhC,EAAa8B,aAAaxgE,GACnBA,EAAEqiC,gBAhBC,CAJA,CAqBd,IAoDAq8B,EAAav/D,OAAOy/D,kBAAkB,mBAAmB,SAAS5+D,GAC9D,IAAIiF,EAASjF,EAAE+9D,SAAS94D,QAAUjF,EAAE+9D,SAAShe,WAC7C,GAAIniB,EAAIqwB,YAAYhpD,EAAQ,mBACxB,OAAOg/D,IAEPR,GAAqB/E,EAAa8F,sBAClCC,EAAYzkE,GAEhBwjE,EAAaxjE,EACTujE,IAEJA,EAAiBz2C,YAAW,WACxBy2C,EAAiB,KACbC,IAAe9E,EAAaoG,eAC5BhB,IAEAG,GACR,GAAG,IACP,IAEA/hC,EAAMkxB,YAAYj0D,EAAOo+D,SAASwH,QAAS,YAAY,SAAS/kE,GAC5DwjE,EAAa,KACRC,IAAqBF,IAG1BA,EAAiBz2C,YAAW,WACxBy2C,EAAiB,KACjBU,GACJ,GAAG,IACP,IAEA9kE,EAAO/B,GAAG,gBAAiB6mE,EAC/B,CAEA,SAASJ,EAAcx7D,GACnBu6D,EAAQnhE,KAAK5E,KAAMwL,EACvB,CAEAuoD,EAAIL,SAASsT,EAAejB,GAE5B,WACI/lE,KAAKqmE,YAAc,SAASr9C,EAAGjgB,GAC3B,IAAIo/D,EAAcnhE,OAAOohE,YAAcjiE,SAASI,gBAAgBgiD,YAC5D8f,EAAerhE,OAAOshE,aAAeniE,SAASI,gBAAgBw9B,aAC9DkG,EAAQjqC,KAAKwmE,WACb1iC,EAAS9jC,KAAKumE,YAClBv9C,GAAK,GACLjgB,GAAK,GACDigB,EAAIihB,EAAQk+B,IACZn/C,GAAMA,EAAIihB,EAASk+B,GAEnBp/D,EAAI+6B,EAASukC,IACbt/D,GAAK,GAAK+6B,GAEdiiC,EAAQ99D,UAAUo+D,YAAYzhE,KAAK5E,KAAMgpB,EAAGjgB,EAChD,CAEH,EAAEnE,KAAKoiE,EAAc/+D,WAItBxC,EAAQghE,cAAgBA,CAExB,IAEA1e,IAAImC,OAAO,wBAAwB,CAAC,UAAU,UAAU,SAAS,gBAAgB,sBAAsB,SAASS,EAAUllD,EAASE,GACnI,aAEA,IAAI0/B,EAAQslB,EAAS,gBACjByL,EAAYzL,EAAS,oBACrB4d,EAAa9iE,EAAQ8iE,WAAa,SAASrH,EAAU5+D,GACrDtC,KAAKkhE,SAAWA,EAChBlhE,KAAKsC,OAASA,EAEdtC,KAAKgpB,EAAIhpB,KAAKu3D,QAAU2J,EAAS3J,QACjCv3D,KAAK+I,EAAI/I,KAAKw3D,QAAU0J,EAAS1J,QAEjCx3D,KAAKynE,KAAO,KACZznE,KAAKwoE,aAAe,KAEpBxoE,KAAKyoE,oBAAqB,EAC1BzoE,KAAKg6D,kBAAmB,CAC5B,GAEA,WAEIh6D,KAAK6pC,gBAAkB,WACnBxE,EAAMwE,gBAAgB7pC,KAAKkhE,UAC3BlhE,KAAKyoE,oBAAqB,CAC9B,EAEAzoE,KAAKwlC,eAAiB,WAClBH,EAAMG,eAAexlC,KAAKkhE,UAC1BlhE,KAAKg6D,kBAAmB,CAC5B,EAEAh6D,KAAK8lE,KAAO,WACR9lE,KAAK6pC,kBACL7pC,KAAKwlC,gBACT,EACAxlC,KAAKmjE,oBAAsB,WACvB,OAAInjE,KAAKynE,OAGTznE,KAAKynE,KAAOznE,KAAKsC,OAAOo+D,SAASqD,wBAAwB/jE,KAAKu3D,QAASv3D,KAAKw3D,UAFjEx3D,KAAKynE,IAIpB,EACAznE,KAAKkjE,YAAc,WACf,GAA0B,OAAtBljE,KAAKwoE,aACL,OAAOxoE,KAAKwoE,aAEhB,IAAIlmE,EAAStC,KAAKsC,OAGd+gE,EAAiB/gE,EAAOghE,oBAC5B,GAAID,EAAevkB,UACf9+C,KAAKwoE,cAAe,MACnB,CACD,IAAIn9C,EAAMrrB,KAAKmjE,sBACfnjE,KAAKwoE,aAAenF,EAAeiC,SAASj6C,EAAI03C,IAAK13C,EAAI23C,OAC7D,CAEA,OAAOhjE,KAAKwoE,YAChB,EACAxoE,KAAK62D,UAAY,WACb,OAAOxxB,EAAMwxB,UAAU72D,KAAKkhE,SAChC,EACAlhE,KAAKgkE,YAAc,WACf,OAAOhkE,KAAKkhE,SAASz3B,QACzB,EAEAzpC,KAAKwlE,YAAcpP,EAAUrB,MACvB,WAAa,OAAO/0D,KAAKkhE,SAAS3H,OAAS,EAC3C,WAAa,OAAOv5D,KAAKkhE,SAAS13B,OAAS,CAEpD,GAAE5kC,KAAK2jE,EAAWtgE,UAEnB,IAEA8/C,IAAImC,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,sBAAsB,SAASS,EAAUllD,EAASE,GACtJ,aAEA,IAAIo7B,EAAM4pB,EAAS,cACftlB,EAAQslB,EAAS,gBACjByL,EAAYzL,EAAS,oBAErB+d,EAAmB,IACnBC,EAAsB,IACtBC,EAA2B,EAE/B,SAASC,EAAgBhH,GAErB,IAAIv/D,EAASu/D,EAAav/D,OAEtBwmE,EAAa/nC,EAAIt6B,cAAc,OACnCqiE,EAAWC,IAAM,6EACb3S,EAAUR,UACVkT,EAAWpiE,MAAMsrD,QAAU,kFAE/B,IAAIvsD,EAAU,CAAC,WAAY,cAAe,YAAa,eAAgB,eAEtEA,EAAQyE,SAAQ,SAAS8e,GACrB64C,EAAa74C,GAAKhpB,KAAKgpB,EAC5B,GAAGhpB,MACHsC,EAAOmJ,iBAAiB,YAAazL,KAAKgiE,YAAYr2D,KAAKk2D,IAG3D,IACImH,EAAqBhgD,EAAGjgB,EACxBkgE,EAASzkC,EACT0kC,EACAC,EACAC,EACAC,EACAC,EACAC,EARAC,EAAclnE,EAAO+E,UAGTmf,EAAU,EA8H1B,SAAS+9C,EAAqBjkB,EAAQmpB,GAClC,IAAIjZ,EAAMlnD,KAAKknD,MACXkZ,GAAaD,GAAcnpB,EAAOyiB,KAAO0G,EAAW1G,IACpD4G,GAAaF,GAAcnpB,EAAO0iB,QAAUyG,EAAWzG,OAC3D,IAAKsG,GAAmBI,GAAaC,EACjCrnE,EAAOumD,iBAAmB,EAC1BvmD,EAAOsnE,qBAAqBtpB,GAC5Bh+C,EAAOumD,iBAAmB,EAC1BygB,EAAkB9Y,EAClB+Y,EAA0B,CAACvgD,EAAGA,EAAGjgB,EAAGA,OACjC,CACH,IAAIm8D,EAAWzC,EAAa8G,EAAwBvgD,EAAGugD,EAAwBxgE,EAAGigB,EAAGjgB,GACjFm8D,EAAW0D,EACXU,EAAkB,KACX9Y,EAAM8Y,GAAmBX,IAChCrmE,EAAOo+D,SAAS6D,uBAChB+E,EAAkB,KAE1B,CACJ,CAEA,SAASO,EAAWvpB,EAAQmpB,GACxB,IAAIjZ,EAAMlnD,KAAKknD,MACXsZ,EAAaxnE,EAAOo+D,SAASqJ,YAAYD,WACzCE,EAAiB1nE,EAAOo+D,SAASqJ,YAAYC,eAC7CC,EAAa3nE,EAAOo+D,SAASgB,SAAS9zB,wBACtCs8B,EAAU,CACXlhD,EAAG,CACC6kB,KAAM7kB,EAAIihD,EAAWp8B,KACrB0D,MAAO04B,EAAW14B,MAAQvoB,GAE9BjgB,EAAG,CACC5B,IAAK4B,EAAIkhE,EAAW9iE,IACpB68B,OAAQimC,EAAWjmC,OAASj7B,IAG/BohE,EAAiBtkD,KAAKif,IAAIolC,EAAQlhD,EAAE6kB,KAAMq8B,EAAQlhD,EAAEuoB,OACpD64B,EAAiBvkD,KAAKif,IAAIolC,EAAQnhE,EAAE5B,IAAK+iE,EAAQnhE,EAAEi7B,QACnDqmC,EAAe,CAACtH,IAAKziB,EAAOyiB,IAAKC,OAAQ1iB,EAAO0iB,QAChDmH,EAAiBH,GAAkB,IACnCK,EAAarH,QAAWkH,EAAQlhD,EAAE6kB,KAAOq8B,EAAQlhD,EAAEuoB,OAAS,EAAI,GAEhE64B,EAAiBN,GAAc,IAC/BO,EAAatH,KAAQmH,EAAQnhE,EAAE5B,IAAM+iE,EAAQnhE,EAAEi7B,QAAU,EAAI,GAEjE,IAAIsmC,EAAUhqB,EAAOyiB,KAAOsH,EAAatH,IACrCwH,EAAUjqB,EAAO0iB,QAAUqH,EAAarH,OACxC0G,GAAaD,GAAcnpB,EAAOyiB,KAAO0G,EAAW1G,IACpDuH,GAAYC,IAAYb,EACnBL,EAEI7Y,EAAM6Y,GAAuBX,GAClCpmE,EAAOo+D,SAAS6D,qBAAqB8F,GAFrChB,EAAsB7Y,EAI1B6Y,EAAsB,IAE9B,CAEA,SAASmB,IACL,IAAIf,EAAaP,EACjBA,EAAa5mE,EAAOo+D,SAASqD,wBAAwB/6C,EAAGjgB,GACxDw7D,EAAqB2E,EAAYO,GACjCI,EAAWX,EAAYO,EAC3B,CAEA,SAASgB,IACLjmC,EAAQliC,EAAO2+B,UAAUypC,kBACzB1B,EAAsB1mE,EAAO69D,QAAQwK,UAAUnmC,EAAO,gBAAiBliC,EAAOsoE,qBAC9EtoE,EAAOsI,iBACHtI,EAAO+6D,aACP/6D,EAAOo+D,SAASmK,aAAaC,aAAY,GAC7CC,cAAc9B,GACduB,IACAvB,EAAU5kC,YAAYmmC,EAAgB,IACtChkD,EAAU,EACV6e,EAAMkxB,YAAYpwD,SAAU,YAAa6kE,EAC7C,CAEA,SAASC,IACLF,cAAc9B,GACd3mE,EAAO69D,QAAQ+K,aAAalC,GAC5BA,EAAsB,KACtB1mE,EAAOumD,iBAAmB,EAC1BvmD,EAAO2+B,UAAUkqC,kBAAkB3mC,GACnCliC,EAAOumD,iBAAmB,EACtBvmD,EAAO+6D,cAAgB+L,GACvB9mE,EAAOo+D,SAASmK,aAAaC,aAAaxoE,EAAO8oE,eACrD5mC,EAAQ,KACR0kC,EAAa,KACb1iD,EAAU,EACV6iD,EAAsB,KACtBC,EAAkB,KAClBjkC,EAAMqxB,eAAevwD,SAAU,YAAa6kE,EAChD,CApNAhrE,KAAKqnC,YAAc,SAASlkC,GACxB,GAAInD,KAAKqrE,aAAe7B,EAAY8B,UAAW,CAC3C,IAAIzoE,EAAO7C,KAKX,OAJAiwB,YAAW,WACPptB,EAAK+gE,cACL/gE,EAAK8gE,aAAaxgE,EACtB,GAAG,GACIA,EAAEqiC,gBACb,CACAhB,EAAQliC,EAAOghE,oBAEf,IAAIiI,EAAepoE,EAAEooE,aACrBA,EAAaC,cAAgBlpE,EAAO8oE,cAAgB,OAAS,WACzDhV,EAAUR,UACVtzD,EAAO+E,UAAUC,YAAYwhE,GAC7BA,EAAW5hE,UAAY,GAE3BqkE,EAAaE,cAAgBF,EAAaE,aAAa3C,EAAY,EAAG,GAClE1S,EAAUR,SACVtzD,EAAO+E,UAAUsI,YAAYm5D,GAEjCyC,EAAaG,YACbH,EAAa7L,QAAQ,OAAQp9D,EAAO69D,QAAQwL,gBAE5CvC,GAAa,EACbppE,KAAK6jE,SAAS,OAClB,EAEA7jE,KAAKogD,UAAY,SAASj9C,GAItB,GAHAqmE,EAAY8B,WAAY,EACxBlC,GAAa,EACbppE,KAAK6jE,SAAS,OACTvhE,EAAO8oE,cAAe,CACvB,IAAIQ,EAAazoE,EAAEooE,aAAaK,WAC3BzC,GAA+B,QAAdyC,GAClBtpE,EAAO69D,QAAQ54D,OAAOjF,EAAOghE,qBACjChhE,EAAOo+D,SAASmK,aAAaC,aAAY,EAC7C,CACA9qE,KAAKsC,OAAOyiE,WAAW,gBACvB/kE,KAAKsC,OAAOo+D,SAASmL,eAAe,GACxC,EAEA7rE,KAAK8rE,YAAc,SAAS3oE,GACxB,IAAIb,EAAO8oE,eAAkBW,EAAU5oE,EAAEooE,cAQzC,OANAviD,EAAI7lB,EAAEo0D,QACNxuD,EAAI5F,EAAEq0D,QACDwR,GACDyB,IACJjkD,IACArjB,EAAEooE,aAAaK,WAAazC,EAAgB6C,EAAc7oE,GACnDkiC,EAAMG,eAAeriC,EAChC,EAEAnD,KAAKisE,WAAa,SAAS9oE,GACvB,IAAIb,EAAO8oE,eAAkBW,EAAU5oE,EAAEooE,cAYzC,OAVAviD,EAAI7lB,EAAEo0D,QACNxuD,EAAI5F,EAAEq0D,QACDwR,IACDyB,IACAjkD,KAEqB,OAArB0lD,IACAA,EAAmB,MAEvB/oE,EAAEooE,aAAaK,WAAazC,EAAgB6C,EAAc7oE,GACnDkiC,EAAMG,eAAeriC,EAChC,EAEAnD,KAAKmsE,YAAc,SAAShpE,GAExB,GADAqjB,IACIA,GAAW,GAAKwiD,EAGhB,OAFAiC,IACA9B,EAAgB,KACT9jC,EAAMG,eAAeriC,EAEpC,EAEAnD,KAAKosE,OAAS,SAASjpE,GACnB,GAAK+lE,EAAL,CAEA,IAAIqC,EAAepoE,EAAEooE,aACrB,GAAInC,EACA,OAAQD,GACJ,IAAK,OAEG3kC,EADAA,EAAM8gC,SAAS4D,EAAWnG,IAAKmG,EAAWlG,QAClC,CACJ96B,MAAOghC,EACP/gC,IAAK+gC,GAGD5mE,EAAO+pE,SAAS7nC,EAAO0kC,GAEnC,MACJ,IAAK,OACD1kC,EAAQliC,EAAO+pE,SAAS7nC,EAAO0kC,GAAY,GAC3C,UAEL,CACH,IAAIoD,EAAWf,EAAavgD,QAAQ,QACpCwZ,EAAQ,CACJ0D,MAAOghC,EACP/gC,IAAK7lC,EAAO69D,QAAQ3S,OAAO0b,EAAYoD,IAE3ChqE,EAAOuI,QACPs+D,EAAgB,IACpB,CAEA,OADA8B,IACO5lC,EAAMG,eAAeriC,EA5BlB,CA6Bd,EAEAkiC,EAAMkxB,YAAYiT,EAAa,YAAaxpE,KAAKqnC,YAAY17B,KAAKk2D,IAClEx8B,EAAMkxB,YAAYiT,EAAa,UAAWxpE,KAAKogD,UAAUz0C,KAAKk2D,IAC9Dx8B,EAAMkxB,YAAYiT,EAAa,YAAaxpE,KAAK8rE,YAAYngE,KAAKk2D,IAClEx8B,EAAMkxB,YAAYiT,EAAa,WAAYxpE,KAAKisE,WAAWtgE,KAAKk2D,IAChEx8B,EAAMkxB,YAAYiT,EAAa,YAAaxpE,KAAKmsE,YAAYxgE,KAAKk2D,IAClEx8B,EAAMkxB,YAAYiT,EAAa,OAAQxpE,KAAKosE,OAAOzgE,KAAKk2D,IAgGxD,IAAIqK,EAAmB,KACvB,SAASlB,IACmB,MAApBkB,IACAA,EAAmBj8C,YAAW,WACF,MAApBi8C,GAA4BlD,GAC5BiC,GACR,GAAG,IAEX,CAEA,SAASc,EAAUR,GACf,IAAIthD,EAAQshD,EAAathD,MACzB,OAAQA,GAAS3oB,MAAM2G,UAAU25C,KAAKh9C,KAAKqlB,GAAO,SAASxoB,GACvD,MAAe,cAARA,GAAgC,QAARA,CACnC,GACJ,CAEA,SAASuqE,EAAc7oE,GACnB,IAAIopE,EAAc,CAAC,OAAQ,WAAY,MAAO,iBAC1CC,EAAc,CAAC,OAAQ,WAAY,WAAY,MAAO,iBAEtDC,EAAoBrW,EAAUrB,MAAQ5xD,EAAEwgD,OAASxgD,EAAEqmC,QACnDgiC,EAAgB,gBACpB,IACIA,EAAgBroE,EAAEooE,aAAaC,cAAczpD,aACjD,CAAE,MAAO5e,GAAI,CACb,IAAIyoE,EAAa,OASjB,OAPIa,GAAqBF,EAAY16D,QAAQ25D,IAAkB,EAC3DI,EAAa,OACRY,EAAY36D,QAAQ25D,IAAkB,EAC3CI,EAAa,OACRW,EAAY16D,QAAQ25D,IAAkB,IAC3CI,EAAa,QAEVA,CACX,CACJ,CAsFA,SAASnJ,EAAaC,EAAIC,EAAIC,EAAIC,GAC9B,OAAOh9C,KAAKoiB,KAAKpiB,KAAK0uC,IAAIqO,EAAKF,EAAI,GAAK78C,KAAK0uC,IAAIsO,EAAKF,EAAI,GAC9D,EAtFA,WAEI3iE,KAAK0sE,SAAW,WACZ,IAAIzoC,EAAW36B,KAAKknD,MAAQxwD,KAAKojE,eAAevrC,KAC5CoM,EAAWjkC,KAAKsC,OAAOqqE,gBACvB3sE,KAAK4sE,WACb,EAEA5sE,KAAK6sE,YAAc,WACf,IAAIzkE,EAASpI,KAAKsC,OAAO+E,UACzBe,EAAOkjE,WAAY,EACnBtrE,KAAK4jE,YAAY5jE,KAAKojE,eAAeD,uBACrCnjE,KAAK2kE,WACT,EAEA3kE,KAAK8sE,aAAe,SAAS3pE,GACzBnD,KAAKsC,OAAOo+D,SAASmK,aAAaC,aAAa9qE,KAAKsC,OAAO8oE,eAC3DprE,KAAKsC,OAAOyiE,WAAW,gBACvB/kE,KAAKsC,OAAOo+D,SAASmL,eAAe,IACpC7rE,KAAK6sE,aACT,EAEA7sE,KAAK4sE,UAAY,WACb5sE,KAAKqrE,YAAa,EAClB,IAAI/oE,EAAStC,KAAKsC,OACd8F,EAAS9F,EAAO+E,UACpBe,EAAOkjE,WAAY,EACnBhpE,EAAOo+D,SAASmK,aAAaC,aAAY,GACzCxoE,EAAO6hE,SAAS,gBAChB,IAAI4I,EAAc3W,EAAUjB,MAAQ,UAAY,OAChD7yD,EAAOo+D,SAASmL,eAAekB,GAC/B/sE,KAAK6jE,SAAS,YAClB,EAEA7jE,KAAKgtE,YAAc,SAAS7pE,GACxB,IAAIiF,EAASpI,KAAKsC,OAAO+E,UACzB,GAAI+uD,EAAUhB,MAAsB,aAAdp1D,KAAKm0C,MAAsB,CAC7C,IAAI+wB,EAAWzC,EAAaziE,KAAKojE,eAAep6C,EAAGhpB,KAAKojE,eAAer6D,EAAG/I,KAAKgpB,EAAGhpB,KAAK+I,GACnFm8D,EAAW,GACX98D,EAAO6kE,UACf,CACA,GAAmB,aAAfjtE,KAAKm0C,MAAsB,CACvB+wB,EAAWzC,EAAaziE,KAAKojE,eAAep6C,EAAGhpB,KAAKojE,eAAer6D,EAAG/I,KAAKgpB,EAAGhpB,KAAK+I,GACnFm8D,EAAW,IACX98D,EAAOkjE,WAAY,EACnBtrE,KAAK4jE,YAAY5jE,KAAKojE,eAAeD,uBAE7C,CACJ,EAEAnjE,KAAKgiE,YAAc,SAAS7+D,GACxB,GAAKnD,KAAKktE,aAAV,CAEAltE,KAAKojE,eAAiBjgE,EACtB,IAAIb,EAAStC,KAAKsC,OAEd4gE,EAAc//D,EAAE+/D,cAChB3qB,EAASp1C,EAAE0zD,YACXsW,EAAahqE,EAAE+9D,SAAS1I,QAAU,EACtC,GAAmB,IAAf2U,GAA+B,IAAX50B,GAAgB2qB,EAAa,CACjD,GAAI//D,EAAEb,OAAOohE,oBAAsBvgE,EAAEqiE,eAAiBriE,EAAE6gE,eACpD,OACJhkE,KAAKojE,eAAevrC,KAAOvuB,KAAKknD,MAChC,IAAI4c,EAAcjqE,EAAE+9D,SAAS94D,QAAUjF,EAAE+9D,SAAShe,WAGlD,GAFI,iBAAkBkqB,IAClBA,EAAYC,aAAe,MAC3B/qE,EAAOqqE,eAAgB,CACvB,GAAIvW,EAAUN,SAAU,CACpB91D,KAAKqrE,YAAa,EAClB,IAAI7B,EAAclnE,EAAO+E,UACzBmiE,EAAY8B,WAAY,CAC5B,CACAtrE,KAAK6jE,SAAS,WAClB,MACI7jE,KAAK4sE,YAET5sE,KAAK2jE,aAAaxgE,EAAGnD,KAAKgtE,YAAYrhE,KAAK3L,OAC3CmD,EAAE62D,kBAAmB,CACzB,CA1BU,CA2Bd,CAEH,GAAEp1D,KAAKikE,EAAgB5gE,WAOxBxC,EAAQojE,gBAAkBA,CAE1B,IAEA9gB,IAAImC,OAAO,cAAc,CAAC,UAAU,UAAU,SAAS,gBAAgB,SAASS,EAAUllD,EAASE,GACnG,aACA,IAAIo7B,EAAM4pB,EAAS,SAEnBllD,EAAQzC,IAAM,SAAU0Y,EAAKtL,GACzB,IAAIk9D,EAAM,IAAIC,eACdD,EAAIjqB,KAAK,MAAO3nC,GAAK,GACrB4xD,EAAIE,mBAAqB,WACE,IAAnBF,EAAIG,YACJr9D,EAASk9D,EAAII,aAErB,EACAJ,EAAIK,KAAK,KACb,EAEAloE,EAAQmoE,WAAa,SAAS7uD,EAAM3O,GAChC,IAAI4gD,EAAOjwB,EAAI+vB,kBACX5oD,EAAI/B,SAASM,cAAc,UAE/ByB,EAAE6gE,IAAMhqD,EACRiyC,EAAK1pD,YAAYY,GAEjBA,EAAE2lE,OAAS3lE,EAAEslE,mBAAqB,SAAS1gE,EAAGghE,IACtCA,GAAY5lE,EAAEulE,YAA8B,UAAhBvlE,EAAEulE,YAA0C,YAAhBvlE,EAAEulE,aAC1DvlE,EAAIA,EAAE2lE,OAAS3lE,EAAEslE,mBAAqB,KACjCM,GACD19D,IAEZ,CACJ,EACA3K,EAAQsoE,WAAa,SAASryD,GAC1B,IAAIrV,EAAIF,SAASM,cAAc,KAE/B,OADAJ,EAAEwZ,KAAOnE,EACFrV,EAAEwZ,IACb,CAEA,IAEAkoC,IAAImC,OAAO,wBAAwB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GAC/F,aAEA,IAAIqoE,EAAe,CAAC,EAChBnkC,EAAkB,WAAa7pC,KAAKyoE,oBAAqB,CAAM,EAC/DjjC,EAAiB,WAAaxlC,KAAKg6D,kBAAmB,CAAM,EAEhEgU,EAAa/M,MACb+M,EAAaC,eAAiB,SAASC,EAAW/qE,GAC9CnD,KAAKmuE,iBAAmBnuE,KAAKmuE,eAAiB,CAAC,GAC/CnuE,KAAKouE,mBAAqBpuE,KAAKouE,iBAAmB,CAAC,GAEnD,IAAIC,EAAYruE,KAAKmuE,eAAeD,IAAc,GAC9CI,EAAiBtuE,KAAKouE,iBAAiBF,GAC3C,GAAKG,EAAU3mE,QAAW4mE,EAA1B,CAGgB,iBAALnrE,GAAkBA,IACzBA,EAAI,CAAC,GAEJA,EAAE1B,OACH0B,EAAE1B,KAAOysE,GACR/qE,EAAE0mC,kBACH1mC,EAAE0mC,gBAAkBA,GACnB1mC,EAAEqiC,iBACHriC,EAAEqiC,eAAiBA,GAEvB6oC,EAAYA,EAAUthE,QACtB,IAAK,IAAIhH,EAAE,EAAGA,EAAEsoE,EAAU3mE,OAAQ3B,IAE9B,GADAsoE,EAAUtoE,GAAG5C,EAAGnD,MACZmD,EAAEslE,mBACF,MAGR,OAAI6F,IAAmBnrE,EAAE62D,iBACdsU,EAAenrE,EAAGnD,WAD7B,CAnBU,CAqBd,EAGAguE,EAAaO,QAAU,SAASL,EAAW/qE,GACvC,IAAIkrE,GAAaruE,KAAKmuE,gBAAkB,CAAC,GAAGD,GAC5C,GAAKG,EAAL,CAEAA,EAAYA,EAAUthE,QACtB,IAAK,IAAIhH,EAAE,EAAGA,EAAEsoE,EAAU3mE,OAAQ3B,IAC9BsoE,EAAUtoE,GAAG5C,EAAGnD,KAHV,CAId,EAEAguE,EAAaphE,KAAO,SAASshE,EAAW99D,GACpC,IAAIlQ,EAAQF,KACZoQ,GAAYpQ,KAAKyL,iBAAiByiE,GAAW,SAASM,IAClDtuE,EAAMwL,oBAAoBwiE,EAAWM,GACrCp+D,EAAS3G,MAAM,KAAMhC,UACzB,GACJ,EAGAumE,EAAajM,kBAAoB,SAASmM,EAAW99D,GACjD,IAAIq+D,EAAWzuE,KAAKouE,iBAIpB,GAHKK,IACDA,EAAWzuE,KAAKouE,iBAAmB,CAACM,WAAY,CAAC,IAEjDD,EAASP,GAAY,CACrB,IAAIS,EAAMF,EAASP,GACfvnC,EAAW8nC,EAASC,WAAWR,GAC9BvnC,IACD8nC,EAASC,WAAWR,GAAavnC,EAAW,IAChDA,EAASj6B,KAAKiiE,GACd,IAAI5oE,EAAI4gC,EAAS90B,QAAQzB,IACf,GAANrK,GACA4gC,EAASjiB,OAAO3e,EAAG,EAC3B,CACA0oE,EAASP,GAAa99D,CAC1B,EACA49D,EAAaY,qBAAuB,SAASV,EAAW99D,GACpD,IAAIq+D,EAAWzuE,KAAKouE,iBACpB,GAAKK,EAAL,CAEA,IAAI9nC,EAAW8nC,EAASC,WAAWR,GAEnC,GAAIO,EAASP,IAAc99D,EAAU,CACvBq+D,EAASP,GACfvnC,GACA3mC,KAAK+hE,kBAAkBmM,EAAWvnC,EAAStiB,MACnD,MAAO,GAAIsiB,EAAU,CACjB,IAAI5gC,EAAI4gC,EAAS90B,QAAQzB,IACf,GAANrK,GACA4gC,EAASjiB,OAAO3e,EAAG,EAC3B,CAXU,CAYd,EAEAioE,EAAaztE,GACbytE,EAAaviE,iBAAmB,SAASyiE,EAAW99D,EAAUy+D,GAC1D7uE,KAAKmuE,eAAiBnuE,KAAKmuE,gBAAkB,CAAC,EAE9C,IAAIE,EAAYruE,KAAKmuE,eAAeD,GAMpC,OALKG,IACDA,EAAYruE,KAAKmuE,eAAeD,GAAa,KAEb,GAAhCG,EAAUx8D,QAAQzB,IAClBi+D,EAAUQ,EAAY,UAAY,QAAQz+D,GACvCA,CACX,EAEA49D,EAAanhE,IACbmhE,EAAatX,eACbsX,EAAatiE,oBAAsB,SAASwiE,EAAW99D,GACnDpQ,KAAKmuE,eAAiBnuE,KAAKmuE,gBAAkB,CAAC,EAE9C,IAAIE,EAAYruE,KAAKmuE,eAAeD,GACpC,GAAKG,EAAL,CAGA,IAAI7xD,EAAQ6xD,EAAUx8D,QAAQzB,IACf,IAAXoM,GACA6xD,EAAU3pD,OAAOlI,EAAO,EAJlB,CAKd,EAEAwxD,EAAac,mBAAqB,SAASZ,GACnCluE,KAAKmuE,iBAAgBnuE,KAAKmuE,eAAeD,GAAa,GAC9D,EAEAzoE,EAAQuoE,aAAeA,CAEvB,IAEAjmB,IAAImC,OAAO,qBAAqB,CAAC,UAAU,UAAU,SAAS,cAAc,0BAA0B,SAASS,EAAUllD,EAASE,GAGlI,IAAIouD,EAAMpJ,EAAS,SACfqjB,EAAerjB,EAAS,mBAAmBqjB,aAE3Ce,EAAkB,CAClBC,WAAY,SAASC,GACjB5tE,OAAOsQ,KAAKs9D,GAAS/kE,SAAQ,SAASpB,GAClC9I,KAAKkvE,UAAUpmE,EAAKmmE,EAAQnmE,GAChC,GAAG9I,KACP,EACAmvE,WAAY,SAASC,GACjB,IAAIl3D,EAAS,CAAC,EAUd,OATKk3D,EAEO9tE,MAAMsS,QAAQw7D,KACtBl3D,EAASk3D,EACTA,EAAc/tE,OAAOsQ,KAAKuG,IAH1Bk3D,EAAc/tE,OAAOsQ,KAAK3R,KAAKiF,UAKnCmqE,EAAYllE,SAAQ,SAASpB,GACzBoP,EAAOpP,GAAO9I,KAAKqvE,UAAUvmE,EACjC,GAAG9I,MACIkY,CACX,EACAg3D,UAAW,SAAS18D,EAAMtR,GACtB,GAAIlB,KAAK,IAAMwS,KAAUtR,EAAzB,CAEA,IAAIouE,EAAMtvE,KAAKiF,SAASuN,GACxB,IAAK88D,EACD,OAAOhhE,EAAK,sBAAwBkE,EAAO,KAE/C,GAAI88D,EAAIC,UACJ,OAAOvvE,KAAKsvE,EAAIC,YAAcvvE,KAAKsvE,EAAIC,WAAWL,UAAU18D,EAAMtR,GAEjEouE,EAAIE,aACLxvE,KAAK,IAAMwS,GAAQtR,GACnBouE,GAAOA,EAAI5rE,KACX4rE,EAAI5rE,IAAIkB,KAAK5E,KAAMkB,EAXb,CAYd,EACAmuE,UAAW,SAAS78D,GAChB,IAAI88D,EAAMtvE,KAAKiF,SAASuN,GACxB,OAAK88D,EAGDA,EAAIC,UACGvvE,KAAKsvE,EAAIC,YAAcvvE,KAAKsvE,EAAIC,WAAWF,UAAU78D,GACzD88D,GAAOA,EAAItsE,IAAMssE,EAAItsE,IAAI4B,KAAK5E,MAAQA,KAAK,IAAMwS,GAJ7ClE,EAAK,sBAAwBkE,EAAO,IAKnD,GAGJ,SAASlE,EAAKC,GACY,oBAAXF,SAA0BA,QAAQC,MACzCD,QAAQC,KAAK7E,MAAM4E,QAAS5G,UACpC,CAEA,SAASgoE,EAAYC,EAAKrtE,GACtB,IAAIc,EAAI,IAAImF,MAAMonE,GAClBvsE,EAAEd,KAAOA,EACa,iBAAXgM,SAAuBA,QAAQ/N,OACtC+N,QAAQ/N,MAAM6C,GAClB8sB,YAAW,WAAa,MAAM9sB,CAAG,GACrC,CAEA,IAAIwsE,EAAY,WACZ3vE,KAAK4vE,gBAAkB,CAAC,CAC5B,GAEA,WACI7b,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAK6vE,cAAgB,SAASzuD,EAAKrC,EAAMjc,GAgBrC,OAfKse,EAAInc,WACLjF,KAAK4vE,gBAAgB7wD,GAAQqC,EAAInc,SAAW,CAAC,GAEjD5D,OAAOsQ,KAAK7O,GAASoH,SAAQ,SAASpB,GAClC,IAAIwmE,EAAMxsE,EAAQgG,GACA,iBAAPwmE,IACPA,EAAM,CAACC,UAAWD,IAEtBA,EAAI98D,OAAS88D,EAAI98D,KAAO1J,GACxBsY,EAAInc,SAASqqE,EAAI98D,MAAQ88D,EACrB,iBAAkBA,IAClBluD,EAAI,IAAMkuD,EAAI98D,MAAQ88D,EAAIQ,aAClC,IACA/b,EAAID,UAAU1yC,EAAK2tD,GAEZ/uE,IACX,EAEAA,KAAK+vE,aAAe,SAAS3uD,GACzB/f,OAAOsQ,KAAKyP,EAAInc,UAAUiF,SAAQ,SAASpB,GACvC,IAAIwmE,EAAMluD,EAAInc,SAAS6D,GACnB,UAAWwmE,GACXluD,EAAI8tD,UAAUpmE,EAAKwmE,EAAIpuE,MAC/B,GACJ,EAEAlB,KAAKgwE,gBAAkB,SAASjxD,EAAMvM,EAAMtR,GACxC,IAAI8T,EAAOhV,KAAK4vE,gBAAgB7wD,KAAU/e,KAAK4vE,gBAAgB7wD,GAAQ,CAAC,GACpE/J,EAAKxC,KACDwC,EAAKu6D,UACLvvE,KAAKgwE,gBAAgBh7D,EAAKu6D,UAAW/8D,EAAMtR,GAE3C8T,EAAKxC,GAAMtR,MAAQA,EAE/B,EAEAlB,KAAKiwE,iBAAmB,SAASlxD,EAAMmxD,GACnC7uE,OAAOsQ,KAAKu+D,GAAYhmE,SAAQ,SAASpB,GACrC9I,KAAKgwE,gBAAgBjxD,EAAMjW,EAAKonE,EAAWpnE,GAC/C,GAAG9I,KACP,EAEAA,KAAKsO,KAAOA,EACZtO,KAAKyvE,YAAcA,CAEtB,GAAE7qE,KAAK+qE,EAAU1nE,WAElBxC,EAAQkqE,UAAYA,CAEpB,IAEA5nB,IAAImC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,cAAc,uBAAuB,SAASS,EAAUllD,EAASE,GAGpJ,IAAI9E,EAAO8pD,EAAS,cAEhBwlB,GADMxlB,EAAS,aACTA,EAAS,cACfglB,EAAYhlB,EAAS,oBAAoBglB,UAE7ChqE,EAAOF,QAAUA,EAAU,IAAIkqE,EAE/B,IAAI9qD,EAAS,WACT,OAAO7kB,MAAyB,oBAAVgH,QAAyBA,MAClD,CAFY,GAITlE,EAAU,CACVmoD,UAAU,EACVmlB,WAAY,KACZC,SAAU,KACVC,UAAW,KACXC,SAAU,GACVC,OAAQ,MACRC,YAAa,CAAC,GAuFP,SAASC,EAAKzlB,GAErB,GAAKpmC,GAAWA,EAAO1e,SAAvB,CAGArD,EAAQmoD,SAAWA,GAAYN,EAASM,UAAYtlD,EAAOslD,UAAapmC,EAAOqlC,QAAU,EAAoB,IAAIe,SAQjH,IANA,IAAI0lB,EAAgB,CAAC,EACjBC,EAAY,GACZC,EAAiB1qE,SAAS0qE,eAAiB1qE,SAAS2qE,eACpDC,EAAkBF,GAAiBA,EAAczS,eAAiBj4D,SAElE6qE,EAAUD,EAAgB9f,qBAAqB,UAC1ClrD,EAAE,EAAGA,EAAEirE,EAAQtpE,OAAQ3B,IAAK,CACjC,IAAIkrE,EAASD,EAAQjrE,GAEjBgjE,EAAMkI,EAAOlI,KAAOkI,EAAOzqE,aAAa,OAC5C,GAAKuiE,EAAL,CAIA,IADA,IAAIx6B,EAAa0iC,EAAO1iC,WACf5rB,EAAE,EAAG9a,EAAE0mC,EAAW7mC,OAAQib,EAAI9a,EAAG8a,IAAK,CAC3C,IAAIuuD,EAAO3iC,EAAW5rB,GACiB,IAAnCuuD,EAAK1+D,KAAKX,QAAQ,eAClB8+D,EAAcQ,EAAYD,EAAK1+D,KAAKyM,QAAQ,aAAc,MAAQiyD,EAAKhwE,MAE/E,CAEA,IAAI0I,EAAIm/D,EAAI9mD,MAAM,gCACdrY,IACAgnE,EAAYhnE,EAAE,GAZN,CAahB,CAaA,IAAK,IAAId,KAXL8nE,IACAD,EAAc3rD,KAAO2rD,EAAc3rD,MAAQ4rD,EAC3CD,EAAc1lB,UAAW,GAG7B0lB,EAAcJ,SAAWI,EAAc3rD,KACvC2rD,EAAcP,WAAaO,EAAcP,YAAcO,EAAc3rD,KACrE2rD,EAAcN,SAAWM,EAAcN,UAAYM,EAAc3rD,KACjE2rD,EAAcL,UAAYK,EAAcL,WAAaK,EAAc3rD,YAC5D2rD,EAAc3rD,KAEL2rD,EACsB,qBAAvBA,EAAc7nE,IACrBrD,EAAQ/B,IAAIoF,EAAK6nE,EAAc7nE,GA3C7B,CA4Cd,CAIA,SAASqoE,EAAYt8D,GACjB,OAAOA,EAAIoK,QAAQ,SAAS,SAASrV,EAAGwnE,GAAM,OAAOA,EAAGC,aAAe,GAC3E,CAzIA5rE,EAAQzC,IAAM,SAAS8F,GACnB,IAAKhG,EAAQoK,eAAepE,GACxB,MAAM,IAAIR,MAAM,uBAAyBQ,GAE7C,OAAOhG,EAAQgG,EACnB,EAEArD,EAAQ/B,IAAM,SAASoF,EAAK5H,GACxB,IAAK4B,EAAQoK,eAAepE,GACxB,MAAM,IAAIR,MAAM,uBAAyBQ,GAE7ChG,EAAQgG,GAAO5H,CACnB,EAEAuE,EAAQ8wB,IAAM,WACV,OAAO11B,EAAK06D,WAAWz4D,EAC3B,EACA2C,EAAQ6rE,UAAY,SAAS9+D,EAAM7O,GAC/B,GAAIb,EAAQ2tE,YAAYj+D,GACpB,OAAO1P,EAAQ2tE,YAAYj+D,GAE/B,IAAIyL,EAAQzL,EAAK0L,MAAM,KACvBva,EAAYA,GAAasa,EAAMA,EAAMvW,OAAS,IAAM,GACpD,IAAI+gB,EAAmB,YAAb9kB,EAA0B,IAAM,IACtCqhB,EAAO/G,EAAMA,EAAMvW,OAAS,GAChC,GAAiB,UAAb/D,GAAgC,KAAP8kB,EAAY,CACrC,IAAI6nB,EAAK,IAAIr5B,OAAO,IAAMtT,EAAY,gBAAkBA,EAAY,IAAK,KACzEqhB,EAAOA,EAAK/F,QAAQqxB,EAAI,GAC5B,GAEMtrB,GAAQA,GAAQrhB,IAAcsa,EAAMvW,OAAS,IAC/Csd,EAAO/G,EAAMA,EAAMvW,OAAS,IAChC,IAAIqX,EAAOjc,EAAQa,EAAY,QAQ/B,OAPY,MAARob,EACAA,EAAOjc,EAAQytE,SACD,KAAP9nD,IACP9kB,EAAY8kB,EAAM,IAElB1J,GAA0B,KAAlBA,EAAKhS,OAAO,KACpBgS,GAAQ,KACLA,EAAOpb,EAAY8kB,EAAMzD,EAAOhlB,KAAKgD,IAAI,SACpD,EAEAyC,EAAQ8rE,aAAe,SAAS/+D,EAAMg/D,GAClC,OAAO1uE,EAAQ2tE,YAAYj+D,GAAQg/D,CACvC,EAEA/rE,EAAQgsE,SAAW,CAAC,EACpBhsE,EAAQisE,WAAa,SAAS5mB,EAAY6mB,GACtC,IAAIhsE,EAAQisE,EACRtwE,MAAMsS,QAAQk3C,KACd8mB,EAAa9mB,EAAW,GACxBA,EAAaA,EAAW,IAG5B,IACInlD,EAASglD,EAASG,EACtB,CAAE,MAAO3nD,GAAI,CACb,GAAIwC,IAAWF,EAAQgsE,SAAS3mB,GAC5B,OAAO6mB,GAAUA,EAAOhsE,GAO5B,GALKF,EAAQgsE,SAAS3mB,KAClBrlD,EAAQgsE,SAAS3mB,GAAc,IAEnCrlD,EAAQgsE,SAAS3mB,GAAYp+C,KAAKilE,KAE9BlsE,EAAQgsE,SAAS3mB,GAAYpjD,OAAS,GAA1C,CAGA,IAAImqE,EAAY,WACZlnB,EAAS,CAACG,IAAa,SAASnlD,GAC5BF,EAAQw7D,MAAM,cAAe,CAACzuD,KAAMs4C,EAAYnlD,OAAQA,IACxD,IAAI0oE,EAAY5oE,EAAQgsE,SAAS3mB,GACjCrlD,EAAQgsE,SAAS3mB,GAAc,KAC/BujB,EAAUnkE,SAAQ,SAASynE,GACvBA,GAAUA,EAAOhsE,EACrB,GACJ,GACJ,EAEA,IAAKF,EAAQzC,IAAI,YACb,OAAO6uE,IACX1B,EAAIvC,WAAWnoE,EAAQ6rE,UAAUxmB,EAAY8mB,GAAaC,EAfhD,CAgBd,EACAnB,GAAK,GAiDLjrE,EAAQirE,KAAOA,CAMf,IAEA3oB,IAAImC,OAAO,0BAA0B,CAAC,UAAU,UAAU,SAAS,gBAAgB,oBAAoB,6BAA6B,mCAAmC,wBAAwB,6BAA6B,eAAe,SAASS,EAAUllD,EAASE,GACvQ,aAEA,IAAI0/B,EAAQslB,EAAS,gBACjByL,EAAYzL,EAAS,oBACrBiX,EAAkBjX,EAAS,sBAAsBiX,gBACjDkQ,EAAuBnnB,EAAS,4BAA4B8b,cAC5D8B,EAAa5d,EAAS,iBAAiB4d,WACvCM,EAAkBle,EAAS,sBAAsBke,gBACjD55D,EAAS07C,EAAS,aAElBonB,EAAe,SAASzvE,GACxB,IAAIpC,EAAQF,KACZA,KAAKsC,OAASA,EAEd,IAAIs/D,EAAgB5hE,MACpB,IAAI8xE,EAAqB9xE,MACzB,IAAI6oE,EAAgB7oE,MAEpB,IAAIgyE,EAAc,SAAS7uE,GACvB,IAAI8uE,GAAiB9rE,SAAS+rE,WAAa/rE,SAAS+rE,aAC5C5vE,EAAO+6D,aAAel3D,SAASm3D,gBAAkBh7D,EAAOm/D,WAAan/D,EAAOm/D,UAAUZ,cAC1FoR,GACAjrE,OAAO6D,QACXvI,EAAOuI,OACX,EAEI2+D,EAAclnE,EAAOo+D,SAASyR,sBAClC9sC,EAAMkxB,YAAYiT,EAAa,QAASxpE,KAAKoyE,aAAazmE,KAAK3L,KAAM,UACrEqlC,EAAMkxB,YAAYiT,EAAa,YAAaxpE,KAAKgrE,YAAYr/D,KAAK3L,KAAM,cACxEqlC,EAAMozB,0BAA0B,CAC5B+Q,EACAlnE,EAAOo+D,SAAS2R,YAAc/vE,EAAOo+D,SAAS2R,WAAW9f,MACzDjwD,EAAOo+D,SAAS4R,YAAchwE,EAAOo+D,SAAS4R,WAAW/f,MACzDjwD,EAAOm/D,WAAan/D,EAAOm/D,UAAUZ,cACvCx9B,OAAO9hC,SAAU,CAAC,IAAK,IAAK,KAAMvB,KAAM,gBAC1CqlC,EAAMuyB,sBAAsBt1D,EAAO+E,UAAWrH,KAAKoiE,aAAaz2D,KAAK3L,KAAM,eAC3EqlC,EAAM6xB,qBAAqB50D,EAAO+E,UAAWrH,KAAKqiE,YAAY12D,KAAK3L,KAAM,cAEzE,IAAIuyE,EAAWjwE,EAAOo+D,SAASwH,QAC/B7iC,EAAMkxB,YAAYgc,EAAU,YAAavyE,KAAKoyE,aAAazmE,KAAK3L,KAAM,oBACtEqlC,EAAMkxB,YAAYgc,EAAU,QAASvyE,KAAKoyE,aAAazmE,KAAK3L,KAAM,gBAClEqlC,EAAMkxB,YAAYgc,EAAU,WAAYvyE,KAAKoyE,aAAazmE,KAAK3L,KAAM,mBACrEqlC,EAAMkxB,YAAYgc,EAAU,YAAavyE,KAAKoyE,aAAazmE,KAAK3L,KAAM,oBAEtEqlC,EAAMkxB,YAAYiT,EAAa,YAAawI,GAC5C3sC,EAAMkxB,YAAYgc,EAAU,YAAaP,GACrC5b,EAAUhB,MAAQ9yD,EAAOo+D,SAAS2R,aAClChtC,EAAMkxB,YAAYj0D,EAAOo+D,SAAS2R,WAAW7iC,QAAS,YAAawiC,GACnE3sC,EAAMkxB,YAAYj0D,EAAOo+D,SAAS4R,WAAW9iC,QAAS,YAAawiC,IAGvE1vE,EAAO/B,GAAG,aAAa,SAAS4C,GAC5B,IAAIjD,EAAMi0C,QAASj0C,EAAMsyE,YAAetyE,EAAMgtE,aAA9C,CAGA,IAAIuF,EAAYnwE,EAAOo+D,SAASqD,wBAAwB5gE,EAAE6lB,EAAG7lB,EAAE4F,GAC3Dy7B,EAAQliC,EAAO69D,QAAQl/B,UAAUq/B,WACjCI,EAAWp+D,EAAOo+D,UAEjBl8B,EAAMsa,WAAata,EAAMkuC,YAAYD,EAAU1P,IAAK0P,EAAUzP,QAC/DtC,EAASmL,eAAe,WAExBnL,EAASmL,eAAe,GATlB,CAWd,GACJ,GAEA,WACI7rE,KAAKoyE,aAAe,SAAS5/D,EAAMrP,GAC/BnD,KAAKsC,OAAO2+D,MAAMzuD,EAAM,IAAI+1D,EAAWplE,EAAGnD,KAAKsC,QACnD,EAEAtC,KAAKgrE,YAAc,SAASx4D,EAAMrP,GAC9B,IAAIkrE,EAAYruE,KAAKsC,OAAO6rE,gBAAkBnuE,KAAKsC,OAAO6rE,eAAe/lC,UACpEimC,GAAcA,EAAU3mE,QAG7B1H,KAAKsC,OAAO2+D,MAAMzuD,EAAM,IAAI+1D,EAAWplE,EAAGnD,KAAKsC,QACnD,EAEAtC,KAAKoiE,aAAe,SAAS5vD,EAAMrP,GAC/B,IAAIwjE,EAAa,IAAI4B,EAAWplE,EAAGnD,KAAKsC,QACxCqkE,EAAWf,MAA4B,EAApB5lE,KAAK2yE,aACxBhM,EAAWjP,OAASv0D,EAAEu0D,OACtBiP,EAAWhP,OAASx0D,EAAEw0D,OAEtB33D,KAAKsC,OAAO2+D,MAAMzuD,EAAMm0D,EAC5B,EAEA3mE,KAAKqiE,YAAc,SAAU7vD,EAAMrP,GAC/B,IAAIwjE,EAAa,IAAI4B,EAAWplE,EAAGnD,KAAKsC,QACxCqkE,EAAWf,MAAQ,EACnBe,EAAWjP,OAASv0D,EAAEu0D,OACtBiP,EAAWhP,OAASx0D,EAAEw0D,OACtB33D,KAAKsC,OAAO2+D,MAAMzuD,EAAMm0D,EAC5B,EAEA3mE,KAAK6jE,SAAW,SAAS1vB,GACrBn0C,KAAKm0C,MAAQA,CACjB,EAEAn0C,KAAK2jE,aAAe,SAASV,EAAI2P,GAC7B5yE,KAAKgpB,EAAIi6C,EAAGj6C,EACZhpB,KAAK+I,EAAIk6D,EAAGl6D,EAEZ/I,KAAKioE,gBAAiB,EACtB,IAAIvH,EAAW1gE,KAAKsC,OAAOo+D,SACvBA,EAASC,wBACTD,EAASC,sBAAwB,MAErC,IAAI99D,EAAO7C,KACPgrE,EAAc,SAAS7nE,GACvB,GAAKA,EAAL,CACA,GAAIizD,EAAUN,WAAa3yD,EAAEmmC,OAASzmC,EAAKgwE,aACvC,OAAOhwE,EAAKgwE,eAEhBhwE,EAAKmmB,EAAI7lB,EAAEo0D,QACX10D,EAAKkG,EAAI5F,EAAEq0D,QACXob,GAAoBA,EAAiBzvE,GACrCN,EAAK8jE,WAAa,IAAI4B,EAAWplE,EAAGN,EAAKP,QACzCO,EAAKiwE,aAAc,CARL,CASlB,EAEIC,EAAe,SAAS5vE,GACxB4nE,cAAc9B,GACd+J,IACAnwE,EAAKA,EAAKsxC,MAAQ,QAAUtxC,EAAKA,EAAKsxC,MAAQ,OAAOhxC,GACrDN,EAAKsxC,MAAQ,GACyB,MAAlCusB,EAASC,wBACTD,EAASC,uBAAwB,EACjCD,EAASE,yBAEb/9D,EAAKolE,gBAAiB,EACtBplE,EAAKowE,oBAAsBpwE,EAAKgwE,aAAe,KAC/C1vE,GAAKN,EAAKuvE,aAAa,UAAWjvE,EACtC,EAEI6vE,EAAoB,WACpBnwE,EAAKA,EAAKsxC,QAAUtxC,EAAKA,EAAKsxC,SAC9BtxC,EAAKiwE,aAAc,CACvB,EAEA,GAAI1c,EAAUf,SAA+B,YAApB4N,EAAG/B,SAASz/D,KACjC,OAAOwuB,YAAW,WAAY8iD,EAAa9P,EAAI,IAGnDpgE,EAAKowE,oBAAsBjI,EAC3BnoE,EAAKgwE,aAAextC,EAAMyxB,QAAQ92D,KAAKsC,OAAO+E,UAAW2jE,EAAa+H,GACtE,IAAI9J,EAAU5kC,YAAY2uC,EAAmB,GACjD,EACAhzE,KAAK6yE,aAAe,KACpB7yE,KAAKkzE,kBAAoB,WACrB,IAAIpN,EAAO,SAAS3iE,GACZA,GAAKA,EAAE+9D,UAA+B,eAAnB/9D,EAAE+9D,SAASz/D,OAElCzB,KAAKsC,OAAOuK,IAAI,oBAAqBi5D,GACjC3iE,GAAKA,EAAE+9D,UACP77B,EAAMsxB,UAAUxzD,EAAE+9D,UAC1B,EAAEv1D,KAAK3L,MACPiwB,WAAW61C,EAAM,IACjB9lE,KAAKsC,OAAO/B,GAAG,oBAAqBulE,EACxC,CACH,GAAElhE,KAAKmtE,EAAa9pE,WAErBgH,EAAO4gE,cAAckC,EAAa9pE,UAAW,eAAgB,CACzDkrE,YAAa,CAACrD,aAAc,GAC5BsD,UAAW,CAACtD,aAAe1Z,EAAUrB,MAAQ,IAAM,GACnDse,YAAa,CAACvD,cAAc,GAC5BwD,YAAa,CAACxD,aAAc,GAC5ByD,oBAAqB,CAACzD,cAAc,KAIxCrqE,EAAQssE,aAAeA,CACvB,IAEAhqB,IAAImC,OAAO,yBAAyB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GAChG,aAEA,SAAS6tE,EAAYlxE,GAEjBA,EAAO/B,GAAG,SAAS,SAAS4C,GACxB,IAAI4D,EAAW5D,EAAEggE,sBACbhD,EAAU79D,EAAO69D,QACjBsT,EAAOtT,EAAQuT,UAAU3sE,EAASg8D,IAAKh8D,EAASi8D,OAAQ,GACxDyQ,IACItwE,EAAEqiE,cACFrF,EAAQwT,WAAWF,GAEnBtT,EAAQyT,WAAWH,GAEvBtwE,EAAE2iE,OAEV,IAEAxjE,EAAO/B,GAAG,eAAe,SAAS4C,GAC9B,IAAI2kE,EAAexlE,EAAOo+D,SAASoG,aAAaiB,UAAU5kE,GAE1D,GAAoB,eAAhB2kE,EAA+B,CAC/B,IAAI/E,EAAM5/D,EAAEggE,sBAAsBJ,IAC9B5C,EAAU79D,EAAO69D,QACjBA,EAAQ0T,aAAe1T,EAAQ0T,YAAY9Q,IAC3CzgE,EAAO69D,QAAQ2T,kBAAkB/Q,EAAK5/D,GACrCb,EAAO+6D,aACR/6D,EAAOuI,QACX1H,EAAE2iE,MACN,CACJ,IAEAxjE,EAAO/B,GAAG,kBAAkB,SAAS4C,GACjC,IAAI2kE,EAAexlE,EAAOo+D,SAASoG,aAAaiB,UAAU5kE,GAE1D,GAAoB,eAAhB2kE,EAA+B,CAC/B,IAAI/E,EAAM5/D,EAAEggE,sBAAsBJ,IAC9B5C,EAAU79D,EAAO69D,QACjB99D,EAAO89D,EAAQ4T,uBAAuBhR,GAAK,GAC3Cv+B,EAAQniC,EAAKmiC,OAASniC,EAAK2xE,WAE/B,GAAIxvC,EAAO,CACPu+B,EAAMv+B,EAAM0D,MAAM66B,IAClB,IAAI0Q,EAAOtT,EAAQuT,UAAU3Q,EAAK5C,EAAQ8T,QAAQlR,GAAKr7D,OAAQ,GAE3D+rE,EACAtT,EAAQwT,WAAWF,IAEnBtT,EAAQ+T,QAAQ,MAAO1vC,GACvBliC,EAAOo+D,SAAS6D,qBAAqB,CAACxB,IAAKv+B,EAAM0D,MAAM66B,IAAKC,OAAQ,IAE5E,CACA7/D,EAAE2iE,MACN,CACJ,GACJ,CAEArgE,EAAQ+tE,YAAcA,CAEtB,IAEAzrB,IAAImC,OAAO,0BAA0B,CAAC,UAAU,UAAU,SAAS,eAAe,kBAAkB,SAASS,EAAUllD,EAASE,GAChI,aAEA,IAAIwuE,EAAWxpB,EAAS,eACpBtlB,EAAQslB,EAAS,gBAEjBypB,EAAa,SAAS9xE,GACtBtC,KAAKq0E,QAAU/xE,EACftC,KAAKssB,MAAQ,CAAChqB,OAAQA,GACtBtC,KAAKs0E,UAAY,GACjBt0E,KAAK+hE,kBAAkBz/D,EAAO+mD,SAClC,GAEA,WACIrpD,KAAK+hE,kBAAoB,SAASwS,GAC9Bv0E,KAAKw0E,sBAAsBx0E,KAAKy0E,iBAChCz0E,KAAKy0E,gBAAkBF,EACvBv0E,KAAK00E,mBAAmBH,EAAI,EAChC,EAEAv0E,KAAK20E,mBAAqB,SAASJ,GAC/B,IAAIlvE,EAAIrF,KAAKs0E,UACb,GAAIjvE,EAAEA,EAAEqC,OAAS,IAAM6sE,EAAvB,CAGA,MAAOlvE,EAAEA,EAAEqC,OAAS,IAAMrC,EAAEA,EAAEqC,OAAS,IAAM1H,KAAKy0E,gBAC9Cz0E,KAAKw0E,sBAAsBnvE,EAAEA,EAAEqC,OAAS,IAE5C1H,KAAK00E,mBAAmBH,EAAI,EALlB,CAMd,EAEAv0E,KAAK00E,mBAAqB,SAASH,EAAIlpD,GACnC,GAAKkpD,EAAL,CAEiB,mBAANA,GAAqBA,EAAGK,iBAC/BL,EAAGK,eAAiBL,GACxB,IAAIxuE,EAAI/F,KAAKs0E,UAAUziE,QAAQ0iE,IACrB,GAANxuE,GACA/F,KAAKs0E,UAAU5vD,OAAO3e,EAAG,QAElBoK,GAAPkb,EACArrB,KAAKs0E,UAAU5nE,KAAK6nE,GAEpBv0E,KAAKs0E,UAAU5vD,OAAO2G,EAAK,EAAGkpD,IAExB,GAANxuE,GAAWwuE,EAAGM,QACdN,EAAGM,OAAO70E,KAAKq0E,QAbT,CAcd,EAEAr0E,KAAKw0E,sBAAwB,SAASD,GAClC,IAAIxuE,EAAI/F,KAAKs0E,UAAUziE,QAAQ0iE,GAC/B,OAAU,GAANxuE,IAEJ/F,KAAKs0E,UAAU5vD,OAAO3e,EAAG,GACzBwuE,EAAGO,QAAUP,EAAGO,OAAO90E,KAAKq0E,UACrB,EACX,EAEAr0E,KAAK+0E,mBAAqB,WACtB,OAAO/0E,KAAKs0E,UAAUt0E,KAAKs0E,UAAU5sE,OAAS,EAClD,EAEA1H,KAAKg1E,cAAgB,WACjB,IAAI3yE,EAAOrC,KAAKssB,MACZhqB,EAASD,EAAKC,OAClB,OAAOtC,KAAKs0E,UAAUzoE,KAAI,SAASxG,GAC/B,OAAOA,EAAE2vE,eAAiB3vE,EAAE2vE,cAAc1yE,EAAQD,IAAS,EAC/D,IAAGghC,OAAO9hC,SAAS2hB,KAAK,IAC5B,EAEAljB,KAAKi1E,sBAAwB,SAASxb,EAAQhF,EAAWlrB,EAASpmC,GAK9D,IAJA,IAAI+xE,EACAC,GAAU,EACV9rB,EAAWrpD,KAAKq0E,QAAQhrB,SAEnBtjD,EAAI/F,KAAKs0E,UAAU5sE,OAAQ3B,KAIhC,GAHAmvE,EAAYl1E,KAAKs0E,UAAUvuE,GAAG6uE,eAC1B50E,KAAKssB,MAAOmtC,EAAQhF,EAAWlrB,EAASpmC,GAEvC+xE,GAAcA,EAAUE,UAGzBD,EADqB,QAArBD,EAAUE,SAGA/rB,EAASxnC,KAAKqzD,EAAUE,QAASp1E,KAAKq0E,QAASa,EAAUx/C,KAAMvyB,GAEzEgyE,GAAWhyE,IAAgB,GAAXs2D,GACO,GAAvByb,EAAUG,WAAoD,GAA/BH,EAAUE,QAAQC,WAEjDhwC,EAAMsxB,UAAUxzD,GAEhBgyE,GACA,MAWR,OARKA,IAAsB,GAAX1b,IACZyb,EAAY,CAACE,QAAS,gBACtBD,EAAU9rB,EAASxnC,KAAK,eAAgB7hB,KAAKq0E,QAAS5f,IAGtD0gB,GACAn1E,KAAKq0E,QAAQ9F,QAAQ,mBAAoB2G,GAEtCC,CACX,EAEAn1E,KAAKggE,aAAe,SAAS78D,EAAGs2D,EAAQlwB,GACpC,IAAIkrB,EAAY0f,EAAQ3f,gBAAgBjrB,GACxCvpC,KAAKi1E,sBAAsBxb,EAAQhF,EAAWlrB,EAASpmC,EAC3D,EAEAnD,KAAKq/D,YAAc,SAASh3D,GACxBrI,KAAKi1E,uBAAuB,EAAG5sE,EACnC,CAEH,GAAEzD,KAAKwvE,EAAWnsE,WAEnBxC,EAAQ2uE,WAAaA,CACrB,IAEArsB,IAAImC,OAAO,YAAY,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACnF,aACA,IAAI2vE,EAAgB,SAASC,EAAIC,GAC7B,OAAOD,EAAGxS,IAAMyS,EAAGzS,KAAOwS,EAAGvS,OAASwS,EAAGxS,MAC7C,EACIyS,EAAQ,SAASC,EAAUC,EAAaC,EAAQC,GAChD71E,KAAKkoC,MAAQ,CACT66B,IAAK2S,EACL1S,OAAQ2S,GAGZ31E,KAAKmoC,IAAM,CACP46B,IAAK6S,EACL5S,OAAQ6S,EAEhB,GAEA,WACI71E,KAAK81E,QAAU,SAAStxC,GACpB,OAAOxkC,KAAKkoC,MAAM66B,MAAQv+B,EAAM0D,MAAM66B,KAClC/iE,KAAKmoC,IAAI46B,MAAQv+B,EAAM2D,IAAI46B,KAC3B/iE,KAAKkoC,MAAM86B,SAAWx+B,EAAM0D,MAAM86B,QAClChjE,KAAKmoC,IAAI66B,SAAWx+B,EAAM2D,IAAI66B,MACtC,EACAhjE,KAAKuJ,SAAW,WACZ,MAAQ,WAAavJ,KAAKkoC,MAAM66B,IAAM,IAAM/iE,KAAKkoC,MAAM86B,OACnD,SAAWhjE,KAAKmoC,IAAI46B,IAAM,IAAM/iE,KAAKmoC,IAAI66B,OAAS,GAC1D,EAEAhjE,KAAKslE,SAAW,SAASvC,EAAKC,GAC1B,OAAoC,GAA7BhjE,KAAKy3B,QAAQsrC,EAAKC,EAC7B,EACAhjE,KAAK+1E,aAAe,SAASvxC,GACzB,IAAI5X,EACAub,EAAM3D,EAAM2D,IACZD,EAAQ1D,EAAM0D,MAGlB,OADAtb,EAAM5sB,KAAKy3B,QAAQ0Q,EAAI46B,IAAK56B,EAAI66B,QACrB,GAAPp2C,GACAA,EAAM5sB,KAAKy3B,QAAQyQ,EAAM66B,IAAK76B,EAAM86B,QACzB,GAAPp2C,EACO,EACO,GAAPA,EACA,EAEA,IAEI,GAARA,GACC,GAERA,EAAM5sB,KAAKy3B,QAAQyQ,EAAM66B,IAAK76B,EAAM86B,SACxB,GAARp2C,GACQ,EACM,GAAPA,EACA,GAEA,EAGnB,EACA5sB,KAAKokE,aAAe,SAAS37D,GACzB,OAAOzI,KAAKy3B,QAAQhvB,EAAEs6D,IAAKt6D,EAAEu6D,OACjC,EACAhjE,KAAKg2E,cAAgB,SAASxxC,GAC1B,OAAyC,GAAlCxkC,KAAKokE,aAAa5/B,EAAM0D,QAA+C,GAAhCloC,KAAKokE,aAAa5/B,EAAM2D,IAC1E,EACAnoC,KAAKi2E,WAAa,SAASzxC,GACvB,IAAI5X,EAAM5sB,KAAK+1E,aAAavxC,GAC5B,OAAgB,GAAR5X,GAAoB,GAAPA,GAAmB,GAAPA,CACrC,EACA5sB,KAAKk2E,MAAQ,SAASnT,EAAKC,GACvB,OAAOhjE,KAAKmoC,IAAI46B,KAAOA,GAAO/iE,KAAKmoC,IAAI66B,QAAUA,CACrD,EACAhjE,KAAKm2E,QAAU,SAASpT,EAAKC,GACzB,OAAOhjE,KAAKkoC,MAAM66B,KAAOA,GAAO/iE,KAAKkoC,MAAM86B,QAAUA,CACzD,EACAhjE,KAAKqvC,SAAW,SAAS0zB,EAAKC,GACR,iBAAPD,GACP/iE,KAAKkoC,MAAM86B,OAASD,EAAIC,OACxBhjE,KAAKkoC,MAAM66B,IAAMA,EAAIA,MAErB/iE,KAAKkoC,MAAM66B,IAAMA,EACjB/iE,KAAKkoC,MAAM86B,OAASA,EAE5B,EACAhjE,KAAKsvC,OAAS,SAASyzB,EAAKC,GACN,iBAAPD,GACP/iE,KAAKmoC,IAAI66B,OAASD,EAAIC,OACtBhjE,KAAKmoC,IAAI46B,IAAMA,EAAIA,MAEnB/iE,KAAKmoC,IAAI46B,IAAMA,EACf/iE,KAAKmoC,IAAI66B,OAASA,EAE1B,EACAhjE,KAAKo2E,OAAS,SAASrT,EAAKC,GACxB,OAAiC,GAA7BhjE,KAAKy3B,QAAQsrC,EAAKC,MACdhjE,KAAKk2E,MAAMnT,EAAKC,KAAWhjE,KAAKm2E,QAAQpT,EAAKC,GAOzD,EACAhjE,KAAK0yE,YAAc,SAAS3P,EAAKC,GAC7B,OAAiC,GAA7BhjE,KAAKy3B,QAAQsrC,EAAKC,KACdhjE,KAAKk2E,MAAMnT,EAAKC,EAO5B,EACAhjE,KAAKq2E,UAAY,SAAStT,EAAKC,GAC3B,OAAiC,GAA7BhjE,KAAKy3B,QAAQsrC,EAAKC,KACdhjE,KAAKm2E,QAAQpT,EAAKC,EAO9B,EACAhjE,KAAKy3B,QAAU,SAASsrC,EAAKC,GACzB,OAAKhjE,KAAKqlE,eACFtC,IAAQ/iE,KAAKkoC,MAAM66B,IAKvBA,EAAM/iE,KAAKkoC,MAAM66B,KACT,EAERA,EAAM/iE,KAAKmoC,IAAI46B,IACR,EAEP/iE,KAAKkoC,MAAM66B,MAAQA,EACZC,GAAUhjE,KAAKkoC,MAAM86B,OAAS,GAAK,EAE1ChjE,KAAKmoC,IAAI46B,MAAQA,EACVC,GAAUhjE,KAAKmoC,IAAI66B,OAAS,EAAI,EAEpC,EAhBQA,EAAShjE,KAAKkoC,MAAM86B,QAAU,EAAKA,EAAShjE,KAAKmoC,IAAI66B,OAAS,EAAI,CAiBrF,EACAhjE,KAAKs2E,aAAe,SAASvT,EAAKC,GAC9B,OAAIhjE,KAAKkoC,MAAM66B,KAAOA,GAAO/iE,KAAKkoC,MAAM86B,QAAUA,GACtC,EAEDhjE,KAAKy3B,QAAQsrC,EAAKC,EAEjC,EACAhjE,KAAKu2E,WAAa,SAASxT,EAAKC,GAC5B,OAAIhjE,KAAKmoC,IAAI46B,KAAOA,GAAO/iE,KAAKmoC,IAAI66B,QAAUA,EACnC,EAEAhjE,KAAKy3B,QAAQsrC,EAAKC,EAEjC,EACAhjE,KAAKw2E,cAAgB,SAASzT,EAAKC,GAC/B,OAAIhjE,KAAKmoC,IAAI46B,KAAOA,GAAO/iE,KAAKmoC,IAAI66B,QAAUA,EACnC,EACAhjE,KAAKkoC,MAAM66B,KAAOA,GAAO/iE,KAAKkoC,MAAM86B,QAAUA,GAC7C,EAEDhjE,KAAKy3B,QAAQsrC,EAAKC,EAEjC,EACAhjE,KAAKy2E,SAAW,SAASC,EAAUC,GAC/B,GAAI32E,KAAKmoC,IAAI46B,IAAM4T,EACf,IAAIxuC,EAAM,CAAC46B,IAAK4T,EAAU,EAAG3T,OAAQ,QACpC,GAAIhjE,KAAKmoC,IAAI46B,IAAM2T,EAChBvuC,EAAM,CAAC46B,IAAK2T,EAAU1T,OAAQ,GAEtC,GAAIhjE,KAAKkoC,MAAM66B,IAAM4T,EACjB,IAAIzuC,EAAQ,CAAC66B,IAAK4T,EAAU,EAAG3T,OAAQ,QACtC,GAAIhjE,KAAKkoC,MAAM66B,IAAM2T,EAClBxuC,EAAQ,CAAC66B,IAAK2T,EAAU1T,OAAQ,GAExC,OAAOyS,EAAMmB,WAAW1uC,GAASloC,KAAKkoC,MAAOC,GAAOnoC,KAAKmoC,IAC7D,EACAnoC,KAAK0S,OAAS,SAASqwD,EAAKC,GACxB,IAAIp2C,EAAM5sB,KAAKy3B,QAAQsrC,EAAKC,GAE5B,GAAW,GAAPp2C,EACA,OAAO5sB,KACN,IAAY,GAAR4sB,EACL,IAAIsb,EAAQ,CAAC66B,IAAKA,EAAKC,OAAQA,QAE/B,IAAI76B,EAAM,CAAC46B,IAAKA,EAAKC,OAAQA,GAEjC,OAAOyS,EAAMmB,WAAW1uC,GAASloC,KAAKkoC,MAAOC,GAAOnoC,KAAKmoC,IAC7D,EAEAnoC,KAAK8+C,QAAU,WACX,OAAQ9+C,KAAKkoC,MAAM66B,MAAQ/iE,KAAKmoC,IAAI46B,KAAO/iE,KAAKkoC,MAAM86B,SAAWhjE,KAAKmoC,IAAI66B,MAC9E,EACAhjE,KAAKqlE,YAAc,WACf,OAAQrlE,KAAKkoC,MAAM66B,MAAQ/iE,KAAKmoC,IAAI46B,GACxC,EACA/iE,KAAKw8C,MAAQ,WACT,OAAOi5B,EAAMmB,WAAW52E,KAAKkoC,MAAOloC,KAAKmoC,IAC7C,EACAnoC,KAAK62E,aAAe,WAChB,OAAuB,GAAnB72E,KAAKmoC,IAAI66B,OACF,IAAIyS,EAAMz1E,KAAKkoC,MAAM66B,IAAK,EAAGl9C,KAAKkf,IAAI/kC,KAAKkoC,MAAM66B,IAAK/iE,KAAKmoC,IAAI46B,IAAI,GAAI,GAEvE,IAAI0S,EAAMz1E,KAAKkoC,MAAM66B,IAAK,EAAG/iE,KAAKmoC,IAAI46B,IAAK,EAC1D,EACA/iE,KAAK82E,cAAgB,SAAS3W,GAC1B,IAAI4W,EAAiB5W,EAAQ6W,yBAAyBh3E,KAAKkoC,OACvD+uC,EAAe9W,EAAQ6W,yBAAyBh3E,KAAKmoC,KAEzD,OAAO,IAAIstC,EACPsB,EAAehU,IAAKgU,EAAe/T,OACnCiU,EAAalU,IAAKkU,EAAajU,OAEvC,EACAhjE,KAAKk3E,OAAS,SAASnU,EAAKC,GACxBhjE,KAAKkoC,MAAM66B,KAAOA,EAClB/iE,KAAKkoC,MAAM86B,QAAUA,EACrBhjE,KAAKmoC,IAAI46B,KAAOA,EAChB/iE,KAAKmoC,IAAI66B,QAAUA,CACvB,CAEH,GAAEp+D,KAAK6wE,EAAMxtE,WACdwtE,EAAMmB,WAAa,SAAS1uC,EAAOC,GAC/B,OAAO,IAAIstC,EAAMvtC,EAAM66B,IAAK76B,EAAM86B,OAAQ76B,EAAI46B,IAAK56B,EAAI66B,OAC3D,EACAyS,EAAMH,cAAgBA,EAEtBG,EAAMH,cAAgB,SAASC,EAAIC,GAC/B,OAAOD,EAAGxS,IAAMyS,EAAGzS,KAAOwS,EAAGvS,OAASwS,EAAGxS,MAC7C,EAGAv9D,EAAQgwE,MAAQA,CAChB,IAEA1tB,IAAImC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,wBAAwB,cAAc,SAASS,EAAUllD,EAASE,GACxJ,aAEA,IAAIouD,EAAMpJ,EAAS,aACf9pD,EAAO8pD,EAAS,cAChBqjB,EAAerjB,EAAS,uBAAuBqjB,aAC/CyH,EAAQ9qB,EAAS,WAAW8qB,MAC5B0B,EAAY,SAAShX,GACrBngE,KAAKmgE,QAAUA,EACfngE,KAAK+wD,IAAMoP,EAAQiX,cAEnBp3E,KAAK4K,iBACL5K,KAAKq3E,KAAOr3E,KAAKs3E,cAAgBt3E,KAAK+wD,IAAIwmB,aAAa,EAAG,GAC1Dv3E,KAAKkqC,OAASlqC,KAAKw3E,gBAAkBx3E,KAAK+wD,IAAIwmB,aAAa,EAAG,GAE9D,IAAI10E,EAAO7C,KACXA,KAAKq3E,KAAK92E,GAAG,UAAU,SAAS4C,GAC5BN,EAAKo+D,MAAM,gBACNp+D,EAAK40E,UACN50E,EAAKo+D,MAAM,mBACVp+D,EAAK60E,4BAA8Bv0E,EAAEwrE,IAAI3L,QAAU7/D,EAAEjC,MAAM8hE,SAC5DngE,EAAK80E,eAAiB,KAC9B,IAEA33E,KAAKw3E,gBAAgBj3E,GAAG,UAAU,WACzBsC,EAAK40E,UACN50E,EAAKo+D,MAAM,kBACnB,GACJ,GAEA,WAEIlN,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAK8+C,QAAU,WACX,OAAQ9+C,KAAKy3E,UACTz3E,KAAKkqC,OAAO64B,KAAO/iE,KAAKq3E,KAAKtU,KAC7B/iE,KAAKkqC,OAAO84B,QAAUhjE,KAAKq3E,KAAKrU,MAExC,EACAhjE,KAAKqlE,YAAc,WACf,OAAIrlE,KAAK8+C,WAIF9+C,KAAKsgE,WAAW+E,aAC3B,EACArlE,KAAK43E,UAAY,WACb,OAAO53E,KAAKq3E,KAAKQ,aACrB,EACA73E,KAAKskE,mBAAqB,SAASvB,EAAKC,GACpChjE,KAAKkqC,OAAOm8B,YAAYtD,EAAKC,GAEzBhjE,KAAKy3E,WACLz3E,KAAKy3E,UAAW,EAChBz3E,KAAKihE,MAAM,mBAEnB,EACAjhE,KAAK83E,mBAAqB,WACtB,OAAI93E,KAAKy3E,SACEz3E,KAAK+3E,mBAEL/3E,KAAKkqC,OAAO2tC,aAC3B,EACA73E,KAAK+3E,iBAAmB,WACpB,OAAO/3E,KAAKq3E,KAAKQ,aACrB,EACA73E,KAAKg4E,eAAiB,SAASC,GAC3B,GAAIj4E,KAAKy3E,SACLz3E,KAAKk4E,aAAal4E,KAAKq3E,KAAKtU,IAAK/iE,KAAKq3E,KAAKrU,OAASiV,OADxD,CAKA,IAAI/tC,EAASlqC,KAAK83E,qBACdT,EAAOr3E,KAAK+3E,mBAEZI,EAAcn4E,KAAKm4E,cAElBA,GAAiC,IAAlBjuC,EAAO84B,QACvBhjE,KAAKskE,mBAAmBp6B,EAAO64B,IAAK74B,EAAO84B,OAASiV,IAEpDE,GAA+B,IAAhBd,EAAKrU,SACpBhjE,KAAKo4E,gBAAe,WAChBp4E,KAAKk4E,aAAab,EAAKtU,IAAKsU,EAAKrU,OAASiV,EAC9C,GAbJ,CAeJ,EACAj4E,KAAKm4E,YAAc,WACf,IAAIjuC,EAASlqC,KAAKkqC,OACdmtC,EAAOr3E,KAAKq3E,KAChB,OAAQntC,EAAO64B,IAAMsU,EAAKtU,KAAQ74B,EAAO64B,KAAOsU,EAAKtU,KAAO74B,EAAO84B,OAASqU,EAAKrU,MACrF,EACAhjE,KAAKsgE,SAAW,WACZ,IAAIp2B,EAASlqC,KAAKkqC,OACdmtC,EAAOr3E,KAAKq3E,KAEhB,OAAIr3E,KAAK8+C,UACE22B,EAAMmB,WAAWS,EAAMA,GAE9Br3E,KAAKm4E,cACE1C,EAAMmB,WAAWS,EAAMntC,GAGvBurC,EAAMmB,WAAW1sC,EAAQmtC,EAExC,EACAr3E,KAAK4K,eAAiB,WACb5K,KAAKy3E,WACNz3E,KAAKy3E,UAAW,EAChBz3E,KAAKihE,MAAM,mBAEnB,EACAjhE,KAAK++D,UAAY,WACb,IAAI4X,EAAU32E,KAAK+wD,IAAIuW,YAAc,EACrCtnE,KAAKskE,mBAAmB,EAAG,GAC3BtkE,KAAKk4E,aAAavB,EAAS32E,KAAK+wD,IAAIkjB,QAAQ0C,GAASjvE,OACzD,EACA1H,KAAKugE,SACLvgE,KAAKqM,kBAAoB,SAASm4B,EAAO22B,GACjCA,GACAn7D,KAAKskE,mBAAmB9/B,EAAM2D,IAAI46B,IAAKv+B,EAAM2D,IAAI66B,QACjDhjE,KAAKgoE,SAASxjC,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,UAE3ChjE,KAAKskE,mBAAmB9/B,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,QACrDhjE,KAAKgoE,SAASxjC,EAAM2D,IAAI46B,IAAKv+B,EAAM2D,IAAI66B,SAEvChjE,KAAKsgE,WAAWxhB,YAChB9+C,KAAKy3E,UAAW,GACpBz3E,KAAK23E,eAAiB,IAC1B,EAEA33E,KAAKo4E,eAAiB,SAASC,GAC3B,IAAIhB,EAAOr3E,KAAKq3E,KACZr3E,KAAKy3E,UACLz3E,KAAKskE,mBAAmB+S,EAAKtU,IAAKsU,EAAKrU,QAE3CqV,EAAMzzE,KAAK5E,KACf,EACAA,KAAKgoE,SAAW,SAASjF,EAAKC,GAC1BhjE,KAAKo4E,gBAAe,WAChBp4E,KAAKk4E,aAAanV,EAAKC,EAC3B,GACJ,EACAhjE,KAAKikE,iBAAmB,SAAS54C,GAC7BrrB,KAAKo4E,gBAAe,WAChBp4E,KAAK4pE,qBAAqBv+C,EAC9B,GACJ,EACArrB,KAAKq9C,OAAS,SAAS0lB,EAAKC,GACxBhjE,KAAK4K,iBACL5K,KAAKk4E,aAAanV,EAAKC,EAC3B,EACAhjE,KAAKwjE,eAAiB,SAASn4C,GAC3BrrB,KAAK4K,iBACL5K,KAAK4pE,qBAAqBv+C,EAC9B,EACArrB,KAAKs4E,SAAW,WACZt4E,KAAKo4E,eAAep4E,KAAKu4E,aAC7B,EACAv4E,KAAKw4E,WAAa,WACdx4E,KAAKo4E,eAAep4E,KAAKy4E,eAC7B,EACAz4E,KAAK04E,YAAc,WACf14E,KAAKo4E,eAAep4E,KAAK24E,gBAC7B,EACA34E,KAAK44E,WAAa,WACd54E,KAAKo4E,eAAep4E,KAAK64E,eAC7B,EACA74E,KAAK84E,gBAAkB,WACnB94E,KAAKo4E,eAAep4E,KAAK+4E,oBAC7B,EACA/4E,KAAKg5E,cAAgB,WACjBh5E,KAAKo4E,eAAep4E,KAAKi5E,kBAC7B,EACAj5E,KAAKk5E,cAAgB,WACjBl5E,KAAKo4E,eAAep4E,KAAKm5E,kBAC7B,EACAn5E,KAAKo5E,gBAAkB,WACnBp5E,KAAKo4E,eAAep4E,KAAKq5E,oBAC7B,EACAr5E,KAAKs5E,gBAAkB,WACnBt5E,KAAKo4E,eAAep4E,KAAKu5E,oBAC7B,EACAv5E,KAAKw5E,eAAiB,WAClBx5E,KAAKo4E,eAAep4E,KAAKy5E,mBAC7B,EACAz5E,KAAKolE,aAAe,SAASrC,EAAKC,GAC9B,GAAqB,oBAAVA,EAAuB,CAC9B,IAAI1iB,EAASyiB,GAAO/iE,KAAKq3E,KACzBtU,EAAMziB,EAAOyiB,IACbC,EAAS1iB,EAAO0iB,MACpB,CACA,OAAOhjE,KAAKmgE,QAAQiF,aAAarC,EAAKC,EAC1C,EACAhjE,KAAK05E,WAAa,WACd15E,KAAKqM,kBAAkBrM,KAAKolE,eAChC,EACAplE,KAAK25E,YAAc,WACf,IAAIr5B,EAAStgD,KAAK43E,YACdpzC,EAAQxkC,KAAKmgE,QAAQyZ,cAAct5B,EAAOyiB,IAAKziB,EAAO0iB,QAC1DhjE,KAAKqM,kBAAkBm4B,EAC3B,EAEAxkC,KAAKulE,aAAe,SAASxC,EAAK8W,GAC9B,IACIC,EADAC,EAAyB,iBAAPhX,EAAkBA,EAAM/iE,KAAKq3E,KAAKtU,IAGpDiX,EAAWh6E,KAAKmgE,QAAQ8Z,YAAYF,GAOxC,OANIC,GACAD,EAAWC,EAAS9xC,MAAM66B,IAC1B+W,EAASE,EAAS7xC,IAAI46B,KAEtB+W,EAASC,GAEW,IAApBF,EACO,IAAIpE,EAAMsE,EAAU,EAAGD,EAAQ95E,KAAKmgE,QAAQ8T,QAAQ6F,GAAQpyE,QAE5D,IAAI+tE,EAAMsE,EAAU,EAAGD,EAAS,EAAG,EAClD,EACA95E,KAAKk6E,WAAa,WACdl6E,KAAKqM,kBAAkBrM,KAAKulE,eAChC,EACAvlE,KAAKu4E,aAAe,WAChBv4E,KAAKm6E,cAAc,EAAG,EAC1B,EACAn6E,KAAKy4E,eAAiB,WAClBz4E,KAAKm6E,aAAa,EAAG,EACzB,EACAn6E,KAAK64E,eAAiB,WAClB,IACIpF,EADAnzB,EAAStgD,KAAKq3E,KAAKQ,cAGvB,GAAIpE,EAAOzzE,KAAKmgE,QAAQuT,UAAUpzB,EAAOyiB,IAAKziB,EAAO0iB,QAAS,GAC1DhjE,KAAKk4E,aAAazE,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,aAC1C,GAAsB,IAAlB1iB,EAAO0iB,OACV1iB,EAAOyiB,IAAM,GACb/iE,KAAKk4E,aAAa53B,EAAOyiB,IAAM,EAAG/iE,KAAK+wD,IAAIkjB,QAAQ3zB,EAAOyiB,IAAM,GAAGr7D,YAGtE,CACD,IAAI0yE,EAAUp6E,KAAKmgE,QAAQka,aACvBr6E,KAAKmgE,QAAQma,UAAUh6B,IAAWtgD,KAAK+wD,IAAIkjB,QAAQ3zB,EAAOyiB,KAAKh2D,MAAMuzC,EAAO0iB,OAAOoX,EAAS95B,EAAO0iB,QAAQ9kD,MAAM,KAAKxW,OAAO,GAAK0yE,EAClIp6E,KAAKm6E,aAAa,GAAIC,GAEtBp6E,KAAKm6E,aAAa,GAAI,EAC9B,CACJ,EACAn6E,KAAK24E,gBAAkB,WACnB,IACIlF,EADAnzB,EAAStgD,KAAKq3E,KAAKQ,cAEvB,GAAIpE,EAAOzzE,KAAKmgE,QAAQuT,UAAUpzB,EAAOyiB,IAAKziB,EAAO0iB,OAAQ,GACzDhjE,KAAKk4E,aAAazE,EAAKtrC,IAAI46B,IAAK0Q,EAAKtrC,IAAI66B,aAExC,GAAIhjE,KAAKq3E,KAAKrU,QAAUhjE,KAAK+wD,IAAIkjB,QAAQj0E,KAAKq3E,KAAKtU,KAAKr7D,OACrD1H,KAAKq3E,KAAKtU,IAAM/iE,KAAK+wD,IAAIuW,YAAc,GACvCtnE,KAAKk4E,aAAal4E,KAAKq3E,KAAKtU,IAAM,EAAG,OAGxC,CACD,IAAIqX,EAAUp6E,KAAKmgE,QAAQka,aACvB/5B,EAAStgD,KAAKq3E,KACdr3E,KAAKmgE,QAAQma,UAAUh6B,IAAWtgD,KAAK+wD,IAAIkjB,QAAQ3zB,EAAOyiB,KAAKh2D,MAAMuzC,EAAO0iB,OAAQ1iB,EAAO0iB,OAAOoX,GAASl8D,MAAM,KAAKxW,OAAO,GAAK0yE,EAClIp6E,KAAKm6E,aAAa,EAAGC,GAErBp6E,KAAKm6E,aAAa,EAAG,EAC7B,CACJ,EACAn6E,KAAK+4E,oBAAsB,WACvB,IAAIhW,EAAM/iE,KAAKq3E,KAAKtU,IAChBC,EAAShjE,KAAKq3E,KAAKrU,OACnBuE,EAAYvnE,KAAKmgE,QAAQuH,oBAAoB3E,EAAKC,GAClDuX,EAAsBv6E,KAAKmgE,QAAQqa,yBAAyBjT,EAAW,GACvEkT,EAAez6E,KAAKmgE,QAAQua,eAC5B3X,EAAK,KAAMwX,EAAoBxX,IAC/BwX,EAAoBvX,QAGpB2X,EAAeF,EAAax4D,MAAM,QAClC04D,EAAa,GAAGjzE,QAAUs7D,GAAWhjE,KAAKmgE,QAAQya,0BAClDL,EAAoBvX,QAAU2X,EAAa,GAAGjzE,QAClD1H,KAAK4pE,qBAAqB2Q,EAC9B,EACAv6E,KAAKi5E,kBAAoB,WACrB,IAAI5B,EAAOr3E,KAAKq3E,KACZwD,EAAU76E,KAAKmgE,QAAQ2a,iCAAiCzD,EAAKtU,IAAKsU,EAAKrU,QAC3E,GAAIhjE,KAAKq3E,KAAKrU,QAAU6X,EAAQ7X,OAAQ,CACpC,IAAIvuB,EAAOz0C,KAAKmgE,QAAQ8T,QAAQ4G,EAAQ9X,KACxC,GAAI8X,EAAQ7X,QAAUvuB,EAAK/sC,OAAQ,CAC/B,IAAIqzE,EAAUtmC,EAAK/0B,OAAO,QACtBq7D,EAAU,IACVF,EAAQ7X,OAAS+X,EACzB,CACJ,CAEA/6E,KAAKk4E,aAAa2C,EAAQ9X,IAAK8X,EAAQ7X,OAC3C,EACAhjE,KAAKm5E,kBAAoB,WACrB,IAAIpW,EAAM/iE,KAAK+wD,IAAIuW,YAAc,EAC7BtE,EAAShjE,KAAK+wD,IAAIkjB,QAAQlR,GAAKr7D,OACnC1H,KAAKk4E,aAAanV,EAAKC,EAC3B,EACAhjE,KAAKq5E,oBAAsB,WACvBr5E,KAAKk4E,aAAa,EAAG,EACzB,EACAl4E,KAAKg7E,wBAA0B,WAC3B,IAAIjY,EAAM/iE,KAAKq3E,KAAKtU,IAChBC,EAAShjE,KAAKq3E,KAAKrU,OACnBvuB,EAAOz0C,KAAK+wD,IAAIkjB,QAAQlR,GACxBkY,EAAgBxmC,EAAKxD,UAAU+xB,GAGnChjE,KAAKmgE,QAAQ+a,WAAWvsD,UAAY,EACpC3uB,KAAKmgE,QAAQgb,QAAQxsD,UAAY,EACjC,IAAI8kD,EAAOzzE,KAAKmgE,QAAQuT,UAAU3Q,EAAKC,EAAQ,GAC/C,GAAIyQ,EACAzzE,KAAKk4E,aAAazE,EAAKtrC,IAAI46B,IAAK0Q,EAAKtrC,IAAI66B,YAD7C,CASA,GALYhjE,KAAKmgE,QAAQ+a,WAAWr5D,KAAKo5D,KACrCjY,GAAUhjE,KAAKmgE,QAAQ+a,WAAWvsD,UAClC3uB,KAAKmgE,QAAQ+a,WAAWvsD,UAAY,EACpCssD,EAAgBxmC,EAAKxD,UAAU+xB,IAE/BA,GAAUvuB,EAAK/sC,OAKf,OAJA1H,KAAKk4E,aAAanV,EAAKtuB,EAAK/sC,QAC5B1H,KAAK24E,uBACD5V,EAAM/iE,KAAK+wD,IAAIuW,YAAc,GAC7BtnE,KAAKu5E,uBAGDv5E,KAAKmgE,QAAQgb,QAAQt5D,KAAKo5D,KAClCjY,GAAUhjE,KAAKmgE,QAAQgb,QAAQxsD,UAC/B3uB,KAAKmgE,QAAQgb,QAAQxsD,UAAY,GAGrC3uB,KAAKk4E,aAAanV,EAAKC,EAlBvB,CAmBJ,EACAhjE,KAAKo7E,uBAAyB,WAC1B,IAEI3H,EAFA1Q,EAAM/iE,KAAKq3E,KAAKtU,IAChBC,EAAShjE,KAAKq3E,KAAKrU,OAEvB,GAAIyQ,EAAOzzE,KAAKmgE,QAAQuT,UAAU3Q,EAAKC,GAAS,GAC5ChjE,KAAKk4E,aAAazE,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,YADjD,CAKA,IAAInuD,EAAM7U,KAAKmgE,QAAQkb,gBAAgBtY,EAAKC,GAAS,GAC1C,MAAPnuD,IACAA,EAAM7U,KAAK+wD,IAAIkjB,QAAQlR,GAAK9xB,UAAU,EAAG+xB,IAG7C,IAAIsY,EAAez6E,EAAKq6D,cAAcrmD,GAStC,GAPA7U,KAAKmgE,QAAQ+a,WAAWvsD,UAAY,EACpC3uB,KAAKmgE,QAAQgb,QAAQxsD,UAAY,EACrB3uB,KAAKmgE,QAAQ+a,WAAWr5D,KAAKy5D,KACrCtY,GAAUhjE,KAAKmgE,QAAQ+a,WAAWvsD,UAClC2sD,EAAeA,EAAavuE,MAAM/M,KAAKmgE,QAAQ+a,WAAWvsD,WAC1D3uB,KAAKmgE,QAAQ+a,WAAWvsD,UAAY,GAEpCq0C,GAAU,EAKV,OAJAhjE,KAAKk4E,aAAanV,EAAK,GACvB/iE,KAAK64E,sBACD9V,EAAM,GACN/iE,KAAKy5E,sBAGDz5E,KAAKmgE,QAAQgb,QAAQt5D,KAAKy5D,KAClCtY,GAAUhjE,KAAKmgE,QAAQgb,QAAQxsD,UAC/B3uB,KAAKmgE,QAAQgb,QAAQxsD,UAAY,GAGrC3uB,KAAKk4E,aAAanV,EAAKC,EA5BvB,CA6BJ,EAEAhjE,KAAKu7E,mBAAqB,SAASN,GAC/B,IAAsBrtD,EAAXpR,EAAQ,EACfg/D,EAAe,KACfL,EAAUn7E,KAAKmgE,QAAQgb,QAG3B,GADAA,EAAQxsD,UAAY,EACR3uB,KAAKmgE,QAAQgb,QAAQt5D,KAAKo5D,GAClCz+D,EAAQxc,KAAKmgE,QAAQgb,QAAQxsD,cAC1B,CACH,OAAQf,EAAKqtD,EAAcz+D,KAAWg/D,EAAa1mE,KAAK8Y,GACpDpR,IAEJ,GAAIA,EAAQ,EAAG,CACX2+D,EAAQxsD,UAAY,EACnB,OAAQf,EAAKqtD,EAAcz+D,MAAY2+D,EAAQrmE,KAAK8Y,GAGjD,GAFAutD,EAAQxsD,UAAY,EACpBnS,IACIg/D,EAAa1mE,KAAK8Y,GAAK,CACvB,GAAIpR,EAAQ,EAAG,CACXA,IACA,KACJ,CACI,OAAQoR,EAAKqtD,EAAcz+D,KAAWg/D,EAAa1mE,KAAK8Y,GACpDpR,IACJ,GAAIA,EAAQ,EACR,KAEZ,CAER,CACJ,CAGA,OAFA2+D,EAAQxsD,UAAY,EAEbnS,CACX,EAEAxc,KAAKy7E,yBAA2B,WAC5B,IAAI1Y,EAAM/iE,KAAKq3E,KAAKtU,IAChBC,EAAShjE,KAAKq3E,KAAKrU,OACnBvuB,EAAOz0C,KAAK+wD,IAAIkjB,QAAQlR,GACxBkY,EAAgBxmC,EAAKxD,UAAU+xB,GAE/ByQ,EAAOzzE,KAAKmgE,QAAQuT,UAAU3Q,EAAKC,EAAQ,GAC/C,GAAIyQ,EACA,OAAOzzE,KAAKk4E,aAAazE,EAAKtrC,IAAI46B,IAAK0Q,EAAKtrC,IAAI66B,QAEpD,GAAIA,GAAUvuB,EAAK/sC,OAAQ,CACvB,IAAIG,EAAI7H,KAAK+wD,IAAIuW,YACjB,GACIvE,IACAkY,EAAgBj7E,KAAK+wD,IAAIkjB,QAAQlR,SAC5BA,EAAMl7D,GAAK,QAAQiN,KAAKmmE,IAE5B,OAAOnmE,KAAKmmE,KACbA,EAAgB,IACpBjY,EAAS,CACb,CAEA,IAAIxmD,EAAQxc,KAAKu7E,mBAAmBN,GAEpCj7E,KAAKk4E,aAAanV,EAAKC,EAASxmD,EACpC,EAEAxc,KAAK07E,wBAA0B,WAC3B,IAGIjI,EAHA1Q,EAAM/iE,KAAKq3E,KAAKtU,IAChBC,EAAShjE,KAAKq3E,KAAKrU,OAGvB,GAAIyQ,EAAOzzE,KAAKmgE,QAAQuT,UAAU3Q,EAAKC,GAAS,GAC5C,OAAOhjE,KAAKk4E,aAAazE,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,QAExD,IAAIvuB,EAAOz0C,KAAKmgE,QAAQ8T,QAAQlR,GAAK9xB,UAAU,EAAG+xB,GAClD,GAAe,IAAXA,EAAc,CACd,GACID,IACAtuB,EAAOz0C,KAAK+wD,IAAIkjB,QAAQlR,SACnBA,EAAM,GAAK,QAAQjuD,KAAK2/B,IAEjCuuB,EAASvuB,EAAK/sC,OACT,OAAOoN,KAAK2/B,KACbA,EAAO,GACf,CAEA,IAAI6mC,EAAez6E,EAAKq6D,cAAczmB,GAClCj4B,EAAQxc,KAAKu7E,mBAAmBD,GAEpC,OAAOt7E,KAAKk4E,aAAanV,EAAKC,EAASxmD,EAC3C,EAEAxc,KAAKu5E,oBAAsB,WACnBv5E,KAAKmgE,QAAQwb,iBACb37E,KAAKg7E,0BAELh7E,KAAKy7E,0BACb,EAEAz7E,KAAKy5E,mBAAqB,WAClBz5E,KAAKmgE,QAAQwb,iBACb37E,KAAKo7E,yBAELp7E,KAAK07E,yBACb,EACA17E,KAAKm6E,aAAe,SAASyB,EAAMhvC,GAC/B,IAAIivC,EAAY77E,KAAKmgE,QAAQ6W,yBACzBh3E,KAAKq3E,KAAKtU,IACV/iE,KAAKq3E,KAAKrU,QAGA,IAAVp2B,IACI5sC,KAAK23E,eACLkE,EAAU7Y,OAAShjE,KAAK23E,eAExB33E,KAAK23E,eAAiBkE,EAAU7Y,QAGxC,IAAI8Y,EAAS97E,KAAKmgE,QAAQqa,yBAAyBqB,EAAU9Y,IAAM6Y,EAAMC,EAAU7Y,QAEtE,IAAT4Y,GAAwB,IAAVhvC,GAAekvC,EAAO/Y,MAAQ/iE,KAAKq3E,KAAKtU,KAAO+Y,EAAO9Y,SAAWhjE,KAAKq3E,KAAKrU,QACrFhjE,KAAKmgE,QAAQ4b,aAAe/7E,KAAKmgE,QAAQ4b,YAAYD,EAAO/Y,OACxD+Y,EAAO/Y,IAAM,GAAK6Y,EAAO,IACzBE,EAAO/Y,MAGnB/iE,KAAKk4E,aAAa4D,EAAO/Y,IAAK+Y,EAAO9Y,OAASp2B,EAAiB,IAAVA,EACzD,EACA5sC,KAAK4pE,qBAAuB,SAAS7iE,GACjC/G,KAAKk4E,aAAanxE,EAASg8D,IAAKh8D,EAASi8D,OAC7C,EACAhjE,KAAKk4E,aAAe,SAASnV,EAAKC,EAAQgZ,GACtC,IAAIvI,EAAOzzE,KAAKmgE,QAAQuT,UAAU3Q,EAAKC,EAAQ,GAC3CyQ,IACA1Q,EAAM0Q,EAAKvrC,MAAM66B,IACjBC,EAASyQ,EAAKvrC,MAAM86B,QAGxBhjE,KAAK03E,4BAA6B,EAClC13E,KAAKq3E,KAAKhR,YAAYtD,EAAKC,GAC3BhjE,KAAK03E,4BAA6B,EAE7BsE,IACDh8E,KAAK23E,eAAiB,KAC9B,EACA33E,KAAKi8E,mBAAqB,SAASlZ,EAAKC,EAAQgZ,GAC5C,IAAI3wD,EAAMrrB,KAAKmgE,QAAQqa,yBAAyBzX,EAAKC,GACrDhjE,KAAKk4E,aAAa7sD,EAAI03C,IAAK13C,EAAI23C,OAAQgZ,EAC3C,EACAh8E,KAAK80E,OAAS,WACV90E,KAAKq3E,KAAKvC,SACV90E,KAAKkqC,OAAO4qC,SACZ90E,KAAKmgE,QAAUngE,KAAK+wD,IAAM,IAC9B,EAEA/wD,KAAKmrE,kBAAoB,SAAS3mC,GAC9BxkC,KAAKqM,kBAAkBm4B,EAAOA,EAAM8b,QAAU9b,EAAM0D,OACpDloC,KAAK23E,eAAiBnzC,EAAM03C,eAAiBl8E,KAAK23E,cACtD,EAEA33E,KAAK0qE,gBAAkB,SAASlmC,GAC5B,IAAIv+B,EAAIjG,KAAKsgE,WAYb,OAXI97B,GACAA,EAAM0D,MAAM86B,OAAS/8D,EAAEiiC,MAAM86B,OAC7Bx+B,EAAM0D,MAAM66B,IAAM98D,EAAEiiC,MAAM66B,IAC1Bv+B,EAAM2D,IAAI66B,OAAS/8D,EAAEkiC,IAAI66B,OACzBx+B,EAAM2D,IAAI46B,IAAM98D,EAAEkiC,IAAI46B,KAEtBv+B,EAAQv+B,EAGZu+B,EAAM8b,OAAStgD,KAAKm4E,cAAgB3zC,EAAM0D,MAAQ1D,EAAM2D,IACxD3D,EAAM03C,cAAgBl8E,KAAK23E,eACpBnzC,CACX,EACAxkC,KAAKm8E,oBAAsB,SAAS3qC,GAChC,IAAItJ,EAAQloC,KAAK43E,YACjB,IACIpmC,EAAKxxC,MACL,IAAImoC,EAAMnoC,KAAK43E,YACf,OAAOnC,EAAMmB,WAAW1uC,EAAMC,EAClC,CAAE,MAAMhlC,GACJ,OAAOsyE,EAAMmB,WAAW1uC,EAAMA,EAClC,CAAE,QACEloC,KAAK4pE,qBAAqB1hC,EAC9B,CACJ,EAEAloC,KAAKstB,OAAS,WACV,GAAIttB,KAAK8uC,WACL,IAAIzsC,EAAOrC,KAAKo8E,OAAOvwE,KAAI,SAAS5F,GAChC,IAAIo2E,EAAKp2E,EAAEu2C,QAEX,OADA6/B,EAAGlE,YAAclyE,EAAEq6C,QAAUr6C,EAAEiiC,MACxBm0C,CACX,QACG,CACCh6E,EAAOrC,KAAKsgE,WAChBj+D,EAAK81E,YAAcn4E,KAAKm4E,aAC5B,CACA,OAAO91E,CACX,EAEArC,KAAKs8E,SAAW,SAASj6E,GACrB,QAAkB8N,GAAd9N,EAAK6lC,MAAoB,CACzB,GAAIloC,KAAKu8E,UAAW,CAChBv8E,KAAKw8E,cAAcn6E,EAAK,IACxB,IAAK,IAAI0D,EAAI1D,EAAKqF,OAAQ3B,KAAO,CAC7B,IAAIE,EAAIwvE,EAAMmB,WAAWv0E,EAAK0D,GAAGmiC,MAAO7lC,EAAK0D,GAAGoiC,KAC5C9lC,EAAK0D,GAAGoyE,cACRlyE,EAAEq6C,OAASr6C,EAAEiiC,OACjBloC,KAAKyM,SAASxG,GAAG,EACrB,CACA,MACJ,CACI5D,EAAOA,EAAK,EACpB,CACIrC,KAAKu8E,WACLv8E,KAAKw8E,cAAcn6E,GACvBrC,KAAKqM,kBAAkBhK,EAAMA,EAAK81E,YACtC,EAEAn4E,KAAK81E,QAAU,SAASzzE,GACpB,IAAKA,EAAKqF,QAAU1H,KAAK8uC,aAAezsC,EAAKqF,QAAU1H,KAAK8uC,WACxD,OAAO,EACX,IAAKzsC,EAAKqF,SAAW1H,KAAKo8E,OACtB,OAAOp8E,KAAKsgE,WAAWwV,QAAQzzE,GAEnC,IAAK,IAAI0D,EAAI/F,KAAKo8E,OAAO10E,OAAQ3B,KAC7B,IAAK/F,KAAKo8E,OAAOr2E,GAAG+vE,QAAQzzE,EAAK0D,IAC7B,OAAO,EAEf,OAAO,CACX,CAEH,GAAEnB,KAAKuyE,EAAUlvE,WAElBxC,EAAQ0xE,UAAYA,CACpB,IAEApvB,IAAImC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,eAAe,SAASS,EAAUllD,EAASE,GACpG,aAEA,IAAIsJ,EAAS07C,EAAS,YAClB8xB,EAAkB,IAClBC,EAAY,SAASvoE,GAKrB,IAAK,IAAIrL,KAJT9I,KAAK28E,OAASxoE,EAEdnU,KAAK48E,QAAU,CAAC,EAChB58E,KAAK68E,cAAgB,CAAC,EACN78E,KAAK28E,OAAQ,CAQzB,IAPA,IAAIxoC,EAAQn0C,KAAK28E,OAAO7zE,GACpBg0E,EAAc,GACdC,EAAa,EACbC,EAAUh9E,KAAK68E,cAAc/zE,GAAO,CAACm0E,aAAc,QACnDn2D,EAAO,IAEPo2D,EAAiB,GACZn3E,EAAI,EAAGA,EAAIouC,EAAMzsC,OAAQ3B,IAAK,CACnC,IAAI4W,EAAOw3B,EAAMpuC,GAKjB,GAJI4W,EAAKsgE,eACLD,EAAQC,aAAetgE,EAAKsgE,cAC5BtgE,EAAKwgE,kBACLr2D,EAAO,MACO,MAAdnK,EAAKxF,MAAT,CAGIwF,EAAKxF,iBAAiBF,SACtB0F,EAAKxF,MAAQwF,EAAKxF,MAAM5N,WAAWwD,MAAM,GAAI,IACjD,IAAIqwE,EAAgBzgE,EAAKxF,MACrBkmE,EAAa,IAAIpmE,OAAO,OAASmmE,EAAgB,UAAUv7D,KAAK,KAAKna,OAAS,EAC9EpG,MAAMsS,QAAQ+I,EAAKq3B,OACM,GAArBr3B,EAAKq3B,MAAMtsC,QAA6B,GAAd21E,EAC1B1gE,EAAKq3B,MAAQr3B,EAAKq3B,MAAM,GACjBqpC,EAAa,GAAK1gE,EAAKq3B,MAAMtsC,QACpC1H,KAAKyvE,YAAY,oDAAqD,CAClE9yD,KAAMA,EACN2gE,WAAYD,EAAa,IAE7B1gE,EAAKq3B,MAAQr3B,EAAKq3B,MAAM,KAExBr3B,EAAK4gE,WAAa5gE,EAAKq3B,MACvBr3B,EAAKq3B,MAAQ,KACbr3B,EAAK6gE,QAAUx9E,KAAKy9E,cAEI,mBAAd9gE,EAAKq3B,OAAwBr3B,EAAK6gE,UAE5C7gE,EAAK6gE,QADLH,EAAa,EACEr9E,KAAK09E,YAEL/gE,EAAKq3B,OAGxBqpC,EAAa,IACT,OAAOvoE,KAAK6H,EAAKxF,OACjBimE,EAAgBzgE,EAAKxF,MAAM8H,QAAQ,eAAe,SAASgD,EAAO4E,GAC9D,MAAO,MAAQoH,SAASpH,EAAO,IAAMk2D,EAAa,EACtD,KAEAM,EAAa,EACbD,EAAgBp9E,KAAK29E,sBAAsBhhE,EAAKxF,QAE/CwF,EAAKihE,YAAmC,iBAAdjhE,EAAKq3B,OAChCkpC,EAAexwE,KAAKiQ,IAG5BqgE,EAAQD,GAAch3E,EACtBg3E,GAAcM,EAEdP,EAAYpwE,KAAK0wE,GACZzgE,EAAK6gE,UACN7gE,EAAK6gE,QAAU,KA7CP,CA8ChB,CAEKV,EAAYp1E,SACbs1E,EAAQ,GAAK,EACbF,EAAYpwE,KAAK,MAGrBwwE,EAAehzE,SAAQ,SAASyS,GAC5BA,EAAKihE,WAAa59E,KAAK69E,qBAAqBlhE,EAAKxF,MAAO2P,EAC5D,GAAG9mB,MAEHA,KAAK48E,QAAQ9zE,GAAO,IAAImO,OAAO,IAAM6lE,EAAY55D,KAAK,OAAS,QAAS4D,EAC5E,CACJ,GAEA,WACI9mB,KAAK89E,kBAAoB,SAASl0E,GAC9B6yE,EAAsB,EAAJ7yE,CACtB,EAEA5J,KAAK09E,YAAc,SAAS7oE,GACxB,IAAIkpE,EAAS/9E,KAAK49E,WAAW/7D,KAAKhN,GAAK9H,MAAM,GACzCkd,EAAQjqB,KAAKg0C,MAAMvqC,MAAMzJ,KAAM+9E,GACnC,GAAqB,kBAAV9zD,EACP,MAAO,CAAC,CAACxoB,KAAMwoB,EAAO/oB,MAAO2T,IAGjC,IADA,IAAImpE,EAAS,GACJj4E,EAAI,EAAG8B,EAAIoiB,EAAMviB,OAAQ3B,EAAI8B,EAAG9B,IACjCg4E,EAAOh4E,KACPi4E,EAAOA,EAAOt2E,QAAU,CACpBjG,KAAMwoB,EAAMlkB,GACZ7E,MAAO68E,EAAOh4E,KAG1B,OAAOi4E,CACX,EAEAh+E,KAAKy9E,aAAe,SAAS5oE,GACzB,IAAKA,EACD,MAAO,GACX,IAAIkpE,EAAS/9E,KAAK49E,WAAW/7D,KAAKhN,GAClC,IAAKkpE,EACD,MAAO,OAGX,IAFA,IAAIC,EAAS,GACT/zD,EAAQjqB,KAAKu9E,WACRx3E,EAAI,EAAG8B,EAAIoiB,EAAMviB,OAAQ3B,EAAI8B,EAAG9B,IACjCg4E,EAAOh4E,EAAI,KACXi4E,EAAOA,EAAOt2E,QAAU,CACpBjG,KAAMwoB,EAAMlkB,GACZ7E,MAAO68E,EAAOh4E,EAAI,KAG9B,OAAOi4E,CACX,EAEAh+E,KAAK29E,sBAAwB,SAAS5U,GAClC,IAAI9iE,EAAI8iE,EAAI9pD,QACR,2CACA,SAAS+J,EAAGjgB,GAAI,OAAOA,EAAI,MAAQigB,CAAE,IAEzC,OAAO/iB,CACX,EAEAjG,KAAK69E,qBAAuB,SAAS9U,EAAKjiD,GACtC,IAA2B,GAAvBiiD,EAAIl3D,QAAQ,OAAc,CAC1B,IAAIuhC,EAAQ,EACR6qC,GAAY,EACZC,EAAc,CAAC,EACnBnV,EAAI9pD,QAAQ,wCAAwC,SAChDrV,EAAG2Z,EAAK46D,EAAWC,EAAYC,EAAQ7hE,GAmBvC,OAjBIyhE,EACAA,EAAsB,KAAVI,EACLA,EACPJ,GAAY,EACLG,GACHhrC,GAAS8qC,EAAY9qC,QACrB8qC,EAAY/1C,IAAM3rB,EAAM,EACxB0hE,EAAY9qC,OAAS,GAEzBA,KACO+qC,IACP/qC,IACwB,GAApB+qC,EAAUz2E,SACVw2E,EAAY9qC,MAAQA,EACpB8qC,EAAYh2C,MAAQ1rB,IAGrB5S,CACX,IAEuB,MAAnBs0E,EAAY/1C,KAAe,QAAQrzB,KAAKi0D,EAAI/mD,OAAOk8D,EAAY/1C,QAC/D4gC,EAAMA,EAAI93B,UAAU,EAAGitC,EAAYh2C,OAAS6gC,EAAI/mD,OAAOk8D,EAAY/1C,KAC3E,CAIA,MAHqB,KAAjB4gC,EAAIplD,OAAO,KAAWolD,EAAM,IAAMA,GACJ,KAA9BA,EAAIplD,OAAOolD,EAAIrhE,OAAS,KAAWqhE,GAAO,KAEvC,IAAI9xD,OAAO8xD,GAAMjiD,GAAM,IAAI7H,QAAQ,IAAK,IACnD,EACAjf,KAAKs+E,cAAgB,SAAS7pC,EAAM8pC,GAChC,GAAIA,GAAmC,iBAAdA,EAAwB,CAC7C,IAAInrC,EAAQmrC,EAAWxxE,MAAM,GAC7BwxE,EAAanrC,EAAM,GACA,SAAfmrC,IACAnrC,EAAMtvB,QACNy6D,EAAanrC,EAAMtvB,QAE3B,MACQsvB,EAAQ,GAEhB,IAAIorC,EAAeD,GAAc,QAC7BpqC,EAAQn0C,KAAK28E,OAAO6B,GACnBrqC,IACDqqC,EAAe,QACfrqC,EAAQn0C,KAAK28E,OAAO6B,IAExB,IAAIxB,EAAUh9E,KAAK68E,cAAc2B,GAC7BluC,EAAKtwC,KAAK48E,QAAQ4B,GACtBluC,EAAG3hB,UAAY,EAEf,IAAI1M,EAAO+7D,EAAS,GAChBrvD,EAAY,EACZ8vD,EAAgB,EAEhBzqC,EAAQ,CAACvyC,KAAM,KAAMP,MAAO,IAEhC,MAAO+gB,EAAQquB,EAAGzuB,KAAK4yB,GAAO,CAC1B,IAAIhzC,EAAOu7E,EAAQC,aACftgE,EAAO,KACPzb,EAAQ+gB,EAAM,GACdzF,EAAQ8zB,EAAG3hB,UAEf,GAAInS,EAAQtb,EAAMwG,OAASinB,EAAW,CAClC,IAAI+vD,EAAUjqC,EAAKxD,UAAUtiB,EAAWnS,EAAQtb,EAAMwG,QAClDssC,EAAMvyC,MAAQA,EACduyC,EAAM9yC,OAASw9E,GAEX1qC,EAAMvyC,MACNu8E,EAAOtxE,KAAKsnC,GAChBA,EAAQ,CAACvyC,KAAMA,EAAMP,MAAOw9E,GAEpC,CAEA,IAAK,IAAI34E,EAAI,EAAGA,EAAIkc,EAAMva,OAAO,EAAG3B,IAChC,QAAqBoK,IAAjB8R,EAAMlc,EAAI,GAAd,CAGA4W,EAAOw3B,EAAM6oC,EAAQj3E,IAGjBtE,EADAkb,EAAK6gE,QACE7gE,EAAK6gE,QAAQt8E,EAAOs9E,EAAcprC,GAElCz2B,EAAKq3B,MAEZr3B,EAAKmR,OAED0wD,EADoB,iBAAb7hE,EAAKmR,KACGnR,EAAKmR,KAELnR,EAAKmR,KAAK0wD,EAAcprC,GAG3Ce,EAAQn0C,KAAK28E,OAAO6B,GACfrqC,IACDn0C,KAAKyvE,YAAY,sBAAuB+O,GACxCA,EAAe,QACfrqC,EAAQn0C,KAAK28E,OAAO6B,IAExBxB,EAAUh9E,KAAK68E,cAAc2B,GAC7B7vD,EAAYnS,EACZ8zB,EAAKtwC,KAAK48E,QAAQ4B,GAClBluC,EAAG3hB,UAAYnS,GAEnB,KA3BY,CA8BhB,GAAItb,EACA,GAAoB,kBAATO,EACDkb,IAAuB,IAAfA,EAAKgiE,OAAoB3qC,EAAMvyC,OAASA,GAG9CuyC,EAAMvyC,MACNu8E,EAAOtxE,KAAKsnC,GAChBA,EAAQ,CAACvyC,KAAMA,EAAMP,MAAOA,IAJ5B8yC,EAAM9yC,OAASA,OAMhB,GAAIO,EAAM,CACTuyC,EAAMvyC,MACNu8E,EAAOtxE,KAAKsnC,GAChBA,EAAQ,CAACvyC,KAAM,KAAMP,MAAO,IAC5B,IAAS6E,EAAI,EAAGA,EAAItE,EAAKiG,OAAQ3B,IAC7Bi4E,EAAOtxE,KAAKjL,EAAKsE,GACzB,CAGJ,GAAI4oB,GAAa8lB,EAAK/sC,OAClB,MAIJ,GAFAinB,EAAYnS,EAERiiE,IAAkBhC,EAAiB,CAC/BgC,EAAgB,EAAIhqC,EAAK/sC,QACzB1H,KAAKyvE,YAAY,sCAAuC,CACpD8O,WAAYA,EACZ9pC,KAAMA,IAGd,MAAO9lB,EAAY8lB,EAAK/sC,OAChBssC,EAAMvyC,MACNu8E,EAAOtxE,KAAKsnC,GAChBA,EAAQ,CACJ9yC,MAAOuzC,EAAKxD,UAAUtiB,EAAWA,GAAa,KAC9CltB,KAAM,YAGd+8E,EAAe,QACfprC,EAAQ,GACR,KACJ,CACJ,CASA,OAPIY,EAAMvyC,MACNu8E,EAAOtxE,KAAKsnC,GAEZZ,EAAM1rC,OAAS,GACX0rC,EAAM,KAAOorC,GACbprC,EAAMnwB,QAAQ,OAAQu7D,GAEvB,CACHR,OAASA,EACT7pC,MAAQf,EAAM1rC,OAAS0rC,EAAQorC,EAEvC,EAEAx+E,KAAKyvE,YAAcxgE,EAAOwgE,WAE7B,GAAE7qE,KAAK83E,EAAUz0E,WAElBxC,EAAQi3E,UAAYA,CACpB,IAEA30B,IAAImC,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,iBAAiB,SAASS,EAAUllD,EAASE,GACtH,aAEA,IAAI9E,EAAO8pD,EAAS,eAEhBi0B,EAAqB,WAErB5+E,KAAK6+E,OAAS,CACV,MAAU,CAAC,CACP7qC,MAAQ,aACR78B,MAAQ,MACT,CACC8lE,aAAe,SAG3B,GAEA,WAEIj9E,KAAK8+E,SAAW,SAAS3qE,EAAO4qE,GAC5B,GAAKA,EAKL,IAAK,IAAIj2E,KAAOqL,EAAO,CAEnB,IADA,IAAIggC,EAAQhgC,EAAMrL,GACT/C,EAAI,EAAGA,EAAIouC,EAAMzsC,OAAQ3B,IAAK,CACnC,IAAI4W,EAAOw3B,EAAMpuC,IACb4W,EAAKmR,MAAQnR,EAAK6gE,WACM,iBAAb7gE,EAAKmR,MACsB,IAA9BnR,EAAKmR,KAAKjc,QAAQktE,KAClBpiE,EAAKmR,KAAOixD,EAASpiE,EAAKmR,MAE9BnR,EAAKqiE,WAAgD,IAAnCriE,EAAKqiE,UAAUntE,QAAQktE,KACzCpiE,EAAKqiE,UAAYD,EAASpiE,EAAKqiE,WAE3C,CACAh/E,KAAK6+E,OAAOE,EAASj2E,GAAOqrC,CAChC,MAlBI,IAAK,IAAIrrC,KAAOqL,EACZnU,KAAK6+E,OAAO/1E,GAAOqL,EAAMrL,EAkBrC,EAEA9I,KAAKi/E,SAAW,WACZ,OAAOj/E,KAAK6+E,MAChB,EAEA7+E,KAAKk/E,WAAa,SAAUC,EAAgBJ,EAAQK,EAAazC,EAAQhxC,GACrE,IAAIuzC,EAAsC,mBAAlBC,GAClB,IAAIA,GAAiBF,WACrBE,EACN,GAAIxC,EACA,IAAK,IAAI52E,EAAI,EAAGA,EAAI42E,EAAOj1E,OAAQ3B,IAC/B42E,EAAO52E,GAAKg5E,EAASpC,EAAO52E,QAGhC,IAAK,IAAI+C,KADT6zE,EAAS,GACOuC,EACZvC,EAAOjwE,KAAKqyE,EAASj2E,GAK7B,GAFA9I,KAAK8+E,SAASI,EAAYH,GAEtBK,EACA,KAAIN,EAAWx9E,MAAM2G,UAAU0jC,EAAS,OAAS,WACjD,IAAS5lC,EAAI,EAAGA,EAAI42E,EAAOj1E,OAAQ3B,IAC/B+4E,EAASr1E,MAAMzJ,KAAK6+E,OAAOlC,EAAO52E,IAAKlF,EAAK46D,SAAS2jB,GAFE,CAK1Dp/E,KAAKq/E,UACNr/E,KAAKq/E,QAAU,IACnBr/E,KAAKq/E,QAAQ3yE,KAAKqyE,EACtB,EAEA/+E,KAAKs/E,UAAY,WACb,OAAOt/E,KAAKq/E,OAChB,EAEA,IAAIlpC,EAAY,SAASqoC,EAAcprC,GAGnC,OAFoB,SAAhBorC,GAA2BprC,EAAM1rC,SACjC0rC,EAAMnwB,QAAQjjB,KAAKg/E,UAAWR,GAC3Bx+E,KAAKg/E,SAChB,EACIhpC,EAAW,SAASwoC,EAAcprC,GAElC,OADAA,EAAMtvB,QACCsvB,EAAMtvB,SAAW,OAC5B,EAEA9jB,KAAKu/E,eAAiB,WAClB,IAAI1uE,EAAK,EACLsD,EAAQnU,KAAK6+E,OACjB,SAASW,EAAa12E,GAClB,IAAIqrC,EAAQhgC,EAAMrL,GAClBqrC,EAAMsrC,WAAY,EAClB,IAAK,IAAI15E,EAAI,EAAGA,EAAIouC,EAAMzsC,OAAQ3B,IAAK,CACnC,IAAI4W,EAAOw3B,EAAMpuC,IACZ4W,EAAKxF,OAASwF,EAAKurB,QACpBvrB,EAAKxF,MAAQwF,EAAKurB,MACbvrB,EAAKmR,OACNnR,EAAKmR,KAAO,IAChBnR,EAAKmR,KAAKphB,KAAK,CACXuwE,aAActgE,EAAKq3B,OACpB,CACCA,MAAOr3B,EAAKq3B,MAAQ,OACpB78B,MAAOwF,EAAKwrB,KAAOxrB,EAAKurB,MACxBpa,KAAM,QAEVnR,EAAKq3B,MAAQr3B,EAAKq3B,MAAQ,SAC1Br3B,EAAKjQ,MAAO,GAEhB,IAAIohB,EAAOnR,EAAKmR,MAAQnR,EAAKjQ,KAC7B,GAAIohB,GAAQxsB,MAAMsS,QAAQka,GAAO,CAC7B,IAAI4xD,EAAY/iE,EAAK+iE,UAChBA,IACDA,EAAY/iE,EAAKq3B,MACO,iBAAb0rC,IACPA,EAAYA,EAAU,IAAM,IAC5BvrE,EAAMurE,KACNA,GAAa7uE,MAErBsD,EAAMurE,GAAa5xD,EACnBnR,EAAKmR,KAAO4xD,EACZF,EAAaE,EACjB,KAAmB,OAAR5xD,IACPnR,EAAKmR,KAAOkoB,GAShB,GANIr5B,EAAKjQ,OACLiQ,EAAKqiE,UAAYriE,EAAKmR,MAAQnR,EAAKjQ,KACnCiQ,EAAKmR,KAAOqoB,SACLx5B,EAAKjQ,MAGZiQ,EAAKxI,MACL,IAAK,IAAIlO,KAAK0W,EAAKxI,MACXA,EAAMlO,GACFkO,EAAMlO,GAAGyG,MACTyH,EAAMlO,GAAGyG,KAAKjD,MAAM0K,EAAMlO,GAAI0W,EAAKxI,MAAMlO,IAE7CkO,EAAMlO,GAAK0W,EAAKxI,MAAMlO,GAIlC,GAAI0W,EAAK80C,SAA0B,iBAAR90C,EACvB,IAAIgjE,EAAchjE,EAAK80C,SAAW90C,EAC9BijE,EAAWzrE,EAAMwrE,QACdr+E,MAAMsS,QAAQ+I,KACrBijE,EAAWjjE,GAEf,GAAIijE,EAAU,CACV,IAAIlqD,EAAO,CAAC3vB,EAAG,GAAGP,OAAOo6E,GACrBjjE,EAAKkjE,WACLnqD,EAAOA,EAAK2N,QAAO,SAASra,GAAI,OAAQA,EAAE8E,IAAK,KACnDqmB,EAAMzvB,OAAOjb,MAAM0qC,EAAOze,GAC1B3vB,IACA65E,EAAW,IACf,CAEIjjE,EAAKmjE,aACLnjE,EAAKq3B,MAAQh0C,KAAK+/E,oBACdpjE,EAAKmjE,WAAYnjE,EAAKsgE,cAAgB,OAAQtgE,EAAKwgE,wBAEhDxgE,EAAKsgE,aAEpB,CACJ,CACA57E,OAAOsQ,KAAKwC,GAAOjK,QAAQs1E,EAAcx/E,KAC7C,EAEAA,KAAK+/E,oBAAsB,SAASl0E,EAAKoxE,EAAcvxB,EAAYs0B,GAC/D,IAAI1mD,EAAWj4B,OAAOyI,OAAO,MAc7B,OAbAzI,OAAOsQ,KAAK9F,GAAK3B,SAAQ,SAASi7B,GAC9B,IAAI9+B,EAAIwF,EAAIs5B,GACRumB,IACArlD,EAAIA,EAAE0b,eAEV,IADA,IAAIk2B,EAAO5xC,EAAE6X,MAAM8hE,GAAa,KACvBj6E,EAAIkyC,EAAKvwC,OAAQ3B,KACtBuzB,EAAS2e,EAAKlyC,IAAMo/B,CAC5B,IACI9jC,OAAOsI,eAAe2vB,KACtBA,EAASrwB,UAAY,MAEzBjJ,KAAKigF,aAAe5+E,OAAOsQ,KAAK2nB,GAChCztB,EAAM,KACC6/C,EACD,SAASxqD,GAAQ,OAAOo4B,EAASp4B,EAAM6gB,gBAAkBk7D,CAAa,EACtE,SAAS/7E,GAAQ,OAAOo4B,EAASp4B,IAAU+7E,CAAa,CAClE,EAEAj9E,KAAKkgF,YAAc,WACf,OAAOlgF,KAAKmgF,SAChB,CAEH,GAAEv7E,KAAKg6E,EAAmB32E,WAE3BxC,EAAQm5E,mBAAqBA,CAC7B,IAEA72B,IAAImC,OAAO,qBAAqB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GAC5F,aAEA,IAAIy6E,EAAY,WACbpgF,KAAKqgF,YAAc,CAAC,CACvB,GAEA,WAEIrgF,KAAK8E,IAAM,SAAU0N,EAAMrK,EAAQiI,GAC/B,YAAQD,GACN,KAAKnQ,KAAKqgF,YACNrgF,KAAKqgF,YAAc,CAAC,EACxB,KAAKrgF,KAAKqgF,YAAY7tE,GAClBxS,KAAKqgF,YAAY7tE,GAAQ,CAAC,EAEhCxS,KAAKqgF,YAAY7tE,GAAMrK,GAAUiI,CACrC,EAEApQ,KAAKsgF,cAAgB,SAAUC,GAC3B,IAAK,IAAIz3E,KAAOy3E,EACZ,IAAK,IAAIp4E,KAAUo4E,EAAWz3E,GAC1B9I,KAAK8E,IAAIgE,EAAKX,EAAQo4E,EAAWz3E,GAAKX,GAGlD,EAEAnI,KAAKuH,OAAS,SAAUiL,GAChBxS,KAAKqgF,aAAergF,KAAKqgF,YAAY7tE,WAC9BxS,KAAKqgF,YAAY7tE,EAEhC,EAEAxS,KAAKwgF,QAAU,SAAU7+E,EAAM0hC,GAC3B,GAAoB,oBAAT1hC,EACP,IAAI4+E,GAAa,IAAI5+E,GAAO8+E,cAAcp9C,QAEtCk9C,EAAa5+E,EAAK8+E,cAAcp9C,GAExCrjC,KAAKsgF,cAAcC,EACvB,EAEAvgF,KAAKygF,cAAgB,SAAUp9C,GAC3B,GAAKA,EAEE,CAEH,IADA,IAAIzN,EAAM,CAAC,EACF7vB,EAAI,EAAGA,EAAIs9B,EAAO37B,OAAQ3B,IAC3B/F,KAAKqgF,YAAYh9C,EAAOt9B,MACxB6vB,EAAIyN,EAAOt9B,IAAM/F,KAAKqgF,YAAYh9C,EAAOt9B,KAGjD,OAAO6vB,CACX,CATI,OAAO51B,KAAKqgF,WAUpB,CAEH,GAAEz7E,KAAKw7E,EAAUn4E,WAElBxC,EAAQ26E,UAAYA,CACpB,IAEAr4B,IAAImC,OAAO,cAAc,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACrF,aA2CA,SAAS+6E,EAAmBC,GACxB,IAAIh6D,EAAY,SAChB,IAAK,IAAInU,KAAQmuE,EACbl7E,EAAQm7E,SAASpuE,GAAQmuE,EAAKnuE,GAAMyM,QAAQ0H,EAAW,QAC/D,CA9CAlhB,EAAQm7E,SAAW,CAAC,EAEpBF,EAAkB,CACdG,EAAI,4sFACJC,GAAI,uhFACJC,GAAI,o8EACJC,GAAI,0DACJC,GAAI,8QACJC,GAAI,knEACJC,EAAI,izCACJC,GAAI,4tCACJC,GAAI,qsBACJC,GAAI,0CACJC,EAAI,4hBACJC,GAAI,8TACJC,GAAI,6DACJC,GAAI,+MACJC,EAAI,40BACJC,GAAI,wEACJC,GAAI,mSACJC,GAAI,+RACJC,GAAI,mDACJC,GAAI,2CACJC,GAAI,wCACJC,GAAI,+xBACJC,EAAI,0kCACJC,GAAI,mWACJC,GAAI,yFACJC,GAAI,4KACJC,GAAI,43BACJC,EAAI,gDACJC,GAAI,wCACJC,GAAI,OACJC,GAAI,OACJC,EAAI,0mFACJC,GAAI,qBACJC,GAAI,iFACJC,GAAI,YACJC,GAAI,YACJC,GAAI,8jFASR,IAEAl7B,IAAImC,OAAO,qBAAqB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GAC5F,aACA,IAAIu9E,EAAgB,SAAS/iB,EAASgjB,EAAYC,GAC9CpjF,KAAKqjF,SAAWljB,EAChBngE,KAAKsjF,KAAOH,EACZnjF,KAAKujF,WAAapjB,EAAQqjB,UAAUL,GAEpC,IAAInvC,EAAQmsB,EAAQsjB,WAAWN,EAAYC,GAC3CpjF,KAAK0jF,YAAc1vC,EAAQA,EAAMx3B,OAAS,CAC9C,GAEA,WACIxc,KAAK2jF,aAAe,WAChB3jF,KAAK0jF,aAAe,EAEpB,MAAO1jF,KAAK0jF,YAAc,EAAG,CAEzB,GADA1jF,KAAKsjF,MAAQ,EACTtjF,KAAKsjF,KAAO,EAEZ,OADAtjF,KAAKsjF,KAAO,EACL,KAGXtjF,KAAKujF,WAAavjF,KAAKqjF,SAASG,UAAUxjF,KAAKsjF,MAC/CtjF,KAAK0jF,YAAc1jF,KAAKujF,WAAW77E,OAAS,CAChD,CAEA,OAAO1H,KAAKujF,WAAWvjF,KAAK0jF,YAChC,EACA1jF,KAAK4jF,YAAc,WAEf,IAAIC,EADJ7jF,KAAK0jF,aAAe,EAEpB,MAAO1jF,KAAK0jF,aAAe1jF,KAAKujF,WAAW77E,OAAQ,CAI/C,GAHA1H,KAAKsjF,MAAQ,EACRO,IACDA,EAAW7jF,KAAKqjF,SAAS/b,aACzBtnE,KAAKsjF,MAAQO,EAEb,OADA7jF,KAAKsjF,KAAOO,EAAW,EAChB,KAGX7jF,KAAKujF,WAAavjF,KAAKqjF,SAASG,UAAUxjF,KAAKsjF,MAC/CtjF,KAAK0jF,YAAc,CACvB,CAEA,OAAO1jF,KAAKujF,WAAWvjF,KAAK0jF,YAChC,EACA1jF,KAAK8jF,gBAAkB,WACnB,OAAO9jF,KAAKujF,WAAWvjF,KAAK0jF,YAChC,EACA1jF,KAAK+jF,mBAAqB,WACtB,OAAO/jF,KAAKsjF,IAChB,EACAtjF,KAAKgkF,sBAAwB,WACzB,IAAIC,EAAYjkF,KAAKujF,WACjBW,EAAalkF,KAAK0jF,YAClB1gB,EAASihB,EAAUC,GAAYh8C,MACnC,QAAe/3B,IAAX6yD,EACA,OAAOA,EAEXA,EAAS,EACT,MAAOkhB,EAAa,EAChBA,GAAc,EACdlhB,GAAUihB,EAAUC,GAAYhjF,MAAMwG,OAG1C,OAAOs7D,CACX,EACAhjE,KAAKmkF,wBAA0B,WAC3B,MAAO,CAACphB,IAAK/iE,KAAKsjF,KAAMtgB,OAAQhjE,KAAKgkF,wBACzC,CAEH,GAAEp/E,KAAKs+E,EAAcj7E,WAEtBxC,EAAQy9E,cAAgBA,CACxB,IAEAn7B,IAAImC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,gBAAgB,gCAAgC,qBAAqB,cAAc,eAAe,qBAAqB,cAAc,SAASS,EAAUllD,EAASE,GAC1N,aAEA,IAAI+2E,EAAY/xB,EAAS,gBAAgB+xB,UACrCkC,EAAqBj0B,EAAS,0BAA0Bi0B,mBACxDwB,EAAYz1B,EAAS,eAAey1B,UACpCrjD,EAAU4tB,EAAS,cACnB9pD,EAAO8pD,EAAS,eAChBu4B,EAAgBv4B,EAAS,qBAAqBu4B,cAC9CzN,EAAQ9qB,EAAS,YAAY8qB,MAE7B2O,EAAO,WACPpkF,KAAKm/E,eAAiBP,EACtB5+E,KAAKqkF,WAAa,IAAIjE,CAC1B,GAEA,WAEIpgF,KAAKm7E,QAAU,IAAIlkE,OAAO,KACpB8lB,EAAQ6jD,SAASC,EACjB9jD,EAAQ6jD,SAASQ,GAAKrkD,EAAQ6jD,SAASS,GACvCtkD,EAAQ6jD,SAASY,GACjBzkD,EAAQ6jD,SAASqB,GAAK,SAAU,KAGtCjiF,KAAKk7E,WAAa,IAAIjkE,OAAO,SACvB8lB,EAAQ6jD,SAASC,EACjB9jD,EAAQ6jD,SAASQ,GAAKrkD,EAAQ6jD,SAASS,GACvCtkD,EAAQ6jD,SAASY,GACjBzkD,EAAQ6jD,SAASqB,GAAK,eAAgB,KAG5CjiF,KAAKskF,aAAe,WAKhB,OAJKtkF,KAAKukF,aACNvkF,KAAKwkF,gBAAkBxkF,KAAKwkF,iBAAmB,IAAIxkF,KAAKm/E,eACxDn/E,KAAKukF,WAAa,IAAI7H,EAAU18E,KAAKwkF,gBAAgBvF,aAElDj/E,KAAKukF,UAChB,EAEAvkF,KAAKykF,iBAAmB,GACxBzkF,KAAK0kF,aAAe,GAEpB1kF,KAAK2kF,mBAAqB,SAASxwC,EAAOgsB,EAASuV,EAAUE,GACzD,IAAI7kB,EAAMoP,EAAQpP,IAEd6zB,GAAmB,EACnBC,GAAe,EACfC,EAAY3rE,IACZihE,EAAUja,EAAQka,aAClB0K,GAAkB,EAEtB,GAAK/kF,KAAKykF,iBAkCH,CACH,GAAInjF,MAAMsS,QAAQ5T,KAAKykF,kBACfO,EAAchlF,KAAKykF,iBAAiB54E,IAAIhL,EAAKi7D,cAAc54C,KAAK,KAChEuhE,EAAmBzkF,KAAKykF,iBAAiB,QAEzCO,EAAcnkF,EAAKi7D,aAAa97D,KAAKykF,kBACrCA,EAAmBzkF,KAAKykF,iBAEhCO,EAAc,IAAI/tE,OAAO,aAAe+tE,EAAc,OAEtDD,EAAkB5kB,EAAQ8kB,iBAEtBC,EAAY,SAASzwC,EAAM1uC,GAC3B,IAAI6D,EAAI6qC,EAAKxyB,MAAM+iE,GACnB,GAAKp7E,EAAL,CACA,IAAIs+B,EAAQt+B,EAAE,GAAGlC,OAAQygC,EAAMv+B,EAAE,GAAGlC,OAC/By9E,EAAkB1wC,EAAMvM,EAAOC,IAAyB,KAAjBv+B,EAAE,GAAGu+B,EAAM,IACnDA,IACJ4oB,EAAIq0B,aAAar/E,EAAGmiC,EAAOC,EAJb,CAKlB,EAPA,IAQIk9C,EAAmBZ,EAAmB,IAatCU,GAZAG,EAAU,SAAS7wC,EAAM1uC,GACpB6+E,IAAoB,KAAK9vE,KAAK2/B,KAC3B0wC,EAAkB1wC,EAAMqwC,EAAWA,GACnC/zB,EAAIw0B,aAAa,CAACxiB,IAAKh9D,EAAGi9D,OAAQ8hB,GAAYO,GAE9Ct0B,EAAIw0B,aAAa,CAACxiB,IAAKh9D,EAAGi9D,OAAQ8hB,GAAYL,GAE1D,EACIe,EAAa,SAAS/wC,EAAM1uC,GAC5B,OAAOi/E,EAAYlwE,KAAK2/B,EAC5B,EAEwB,SAASA,EAAMgxC,EAAQC,GAC3C,IAAIC,EAAS,EACb,MAAOF,KAAmC,KAAvBhxC,EAAK9wB,OAAO8hE,GAC3BE,IACJ,GAAIA,EAASvL,GAAW,EACpB,OAAO,EACPuL,EAAS,EACb,MAA+B,KAAxBlxC,EAAK9wB,OAAO+hE,KACfC,IACJ,OAAIvL,EAAU,EACHuL,EAASvL,GAAWA,EAAU,EAE9BuL,EAASvL,GAAW,CAEnC,EACJ,KAlF4B,CACxB,IAAKp6E,KAAK0kF,aACN,OAAO,EACX,IAAID,EAAmBzkF,KAAK0kF,aAAax8C,MACrC09C,EAAiB5lF,KAAK0kF,aAAav8C,IACnC68C,EAAc,IAAI/tE,OAAO,aAAepW,EAAKi7D,aAAa2oB,GAAoB,KAC9EoB,EAAY,IAAI5uE,OAAO,MAAQpW,EAAKi7D,aAAa8pB,GAAkB,UAEnEN,EAAU,SAAS7wC,EAAM1uC,GACrBy/E,EAAW/wC,EAAM1uC,IAEhB6+E,IAAoB,KAAK9vE,KAAK2/B,KAC/Bsc,EAAIw0B,aAAa,CAACxiB,IAAKh9D,EAAGi9D,OAAQvuB,EAAK/sC,QAASk+E,GAChD70B,EAAIw0B,aAAa,CAACxiB,IAAKh9D,EAAGi9D,OAAQ8hB,GAAYL,GAEtD,EAEIS,EAAY,SAASzwC,EAAM1uC,GAC3B,IAAI6D,GACAA,EAAI6qC,EAAKxyB,MAAM4jE,KACf90B,EAAIq0B,aAAar/E,EAAG0uC,EAAK/sC,OAASkC,EAAE,GAAGlC,OAAQ+sC,EAAK/sC,SACpDkC,EAAI6qC,EAAKxyB,MAAM+iE,KACfj0B,EAAIq0B,aAAar/E,EAAG6D,EAAE,GAAGlC,OAAQkC,EAAE,GAAGlC,OAC9C,EAEI89E,EAAa,SAAS/wC,EAAMsuB,GAC5B,GAAIiiB,EAAYlwE,KAAK2/B,GACjB,OAAO,EAEX,IADA,IAAIupC,EAAS7d,EAAQqjB,UAAUzgB,GACtBh9D,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAC/B,GAAuB,YAAnBi4E,EAAOj4E,GAAGtE,KACV,OAAO,CAEnB,CACJ,CAkDA,SAASqkF,EAAK93B,GACV,IAAK,IAAIjoD,EAAI2vE,EAAU3vE,GAAK6vE,EAAQ7vE,IAChCioD,EAAI+C,EAAIkjB,QAAQluE,GAAIA,EAC5B,CAGA,IAAIggF,EAAiB5sE,IACrB2sE,GAAK,SAASrxC,EAAM1uC,GAChB,IAAIqnB,EAASqnB,EAAK/0B,OAAO,OACT,IAAZ0N,GACIA,EAAS03D,IACTA,EAAY13D,GACZy3D,IAAiBW,EAAW/wC,EAAM1uC,KAClC8+E,GAAe,IACZkB,EAAiBtxC,EAAK/sC,SAC7Bq+E,EAAiBtxC,EAAK/sC,OAE9B,IAEIo9E,GAAa3rE,MACb2rE,EAAYiB,EACZnB,GAAmB,EACnBC,GAAe,GAGfE,GAAmBD,EAAY1K,GAAW,IAC1C0K,EAAYj/D,KAAKD,MAAMk/D,EAAY1K,GAAWA,GAElD0L,EAAKjB,EAAeK,EAAYI,EACpC,EAEAtlF,KAAKgmF,mBAAqB,SAAS7xC,EAAOgsB,EAAS37B,EAAO8b,GACtD,IAAIglC,EAAUtlF,KAAK0kF,aACnB,GAAKY,EAAL,EAEKA,EAAQp9C,OAASo9C,EAAQ,KAC1BA,EAAUA,EAAQ,IAEtB,IAKI5P,EAAUuQ,EALVl+E,EAAW,IAAIm7E,EAAc/iB,EAAS7f,EAAOyiB,IAAKziB,EAAO0iB,QACzDhvB,EAAQjsC,EAAS+7E,kBAGjBoC,GADM/lB,EAAQl/B,UACCk/B,EAAQl/B,UAAUypC,mBAGrC,GAAI12B,GAAS,UAAUl/B,KAAKk/B,EAAMvyC,MAAO,CACrC,IAAI0kF,EAAYC,EAChB,MAAOpyC,GAAS,UAAUl/B,KAAKk/B,EAAMvyC,MAAO,CACxC,IAAIsE,EAAIiuC,EAAM9yC,MAAM2Q,QAAQyzE,EAAQp9C,OACpC,IAAU,GAANniC,EAAS,CACT,IAAIg9D,EAAMh7D,EAASg8E,qBACf/gB,EAASj7D,EAASi8E,wBAA0Bj+E,EAChDogF,EAAa,IAAI1Q,EAAM1S,EAAKC,EAAQD,EAAKC,EAASsiB,EAAQp9C,MAAMxgC,QAChE,KACJ,CACAssC,EAAQjsC,EAAS47E,cACrB,CAEI57E,EAAW,IAAIm7E,EAAc/iB,EAAS7f,EAAOyiB,IAAKziB,EAAO0iB,QACzDhvB,EAAQjsC,EAAS+7E,kBACrB,MAAO9vC,GAAS,UAAUl/B,KAAKk/B,EAAMvyC,MAAO,CACpCsE,EAAIiuC,EAAM9yC,MAAM2Q,QAAQyzE,EAAQn9C,KACpC,IAAU,GAANpiC,EAAS,CACLg9D,EAAMh7D,EAASg8E,qBACf/gB,EAASj7D,EAASi8E,wBAA0Bj+E,EAChDqgF,EAAW,IAAI3Q,EAAM1S,EAAKC,EAAQD,EAAKC,EAASsiB,EAAQn9C,IAAIzgC,QAC5D,KACJ,CACAssC,EAAQjsC,EAAS67E,aACrB,CACIwC,GACAjmB,EAAQ54D,OAAO6+E,GACfD,IACAhmB,EAAQ54D,OAAO4+E,GACfzQ,EAAWyQ,EAAWj+C,MAAM66B,IAC5BkjB,GAAWX,EAAQp9C,MAAMxgC,OAEjC,MACIu+E,EAAUX,EAAQp9C,MAAMxgC,OACxBguE,EAAWlxC,EAAM0D,MAAM66B,IACvB5C,EAAQ3S,OAAOhpB,EAAM2D,IAAKm9C,EAAQn9C,KAClCg4B,EAAQ3S,OAAOhpB,EAAM0D,MAAOo9C,EAAQp9C,OAEpCg+C,EAAah+C,MAAM66B,KAAO2S,IAC1BwQ,EAAah+C,MAAM86B,QAAUijB,GAC7BC,EAAa/9C,IAAI46B,KAAO2S,IACxBwQ,EAAa/9C,IAAI66B,QAAUijB,GAC/B9lB,EAAQl/B,UAAUkqC,kBAAkB+a,EArD1B,CAsDd,EAEAlmF,KAAKqmF,kBAAoB,SAASlyC,EAAOM,EAAM6xC,GAC3C,OAAOtmF,KAAKumF,WAAW9xC,EAC3B,EAEAz0C,KAAKwmF,aAAe,SAASryC,EAAOM,EAAMrtB,GACtC,OAAO,CACX,EAEApnB,KAAKymF,YAAc,SAAStyC,EAAO4c,EAAKgS,GACxC,EAEA/iE,KAAKumF,WAAa,SAAS9xC,GACvB,OAAOA,EAAKxyB,MAAM,QAAQ,EAC9B,EAEAjiB,KAAK0mF,aAAe,SAASvmB,GACzB,OAAO,IACX,EAEAngE,KAAK2mF,oBAAsB,SAAU3J,GAGjC,IAAK,IAAIj3E,KAFT/F,KAAKq/E,QAAU,GACfr/E,KAAK4mF,OAAS,CAAC,EACD5J,EACNA,EAAQj3E,KACR/F,KAAKq/E,QAAQ3yE,KAAK3G,GAClB/F,KAAK4mF,OAAO7gF,GAAK,IAAIi3E,EAAQj3E,IAIrC,IAAI8gF,EAAc,CAAC,qBAAsB,qBAAsB,oBAC3D,eAAgB,cAAe,kBAAmB,kBAEtD,IAAS9gF,EAAI,EAAGA,EAAI8gF,EAAYn/E,OAAQ3B,KACnC,SAAS+gF,GACR,IAAIC,EAAeF,EAAY9gF,GAC3BuoE,EAAiBwY,EAAMC,GAC3BD,EAAMD,EAAY9gF,IAAM,WACpB,OAAO/F,KAAKgnF,WAAWD,EAAct/E,UAAW6mE,EACpD,CACF,EANA,CAMEtuE,KAEV,EAEAA,KAAKgnF,WAAa,SAASC,EAAQvxD,EAAM44C,GACrC,IAAIn6B,EAAQze,EAAK,GACG,iBAATye,IACPA,EAAQA,EAAM,IAClB,IAAK,IAAIpuC,EAAI,EAAGA,EAAI/F,KAAKq/E,QAAQ33E,OAAQ3B,IACrC,GAAK/F,KAAK4mF,OAAO5mF,KAAKq/E,QAAQt5E,IAA9B,CAEA,IAAImY,EAAQi2B,EAAMj2B,MAAMle,KAAKq/E,QAAQt5E,IACrC,IAAKmY,EAAM,IAAMA,EAAM,GAAI,CACvBwX,EAAK,GAAKxX,EAAM,GAChB,IAAIvc,EAAO3B,KAAK4mF,OAAO5mF,KAAKq/E,QAAQt5E,IACpC,OAAOpE,EAAKslF,GAAQx9E,MAAM9H,EAAM+zB,EACpC,CAP2C,CAS/C,IAAIE,EAAM04C,EAAe7kE,MAAMzJ,KAAM01B,GACrC,OAAO44C,EAAiB14C,OAAMzlB,CAClC,EAEAnQ,KAAKknF,gBAAkB,SAAS/yC,EAAOhsC,EAAQ7F,EAAQ69D,EAASgnB,GAC5D,GAAInnF,KAAKqkF,WAAY,CACjB,IAAI9D,EAAavgF,KAAKqkF,WAAW5D,gBACjC,IAAK,IAAI33E,KAAOy3E,EACZ,GAAIA,EAAWz3E,GAAKX,GAAS,CACzB,IAAIytB,EAAM2qD,EAAWz3E,GAAKX,GAAQsB,MAAMzJ,KAAMyH,WAC9C,GAAImuB,EACA,OAAOA,CAEf,CAER,CACJ,EAEA51B,KAAKkgF,YAAc,SAASv0C,GACxB,IAAK3rC,KAAKonF,mBAAoB,CAC1B,IAAIjzE,EAAQnU,KAAKukF,WAAWpwE,MACxBizE,EAAqB,GACzB,IAAK,IAAIzqE,KAAQxI,EAEb,IADA,IAAIkzE,EAAUlzE,EAAMwI,GACX1W,EAAI,EAAG4B,EAAIw/E,EAAQ3/E,OAAQzB,EAAI4B,EAAG5B,IACvC,GAAgC,kBAArBohF,EAAQphF,GAAG+tC,MACd,0BAA0Bl/B,KAAKuyE,EAAQphF,GAAG+tC,QAC1CozC,EAAmB16E,KAAK26E,EAAQphF,GAAGkR,YAEtC,GAAgC,kBAArBkwE,EAAQphF,GAAG+tC,MACvB,IAAK,IAAI3tC,EAAI,EAAGihF,EAAUD,EAAQphF,GAAG+tC,MAAMtsC,OAAQrB,EAAIihF,EAASjhF,IAC5D,GAAI,0BAA0ByO,KAAKuyE,EAAQphF,GAAG+tC,MAAM3tC,IAAK,CACjDsW,EAAO0qE,EAAQphF,GAAGkR,MAAM8K,MAAM,YAAY5b,GAC9C+gF,EAAmB16E,KAAKiQ,EAAKqF,OAAO,EAAGrF,EAAKjV,OAAS,GACzD,CAKhB1H,KAAKonF,mBAAqBA,CAC9B,CACA,OAAKz7C,EAEEy7C,EAAmB5hF,OAAOxF,KAAKigF,cAAgB,IAD3CjgF,KAAKigF,YAEpB,EAEAjgF,KAAKunF,mBAAqB,WAGtB,OAFKvnF,KAAKwkF,iBACNxkF,KAAKskF,eACFtkF,KAAKigF,aAAejgF,KAAKwkF,gBAAgBvE,cAAgB,EACpE,EAEAjgF,KAAKwnF,eAAiB,SAASrzC,EAAOgsB,EAAS90C,EAAK0zD,GAChD,IAAIzlD,EAAWt5B,KAAKigF,cAAgBjgF,KAAKunF,qBACzC,OAAOjuD,EAASztB,KAAI,SAASsiB,GACzB,MAAO,CACH3b,KAAM2b,EACNjtB,MAAOitB,EACPs5D,MAAO,EACP1xE,KAAM,UAEd,GACJ,EAEA/V,KAAK0nF,IAAM,eACd,GAAE9iF,KAAKw/E,EAAKn8E,WAEbxC,EAAQ2+E,KAAOA,CACf,IAEAr8B,IAAImC,OAAO,kBAAkB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACzF,aA+BAF,EAAQkiF,WAAa,SAASC,EAAU5gE,EAAO6gE,GAE3C,IAAI9kB,EAAM/7C,EAAMkhB,MAAM66B,IAClB4S,EAAc3uD,EAAMkhB,MAAM86B,OAC1BvuB,EAAOmzC,EAAS7kB,IAAQ,GAC5B,OAAQ/7C,EAAM7e,QACV,IAAK,SACD,IAAIitC,EAAQpuB,EAAMouB,MAClB,GAAqB,IAAjBA,EAAM1tC,OACNkgF,EAAS7kB,GAAOtuB,EAAKxD,UAAU,EAAG0kC,GAAe3uD,EAAMouB,MAAM,GAAKX,EAAKxD,UAAU0kC,OAC9E,CACH,IAAIjgD,EAAO,CAACqtC,EAAK,GAAGv9D,OAAOwhB,EAAMouB,OACjCwyC,EAASljE,OAAOjb,MAAMm+E,EAAUlyD,GAChCkyD,EAAS7kB,GAAOtuB,EAAKxD,UAAU,EAAG0kC,GAAeiS,EAAS7kB,GAC1D6kB,EAAS7kB,EAAM/7C,EAAMouB,MAAM1tC,OAAS,IAAM+sC,EAAKxD,UAAU0kC,EAC7D,CACA,MACJ,IAAK,SACD,IAAIE,EAAY7uD,EAAMmhB,IAAI66B,OACtB4S,EAAS5uD,EAAMmhB,IAAI46B,IACnBA,IAAQ6S,EACRgS,EAAS7kB,GAAOtuB,EAAKxD,UAAU,EAAG0kC,GAAelhC,EAAKxD,UAAU4kC,GAEhE+R,EAASljE,OACLq+C,EAAK6S,EAAS7S,EAAM,EACpBtuB,EAAKxD,UAAU,EAAG0kC,GAAeiS,EAAShS,GAAQ3kC,UAAU4kC,IAGpE,MAEZ,CACA,IAEA9tB,IAAImC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,0BAA0B,SAASS,EAAUllD,EAASE,GAC1H,aAEA,IAAIouD,EAAMpJ,EAAS,aACfqjB,EAAerjB,EAAS,uBAAuBqjB,aAE/C8Z,EAASriF,EAAQqiF,OAAS,SAAS/2B,EAAKgS,EAAKC,GAC7ChjE,KAAK+nF,UAAY/nF,KAAK+C,SAAS4I,KAAK3L,MACpCA,KAAK60E,OAAO9jB,GAES,oBAAViS,EACPhjE,KAAKqmE,YAAYtD,EAAIA,IAAKA,EAAIC,QAE9BhjE,KAAKqmE,YAAYtD,EAAKC,EAC9B,GAEA,WAqBI,SAASglB,EAAeC,EAAQC,EAAQC,GACpC,IAAIC,EAAcD,EAAqBF,EAAOjlB,QAAUklB,EAAOllB,OAASilB,EAAOjlB,OAASklB,EAAOllB,OAC/F,OAAQilB,EAAOllB,IAAMmlB,EAAOnlB,KAASklB,EAAOllB,KAAOmlB,EAAOnlB,KAAOqlB,CACrE,CAEA,SAASC,EAAqBrhE,EAAOshE,EAAOC,GACxC,IAAIC,EAAgC,UAAhBxhE,EAAM7e,OACtBsgF,GAAiBD,EAAgB,GAAK,IAAMxhE,EAAMmhB,IAAI46B,IAAS/7C,EAAMkhB,MAAM66B,KAC3E2lB,GAAiBF,EAAgB,GAAK,IAAMxhE,EAAMmhB,IAAI66B,OAASh8C,EAAMkhB,MAAM86B,QAC3E2lB,EAAa3hE,EAAMkhB,MACnB0gD,EAAWJ,EAAgBG,EAAa3hE,EAAMmhB,IAClD,OAAI6/C,EAAeM,EAAOK,EAAYJ,GAC3B,CACHxlB,IAAKulB,EAAMvlB,IACXC,OAAQslB,EAAMtlB,QAGlBglB,EAAeY,EAAUN,GAAQC,GAC1B,CACHxlB,IAAKulB,EAAMvlB,IAAM0lB,EACjBzlB,OAAQslB,EAAMtlB,QAAUslB,EAAMvlB,KAAO6lB,EAAS7lB,IAAM2lB,EAAgB,IAIrE,CACH3lB,IAAK4lB,EAAW5lB,IAChBC,OAAQ2lB,EAAW3lB,OAE3B,CA/CAjP,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAK63E,YAAc,WACf,OAAO73E,KAAK6oF,wBAAwB7oF,KAAK+iE,IAAK/iE,KAAKgjE,OACvD,EACAhjE,KAAKo3E,YAAc,WACf,OAAOp3E,KAAKmG,QAChB,EACAnG,KAAK8oF,cAAe,EACpB9oF,KAAK+C,SAAW,SAASikB,GACrB,IAAIA,EAAMkhB,MAAM66B,KAAO/7C,EAAMmhB,IAAI46B,KAAO/7C,EAAMkhB,MAAM66B,KAAO/iE,KAAK+iE,QAG5D/7C,EAAMkhB,MAAM66B,IAAM/iE,KAAK+iE,KAA3B,CAGA,IAAIulB,EAAQD,EAAqBrhE,EAAO,CAAC+7C,IAAK/iE,KAAK+iE,IAAKC,OAAQhjE,KAAKgjE,QAAShjE,KAAK8oF,cACnF9oF,KAAKqmE,YAAYiiB,EAAMvlB,IAAKulB,EAAMtlB,QAAQ,EAHhC,CAId,EA+BAhjE,KAAKqmE,YAAc,SAAStD,EAAKC,EAAQ+lB,GACrC,IAAI19D,EAUJ,GARIA,EADA09D,EACM,CACFhmB,IAAKA,EACLC,OAAQA,GAGNhjE,KAAK6oF,wBAAwB9lB,EAAKC,GAGxChjE,KAAK+iE,KAAO13C,EAAI03C,KAAO/iE,KAAKgjE,QAAU33C,EAAI23C,OAA9C,CAGA,IAAI2L,EAAM,CACN5L,IAAK/iE,KAAK+iE,IACVC,OAAQhjE,KAAKgjE,QAGjBhjE,KAAK+iE,IAAM13C,EAAI03C,IACf/iE,KAAKgjE,OAAS33C,EAAI23C,OAClBhjE,KAAKuuE,QAAQ,SAAU,CACnBI,IAAKA,EACLztE,MAAOmqB,GAXD,CAad,EACArrB,KAAK80E,OAAS,WACV90E,KAAKmG,SAASuF,oBAAoB,SAAU1L,KAAK+nF,UACrD,EACA/nF,KAAK60E,OAAS,SAAS9jB,GACnB/wD,KAAKmG,SAAW4qD,GAAO/wD,KAAKmG,SAC5BnG,KAAKmG,SAAS5F,GAAG,SAAUP,KAAK+nF,UACpC,EACA/nF,KAAK6oF,wBAA0B,SAAS9lB,EAAKC,GACzC,IAAI33C,EAAM,CAAC,EAkBX,OAhBI03C,GAAO/iE,KAAKmG,SAASmhE,aACrBj8C,EAAI03C,IAAMl9C,KAAKkf,IAAI,EAAG/kC,KAAKmG,SAASmhE,YAAc,GAClDj8C,EAAI23C,OAAShjE,KAAKmG,SAAS8tE,QAAQ5oD,EAAI03C,KAAKr7D,QAEvCq7D,EAAM,GACX13C,EAAI03C,IAAM,EACV13C,EAAI23C,OAAS,IAGb33C,EAAI03C,IAAMA,EACV13C,EAAI23C,OAASn9C,KAAKif,IAAI9kC,KAAKmG,SAAS8tE,QAAQ5oD,EAAI03C,KAAKr7D,OAAQme,KAAKkf,IAAI,EAAGi+B,KAGzEA,EAAS,IACT33C,EAAI23C,OAAS,GAEV33C,CACX,CAEH,GAAEzmB,KAAKkjF,EAAO7/E,UAEf,IAEA8/C,IAAImC,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,cAAc,kBAAkB,wBAAwB,YAAY,eAAe,SAASS,EAAUllD,EAASE,GACvK,aAEA,IAAIouD,EAAMpJ,EAAS,aACfg9B,EAAah9B,EAAS,iBAAiBg9B,WACvC3Z,EAAerjB,EAAS,uBAAuBqjB,aAC/CyH,EAAQ9qB,EAAS,WAAW8qB,MAC5BqS,EAASn9B,EAAS,YAAYm9B,OAE9BkB,EAAW,SAASC,GACpBjpF,KAAKkpF,OAAS,CAAC,IACY,IAAvBD,EAAYvhF,OACZ1H,KAAKkpF,OAAS,CAAC,IACR5nF,MAAMsS,QAAQq1E,GACrBjpF,KAAKmpF,kBAAkB,CAACpmB,IAAK,EAAGC,OAAQ,GAAIimB,GAE5CjpF,KAAKwtD,OAAO,CAACuV,IAAK,EAAGC,OAAO,GAAIimB,EAExC,GAEA,WAEIl1B,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAK66C,SAAW,SAASxyC,GACrB,IAAIwgB,EAAM7oB,KAAKsnE,YAAc,EAC7BtnE,KAAKuH,OAAO,IAAIkuE,EAAM,EAAG,EAAG5sD,EAAK7oB,KAAKi0E,QAAQprD,GAAKnhB,SACnD1H,KAAKwtD,OAAO,CAACuV,IAAK,EAAGC,OAAQ,GAAI36D,EACrC,EACArI,KAAKyiC,SAAW,WACZ,OAAOziC,KAAKopF,cAAclmE,KAAKljB,KAAKqpF,sBACxC,EACArpF,KAAKu3E,aAAe,SAASxU,EAAKC,GAC9B,OAAO,IAAI8kB,EAAO9nF,KAAM+iE,EAAKC,EACjC,EACgC,IAA5B,MAAM9kD,MAAM,KAAKxW,OACjB1H,KAAKspF,OAAS,SAASjhF,GACnB,OAAOA,EAAK4W,QAAQ,WAAY,MAAMf,MAAM,KAChD,EAEAle,KAAKspF,OAAS,SAASjhF,GACnB,OAAOA,EAAK6V,MAAM,aACtB,EAIJle,KAAKupF,eAAiB,SAASlhF,GAC3B,IAAI4Z,EAAQ5Z,EAAK4Z,MAAM,qBACvBjiB,KAAKwpF,aAAevnE,EAAQA,EAAM,GAAK,KACvCjiB,KAAKuuE,QAAQ,oBACjB,EACAvuE,KAAKqpF,oBAAsB,WACvB,OAAQrpF,KAAKypF,cACX,IAAK,UACH,MAAO,OACT,IAAK,OACH,MAAO,KACT,QACE,OAAOzpF,KAAKwpF,cAAgB,KAEpC,EAEAxpF,KAAKwpF,aAAe,GACpBxpF,KAAKypF,aAAe,OACpBzpF,KAAK0pF,eAAiB,SAASC,GACvB3pF,KAAKypF,eAAiBE,IAG1B3pF,KAAKypF,aAAeE,EACpB3pF,KAAKuuE,QAAQ,qBACjB,EACAvuE,KAAK4pF,eAAiB,WAClB,OAAO5pF,KAAKypF,YAChB,EACAzpF,KAAK6pF,UAAY,SAASxhF,GACtB,MAAgB,QAARA,GAA0B,MAARA,GAAwB,MAARA,CAC9C,EACArI,KAAKi0E,QAAU,SAASlR,GACpB,OAAO/iE,KAAKkpF,OAAOnmB,IAAQ,EAC/B,EACA/iE,KAAK8pF,SAAW,SAASpT,EAAUC,GAC/B,OAAO32E,KAAKkpF,OAAOn8E,MAAM2pE,EAAUC,EAAU,EACjD,EACA32E,KAAKopF,YAAc,WACf,OAAOppF,KAAK8pF,SAAS,EAAG9pF,KAAKsnE,YACjC,EACAtnE,KAAKsnE,UAAY,WACb,OAAOtnE,KAAKkpF,OAAOxhF,MACvB,EACA1H,KAAK2rE,aAAe,SAASnnC,GACzB,OAAOxkC,KAAK+pF,iBAAiBvlD,GAAOthB,KAAKljB,KAAKqpF,sBAClD,EACArpF,KAAK+pF,iBAAmB,SAASvlD,GAC7B,IAAI4Q,EACJ,GAAI5Q,EAAM0D,MAAM66B,MAAQv+B,EAAM2D,IAAI46B,IAC9B3tB,EAAQ,CAACp1C,KAAKi0E,QAAQzvC,EAAM0D,MAAM66B,KAAK9xB,UAAUzM,EAAM0D,MAAM86B,OAAQx+B,EAAM2D,IAAI66B,aAC5E,CACH5tB,EAAQp1C,KAAK8pF,SAAStlD,EAAM0D,MAAM66B,IAAKv+B,EAAM2D,IAAI46B,KACjD3tB,EAAM,IAAMA,EAAM,IAAM,IAAInE,UAAUzM,EAAM0D,MAAM86B,QAClD,IAAIn7D,EAAIutC,EAAM1tC,OAAS,EACnB88B,EAAM2D,IAAI46B,IAAMv+B,EAAM0D,MAAM66B,KAAOl7D,IACnCutC,EAAMvtC,GAAKutC,EAAMvtC,GAAGopC,UAAU,EAAGzM,EAAM2D,IAAI66B,QACnD,CACA,OAAO5tB,CACX,EACAp1C,KAAKgqF,YAAc,SAASjnB,EAAK3tB,GAE7B,OADA/mC,QAAQC,KAAK,sFACNtO,KAAKiqF,gBAAgBlnB,EAAK3tB,EACrC,EACAp1C,KAAKkqF,YAAc,SAASxT,EAAUC,GAElC,OADAtoE,QAAQC,KAAK,sFACNtO,KAAKmqF,gBAAgBzT,EAAUC,EAC1C,EACA32E,KAAKoqF,cAAgB,SAASrjF,GAE1B,OADAsH,QAAQC,KAAK,mGACNtO,KAAKmpF,kBAAkBpiF,EAAU,CAAC,GAAI,IACjD,EACA/G,KAAKwtD,OAAS,SAASzmD,EAAUsB,GAI7B,OAHIrI,KAAKsnE,aAAe,GACpBtnE,KAAKupF,eAAelhF,GAEjBrI,KAAKmpF,kBAAkBpiF,EAAU/G,KAAKspF,OAAOjhF,GACxD,EACArI,KAAKulF,aAAe,SAASx+E,EAAUsB,GACnC,IAAI6/B,EAAQloC,KAAKqqF,WAAWtjF,EAASg8D,IAAKh8D,EAASi8D,QAC/C76B,EAAMnoC,KAAKqrB,IAAItkB,EAASg8D,IAAKh8D,EAASi8D,OAAS36D,EAAKX,QASxD,OAPA1H,KAAK2nF,WAAW,CACZz/C,MAAOA,EACPC,IAAKA,EACLhgC,OAAQ,SACRitC,MAAO,CAAC/sC,KACT,GAEIrI,KAAKsqF,SAASniD,EACzB,EAEAnoC,KAAKqqF,WAAa,SAAStnB,EAAKC,GAC5B,IAAIt7D,EAAS1H,KAAKsnE,iBACNn3D,IAAR4yD,EACAA,EAAMr7D,EACCq7D,EAAM,EACbA,EAAM,EACCA,GAAOr7D,IACdq7D,EAAMr7D,EAAS,EACfs7D,OAAS7yD,GAEb,IAAIskC,EAAOz0C,KAAKi0E,QAAQlR,GAIxB,YAHc5yD,GAAV6yD,IACAA,EAASvuB,EAAK/sC,QAClBs7D,EAASn9C,KAAKif,IAAIjf,KAAKkf,IAAIi+B,EAAQ,GAAIvuB,EAAK/sC,QACrC,CAACq7D,IAAKA,EAAKC,OAAQA,EAC9B,EAEAhjE,KAAKsqF,SAAW,SAASj/D,GACrB,MAAO,CAAC03C,IAAK13C,EAAI03C,IAAKC,OAAQ33C,EAAI23C,OACtC,EAEAhjE,KAAKqrB,IAAM,SAAS03C,EAAKC,GACrB,MAAO,CAACD,IAAKA,EAAKC,OAAQA,EAC9B,EAEAhjE,KAAKuqF,cAAgB,SAASxjF,GAC1B,IAAIW,EAAS1H,KAAKsnE,YAQlB,OAPIvgE,EAASg8D,KAAOr7D,GAChBX,EAASg8D,IAAMl9C,KAAKkf,IAAI,EAAGr9B,EAAS,GACpCX,EAASi8D,OAAShjE,KAAKi0E,QAAQvsE,EAAS,GAAGA,SAE3CX,EAASg8D,IAAMl9C,KAAKkf,IAAI,EAAGh+B,EAASg8D,KACpCh8D,EAASi8D,OAASn9C,KAAKif,IAAIjf,KAAKkf,IAAIh+B,EAASi8D,OAAQ,GAAIhjE,KAAKi0E,QAAQltE,EAASg8D,KAAKr7D,SAEjFX,CACX,EACA/G,KAAKiqF,gBAAkB,SAASlnB,EAAK3tB,GACjC2tB,EAAMl9C,KAAKif,IAAIjf,KAAKkf,IAAIg+B,EAAK,GAAI/iE,KAAKsnE,aACtC,IAAItE,EAAS,EACTD,EAAM/iE,KAAKsnE,aACXlyB,EAAQA,EAAM5vC,OAAO,CAAC,KACtBw9D,EAAS,IAET5tB,EAAQ,CAAC,IAAI5vC,OAAO4vC,GACpB2tB,IACAC,EAAShjE,KAAKkpF,OAAOnmB,GAAKr7D,QAE9B1H,KAAKmpF,kBAAkB,CAACpmB,IAAKA,EAAKC,OAAQA,GAAS5tB,EACvD,EACAp1C,KAAKmpF,kBAAoB,SAASpiF,EAAUquC,GACxC,IAAIlN,EAAQloC,KAAKqqF,WAAWtjF,EAASg8D,IAAKh8D,EAASi8D,QAC/C76B,EAAM,CACN46B,IAAK76B,EAAM66B,IAAM3tB,EAAM1tC,OAAS,EAChCs7D,QAAyB,GAAhB5tB,EAAM1tC,OAAcwgC,EAAM86B,OAAS,GAAK5tB,EAAMA,EAAM1tC,OAAS,GAAGA,QAU7E,OAPA1H,KAAK2nF,WAAW,CACZz/C,MAAOA,EACPC,IAAKA,EACLhgC,OAAQ,SACRitC,MAAOA,IAGJp1C,KAAKsqF,SAASniD,EACzB,EACAnoC,KAAKuH,OAAS,SAASi9B,GACnB,IAAI0D,EAAQloC,KAAKqqF,WAAW7lD,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,QACrD76B,EAAMnoC,KAAKqqF,WAAW7lD,EAAM2D,IAAI46B,IAAKv+B,EAAM2D,IAAI66B,QAOnD,OANAhjE,KAAK2nF,WAAW,CACZz/C,MAAOA,EACPC,IAAKA,EACLhgC,OAAQ,SACRitC,MAAOp1C,KAAK+pF,iBAAiB,CAAC7hD,MAAOA,EAAOC,IAAKA,MAE9CnoC,KAAKsqF,SAASpiD,EACzB,EACAloC,KAAKolF,aAAe,SAASriB,EAAK4S,EAAaE,GAC3C,IAAI3tC,EAAQloC,KAAKqqF,WAAWtnB,EAAK4S,GAC7BxtC,EAAMnoC,KAAKqqF,WAAWtnB,EAAK8S,GAS/B,OAPA71E,KAAK2nF,WAAW,CACZz/C,MAAOA,EACPC,IAAKA,EACLhgC,OAAQ,SACRitC,MAAOp1C,KAAK+pF,iBAAiB,CAAC7hD,MAAOA,EAAOC,IAAKA,MAClD,GAEInoC,KAAKsqF,SAASpiD,EACzB,EACAloC,KAAKmqF,gBAAkB,SAASzT,EAAUC,GACtCD,EAAW7wD,KAAKif,IAAIjf,KAAKkf,IAAI,EAAG2xC,GAAW12E,KAAKsnE,YAAc,GAC9DqP,EAAW9wD,KAAKif,IAAIjf,KAAKkf,IAAI,EAAG4xC,GAAW32E,KAAKsnE,YAAc,GAC9D,IAAIkjB,EAAqB7T,GAAW32E,KAAKsnE,YAAc,GAAKoP,EAAW,EACnE+T,EAAqB9T,EAAW32E,KAAKsnE,YAAc,EACnDoO,EAAa8U,EAAqB9T,EAAW,EAAqBA,EAClEgU,EAAaF,EAAqBxqF,KAAKi0E,QAAQyB,GAAUhuE,OAAS,EAClEkuE,EAAa6U,EAAqB9T,EAAU,EAAsBA,EAClEgU,EAAaF,EAAqB,EAAgCzqF,KAAKi0E,QAAQ2B,GAAQluE,OACvF88B,EAAQ,IAAIixC,EAAMC,EAAUgV,EAAU9U,EAAQ+U,GAC9CC,EAAe5qF,KAAKkpF,OAAOn8E,MAAM2pE,EAAUC,EAAU,GAQzD,OANA32E,KAAK2nF,WAAW,CACZz/C,MAAO1D,EAAM0D,MACbC,IAAK3D,EAAM2D,IACXhgC,OAAQ,SACRitC,MAAOp1C,KAAK+pF,iBAAiBvlD,KAE1BomD,CACX,EACA5qF,KAAK6qF,cAAgB,SAAS9nB,GACtBA,EAAM/iE,KAAKsnE,YAAc,GAAKvE,GAAO,GACrC/iE,KAAK2nF,WAAW,CACZz/C,MAAOloC,KAAKqrB,IAAI03C,EAAK/iE,KAAKi0E,QAAQlR,GAAKr7D,QACvCygC,IAAKnoC,KAAKqrB,IAAI03C,EAAM,EAAG,GACvB56D,OAAQ,SACRitC,MAAO,CAAC,GAAI,KAGxB,EACAp1C,KAAKif,QAAU,SAASulB,EAAOn8B,GAG3B,OAFMm8B,aAAiBixC,IACnBjxC,EAAQixC,EAAMmB,WAAWpyC,EAAM0D,MAAO1D,EAAM2D,MAC5B,IAAhB9/B,EAAKX,QAAgB88B,EAAMsa,UACpBta,EAAM0D,MACb7/B,GAAQrI,KAAK2rE,aAAannC,GACnBA,EAAM2D,KAEjBnoC,KAAKuH,OAAOi9B,GAGR2D,EADA9/B,EACMrI,KAAKwtD,OAAOhpB,EAAM0D,MAAO7/B,GAGzBm8B,EAAM0D,MAGTC,GARP,IAAIA,CASR,EACAnoC,KAAK8qF,YAAc,SAASC,GACxB,IAAK,IAAIhlF,EAAE,EAAGA,EAAEglF,EAAOrjF,OAAQ3B,IAC3B/F,KAAK2nF,WAAWoD,EAAOhlF,GAE/B,EACA/F,KAAKgrF,aAAe,SAASD,GACzB,IAAK,IAAIhlF,EAAEglF,EAAOrjF,OAAO,EAAG3B,GAAG,EAAGA,IAC9B/F,KAAKirF,YAAYF,EAAOhlF,GAEhC,EACA/F,KAAK2nF,WAAa,SAAS3gE,EAAO6gE,GAC9B,IAAIqD,EAA2B,UAAhBlkE,EAAM7e,QACjB+iF,EAAWlkE,EAAMouB,MAAM1tC,QAAU,IAAMsf,EAAMouB,MAAM,IAChDqgC,EAAMH,cAActuD,EAAMkhB,MAAOlhB,EAAMmhB,QAI1C+iD,GAAYlkE,EAAMouB,MAAM1tC,OAAS,KACjC1H,KAAKmrF,yBAAyBnkE,EAAO,KACzC2gE,EAAW3nF,KAAKkpF,OAAQliE,EAAO6gE,GAC/B7nF,KAAKuuE,QAAQ,SAAUvnD,GAC3B,EAEAhnB,KAAKmrF,yBAA2B,SAASnkE,EAAOokE,GAC5C,IAAIh2C,EAAQpuB,EAAMouB,MACdvtC,EAAIutC,EAAM1tC,OACVq7D,EAAM/7C,EAAMkhB,MAAM66B,IAClBC,EAASh8C,EAAMkhB,MAAM86B,OACrBlX,EAAO,EAAGviC,EAAK,EACnB,EAAG,CACCuiC,EAAOviC,EACPA,GAAM6hE,EAAM,EACZ,IAAIC,EAAQj2C,EAAMroC,MAAM++C,EAAMviC,GAC9B,GAAIA,EAAK1hB,EAAG,CACRmf,EAAMouB,MAAQi2C,EACdrkE,EAAMkhB,MAAM66B,IAAMA,EAAMjX,EACxB9kC,EAAMkhB,MAAM86B,OAASA,EACrB,KACJ,CACAqoB,EAAM3+E,KAAK,IACX1M,KAAK2nF,WAAW,CACZz/C,MAAOloC,KAAKqrB,IAAI03C,EAAMjX,EAAMkX,GAC5B76B,IAAKnoC,KAAKqrB,IAAI03C,EAAMx5C,EAAIy5C,EAAS,GACjC76D,OAAQ6e,EAAM7e,OACditC,MAAOi2C,IACR,EACP,OAAQ,EACZ,EACArrF,KAAKirF,YAAc,SAASjkE,GACxBhnB,KAAK2nF,WAAW,CACZz/C,MAAOloC,KAAKsqF,SAAStjE,EAAMkhB,OAC3BC,IAAKnoC,KAAKsqF,SAAStjE,EAAMmhB,KACzBhgC,OAAyB,UAAhB6e,EAAM7e,OAAqB,SAAW,SAC/CitC,MAAOpuB,EAAMouB,MAAMroC,SAE3B,EACA/M,KAAKsrF,gBAAkB,SAAS9uE,EAAOk5D,GAGnC,IAFA,IAAItgC,EAAQp1C,KAAKkpF,QAAUlpF,KAAKopF,cAC5BmC,EAAgBvrF,KAAKqpF,sBAAsB3hF,OACtC3B,EAAI2vE,GAAY,EAAG7tE,EAAIutC,EAAM1tC,OAAQ3B,EAAI8B,EAAG9B,IAEjD,GADAyW,GAAS44B,EAAMrvC,GAAG2B,OAAS6jF,EACvB/uE,EAAQ,EACR,MAAO,CAACumD,IAAKh9D,EAAGi9D,OAAQxmD,EAAQ44B,EAAMrvC,GAAG2B,OAAS6jF,GAE1D,MAAO,CAACxoB,IAAKl7D,EAAE,EAAGm7D,OAAQ5tB,EAAMvtC,EAAE,GAAGH,OACzC,EACA1H,KAAKwrF,gBAAkB,SAASngE,EAAKqqD,GAKjC,IAJA,IAAItgC,EAAQp1C,KAAKkpF,QAAUlpF,KAAKopF,cAC5BmC,EAAgBvrF,KAAKqpF,sBAAsB3hF,OAC3C8U,EAAQ,EACRumD,EAAMl9C,KAAKif,IAAIzZ,EAAI03C,IAAK3tB,EAAM1tC,QACzB3B,EAAI2vE,GAAY,EAAG3vE,EAAIg9D,IAAOh9D,EACnCyW,GAAS44B,EAAMrvC,GAAG2B,OAAS6jF,EAE/B,OAAO/uE,EAAQ6O,EAAI23C,MACvB,CAEH,GAAEp+D,KAAKokF,EAAS/gF,WAEjBxC,EAAQujF,SAAWA,CACnB,IAEAjhC,IAAImC,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,0BAA0B,SAASS,EAAUllD,EAASE,GACxI,aAEA,IAAIouD,EAAMpJ,EAAS,aACfqjB,EAAerjB,EAAS,uBAAuBqjB,aAE/Cyd,EAAsB,SAASC,EAAWppF,GAC1CtC,KAAK2rF,SAAU,EACf3rF,KAAKo1C,MAAQ,GACbp1C,KAAK28E,OAAS,GACd38E,KAAK4rF,YAAc,EACnB5rF,KAAK0rF,UAAYA,EAEjB,IAAI7oF,EAAO7C,KAEXA,KAAK6rF,QAAU,WACX,GAAKhpF,EAAK8oF,QAAV,CAEA,IAAIG,EAAc,IAAIxiF,KAClBsiF,EAAc/oF,EAAK+oF,YACnBG,GAAW,EACXh7B,EAAMluD,EAAKkuD,IAEXi7B,EAAYJ,EAChB,MAAO/oF,EAAKuyC,MAAMw2C,GACdA,IAEJ,IAAI/iE,EAAMkoC,EAAIuW,YACV2kB,EAAiB,EACrBppF,EAAK8oF,SAAU,EACf,MAAOC,EAAc/iE,EAAK,CACtBhmB,EAAKqpF,aAAaN,GAClBG,EAAUH,EACV,GACIA,UACK/oF,EAAKuyC,MAAMw2C,IAEpB,GADAK,IACKA,EAAiB,IAAM,GAAO,IAAI3iF,KAASwiF,EAAe,GAAI,CAC/DjpF,EAAK8oF,QAAU17D,WAAWptB,EAAKgpF,QAAS,IACxC,KACJ,CACJ,CACAhpF,EAAK+oF,YAAcA,EAEfI,GAAaD,GACblpF,EAAKspF,gBAAgBH,EAAWD,EA7BP,CA8BjC,CACJ,GAEA,WAEIh4B,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAKosF,aAAe,SAASV,GACzB1rF,KAAK0rF,UAAYA,EACjB1rF,KAAKo1C,MAAQ,GACbp1C,KAAK28E,OAAS,GAEd38E,KAAKkoC,MAAM,EACf,EACAloC,KAAKqsF,YAAc,SAASt7B,GACxB/wD,KAAK+wD,IAAMA,EACX/wD,KAAKo1C,MAAQ,GACbp1C,KAAK28E,OAAS,GAEd38E,KAAK8lE,MACT,EACA9lE,KAAKmsF,gBAAkB,SAASzV,EAAUC,GACtC,IAAIt0E,EAAO,CACPsmC,MAAO+tC,EACPnyD,KAAMoyD,GAEV32E,KAAKuuE,QAAQ,SAAU,CAAClsE,KAAMA,GAClC,EACArC,KAAKkoC,MAAQ,SAASwtC,GAClB11E,KAAK4rF,YAAc/lE,KAAKif,IAAI4wC,GAAY,EAAG11E,KAAK4rF,YAAa5rF,KAAK+wD,IAAIuW,aACtEtnE,KAAKo1C,MAAM1wB,OAAO1kB,KAAK4rF,YAAa5rF,KAAKo1C,MAAM1tC,QAC/C1H,KAAK28E,OAAOj4D,OAAO1kB,KAAK4rF,YAAa5rF,KAAK28E,OAAOj1E,QAEjD1H,KAAK8lE,OACL9lE,KAAK2rF,QAAU17D,WAAWjwB,KAAK6rF,QAAS,IAC5C,EAEA7rF,KAAKssF,cAAgB,WACZtsF,KAAK2rF,UACN3rF,KAAK2rF,QAAU17D,WAAWjwB,KAAK6rF,QAAS,KAChD,EAEA7rF,KAAKusF,gBAAkB,SAASvlE,GAC5B,IAAI0uD,EAAW1uD,EAAMkhB,MAAM66B,IACvBl6C,EAAM7B,EAAMmhB,IAAI46B,IAAM2S,EAE1B,GAAY,IAAR7sD,EACA7oB,KAAKo1C,MAAMsgC,GAAY,UACpB,GAAoB,UAAhB1uD,EAAM7e,OACbnI,KAAKo1C,MAAM1wB,OAAOgxD,EAAU7sD,EAAM,EAAG,MACrC7oB,KAAK28E,OAAOj4D,OAAOgxD,EAAU7sD,EAAM,EAAG,UACnC,CACH,IAAI6M,EAAOp0B,MAAMunB,EAAM,GACvB6M,EAAKzS,QAAQyyD,EAAU,GACvB11E,KAAKo1C,MAAM1wB,OAAOjb,MAAMzJ,KAAKo1C,MAAO1f,GACpC11B,KAAK28E,OAAOj4D,OAAOjb,MAAMzJ,KAAK28E,OAAQjnD,EAC1C,CAEA11B,KAAK4rF,YAAc/lE,KAAKif,IAAI4wC,EAAU11E,KAAK4rF,YAAa5rF,KAAK+wD,IAAIuW,aAEjEtnE,KAAK8lE,MACT,EACA9lE,KAAK8lE,KAAO,WACJ9lE,KAAK2rF,SACLpnD,aAAavkC,KAAK2rF,SACtB3rF,KAAK2rF,SAAU,CACnB,EACA3rF,KAAKwjF,UAAY,SAASzgB,GACtB,OAAO/iE,KAAKo1C,MAAM2tB,IAAQ/iE,KAAKksF,aAAanpB,EAChD,EACA/iE,KAAKwsF,SAAW,SAASzpB,GAGrB,OAFI/iE,KAAK4rF,aAAe7oB,GACpB/iE,KAAKksF,aAAanpB,GACf/iE,KAAK28E,OAAO5Z,IAAQ,OAC/B,EAEA/iE,KAAKksF,aAAe,SAASnpB,GACzB,IAAItuB,EAAOz0C,KAAK+wD,IAAIkjB,QAAQlR,GACxB5uB,EAAQn0C,KAAK28E,OAAO5Z,EAAM,GAE1B1gE,EAAOrC,KAAK0rF,UAAUpN,cAAc7pC,EAAMN,EAAO4uB,GAWrD,OATI/iE,KAAK28E,OAAO5Z,GAAO,KAAO1gE,EAAK8xC,MAAQ,IACvCn0C,KAAK28E,OAAO5Z,GAAO1gE,EAAK8xC,MACxBn0C,KAAKo1C,MAAM2tB,EAAM,GAAK,KAClB/iE,KAAK4rF,YAAc7oB,EAAM,IACzB/iE,KAAK4rF,YAAc7oB,EAAM,IACtB/iE,KAAK4rF,aAAe7oB,IAC3B/iE,KAAK4rF,YAAc7oB,EAAM,GAGtB/iE,KAAKo1C,MAAM2tB,GAAO1gE,EAAK27E,MAClC,CAEH,GAAEp5E,KAAK6mF,EAAoBxjF,WAE5BxC,EAAQgmF,oBAAsBA,CAC9B,IAEA1jC,IAAImC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,cAAc,SAASS,EAAUllD,EAASE,GACvI,aAEA,IAAI9E,EAAO8pD,EAAS,cAEhB8qB,GADM9qB,EAAS,aACPA,EAAS,WAAW8qB,OAE5BgX,EAAkB,SAASxwB,EAAQywB,EAAOjrF,GAC1CzB,KAAK2sF,UAAU1wB,GACfj8D,KAAK0sF,MAAQA,EACb1sF,KAAKyB,KAAOA,GAAQ,MACxB,GAEA,WACIzB,KAAK4sF,WAAa,IAElB5sF,KAAK2sF,UAAY,SAAS1wB,GAClBj8D,KAAKi8D,OAAO,IAAMA,EAAO,KAE7Bj8D,KAAKi8D,OAASA,EACdj8D,KAAK+Y,MAAQ,GACjB,EAEA/Y,KAAKsQ,OAAS,SAAS21C,EAAM4mC,EAAa1sB,EAASlxD,GAC/C,GAAKjP,KAAKi8D,OAIV,IAFA,IAAI/zB,EAAQj5B,EAAOynE,SAAUvuC,EAAMl5B,EAAO0nE,QAEjC5wE,EAAImiC,EAAOniC,GAAKoiC,EAAKpiC,IAAK,CAC/B,IAAIq2E,EAASp8E,KAAK+Y,MAAMhT,GACV,MAAVq2E,IACAA,EAASv7E,EAAKm7D,gBAAgBmE,EAAQ8T,QAAQluE,GAAI/F,KAAKi8D,QACnDmgB,EAAO10E,OAAS1H,KAAK4sF,aACrBxQ,EAASA,EAAOrvE,MAAM,EAAG/M,KAAK4sF,aAClCxQ,EAASA,EAAOvwE,KAAI,SAASoW,GACzB,OAAO,IAAIwzD,EAAM1vE,EAAGkc,EAAMi6C,OAAQn2D,EAAGkc,EAAMi6C,OAASj6C,EAAMva,OAC9D,IACA1H,KAAK+Y,MAAMhT,GAAKq2E,EAAO10E,OAAS00E,EAAS,IAG7C,IAAK,IAAIz5D,EAAIy5D,EAAO10E,OAAQib,KACxBkqE,EAAYC,qBACR7mC,EAAMm2B,EAAOz5D,GAAGm0D,cAAc3W,GAAUngE,KAAK0sF,MAAOz9E,EAEhE,CACJ,CAEH,GAAErK,KAAK6nF,EAAgBxkF,WAExBxC,EAAQgnF,gBAAkBA,CAC1B,IAEA1kC,IAAImC,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,cAAc,SAASS,EAAUllD,EAASE,GAChH,aAEA,IAAI8vE,EAAQ9qB,EAAS,YAAY8qB,MACjC,SAASsX,EAASC,EAAUC,GACxBjtF,KAAKgtF,SAAWA,EACZ1rF,MAAMsS,QAAQq5E,GACdjtF,KAAKitF,MAAQA,EAEbA,EAAQjtF,KAAKitF,MAAQ,CAAEA,GAG3B,IAAI1oE,EAAO0oE,EAAMA,EAAMvlF,OAAS,GAChC1H,KAAKwkC,MAAQ,IAAIixC,EAAMwX,EAAM,GAAG/kD,MAAM66B,IAAKkqB,EAAM,GAAG/kD,MAAM86B,OACnCz+C,EAAK4jB,IAAI46B,IAAKx+C,EAAK4jB,IAAI66B,QAC9ChjE,KAAKkoC,MAAQloC,KAAKwkC,MAAM0D,MACxBloC,KAAKmoC,IAAQnoC,KAAKwkC,MAAM2D,IAExBnoC,KAAKitF,MAAM/iF,SAAQ,SAASupE,GACxBA,EAAKyZ,YAAYltF,KACrB,GAAGA,KACP,EAEA,WACIA,KAAKmtF,SAAW,SAASrpE,GACrB9jB,KAAKkoC,MAAM66B,KAAOj/C,EAClB9jB,KAAKmoC,IAAI46B,KAAOj/C,EAChB9jB,KAAKitF,MAAM/iF,SAAQ,SAASupE,GACxBA,EAAKvrC,MAAM66B,KAAOj/C,EAClB2vD,EAAKtrC,IAAI46B,KAAOj/C,CACpB,GACJ,EAEA9jB,KAAKk0E,QAAU,SAAST,GACpB,GAAIA,EAAK2Z,QAAS,CACd,GAAI3Z,EAAKvrC,MAAM66B,IAAM/iE,KAAK01E,UAAYjC,EAAKmC,OAAS51E,KAAK41E,OACrD,MAAM,IAAIttE,MAAM,6DAEpBtI,KAAKitF,MAAMvgF,KAAK+mE,GAChBzzE,KAAKitF,MAAMz/D,MAAK,SAASnnB,EAAGP,GACxB,OAAQO,EAAEm+B,MAAM+xC,WAAWzwE,EAAEoiC,MAAM66B,IAAKj9D,EAAEoiC,MAAM86B,OACpD,IACIhjE,KAAKwkC,MAAM+xC,WAAW9C,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,QAAU,GAC3DhjE,KAAKmoC,IAAI46B,IAAM0Q,EAAKtrC,IAAI46B,IACxB/iE,KAAKmoC,IAAI66B,OAAUyQ,EAAKtrC,IAAI66B,QACrBhjE,KAAKwkC,MAAM8xC,aAAa7C,EAAKtrC,IAAI46B,IAAK0Q,EAAKtrC,IAAI66B,QAAU,IAChEhjE,KAAKkoC,MAAM66B,IAAM0Q,EAAKvrC,MAAM66B,IAC5B/iE,KAAKkoC,MAAM86B,OAASyQ,EAAKvrC,MAAM86B,OAEvC,MAAO,GAAIyQ,EAAKvrC,MAAM66B,KAAO/iE,KAAKmoC,IAAI46B,IAClC/iE,KAAKitF,MAAMvgF,KAAK+mE,GAChBzzE,KAAKmoC,IAAI46B,IAAM0Q,EAAKtrC,IAAI46B,IACxB/iE,KAAKmoC,IAAI66B,OAASyQ,EAAKtrC,IAAI66B,WACxB,IAAIyQ,EAAKtrC,IAAI46B,KAAO/iE,KAAKkoC,MAAM66B,IAKlC,MAAM,IAAIz6D,MAAM,kEAJhBtI,KAAKitF,MAAMhqE,QAAQwwD,GACnBzzE,KAAKkoC,MAAM66B,IAAM0Q,EAAKvrC,MAAM66B,IAC5B/iE,KAAKkoC,MAAM86B,OAASyQ,EAAKvrC,MAAM86B,MAGnC,CACAyQ,EAAKuG,SAAWh6E,IACpB,EAEAA,KAAKqtF,YAAc,SAAStqB,GACxB,OAAOA,GAAO/iE,KAAKkoC,MAAM66B,KAAOA,GAAO/iE,KAAKmoC,IAAI46B,GACpD,EAEA/iE,KAAKquB,KAAO,SAASje,EAAUwlE,EAAQC,GACnC,IAEIpC,EACA7mD,EAAKk5C,EAHLwnB,EAAU,EACVL,EAAQjtF,KAAKitF,MAEFM,GAAW,EAEZ,MAAV3X,IACAA,EAAS51E,KAAKmoC,IAAI46B,IAClB8S,EAAY71E,KAAKmoC,IAAI66B,QAGzB,IAAK,IAAIj9D,EAAI,EAAGA,EAAIknF,EAAMvlF,OAAQ3B,IAAK,CAInC,GAHA0tE,EAAOwZ,EAAMlnF,GAEb6mB,EAAM6mD,EAAKjvC,MAAM8xC,aAAaV,EAAQC,IAC1B,GAARjpD,EAEA,YADAxc,EAAS,KAAMwlE,EAAQC,EAAWyX,EAASC,GAM/C,GAFAznB,EAAO11D,EAAS,KAAMqjE,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,OAAQsqB,EAASC,GAClEznB,GAAQA,GAAQ11D,EAASqjE,EAAK+Z,YAAa/Z,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,OAAQsqB,GAC1ExnB,GAAgB,IAARl5C,EACR,OAEJ2gE,GAAY9Z,EAAK2Z,QACjBE,EAAU7Z,EAAKtrC,IAAI66B,MACvB,CACA5yD,EAAS,KAAMwlE,EAAQC,EAAWyX,EAASC,EAC/C,EAEAvtF,KAAKytF,cAAgB,SAAS1qB,EAAKC,GAE/B,IADA,IAAIyQ,EAAM7mD,EACD7mB,EAAI,EAAGA,EAAI/F,KAAKitF,MAAMvlF,OAAQ3B,IAAK,CAGxC,GAFA0tE,EAAOzzE,KAAKitF,MAAMlnF,GAClB6mB,EAAM6mD,EAAKjvC,MAAM+xC,WAAWxT,EAAKC,IACrB,GAARp2C,EACA,MAAO,CACH6mD,KAAMA,EACNia,KAAM,SAEP,GAAY,IAAR9gE,EACP,MAAO,CACH6mD,KAAMA,EACNia,KAAM,SAGlB,CACA,OAAO,IACX,EAEA1tF,KAAK2tF,eAAiB,SAAS5qB,EAAKC,EAAQn6C,GACxC,IACI4qD,EAAMwZ,EADNr3D,EAAM51B,KAAKytF,cAAc1qB,EAAKC,GAElC,GAAIptC,EAEA,GADA69C,EAAO79C,EAAI69C,KACK,UAAZ79C,EAAI83D,MACDja,EAAKvrC,MAAM86B,QAAUA,GACrByQ,EAAKvrC,MAAM66B,KAAOA,EAErB/7D,OAAOqH,SAAWrH,OAAOqH,QAAQuhB,IAAImzC,EAAKC,EAAQyQ,QAC/C,GAAIA,EAAKvrC,MAAM66B,KAAOA,EAAK,CAC9BkqB,EAAQjtF,KAAKitF,MACb,IAAIlnF,EAAIknF,EAAMp7E,QAAQ4hE,GAItB,IAHU,IAAN1tE,IACA/F,KAAKkoC,MAAM86B,QAAUn6C,GAEpB9iB,EAAGA,EAAIknF,EAAMvlF,OAAQ3B,IAAK,CAG3B,GAFA0tE,EAAOwZ,EAAMlnF,GACb0tE,EAAKvrC,MAAM86B,QAAUn6C,GAChB4qD,EAAK2Z,QACN,OAEJ3Z,EAAKtrC,IAAI66B,QAAUn6C,CACvB,CACA7oB,KAAKmoC,IAAI66B,QAAUn6C,CACvB,CAER,EAEA7oB,KAAKke,MAAQ,SAAS6kD,EAAKC,GACvB,IAAI33C,EAAMrrB,KAAKytF,cAAc1qB,EAAKC,GAElC,IAAK33C,GAAmB,UAAZA,EAAIqiE,KACZ,OAAO,KAEX,IAAIja,EAAOpoD,EAAIooD,KACXwZ,EAAQjtF,KAAKitF,MACbD,EAAWhtF,KAAKgtF,SAEhBjnF,EAAIknF,EAAMp7E,QAAQ4hE,GAClBma,EAAaX,EAAMlnF,EAAI,GAC3B/F,KAAKmoC,IAAI46B,IAAM6qB,EAAWzlD,IAAI46B,IAC9B/iE,KAAKmoC,IAAI66B,OAAS4qB,EAAWzlD,IAAI66B,OACjCiqB,EAAQA,EAAMvoE,OAAO3e,EAAGknF,EAAMvlF,OAAS3B,GAEvC,IAAI8nF,EAAc,IAAId,EAASC,EAAUC,GAEzC,OADAD,EAAStoE,OAAOsoE,EAASn7E,QAAQ7R,MAAQ,EAAG,EAAG6tF,GACxCA,CACX,EAEA7tF,KAAK2+E,MAAQ,SAASmP,GAElB,IADA,IAAIb,EAAQa,EAAab,MAChBlnF,EAAI,EAAGA,EAAIknF,EAAMvlF,OAAQ3B,IAC9B/F,KAAKk0E,QAAQ+Y,EAAMlnF,IAEvB,IAAIinF,EAAWhtF,KAAKgtF,SACpBA,EAAStoE,OAAOsoE,EAASn7E,QAAQi8E,GAAe,EACpD,EAEA9tF,KAAKuJ,SAAW,WACZ,IAAIqsB,EAAM,CAAC51B,KAAKwkC,MAAMj7B,WAAa,OAMnC,OAJAvJ,KAAKitF,MAAM/iF,SAAQ,SAASupE,GACxB79C,EAAIlpB,KAAK,KAAO+mE,EAAKlqE,WACzB,IACAqsB,EAAIlpB,KAAK,KACFkpB,EAAI1S,KAAK,KACpB,EAEAljB,KAAK+tF,cAAgB,SAAS9kE,GAG1B,IAFA,IAAI+kE,EAAoB,EAEfjoF,EAAI,EAAGA,EAAI/F,KAAKitF,MAAMvlF,OAAQ3B,IAAK,CACxC,IAAI0tE,EAAOzzE,KAAKitF,MAAMlnF,GAGtB,GADAkjB,GAAOwqD,EAAKvrC,MAAM86B,OAASgrB,EACvB/kE,EAAM,EACN,MAAO,CACH85C,IAAK0Q,EAAKvrC,MAAM66B,IAChBC,OAAQyQ,EAAKvrC,MAAM86B,OAAS/5C,GAKpC,GADAA,GAAOwqD,EAAK+Z,YAAY9lF,OACpBuhB,EAAM,EACN,OAAOwqD,EAAKvrC,MAGhB8lD,EAAoBva,EAAKtrC,IAAI66B,MACjC,CAEA,MAAO,CACHD,IAAK/iE,KAAKmoC,IAAI46B,IACdC,OAAQhjE,KAAKmoC,IAAI66B,OAAS/5C,EAElC,CACH,GAAErkB,KAAKmoF,EAAS9kF,WAEjBxC,EAAQsnF,SAAWA,CACnB,IAEAhlC,IAAImC,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,cAAc,SAASS,EAAUllD,EAASE,GACpG,aACA,IAAI8vE,EAAQ9qB,EAAS,WAAW8qB,MAC5BH,EAAgBG,EAAMH,cAEtB2Y,EAAY,WACZjuF,KAAKo8E,OAAS,EAClB,GAEA,WACIp8E,KAAKs1E,cAAgBA,EAErBt1E,KAAKkuF,WAAa,SAAS7iE,EAAK8iE,EAAcjlD,GAG1C,IAFA,IAAI+O,EAAOj4C,KAAKo8E,OAEPr2E,EAAImjC,GAAc,EAAGnjC,EAAIkyC,EAAKvwC,OAAQ3B,IAAK,CAChD,IAAIy+B,EAAQyT,EAAKlyC,GACb2+D,EAAS4Q,EAAcjqD,EAAKmZ,EAAM2D,KACtC,KAAIu8B,EAAS,GAAb,CAEA,IAAID,EAAW6Q,EAAcjqD,EAAKmZ,EAAM0D,OACxC,OAAe,IAAXw8B,EACOypB,GAA6B,IAAb1pB,GAAkB1+D,EAAE,EAAIA,EAC/C0+D,EAAW,GAAmB,IAAbA,IAAmB0pB,EAC7BpoF,GAEHA,EAAE,CAPE,CAQhB,CACA,OAAQA,EAAI,CAChB,EAEA/F,KAAK8E,IAAM,SAAS0/B,GAChB,IAAI2pD,GAAgB3pD,EAAMsa,UACtB5V,EAAalpC,KAAKkuF,WAAW1pD,EAAM0D,MAAOimD,GAC1CjlD,EAAa,IACbA,GAAcA,EAAa,GAE/B,IAAIC,EAAWnpC,KAAKkuF,WAAW1pD,EAAM2D,IAAKgmD,EAAcjlD,GAMxD,OAJIC,EAAW,EACXA,GAAYA,EAAW,EAEvBA,IACGnpC,KAAKo8E,OAAO13D,OAAOwkB,EAAYC,EAAWD,EAAY1E,EACjE,EAEAxkC,KAAKouF,QAAU,SAASn2C,GAEpB,IADA,IAAIsV,EAAU,GACLxnD,EAAIkyC,EAAKvwC,OAAQ3B,KACtBwnD,EAAQ7gD,KAAKjD,MAAM8jD,EAASvtD,KAAK8E,IAAImzC,EAAKlyC,KAE9C,OAAOwnD,CACX,EAEAvtD,KAAKquF,eAAiB,SAAShjE,GAC3B,IAAItlB,EAAI/F,KAAKkuF,WAAW7iE,GAExB,GAAItlB,GAAK,EACL,OAAO/F,KAAKo8E,OAAO13D,OAAO3e,EAAG,EACrC,EACA/F,KAAK2+E,MAAQ,WACT,IAAIpxB,EAAU,GACVtV,EAAOj4C,KAAKo8E,OAEhBnkC,EAAOA,EAAKzqB,MAAK,SAASnnB,EAAGP,GACzB,OAAOwvE,EAAcjvE,EAAE6hC,MAAOpiC,EAAEoiC,MACpC,IAGA,IADA,IAAoB1D,EAAhB1W,EAAOmqB,EAAK,GACPlyC,EAAI,EAAGA,EAAIkyC,EAAKvwC,OAAQ3B,IAAK,CAClCy+B,EAAQ1W,EACRA,EAAOmqB,EAAKlyC,GACZ,IAAI6mB,EAAM0oD,EAAc9wC,EAAM2D,IAAKra,EAAKoa,OACpCtb,EAAM,IAGC,GAAPA,GAAa4X,EAAMsa,WAAchxB,EAAKgxB,aAGtCw2B,EAAc9wC,EAAM2D,IAAKra,EAAKqa,KAAO,IACrC3D,EAAM2D,IAAI46B,IAAMj1C,EAAKqa,IAAI46B,IACzBv+B,EAAM2D,IAAI66B,OAASl1C,EAAKqa,IAAI66B,QAGhC/qB,EAAKvzB,OAAO3e,EAAG,GACfwnD,EAAQ7gD,KAAKohB,GACbA,EAAO0W,EACPz+B,IACJ,CAIA,OAFA/F,KAAKo8E,OAASnkC,EAEPsV,CACX,EAEAvtD,KAAKslE,SAAW,SAASvC,EAAKC,GAC1B,OAAOhjE,KAAKkuF,WAAW,CAACnrB,IAAKA,EAAKC,OAAQA,KAAY,CAC1D,EAEAhjE,KAAKsuF,cAAgB,SAASjjE,GAC1B,OAAOrrB,KAAKkuF,WAAW7iE,IAAQ,CACnC,EAEArrB,KAAKuuF,aAAe,SAASljE,GACzB,IAAItlB,EAAI/F,KAAKkuF,WAAW7iE,GACxB,GAAItlB,GAAK,EACL,OAAO/F,KAAKo8E,OAAOr2E,EAC3B,EAGA/F,KAAKy2E,SAAW,SAASf,EAAUE,GAC/B,IAAI39B,EAAOj4C,KAAKo8E,OAChB,GAAInkC,EAAK,GAAG/P,MAAM66B,IAAM6S,GAAU39B,EAAKA,EAAKvwC,OAAS,GAAGwgC,MAAM66B,IAAM2S,EAChE,MAAO,GAEX,IAAIxsC,EAAalpC,KAAKkuF,WAAW,CAACnrB,IAAK2S,EAAU1S,OAAQ,IACrD95B,EAAa,IACbA,GAAcA,EAAa,GAC/B,IAAIC,EAAWnpC,KAAKkuF,WAAW,CAACnrB,IAAK6S,EAAQ5S,OAAQ,GAAI95B,GACrDC,EAAW,IACXA,GAAYA,EAAW,GAG3B,IADA,IAAIqlD,EAAU,GACLzoF,EAAImjC,EAAYnjC,EAAIojC,EAAUpjC,IACnCyoF,EAAQ9hF,KAAKurC,EAAKlyC,IAEtB,OAAOyoF,CACX,EAEAxuF,KAAKyuF,UAAY,WACb,OAAOzuF,KAAKo8E,OAAO13D,OAAO,EAAG1kB,KAAKo8E,OAAO10E,OAC7C,EAEA1H,KAAK60E,OAAS,SAAS1U,GACfngE,KAAKmgE,SACLngE,KAAK80E,SAET90E,KAAKmgE,QAAUA,EACfngE,KAAK+C,SAAW/C,KAAK+nF,UAAUp8E,KAAK3L,MAEpCA,KAAKmgE,QAAQ5/D,GAAG,SAAUP,KAAK+C,SACnC,EAEA/C,KAAK80E,OAAS,WACL90E,KAAKmgE,UAEVngE,KAAKmgE,QAAQzJ,eAAe,SAAU12D,KAAK+C,UAC3C/C,KAAKmgE,QAAU,KACnB,EAEAngE,KAAK+nF,UAAY,SAAS/gE,GACtB,GAAoB,UAAhBA,EAAM7e,OACN,IAAI+/B,EAAQlhB,EAAMkhB,MACdC,EAAMnhB,EAAMmhB,SAEZA,EAAMnhB,EAAMkhB,MACZA,EAAQlhB,EAAMmhB,IAStB,IAPA,IAAIutC,EAAWxtC,EAAM66B,IACjB6S,EAASztC,EAAI46B,IACb2rB,EAAU9Y,EAASF,EAEnBuQ,GAAW/9C,EAAM86B,OAAS76B,EAAI66B,OAC9BoZ,EAASp8E,KAAKo8E,OAETr2E,EAAI,EAAGH,EAAIw2E,EAAO10E,OAAQ3B,EAAIH,EAAGG,IAAK,CAC3C,IAAIE,EAAIm2E,EAAOr2E,GACf,KAAIE,EAAEkiC,IAAI46B,IAAM2S,GAAhB,CAEA,GAAIzvE,EAAEiiC,MAAM66B,IAAM2S,EACd,MASJ,GAPIzvE,EAAEiiC,MAAM66B,KAAO2S,GAAYzvE,EAAEiiC,MAAM86B,QAAU96B,EAAM86B,SAC/C/8D,EAAEiiC,MAAM86B,QAAU96B,EAAM86B,QAAUhjE,KAAK8oF,eAEvC7iF,EAAEiiC,MAAM86B,QAAUijB,EAClBhgF,EAAEiiC,MAAM66B,KAAO2rB,IAGnBzoF,EAAEkiC,IAAI46B,KAAO2S,GAAYzvE,EAAEkiC,IAAI66B,QAAU96B,EAAM86B,OAAQ,CACvD,GAAI/8D,EAAEkiC,IAAI66B,QAAU96B,EAAM86B,QAAUhjE,KAAK8oF,aACrC,SAEA7iF,EAAEkiC,IAAI66B,QAAU96B,EAAM86B,QAAUijB,EAAU,GAAKlgF,EAAIH,EAAI,GACnDK,EAAEkiC,IAAI66B,OAAS/8D,EAAEiiC,MAAM86B,QAAU/8D,EAAEkiC,IAAI66B,QAAUoZ,EAAOr2E,EAAE,GAAGmiC,MAAM86B,SACnE/8D,EAAEkiC,IAAI66B,QAAUijB,GAExBhgF,EAAEkiC,IAAI66B,QAAUijB,EAChBhgF,EAAEkiC,IAAI46B,KAAO2rB,CACjB,CArBY,CAsBhB,CAEA,GAAe,GAAXA,GAAgB3oF,EAAIH,EACpB,KAAOG,EAAIH,EAAGG,IAAK,CACXE,EAAIm2E,EAAOr2E,GACfE,EAAEiiC,MAAM66B,KAAO2rB,EACfzoF,EAAEkiC,IAAI46B,KAAO2rB,CACjB,CAER,CAEH,GAAE9pF,KAAKqpF,EAAUhmF,WAElBxC,EAAQwoF,UAAYA,CACpB,IAEAlmC,IAAImC,OAAO,wBAAwB,CAAC,UAAU,UAAU,SAAS,YAAY,iBAAiB,gBAAgB,SAASS,EAAUllD,EAASE,GAC1I,aAEYglD,EAAS,YAAY8qB,MAAjC,IACIwY,EAAYtjC,EAAS,iBAAiBsjC,UACtCl6B,EAAMpJ,EAAS,cACfgkC,EAAOlpF,EAAQkpF,KAAO,SAASnqD,EAAOgpD,GACtCxtF,KAAKg6E,SAAW,KAChBh6E,KAAKwtF,YAAcA,EACnBxtF,KAAKwkC,MAAQA,EACbxkC,KAAKkoC,MAAQ1D,EAAM0D,MACnBloC,KAAKmoC,IAAM3D,EAAM2D,IAEjBnoC,KAAKotF,QAAU5oD,EAAM0D,MAAM66B,KAAOv+B,EAAM2D,IAAI46B,IAC5C/iE,KAAK4uF,SAAW5uF,KAAKo8E,OAAS,EAClC,EAoEA,SAASyS,EAAavG,EAAOp+C,GACzBo+C,EAAMvlB,KAAO74B,EAAO64B,IACH,GAAbulB,EAAMvlB,MACNulB,EAAMtlB,QAAU94B,EAAO84B,OAC/B,CACA,SAAS8rB,EAAatqD,EAAO0F,GACzB2kD,EAAarqD,EAAM0D,MAAOgC,GAC1B2kD,EAAarqD,EAAM2D,IAAK+B,EAC5B,CACA,SAAS6kD,EAAazG,EAAOp+C,GACR,GAAbo+C,EAAMvlB,MACNulB,EAAMtlB,QAAU94B,EAAO84B,QAC3BslB,EAAMvlB,KAAO74B,EAAO64B,GACxB,CACA,SAASisB,EAAaxqD,EAAO0F,GACzB6kD,EAAavqD,EAAM0D,MAAOgC,GAC1B6kD,EAAavqD,EAAM2D,IAAK+B,EAC5B,CAnFA6pB,EAAIL,SAASi7B,EAAMV,GAEnB,WAEIjuF,KAAKuJ,SAAW,WACZ,MAAO,IAAMvJ,KAAKwtF,YAAc,KAAOxtF,KAAKwkC,MAAMj7B,UACtD,EAEAvJ,KAAKktF,YAAc,SAASlT,GACxBh6E,KAAKg6E,SAAWA,EAChBh6E,KAAK4uF,SAAS1kF,SAAQ,SAASupE,GAC3BA,EAAKyZ,YAAYlT,EACrB,GACJ,EAEAh6E,KAAKw8C,MAAQ,WACT,IAAIhY,EAAQxkC,KAAKwkC,MAAMgY,QACnBi3B,EAAO,IAAIkb,EAAKnqD,EAAOxkC,KAAKwtF,aAKhC,OAJAxtF,KAAK4uF,SAAS1kF,SAAQ,SAAS+kF,GAC3Bxb,EAAKmb,SAASliF,KAAKuiF,EAAQzyC,QAC/B,IACAi3B,EAAKyb,iBAAmBlvF,KAAKkvF,iBACtBzb,CACX,EAEAzzE,KAAKmvF,WAAa,SAAS1b,GACvB,IAAIzzE,KAAKwkC,MAAMsxC,QAAQrC,GAAvB,CAGA,IAAKzzE,KAAKwkC,MAAMwxC,cAAcvC,GAC1B,MAAM,IAAInrE,MAAM,+CAAiDmrE,EAAKjvC,MAAQxkC,KAAKwkC,OACvFsqD,EAAarb,EAAMzzE,KAAKkoC,OAGxB,IADA,IAAI66B,EAAM0Q,EAAKvrC,MAAM66B,IAAKC,EAASyQ,EAAKvrC,MAAM86B,OACrCj9D,EAAI,EAAG6mB,GAAO,EAAG7mB,EAAI/F,KAAK4uF,SAASlnF,OAAQ3B,IAEhD,GADA6mB,EAAM5sB,KAAK4uF,SAAS7oF,GAAGy+B,MAAM/M,QAAQsrC,EAAKC,GAC/B,GAAPp2C,EACA,MAER,IAAIwiE,EAAapvF,KAAK4uF,SAAS7oF,GAE/B,GAAW,GAAP6mB,EACA,OAAOwiE,EAAWD,WAAW1b,GAC7B1Q,EAAM0Q,EAAKjvC,MAAM2D,IAAI46B,IAAKC,EAASyQ,EAAKjvC,MAAM2D,IAAI66B,OAAtD,IACSrgD,EAAI5c,EAAb,IAAgB6mB,GAAO,EAAGjK,EAAI3iB,KAAK4uF,SAASlnF,OAAQib,IAEhD,GADAiK,EAAM5sB,KAAK4uF,SAASjsE,GAAG6hB,MAAM/M,QAAQsrC,EAAKC,GAC/B,GAAPp2C,EACA,MAEO5sB,KAAK4uF,SAASjsE,GAE7B,GAAW,GAAPiK,EACA,MAAM,IAAItkB,MAAM,+CAAiDmrE,EAAKjvC,MAAQxkC,KAAKwkC,OAEnExkC,KAAK4uF,SAASlqE,OAAO3e,EAAG4c,EAAI5c,EAAG0tE,GAGnD,OAFAA,EAAKyZ,YAAYltF,KAAKg6E,UAEfvG,CA9BG,CA+Bd,EAEAzzE,KAAKgvF,aAAe,SAASxqD,GACzB,OAAOwqD,EAAaxqD,EAAOxkC,KAAKkoC,MACpC,CAEH,EAAEtjC,KAAK+pF,EAAK1mF,UAqBb,IAEA8/C,IAAImC,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,YAAY,6BAA6B,wBAAwB,uBAAuB,SAASS,EAAUllD,EAASE,GACxL,aAEA,IAAI8vE,EAAQ9qB,EAAS,YAAY8qB,MAC7BsX,EAAWpiC,EAAS,eAAeoiC,SACnC4B,EAAOhkC,EAAS,UAAUgkC,KAC1BzL,EAAgBv4B,EAAS,qBAAqBu4B,cAElD,SAASmM,IACLrvF,KAAK0zE,UAAY,SAAS3Q,EAAKC,EAAQssB,GACnC,IAAItV,EAAWh6E,KAAKi6E,YAAYlX,GAChC,IAAKiX,EACD,OAAO,KAGX,IADA,IAAIiT,EAAQjT,EAASiT,MACZlnF,EAAI,EAAGA,EAAIknF,EAAMvlF,OAAQ3B,IAAK,CACnC,IAAI0tE,EAAOwZ,EAAMlnF,GACjB,GAAI0tE,EAAKjvC,MAAM8gC,SAASvC,EAAKC,GAAS,CAClC,GAAY,GAARssB,GAAa7b,EAAKjvC,MAAM0xC,MAAMnT,EAAKC,GACnC,SACG,IAAa,GAATssB,GAAc7b,EAAKjvC,MAAM2xC,QAAQpT,EAAKC,GAC7C,SAEJ,OAAOyQ,CACX,CACJ,CACJ,EACAzzE,KAAKuvF,gBAAkB,SAAS/qD,GAC5B,IAAI0D,EAAQ1D,EAAM0D,MACdC,EAAM3D,EAAM2D,IACZqnD,EAAYxvF,KAAKyvF,UACjBC,EAAa,GAEjBxnD,EAAM86B,QAAU,EAChB76B,EAAI66B,QAAU,EAEd,IAAK,IAAIj9D,EAAI,EAAGA,EAAIypF,EAAU9nF,OAAQ3B,IAAK,CACvC,IAAI6mB,EAAM4iE,EAAUzpF,GAAGy+B,MAAMuxC,aAAavxC,GAC1C,GAAW,GAAP5X,EAAJ,CAGK,IAAY,GAARA,EACL,MAIJ,IADA,IAAIqgE,EAAQuC,EAAUzpF,GAAGknF,MAChBtqE,EAAI,EAAGA,EAAIsqE,EAAMvlF,OAAQib,IAAK,CACnC,IAAI8wD,EAAOwZ,EAAMtqE,GAEjB,GADAiK,EAAM6mD,EAAKjvC,MAAMuxC,aAAavxC,IAClB,GAAR5X,EACA,MACG,GAAW,GAAPA,EAAJ,CAGP,GAAW,IAAPA,EACA,MAEJ8iE,EAAWhjF,KAAK+mE,EADhB,CAEJ,CAfA,CAgBJ,CAIA,OAHAvrC,EAAM86B,QAAU,EAChB76B,EAAI66B,QAAU,EAEP0sB,CACX,EAEA1vF,KAAK2vF,oBAAsB,SAASvT,GAChC,GAAI96E,MAAMsS,QAAQwoE,GAAS,CACvB,IAAI6Q,EAAQ,GACZ7Q,EAAOlyE,SAAQ,SAASs6B,GACpByoD,EAAQA,EAAMznF,OAAOxF,KAAKuvF,gBAAgB/qD,GAC9C,GAAGxkC,KACP,MACQitF,EAAQjtF,KAAKuvF,gBAAgBnT,GAErC,OAAO6Q,CACX,EACAjtF,KAAK4vF,YAAc,WAIf,IAHA,IAAI3C,EAAQ,GACRuC,EAAYxvF,KAAKyvF,UAEZ1pF,EAAI,EAAGA,EAAIypF,EAAU9nF,OAAQ3B,IAClC,IAAK,IAAI4c,EAAI,EAAGA,EAAI6sE,EAAUzpF,GAAGknF,MAAMvlF,OAAQib,IAC3CsqE,EAAMvgF,KAAK8iF,EAAUzpF,GAAGknF,MAAMtqE,IAEtC,OAAOsqE,CACX,EACAjtF,KAAKq7E,gBAAkB,SAAStY,EAAKC,EAAQrhD,EAAMq4D,GAE/C,GADAA,EAAWA,GAAYh6E,KAAKi6E,YAAYlX,IACnCiX,EACD,OAAO,KAMX,IAJA,IAGInlE,EAAK4+D,EAHLoc,EAAW,CACX1nD,IAAK,CAAE66B,OAAQ,IAGVj9D,EAAI,EAAGA,EAAIi0E,EAASiT,MAAMvlF,OAAQ3B,IAAK,CAC5C0tE,EAAOuG,EAASiT,MAAMlnF,GACtB,IAAI6mB,EAAM6mD,EAAKjvC,MAAM+xC,WAAWxT,EAAKC,GACrC,IAAY,GAARp2C,EAAW,CACX/X,EAAM7U,KACDi0E,QAAQR,EAAKvrC,MAAM66B,KACnB9xB,UAAU4+C,EAAS1nD,IAAI66B,OAAQyQ,EAAKvrC,MAAM86B,QAC/C,KACJ,CACK,GAAY,IAARp2C,EACL,OAAO,KAEXijE,EAAWpc,CACf,CAIA,OAHK5+D,IACDA,EAAM7U,KAAKi0E,QAAQR,EAAKvrC,MAAM66B,KAAK9xB,UAAU4+C,EAAS1nD,IAAI66B,UAEjD,GAATrhD,EACO9M,EAAIo8B,UAAU,EAAG+xB,EAAS6sB,EAAS1nD,IAAI66B,QACjC,GAARrhD,EACE9M,EAAIo8B,UAAU+xB,EAAS6sB,EAAS1nD,IAAI66B,QAEpCnuD,CACf,EAEA7U,KAAKi6E,YAAc,SAAS6V,EAAQC,GAChC,IAAI/C,EAAWhtF,KAAKyvF,UAChB1pF,EAAI,EAKR,IAJIgqF,IACAhqF,EAAIinF,EAASn7E,QAAQk+E,KACf,GAANhqF,IACAA,EAAI,GACHA,EAAGA,EAAIinF,EAAStlF,OAAQ3B,IAAK,CAC9B,IAAIi0E,EAAWgT,EAASjnF,GACxB,GAAIi0E,EAAS9xC,MAAM66B,KAAO+sB,GAAU9V,EAAS7xC,IAAI46B,KAAO+sB,EACpD,OAAO9V,EACJ,GAAIA,EAAS7xC,IAAI46B,IAAM+sB,EAC1B,OAAO,IAEf,CACA,OAAO,IACX,EACA9vF,KAAKgwF,gBAAkB,SAASF,EAAQC,GACpC,IAAI/C,EAAWhtF,KAAKyvF,UAChB1pF,EAAI,EAKR,IAJIgqF,IACAhqF,EAAIinF,EAASn7E,QAAQk+E,KACf,GAANhqF,IACAA,EAAI,GACHA,EAAGA,EAAIinF,EAAStlF,OAAQ3B,IAAK,CAC9B,IAAIi0E,EAAWgT,EAASjnF,GACxB,GAAIi0E,EAAS7xC,IAAI46B,KAAO+sB,EACpB,OAAO9V,CAEf,CACA,OAAO,IACX,EAEAh6E,KAAKiwF,kBAAoB,SAAStnD,EAAOpkB,GAErC,IADA,IAAIyoE,EAAWhtF,KAAKyvF,UAAW5L,EAAWt/D,EAAKokB,EAAM,EAC5C5iC,EAAI,EAAGA,EAAIinF,EAAStlF,OAAQ3B,IAAK,CACtC,IAAIi0E,EAAWgT,EAASjnF,GACpBoiC,EAAM6xC,EAAS7xC,IAAI46B,IACnB76B,EAAQ8xC,EAAS9xC,MAAM66B,IAC3B,GAAI56B,GAAO5jB,EAAM,CACT2jB,EAAQ3jB,IACJ2jB,GAASS,EACTk7C,GAAYt/D,EAAK2jB,EAEjB27C,EAAW,GAEnB,KACJ,CAAW17C,GAAOQ,IAEVk7C,GADA37C,GAASS,EACIR,EAAID,EAEJC,EAAIQ,EAAM,EAEnC,CACA,OAAOk7C,CACX,EAEA7jF,KAAKkwF,aAAe,SAASlW,GAKzB,OAJAh6E,KAAKyvF,UAAU/iF,KAAKstE,GACpBh6E,KAAKyvF,UAAUjiE,MAAK,SAASnnB,EAAGP,GAC5B,OAAOO,EAAE6hC,MAAM66B,IAAMj9D,EAAEoiC,MAAM66B,GACjC,IACOiX,CACX,EACAh6E,KAAKk0E,QAAU,SAASsZ,EAAahpD,GACjC,IAEIivC,EAFAuZ,EAAWhtF,KAAKyvF,UAChBU,GAAQ,EAGR3C,aAAuBmB,EACvBlb,EAAO+Z,GAEP/Z,EAAO,IAAIkb,EAAKnqD,EAAOgpD,GACvB/Z,EAAKyb,iBAAmB1qD,EAAM0qD,kBAElClvF,KAAKowF,qBAAqB3c,EAAKjvC,OAE/B,IAAIkxC,EAAWjC,EAAKvrC,MAAM66B,IACtB4S,EAAclC,EAAKvrC,MAAM86B,OACzB4S,EAASnC,EAAKtrC,IAAI46B,IAClB8S,EAAYpC,EAAKtrC,IAAI66B,OACzB,KAAM0S,EAAWE,GACbF,GAAYE,GAAUD,GAAeE,EAAY,GACjD,MAAM,IAAIvtE,MAAM,mDAEpB,IAAI+nF,EAAYrwF,KAAK0zE,UAAUgC,EAAUC,EAAa,GAClD2a,EAAUtwF,KAAK0zE,UAAUkC,EAAQC,GAAY,GACjD,GAAIwa,GAAaC,GAAWD,EACxB,OAAOA,EAAUlB,WAAW1b,GAE5B4c,IAAcA,EAAU7rD,MAAM2xC,QAAQT,EAAUC,IAChD31E,KAAK2zE,WAAW0c,GAEhBC,IAAYA,EAAQ9rD,MAAM0xC,MAAMN,EAAQC,IACxC71E,KAAK2zE,WAAW2c,GACpB,IAAIrD,EAAQjtF,KAAKuvF,gBAAgB9b,EAAKjvC,OAClCyoD,EAAMvlF,OAAS,IACf1H,KAAKuwF,YAAYtD,GACjBA,EAAM/iF,SAAQ,SAAS+kF,GACnBxb,EAAK0b,WAAWF,EACpB,KAGJ,IAAK,IAAIlpF,EAAI,EAAGA,EAAIinF,EAAStlF,OAAQ3B,IAAK,CACtC,IAAIi0E,EAAWgT,EAASjnF,GACxB,GAAI6vE,GAAUoE,EAAS9xC,MAAM66B,IAAK,CAC9BiX,EAAS9F,QAAQT,GACjB0c,GAAQ,EACR,KACJ,CAAO,GAAIza,GAAYsE,EAAS7xC,IAAI46B,IAAK,CAGrC,GAFAiX,EAAS9F,QAAQT,GACjB0c,GAAQ,GACH1c,EAAK2Z,QAAS,CACf,IAAIU,EAAed,EAASjnF,EAAI,GAChC,GAAI+nF,GAAgBA,EAAa5lD,MAAM66B,KAAO6S,EAAQ,CAClDoE,EAAS2E,MAAMmP,GACf,KACJ,CACJ,CACA,KACJ,CAAO,GAAIlY,GAAUoE,EAAS9xC,MAAM66B,IAChC,KAER,CAYA,OAVKotB,IACDnW,EAAWh6E,KAAKkwF,aAAa,IAAInD,EAAS/sF,KAAKyvF,UAAWhc,KAE1DzzE,KAAKwwF,aACLxwF,KAAKywF,gBAAgBzW,EAAS9xC,MAAM66B,IAAKiX,EAAS9xC,MAAM66B,KAExD/iE,KAAK0wF,sBAAsB1W,EAAS9xC,MAAM66B,IAAKiX,EAAS9xC,MAAM66B,KAClE/iE,KAAK2wF,WAAY,EACjB3wF,KAAKuuE,QAAQ,aAAc,CAAElsE,KAAMoxE,EAAMtrE,OAAQ,QAE1CsrE,CACX,EAEAzzE,KAAK4wF,SAAW,SAAS3D,GACrBA,EAAM/iF,SAAQ,SAASupE,GACnBzzE,KAAKk0E,QAAQT,EACjB,GAAGzzE,KACP,EAEAA,KAAK2zE,WAAa,SAASF,GACvB,IAAIuG,EAAWvG,EAAKuG,SAChBtE,EAAWsE,EAAS9xC,MAAM66B,IAC1B6S,EAASoE,EAAS7xC,IAAI46B,IAEtBysB,EAAYxvF,KAAKyvF,UACjBxC,EAAQjT,EAASiT,MACrB,GAAoB,GAAhBA,EAAMvlF,OACN8nF,EAAU9qE,OAAO8qE,EAAU39E,QAAQmoE,GAAW,QAElD,GAAIA,EAASx1C,MAAM0xC,MAAMzC,EAAKtrC,IAAI46B,IAAK0Q,EAAKtrC,IAAI66B,QAC5CiqB,EAAM5oE,MACN21D,EAAS7xC,IAAI46B,IAAMkqB,EAAMA,EAAMvlF,OAAS,GAAGygC,IAAI46B,IAC/CiX,EAAS7xC,IAAI66B,OAASiqB,EAAMA,EAAMvlF,OAAS,GAAGygC,IAAI66B,YAEtD,GAAIgX,EAASx1C,MAAM2xC,QAAQ1C,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,QAClDiqB,EAAMnpE,QACNk2D,EAAS9xC,MAAM66B,IAAMkqB,EAAM,GAAG/kD,MAAM66B,IACpCiX,EAAS9xC,MAAM86B,OAASiqB,EAAM,GAAG/kD,MAAM86B,YAE3C,GAAIyQ,EAAK2Z,QACLH,EAAMvoE,OAAOuoE,EAAMp7E,QAAQ4hE,GAAO,OAEtC,CACI,IAAIoa,EAAc7T,EAAS97D,MAAMu1D,EAAKvrC,MAAM66B,IAAK0Q,EAAKvrC,MAAM86B,QAC5DiqB,EAAQY,EAAYZ,MACpBA,EAAMnpE,QACN+pE,EAAY3lD,MAAM66B,IAAMkqB,EAAM,GAAG/kD,MAAM66B,IACvC8qB,EAAY3lD,MAAM86B,OAASiqB,EAAM,GAAG/kD,MAAM86B,MAC9C,CAEKhjE,KAAK6wF,YACF7wF,KAAKwwF,aACLxwF,KAAKywF,gBAAgB/a,EAAUE,GAE/B51E,KAAK0wF,sBAAsBhb,EAAUE,IAE7C51E,KAAK2wF,WAAY,EACjB3wF,KAAKuuE,QAAQ,aAAc,CAAElsE,KAAMoxE,EAAMtrE,OAAQ,UACrD,EAEAnI,KAAKuwF,YAAc,SAAStD,GAExB,IADA,IAAI6D,EAAa,GACR/qF,EAAI,EAAGA,EAAIknF,EAAMvlF,OAAQ3B,IAC9B+qF,EAAWpkF,KAAKugF,EAAMlnF,IAG1B+qF,EAAW5mF,SAAQ,SAASupE,GACxBzzE,KAAK2zE,WAAWF,EACpB,GAAGzzE,MACHA,KAAK2wF,WAAY,CACrB,EAEA3wF,KAAK4zE,WAAa,SAASH,GACvBzzE,KAAK2zE,WAAWF,GAChBA,EAAKmb,SAAS1kF,SAAQ,SAAS+kF,GAC3Bxb,EAAKub,aAAaC,GAClBjvF,KAAKk0E,QAAQ+a,EACjB,GAAGjvF,MACCyzE,EAAKyb,iBAAmB,GACxBlvF,KAAK+wF,QAAQtd,EAAKvrC,MAAM66B,IAAI,EAAG0Q,EAAKtrC,IAAI46B,IAAK0Q,EAAKyb,iBAAiB,GAEvEzb,EAAKmb,SAAW,EACpB,EAEA5uF,KAAKgxF,YAAc,SAAS/D,GACxBA,EAAM/iF,SAAQ,SAASupE,GACnBzzE,KAAK4zE,WAAWH,EACpB,GAAGzzE,KACP,EAEAA,KAAKixF,OAAS,SAASr3B,EAAUs3B,GAC7B,IAAI1sD,EAAOyoD,EAYX,GAXgB,MAAZrzB,GACAp1B,EAAQ,IAAIixC,EAAM,EAAG,EAAGz1E,KAAKsnE,YAAa,GAC1C4pB,GAAc,GAEd1sD,EAD0B,iBAAZo1B,EACN,IAAI6b,EAAM7b,EAAU,EAAGA,EAAU55D,KAAKi0E,QAAQra,GAAUlyD,QAC3D,QAASkyD,EACN6b,EAAMmB,WAAWhd,EAAUA,GAE3BA,EAEZqzB,EAAQjtF,KAAK2vF,oBAAoBnrD,GAC7B0sD,EACAlxF,KAAKuwF,YAAYtD,OACd,CACH,IAAI2B,EAAW3B,EACf,MAAO2B,EAASlnF,OACZ1H,KAAKgxF,YAAYpC,GACjBA,EAAW5uF,KAAK2vF,oBAAoBnrD,EAE5C,CACA,GAAIyoD,EAAMvlF,OACN,OAAOulF,CACf,EACAjtF,KAAKmxF,YAAc,SAASrB,EAAQsB,GAChC,QAASpxF,KAAKi6E,YAAY6V,EAAQsB,EACtC,EAEApxF,KAAKqxF,cAAgB,SAASvB,EAAQsB,GAClC,IAAIpX,EAAWh6E,KAAKi6E,YAAY6V,EAAQsB,GACxC,OAAOpX,EAAWA,EAAS7xC,IAAI46B,IAAM+sB,CACzC,EAEA9vF,KAAKsxF,gBAAkB,SAASxB,EAAQsB,GACpC,IAAIpX,EAAWh6E,KAAKi6E,YAAY6V,EAAQsB,GACxC,OAAOpX,EAAWA,EAAS9xC,MAAM66B,IAAM+sB,CAC3C,EAEA9vF,KAAKuxF,mBAAqB,SAASvX,EAAUpE,EAAQC,EAAWH,EAAUC,GACtD,MAAZD,IACAA,EAAWsE,EAAS9xC,MAAM66B,KACX,MAAf4S,IACAA,EAAc,GACJ,MAAVC,IACAA,EAASoE,EAAS7xC,IAAI46B,KACT,MAAb8S,IACAA,EAAY71E,KAAKi0E,QAAQ2B,GAAQluE,QACrC,IAAIqpD,EAAM/wD,KAAK+wD,IACXygC,EAAW,GAiBf,OAfAxX,EAAS3rD,MAAK,SAASm/D,EAAazqB,EAAKC,EAAQyuB,GAC7C,KAAI1uB,EAAM2S,GAAV,CAEA,GAAI3S,GAAO2S,EAAU,CACjB,GAAI1S,EAAS2S,EACT,OACJ8b,EAAa5rE,KAAKkf,IAAI4wC,EAAa8b,EACvC,CAGID,GADe,MAAfhE,EACYA,EAEAz8B,EAAIkjB,QAAQlR,GAAK9xB,UAAUwgD,EAAYzuB,EAV7C,CAYd,GAAG4S,EAAQC,GACJ2b,CACX,EAEAxxF,KAAK06E,eAAiB,SAAS3X,EAAK8S,EAAWH,EAAUC,GACrD,IAGQlhC,EAHJulC,EAAWh6E,KAAKi6E,YAAYlX,GAEhC,OAAKiX,EAKMh6E,KAAKuxF,mBACRvX,EAAUjX,EAAK8S,EAAWH,EAAUC,IAJxClhC,EAAOz0C,KAAK+wD,IAAIkjB,QAAQlR,GACjBtuB,EAAKxD,UAAU0kC,GAAe,EAAGE,GAAaphC,EAAK/sC,QAKlE,EAEA1H,KAAK0xF,eAAiB,WAClB,IAAIC,EAAK,GAQT,OAPAA,EAAK3xF,KAAKyvF,UAAU5jF,KAAI,SAASmuE,GAC7B,IAAIiT,EAAQjT,EAASiT,MAAMphF,KAAI,SAAS4nE,GACpC,OAAOA,EAAKj3B,OAChB,IACA,OAAO,IAAIuwC,EAAS4E,EAAI1E,EAC5B,IAEO0E,CACX,EAEA3xF,KAAK4xF,WAAa,SAASC,GACvB,IAEIpe,EACAqe,EAHA7wD,EAAYjhC,KAAKihC,UACjBuD,EAAQvD,EAAUq/B,WAItB,GAAI97B,EAAMsa,UAAW,CACjB,IAAIwB,EAAS9b,EAAM0D,MAGnB,GAFAurC,EAAOzzE,KAAK0zE,UAAUpzB,EAAOyiB,IAAKziB,EAAO0iB,QAErCyQ,EAEA,YADAzzE,KAAK4zE,WAAWH,IAETqe,EAAa9xF,KAAK+xF,oBAAoBzxC,IACP,GAAlC9b,EAAM4/B,aAAa0tB,GACnBttD,EAAM2D,IAAM2pD,GAEZttD,EAAM0D,MAAQ4pD,EACdttD,EAAM0D,MAAM86B,SACZx+B,EAAM2D,IAAI66B,WAEP8uB,EAAa9xF,KAAK+xF,oBAAoB,CAAChvB,IAAKziB,EAAOyiB,IAAKC,OAAQ1iB,EAAO0iB,OAAS,MACjD,GAAlCx+B,EAAM4/B,aAAa0tB,GACnBttD,EAAM2D,IAAM2pD,EAEZttD,EAAM0D,MAAQ4pD,EAElBttD,EAAM0D,MAAM86B,UAEZx+B,EAAQxkC,KAAKgyF,oBAAoB1xC,EAAOyiB,IAAKziB,EAAO0iB,SAAWx+B,CAEvE,KAAO,CACH,IAAIyoD,EAAQjtF,KAAKuvF,gBAAgB/qD,GACjC,GAAIqtD,GAAe5E,EAAMvlF,OAErB,YADA1H,KAAKgxF,YAAY/D,GAEM,GAAhBA,EAAMvlF,SACb+rE,EAAOwZ,EAAM,GAErB,CAKA,GAHKxZ,IACDA,EAAOzzE,KAAK0zE,UAAUlvC,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,SAEnDyQ,GAAQA,EAAKjvC,MAAMj7B,YAAci7B,EAAMj7B,WACvCvJ,KAAK4zE,WAAWH,OADpB,CAKA,IAAI+Z,EAAc,MAClB,IAAKhpD,EAAM6gC,cAAe,CAEtB,GADAmoB,EAAcxtF,KAAK2rE,aAAannC,GAC5BgpD,EAAY9lF,OAAS,EACrB,OACJ8lF,EAAcA,EAAY7rE,OAAOsvB,UAAU,EAAG,GAAK,IACvD,CAEAjxC,KAAKk0E,QAAQsZ,EAAahpD,EAV1B,CAWJ,EAEAxkC,KAAKgyF,oBAAsB,SAASjvB,EAAKC,EAAQivB,GAC7C,IAAIlqF,EAAW,IAAIm7E,EAAcljF,KAAM+iE,EAAKC,GACxChvB,EAAQjsC,EAAS+7E,kBACrB,GAAI9vC,GAAS,kBAAkBl/B,KAAKk/B,EAAMvyC,MAAO,CAC7C,IAAI+iC,EAAQ,IAAIixC,EACZnlC,EAAK,IAAIr5B,OAAO+8B,EAAMvyC,KAAKwd,QAAQ,OAAQ,QAC/C,GAAW,GAAPgzE,EAAU,CACV,GACIj+C,EAAQjsC,EAAS47E,qBACZ3vC,GAAS1D,EAAGx7B,KAAKk/B,EAAMvyC,OAChCsG,EAAS67E,aACb,CAOA,GALAp/C,EAAM0D,MAAM66B,IAAMh7D,EAASg8E,qBAC3Bv/C,EAAM0D,MAAM86B,OAASj7D,EAASi8E,wBAA0B,EAExDj8E,EAAW,IAAIm7E,EAAcljF,KAAM+iE,EAAKC,IAE5B,GAARivB,EAAW,CACX,GACIj+C,EAAQjsC,EAAS67E,oBACZ5vC,GAAS1D,EAAGx7B,KAAKk/B,EAAMvyC,OAChCuyC,EAAQjsC,EAAS47E,cACrB,MACI3vC,EAAQjsC,EAAS+7E,kBAIrB,OAFAt/C,EAAM2D,IAAI46B,IAAMh7D,EAASg8E,qBACzBv/C,EAAM2D,IAAI66B,OAASj7D,EAASi8E,wBAA0BhwC,EAAM9yC,MAAMwG,OAAS,EACpE88B,CACX,CACJ,EAEAxkC,KAAK+wF,QAAU,SAASrb,EAAUE,EAAQsc,QACzB/hF,GAAT+hF,IACAA,EAAQ,KACZ,IAAIre,EAAc7zE,KAAK6zE,YACvB,GAAKA,EAAL,CAEA+B,EAASA,GAAU51E,KAAKsnE,YACxBoO,EAAWA,GAAY,EACvB,IAAK,IAAI3S,EAAM2S,EAAU3S,EAAM6S,EAAQ7S,IAGnC,GAFwB,MAApB8Q,EAAY9Q,KACZ8Q,EAAY9Q,GAAO/iE,KAAKmyF,cAAcpvB,IAClB,SAApB8Q,EAAY9Q,GAAhB,CAGA,IAAIv+B,EAAQxkC,KAAKoyF,mBAAmBrvB,GACpC,GAAIv+B,GAASA,EAAM6gC,eACZ7gC,EAAM2D,IAAI46B,KAAO6S,GACjBpxC,EAAM0D,MAAM66B,KAAO2S,EACxB,CACE3S,EAAMv+B,EAAM2D,IAAI46B,IAChB,IACI,IAAI0Q,EAAOzzE,KAAKk0E,QAAQ,MAAO1vC,GAC3BivC,IACAA,EAAKyb,iBAAmBgD,EAChC,CAAE,MAAM/uF,GAAI,CAChB,CAbY,CAPN,CAsBd,EACAnD,KAAKqyF,YAAc,CACf,OAAU,EACV,UAAa,EACb,aAAgB,GAEpBryF,KAAKsyF,WAAa,YAClBtyF,KAAKuyF,aAAe,SAAS7rF,GACzB,IAAK1G,KAAKqyF,YAAY3rF,GAClB,MAAM,IAAI4B,MAAM,uBAAyB5B,EAAQ,IAAMrF,OAAOsQ,KAAK3R,KAAKqyF,aAAanvE,KAAK,MAAQ,KAEtG,GAAIljB,KAAKsyF,YAAc5rF,EAAvB,CAGA1G,KAAKsyF,WAAa5rF,EAEL,UAATA,GACA1G,KAAKixF,SACT,IAAItvF,EAAO3B,KAAKwyF,UAChBxyF,KAAKyyF,YAAY,MACjBzyF,KAAKyyF,YAAY9wF,EARP,CASd,EAEA3B,KAAKyyF,YAAc,SAASC,GACpB1yF,KAAKwyF,WAAaE,IAGtB1yF,KAAKwyF,UAAYE,EAEjB1yF,KAAK6M,IAAI,SAAU7M,KAAK2yF,oBACxB3yF,KAAK6M,IAAI,kBAAmB7M,KAAK4yF,6BACjC5yF,KAAKuuE,QAAQ,oBAERmkB,GAA+B,UAAnB1yF,KAAKsyF,YAKtBtyF,KAAK6zE,YAAc,GACnB7zE,KAAKmyF,cAAgBO,EAASP,cAAcxmF,KAAK+mF,EAAU1yF,KAAMA,KAAKsyF,YACtEtyF,KAAKoyF,mBAAqBM,EAASN,mBAAmBzmF,KAAK+mF,EAAU1yF,KAAMA,KAAKsyF,YAEhFtyF,KAAK2yF,mBAAqB3yF,KAAK6yF,kBAAkBlnF,KAAK3L,MACtDA,KAAK4yF,4BAA8B5yF,KAAK8yF,2BAA2BnnF,KAAK3L,MACxEA,KAAKO,GAAG,SAAUP,KAAK2yF,oBACvB3yF,KAAKO,GAAG,kBAAmBP,KAAK4yF,8BAX5B5yF,KAAK6zE,YAAc,KAY3B,EAEA7zE,KAAK+zE,uBAAyB,SAAUhR,EAAKgwB,GACzC,IAAIC,EAAKhzF,KAAK6zE,YACd,IAAKmf,GAAOD,GAAiBC,EAAGjwB,GAC5B,MAAO,CAAC,EAEZ,IAAiBiR,EAAbjuE,EAAIg9D,EAAM,EACd,MAAOh9D,GAAK,EAAG,CACX,IAAIG,EAAI8sF,EAAGjtF,GAIX,GAHS,MAALG,IACAA,EAAI8sF,EAAGjtF,GAAK/F,KAAKmyF,cAAcpsF,IAE1B,SAALG,EAAc,CACd,IAAIs+B,EAAQxkC,KAAKoyF,mBAAmBrsF,GAGpC,GAFKiuE,IACDA,EAAaxvC,GACbA,GAASA,EAAM2D,IAAI46B,KAAOA,EAC1B,KACR,CACAh9D,GACJ,CAEA,MAAO,CACHy+B,OAAc,IAAPz+B,GAAYy+B,EACnBwvC,WAAYA,EAEpB,EAEAh0E,KAAK8zE,kBAAoB,SAAS/Q,EAAK5/D,GACnCA,EAAIA,EAAE+9D,SACN,IAAIp+D,EAAU,CACVylB,SAAUplB,EAAEsmC,SACZlT,IAAKpzB,EAAEqmC,SAAWrmC,EAAEo2D,QACpB05B,SAAU9vF,EAAEwgD,QAGZnf,EAAQxkC,KAAKkzF,kBAAkBnwB,EAAKjgE,GACxC,IAAK0hC,EAAO,CACR,IAAI30B,EAAM1M,EAAEiF,QAAUjF,EAAE+/C,WACpBrzC,GAAM,kBAAkBiF,KAAKjF,EAAGs1B,aAChCt1B,EAAGs1B,WAAa,eACxB,CACJ,EAEAnlC,KAAKkzF,kBAAoB,SAASnwB,EAAKjgE,GACnC,GAAK9C,KAAKmyF,cAAV,CAEA,IAAI1wF,EAAOzB,KAAKmyF,cAAcpvB,GAC1BtuB,EAAOz0C,KAAKi0E,QAAQlR,GAEpBkvB,EAAe,QAATxwF,GAAkB,EAAI,EAC5BgyE,EAAOzzE,KAAK0zE,UAAU3Q,GAAc,IAATkvB,EAAa,EAAIx9C,EAAK/sC,OAAQuqF,GAE7D,GAAIxe,EACI3wE,EAAQylB,UAAYzlB,EAAQyzB,IAC5Bv2B,KAAK2zE,WAAWF,GAEhBzzE,KAAK4zE,WAAWH,OAJxB,CAQA,IAAIjvC,EAAQxkC,KAAKoyF,mBAAmBrvB,GAAK,GACzC,IAAIv+B,GAAUA,EAAM6gC,gBAChBoO,EAAOzzE,KAAK0zE,UAAUlvC,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,OAAQ,IACvDyQ,IAAQjvC,EAAMsxC,QAAQrC,EAAKjvC,QAFnC,CAQA,GAAI1hC,EAAQmwF,SAAU,CAClB,IAAI5wF,EAAOrC,KAAK+zE,uBAAuBhR,GACvC,GAAI1gE,EAAKmiC,MACL,IAAIkxC,EAAWrzE,EAAKmiC,MAAM0D,MAAM66B,IAAM,EAClC6S,EAASvzE,EAAKmiC,MAAM2D,IAAI46B,IAEhC/iE,KAAK+wF,QAAQrb,EAAUE,EAAQ9yE,EAAQyzB,IAAM,IAAQ,EACzD,MAAWzzB,EAAQylB,UACfqtD,EAASpxC,EAAQA,EAAM2D,IAAI46B,IAAM/iE,KAAKsnE,YACtCtnE,KAAK+wF,QAAQhuB,EAAM,EAAG6S,EAAQ9yE,EAAQyzB,IAAM,IAAQ,IAC7CiO,IACH1hC,EAAQyzB,MACRiO,EAAM0qD,iBAAmB,KAC7BlvF,KAAKk0E,QAAQ,MAAO1vC,IAGxB,OAAOA,CAlBP,CAHQxkC,KAAK2zE,WAAWF,EANxB,CAbU,CAyCd,EAIAzzE,KAAKmzF,iBAAmB,SAASC,GAC7B,IAAIrwB,EAAM/iE,KAAKihC,UAAU22C,YAAY7U,IACrCA,EAAM/iE,KAAKsxF,gBAAgBvuB,GAC3B,IAAIv+B,EAAQxkC,KAAKkzF,kBAAkBnwB,EAAK,CAAC,GAEzC,IAAIv+B,EAAJ,CAEA,IAAIniC,EAAOrC,KAAK+zE,uBAAuBhR,GAAK,GAG5C,GAFAv+B,EAAQniC,EAAKmiC,OAASniC,EAAK2xE,WAEvBxvC,EAAO,CACPu+B,EAAMv+B,EAAM0D,MAAM66B,IAClB,IAAI0Q,EAAOzzE,KAAK0zE,UAAU3Q,EAAK/iE,KAAKi0E,QAAQlR,GAAKr7D,OAAQ,GAErD+rE,EACAzzE,KAAK2zE,WAAWF,GAEhBzzE,KAAKk0E,QAAQ,MAAO1vC,EAE5B,CAbU,CAcd,EAEAxkC,KAAK6yF,kBAAoB,SAAS7rE,GAC9B,IAAI0vD,EAAW1vD,EAAMkhB,MAAM66B,IACvBl6C,EAAM7B,EAAMmhB,IAAI46B,IAAM2T,EAE1B,GAAY,IAAR7tD,EACA7oB,KAAK6zE,YAAY6C,GAAY,UAC1B,GAAoB,UAAhB1vD,EAAM7e,OACbnI,KAAK6zE,YAAYnvD,OAAOgyD,EAAU7tD,EAAM,EAAG,UACxC,CACH,IAAI6M,EAAOp0B,MAAMunB,EAAM,GACvB6M,EAAKzS,QAAQyzD,EAAU,GACvB12E,KAAK6zE,YAAYnvD,OAAOjb,MAAMzJ,KAAK6zE,YAAan+C,EACpD,CACJ,EACA11B,KAAK8yF,2BAA6B,SAAS3vF,GACvC,IAAIy4E,EAAOz4E,EAAEd,KACTu5E,EAAKjzC,OAASizC,EAAKr3D,MACfvkB,KAAK6zE,YAAYnsE,OAASk0E,EAAKjzC,OAC/B3oC,KAAK6zE,YAAYnvD,OAAOk3D,EAAKjzC,MAAO3oC,KAAK6zE,YAAYnsE,OAEjE,CACJ,CAEAjC,EAAQ4pF,QAAUA,CAElB,IAEAtnC,IAAImC,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,qBAAqB,cAAc,SAASS,EAAUllD,EAASE,GACzI,aAEA,IAAIu9E,EAAgBv4B,EAAS,qBAAqBu4B,cAC9CzN,EAAQ9qB,EAAS,YAAY8qB,MAGjC,SAAS4d,IAELrzF,KAAK+xF,oBAAsB,SAAShrF,EAAUusF,GAC1C,GAAuB,GAAnBvsF,EAASi8D,OAAa,OAAO,KAEjC,IAAIuwB,EAAmBD,GAAOtzF,KAAKi0E,QAAQltE,EAASg8D,KAAKp/C,OAAO5c,EAASi8D,OAAO,GAChF,GAAwB,IAApBuwB,EAAwB,OAAO,KAEnC,IAAItxE,EAAQsxE,EAAiBtxE,MAAM,yBACnC,OAAKA,EAGDA,EAAM,GACCjiB,KAAKwzF,oBAAoBvxE,EAAM,GAAIlb,GAEnC/G,KAAKyzF,oBAAoBxxE,EAAM,GAAIlb,GALnC,IAMf,EAEA/G,KAAKmlE,gBAAkB,SAAS95C,GAC5B,IACmBmZ,EADfiQ,EAAOz0C,KAAKi0E,QAAQ5oD,EAAI03C,KACxB0iB,GAAS,EAET6N,EAAM7+C,EAAK9wB,OAAO0H,EAAI23C,OAAO,GAC7B/gD,EAAQqxE,GAAOA,EAAIrxE,MAAM,yBAO7B,GANKA,IACDqxE,EAAM7+C,EAAK9wB,OAAO0H,EAAI23C,QACtB33C,EAAM,CAAC03C,IAAK13C,EAAI03C,IAAKC,OAAQ33C,EAAI23C,OAAS,GAC1C/gD,EAAQqxE,GAAOA,EAAIrxE,MAAM,yBACzBwjE,GAAS,IAERxjE,EACD,OAAO,KAEX,GAAIA,EAAM,GAAI,CACV,IAAI6vE,EAAa9xF,KAAKwzF,oBAAoBvxE,EAAM,GAAIoJ,GACpD,IAAKymE,EACD,OAAO,KACXttD,EAAQixC,EAAMmB,WAAWvrD,EAAKymE,GACzBrM,IACDjhD,EAAM2D,IAAI66B,SACVx+B,EAAM0D,MAAM86B,UAEhBx+B,EAAM8b,OAAS9b,EAAM2D,GACzB,KAAO,CACC2pD,EAAa9xF,KAAKyzF,oBAAoBxxE,EAAM,GAAIoJ,GACpD,IAAKymE,EACD,OAAO,KACXttD,EAAQixC,EAAMmB,WAAWkb,EAAYzmE,GAChCo6D,IACDjhD,EAAM0D,MAAM86B,SACZx+B,EAAM2D,IAAI66B,UAEdx+B,EAAM8b,OAAS9b,EAAM0D,KACzB,CAEA,OAAO1D,CACX,EAEAxkC,KAAK0zF,UAAY,CACb,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGT1zF,KAAKyzF,oBAAsB,SAASE,EAAS5sF,EAAU6sF,GACnD,IAAIC,EAAc7zF,KAAK0zF,UAAUC,GAC7BzB,EAAQ,EAERnqF,EAAW,IAAIm7E,EAAcljF,KAAM+G,EAASg8D,IAAKh8D,EAASi8D,QAC1DhvB,EAAQjsC,EAAS+7E,kBAGrB,GAFK9vC,IACDA,EAAQjsC,EAAS67E,eAChB5vC,EAAL,CAGM4/C,IACFA,EAAS,IAAI38E,OACT,QACA+8B,EAAMvyC,KAAKwd,QAAQ,IAAK,OAAOA,QAAQ,SAAU,UAC5CA,QAAQ,cAAe,uBAC1B,OAGV,IAAI60E,EAAa/sF,EAASi8D,OAASj7D,EAASi8E,wBAA0B,EAClE9iF,EAAQ8yC,EAAM9yC,MAElB,MAAO,EAAM,CAET,MAAO4yF,GAAc,EAAG,CACpB,IAAIR,EAAMpyF,EAAMyiB,OAAOmwE,GACvB,GAAIR,GAAOO,GAEP,GADA3B,GAAS,EACI,GAATA,EACA,MAAO,CAACnvB,IAAKh7D,EAASg8E,qBAClB/gB,OAAQ8wB,EAAa/rF,EAASi8E,8BAGjCsP,GAAOK,IACZzB,GAAS,GAEb4B,GAAc,CAClB,CACA,GACI9/C,EAAQjsC,EAAS47E,qBACZ3vC,IAAU4/C,EAAO9+E,KAAKk/B,EAAMvyC,OAErC,GAAa,MAATuyC,EACA,MAEJ9yC,EAAQ8yC,EAAM9yC,MACd4yF,EAAa5yF,EAAMwG,OAAS,CAChC,CAEA,OAAO,IAxCG,CAyCd,EAEA1H,KAAKwzF,oBAAsB,SAASG,EAAS5sF,EAAU6sF,GACnD,IAAIG,EAAiB/zF,KAAK0zF,UAAUC,GAChCzB,EAAQ,EAERnqF,EAAW,IAAIm7E,EAAcljF,KAAM+G,EAASg8D,IAAKh8D,EAASi8D,QAC1DhvB,EAAQjsC,EAAS+7E,kBAGrB,GAFK9vC,IACDA,EAAQjsC,EAAS67E,eAChB5vC,EAAL,CAGK4/C,IACDA,EAAS,IAAI38E,OACT,QACA+8B,EAAMvyC,KAAKwd,QAAQ,IAAK,OAAOA,QAAQ,SAAU,UAC5CA,QAAQ,sBAAuB,uBAClC,OAGV,IAAI60E,EAAa/sF,EAASi8D,OAASj7D,EAASi8E,wBAE5C,MAAO,EAAM,CAET,IAAI9iF,EAAQ8yC,EAAM9yC,MACd8yF,EAAc9yF,EAAMwG,OACxB,MAAOosF,EAAaE,EAAa,CAC7B,IAAIV,EAAMpyF,EAAMyiB,OAAOmwE,GACvB,GAAIR,GAAOS,GAEP,GADA7B,GAAS,EACI,GAATA,EACA,MAAO,CAACnvB,IAAKh7D,EAASg8E,qBAClB/gB,OAAQ8wB,EAAa/rF,EAASi8E,8BAGjCsP,GAAOK,IACZzB,GAAS,GAEb4B,GAAc,CAClB,CACA,GACI9/C,EAAQjsC,EAAS67E,oBACZ5vC,IAAU4/C,EAAO9+E,KAAKk/B,EAAMvyC,OAErC,GAAa,MAATuyC,EACA,MAEJ8/C,EAAa,CACjB,CAEA,OAAO,IAxCG,CAyCd,CACJ,CACAruF,EAAQ4tF,aAAeA,CAEvB,IAEAtrC,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,aAAa,wBAAwB,gBAAgB,gBAAgB,YAAY,eAAe,2BAA2B,uBAAuB,2BAA2B,mCAAmC,SAASS,EAAUllD,EAASE,GACrU,aAEA,IAAIouD,EAAMpJ,EAAS,aACf9pD,EAAO8pD,EAAS,cAChB17C,EAAS07C,EAAS,YAClBqjB,EAAerjB,EAAS,uBAAuBqjB,aAC/CmJ,EAAYxsB,EAAS,eAAewsB,UACpC8c,EAAWtpC,EAAS,eAAey5B,KACnC3O,EAAQ9qB,EAAS,WAAW8qB,MAC5BuT,EAAWr+B,EAAS,cAAcq+B,SAClCyC,EAAsB9gC,EAAS,0BAA0B8gC,oBACzDgB,EAAkB9hC,EAAS,sBAAsB8hC,gBAEjDyH,EAAc,SAAS7rF,EAAM1G,GAC7B3B,KAAKm0F,aAAe,GACpBn0F,KAAKo0F,aAAe,GACpBp0F,KAAKq0F,cAAgB,CAAC,EACtBr0F,KAAKs0F,aAAe,CAAC,EACrBt0F,KAAKu0F,UAAY,EACjBv0F,KAAKw0F,aAAc,EAEnBx0F,KAAKyvF,UAAY,GACjBzvF,KAAKyvF,UAAUlmF,SAAW,WACtB,OAAOvJ,KAAKkjB,KAAK,KACrB,EACAljB,KAAKO,GAAG,aAAcP,KAAKy0F,aAAa9oF,KAAK3L,OAC7CA,KAAK+nF,UAAY/nF,KAAK+C,SAAS4I,KAAK3L,MAEjB,iBAARqI,GAAqBA,EAAK4rE,UACjC5rE,EAAO,IAAI2gF,EAAS3gF,IAExBrI,KAAKqsF,YAAYhkF,GACjBrI,KAAKihC,UAAY,IAAIk2C,EAAUn3E,MAE/BiP,EAAO8gE,aAAa/vE,MACpBA,KAAKgS,QAAQrQ,GACbsN,EAAOs/D,QAAQ,UAAWvuE,KAC9B,GAGA,WAEI+zD,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAKqsF,YAAc,SAASt7B,GACpB/wD,KAAK+wD,KACL/wD,KAAK+wD,IAAI2F,eAAe,SAAU12D,KAAK+nF,WAE3C/nF,KAAK+wD,IAAMA,EACXA,EAAIxwD,GAAG,SAAUP,KAAK+nF,WAElB/nF,KAAK00F,aACL10F,KAAK00F,YAAYrI,YAAYrsF,KAAKo3E,eAEtCp3E,KAAK20F,aACT,EACA30F,KAAKo3E,YAAc,WACf,OAAOp3E,KAAK+wD,GAChB,EACA/wD,KAAK40F,eAAiB,SAAS9E,GAC3B,IAAKA,EAGD,OAFA9vF,KAAK60F,aAAe,QACpB70F,KAAK80F,gBAAkB,IAG3B,IAAIjtF,EAAI7H,KAAK60F,aAAantF,OACtB3B,EAAI/F,KAAK+0F,kBAAkB/0F,KAAK60F,aAAc/E,GAAU,EACxDjoF,EAAI9B,IACJ/F,KAAK60F,aAAanwE,OAAO3e,EAAG8B,GAC5B7H,KAAK80F,gBAAgBpwE,OAAO3e,EAAG8B,GAEvC,EAEA7H,KAAK+0F,kBAAoB,SAASC,EAAYhzF,GAC1C,IAAIizF,EAAM,EACNC,EAAKF,EAAWttF,OAAS,EAE7B,MAAOutF,GAAOC,EAAI,CACd,IAAIC,EAAOF,EAAMC,GAAO,EACpBhvF,EAAI8uF,EAAWG,GAEnB,GAAInzF,EAAMkE,EACN+uF,EAAME,EAAM,MACX,MAAInzF,EAAMkE,GAGX,OAAOivF,EAFPD,EAAKC,EAAM,CAED,CAClB,CAEA,OAAOF,EAAK,CAChB,EAEAj1F,KAAK20F,YAAc,WACf30F,KAAK2wF,WAAY,EACjB3wF,KAAKo1F,UAAY,GACjBp1F,KAAKq1F,gBAAkB,GACvBr1F,KAAK40F,eAAe,GAChB50F,KAAK00F,aACL10F,KAAK00F,YAAYxsD,MAAM,EAC/B,EAEAloC,KAAKy0F,aAAe,SAAStxF,GACzB,IAAIswE,EAAOtwE,EAAEd,KACbrC,KAAK40F,eAAenhB,EAAKvrC,MAAM66B,IACnC,EAEA/iE,KAAK+C,SAAW,SAASikB,GACrBhnB,KAAK2wF,WAAY,EAEjB3wF,KAAK40F,eAAe5tE,EAAMkhB,MAAM66B,KAEhC,IAAIuyB,EAAet1F,KAAKu1F,4BAA4BvuE,GAC/ChnB,KAAKw1F,YAAax1F,KAAKy1F,cAAiBzuE,EAAM0uE,SAC/C11F,KAAK21F,WAAWjpF,KAAKsa,GACjBsuE,GAAuC,GAAvBA,EAAa5tF,QAC7B1H,KAAK41F,YAAYlpF,KAAK,CAClBvE,OAAQ,cACR8kF,MAAQqI,IAIhBt1F,KAAK61F,mBAAmBt5B,YAG5Bv8D,KAAK00F,aAAe10F,KAAK00F,YAAYnI,gBAAgBvlE,GACrDhnB,KAAKuuE,QAAQ,SAAUvnD,EAC3B,EACAhnB,KAAK66C,SAAW,SAASxyC,GACrBrI,KAAK+wD,IAAIlW,SAASxyC,GAClBrI,KAAKihC,UAAUoc,OAAO,EAAG,GAEzBr9C,KAAK40F,eAAe,GACpB50F,KAAK81F,QAAU,GACf91F,KAAK21F,WAAa,GAClB31F,KAAK41F,YAAc,GACnB51F,KAAK+1F,eAAe/1F,KAAKy1F,cACzBz1F,KAAKg2F,iBAAiBC,OAC1B,EACAj2F,KAAKyiC,SACLziC,KAAKuJ,SAAW,WACZ,OAAOvJ,KAAK+wD,IAAItuB,UACpB,EACAziC,KAAK8K,aAAe,WAChB,OAAO9K,KAAKihC,SAChB,EACAjhC,KAAKwsF,SAAW,SAASzpB,GACrB,OAAO/iE,KAAK00F,YAAYlI,SAASzpB,EACrC,EACA/iE,KAAKwjF,UAAY,SAASzgB,GACtB,OAAO/iE,KAAK00F,YAAYlR,UAAUzgB,EACtC,EACA/iE,KAAKyjF,WAAa,SAAS1gB,EAAKC,GAC5B,IACIhvB,EADAgqC,EAASh+E,KAAK00F,YAAYlR,UAAUzgB,GAC7B78D,EAAI,EACf,GAAc,MAAV88D,EACAj9D,EAAIi4E,EAAOt2E,OAAS,EACpBxB,EAAIlG,KAAKi0E,QAAQlR,GAAKr7D,YAEtB,IAAK,IAAI3B,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAE/B,GADAG,GAAK83E,EAAOj4E,GAAG7E,MAAMwG,OACjBxB,GAAK88D,EACL,MAIZ,OADAhvB,EAAQgqC,EAAOj4E,GACViuC,GAELA,EAAMx3B,MAAQzW,EACdiuC,EAAM9L,MAAQhiC,EAAI8tC,EAAM9yC,MAAMwG,OACvBssC,GAHI,IAIf,EACAh0C,KAAK+1F,eAAiB,SAASG,GAS3B,GARAl2F,KAAKy1F,aAAeS,EACpBl2F,KAAK81F,QAAU,GACf91F,KAAK21F,WAAa,GAClB31F,KAAK41F,YAAc,GAEf51F,KAAK61F,oBACL71F,KAAK61F,mBAAmBv5B,SAExB45B,EAAa,CACb,IAAIrzF,EAAO7C,KAEXA,KAAKm2F,uBAAyB,WAC1BtzF,EAAKgzF,mBAAmBv5B,SAEpBz5D,EAAK+yF,YAAYluF,SACjB7E,EAAKizF,QAAQppF,KAAK,CACd6sB,MAAO,OACPwxD,OAAQloF,EAAK+yF,cAEjB/yF,EAAK+yF,YAAc,IAGnB/yF,EAAK8yF,WAAWjuF,SAChB7E,EAAKizF,QAAQppF,KAAK,CACd6sB,MAAO,MACPwxD,OAAQloF,EAAK8yF,aAEjB9yF,EAAK8yF,WAAa,IAGlB9yF,EAAKizF,QAAQpuF,OAAS,GACtBwuF,EAAYE,QAAQ,CAChBjuF,OAAQ,YACRutB,KAAM,CAAC7yB,EAAKizF,QAASjzF,GACrB87E,MAAO97E,EAAKwzF,kBAGpBxzF,EAAKwzF,iBAAkB,EACvBxzF,EAAKizF,QAAU,EACnB,EACA91F,KAAK61F,mBAAqBh1F,EAAK47D,YAAYz8D,KAAKm2F,uBACpD,CACJ,EACAn2F,KAAKogE,cAAgB,WACbpgE,KAAKm2F,wBACLn2F,KAAKm2F,wBACb,EAEAn2F,KAAKs2F,oBAAsB,CACvB/vD,KAAM,WAAY,EAClBE,KAAM,WAAY,EAClBwvD,MAAO,WAAY,GAEvBj2F,KAAKg2F,eAAiB,WAClB,OAAOh2F,KAAKy1F,cAAgBz1F,KAAKs2F,mBACrC,EACAt2F,KAAKu2F,aAAe,WAChB,OAAIv2F,KAAKilF,iBACEpkF,EAAKu6D,aAAa,IAAKp7D,KAAKq6E,cAE5B,IAEf,EACAr6E,KAAKmpD,eAAiB,SAASnnD,GAC3BhC,KAAKkvE,UAAU,cAAeltE,EAClC,EACAhC,KAAKilF,eAAiB,WAClB,OAAOjlF,KAAKw2F,eAAiBx2F,KAAKy2F,MAAMC,eAC5C,EACA12F,KAAKkpD,WAAa,SAASkxB,GACvBp6E,KAAKkvE,UAAU,UAAWkL,EAC9B,EACAp6E,KAAKq6E,WAAa,WACd,OAAOr6E,KAAK22F,QAChB,EACA32F,KAAKs6E,UAAY,SAASvzE,GACtB,OAAO/G,KAAKw2F,cAAiBzvF,EAASi8D,OAAShjE,KAAK22F,WAAa,CACrE,EAEA32F,KAAK42F,YAAa,EAClB52F,KAAK62F,aAAe,SAASC,GACzB92F,KAAKkvE,UAAU,YAAa4nB,EAChC,EACA92F,KAAK+2F,aAAe,WAChB,OAAO/2F,KAAK42F,UAChB,EACA52F,KAAKg3F,gBAAkB,WACnBh3F,KAAK62F,cAAc72F,KAAK42F,WAC5B,EACA52F,KAAKi3F,oBAAsB,SAASl0B,EAAK59B,GAChCnlC,KAAKo0F,aAAarxB,KACnB/iE,KAAKo0F,aAAarxB,GAAO,IAC7B/iE,KAAKo0F,aAAarxB,IAAQ,IAAM59B,EAChCnlC,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAKk3F,uBAAyB,SAASn0B,EAAK59B,GACxCnlC,KAAKo0F,aAAarxB,IAAQ/iE,KAAKo0F,aAAarxB,IAAQ,IAAI9jD,QAAQ,IAAMkmB,EAAW,IACjFnlC,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAKm3F,eAAiB,WAClB,OAAOn3F,KAAKm0F,YAChB,EACAn0F,KAAKo3F,eAAiB,SAASxb,GAC3B57E,KAAKm0F,aAAe,GACpB,IAAK,IAAIpuF,EAAE,EAAGA,EAAE61E,EAAKl0E,OAAQ3B,IACzB/F,KAAKm0F,aAAavY,EAAK71E,IAAM,iBAEjC/F,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAKq3F,iBAAmB,WACpBr3F,KAAKm0F,aAAe,GACpBn0F,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAKs3F,cAAgB,SAASv0B,EAAK59B,QACbh1B,IAAdg1B,IACAA,EAAY,kBACZA,EACAnlC,KAAKm0F,aAAapxB,GAAO59B,SAElBnlC,KAAKm0F,aAAapxB,GAC7B/iE,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAKu3F,gBAAkB,SAASx0B,UACrB/iE,KAAKm0F,aAAapxB,GACzB/iE,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAK2qE,UAAY,SAASnmC,EAAOkoD,EAAOjrF,EAAM+1F,GAC1C,IAAI3mF,EAAK7Q,KAAKu0F,YAEVkD,EAAS,CACTjzD,MAAQA,EACR/iC,KAAOA,GAAQ,OACfi/D,SAAyB,mBAARj/D,EAAqBA,EAAO,KAC7CirF,MAAQA,EACR8K,UAAWA,EACX3mF,GAAIA,GAWR,OARI2mF,GACAx3F,KAAKq0F,cAAcxjF,GAAM4mF,EACzBz3F,KAAKuuE,QAAQ,uBAEbvuE,KAAKs0F,aAAazjF,GAAM4mF,EACxBz3F,KAAKuuE,QAAQ,qBAGV19D,CACX,EACA7Q,KAAK03F,iBAAmB,SAASD,EAAQD,GACrC,GAAKC,EAAOnnF,OAAZ,CAEA,IAAIO,EAAK7Q,KAAKu0F,YAYd,OAXAkD,EAAO5mF,GAAKA,EACZ4mF,EAAOD,UAAYA,EAEfA,GACAx3F,KAAKq0F,cAAcxjF,GAAM4mF,EACzBz3F,KAAKuuE,QAAQ,uBAEbvuE,KAAKs0F,aAAazjF,GAAM4mF,EACxBz3F,KAAKuuE,QAAQ,qBAGVkpB,CAbG,CAcd,EACAz3F,KAAKkrE,aAAe,SAASysB,GACzB,IAAIF,EAASz3F,KAAKq0F,cAAcsD,IAAa33F,KAAKs0F,aAAaqD,GAC/D,GAAKF,EAAL,CAGA,IAAIG,EAAUH,EAAOD,QAAUx3F,KAAKq0F,cAAgBr0F,KAAKs0F,aACrDmD,WACQG,EAAQD,GAChB33F,KAAKuuE,QAAQkpB,EAAOD,QAAU,oBAAsB,oBAL9C,CAOd,EACAx3F,KAAK63F,WAAa,SAASL,GACvB,OAAOA,EAAUx3F,KAAKq0F,cAAgBr0F,KAAKs0F,YAC/C,EAEAt0F,KAAKyqC,UAAY,SAAS6F,GACtB,IAAKtwC,KAAK83F,iBAAkB,CACxB,IAAIrtD,EAAY,IAAIgiD,EAAgB,KAAM,oBAAqB,QAC/DzsF,KAAK83F,iBAAmB93F,KAAK03F,iBAAiBjtD,EAClD,CACAzqC,KAAK83F,iBAAiBnL,UAAUr8C,EACpC,EACAtwC,KAAK+3F,eAAiB,SAASriB,EAAUE,EAAQ8W,EAAO8K,GAC/B,iBAAV5hB,IACP8W,EAAQ9W,EACRA,EAASF,GAERgX,IACDA,EAAQ,YAEZ,IAAIloD,EAAQ,IAAIixC,EAAMC,EAAU,EAAGE,EAAQz8D,KAE3C,OADAqrB,EAAM3zB,GAAK7Q,KAAK2qE,UAAUnmC,EAAOkoD,EAAO,WAAY8K,GAC7ChzD,CACX,EACAxkC,KAAKg4F,eAAiB,SAASC,GAC3Bj4F,KAAKmnE,aAAe8wB,EACpBj4F,KAAKuuE,QAAQ,mBAAoB,CAAC,EACtC,EACAvuE,KAAKk4F,eAAiB,WAClB,OAAOl4F,KAAKmnE,cAAgB,EAChC,EACAnnE,KAAKm4F,iBAAmB,WACpBn4F,KAAKg4F,eAAe,GACxB,EACAh4F,KAAKupF,eAAiB,SAASlhF,GAC3B,IAAI4Z,EAAQ5Z,EAAK4Z,MAAM,gBAEnBjiB,KAAKwpF,aADLvnE,EACoBA,EAAM,GAEN,IAE5B,EACAjiB,KAAKolE,aAAe,SAASrC,EAAKC,GAC9B,IAAIvuB,EAAOz0C,KAAKi0E,QAAQlR,GAEpBq1B,GAAU,EAOd,GANIp1B,EAAS,IACTo1B,IAAY3jD,EAAK9wB,OAAOq/C,EAAS,GAAG/gD,MAAMjiB,KAAKm7E,UAE9Cid,IACDA,IAAY3jD,EAAK9wB,OAAOq/C,GAAQ/gD,MAAMjiB,KAAKm7E,UAE3Cid,EACA,IAAI9nD,EAAKtwC,KAAKm7E,aACb,GAAI,QAAQrmE,KAAK2/B,EAAK1nC,MAAMi2D,EAAO,EAAGA,EAAO,IAC1C1yB,EAAK,UAELA,EAAKtwC,KAAKk7E,WAElB,IAAIhzC,EAAQ86B,EACZ,GAAI96B,EAAQ,EAAG,CACX,GACIA,UAEGA,GAAS,GAAKuM,EAAK9wB,OAAOukB,GAAOjmB,MAAMquB,IAC9CpI,GACJ,CAEA,IAAIC,EAAM66B,EACV,MAAO76B,EAAMsM,EAAK/sC,QAAU+sC,EAAK9wB,OAAOwkB,GAAKlmB,MAAMquB,GAC/CnI,IAGJ,OAAO,IAAIstC,EAAM1S,EAAK76B,EAAO66B,EAAK56B,EACtC,EACAnoC,KAAK45E,cAAgB,SAAS7W,EAAKC,GAC/B,IAAIq1B,EAAYr4F,KAAKolE,aAAarC,EAAKC,GACnCvuB,EAAOz0C,KAAKi0E,QAAQokB,EAAUlwD,IAAI46B,KAEtC,MAAOtuB,EAAK9wB,OAAO00E,EAAUlwD,IAAI66B,QAAQ/gD,MAAM,SAC3Co2E,EAAUlwD,IAAI66B,QAAU,EAE5B,OAAOq1B,CACX,EACAr4F,KAAK0pF,eAAiB,SAASC,GAC3B3pF,KAAK+wD,IAAI24B,eAAeC,EAC5B,EACA3pF,KAAK4pF,eAAiB,WAClB,OAAO5pF,KAAK+wD,IAAI64B,gBACpB,EACA5pF,KAAKs4F,aAAe,SAASC,GAAav4F,KAAKkvE,UAAU,YAAaqpB,EAAY,EAClFv4F,KAAKw4F,aAAe,WAAa,OAAOx4F,KAAKy4F,UAAY,EACzDz4F,KAAK04F,kBAAoB,SAASv1F,GAC9B,IAAIy4E,EAAOz4E,EAAEd,KACbrC,KAAK00F,YAAYxsD,MAAM0zC,EAAKjzC,OAC5B3oC,KAAKuuE,QAAQ,kBAAmBprE,EACpC,EAEAnD,KAAK4mF,OAAS,CAAC,EACf5mF,KAAKy2F,MAAQ,KACbz2F,KAAK24F,QAAU,KACf34F,KAAKgS,QAAU,SAASrQ,EAAMs9D,GAC1B,GAAIt9D,GAAwB,kBAATA,EAAmB,CAClC,GAAIA,EAAK2iF,aACL,OAAOtkF,KAAK44F,cAAcj3F,GAC9B,IAAImB,EAAUnB,EACVod,EAAOjc,EAAQic,IACvB,MACIA,EAAOpd,GAAQ,gBAKnB,GAHK3B,KAAK4mF,OAAO,mBACb5mF,KAAK4mF,OAAO,iBAAmB,IAAIqN,GAEnCj0F,KAAK4mF,OAAO7nE,KAAUjc,EAGtB,OAFA9C,KAAK44F,cAAc54F,KAAK4mF,OAAO7nE,SAC/BkgD,GAAMA,KAGVj/D,KAAK24F,QAAU55E,EACf9P,EAAOyiE,WAAW,CAAC,OAAQ3yD,GAAO,SAASnV,GACvC,GAAI5J,KAAK24F,UAAY55E,EACjB,OAAOkgD,GAAMA,IACbj/D,KAAK4mF,OAAO7nE,KAAUjc,EACtB9C,KAAK44F,cAAc54F,KAAK4mF,OAAO7nE,IACxBnV,GAAKA,EAAEw6E,OACdx6E,EAAI,IAAIA,EAAEw6E,KAAKthF,GACVA,IACD9C,KAAK4mF,OAAO7nE,GAAQnV,EACpBA,EAAE89E,IAAM3oE,GAEZ/e,KAAK44F,cAAchvF,IAEvBq1D,GAAMA,GACV,EAAEtzD,KAAK3L,OACFA,KAAKy2F,OACNz2F,KAAK44F,cAAc54F,KAAK4mF,OAAO,kBAAkB,EACzD,EAEA5mF,KAAK44F,cAAgB,SAASj3F,EAAMk3F,GAGhC,GAFKA,IACD74F,KAAK24F,QAAUh3F,EAAK+lF,KACpB1nF,KAAKy2F,QAAU90F,EAAnB,CAGA3B,KAAKy2F,MAAQ90F,EAEb3B,KAAK84F,cAED94F,KAAKy4F,YACLz4F,KAAK+4F,eAET,IAAIrN,EAAY/pF,EAAK2iF,eAErB,QAAkCn0E,IAA/Bu7E,EAAUjgF,iBAAgC,CACzC,IAAIitF,EAAoB14F,KAAK04F,kBAAkB/sF,KAAK3L,MACpD0rF,EAAUjgF,iBAAiB,SAAUitF,EACzC,CAEA,GAAK14F,KAAK00F,YAON10F,KAAK00F,YAAYtI,aAAaV,OAPX,CACnB1rF,KAAK00F,YAAc,IAAIjJ,EAAoBC,GAC3C,IAAIxrF,EAAQF,KACZA,KAAK00F,YAAYjpF,iBAAiB,UAAU,SAAStI,GACjDjD,EAAMquE,QAAQ,kBAAmBprE,EACrC,GACJ,CAIAnD,KAAK00F,YAAYrI,YAAYrsF,KAAKo3E,eAElCp3E,KAAKm7E,QAAUx5E,EAAKw5E,QACpBn7E,KAAKk7E,WAAav5E,EAAKu5E,WAGlB2d,IACGl3F,EAAKq3F,iBACLr3F,EAAKq3F,gBAAgBh5F,MACzBA,KAAKiF,SAASg0F,WAAWv1F,IAAIkB,KAAK5E,KAAMA,KAAKk5F,aAC7Cl5F,KAAKyyF,YAAY9wF,EAAKw3F,cACtBn5F,KAAK00F,YAAYxsD,MAAM,GACvBloC,KAAKihE,MAAM,cAtCL,CAwCd,EAEAjhE,KAAK84F,YAAc,WACX94F,KAAK6rF,UACL7rF,KAAK6rF,QAAQuN,YACbp5F,KAAK6rF,QAAU,KAEvB,EAEA7rF,KAAK+4F,aAAe,WAChB,IACI/4F,KAAK6rF,QAAU7rF,KAAKy2F,MAAM/P,aAAa1mF,KAC3C,CAAE,MAAOmD,GACL8L,EAAOX,KAAK,wBAAyBnL,GACrCnD,KAAK6rF,QAAU,IACnB,CACJ,EACA7rF,KAAKyD,QAAU,WACX,OAAOzD,KAAKy2F,KAChB,EAEAz2F,KAAKq5F,WAAa,EAClBr5F,KAAKs5F,aAAe,SAASpyF,GACrBlH,KAAKq5F,aAAenyF,GAAa6+C,MAAM7+C,KAG3ClH,KAAKq5F,WAAanyF,EAClBlH,KAAKuuE,QAAQ,kBAAmBrnE,GACpC,EACAlH,KAAKu5F,aAAe,WAChB,OAAOv5F,KAAKq5F,UAChB,EAEAr5F,KAAKw5F,YAAc,EACnBx5F,KAAKy5F,cAAgB,SAAS1rD,GACtB/tC,KAAKw5F,cAAgBzrD,GAAcgY,MAAMhY,KAG7C/tC,KAAKw5F,YAAczrD,EACnB/tC,KAAKuuE,QAAQ,mBAAoBxgC,GACrC,EACA/tC,KAAK05F,cAAgB,WACjB,OAAO15F,KAAKw5F,WAChB,EACAx5F,KAAK25F,eAAiB,WAElB,OADA35F,KAAK45F,gBACD55F,KAAK+7E,YACEl2D,KAAKkf,IAAI/kC,KAAK65F,wBAAyB75F,KAAK85F,aAChD95F,KAAK85F,WAChB,EAEA95F,KAAK65F,sBAAwB,WACzB,GAA6B,MAAzB75F,KAAK+5F,iBAA0B,OAAO/5F,KAAK+5F,iBAC/C,IAAI9vD,EAAQ,EAKZ,OAJAjqC,KAAK+7E,YAAY7xE,SAAQ,SAASsd,GAC1BA,GAAKA,EAAEsyE,YAAc7vD,IACrBA,EAAQziB,EAAEsyE,YAClB,IACO95F,KAAKg6F,gBAAkB/vD,CAClC,EAEAjqC,KAAK45F,cAAgB,SAASnwC,GAC1B,GAAIzpD,KAAK2wF,WAAalnC,EAAO,CAGzB,GAFAzpD,KAAK2wF,WAAY,EAEb3wF,KAAKwwF,aACL,OAAOxwF,KAAK85F,YAAc95F,KAAKi6F,WAUnC,IARA,IAAI7kD,EAAQp1C,KAAK+wD,IAAIq4B,cACjBrwE,EAAQ/Y,KAAKq1F,gBACb6E,EAAoB,EACpBC,EAAY,EACZngB,EAAWh6E,KAAKyvF,UAAU0K,GAC1BC,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,IAC5C0P,EAAMusB,EAAM1tC,OAEP3B,EAAI,EAAGA,EAAI8iB,EAAK9iB,IAAK,CAC1B,GAAIA,EAAIq0F,EAAW,CAEf,GADAr0F,EAAIi0E,EAAS7xC,IAAI46B,IAAM,EACnBh9D,GAAK8iB,EACL,MACJmxD,EAAWh6E,KAAKyvF,UAAU0K,KAC1BC,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,GAChD,CAEgB,MAAZJ,EAAMhT,KACNgT,EAAMhT,GAAK/F,KAAKq6F,sBAAsBjlD,EAAMrvC,IAAI,IAEhDgT,EAAMhT,GAAKm0F,IACXA,EAAoBnhF,EAAMhT,GAClC,CACA/F,KAAK85F,YAAcI,CACvB,CACJ,EACAl6F,KAAKi0E,QAAU,SAASlR,GACpB,OAAO/iE,KAAK+wD,IAAIkjB,QAAQlR,EAC5B,EACA/iE,KAAK8pF,SAAW,SAASpT,EAAUC,GAC/B,OAAO32E,KAAK+wD,IAAI+4B,SAASpT,EAAUC,EACvC,EACA32E,KAAKsnE,UAAY,WACb,OAAOtnE,KAAK+wD,IAAIuW,WACpB,EACAtnE,KAAK2rE,aAAe,SAASnnC,GACzB,OAAOxkC,KAAK+wD,IAAI4a,aAAannC,GAASxkC,KAAKihC,UAAUq/B,WACzD,EACAtgE,KAAKwtD,OAAS,SAASzmD,EAAUsB,GAC7B,OAAOrI,KAAK+wD,IAAIvD,OAAOzmD,EAAUsB,EACrC,EACArI,KAAKuH,OAAS,SAASi9B,GACnB,OAAOxkC,KAAK+wD,IAAIxpD,OAAOi9B,EAC3B,EACAxkC,KAAKmqF,gBAAkB,SAASzT,EAAUC,GACtC,OAAO32E,KAAK+wD,IAAIo5B,gBAAgBzT,EAAUC,EAC9C,EACA32E,KAAKs6F,YAAc,SAASvP,EAAQwP,GAChC,GAAKxP,EAAOrjF,OAAZ,CAGA1H,KAAKw1F,WAAY,EAEjB,IADA,IAAIgF,EAAgB,KACXz0F,EAAIglF,EAAOrjF,OAAS,GAAS,GAAN3B,EAASA,IAAK,CAC1C,IAAIihB,EAAQ+jE,EAAOhlF,GACA,OAAfihB,EAAMuS,OACNv5B,KAAK+wD,IAAIi6B,aAAahkE,EAAM+jE,QAC5ByP,EACIx6F,KAAKy6F,kBAAkBzzE,EAAM+jE,QAAQ,EAAMyP,IAE/CxzE,EAAM+jE,OAAO7gF,SAAQ,SAASwwF,GAC1B16F,KAAK4wF,SAAS8J,EAAUzN,MAC5B,GAAGjtF,KAEX,CAMA,OALAA,KAAKw1F,WAAY,EACjBgF,GACIx6F,KAAKw0F,cACJ+F,GACDv6F,KAAKihC,UAAU50B,kBAAkBmuF,GAC9BA,CArBG,CAsBd,EACAx6F,KAAK26F,YAAc,SAAS5P,EAAQwP,GAChC,GAAKxP,EAAOrjF,OAAZ,CAGA1H,KAAKw1F,WAAY,EAEjB,IADA,IAAIgF,EAAgB,KACXz0F,EAAI,EAAGA,EAAIglF,EAAOrjF,OAAQ3B,IAAK,CACpC,IAAIihB,EAAQ+jE,EAAOhlF,GACA,OAAfihB,EAAMuS,QACNv5B,KAAK+wD,IAAI+5B,YAAY9jE,EAAM+jE,QAC3ByP,EACIx6F,KAAKy6F,kBAAkBzzE,EAAM+jE,QAAQ,EAAOyP,GAExD,CAMA,OALAx6F,KAAKw1F,WAAY,EACjBgF,GACIx6F,KAAKw0F,cACJ+F,GACDv6F,KAAKihC,UAAU50B,kBAAkBmuF,GAC9BA,CAjBG,CAkBd,EACAx6F,KAAK46F,cAAgB,SAASlhF,GAC1B1Z,KAAKw0F,YAAc96E,CACvB,EAEA1Z,KAAKy6F,kBAAoB,SAAS1P,EAAQ8P,EAAQL,GAC9C,SAAStP,EAASlkE,GACd,OAAO6zE,EAA0B,WAAjB7zE,EAAM7e,OAAuC,WAAjB6e,EAAM7e,MACtD,CAEA,IACIq8B,EAAO8jD,EADPthE,EAAQ+jE,EAAO,GAGfG,EAASlkE,GACTwd,EAAQixC,EAAMmB,WAAW5vD,EAAMkhB,MAAOlhB,EAAMmhB,KAG5C3D,EAAQixC,EAAMmB,WAAW5vD,EAAMkhB,MAAOlhB,EAAMkhB,OAIhD,IAAK,IAAIniC,EAAI,EAAGA,EAAIglF,EAAOrjF,OAAQ3B,IAC/BihB,EAAQ+jE,EAAOhlF,GACXmlF,EAASlkE,IACTshE,EAAQthE,EAAMkhB,OACiC,GAA3C1D,EAAM/M,QAAQ6wD,EAAMvlB,IAAKulB,EAAMtlB,SAC/Bx+B,EAAM6K,SAASi5C,GAEnBA,EAAQthE,EAAMmhB,IACgC,GAA1C3D,EAAM/M,QAAQ6wD,EAAMvlB,IAAKulB,EAAMtlB,SAC/Bx+B,EAAM8K,OAAOg5C,IAEG,IAEpBA,EAAQthE,EAAMkhB,OACiC,GAA3C1D,EAAM/M,QAAQ6wD,EAAMvlB,IAAKulB,EAAMtlB,UAC/Bx+B,EAAQixC,EAAMmB,WAAW5vD,EAAMkhB,MAAOlhB,EAAMkhB,SAE5B,GAG5B,GAAqB,MAAjBsyD,EAAuB,CACuC,IAA1D/kB,EAAMH,cAAcklB,EAActyD,MAAO1D,EAAM0D,SAC/CsyD,EAActyD,MAAM86B,QAAUx+B,EAAM2D,IAAI66B,OAASx+B,EAAM0D,MAAM86B,OAC7Dw3B,EAAcryD,IAAI66B,QAAUx+B,EAAM2D,IAAI66B,OAASx+B,EAAM0D,MAAM86B,QAG/D,IAAIp2C,EAAM4tE,EAAczkB,aAAavxC,GAC1B,GAAP5X,EACA4X,EAAM6K,SAASmrD,EAActyD,QACd,GAARtb,GACP4X,EAAM8K,OAAOkrD,EAAcryD,IAEnC,CAEA,OAAO3D,CACX,EACAxkC,KAAKif,QAAU,SAASulB,EAAOn8B,GAC3B,OAAOrI,KAAK+wD,IAAI9xC,QAAQulB,EAAOn8B,EACnC,EACArI,KAAKqsE,SAAW,SAASyuB,EAAWC,EAAYjiF,GAC5C,IAAIzQ,EAAOrI,KAAK2rE,aAAamvB,GACzB7N,EAAQjtF,KAAKuvF,gBAAgBuL,GAE7BE,EAAUvlB,EAAMmB,WAAWmkB,EAAYA,GAC3C,IAAKjiF,EAAM,CACP9Y,KAAKuH,OAAOuzF,GACZ,IAAIG,EAAUH,EAAU5yD,MAAM66B,IAAM+3B,EAAU3yD,IAAI46B,IAC9Cm4B,EAAWD,GAAWH,EAAU3yD,IAAI66B,OAAS83B,EAAU5yD,MAAM86B,OAAS83B,EAAU3yD,IAAI66B,OACpFk4B,IACIF,EAAQ9yD,MAAM66B,KAAO+3B,EAAU3yD,IAAI46B,KAAOi4B,EAAQ9yD,MAAM86B,OAAS83B,EAAU3yD,IAAI66B,SAC/Eg4B,EAAQ9yD,MAAM86B,QAAUk4B,GACxBF,EAAQ7yD,IAAI46B,KAAO+3B,EAAU3yD,IAAI46B,KAAOi4B,EAAQ7yD,IAAI66B,OAAS83B,EAAU3yD,IAAI66B,SAC3Eg4B,EAAQ7yD,IAAI66B,QAAUk4B,IAE1BD,GAAWD,EAAQ9yD,MAAM66B,KAAO+3B,EAAU3yD,IAAI46B,MAC9Ci4B,EAAQ9yD,MAAM66B,KAAOk4B,EACrBD,EAAQ7yD,IAAI46B,KAAOk4B,EAE3B,CAGA,GADAD,EAAQ7yD,IAAMnoC,KAAKwtD,OAAOwtC,EAAQ9yD,MAAO7/B,GACrC4kF,EAAMvlF,OAAQ,CACd,IAAIyzF,EAAWL,EAAU5yD,MACrBkzD,EAAWJ,EAAQ9yD,MACnB+yD,EAAUG,EAASr4B,IAAMo4B,EAASp4B,IAClCm4B,EAAWE,EAASp4B,OAASm4B,EAASn4B,OAC1ChjE,KAAK4wF,SAAS3D,EAAMphF,KAAI,SAASmd,GAQ7B,OAPAA,EAAIA,EAAEwzB,QACFxzB,EAAEkf,MAAM66B,KAAOo4B,EAASp4B,MACxB/5C,EAAEkf,MAAM86B,QAAUk4B,GAClBlyE,EAAEmf,IAAI46B,KAAOo4B,EAASp4B,MACtB/5C,EAAEmf,IAAI66B,QAAUk4B,GACpBlyE,EAAEkf,MAAM66B,KAAOk4B,EACfjyE,EAAEmf,IAAI46B,KAAOk4B,EACNjyE,CACX,IACJ,CAEA,OAAOgyE,CACX,EACAh7F,KAAKq7F,WAAa,SAAS3lB,EAAUE,EAAQ0lB,GACzCA,EAAeA,EAAar8E,QAAQ,MAAOjf,KAAKu2F,gBAChD,IAAK,IAAIxzB,EAAI2S,EAAU3S,GAAK6S,EAAQ7S,IAChC/iE,KAAK+wD,IAAIw0B,aAAa,CAACxiB,IAAKA,EAAKC,OAAQ,GAAIs4B,EACrD,EACAt7F,KAAKu7F,YAAc,SAAU/2D,GAKzB,IAJA,IAAIg3D,EAAWh3D,EAAMqyC,eACjB4kB,EAAc,IAAIhmB,EAAM,EAAG,EAAG,EAAG,GACjCimB,EAAO17F,KAAKq6E,aAEPt0E,EAAIy1F,EAAStzD,MAAM66B,IAAKh9D,GAAKy1F,EAASrzD,IAAI46B,MAAOh9D,EAAG,CACzD,IAAI0uC,EAAOz0C,KAAKi0E,QAAQluE,GAExB01F,EAAYvzD,MAAM66B,IAAMh9D,EACxB01F,EAAYtzD,IAAI46B,IAAMh9D,EACtB,IAAK,IAAI4c,EAAI,EAAGA,EAAI+4E,IAAQ/4E,EACxB,GAAsB,KAAlB8xB,EAAK9wB,OAAOhB,GACZ,MACJA,EAAI+4E,GAA0B,MAAlBjnD,EAAK9wB,OAAOhB,IACxB84E,EAAYvzD,MAAM86B,OAASrgD,EAC3B84E,EAAYtzD,IAAI66B,OAASrgD,EAAI,IAE7B84E,EAAYvzD,MAAM86B,OAAS,EAC3By4B,EAAYtzD,IAAI66B,OAASrgD,GAE7B3iB,KAAKuH,OAAOk0F,EAChB,CACJ,EAEAz7F,KAAK27F,WAAa,SAASjlB,EAAUC,EAASsb,GAG1C,GAFAvb,EAAW12E,KAAKsxF,gBAAgB5a,GAChCC,EAAU32E,KAAKqxF,cAAc1a,GACzBsb,EAAM,EAAG,CACT,IAAIlvB,EAAM/iE,KAAKsxF,gBAAgB5a,EAAWub,GAC1C,GAAIlvB,EAAM,EAAG,OAAO,EACpB,IAAI99B,EAAO89B,EAAI2T,CACnB,MAAO,GAAIub,EAAM,EAAG,CACZlvB,EAAM/iE,KAAKqxF,cAAc1a,EAAUsb,GACvC,GAAIlvB,EAAM/iE,KAAK+wD,IAAIuW,YAAY,EAAG,OAAO,EACrCriC,EAAO89B,EAAI4T,CACnB,KAAO,CACHD,EAAW12E,KAAK47F,mBAAmBllB,GACnCC,EAAU32E,KAAK47F,mBAAmBjlB,GAC9B1xC,EAAO0xC,EAAUD,EAAW,CACpC,CAEA,IAAIlyC,EAAQ,IAAIixC,EAAMiB,EAAU,EAAGC,EAASv1E,OAAOy6F,WAC/C5O,EAAQjtF,KAAKuvF,gBAAgB/qD,GAAO34B,KAAI,SAASmd,GAIjD,OAHAA,EAAIA,EAAEwzB,QACNxzB,EAAEkf,MAAM66B,KAAO99B,EACfjc,EAAEmf,IAAI46B,KAAO99B,EACNjc,CACX,IAEIosB,EAAe,GAAP68C,EACNjyF,KAAK+wD,IAAI+4B,SAASpT,EAAUC,GAC5B32E,KAAK+wD,IAAIo5B,gBAAgBzT,EAAUC,GAGzC,OAFA32E,KAAK+wD,IAAIk5B,gBAAgBvT,EAASzxC,EAAMmQ,GACxC63C,EAAMvlF,QAAU1H,KAAK4wF,SAAS3D,GACvBhoD,CACX,EACAjlC,KAAK87F,YAAc,SAASplB,EAAUC,GAClC,OAAO32E,KAAK27F,WAAWjlB,EAAUC,GAAU,EAC/C,EACA32E,KAAK+7F,cAAgB,SAASrlB,EAAUC,GACpC,OAAO32E,KAAK27F,WAAWjlB,EAAUC,EAAS,EAC9C,EACA32E,KAAKg8F,eAAiB,SAAStlB,EAAUC,GACrC,OAAO32E,KAAK27F,WAAWjlB,EAAUC,EAAS,EAC9C,EAGA32E,KAAK47F,mBAAqB,SAAS74B,GAC/B,OAAOl9C,KAAKkf,IAAI,EAAGlf,KAAKif,IAAIi+B,EAAK/iE,KAAK+wD,IAAIuW,YAAY,GAC1D,EAEAtnE,KAAKi8F,iBAAmB,SAASl5B,EAAKC,GAClC,OAAIA,EAAS,EACF,EACJn9C,KAAKif,IAAI9kC,KAAK+wD,IAAIkjB,QAAQlR,GAAKr7D,OAAQs7D,EAClD,EAGAhjE,KAAK6oF,wBAA0B,SAAS9lB,EAAKC,GAGzC,GAFAA,EAASn9C,KAAKkf,IAAI,EAAGi+B,GAEjBD,EAAM,EACNA,EAAM,EACNC,EAAS,MACN,CACH,IAAIn6C,EAAM7oB,KAAK+wD,IAAIuW,YACfvE,GAAOl6C,GACPk6C,EAAMl6C,EAAM,EACZm6C,EAAShjE,KAAK+wD,IAAIkjB,QAAQprD,EAAI,GAAGnhB,QAEjCs7D,EAASn9C,KAAKif,IAAI9kC,KAAK+wD,IAAIkjB,QAAQlR,GAAKr7D,OAAQs7D,EAExD,CAEA,MAAO,CACHD,IAAKA,EACLC,OAAQA,EAEhB,EAEAhjE,KAAKowF,qBAAuB,SAAS5rD,GAC7BA,EAAM0D,MAAM66B,IAAM,GAClBv+B,EAAM0D,MAAM66B,IAAM,EAClBv+B,EAAM0D,MAAM86B,OAAS,GAErBx+B,EAAM0D,MAAM86B,OAAShjE,KAAKi8F,iBACtBz3D,EAAM0D,MAAM66B,IACZv+B,EAAM0D,MAAM86B,QAIpB,IAAIn6C,EAAM7oB,KAAK+wD,IAAIuW,YAAc,EAUjC,OATI9iC,EAAM2D,IAAI46B,IAAMl6C,GAChB2b,EAAM2D,IAAI46B,IAAMl6C,EAChB2b,EAAM2D,IAAI66B,OAAShjE,KAAK+wD,IAAIkjB,QAAQprD,GAAKnhB,QAEzC88B,EAAM2D,IAAI66B,OAAShjE,KAAKi8F,iBACpBz3D,EAAM2D,IAAI46B,IACVv+B,EAAM2D,IAAI66B,QAGXx+B,CACX,EACAxkC,KAAKi6F,WAAa,GAClBj6F,KAAKwwF,cAAe,EACpBxwF,KAAKk8F,gBAAkB,CACnBp3D,IAAM,KACNC,IAAM,MAEV/kC,KAAKopD,eAAiB,SAAS+yC,GAC3B,GAAIA,GAAen8F,KAAKwwF,aAAc,CAIlC,GAHAxwF,KAAKwwF,aAAe2L,EACpBn8F,KAAK2wF,WAAY,EACjB3wF,KAAK40F,eAAe,GAChBuH,EAAa,CACb,IAAItzE,EAAM7oB,KAAKsnE,YACftnE,KAAKo1F,UAAY9zF,MAAMunB,GACvB7oB,KAAKywF,gBAAgB,EAAG5nE,EAAM,EAClC,CAEA7oB,KAAKuuE,QAAQ,iBACjB,CACJ,EACAvuE,KAAKo8F,eAAiB,WAClB,OAAOp8F,KAAKwwF,YAChB,EACAxwF,KAAKq8F,kBAAoB,SAASv3D,EAAKC,GAC/B/kC,KAAKk8F,gBAAgBp3D,MAAQA,GAAO9kC,KAAKk8F,gBAAgBn3D,MAAQA,IACjE/kC,KAAKk8F,gBAAkB,CAAEp3D,IAAKA,EAAKC,IAAKA,GACxC/kC,KAAK2wF,WAAY,EACb3wF,KAAKwwF,cACLxwF,KAAKuuE,QAAQ,kBAEzB,EACAvuE,KAAKs8F,gBAAkB,SAASC,EAAcC,GAC1C,IAAIC,EAASz8F,KAAKk8F,gBACdO,EAAO13D,IAAM,IACb03D,EAAS,CAAC33D,IAAK03D,EAAcz3D,IAAKy3D,IACtC,IAAIE,EAAY18F,KAAK28F,oBAAoBJ,EAAcE,EAAO33D,IAAK23D,EAAO13D,KAC1E,OAAI23D,GAAa18F,KAAKi6F,YAAcyC,EAAY,IAC5C18F,KAAKi6F,WAAayC,EAClB18F,KAAK2wF,WAAY,EACb3wF,KAAKwwF,eACLxwF,KAAKywF,gBAAgB,EAAGzwF,KAAKsnE,YAAc,GAC3CtnE,KAAK40F,eAAe,GACpB50F,KAAKuuE,QAAQ,qBAEV,EAGf,EAEAvuE,KAAK28F,oBAAsB,SAASD,EAAW53D,EAAKC,GAOhD,OANID,IACA43D,EAAY72E,KAAKkf,IAAID,EAAK43D,IAE1B33D,IACA23D,EAAY72E,KAAKif,IAAIC,EAAK23D,IAEvBA,CACX,EACA18F,KAAK48F,aAAe,WAChB,OAAO58F,KAAKi6F,UAChB,EACAj6F,KAAK68F,aAAe,SAAUt+E,GAC1Bve,KAAKq8F,kBAAkB99E,EAAOA,EAClC,EACAve,KAAK88F,kBAAoB,WACrB,MAAO,CACHh4D,IAAM9kC,KAAKk8F,gBAAgBp3D,IAC3BC,IAAM/kC,KAAKk8F,gBAAgBn3D,IAEnC,EAEA/kC,KAAKu1F,4BAA8B,SAASvuE,GACxC,IAAIm1E,EAAcn8F,KAAKwwF,aACnBroF,EAAS6e,EAAM7e,OACf+/B,EAAQlhB,EAAMkhB,MACdC,EAAMnhB,EAAMmhB,IACZuuC,EAAWxuC,EAAM66B,IACjB4T,EAAUxuC,EAAI46B,IACdl6C,EAAM8tD,EAAUD,EAChB4e,EAAe,KAGnB,GADAt1F,KAAK6wF,WAAY,EACN,GAAPhoE,EACA,GAAe,WAAX1gB,EAAqB,CACrBnI,KAAKm8F,EAAc,YAAc,mBAAmBz3E,OAAOgyD,EAAU7tD,GAErE,IAAI2mE,EAAYxvF,KAAKyvF,UACrB6F,EAAet1F,KAAKuvF,gBAAgBvoE,GACpChnB,KAAKuwF,YAAY+E,GAEjB,IAAItb,EAAWh6E,KAAKi6E,YAAY9xC,EAAI46B,KAChC95C,EAAM,EACV,GAAI+wD,EAAU,CACVA,EAAS2T,eAAexlD,EAAI46B,IAAK56B,EAAI66B,OAAQ96B,EAAM86B,OAAS76B,EAAI66B,QAChEgX,EAASmT,UAAUtkE,GAEnB,IAAIk0E,EAAiB/8F,KAAKi6E,YAAYvD,GAClCqmB,GAAkBA,IAAmB/iB,IACrC+iB,EAAepe,MAAM3E,GACrBA,EAAW+iB,GAEf9zE,EAAMumE,EAAU39E,QAAQmoE,GAAY,CACxC,CAEA,IAAK/wD,EAAKA,EAAMumE,EAAU9nF,OAAQuhB,IAAO,CACjC+wD,EAAWwV,EAAUvmE,GACrB+wD,EAAS9xC,MAAM66B,KAAO56B,EAAI46B,KAC1BiX,EAASmT,UAAUtkE,EAE3B,CAEA8tD,EAAUD,CACd,KAAO,CACH,IAAIhhD,EAAOp0B,MAAMunB,GACjB6M,EAAKzS,QAAQyzD,EAAU,GACvB,IAAI15D,EAAMm/E,EAAcn8F,KAAKo1F,UAAYp1F,KAAKq1F,gBAC9Cr4E,EAAI0H,OAAOjb,MAAMuT,EAAK0Y,GAClB85D,EAAYxvF,KAAKyvF,UACjBzV,EAAWh6E,KAAKi6E,YAAYvD,GAC5BztD,EAAM,EACV,GAAI+wD,EAAU,CACV,IAAIptD,EAAMotD,EAASx1C,MAAMgyC,cAActuC,EAAM66B,IAAK76B,EAAM86B,QAC7C,GAAPp2C,GACAotD,EAAWA,EAAS97D,MAAMgqB,EAAM66B,IAAK76B,EAAM86B,QACvCgX,IACAA,EAASmT,SAAStkE,GAClBmxD,EAAS2T,eAAehX,EAAS,EAAGxuC,EAAI66B,OAAS96B,EAAM86B,WAGnD,GAARp2C,IACAotD,EAAS2T,eAAejX,EAAU,EAAGvuC,EAAI66B,OAAS96B,EAAM86B,QACxDgX,EAASmT,SAAStkE,IAEtBI,EAAMumE,EAAU39E,QAAQmoE,GAAY,CACxC,CAEA,IAAK/wD,EAAKA,EAAMumE,EAAU9nF,OAAQuhB,IAAO,CACjC+wD,EAAWwV,EAAUvmE,GACrB+wD,EAAS9xC,MAAM66B,KAAO2T,GACtBsD,EAASmT,SAAStkE,EAE1B,CACJ,KACG,CACHA,EAAMhD,KAAKqf,IAAIle,EAAMkhB,MAAM86B,OAASh8C,EAAMmhB,IAAI66B,QAC/B,WAAX76D,IACAmtF,EAAet1F,KAAKuvF,gBAAgBvoE,GACpChnB,KAAKuwF,YAAY+E,GAEjBzsE,GAAOA,GAEPmxD,EAAWh6E,KAAKi6E,YAAYvD,GAC5BsD,GACAA,EAAS2T,eAAejX,EAAUxuC,EAAM86B,OAAQn6C,EAExD,CAYA,OAVIszE,GAAen8F,KAAKo1F,UAAU1tF,QAAU1H,KAAK+wD,IAAIuW,aACjDj5D,QAAQ/N,MAAM,6DAElBN,KAAK6wF,WAAY,EAEbsL,EACAn8F,KAAKywF,gBAAgB/Z,EAAUC,GAE/B32E,KAAK0wF,sBAAsBha,EAAUC,GAElC2e,CACX,EAEAt1F,KAAK0wF,sBAAwB,SAASha,EAAUC,EAAS7wE,GACrD9F,KAAKq1F,gBAAgB3e,GAAY,KACjC12E,KAAKq1F,gBAAgB1e,GAAW,IACpC,EAEA32E,KAAKywF,gBAAkB,SAAS/Z,EAAUC,GACtC,IAIIqH,EACAhE,EALA5kC,EAAQp1C,KAAK+wD,IAAIq4B,cACjBhP,EAAUp6E,KAAKq6E,aACf2iB,EAAWh9F,KAAKo1F,UAChBsH,EAAY18F,KAAKi6F,WAIjBl3B,EAAM2T,EACVC,EAAU9wD,KAAKif,IAAI6xC,EAASvhC,EAAM1tC,OAAS,GAC3C,MAAOq7D,GAAO4T,EACVqD,EAAWh6E,KAAKi6E,YAAYlX,EAAKiX,GAC5BA,GAKDgE,EAAS,GACThE,EAAS3rD,KAAK,SAASm/D,EAAazqB,EAAKC,EAAQyuB,GACzC,IAAIwL,EACJ,GAAmB,MAAfzP,EAAqB,CACrByP,EAAaj9F,KAAKk9F,kBACF1P,EAAaxP,EAAOt2E,QACpCu1F,EAAW,GAAKE,EAChB,IAAK,IAAIp3F,EAAI,EAAGA,EAAIk3F,EAAWv1F,OAAQ3B,IACnCk3F,EAAWl3F,GAAKq3F,CAExB,MACIH,EAAaj9F,KAAKk9F,kBACd9nD,EAAM2tB,GAAK9xB,UAAUwgD,EAAYzuB,GACjCgb,EAAOt2E,QAEfs2E,EAASA,EAAOx4E,OAAOy3F,EAC3B,EAAEtxF,KAAK3L,MACPg6E,EAAS7xC,IAAI46B,IACb3tB,EAAM4kC,EAAS7xC,IAAI46B,KAAKr7D,OAAS,GAGrCs1F,EAAShjB,EAAS9xC,MAAM66B,KAAO/iE,KAAKq9F,mBAAmBrf,EAAQ0e,EAAWtiB,GAC1ErX,EAAMiX,EAAS7xC,IAAI46B,IAAM,IA1BzBib,EAASh+E,KAAKk9F,kBAAkB9nD,EAAM2tB,IACtCi6B,EAASj6B,GAAO/iE,KAAKq9F,mBAAmBrf,EAAQ0e,EAAWtiB,GAC3DrX,IA2BZ,EACA,IAAIu6B,EAAO,EACPC,EAAW,EACXJ,EAAoB,EACpBC,EAAoB,EACpBI,EAAc,EACdC,EAAQ,GACRC,EAAM,GACNC,EAAY,GAgdhB,SAASC,EAAY13F,GACjB,QAAIA,EAAI,QAEDA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,MAC/B,CAhfAlG,KAAKq9F,mBAAqB,SAASrf,EAAQ0e,EAAWtiB,GAClD,GAAqB,GAAjB4D,EAAOt2E,OACP,MAAO,GAGX,IAAIm2F,EAAS,GACTC,EAAgB9f,EAAOt2E,OACvBq2F,EAAY,EAAGC,EAAe,EAE9BC,EAASj+F,KAAKk+F,YAEdC,EAAmBn+F,KAAKo+F,kBACxBC,EAAY3B,GAAa72E,KAAKkf,IAAI,EAAIq1C,EAAS,KACvB,IAArB+jB,EAA6B,EAAIt4E,KAAKD,MAAM82E,EAAY,GAE/D,SAAS4B,IACL,IAAIp2C,EAAc,EAClB,GAAkB,IAAdm2C,EACA,OAAOn2C,EACX,GAAIi2C,EACA,IAAK,IAAIp4F,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAAK,CACpC,IAAIiuC,EAAQgqC,EAAOj4E,GACnB,GAAIiuC,GAASypD,EACTv1C,GAAe,MACd,IAAIlU,GAAS0pD,EAEb,IAAI1pD,GAAS2pD,EACd,SAEA,KAAK,CAJLz1C,GAAekyB,CAIV,CACb,CAIJ,OAFI6jB,IAA+B,IAArBE,IACVj2C,GAAekyB,GACZv0D,KAAKif,IAAIojB,EAAam2C,EACjC,CACA,SAASE,EAAS1iB,GACd,IAAI2iB,EAAYxgB,EAAOjxE,MAAMgxF,EAAWliB,GACpChzD,EAAM21E,EAAU92F,OACpB82F,EAAUt7E,KAAK,IACVjE,QAAQ,OAAO,WACZ4J,GAAO,CACX,IACC5J,QAAQ,MAAM,WACX4J,GAAO,CACX,IAECg1E,EAAOn2F,SACR0lB,EAASkxE,IACTT,EAAOzwE,OAASA,GAEpB4wE,GAAgBn1E,EAChBg1E,EAAOnxF,KAAKsxF,GACZD,EAAYliB,CAChB,CACA,IAAIzuD,EAAS,EACb,MAAO0wE,EAAgBC,EAAYrB,EAAYtvE,EAAQ,CACnD,IAAIlP,EAAQ6/E,EAAYrB,EAAYtvE,EACpC,GAAI4wD,EAAO9/D,EAAQ,IAAMu/E,GAASzf,EAAO9/D,IAAUu/E,EAC/Cc,EAASrgF,QAGb,GAAI8/D,EAAO9/D,IAAUi/E,GAAqBnf,EAAO9/D,IAAUk/E,EAA3D,CAsBA,IAAIqB,EAAW54E,KAAKkf,IAAI7mB,GAASw+E,GAAYA,GAAW,IAAKqB,EAAY,GACzE,MAAO7/E,EAAQugF,GAAYzgB,EAAO9/D,GAASi/E,EACvCj/E,IAEJ,GAAI+/E,EAAQ,CACR,MAAO//E,EAAQugF,GAAYzgB,EAAO9/D,GAASi/E,EACvCj/E,IAEJ,MAAOA,EAAQugF,GAAYzgB,EAAO9/D,IAAUs/E,EACxCt/E,GAER,MACI,MAAOA,EAAQugF,GAAYzgB,EAAO9/D,GAASu/E,EACvCv/E,IAGJA,EAAQugF,EACRF,IAAWrgF,IAGfA,EAAQ6/E,EAAYrB,EAChB1e,EAAO9/D,IAAUq/E,GACjBr/E,IACJqgF,EAASrgF,EAAQkP,GAxBjB,KArBA,CACI,IAAKlP,EAAOA,GAAS6/E,EAAY,EAAG7/E,IAChC,GAAI8/D,EAAO9/D,IAAUi/E,EACjB,MAGR,GAAIj/E,EAAQ6/E,EAAW,CACnBQ,EAASrgF,GACT,QACJ,CAEA,IADAA,EAAQ6/E,EAAYrB,EACfx+E,EAAOA,EAAQ8/D,EAAOt2E,OAAQwW,IAC/B,GAAI8/D,EAAO9/D,IAAUk/E,EACjB,MAGR,GAAIl/E,GAAS8/D,EAAOt2E,OAChB,MAEJ62F,EAASrgF,EAEb,CAyBJ,CACA,OAAO2/E,CACX,EACA79F,KAAKk9F,kBAAoB,SAASroF,EAAKqnD,GACnC,IACIke,EADAp9D,EAAM,GAEVk/C,EAASA,GAAU,EAEnB,IAAK,IAAIn2D,EAAI,EAAGA,EAAI8O,EAAInN,OAAQ3B,IAAK,CACjC,IAAIG,EAAI2O,EAAIgO,WAAW9c,GACvB,GAAS,GAALG,EAAQ,CACRk0E,EAAUp6E,KAAK0+F,iBAAiB1hF,EAAItV,OAASw0D,GAC7Cl/C,EAAItQ,KAAKgxF,GACT,IAAK,IAAI93F,EAAI,EAAGA,EAAIw0E,EAASx0E,IACzBoX,EAAItQ,KAAKixF,EAEjB,MACc,IAALz3F,EACL8W,EAAItQ,KAAK+wF,GACFv3F,EAAI,IAAMA,EAAI,IAAQA,EAAI,IAAMA,EAAI,GAC3C8W,EAAItQ,KAAK8wF,GAEJt3F,GAAK,MAAU03F,EAAY13F,GAChC8W,EAAItQ,KAAK4wF,EAAMC,GAEfvgF,EAAItQ,KAAK4wF,EAEjB,CACA,OAAOtgF,CACX,EACAhd,KAAKq6F,sBAAwB,SAASxlF,EAAK8pF,EAAiBC,GACxD,GAAuB,GAAnBD,EACA,MAAO,CAAC,EAAG,GAKf,IAAIz4F,EAAG88D,EACP,IALuB,MAAnB27B,IACAA,EAAkBxlF,KACtBylF,EAAeA,GAAgB,EAG1B57B,EAAS,EAAGA,EAASnuD,EAAInN,OAAQs7D,IAUlC,GATA98D,EAAI2O,EAAIgO,WAAWmgD,GACV,GAAL98D,EACA04F,GAAgB5+F,KAAK0+F,iBAAiBE,GAEjC14F,GAAK,MAAU03F,EAAY13F,GAChC04F,GAAgB,EAEhBA,GAAgB,EAEhBA,EAAeD,EACf,MAIR,MAAO,CAACC,EAAc57B,EAC1B,EAEAhjE,KAAK+7E,YAAc,KACnB/7E,KAAK6+F,aAAe,SAAS97B,GACzB,GAAI/iE,KAAK+7E,YACL,IAAI12E,EAAIrF,KAAK+7E,YAAYhZ,IAAQ/iE,KAAK+7E,YAAYhZ,GAAK8gB,UAAY,OAEnEx+E,EAAI,EACR,OAAKrF,KAAKwwF,cAAiBxwF,KAAKo1F,UAAUryB,GAG/B/iE,KAAKo1F,UAAUryB,GAAKr7D,OAAS,EAAIrC,EAFjC,EAAIA,CAInB,EACArF,KAAK8+F,gBAAkB,SAAS/7B,GAC5B,OAAK/iE,KAAKwwF,cAAiBxwF,KAAKo1F,UAAUryB,GAG/B/iE,KAAKo1F,UAAUryB,GAAKr7D,OAAS,EAF7B,CAIf,EAEA1H,KAAK++F,iBAAmB,SAASx3B,GAC7B,GAAIvnE,KAAKwwF,aAAc,CACnB,IAAInlE,EAAMrrB,KAAKw6E,yBAAyBjT,EAAWnmE,OAAOy6F,WACtDgC,EAAS79F,KAAKo1F,UAAU/pE,EAAI03C,KAChC,OAAO86B,EAAOn2F,QAAUm2F,EAAO,GAAKxyE,EAAI23C,OAAS66B,EAAOzwE,OAAS,CACrE,CACI,OAAO,CAEf,EACAptB,KAAKg/F,uBAAyB,SAASz3B,GACnC,IAAIl8C,EAAMrrB,KAAKw6E,yBAAyBjT,EAAWnmE,OAAOy6F,WAC1D,OAAO77F,KAAKi/F,uBAAuB5zE,EAAI03C,IAAK13C,EAAI23C,OACpD,EACAhjE,KAAKk/F,yBAA2B,SAASpP,EAAQqP,GAC7C,IAAI53B,EAAYvnE,KAAK0nE,oBAAoBooB,EAAQqP,GACjD,OAAOn/F,KAAKg/F,uBAAuBz3B,EACvC,EACAvnE,KAAK86E,iCAAmC,SAASgV,EAAQqP,GACrD,IAAI53B,EAAYvnE,KAAK0nE,oBAAoBooB,EAAQqP,GACjD,OAAOn/F,KAAKw6E,yBAAyBjT,EAAWnmE,OAAOy6F,UAAY,GACvE,EACA77F,KAAKo/F,gBAAkB,SAASr8B,GAC5B,OAAK/iE,KAAKwwF,aAGCxwF,KAAKo1F,UAAUryB,QAFtB,CAIR,EACA/iE,KAAK0+F,iBAAmB,SAASE,GAC7B,OAAO5+F,KAAK22F,SAAWiI,EAAe5+F,KAAK22F,QAC/C,EAGA32F,KAAKq/F,oBAAsB,SAAS93B,EAAWq3B,GAC3C,OAAO5+F,KAAKw6E,yBAAyBjT,EAAWq3B,GAAc77B,GAClE,EAGA/iE,KAAKs/F,uBAAyB,SAAS/3B,EAAWq3B,GAC9C,OAAO5+F,KAAKw6E,yBAAyBjT,EAAWq3B,GAAc57B,MAClE,EACAhjE,KAAKw6E,yBAA2B,SAASjT,EAAWq3B,GAChD,GAAIr3B,EAAY,EACZ,MAAO,CAACxE,IAAK,EAAGC,OAAQ,GAE5B,IAAIvuB,EAGAuuB,EAFA8sB,EAAS,EACTqP,EAAY,EAEZp8B,EAAM,EACNw8B,EAAY,EAEZC,EAAWx/F,KAAK80F,gBAChB/uF,EAAI/F,KAAK+0F,kBAAkByK,EAAUj4B,GACrC1/D,EAAI23F,EAAS93F,OACjB,GAAIG,GAAK9B,GAAK,EACV,CAAIg9D,EAAMy8B,EAASz5F,GACf+pF,EAAS9vF,KAAK60F,aAAa9uF,GAD/B,IAEI05F,EAAUl4B,EAAYi4B,EAAS33F,EAAI,EAFlB,MAIjB43F,GAAW53F,EAGnB,IAAIw/D,EAASrnE,KAAKsnE,YAAc,EAC5B0S,EAAWh6E,KAAKgwF,gBAAgBF,GAChCsK,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,IAEhD,MAAO4pD,GAAOwE,EAAW,CAErB,GADAg4B,EAAYv/F,KAAK6+F,aAAa/O,GAC1B/sB,EAAMw8B,EAAYh4B,GAAauoB,GAAUzoB,EACzC,MAEAtE,GAAOw8B,EACPzP,IACIA,EAASsK,IACTtK,EAAS9V,EAAS7xC,IAAI46B,IAAI,EAC1BiX,EAAWh6E,KAAKgwF,gBAAgBF,EAAQ9V,GACxCogB,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,KAIhDsmF,IACAz/F,KAAK60F,aAAanoF,KAAKojF,GACvB9vF,KAAK80F,gBAAgBpoF,KAAKq2D,GAElC,CAEA,GAAIiX,GAAYA,EAAS9xC,MAAM66B,KAAO+sB,EAClCr7C,EAAOz0C,KAAKuxF,mBAAmBvX,GAC/B8V,EAAS9V,EAAS9xC,MAAM66B,QACrB,IAAIA,EAAMw8B,GAAah4B,GAAauoB,EAASzoB,EAChD,MAAO,CACHtE,IAAKsE,EACLrE,OAAQhjE,KAAKi0E,QAAQ5M,GAAQ3/D,QAGjC+sC,EAAOz0C,KAAKi0E,QAAQ6b,GACpB9V,EAAW,IACf,CACA,IAAI0lB,EAAa,EACjB,GAAI1/F,KAAKwwF,aAAc,CACnB,IAAIqN,EAAS79F,KAAKo1F,UAAUtF,GAC5B,GAAI+N,EAAQ,CACR,IAAI8B,EAAa95E,KAAKD,MAAM2hD,EAAYxE,GACxCC,EAAS66B,EAAO8B,GACbA,EAAa,GAAK9B,EAAOn2F,SACxBg4F,EAAa7B,EAAOzwE,OACpB+xE,EAAYtB,EAAO8B,EAAa,IAAM9B,EAAOA,EAAOn2F,OAAS,GAC7D+sC,EAAOA,EAAKxD,UAAUkuD,GAE9B,CACJ,CAMA,OAJAA,GAAan/F,KAAKq6F,sBAAsB5lD,EAAMmqD,EAAec,GAAY,GACrE1/F,KAAKwwF,cAAgB2O,GAAan8B,IAClCm8B,EAAYn8B,EAAS,GAErBgX,EACOA,EAAS+T,cAAcoR,GAE3B,CAACp8B,IAAK+sB,EAAQ9sB,OAAQm8B,EACjC,EACAn/F,KAAKg3E,yBAA2B,SAAS8Y,EAAQqP,GAC7C,GAAyB,qBAAdA,EACP,IAAI9zE,EAAMrrB,KAAK6oF,wBAAwBiH,EAAO/sB,IAAK+sB,EAAO9sB,aAE1D33C,EAAMrrB,KAAK6oF,wBAAwBiH,EAAQqP,GAE/CrP,EAASzkE,EAAI03C,IACbo8B,EAAY9zE,EAAI23C,OAEhB,IAAIuE,EAAY,EACZq4B,EAAe,KACfnsB,EAAO,KACXA,EAAOzzE,KAAK0zE,UAAUoc,EAAQqP,EAAW,GACrC1rB,IACAqc,EAASrc,EAAKvrC,MAAM66B,IACpBo8B,EAAY1rB,EAAKvrC,MAAM86B,QAG3B,IAAI8W,EAAQ/W,EAAM,EAGdy8B,EAAWx/F,KAAK60F,aAChB9uF,EAAI/F,KAAK+0F,kBAAkByK,EAAU1P,GACrCjoF,EAAI23F,EAAS93F,OACjB,GAAIG,GAAK9B,GAAK,EACV,CAAIg9D,EAAMy8B,EAASz5F,GACfwhE,EAAYvnE,KAAK80F,gBAAgB/uF,GADrC,IAEI05F,EAAU3P,EAAS0P,EAAS33F,EAAI,EAFf,MAIjB43F,GAAW53F,EAGnB,IAAImyE,EAAWh6E,KAAKgwF,gBAAgBjtB,GAChCq3B,EAAYpgB,EAAUA,EAAS9xC,MAAM66B,IAAK5pD,IAE9C,MAAO4pD,EAAM+sB,EAAQ,CACjB,GAAI/sB,GAAOq3B,EAAW,CAElB,GADAtgB,EAASE,EAAS7xC,IAAI46B,IAAM,EACxB+W,EAASgW,EACT,MACJ9V,EAAWh6E,KAAKgwF,gBAAgBlW,EAAQE,GACxCogB,EAAYpgB,EAAUA,EAAS9xC,MAAM66B,IAAK5pD,GAC9C,MAEI2gE,EAAS/W,EAAM,EAGnBwE,GAAavnE,KAAK6+F,aAAa97B,GAC/BA,EAAM+W,EAEF2lB,IACAz/F,KAAK60F,aAAanoF,KAAKq2D,GACvB/iE,KAAK80F,gBAAgBpoF,KAAK66D,GAElC,CACA,IAAIiqB,EAAW,GACXxX,GAAYjX,GAAOq3B,GACnB5I,EAAWxxF,KAAKuxF,mBAAmBvX,EAAU8V,EAAQqP,GACrDS,EAAe5lB,EAAS9xC,MAAM66B,MAE9ByuB,EAAWxxF,KAAKi0E,QAAQ6b,GAAQ7+C,UAAU,EAAGkuD,GAC7CS,EAAe9P,GAEnB,IAAI4P,EAAa,EACjB,GAAI1/F,KAAKwwF,aAAc,CACnB,IAAIqP,EAAU7/F,KAAKo1F,UAAUwK,GAC7B,GAAIC,EAAS,CACT,IAAIC,EAAkB,EACtB,MAAOtO,EAAS9pF,QAAUm4F,EAAQC,GAC9Bv4B,IACAu4B,IAEJtO,EAAWA,EAASvgD,UAChB4uD,EAAQC,EAAkB,IAAM,EAAGtO,EAAS9pF,QAEhDg4F,EAAaI,EAAkB,EAAID,EAAQzyE,OAAS,CACxD,CACJ,CAEA,MAAO,CACH21C,IAAKwE,EACLvE,OAAQ08B,EAAa1/F,KAAKq6F,sBAAsB7I,GAAU,GAElE,EACAxxF,KAAKi/F,uBAAyB,SAASl8B,EAAKo8B,GACxC,OAAOn/F,KAAKg3E,yBAAyBjU,EAAKo8B,GAAWn8B,MACzD,EACAhjE,KAAK0nE,oBAAsB,SAASooB,EAAQqP,GACxC,OAAOn/F,KAAKg3E,yBAAyB8Y,EAAQqP,GAAWp8B,GAC5D,EACA/iE,KAAK+/F,gBAAkB,WACnB,IAAIC,EAAa,EACbvsB,EAAO,KACX,GAAKzzE,KAAKwwF,aAOH,CACH,IAAI7Z,EAAU32E,KAAKo1F,UAAU1tF,OACzBq7D,EAAM,EAENq3B,GAFSr0F,EAAI,EACb0tE,EAAOzzE,KAAKyvF,UAAU1pF,KACV0tE,EAAOA,EAAKvrC,MAAM66B,IAAK5pD,KAEvC,MAAO4pD,EAAM4T,EAAS,CAClB,IAAIknB,EAAS79F,KAAKo1F,UAAUryB,GAC5Bi9B,GAAcnC,EAASA,EAAOn2F,OAAS,EAAI,EAC3Cq7D,IACIA,EAAMq3B,IACNr3B,EAAM0Q,EAAKtrC,IAAI46B,IAAI,EACnB0Q,EAAOzzE,KAAKyvF,UAAU1pF,KACtBq0F,EAAY3mB,EAAMA,EAAKvrC,MAAM66B,IAAK5pD,IAE1C,CACJ,KAvBwB,CACpB6mF,EAAahgG,KAAKsnE,YAElB,IADA,IAAI0lB,EAAWhtF,KAAKyvF,UACX1pF,EAAI,EAAGA,EAAIinF,EAAStlF,OAAQ3B,IACjC0tE,EAAOuZ,EAASjnF,GAChBi6F,GAAcvsB,EAAKtrC,IAAI46B,IAAM0Q,EAAKvrC,MAAM66B,GAEhD,CAoBA,OAHI/iE,KAAK+7E,cACLikB,GAAchgG,KAAKigG,0BAEhBD,CACX,EACAhgG,KAAKkgG,gBAAkB,SAASC,GACvBngG,KAAKogG,iBACVpgG,KAAKq6F,sBAAwB,SAASxlF,EAAK8pF,EAAiBC,GACxD,GAAwB,IAApBD,EACA,MAAO,CAAC,EAAG,GAKf,IAAIz4F,EAAG88D,EACP,IALK27B,IACDA,EAAkBxlF,KACtBylF,EAAeA,GAAgB,EAG1B57B,EAAS,EAAGA,EAASnuD,EAAInN,OAAQs7D,IAOlC,GANA98D,EAAI2O,EAAI8O,OAAOq/C,GAEX47B,GADM,OAAN14F,EACgBlG,KAAK0+F,iBAAiBE,GAEtBuB,EAAGE,kBAAkBn6F,GAErC04F,EAAeD,EACf,MAIR,MAAO,CAACC,EAAc57B,EAC1B,EACJ,EAEAhjE,KAAKgL,QAAU,WACPhL,KAAK00F,cACL10F,KAAK00F,YAAYrI,YAAY,MAC7BrsF,KAAK00F,YAAc,MAEvB10F,KAAK84F,aACT,CAsCH,GAAEl0F,KAAKsvF,EAAYjsF,WAEpB0iD,EAAS,0BAA0B0kC,QAAQzqF,KAAKsvF,EAAYjsF,WAC5D0iD,EAAS,gCAAgC0oC,aAAazuF,KAAKsvF,EAAYjsF,WAGvEgH,EAAO4gE,cAAcqkB,EAAYjsF,UAAW,UAAW,CACnD2uB,KAAM,CACFlzB,IAAK,SAASxC,GAUV,GATKA,GAAkB,OAATA,EAEI,QAATA,EACLA,GAAQ,EACM,eAATA,EACLA,GAAS,EACY,iBAATA,IACZA,EAAQ+sB,SAAS/sB,EAAO,MAAO,GAN/BA,GAAQ,EAQRlB,KAAKsgG,OAASp/F,EAGlB,GADAlB,KAAKsgG,MAAQp/F,EACRA,EAEE,CACH,IAAI4oC,EAAsB,iBAAT5oC,EAAoBA,EAAQ,KAC7ClB,KAAKq8F,kBAAkBvyD,EAAKA,GAC5B9pC,KAAKopD,gBAAe,EACxB,MALIppD,KAAKopD,gBAAe,EAM5B,EACApmD,IAAK,WACD,OAAIhD,KAAKo8F,kBACc,GAAfp8F,KAAKsgG,MACE,cACNtgG,KAAK88F,oBAAoBh4D,IAEvB9kC,KAAKsgG,MADD,OAGR,KACX,EACA9wB,YAAY,GAEhBypB,WAAY,CACRv1F,IAAK,SAAS1B,GACVA,EAAa,QAAPA,EACmB,QAAnBhC,KAAKy2F,MAAMh1F,KACJ,QAAPO,EACFA,GAAOhC,KAAKk+F,cACZl+F,KAAKk+F,YAAcl8F,EACfhC,KAAKwwF,eACLxwF,KAAK2wF,WAAY,EACjB3wF,KAAK40F,eAAe,GACpB50F,KAAKywF,gBAAgB,EAAGzwF,KAAKsnE,YAAc,IAGvD,EACAwI,aAAc,QAElBquB,iBAAkB,CAAEruB,cAAc,GAClCywB,gBAAiB,CACb78F,IAAK,WAAY1D,KAAKuuE,QAAQ,mBAAoB,EAClDuB,aAAc,GAElByoB,UAAW,CACP70F,IAAK,SAAS60F,GACVv4F,KAAKy4F,WAAaF,EAElBv4F,KAAK84F,cACDP,GACAv4F,KAAK+4F,cACb,EACAjpB,cAAc,GAElB0wB,YAAa,CAAC1wB,cAAc,GAC5BsK,QAAS,CACL12E,IAAK,SAAS02E,GACNr0B,MAAMq0B,IAAYp6E,KAAK22F,WAAavc,IAExCp6E,KAAK2wF,WAAY,EACjB3wF,KAAKq1F,gBAAkB,GACvBr1F,KAAK22F,SAAWvc,EAChBp6E,KAAKuuE,QAAQ,iBACjB,EACAuB,aAAc,EACdN,YAAY,GAEhBsnB,UAAW,CACPpzF,IAAK,SAAS1B,GAAMhC,KAAKuuE,QAAQ,kBAAmB,EACpDuB,cAAc,GAElB6Z,YAAa,CACTjmF,IAAK,SAAS1B,GAAMhC,KAAK+wD,IAAI24B,eAAe1nF,EAAI,EAChDgB,IAAK,WAAY,OAAOhD,KAAK+wD,IAAI64B,gBAAgB,EACjDpa,YAAY,GAEhB7tE,KAAM,CACF+B,IAAK,SAAS1B,GAAOhC,KAAKgS,QAAQhQ,EAAK,EACvCgB,IAAK,WAAa,OAAOhD,KAAK24F,OAAQ,KAI9ClzF,EAAQyuF,YAAcA,CACtB,IAEAnsC,IAAImC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,cAAc,SAASS,EAAUllD,EAASE,GAC7H,aAEA,IAAI9E,EAAO8pD,EAAS,cAChBoJ,EAAMpJ,EAAS,aACf8qB,EAAQ9qB,EAAS,WAAW8qB,MAE5BgrB,EAAS,WACTzgG,KAAKiF,SAAW,CAAC,CACrB,GAEA,WACIjF,KAAK0D,IAAM,SAASZ,GAEhB,OADAixD,EAAIjhD,MAAM9S,KAAKiF,SAAUnC,GAClB9C,IACX,EACAA,KAAKmvE,WAAa,WACd,OAAOtuE,EAAK06D,WAAWv7D,KAAKiF,SAChC,EACAjF,KAAKgvE,WAAa,SAASlsE,GACvB9C,KAAKiF,SAAWnC,CACpB,EACA9C,KAAK0gG,KAAO,SAASvgC,GACjB,IAAIr9D,EAAU9C,KAAKiF,SACf8C,EAAW/H,KAAK2gG,eAAexgC,EAASr9D,GAC5C,IAAKiF,EACD,OAAO,EAEX,IAAIisE,EAAa,KAgBjB,OAfAjsE,EAASmC,SAAQ,SAASs6B,EAAOu+B,EAAK7G,GAClC,GAAK13B,EAAM0D,MAUP8rC,EAAaxvC,MAVC,CACd,IAAIw+B,EAASx+B,EAAM03B,QAAUA,GAAU,GAEvC,GADA8X,EAAa,IAAIyB,EAAM1S,EAAKC,EAAQD,EAAKC,EAASx+B,EAAM98B,SACnD88B,EAAM98B,QAAU5E,EAAQolC,OAASplC,EAAQolC,MAAMA,OACtB,GAAvBplC,EAAQ89F,aAAwB5sB,EAAW8B,QAAQhzE,EAAQolC,OAG9D,OADA8rC,EAAa,MACN,CAEf,CAEA,OAAO,CACX,IAEOA,CACX,EACAh0E,KAAK6gG,QAAU,SAAS1gC,GACpB,IAAIr9D,EAAU9C,KAAKiF,SACnB,IAAKnC,EAAQg+F,OACT,MAAO,GACX9gG,KAAK+gG,gBAAgBj+F,GAErB,IAAI0hC,EAAQ1hC,EAAQ0hC,MAChB4Q,EAAQ5Q,EACN27B,EAAQ2pB,SAAStlD,EAAM0D,MAAM66B,IAAKv+B,EAAM2D,IAAI46B,KAC5C5C,EAAQpP,IAAIq4B,cAEdhN,EAAS,GACT9rC,EAAKxtC,EAAQwtC,GACjB,GAAIxtC,EAAQk+F,aAAc,CACtB,IAEIC,EAFAp4E,EAAMynB,EAAG5oC,OACT2/D,EAASjyB,EAAM1tC,OAASmhB,EAE5B4pC,EAAO,IAAK,IAAIsQ,EAAMzyB,EAAG4rB,QAAU,EAAG6G,GAAOsE,EAAQtE,IAAO,CACxD,IAAK,IAAIpgD,EAAI,EAAGA,EAAIkG,EAAKlG,IACrB,IAAqC,GAAjCyyB,EAAM2tB,EAAMpgD,GAAGjD,OAAO4wB,EAAG3tB,IACzB,SAAS8vC,EAEjB,IAAIu5B,EAAY52C,EAAM2tB,GAClBtuB,EAAOW,EAAM2tB,EAAMl6C,EAAM,GACzBqgB,EAAa8iD,EAAUtkF,OAASskF,EAAU/pE,MAAMquB,EAAG,IAAI,GAAG5oC,OAC1DyhC,EAAWsL,EAAKxyB,MAAMquB,EAAGznB,EAAM,IAAI,GAAGnhB,OAEtCu5F,GAAaA,EAAU94D,IAAI46B,MAAQA,GACnCk+B,EAAU94D,IAAI66B,OAAS95B,IAI3BkzC,EAAO1vE,KAAKu0F,EAAY,IAAIxrB,EACxB1S,EAAK75B,EAAY65B,EAAMl6C,EAAM,EAAGsgB,IAEhCtgB,EAAM,IACNk6C,EAAMA,EAAMl6C,EAAM,GAC1B,CACJ,MACI,IAAK,IAAI9iB,EAAI,EAAGA,EAAIqvC,EAAM1tC,OAAQ3B,IAC9B,KAAImF,EAAUrK,EAAKm7D,gBAAgB5mB,EAAMrvC,GAAIuqC,GAC7C,IAAS3tB,EAAI,EAAGA,EAAIzX,EAAQxD,OAAQib,IAAK,CACrC,IAAIV,EAAQ/W,EAAQyX,GACpBy5D,EAAO1vE,KAAK,IAAI+oE,EAAM1vE,EAAGkc,EAAMi6C,OAAQn2D,EAAGkc,EAAMi6C,OAASj6C,EAAMva,QACnE,CAJgD,CAQxD,GAAI88B,EAAO,CACP,IAAImxC,EAAcnxC,EAAM0D,MAAM86B,OAC1B6S,EAAYrxC,EAAM0D,MAAM86B,OACxBj9D,EAAI,EAAG4c,EAAIy5D,EAAO10E,OAAS,EAC/B,MAAO3B,EAAI4c,GAAKy5D,EAAOr2E,GAAGmiC,MAAM86B,OAAS2S,GAAeyG,EAAOr2E,GAAGmiC,MAAM66B,KAAOv+B,EAAM0D,MAAM66B,IACvFh9D,IAEJ,MAAOA,EAAI4c,GAAKy5D,EAAOz5D,GAAGwlB,IAAI66B,OAAS6S,GAAauG,EAAOz5D,GAAGwlB,IAAI46B,KAAOv+B,EAAM2D,IAAI46B,IAC/EpgD,IAGJ,IADAy5D,EAASA,EAAOrvE,MAAMhH,EAAG4c,EAAI,GACxB5c,EAAI,EAAG4c,EAAIy5D,EAAO10E,OAAQ3B,EAAI4c,EAAG5c,IAClCq2E,EAAOr2E,GAAGmiC,MAAM66B,KAAOv+B,EAAM0D,MAAM66B,IACnCqZ,EAAOr2E,GAAGoiC,IAAI46B,KAAOv+B,EAAM0D,MAAM66B,GAEzC,CAEA,OAAOqZ,CACX,EACAp8E,KAAKif,QAAU,SAASmI,EAAO85E,GAC3B,IAAIp+F,EAAU9C,KAAKiF,SAEfqrC,EAAKtwC,KAAK+gG,gBAAgBj+F,GAC9B,GAAIA,EAAQk+F,aACR,OAAOE,EAEX,GAAK5wD,EAAL,CAGA,IAAIruB,EAAQquB,EAAGzuB,KAAKuF,GACpB,IAAKnF,GAASA,EAAM,GAAGva,QAAU0f,EAAM1f,OACnC,OAAO,KAGX,GADAw5F,EAAc95E,EAAMnI,QAAQqxB,EAAI4wD,GAC5Bp+F,EAAQq+F,aAAc,CACtBD,EAAcA,EAAYhjF,MAAM,IAChC,IAAK,IAAInY,EAAI8f,KAAKif,IAAI1d,EAAM1f,OAAQ0f,EAAM1f,QAAS3B,KAAO,CACtD,IAAI6nB,EAAKxG,EAAMrhB,GACX6nB,GAAMA,EAAG7L,eAAiB6L,EAC1BszE,EAAYn7F,GAAKm7F,EAAYn7F,GAAGsrE,cAEhC6vB,EAAYn7F,GAAKm7F,EAAYn7F,GAAGgc,aACxC,CACAm/E,EAAcA,EAAYh+E,KAAK,GACnC,CAEA,OAAOg+E,CAnBG,CAoBd,EAEAlhG,KAAK2gG,eAAiB,SAASxgC,EAASr9D,GACpC,IAIIsN,EAJAkgC,EAAKtwC,KAAK+gG,gBAAgBj+F,GAC9B,IAAKwtC,EACD,OAAO,EAGX,GAAIxtC,EAAQk+F,aACR,IAAIn4E,EAAMynB,EAAG5oC,OACT05F,EAAgB,SAAS3sD,EAAMsuB,EAAK7G,GACpC,IAAIhzB,EAAauL,EAAK/0B,OAAO4wB,EAAG,IAChC,IAAmB,GAAfpH,EAAJ,CAEA,IAAK,IAAInjC,EAAI,EAAGA,EAAI8iB,EAAK9iB,IAErB,GADA0uC,EAAO0rB,EAAQ8T,QAAQlR,EAAMh9D,IACF,GAAvB0uC,EAAK/0B,OAAO4wB,EAAGvqC,IACf,OAGR,IAAIojC,EAAWsL,EAAKxyB,MAAMquB,EAAGznB,EAAM,IAAI,GAAGnhB,OAEtC88B,EAAQ,IAAIixC,EAAM1S,EAAK75B,EAAY65B,EAAMl6C,EAAM,EAAGsgB,GAOtD,OANiB,GAAbmH,EAAG4rB,QACH13B,EAAM0D,MAAM66B,MACZv+B,EAAM0D,MAAM86B,OAAS5hE,OAAOy6F,WACrB3/B,IACP13B,EAAM0D,MAAM86B,QAAU9G,KAEtB9rD,EAASo0B,SAAb,CAhBU,CAkBd,OACG,GAAI1hC,EAAQu+F,UACXD,EAAgB,SAAS3sD,EAAMsuB,EAAK75B,GAEpC,IADA,IAAIh+B,EAAUrK,EAAKm7D,gBAAgBvnB,EAAMnE,GAChCvqC,EAAImF,EAAQxD,OAAO,EAAG3B,GAAK,EAAGA,IACnC,GAAIqK,EAASlF,EAAQnF,GAAIg9D,EAAK75B,GAC1B,OAAO,CACnB,OAEIk4D,EAAgB,SAAS3sD,EAAMsuB,EAAK75B,GAEpC,IADA,IAAIh+B,EAAUrK,EAAKm7D,gBAAgBvnB,EAAMnE,GAChCvqC,EAAI,EAAGA,EAAImF,EAAQxD,OAAQ3B,IAChC,GAAIqK,EAASlF,EAAQnF,GAAIg9D,EAAK75B,GAC1B,OAAO,CACnB,EAGJ,IAAIo4D,EAAethG,KAAKuhG,cAAcphC,EAASr9D,GAE/C,MAAO,CACHoH,QAAS,SAASs3F,GACdpxF,EAAWoxF,EACXF,EAAap3F,QAAQk3F,EACzB,EAER,EAEAphG,KAAK+gG,gBAAkB,SAASj+F,EAAS2+F,GACrC,GAAI3+F,EAAQg+F,kBAAkB7pF,OAC1B,OAAOnU,EAAQwtC,GAAKxtC,EAAQg+F,OAEhC,IAAIA,EAASh+F,EAAQg+F,OAErB,IAAKh+F,EAAQg+F,OACT,OAAOh+F,EAAQwtC,IAAK,EAEnBxtC,EAAQm5D,SACT6kC,EAASjgG,EAAKi7D,aAAaglC,IAE3Bh+F,EAAQ4+F,YACRZ,EAAS,MAAQA,EAAS,OAE9B,IAAIa,EAAW7+F,EAAQ8+F,cAAgB,KAAO,MAG9C,GADA9+F,EAAQk+F,cAAgBS,GAAyB,SAAS3sF,KAAKgsF,GAC3Dh+F,EAAQk+F,aACR,OAAOl+F,EAAQwtC,GAAKtwC,KAAK6hG,yBAAyBf,EAAQa,GAE9D,IACI,IAAIrxD,EAAK,IAAIr5B,OAAO6pF,EAAQa,EAChC,CAAE,MAAMx+F,GACJmtC,GAAK,CACT,CACA,OAAOxtC,EAAQwtC,GAAKA,CACxB,EAEAtwC,KAAK6hG,yBAA2B,SAASf,EAAQa,GAG7C,IAFA,IAAI1jF,EAAQ6iF,EAAO7hF,QAAQ,cAAe,QAAQf,MAAM,MACpDoyB,EAAK,GACAvqC,EAAI,EAAGA,EAAIkY,EAAMvW,OAAQ3B,IAAK,IACnCuqC,EAAG5jC,KAAK,IAAIuK,OAAOgH,EAAMlY,GAAI47F,GACjC,CAAE,MAAMx+F,GACJ,OAAO,CACX,CAOA,MANgB,IAAZ8a,EAAM,IACNqyB,EAAGxsB,QACHwsB,EAAG4rB,OAAS,GAEZ5rB,EAAG4rB,OAAS,EAET5rB,CACX,EAEAtwC,KAAKuhG,cAAgB,SAASphC,EAASr9D,GACnC,IAAIu+F,EAAiC,GAArBv+F,EAAQu+F,UACpBT,EAAqC,GAAvB99F,EAAQ89F,YAEtBp8D,EAAQ1hC,EAAQ0hC,MAChB0D,EAAQplC,EAAQolC,MACfA,IACDA,EAAQ1D,EAAQA,EAAM68D,EAAY,MAAQ,SAAWlhC,EAAQl/B,UAAUq/B,YAEvEp4B,EAAMA,QACNA,EAAQA,EAAM04D,GAAeS,EAAY,MAAQ,UAErD,IAAI3qB,EAAWlyC,EAAQA,EAAM0D,MAAM66B,IAAM,EACrC4T,EAAUnyC,EAAQA,EAAM2D,IAAI46B,IAAM5C,EAAQmH,YAAc,EAExDp9D,EAAUm3F,EAAY,SAASjxF,GAC3B,IAAI2yD,EAAM76B,EAAM66B,IAEZtuB,EAAO0rB,EAAQ8T,QAAQlR,GAAK9xB,UAAU,EAAG/I,EAAM86B,QACnD,IAAI5yD,EAASqkC,EAAMsuB,GAAnB,CAGA,IAAKA,IAAOA,GAAO2T,EAAU3T,IACzB,GAAI3yD,EAAS+vD,EAAQ8T,QAAQlR,GAAMA,GAC/B,OAER,GAAoB,GAAhBjgE,EAAQ8zB,KAGZ,IAAKmsC,EAAM4T,EAASD,EAAWxuC,EAAM66B,IAAKA,GAAO2T,EAAU3T,IACvD,GAAI3yD,EAAS+vD,EAAQ8T,QAAQlR,GAAMA,GAC/B,MAXE,CAYd,EAAI,SAAS3yD,GACT,IAAI2yD,EAAM76B,EAAM66B,IAEZtuB,EAAO0rB,EAAQ8T,QAAQlR,GAAK/gD,OAAOkmB,EAAM86B,QAC7C,IAAI5yD,EAASqkC,EAAMsuB,EAAK76B,EAAM86B,QAA9B,CAGA,IAAKD,GAAU,EAAGA,GAAO4T,EAAS5T,IAC9B,GAAI3yD,EAAS+vD,EAAQ8T,QAAQlR,GAAMA,GAC/B,OAER,GAAoB,GAAhBjgE,EAAQ8zB,KAGZ,IAAKmsC,EAAM2T,EAAUC,EAAUzuC,EAAM66B,IAAKA,GAAO4T,EAAS5T,IACtD,GAAI3yD,EAAS+vD,EAAQ8T,QAAQlR,GAAMA,GAC/B,MAXE,CAYd,EAEJ,MAAO,CAAC74D,QAASA,EACrB,CAEH,GAAEtF,KAAK67F,EAAOx4F,WAEfxC,EAAQg7F,OAASA,CACjB,IAEA14C,IAAImC,OAAO,4BAA4B,CAAC,UAAU,UAAU,SAAS,eAAe,sBAAsB,SAASS,EAAUllD,EAASE,GACtI,aAEA,IAAIwuE,EAAUxpB,EAAS,eACnByL,EAAYzL,EAAS,oBACrBuJ,EAAWigB,EAAQjgB,SAEvB,SAAS4tC,EAAY7yF,EAAQimD,GACzBl1D,KAAKk1D,SAAWA,IAAakB,EAAUrB,MAAQ,MAAQ,OACvD/0D,KAAKqpD,SAAW,CAAC,EACjBrpD,KAAK+hG,kBAAoB,CAAC,EAC1B/hG,KAAKgiG,YAAY/yF,GACjBjP,KAAKiiG,gBAAiB,CAC1B,CAEA,SAASC,EAAiBjzF,EAAQimD,GAC9B4sC,EAAYl9F,KAAK5E,KAAMiP,EAAQimD,GAC/Bl1D,KAAKiiG,gBAAiB,CAC1B,CAEAC,EAAiBj6F,UAAY65F,EAAY75F,UAEzC,WAgEI,SAAS4vE,EAAYzC,GACjB,MAAyB,iBAAXA,GAAuBA,EAAQ9rB,SACtC8rB,EAAQ9rB,QAAQviD,UAAY,CACvC,CAhEA/G,KAAKmiG,WAAa,SAAS/sB,GACnBp1E,KAAKqpD,SAAS+rB,EAAQ5iE,OACtBxS,KAAKoiG,cAAchtB,GAEvBp1E,KAAKqpD,SAAS+rB,EAAQ5iE,MAAQ4iE,EAE1BA,EAAQ9rB,SACRtpD,KAAKqiG,cAAcjtB,EAC3B,EAEAp1E,KAAKoiG,cAAgB,SAAShtB,EAASktB,GACnC,IAAI9vF,EAAO4iE,IAA+B,kBAAZA,EAAuBA,EAAUA,EAAQ5iE,MACvE4iE,EAAUp1E,KAAKqpD,SAAS72C,GACnB8vF,UACMtiG,KAAKqpD,SAAS72C,GACzB,IAAI+vF,EAAMviG,KAAK+hG,kBACf,IAAK,IAAIS,KAASD,EAAK,CACnB,IAAIE,EAAWF,EAAIC,GACnB,GAAIC,GAAYrtB,SACLmtB,EAAIC,QACR,GAAIlhG,MAAMsS,QAAQ6uF,GAAW,CAChC,IAAI18F,EAAI08F,EAAS5wF,QAAQujE,IACf,GAANrvE,IACA08F,EAAS/9E,OAAO3e,EAAG,GACI,GAAnB08F,EAAS/6F,SACT66F,EAAIC,GAASC,EAAS,IAElC,CACJ,CACJ,EAEAziG,KAAKspD,QAAU,SAASxgD,EAAKssE,EAASruE,GAMlC,GALkB,iBAAP+B,GAAmBA,SACVqH,GAAZpJ,IACAA,EAAW+B,EAAI/B,UACnB+B,EAAMA,EAAI9I,KAAKk1D,WAEdpsD,EAEL,MAAsB,mBAAXssE,EACAp1E,KAAKmiG,WAAW,CAACtgF,KAAMuzD,EAAS9rB,QAASxgD,EAAK0J,KAAM4iE,EAAQ5iE,MAAQ1J,SAE/EA,EAAIoV,MAAM,KAAKhU,SAAQ,SAASw4F,GAC5B,IAAIC,EAAQ,GACZ,IAA6B,GAAzBD,EAAQ7wF,QAAQ,KAAY,CAC5B,IAAIoM,EAAQykF,EAAQxkF,MAAM,OAC1BwkF,EAAUzkF,EAAMoG,MAChBpG,EAAM/T,SAAQ,SAASw4F,GACnB,IAAI5yF,EAAU9P,KAAK4iG,UAAUF,GACzB7xF,EAAKqjD,EAASpkD,EAAQ2pD,QAAU3pD,EAAQhH,IAC5C65F,IAAUA,EAAQ,IAAM,IAAM9xF,EAC9B7Q,KAAK6iG,qBAAqBF,EAAO,YACrC,GAAG3iG,MACH2iG,GAAS,GACb,CACA,IAAI7yF,EAAU9P,KAAK4iG,UAAUF,GACzB7xF,EAAKqjD,EAASpkD,EAAQ2pD,QAAU3pD,EAAQhH,IAC5C9I,KAAK6iG,qBAAqBF,EAAQ9xF,EAAIukE,EAASruE,EACnD,GAAG/G,KACP,EAMAA,KAAK6iG,qBAAuB,SAASL,EAAOptB,EAASruE,GACjD,IAAkChB,EAA9Bw8F,EAAMviG,KAAK+hG,kBACf,GAAK3sB,EAEE,IAAKmtB,EAAIC,IAAUxiG,KAAKiiG,eAC3BM,EAAIC,GAASptB,MACV,CACE9zE,MAAMsS,QAAQ2uF,EAAIC,KAE0B,IAArCz8F,EAAIw8F,EAAIC,GAAO3wF,QAAQujE,KAC/BmtB,EAAIC,GAAO99E,OAAO3e,EAAG,GAFrBw8F,EAAIC,GAAS,CAACD,EAAIC,IAKC,iBAAZz7F,IAEHA,EADAA,GAAYquE,EAAQ0tB,WACR,IAEFjrB,EAAYzC,IAE9B,IAAI/rB,EAAWk5C,EAAIC,GACnB,IAAKz8F,EAAI,EAAGA,EAAIsjD,EAAS3hD,OAAQ3B,IAAK,CAClC,IAAIg9F,EAAQ15C,EAAStjD,GACjBi9F,EAAWnrB,EAAYkrB,GAC3B,GAAIC,EAAWj8F,EACX,KACR,CACAsiD,EAAS3kC,OAAO3e,EAAG,EAAGqvE,EAC1B,aAxBWmtB,EAAIC,EAyBnB,EAEAxiG,KAAKgiG,YAAc,SAAS34C,GACxBA,GAAYhoD,OAAOsQ,KAAK03C,GAAUn/C,SAAQ,SAASsI,GAC/C,IAAI4iE,EAAU/rB,EAAS72C,GACvB,GAAK4iE,EAAL,CAGA,GAAuB,kBAAZA,EACP,OAAOp1E,KAAKspD,QAAQ8rB,EAAS5iE,GAEV,oBAAZ4iE,IACPA,EAAU,CAAEvzD,KAAMuzD,IAEC,kBAAZA,IAGNA,EAAQ5iE,OACT4iE,EAAQ5iE,KAAOA,GAEnBxS,KAAKmiG,WAAW/sB,GAdN,CAed,GAAGp1E,KACP,EAEAA,KAAKijG,eAAiB,SAAS55C,GAC3BhoD,OAAOsQ,KAAK03C,GAAUn/C,SAAQ,SAASsI,GACnCxS,KAAKoiG,cAAc/4C,EAAS72C,GAChC,GAAGxS,KACP,EAEAA,KAAKkjG,SAAW,SAASC,GACrB9hG,OAAOsQ,KAAKwxF,GAASj5F,SAAQ,SAASpB,GAClC9I,KAAKspD,QAAQxgD,EAAKq6F,EAAQr6F,GAC9B,GAAG9I,KACP,EAEAA,KAAKqiG,cAAgB,SAASjtB,GAC1Bp1E,KAAKspD,QAAQ8rB,EAAQ9rB,QAAS8rB,EAClC,EACAp1E,KAAK4iG,UAAY,SAASjxF,GACtB,IAAIsM,EAAQtM,EAAKoQ,cAAc7D,MAAM,mBAAmBmlB,QAAO,SAASra,GAAG,OAAOA,CAAC,IAC/ElgB,EAAMmV,EAAMoG,MAEZklB,EAAU4qC,EAAQrrE,GACtB,GAAIqrE,EAAQhgB,cAAc5qB,GACtBzgC,EAAMqrE,EAAQhgB,cAAc5qB,GAASxnB,kBACpC,KAAK9D,EAAMvW,OACZ,MAAO,CAACoB,IAAKA,EAAK2wD,QAAS,GAC1B,GAAoB,GAAhBx7C,EAAMvW,QAA2B,SAAZuW,EAAM,GAChC,MAAO,CAACnV,IAAKA,EAAIuoE,cAAe5X,QAAS,EAAE,CAG/C,IADA,IAAIA,EAAS,EACJ1zD,EAAIkY,EAAMvW,OAAQ3B,KAAM,CAC7B,IAAI47F,EAAWxtB,EAAQjgB,SAASj2C,EAAMlY,IACtC,GAAgB,MAAZ47F,EAGA,MAFsB,oBAAXtzF,SACPA,QAAQ/N,MAAM,oBAAsB2d,EAAMlY,GAAK,OAAS4L,IACrD,EAEX8nD,GAAUkoC,CACd,CACA,MAAO,CAAC74F,IAAKA,EAAK2wD,OAAQA,EAC9B,EAEAz5D,KAAKojG,eAAiB,SAAwB3pC,EAAQhF,GAClD,IAAI3rD,EAAMorD,EAASuF,GAAUhF,EAC7B,OAAOz0D,KAAK+hG,kBAAkBj5F,EAClC,EAEA9I,KAAK40E,eAAiB,SAASvyE,EAAMo3D,EAAQhF,EAAWlrB,GACpD,KAAIA,EAAU,GAAd,CACA,IAAIzgC,EAAMorD,EAASuF,GAAUhF,EACzB2gB,EAAUp1E,KAAK+hG,kBAAkBj5F,GAMrC,OALIzG,EAAKghG,YACLhhG,EAAKghG,WAAa,IAAMv6F,EACxBssE,EAAUp1E,KAAK+hG,kBAAkB1/F,EAAKghG,YAAcjuB,IAGpDA,GACe,aAAXA,GAAyD,aAA/BA,EAAQA,EAAQ1tE,OAAS,IAMvDrF,EAAKghG,YACC5pC,GAAoB,GAAVA,GAAoC,GAApBhF,EAAU/sD,SAEtB,GAAX+xD,GAAgBlwB,EAAU,KAC/BlnC,EAAKghG,UAAY,IAFjBhhG,EAAKghG,UAAYhhG,EAAKghG,UAAUt2F,MAAM,GAAIjE,EAAIpB,OAAS,IAIxD,CAAC0tE,QAASA,KAXT/yE,EAAKghG,UAAYhhG,EAAKghG,WAAav6F,EAC5B,CAACssE,QAAS,QAXF,CAsB3B,EAEAp1E,KAAKg1E,cAAgB,SAAS1yE,EAAQD,GAClC,OAAOA,EAAKghG,WAAa,EAC7B,CAEH,EAAEz+F,KAAKk9F,EAAY75F,WAEpBxC,EAAQq8F,YAAcA,EACtBr8F,EAAQy8F,iBAAmBA,CAC3B,IAEAn6C,IAAImC,OAAO,+BAA+B,CAAC,UAAU,UAAU,SAAS,cAAc,4BAA4B,0BAA0B,SAASS,EAAUllD,EAASE,GACxK,aAEA,IAAIouD,EAAMpJ,EAAS,cACfu3C,EAAmBv3C,EAAS,4BAA4Bu3C,iBACxDl0B,EAAerjB,EAAS,wBAAwBqjB,aAEhDs1B,EAAiB,SAASpuC,EAAU7L,GACpC64C,EAAiBt9F,KAAK5E,KAAMqpD,EAAU6L,GACtCl1D,KAAKujG,OAASvjG,KAAKqpD,SACnBrpD,KAAK+hE,kBAAkB,QAAQ,SAAS5+D,GACpC,OAAOA,EAAEiyE,QAAQvzD,KAAK1e,EAAEb,OAAQa,EAAEuyB,MAAQ,CAAC,EAC/C,GACJ,EAEAq+B,EAAIL,SAAS4vC,EAAgBpB,GAE7B,WAEInuC,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAK6hB,KAAO,SAASuzD,EAAS9yE,EAAQozB,GAClC,GAAIp0B,MAAMsS,QAAQwhE,GAAU,CACxB,IAAK,IAAIrvE,EAAIqvE,EAAQ1tE,OAAQ3B,KACzB,GAAI/F,KAAK6hB,KAAKuzD,EAAQrvE,GAAIzD,EAAQozB,GAAO,OAAO,EAEpD,OAAO,CACX,CAKA,GAHuB,kBAAZ0/C,IACPA,EAAUp1E,KAAKqpD,SAAS+rB,KAEvBA,EACD,OAAO,EAEX,GAAI9yE,GAAUA,EAAO49D,YAAckV,EAAQrU,SACvC,OAAO,EAEX,IAAI59D,EAAI,CAACb,OAAQA,EAAQ8yE,QAASA,EAAS1/C,KAAMA,GAIjD,OAHAvyB,EAAEgoD,YAAcnrD,KAAKihE,MAAM,OAAQ99D,GACnCnD,KAAKuuE,QAAQ,YAAaprE,IAED,IAAlBA,EAAEgoD,WACb,EAEAnrD,KAAKwjG,gBAAkB,SAASlhG,GAC5B,IAAItC,KAAKyjG,UAIT,OADAnhG,GAAUA,EAAO2+D,MAAM,gBACnBjhE,KAAK0jG,WACL1jG,KAAK8c,MAAMuH,MACXrkB,KAAK0L,oBAAoB,OAAQ1L,KAAK2jG,oBAEjC3jG,KAAK8c,MAAMpV,SACZ1H,KAAK8c,MAAQ9c,KAAK4jG,UAEf5jG,KAAK0jG,WAAY,IAEvB1jG,KAAK2jG,qBACN3jG,KAAK2jG,mBAAqB,SAASxgG,GAC/BnD,KAAK8c,MAAMpQ,KAAK,CAACvJ,EAAEiyE,QAASjyE,EAAEuyB,MAClC,EAAE/pB,KAAK3L,OAGXA,KAAK4jG,SAAW5jG,KAAK8c,MACrB9c,KAAK8c,MAAQ,GACb9c,KAAKO,GAAG,OAAQP,KAAK2jG,oBACd3jG,KAAK0jG,WAAY,EAC5B,EAEA1jG,KAAK6jG,OAAS,SAASvhG,GACnB,IAAItC,KAAKyjG,WAAczjG,KAAK8c,MAA5B,CAGA,GAAI9c,KAAK0jG,UACL,OAAO1jG,KAAKwjG,gBAAgBlhG,GAEhC,IACItC,KAAKyjG,WAAY,EACjBzjG,KAAK8c,MAAM5S,SAAQ,SAAS8e,GACR,iBAALA,EACPhpB,KAAK6hB,KAAKmH,EAAG1mB,GAEbtC,KAAK6hB,KAAKmH,EAAE,GAAI1mB,EAAQ0mB,EAAE,GAClC,GAAGhpB,KACP,CAAE,QACEA,KAAKyjG,WAAY,CACrB,CAfU,CAgBd,EAEAzjG,KAAK8jG,UAAY,SAASl6F,GACtB,OAAOA,EAAEiC,KAAI,SAASmd,GAKlB,MAJmB,iBAARA,EAAE,KACTA,EAAE,GAAKA,EAAE,GAAGxW,MACXwW,EAAE,KACHA,EAAIA,EAAE,IACHA,CACX,GACJ,CAEH,EAAEpkB,KAAK0+F,EAAer7F,WAEvBxC,EAAQ69F,eAAiBA,CAEzB,IAEAv7C,IAAImC,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,eAAe,aAAa,cAAc,SAASS,EAAUllD,EAASE,GAC/I,aAEA,IAAI9E,EAAO8pD,EAAS,eAChB17C,EAAS07C,EAAS,aAClB8qB,EAAQ9qB,EAAS,YAAY8qB,MAEjC,SAASnsB,EAAQoR,EAAKqpC,GAClB,MAAO,CAACrpC,IAAKA,EAAKqpC,IAAKA,EAC3B,CACAt+F,EAAQ4jD,SAAW,CAAC,CAChB72C,KAAM,mBACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GACX2M,EAAOyiE,WAAW,yBAAyB,SAAS/rE,GAChDA,EAAO+qE,KAAKpuE,GACZA,EAAO0hG,kBACX,GACJ,EACAjjC,UAAU,GACX,CACCvuD,KAAM,gBACN82C,QAASA,EAAQ,QAAS,UAC1BznC,KAAM,SAASvf,GACX2M,EAAOyiE,WAAW,wBAAwB,SAAS/rE,GAC/CA,EAAOs+F,gBAAgB3hG,EAAQ,EACnC,GACJ,EACA4hG,eAAgB,UAChBnjC,UAAU,GACX,CACCvuD,KAAM,oBACN82C,QAASA,EAAQ,cAAe,gBAChCznC,KAAM,SAASvf,GACX2M,EAAOyiE,WAAW,wBAAwB,SAAS/rE,GAC/CA,EAAOs+F,gBAAgB3hG,GAAS,EACpC,GACJ,EACA4hG,eAAgB,UAChBnjC,UAAU,GACX,CACCvuD,KAAM,YACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GAAUA,EAAOy8D,WAAa,EAC7CgC,UAAU,GACX,CACCvuD,KAAM,kBACN82C,QAASA,EAAQ,KAAM,UACvBznC,KAAM,SAASvf,GAAUA,EAAO6hG,iBAAmB,EACnDpjC,UAAU,GACX,CACCvuD,KAAM,WACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GACX,IAAImyC,EAAOxmB,SAASm2E,OAAO,sBAAuB,IAC7Cr+C,MAAMtR,IACPnyC,EAAO+hG,SAAS5vD,EAExB,EACAssB,UAAU,GACX,CACCvuD,KAAM,OACN82C,QAASA,EAAQ,gBAAiB,4BAClCznC,KAAM,SAASvf,GAAUA,EAAO69D,QAAQyxB,YAAW,EAAQ,EAC3D0S,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,SACN82C,QAASA,EAAQ,4BAA6B,wCAC9CznC,KAAM,SAASvf,GAAUA,EAAO69D,QAAQyxB,YAAW,EAAO,EAC1D0S,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,mBACN82C,QAASA,EAAQ,KAAM,MACvBznC,KAAM,SAASvf,GAAUA,EAAO69D,QAAQgzB,kBAAoB,EAC5DmR,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,yBACN82C,QAASA,EAAQ,SAAU,UAC3BznC,KAAM,SAASvf,GAAUA,EAAO69D,QAAQgzB,kBAAiB,EAAO,EAChEmR,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,UACN82C,QAASA,EAAQ,KAAM,yBACvBznC,KAAM,SAASvf,GAAUA,EAAO69D,QAAQ4wB,SAAW,EACnDmT,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,YACN82C,QAASA,EAAQ,QAAS,oBAC1BznC,KAAM,SAASvf,GACXA,EAAO69D,QAAQ4wB,UACfzuF,EAAO69D,QAAQ8wB,OAAO3uF,EAAO2+B,UAAUsjE,eAC3C,EACAL,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,YACN82C,QAASA,EAAQ,cAAe,0BAChCznC,KAAM,SAASvf,GAAUA,EAAO69D,QAAQ8wB,QAAU,EAClDiT,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,WACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GAAUA,EAAOkiG,UAAY,EAC5CF,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,eACN82C,QAASA,EAAQ,eAAgB,mBACjCznC,KAAM,SAASvf,GAAUA,EAAOmiG,cAAgB,EAChDH,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,mBACN82C,QAASA,EAAQ,QAAS,UAC1BznC,KAAM,SAASvf,GACPA,EAAO2+B,UAAU6d,UACjBx8C,EAAO2+B,UAAUy4C,aAEjBp3E,EAAOkiG,UACf,EACAzjC,UAAU,GACX,CACCvuD,KAAM,uBACN82C,QAASA,EAAQ,cAAe,gBAChCznC,KAAM,SAASvf,GACPA,EAAO2+B,UAAU6d,UACjBx8C,EAAO2+B,UAAUy4C,aAEjBp3E,EAAOmiG,cACf,EACA1jC,UAAU,GACX,CACCvuD,KAAM,OACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GACX2M,EAAOyiE,WAAW,qBAAqB,SAASvuE,GAAIA,EAAEs9F,OAAOn+F,EAAO,GACxE,EACAy+D,UAAU,GACX,CACCvuD,KAAM,YACN82C,QAAS,SACTznC,KAAM,SAASvf,GAAUA,EAAO00F,iBAAmB,EACnDj2B,UAAU,GACX,CACCvuD,KAAM,gBACN82C,QAASA,EAAQ,kBAAmB,oBACpCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAesuE,iBAAmB,EAClEkrB,kBAAmB,UACnBvjC,UAAU,EACVmjC,eAAgB,UAChBQ,gBAAiB,YAClB,CACClyF,KAAM,YACN82C,QAASA,EAAQ,YAAa,2BAC9BznC,KAAM,SAASvf,GAAUA,EAAOqiG,mBAAqB,EACrDL,kBAAmB,UACnBvjC,UAAU,EACVmjC,eAAgB,UAChBQ,gBAAiB,YAClB,CACClyF,KAAM,WACN82C,QAASA,EAAQ,WAAY,YAC7BznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAewtE,UAAY,EAC3DgsB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,WACN82C,QAASA,EAAQ,KAAM,aACvBznC,KAAM,SAASvf,EAAQozB,GAAQpzB,EAAOsiG,WAAWlvE,EAAKmvE,MAAQ,EAC9DP,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,cACN82C,QAASA,EAAQ,iBAAkB,sBACnCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAeouE,eAAiB,EAChEorB,kBAAmB,UACnBvjC,UAAU,EACVmjC,eAAgB,UAChBQ,gBAAiB,YAClB,CACClyF,KAAM,UACN82C,QAASA,EAAQ,WAAY,4BAC7BznC,KAAM,SAASvf,GAAUA,EAAOwiG,iBAAmB,EACnDR,kBAAmB,UACnBvjC,UAAU,EACVmjC,eAAgB,UAChBQ,gBAAiB,YAClB,CACClyF,KAAM,aACN82C,QAASA,EAAQ,aAAc,cAC/BznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAe0tE,YAAc,EAC7D8rB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,aACN82C,QAASA,EAAQ,OAAQ,eACzBznC,KAAM,SAASvf,EAAQozB,GAAQpzB,EAAOyiG,aAAarvE,EAAKmvE,MAAQ,EAChEP,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,iBACN82C,QAASA,EAAQ,kBAAmB,qBACpCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAe0uE,gBAAkB,EACjE8qB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,eACN82C,QAASA,EAAQ,YAAa,eAC9BznC,KAAM,SAASvf,GAAUA,EAAO0iG,kBAAoB,EACpDV,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,oBACN82C,QAASA,EAAQ,iBAAkB,sBACnCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAeguE,iBAAmB,EAClEwrB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,gBACN82C,QAASA,EAAQ,gBAAiB,4BAClCznC,KAAM,SAASvf,GAAUA,EAAO2iG,mBAAqB,EACrDX,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,aACN82C,QAASA,EAAQ,aAAc,cAC/BznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAe8tE,YAAc,EAC7D0rB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,WACN82C,QAASA,EAAQ,OAAQ,eACzBznC,KAAM,SAASvf,EAAQozB,GAAQpzB,EAAO4iG,aAAaxvE,EAAKmvE,MAAQ,EAChEP,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,kBACN82C,QAASA,EAAQ,mBAAoB,sBACrCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAewuE,iBAAmB,EAClEgrB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,gBACN82C,QAASA,EAAQ,aAAc,gBAC/BznC,KAAM,SAASvf,GAAUA,EAAO6iG,mBAAqB,EACrDb,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,kBACN82C,QAASA,EAAQ,kBAAmB,uBACpCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAekuE,eAAiB,EAChEsrB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,cACN82C,QAASA,EAAQ,gBAAiB,4BAClCznC,KAAM,SAASvf,GAAUA,EAAO8iG,iBAAmB,EACnDd,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,cACN82C,QAASA,EAAQ,cAAe,eAChCznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAe4tE,aAAe,EAC9D4rB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,YACN82C,QAASA,EAAQ,QAAS,gBAC1BznC,KAAM,SAASvf,EAAQozB,GAAQpzB,EAAO+iG,cAAc3vE,EAAKmvE,MAAQ,EACjEP,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,iBACN82C,QAAS,iBACTznC,KAAM,SAASvf,GAAUA,EAAOgjG,gBAAkB,EAClDvkC,UAAU,GACX,CACCvuD,KAAM,WACN82C,QAASA,EAAQ,KAAM,mBACvBznC,KAAM,SAASvf,GAAUA,EAAOijG,gBAAkB,EAClDxkC,UAAU,GACX,CACCvuD,KAAM,eACN82C,QAASA,EAAQ,WAAY,mBAC7BznC,KAAM,SAASvf,GAAUA,EAAOkjG,cAAgB,EAChDzkC,UAAU,GACX,CACCvuD,KAAM,eACN82C,QAAS,eACTznC,KAAM,SAASvf,GAAUA,EAAOmjG,cAAgB,EAChD1kC,UAAU,GACX,CACCvuD,KAAM,SACN82C,QAASA,EAAQ,KAAM,iBACvBznC,KAAM,SAASvf,GAAUA,EAAOojG,cAAgB,EAChD3kC,UAAU,GACX,CACCvuD,KAAM,aACN82C,QAAS,SACTznC,KAAM,SAASvf,GAAUA,EAAOqjG,YAAc,EAC9C5kC,UAAU,GACX,CACCvuD,KAAM,WACN82C,QAASA,EAAQ,UAAW,MAC5BznC,KAAM,SAAS1e,GAAKA,EAAEu9D,SAASmF,SAAS,GAAI,EAAI1iE,EAAEu9D,SAASqJ,YAAYD,WAAa,EACpF/I,UAAU,GACX,CACCvuD,KAAM,aACN82C,QAASA,EAAQ,YAAa,MAC9BznC,KAAM,SAAS1e,GAAKA,EAAEu9D,SAASmF,SAAS,EAAG,EAAI1iE,EAAEu9D,SAASqJ,YAAYD,WAAa,EACnF/I,UAAU,GACX,CACCvuD,KAAM,kBACN82C,QAAS,aACTznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAeguE,iBAAmB,EAClEwrB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,gBACN82C,QAAS,YACTznC,KAAM,SAASvf,GAAUA,EAAOwI,eAAekuE,eAAiB,EAChEsrB,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,kBACN82C,QAASA,EAAQ,aAAc,oBAC/BznC,KAAM,SAASvf,GAAUA,EAAO+mD,SAASm6C,gBAAgBlhG,EAAS,EAClEy+D,UAAU,GACX,CACCvuD,KAAM,cACN82C,QAASA,EAAQ,eAAgB,mBACjCznC,KAAM,SAASvf,GAAUA,EAAO+mD,SAASw6C,OAAOvhG,EAAS,EACzDy+D,UAAU,GACX,CACCvuD,KAAM,iBACN82C,QAASA,EAAQ,SAAU,UAC3BznC,KAAM,SAASvf,GAAUA,EAAOsjG,gBAAkB,EAClDtB,kBAAmB,UACnBJ,eAAgB,UAChBnjC,UAAU,GACX,CACCvuD,KAAM,mBACN82C,QAASA,EAAQ,eAAgB,gBACjCznC,KAAM,SAASvf,GAAUA,EAAOsjG,gBAAe,EAAO,EACtDtB,kBAAmB,UACnBJ,eAAgB,UAChBnjC,UAAU,GACX,CACCvuD,KAAM,mBACN82C,QAASA,EAAQ,eAAgB,gBACjCznC,KAAM,SAASvf,GAAUA,EAAOsjG,gBAAe,GAAM,EAAO,EAC5DtB,kBAAmB,UACnBJ,eAAgB,UAChBnjC,UAAU,GACX,CACCvuD,KAAM,oBACN82C,QAASA,EAAQ,KAAM,MACvBznC,KAAM,WAAY,EAClBwzD,WAAW,EACXtU,UAAU,GACX,CACCvuD,KAAM,OACNqP,KAAM,SAASvf,GACf,EACAy+D,UAAU,GAEd,CACIvuD,KAAM,MACNqP,KAAM,SAASvf,GACX,IAAIkiC,EAAQliC,EAAOghE,oBACnBhhE,EAAO2+D,MAAM,MAAOz8B,GAEfliC,EAAO2+B,UAAU6d,YAClBx8C,EAAO69D,QAAQ54D,OAAOi9B,GACtBliC,EAAOsI,iBAEf,EACAs5F,eAAgB,SAChBI,kBAAmB,WACpB,CACC9xF,KAAM,QACNqP,KAAM,SAASvf,EAAQozB,GACnBpzB,EAAOujG,aAAanwE,EACxB,EACAwuE,eAAgB,UACjB,CACC1xF,KAAM,aACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GAAUA,EAAO4nF,aAAe,EAC/Cga,eAAgB,SAChBI,kBAAmB,eACpB,CACC9xF,KAAM,qBACN82C,QAASA,EAAQ,eAAgB,mBACjCznC,KAAM,SAASvf,GAAUA,EAAOwjG,oBAAsB,EACtD5B,eAAgB,SAChBI,kBAAmB,WACpB,CACC9xF,KAAM,YACN82C,QAASA,EAAQ,aAAc,iBAC/BznC,KAAM,SAASvf,GAAUA,EAAOyjG,WAAa,EAC7C7B,eAAgB,YAChBI,kBAAmB,eACpB,CACC9xF,KAAM,gBACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GAAUA,EAAOqiF,oBAAsB,EACtD2f,kBAAmB,cACnBJ,eAAgB,iBACjB,CACC1xF,KAAM,qBACN82C,QAASA,EAAQ,eAAgB,mBACjCznC,KAAM,SAASvf,GAAUA,EAAO0jF,oBAAsB,EACtDse,kBAAmB,UACnBJ,eAAgB,iBACjB,CACC1xF,KAAM,iBACN82C,QAASA,EAAQ,gBAAiB,gBAClCznC,KAAM,SAASvf,GAAUA,EAAO0jG,aAAa,EAAI,EACjD9B,eAAgB,SAChBI,kBAAmB,WACpB,CACC9xF,KAAM,mBACN82C,QAASA,EAAQ,kBAAmB,kBACpCznC,KAAM,SAASvf,GAAUA,EAAO0jG,cAAc,EAAI,EAClD9B,eAAgB,SAChBI,kBAAmB,WACpB,CACC9xF,KAAM,UACN82C,QAASA,EAAQ,SAAU,oBAC3BznC,KAAM,SAASvf,GACX2M,EAAOyiE,WAAW,qBAAqB,SAASvuE,GAAIA,EAAEs9F,OAAOn+F,GAAQ,EAAK,GAC9E,GACD,CACCkQ,KAAM,OACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GAAUA,EAAOikC,MAAQ,GACzC,CACC/zB,KAAM,OACN82C,QAASA,EAAQ,sBAAuB,6BACxCznC,KAAM,SAASvf,GAAUA,EAAOmkC,MAAQ,GACzC,CACCj0B,KAAM,cACN82C,QAASA,EAAQ,eAAgB,qBACjCznC,KAAM,SAASvf,GAAUA,EAAO2jG,aAAe,EAC/C/B,eAAgB,UACjB,CACC1xF,KAAM,cACN82C,QAASA,EAAQ,SAAU,aAC3BznC,KAAM,SAASvf,GAAUA,EAAOw5F,aAAe,EAC/CoI,eAAgB,UACjB,CACC1xF,KAAM,gBACN82C,QAASA,EAAQ,iBAAkB,uBACnCznC,KAAM,SAASvf,GAAUA,EAAO4jG,eAAiB,EACjDhC,eAAgB,UACjB,CACC1xF,KAAM,gBACN82C,QAASA,EAAQ,WAAY,eAC7BznC,KAAM,SAASvf,GAAUA,EAAOy5F,eAAiB,EACjDmI,eAAgB,UACjB,CACC1xF,KAAM,MACN82C,QAASA,EAAQ,SAAU,8BAC3BznC,KAAM,SAASvf,GAAUA,EAAOiF,OAAO,QAAU,EACjD+8F,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,YACN82C,QAASA,EACL,4BACA,mDAEJznC,KAAM,SAASvf,GAAUA,EAAOiF,OAAO,OAAS,EAChD+8F,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,gBACN82C,QAASA,EAAQ,eAAgB,MACjCznC,KAAM,SAASvf,GACX,IAAIA,EAAO2+B,UAAU6d,UAGjB,OAAO,EAFPx8C,EAAOiF,OAAO,OAItB,EACA+8F,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,oBACN82C,QAASA,EAAQ,gBAAiB,qBAClCznC,KAAM,SAASvf,GAAUA,EAAO6jG,mBAAqB,EACrD7B,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,kBACN82C,QAASA,EAAQ,aAAc,UAC/BznC,KAAM,SAASvf,GAAUA,EAAO8jG,iBAAmB,EACnD9B,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,iBACN82C,QAASA,EAAQ,iBAAkB,oCACnCznC,KAAM,SAASvf,GAAUA,EAAO+jG,gBAAkB,EAClD/B,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,kBACN82C,QAASA,EAAQ,cAAe,cAChCznC,KAAM,SAASvf,GAAUA,EAAOgkG,iBAAmB,EACnDhC,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,UACN82C,QAASA,EAAQ,YAAa,aAC9BznC,KAAM,SAASvf,GAAUA,EAAOikG,cAAgB,EAChDjC,kBAAmB,UACnBJ,eAAgB,iBACjB,CACC1xF,KAAM,SACN82C,QAASA,EAAQ,MAAO,OACxBznC,KAAM,SAASvf,GAAUA,EAAO8qB,QAAU,EAC1Ck3E,kBAAmB,UACnBJ,eAAgB,iBACjB,CACC1xF,KAAM,eACN82C,QAASA,EAAQ,SAAU,UAC3BznC,KAAM,SAASvf,GAAUA,EAAOikG,cAAgB,EAChDjC,kBAAmB,cACnBJ,eAAgB,iBACjB,CACC1xF,KAAM,cACN82C,QAASA,EAAQ,SAAU,UAC3BznC,KAAM,SAASvf,GAAUA,EAAOkkG,aAAe,EAC/ClC,kBAAmB,cACnBJ,eAAgB,iBACjB,CACC1xF,KAAM,eACNqP,KAAM,SAASvf,EAAQuS,GAAOvS,EAAOkrD,OAAO34C,EAAM,EAClDyvF,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,aACNqP,KAAM,SAASvf,EAAQozB,GACnBpzB,EAAOkrD,OAAO3sD,EAAKu6D,aAAa1lC,EAAKrtB,MAAS,GAAIqtB,EAAKmvE,OAAS,GACpE,EACAP,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,YACN82C,QAASA,EAAQ,KAAM,UACvBznC,KAAM,SAASvf,GAAUA,EAAOmkG,WAAa,EAC7CnC,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,mBACN82C,QAASA,EAAQ,SAAU,UAC3BznC,KAAM,SAASvf,GAAUA,EAAOokG,kBAAoB,EACpDpC,kBAAmB,SAAShiG,GAASA,EAAOqkG,oBAAoB,EAAI,EACpEzC,eAAgB,UACjB,CACC1xF,KAAM,cACN82C,QAASA,EAAQ,SAAU,UAC3BznC,KAAM,SAASvf,GAAUA,EAAO+uE,aAAe,EAC/CizB,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,cACN82C,QAASA,EAAQ,eAAgB,gBACjCznC,KAAM,SAASvf,GAAUA,EAAOyf,aAAe,EAC/CuiF,kBAAmB,UACnBJ,eAAgB,UACjB,CACC1xF,KAAM,eACN82C,QAASA,EAAQ,eAAgB,mBACjCznC,KAAM,SAASvf,GACX,IAAIkiC,EAAQliC,EAAO2+B,UAAUq/B,WAE7B97B,EAAM0D,MAAM86B,OAASx+B,EAAM2D,IAAI66B,OAAS,EACxCx+B,EAAM2D,IAAI46B,MACVzgE,EAAO2+B,UAAUs/B,SAAS/7B,GAAO,EACrC,EACA8/D,kBAAmB,UACnBJ,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,YACN82C,QAASA,EAAQ,KAAM,MACvBznC,KAAM,SAASvf,GASX,IARA,IAAI61E,EAAc71E,EAAO2+B,UAAUk3C,cAC/Bta,EAAiBsa,EAAc71E,EAAO2+B,UAAU82C,mBAAqBz1E,EAAO2+B,UAAU62C,qBACtFha,EAAeqa,EAAc71E,EAAO2+B,UAAU62C,qBAAuBx1E,EAAO2+B,UAAU82C,mBACtF6uB,EAAkBtkG,EAAO69D,QAAQpP,IAAIkjB,QAAQpW,EAAekF,KAAKr7D,OACjEm/F,EAAevkG,EAAO69D,QAAQpP,IAAI4a,aAAarpE,EAAO2+B,UAAUq/B,YAChEwmC,EAAgBD,EAAa5nF,QAAQ,QAAS,KAAKvX,OACnDq/F,EAAazkG,EAAO69D,QAAQpP,IAAIkjB,QAAQpW,EAAekF,KAElDh9D,EAAI83D,EAAekF,IAAM,EAAGh9D,GAAK+3D,EAAaiF,IAAM,EAAGh9D,IAAK,CACjE,IAAIihG,EAAUnmG,EAAKw6D,eAAex6D,EAAKy6D,gBAAgBh5D,EAAO69D,QAAQpP,IAAIkjB,QAAQluE,KAC3D,IAAnBihG,EAAQt/F,SACRs/F,EAAU,IAAMA,GAEpBD,GAAcC,CAClB,CAEIlpC,EAAaiF,IAAM,EAAKzgE,EAAO69D,QAAQpP,IAAIuW,YAAc,IACzDy/B,GAAczkG,EAAO69D,QAAQpP,IAAIs4B,uBAGrC/mF,EAAOsI,iBACPtI,EAAO69D,QAAQpP,IAAI9xC,QAAQ,IAAIw2D,EAAM5X,EAAekF,IAAK,EAAGjF,EAAaiF,IAAM,EAAG,GAAIgkC,GAElFD,EAAgB,GAChBxkG,EAAO2+B,UAAUi3C,aAAara,EAAekF,IAAKlF,EAAemF,QACjE1gE,EAAO2+B,UAAU+mC,SAASnK,EAAekF,IAAKlF,EAAemF,OAAS8jC,KAEtEF,EAAkBtkG,EAAO69D,QAAQpP,IAAIkjB,QAAQpW,EAAekF,KAAKr7D,OAASk/F,EAAmBA,EAAkB,EAAKA,EACpHtkG,EAAO2+B,UAAUi3C,aAAara,EAAekF,IAAK6jC,GAE1D,EACAtC,kBAAmB,UACnBvjC,UAAU,GACX,CACCvuD,KAAM,kBACN82C,QAASA,EAAQ,KAAM,MACvBznC,KAAM,SAASvf,GACX,IAAIszE,EAAStzE,EAAO69D,QAAQpP,IAAIuW,YAAc,EAC1CqjB,EAASroF,EAAO69D,QAAQpP,IAAIkjB,QAAQ2B,GAAQluE,OAC5C00E,EAAS95E,EAAO2+B,UAAUs7C,UAAUH,OACpC6qB,EAAY,GACZ7qB,EAAO10E,OAAS,IAChB00E,EAAS,CAAC95E,EAAO2+B,UAAUq/B,aAG/B,IAAK,IAAIv6D,EAAI,EAAGA,EAAIq2E,EAAO10E,OAAQ3B,IAC3BA,GAAMq2E,EAAO10E,OAAS,IAChB00E,EAAOr2E,GAAGoiC,IAAI46B,MAAQ6S,GAAUwG,EAAOr2E,GAAGoiC,IAAI66B,SAAW2nB,GAC3Dsc,EAAUv6F,KAAK,IAAI+oE,EAAM2G,EAAOr2E,GAAGoiC,IAAI46B,IAAKqZ,EAAOr2E,GAAGoiC,IAAI66B,OAAQ4S,EAAQ+U,KAIxE,IAAN5kF,EAC8B,IAAxBq2E,EAAOr2E,GAAGmiC,MAAM66B,KAAwC,IAA3BqZ,EAAOr2E,GAAGmiC,MAAM86B,QAC/CikC,EAAUv6F,KAAK,IAAI+oE,EAAM,EAAG,EAAG2G,EAAOr2E,GAAGmiC,MAAM66B,IAAKqZ,EAAOr2E,GAAGmiC,MAAM86B,SAGxEikC,EAAUv6F,KAAK,IAAI+oE,EAAM2G,EAAOr2E,EAAE,GAAGoiC,IAAI46B,IAAKqZ,EAAOr2E,EAAE,GAAGoiC,IAAI66B,OAAQoZ,EAAOr2E,GAAGmiC,MAAM66B,IAAKqZ,EAAOr2E,GAAGmiC,MAAM86B,SAInH1gE,EAAO4kG,sBACP5kG,EAAOsI,iBAEP,IAAQ7E,EAAI,EAAGA,EAAIkhG,EAAUv/F,OAAQ3B,IACjCzD,EAAO2+B,UAAUx0B,SAASw6F,EAAUlhG,IAAI,EAEhD,EACAg7D,UAAU,EACVmjC,eAAgB,QAGpB,IAEAn8C,IAAImC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,yBAAyB,cAAc,cAAc,eAAe,oBAAoB,yBAAyB,0BAA0B,yBAAyB,0BAA0B,mBAAmB,aAAa,YAAY,wBAAwB,+BAA+B,gCAAgC,aAAa,uBAAuB,SAASS,EAAUllD,EAASE,GACvb,aAEAglD,EAAS,wBAET,IAAIoJ,EAAMpJ,EAAS,aACf5pB,EAAM4pB,EAAS,aACf9pD,EAAO8pD,EAAS,cAChByL,EAAYzL,EAAS,mBACrBkS,EAAYlS,EAAS,wBAAwBkS,UAC7CkV,EAAepnB,EAAS,yBAAyBonB,aACjDyB,EAAc7oB,EAAS,wBAAwB6oB,YAC/CY,EAAazpB,EAAS,yBAAyBypB,WAC/C8f,EAAcvpC,EAAS,kBAAkBupC,YACzCuM,EAAS91C,EAAS,YAAY81C,OAC9BhrB,EAAQ9qB,EAAS,WAAW8qB,MAC5BzH,EAAerjB,EAAS,uBAAuBqjB,aAC/Cs1B,EAAiB34C,EAAS,8BAA8B24C,eACxD6D,EAAkBx8C,EAAS,+BAA+BtB,SAC1Dp6C,EAAS07C,EAAS,YAClBu4B,EAAgBv4B,EAAS,oBAAoBu4B,cAC7CkkB,EAAS,SAAS1mC,EAAUP,GAC5B,IAAI94D,EAAYq5D,EAAS2mC,sBACzBrnG,KAAKqH,UAAYA,EACjBrH,KAAK0gE,SAAWA,EAEhB1gE,KAAKqpD,SAAW,IAAIi6C,EAAeltC,EAAUrB,MAAQ,MAAQ,MAAOoyC,GACpEnnG,KAAKyhE,UAAa,IAAI5E,EAAU6D,EAAS4mC,uBAAwBtnG,MACjEA,KAAK0gE,SAASpY,SAAWtoD,KAAKyhE,UAAUZ,aACxC7gE,KAAKunG,WAAa,IAAInzB,EAAWp0E,MACjCA,KAAKwnG,cAAgB,IAAIz1B,EAAa/xE,MACtC,IAAIwzE,EAAYxzE,MAEhBA,KAAK6oD,gBAAkB,EACvB7oD,KAAKynG,SAAU,IAAIhH,GAAS/8F,IAAI,CAC5BkzB,MAAM,IAGV52B,KAAK0nG,gBAAkB1nG,KAAK0nG,gBAAgB/7F,KAAK3L,MACjDA,KAAKqpD,SAAS9oD,GAAG,OAAQP,KAAK0nG,iBAE9B1nG,KAAK2nG,0BAEL3nG,KAAK4nG,iBAAmB/mG,EAAK47D,YAAY,WACrCz8D,KAAKuuE,QAAQ,QAAS,CAAC,GACnBvuE,KAAKmgE,SAAWngE,KAAKmgE,QAAQu0B,aAC7B10F,KAAKmgE,QAAQu0B,YAAYpI,eACjC,EAAE3gF,KAAK3L,OAEPA,KAAKO,GAAG,UAAU,SAASuM,EAAG5M,GAC1BA,EAAM0nG,iBAAiBrrC,SAAS,GACpC,IAEAv8D,KAAK6nG,WAAW1nC,GAAW,IAAI+zB,EAAY,KAC3CjlF,EAAO8gE,aAAa/vE,MACpBiP,EAAOs/D,QAAQ,SAAUvuE,KAC7B,GAEA,WAEI+zD,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAK2nG,wBAA0B,WAG3B3nG,KAAK8nG,WAAa,GAClB9nG,KAAKqpD,SAAS9oD,GAAG,OAAQP,KAAK+nG,eAAep8F,KAAK3L,OAAO,GACzDA,KAAKqpD,SAAS9oD,GAAG,YAAaP,KAAKgoG,aAAar8F,KAAK3L,OAAO,GAE5DA,KAAKioG,cAAgBpnG,EAAK47D,YAAYz8D,KAAKgoG,aAAar8F,KAAK3L,OAE7DA,KAAKO,GAAG,SAAU,WACdP,KAAKkoG,OAASloG,KAAK+nG,iBACnB/nG,KAAKkoG,MAAMC,YAAa,CAC5B,EAAEx8F,KAAK3L,OAAO,GAEdA,KAAKO,GAAG,kBAAmB,WACvBP,KAAKkoG,OAASloG,KAAK+nG,iBACnB/nG,KAAKkoG,MAAME,kBAAmB,CAClC,EAAEz8F,KAAK3L,OAAO,EAClB,EAEAA,KAAKkoG,MAAQ,KACbloG,KAAKqoG,OAAS,CAAC,EACfroG,KAAK+nG,eAAiB,SAASO,GAC3B,GAAItoG,KAAKkoG,MAAO,CACZ,IAAKI,GAAetoG,KAAKkoG,MAAM9yB,QAC3B,OACJp1E,KAAKqoG,OAASroG,KAAKkoG,KACvB,CACKI,IACDtoG,KAAKuoG,gBAAkB,KACvBD,EAAc,CAAC,GAGnBtoG,KAAKioG,cAAc1rC,WACnBv8D,KAAKkoG,MAAQ,CACT9yB,QAASkzB,EAAYlzB,SAAW,CAAC,EACjC1/C,KAAM4yE,EAAY5yE,KAClBxuB,UAAWlH,KAAK0gE,SAASx5D,WAEzBlH,KAAKkoG,MAAM9yB,QAAQ5iE,WAA8CrC,IAAtCnQ,KAAKkoG,MAAM9yB,QAAQ8uB,gBAC9ClkG,KAAK6oD,iBACb,EAEA7oD,KAAKgoG,aAAe,SAAS7kG,GACzB,GAAInD,KAAKkoG,MAAO,CACZ,GAAI/kG,IAAuB,IAAlBA,EAAEgoD,YACP,OAAOnrD,KAAKkoG,MAAQ,KACxBloG,KAAKuuE,QAAQ,sBACb,IAAI6G,EAAUp1E,KAAKkoG,MAAM9yB,QACrBA,EAAQ5iE,MAAQxS,KAAK6oD,gBAAkB,GACvC7oD,KAAK6oD,kBACT,IAAIq7C,EAAiB9uB,GAAWA,EAAQ8uB,eACxC,GAAIA,EAAgB,CAChB,OAAQA,GACJ,IAAK,iBACDA,EAAiB,UACrB,IAAK,SACDlkG,KAAK0gE,SAAS6D,qBAAqB,KAAM,IACzC,MACJ,IAAK,UACL,IAAK,SACDvkE,KAAK0gE,SAAS6D,uBACd,MACJ,IAAK,gBACD,IAAI//B,EAAQxkC,KAAKihC,UAAUq/B,WACvBrxD,EAASjP,KAAK0gE,SAASqJ,aACvBvlC,EAAM0D,MAAM66B,KAAO9zD,EAAO0nE,SAAWnyC,EAAM2D,IAAI46B,KAAO9zD,EAAOynE,WAC7D12E,KAAK0gE,SAAS8nC,wBAAwBxoG,KAAKihC,UAAUiJ,OAAQlqC,KAAKihC,UAAUo2C,MAEhF,MACJ,QACI,MAEc,WAAlB6sB,GACAlkG,KAAK0gE,SAAS+nC,iBAAiBzoG,KAAKkoG,MAAMhhG,UAClD,CAEAlH,KAAKqoG,OAASroG,KAAKkoG,MACnBloG,KAAKkoG,MAAQ,IACjB,CACJ,EACAloG,KAAK0oG,mBAAqB,CAAC,YAAa,MAAO,gBAC/C1oG,KAAK0nG,gBAAkB,SAASvkG,GAC5B,GAAKnD,KAAK2oG,iBAAV,CAGA,IAAI77D,EAAO9sC,KAAKqoG,OACZO,EAAoB5oG,KAAK0oG,mBACzBG,EAAc/7D,EAAKsoC,SAAYjyE,EAAEiyE,QAAQ5iE,MAAQs6B,EAAKsoC,QAAQ5iE,KAClE,GAAsB,gBAAlBrP,EAAEiyE,QAAQ5iE,KAAwB,CAClC,IAAInK,EAAOlF,EAAEuyB,UACiBvlB,IAA1BnQ,KAAK8oG,mBACL9oG,KAAK8oG,kBAAmB,GAE5BD,EAAcA,GACP7oG,KAAK8oG,oBACH,KAAKh0F,KAAKzM,IAAS,KAAKyM,KAAKg4B,EAAKpX,OAE3C11B,KAAK8oG,kBAAmB,CAC5B,MACID,EAAcA,IACwC,IAA/CD,EAAkB/2F,QAAQ1O,EAAEiyE,QAAQ5iE,MAIlB,UAAzBxS,KAAK2oG,kBACFr/F,KAAKknD,MAAQxwD,KAAK+oG,kBAAoB,MAEzCF,GAAc,GAGdA,EACA7oG,KAAKmgE,QAAQk2B,iBAAkB,GACqB,IAA/CuS,EAAkB/2F,QAAQ1O,EAAEiyE,QAAQ5iE,QACzCxS,KAAK+oG,kBAAoBz/F,KAAKknD,MA9BxB,CA+Bd,EACAxwD,KAAK20E,mBAAqB,SAASq0B,EAAiB/pC,GAChD,GAAI+pC,GAA8C,kBAApBA,EAA8B,CACxDhpG,KAAKipG,cAAgBD,EACrB,IAAI9oG,EAAQF,KACZiP,EAAOyiE,WAAW,CAAC,aAAcs3B,IAAkB,SAASrjG,GACpDzF,EAAM+oG,eAAiBD,GACvB9oG,EAAMqnG,WAAW5yB,mBAAmBhvE,GAAUA,EAAO5D,SACzDk9D,GAAMA,GACV,GACJ,MACIj/D,KAAKipG,cAAgB,KACrBjpG,KAAKunG,WAAW5yB,mBAAmBq0B,GACnC/pC,GAAMA,GAEd,EACAj/D,KAAK+0E,mBAAqB,WACtB,OAAO/0E,KAAKunG,WAAWxyB,oBAC3B,EACA/0E,KAAK6nG,WAAa,SAAS1nC,GACvB,GAAIngE,KAAKmgE,SAAWA,EAApB,CAEIngE,KAAKkoG,OAAOloG,KAAKgoG,eACrBhoG,KAAKkoG,MAAQ,CAAC,EAEd,IAAIgB,EAAalpG,KAAKmgE,QACtB,GAAI+oC,EAAY,CACZlpG,KAAKmgE,QAAQtzD,IAAI,SAAU7M,KAAKmpG,mBAChCnpG,KAAKmgE,QAAQtzD,IAAI,aAAc7M,KAAK44F,eACpC54F,KAAKmgE,QAAQtzD,IAAI,kBAAmB7M,KAAKopG,oBACzCppG,KAAKmgE,QAAQtzD,IAAI,gBAAiB7M,KAAKqpG,kBACvCrpG,KAAKmgE,QAAQtzD,IAAI,kBAAmB7M,KAAKspG,oBACzCtpG,KAAKmgE,QAAQtzD,IAAI,iBAAkB7M,KAAKupG,mBACxCvpG,KAAKmgE,QAAQtzD,IAAI,aAAc7M,KAAKwpG,eACpCxpG,KAAKmgE,QAAQtzD,IAAI,oBAAqB7M,KAAKypG,sBAC3CzpG,KAAKmgE,QAAQtzD,IAAI,mBAAoB7M,KAAK0pG,qBAC1C1pG,KAAKmgE,QAAQtzD,IAAI,mBAAoB7M,KAAK2pG,qBAC1C3pG,KAAKmgE,QAAQtzD,IAAI,mBAAoB7M,KAAK4pG,qBAC1C5pG,KAAKmgE,QAAQtzD,IAAI,kBAAmB7M,KAAK6pG,iBACzC7pG,KAAKmgE,QAAQtzD,IAAI,kBAAmB7M,KAAK8pG,oBACzC9pG,KAAKmgE,QAAQtzD,IAAI,mBAAoB7M,KAAK+pG,qBAE1C,IAAI9oE,EAAYjhC,KAAKmgE,QAAQr1D,eAC7Bm2B,EAAUp0B,IAAI,eAAgB7M,KAAK6pG,iBACnC5oE,EAAUp0B,IAAI,kBAAmB7M,KAAKgqG,mBAC1C,CAEAhqG,KAAKmgE,QAAUA,EACXA,GACAngE,KAAKmpG,kBAAoBnpG,KAAKiqG,iBAAiBt+F,KAAK3L,MACpDmgE,EAAQ5/D,GAAG,SAAUP,KAAKmpG,mBAC1BnpG,KAAK0gE,SAASmnC,WAAW1nC,GAEzBngE,KAAK44F,cAAgB54F,KAAKkqG,aAAav+F,KAAK3L,MAC5CmgE,EAAQ5/D,GAAG,aAAcP,KAAK44F,eAE9B54F,KAAKopG,mBAAqBppG,KAAKmqG,kBAAkBx+F,KAAK3L,MACtDmgE,EAAQ5/D,GAAG,kBAAmBP,KAAKopG,oBAEnCppG,KAAKqpG,iBAAmBrpG,KAAK0gE,SAAS0pC,gBAAgBz+F,KAAK3L,KAAK0gE,UAChEP,EAAQ5/D,GAAG,gBAAiBP,KAAKqpG,kBAEjCrpG,KAAKspG,mBAAqBtpG,KAAKqqG,kBAAkB1+F,KAAK3L,MACtDmgE,EAAQ5/D,GAAG,kBAAmBP,KAAKspG,oBAEnCtpG,KAAKupG,kBAAoBvpG,KAAKsqG,iBAAiB3+F,KAAK3L,MACpDmgE,EAAQ5/D,GAAG,iBAAkBP,KAAKupG,mBAElCvpG,KAAKwpG,cAAgBxpG,KAAKy0F,aAAa9oF,KAAK3L,MAC5CmgE,EAAQ5/D,GAAG,aAAcP,KAAKwpG,eAE9BxpG,KAAKypG,qBAAuBzpG,KAAKuqG,oBAAoB5+F,KAAK3L,MAC1DA,KAAKmgE,QAAQ5/D,GAAG,oBAAqBP,KAAKypG,sBAE1CzpG,KAAK0pG,oBAAsB1pG,KAAKwqG,mBAAmB7+F,KAAK3L,MACxDA,KAAKmgE,QAAQ5/D,GAAG,mBAAoBP,KAAK0pG,qBAEzC1pG,KAAK2pG,oBAAsB3pG,KAAKyqG,mBAAmB9+F,KAAK3L,MACxDA,KAAKmgE,QAAQ5/D,GAAG,mBAAoBP,KAAK2pG,qBAEzC3pG,KAAK4pG,oBAAsB5pG,KAAK0qG,mBAAmB/+F,KAAK3L,MACxDA,KAAKmgE,QAAQ5/D,GAAG,mBAAoBP,KAAK4pG,qBAEzC5pG,KAAK6pG,gBAAkB7pG,KAAK2qG,eAAeh/F,KAAK3L,MAChDA,KAAKmgE,QAAQ5/D,GAAG,kBAAmBP,KAAK6pG,iBAExC7pG,KAAK8pG,mBAAqB9pG,KAAK4qG,kBAAkBj/F,KAAK3L,MACtDA,KAAKmgE,QAAQ5/D,GAAG,kBAAmBP,KAAK8pG,oBAExC9pG,KAAK+pG,oBAAsB/pG,KAAK6qG,mBAAmBl/F,KAAK3L,MACxDA,KAAKmgE,QAAQ5/D,GAAG,mBAAoBP,KAAK+pG,qBAEzC/pG,KAAKihC,UAAYk/B,EAAQr1D,eACzB9K,KAAKihC,UAAU1gC,GAAG,eAAgBP,KAAK6pG,iBAEvC7pG,KAAKgqG,mBAAqBhqG,KAAK8qG,kBAAkBn/F,KAAK3L,MACtDA,KAAKihC,UAAU1gC,GAAG,kBAAmBP,KAAKgqG,oBAE1ChqG,KAAKkqG,eAELlqG,KAAK6oD,iBAAmB,EACxB7oD,KAAK2qG,iBACL3qG,KAAK6oD,iBAAmB,EAExB7oD,KAAK4qG,oBACL5qG,KAAK6qG,qBACL7qG,KAAK8qG,oBACL9qG,KAAKuqG,sBACLvqG,KAAKwqG,qBACLxqG,KAAKyqG,qBACLzqG,KAAK0qG,qBACL1qG,KAAKmgE,QAAQi8B,kBAAoBp8F,KAAK0gE,SAAS47B,kBAC/Ct8F,KAAK0gE,SAASqqC,eAEd/qG,KAAKihC,UAAY,KACjBjhC,KAAK0gE,SAASmnC,WAAW1nC,IAG7BngE,KAAKuuE,QAAQ,gBAAiB,CAC1BpO,QAASA,EACT+oC,WAAYA,IAGhBlpG,KAAKkoG,MAAQ,KAEbgB,GAAcA,EAAW36B,QAAQ,eAAgB,CAACy8B,UAAWhrG,OAC7DmgE,GAAWA,EAAQoO,QAAQ,eAAgB,CAACjsE,OAAQtC,MAzG1C,CA0Gd,EACAA,KAAKipD,WAAa,WACd,OAAOjpD,KAAKmgE,OAChB,EACAngE,KAAK66C,SAAW,SAAS74C,EAAKipG,GAU1B,OATAjrG,KAAKmgE,QAAQpP,IAAIlW,SAAS74C,GAErBipG,EAEiB,GAAbA,EACLjrG,KAAK8kG,mBACc,GAAdmG,GACLjrG,KAAK2kG,oBAJL3kG,KAAK++D,YAMF/8D,CACX,EACAhC,KAAKyiC,SAAW,WACZ,OAAOziC,KAAKmgE,QAAQ19B,UACxB,EACAziC,KAAK8K,aAAe,WAChB,OAAO9K,KAAKihC,SAChB,EACAjhC,KAAKwpD,OAAS,SAASC,GACnBzpD,KAAK0gE,SAASwqC,SAASzhD,EAC3B,EACAzpD,KAAK8oD,SAAW,SAASV,EAAO6W,GAC5Bj/D,KAAK0gE,SAAS5X,SAASV,EAAO6W,EAClC,EACAj/D,KAAKmrG,SAAW,WACZ,OAAOnrG,KAAK0gE,SAASyqC,UACzB,EACAnrG,KAAKmkE,SAAW,SAASz9D,GACrB1G,KAAK0gE,SAASyD,SAASz9D,EAC3B,EACA1G,KAAK+kE,WAAa,SAASr+D,GACvB1G,KAAK0gE,SAASqE,WAAWr+D,EAC7B,EACA1G,KAAKorG,YAAc,WACf,OAAOprG,KAAKqvE,UAAU,aACnBtuC,EAAIqxB,cAAcpyD,KAAKqH,UAAW,WACzC,EACArH,KAAKgpD,YAAc,SAAS0yC,GACxB17F,KAAKkvE,UAAU,WAAYwsB,EAC/B,EAEA17F,KAAKqrG,mBAAqB,WAMtB,GALIrrG,KAAKmgE,QAAQmrC,oBACbtrG,KAAKmgE,QAAQ+K,aAAalrE,KAAKmgE,QAAQmrC,mBACvCtrG,KAAKmgE,QAAQmrC,kBAAoB,OAGjCtrG,KAAKurG,kBAAT,CAGA,IAAI1oG,EAAO7C,KACXA,KAAKurG,mBAAoB,EACzBt7E,YAAW,WACPptB,EAAK0oG,mBAAoB,EACzB,IAAIprC,EAAUt9D,EAAKs9D,QACnB,GAAKA,GAAYA,EAAQu0B,YAAzB,CACA,IAAIrpE,EAAM80C,EAAQ4xB,oBAAoBlvF,EAAK2oG,qBAC3C,GAAIngF,EACA,IAAImZ,EAAQ,IAAIixC,EAAMpqD,EAAI03C,IAAK13C,EAAI23C,OAAQ33C,EAAI03C,IAAK13C,EAAI23C,OAAS,QAC9D,GAAI7C,EAAQs2B,MAAMgV,YACjBjnE,EAAQ27B,EAAQs2B,MAAMgV,YAAY5oG,EAAKs9D,SAE3C37B,IACA27B,EAAQmrC,kBAAoBnrC,EAAQwK,UAAUnmC,EAAO,cAAe,QAR5B,CAShD,GAAG,GAfH,CAgBJ,EACAxkC,KAAK0rG,eAAiB,WAClB,IAAI1rG,KAAK2rG,qBAAT,CAEA,IAAI9oG,EAAO7C,KACXA,KAAK2rG,sBAAuB,EAC5B17E,YAAW,WACPptB,EAAK8oG,sBAAuB,EAE5B,IAAIxrC,EAAUt9D,EAAKs9D,QACnB,GAAKA,GAAYA,EAAQu0B,YAAzB,CAEA,IAAIrpE,EAAMxoB,EAAK2oG,oBACXzjG,EAAW,IAAIm7E,EAAcrgF,EAAKs9D,QAAS90C,EAAI03C,IAAK13C,EAAI23C,QACxDhvB,EAAQjsC,EAAS+7E,kBAErB,IAAK9vC,IAAU,0BAA0Bl/B,KAAKk/B,EAAMvyC,MAGhD,OAFA0+D,EAAQ+K,aAAa/K,EAAQyrC,oBAC7BzrC,EAAQyrC,cAAgB,MAI5B,IAAuC,GAAnC53D,EAAMvyC,KAAKoQ,QAAQ,cACnBmiC,EAAQjsC,EAAS67E,cACZ5vC,GAFT,CAMA,IAAIkd,EAAMld,EAAM9yC,MACZgxF,EAAQ,EACR2Z,EAAY9jG,EAAS47E,eAEzB,GAAuB,KAAnBkoB,EAAU3qG,MACV,GACI2qG,EAAY73D,EACZA,EAAQjsC,EAAS67E,cAEb5vC,GAASA,EAAM9yC,QAAUgwD,IAA2C,IAApCld,EAAMvyC,KAAKoQ,QAAQ,cAC3B,MAApBg6F,EAAU3qG,MACVgxF,IAC2B,OAApB2Z,EAAU3qG,OACjBgxF,WAIHl+C,GAASk+C,GAAS,OACxB,CACH,GACIl+C,EAAQ63D,EACRA,EAAY9jG,EAAS47E,eAEjB3vC,GAASA,EAAM9yC,QAAUgwD,IAA2C,IAApCld,EAAMvyC,KAAKoQ,QAAQ,cAC3B,MAApBg6F,EAAU3qG,MACVgxF,IAC2B,OAApB2Z,EAAU3qG,OACjBgxF,WAGH2Z,GAAa3Z,GAAS,GAC/BnqF,EAAS67E,aACb,CAEA,IAAK5vC,EAGD,OAFAmsB,EAAQ+K,aAAa/K,EAAQyrC,oBAC7BzrC,EAAQyrC,cAAgB,MAI5B,IAAI7oC,EAAMh7D,EAASg8E,qBACf/gB,EAASj7D,EAASi8E,wBAClBx/C,EAAQ,IAAIixC,EAAM1S,EAAKC,EAAQD,EAAKC,EAAOhvB,EAAM9yC,MAAMwG,QACvDy4D,EAAQyrC,eAAyF,IAAxEpnE,EAAMuxC,aAAa5V,EAAQm0B,aAAan0B,EAAQyrC,eAAepnE,SACxF27B,EAAQ+K,aAAa/K,EAAQyrC,eAC7BzrC,EAAQyrC,cAAgB,MAGxBpnE,IAAU27B,EAAQyrC,gBAClBzrC,EAAQyrC,cAAgBzrC,EAAQwK,UAAUnmC,EAAO,cAAe,QAnDpE,CAhB4C,CAoEhD,GAAG,GA3EO,CA4Ed,EACAxkC,KAAK6K,MAAQ,WACT,IAAI3K,EAAQF,KACZiwB,YAAW,WACP/vB,EAAMuhE,UAAU52D,OACpB,IACA7K,KAAKyhE,UAAU52D,OACnB,EACA7K,KAAKq9D,UAAY,WACb,OAAOr9D,KAAKyhE,UAAUpE,WAC1B,EACAr9D,KAAKwiC,KAAO,WACRxiC,KAAKyhE,UAAUj/B,MACnB,EACAxiC,KAAKw9D,QAAU,SAASr6D,GAChBnD,KAAK8rG,aAET9rG,KAAK8rG,YAAa,EAClB9rG,KAAK0gE,SAASqrC,aACd/rG,KAAK0gE,SAASsrC,iBACdhsG,KAAKihE,MAAM,QAAS99D,GACxB,EACAnD,KAAKu9D,OAAS,SAASp6D,GACdnD,KAAK8rG,aAEV9rG,KAAK8rG,YAAa,EAClB9rG,KAAK0gE,SAASurC,aACdjsG,KAAK0gE,SAASwrC,gBACdlsG,KAAKihE,MAAM,OAAQ99D,GACvB,EAEAnD,KAAKmsG,cAAgB,WACjBnsG,KAAK0gE,SAAS0rC,cAClB,EACApsG,KAAKiqG,iBAAmB,SAASjjF,GAC7B,IAAI4P,EAAO52B,KAAKmgE,QAAQqwB,aACpB7Z,EAAW3vD,EAAMkhB,MAAM66B,KAAO/7C,EAAMmhB,IAAI46B,IAAM/7C,EAAMmhB,IAAI46B,IAAM5pD,IAClEnZ,KAAK0gE,SAAS2rC,YAAYrlF,EAAMkhB,MAAM66B,IAAK4T,EAAS//C,GAEpD52B,KAAKuuE,QAAQ,SAAUvnD,GACvBhnB,KAAKmsG,gBACLnsG,KAAKssG,4BACT,EAEAtsG,KAAKmqG,kBAAoB,SAAShnG,GAC9B,IAAIy4E,EAAOz4E,EAAEd,KACbrC,KAAK0gE,SAAS2rC,YAAYzwB,EAAKjzC,MAAOizC,EAAKr3D,KAC/C,EAGAvkB,KAAK4qG,kBAAoB,WACrB5qG,KAAK0gE,SAAS6rC,UAAUvsG,KAAKmgE,QAAQo5B,eACzC,EAEAv5F,KAAK6qG,mBAAqB,WACtB7qG,KAAK0gE,SAAS8rC,UAAUxsG,KAAKmgE,QAAQu5B,gBACzC,EACA15F,KAAK2qG,eAAiB,WAClB3qG,KAAKmsG,gBAEAnsG,KAAK6oD,kBACN55C,EAAOX,KAAK,kEACR,4CACA,iEAEJtO,KAAK0gE,SAAS6D,wBAGlBvkE,KAAKqrG,qBACLrrG,KAAK0rG,iBACL1rG,KAAKssG,6BACLtsG,KAAKuuE,QAAQ,kBACjB,EAEAvuE,KAAKssG,2BAA6B,WAC9B,IAEI7hE,EAFA01B,EAAUngE,KAAKipD,aAUnB,GAPIjpD,KAAKysG,uBACwB,QAAxBzsG,KAAK0sG,iBAA8B1sG,KAAKihC,UAAUokC,gBACnD56B,EAAYzqC,KAAKwrG,sBACjBxrG,KAAK0gE,SAASisC,WAA0C,IAA7B3sG,KAAKmgE,QAAQmH,aAAuBtnE,KAAK0gE,SAASksC,UAAY,IACzFniE,GAAY,IAGhB01B,EAAQ0sC,uBAAyBpiE,EACjC01B,EAAQ+K,aAAa/K,EAAQ0sC,qBAAqBh8F,IAClDsvD,EAAQ0sC,qBAAuB,UAC5B,IAAK1sC,EAAQ0sC,sBAAwBpiE,EAAW,CACnD,IAAIjG,EAAQ,IAAIixC,EAAMhrC,EAAUs4B,IAAKt4B,EAAUu4B,OAAQv4B,EAAUs4B,IAAK5pD,KACtEqrB,EAAM3zB,GAAKsvD,EAAQwK,UAAUnmC,EAAO,kBAAmB,cACvD27B,EAAQ0sC,qBAAuBroE,CACnC,MAAWiG,IACP01B,EAAQ0sC,qBAAqB3kE,MAAM66B,IAAMt4B,EAAUs4B,IACnD5C,EAAQ0sC,qBAAqB1kE,IAAI46B,IAAMt4B,EAAUs4B,IACjD5C,EAAQ0sC,qBAAqB3kE,MAAM86B,OAASv4B,EAAUu4B,OACtD7C,EAAQoO,QAAQ,oBAExB,EAEAvuE,KAAK8qG,kBAAoB,SAAS3nG,GAC9B,IAAIg9D,EAAUngE,KAAKmgE,QAOnB,GALIA,EAAQ2sC,kBACR3sC,EAAQ+K,aAAa/K,EAAQ2sC,kBAEjC3sC,EAAQ2sC,iBAAmB,KAEtB9sG,KAAKihC,UAAU6d,UAKhB9+C,KAAKssG,iCALsB,CAC3B,IAAI9nE,EAAQxkC,KAAKihC,UAAUq/B,WACvB55D,EAAQ1G,KAAK4qE,oBACjBzK,EAAQ2sC,iBAAmB3sC,EAAQwK,UAAUnmC,EAAO,gBAAiB99B,EACzE,CAIA,IAAI4pC,EAAKtwC,KAAK+sG,wBAA0B/sG,KAAKgtG,+BAC7ChtG,KAAKmgE,QAAQ11B,UAAU6F,GAEvBtwC,KAAKuuE,QAAQ,kBACjB,EAEAvuE,KAAKgtG,6BAA+B,WAChC,IAAI7sC,EAAUngE,KAAKmgE,QAEfl/B,EAAYjhC,KAAKsjE,oBACrB,IAAIriC,EAAU6d,YAAa7d,EAAUokC,cAArC,CAGA,IAAI4nC,EAAahsE,EAAUiH,MAAM86B,OAAS,EACtCkqC,EAAWjsE,EAAUkH,IAAI66B,OAAS,EAClCvuB,EAAO0rB,EAAQ8T,QAAQhzC,EAAUiH,MAAM66B,KACvCoqC,EAAW14D,EAAK/sC,OAChBo5F,EAASrsD,EAAKxD,UAAUprB,KAAKkf,IAAIkoE,EAAY,GACrBpnF,KAAKif,IAAIooE,EAAUC,IAC/C,KAAKF,GAAc,GAAK,UAAUn4F,KAAKgsF,IAClCoM,GAAYC,GAAY,UAAUr4F,KAAKgsF,MAG5CA,EAASrsD,EAAKxD,UAAUhQ,EAAUiH,MAAM86B,OAAQ/hC,EAAUkH,IAAI66B,QACzD,YAAYluD,KAAKgsF,IAAtB,CAGA,IAAIxwD,EAAKtwC,KAAKynG,QAAQ1G,gBAAgB,CAClCW,WAAW,EACXE,eAAe,EACfd,OAAQA,IAGZ,OAAOxwD,CARG,CAdA,CAuBd,EAGAtwC,KAAKuqG,oBAAsB,WACvBvqG,KAAK0gE,SAAS0sC,oBAClB,EAEAptG,KAAKwqG,mBAAqB,WACtBxqG,KAAK0gE,SAAS2sC,mBAClB,EAGArtG,KAAKyqG,mBAAqB,WACtBzqG,KAAK0gE,SAAS4sC,mBAClB,EAEAttG,KAAK0qG,mBAAqB,WACtB1qG,KAAK0gE,SAASs3B,eAAeh4F,KAAKmgE,QAAQ+3B,iBAC9C,EAGAl4F,KAAKkqG,aAAe,SAAS/mG,GACzBnD,KAAK0gE,SAAS6sC,aACdvtG,KAAKihE,MAAM,aAAc99D,EAC7B,EAGAnD,KAAKqqG,kBAAoB,WACrBrqG,KAAK0gE,SAASqqC,YAClB,EAEA/qG,KAAKsqG,iBAAmB,WACpBtqG,KAAK0gE,SAASwqC,UAAS,EAC3B,EAGAlrG,KAAKy0F,aAAe,WAChBz0F,KAAKssG,6BACLtsG,KAAK0gE,SAASqqC,YAClB,EACA/qG,KAAKwtG,gBAAkB,WACnB,OAAOxtG,KAAKmgE,QAAQwL,aAAa3rE,KAAKsjE,oBAC1C,EACAtjE,KAAK6/D,YAAc,WACf,IAAIx3D,EAAOrI,KAAKwtG,kBAEhB,OADAxtG,KAAKuuE,QAAQ,OAAQlmE,GACdA,CACX,EACArI,KAAK+/D,OAAS,WACV//D,KAAKqpD,SAASxnC,KAAK,OAAQ7hB,KAC/B,EACAA,KAAK8/D,MAAQ,WACT9/D,KAAKqpD,SAASxnC,KAAK,MAAO7hB,KAC9B,EACAA,KAAKo/D,QAAU,SAAS/2D,EAAMg9B,GAC1B,IAAIliC,EAAI,CAACkF,KAAMA,EAAMg9B,MAAOA,GAC5BrlC,KAAKqpD,SAASxnC,KAAK,QAAS7hB,KAAMmD,EACtC,EAEAnD,KAAK6lG,aAAe,SAAS1iG,GACT,iBAALA,IACPA,EAAI,CAACkF,KAAMlF,IACfnD,KAAKuuE,QAAQ,QAASprE,GACtB,IAAIkF,EAAOlF,EAAEkF,KACb,IAAKrI,KAAK0jE,mBAAqB1jE,KAAKytG,uBAChCztG,KAAKwtD,OAAOnlD,OACT,CACH,IAAI+sC,EAAQ/sC,EAAK6V,MAAM,cACnBk+D,EAASp8E,KAAKihC,UAAUs7C,UAAUH,OAEtC,GAAIhnC,EAAM1tC,OAAS00E,EAAO10E,QAAU0tC,EAAM1tC,OAAS,IAAM0tC,EAAM,GAC3D,OAAOp1C,KAAKqpD,SAASxnC,KAAK,eAAgB7hB,KAAMqI,GAEpD,IAAK,IAAItC,EAAIq2E,EAAO10E,OAAQ3B,KAAM,CAC9B,IAAIy+B,EAAQ43C,EAAOr2E,GACdy+B,EAAMsa,WACP9+C,KAAKmgE,QAAQ54D,OAAOi9B,GAExBxkC,KAAKmgE,QAAQ3S,OAAOhpB,EAAM0D,MAAOkN,EAAMrvC,GAC3C,CACJ,CACJ,EAEA/F,KAAKoG,YAAc,SAASgvE,EAAS1/C,GACjC,OAAO11B,KAAKqpD,SAASxnC,KAAKuzD,EAASp1E,KAAM01B,EAC7C,EACA11B,KAAKwtD,OAAS,SAASnlD,EAAM40D,GACzB,IAAIkD,EAAUngE,KAAKmgE,QACfx+D,EAAOw+D,EAAQ18D,UACf68C,EAAStgD,KAAKwrG,oBAElB,GAAIxrG,KAAK0tG,yBAA2BzwC,EAAQ,CACxC,IAAI0wC,EAAYhsG,EAAKulF,gBAAgB/mB,EAAQqsB,SAASlsC,EAAOyiB,KAAM,YAAa/iE,KAAMmgE,EAAS93D,GAC3FslG,IACItlG,IAASslG,EAAUtlG,OACnBrI,KAAKmgE,QAAQk2B,iBAAkB,EAC/Br2F,KAAK4tG,mBAAoB,GAE7BvlG,EAAOslG,EAAUtlG,KAGzB,CAIA,GAFY,MAARA,IACAA,EAAOrI,KAAKmgE,QAAQo2B,gBACnBv2F,KAAKihC,UAAU6d,WAKf,GAAI9+C,KAAKmgE,QAAQ42B,eAAgB,CAC9BvyD,EAAQ,IAAIixC,EAAMmB,WAAWt2B,EAAQA,GACzC9b,EAAM2D,IAAI66B,QAAU36D,EAAKX,OACzB1H,KAAKmgE,QAAQ54D,OAAOi9B,EACxB,MAT+B,CAC3B,IAAIA,EAAQxkC,KAAKsjE,oBACjBhjB,EAAStgD,KAAKmgE,QAAQ54D,OAAOi9B,GAC7BxkC,KAAK4K,gBACT,CAOA,GAAY,MAARvC,GAAwB,QAARA,EAAgB,CAChC,IAAIosC,EAAO0rB,EAAQ8T,QAAQ3zB,EAAOyiB,KAClC,GAAIziB,EAAO0iB,OAASvuB,EAAK/0B,OAAO,QAAS,CACrC,IAAI7Z,EAAI4uC,EAAKzyB,OAAOs+B,EAAO0iB,QAAQtjD,OAAO,QAC1CygD,EAAQpP,IAAIq0B,aAAa9kC,EAAOyiB,IAAKziB,EAAO0iB,OAAQ1iB,EAAO0iB,OAASn9D,EACxE,CACJ,CACA7F,KAAK4K,iBAEL,IAAIs9B,EAAQoY,EAAO0iB,OACf6qC,EAAY1tC,EAAQqsB,SAASlsC,EAAOyiB,KAEpC+qC,GADAr5D,EAAO0rB,EAAQ8T,QAAQ3zB,EAAOyiB,KACdphE,EAAK6kF,aAAaqnB,EAAWp5D,EAAMpsC,IAC7C83D,EAAQ3S,OAAOlN,EAAQj4C,GAgBjC,GAdIslG,GAAaA,EAAU1sE,YACW,GAA9B0sE,EAAU1sE,UAAUv5B,OACpB1H,KAAKihC,UAAU50B,kBACX,IAAIopE,EAAMn1B,EAAOyiB,IAAK76B,EAAQylE,EAAU1sE,UAAU,GACxCqf,EAAOyiB,IAAK76B,EAAQylE,EAAU1sE,UAAU,KAEtDjhC,KAAKihC,UAAU50B,kBACX,IAAIopE,EAAMn1B,EAAOyiB,IAAM4qC,EAAU1sE,UAAU,GACjC0sE,EAAU1sE,UAAU,GACpBqf,EAAOyiB,IAAM4qC,EAAU1sE,UAAU,GACjC0sE,EAAU1sE,UAAU,MAItCk/B,EAAQiX,cAAcyS,UAAUxhF,GAAO,CACvC,IAAI0lG,EAAapsG,EAAK0kF,kBAAkBwnB,EAAWp5D,EAAK1nC,MAAM,EAAGuzC,EAAO0iB,QAAS7C,EAAQo2B,gBAEzFp2B,EAAQ3S,OAAO,CAACuV,IAAKziB,EAAOyiB,IAAI,EAAGC,OAAQ,GAAI+qC,EACnD,CACID,GACAnsG,EAAK8kF,YAAYonB,EAAW1tC,EAAS7f,EAAOyiB,IACpD,EAEA/iE,KAAKq/D,YAAc,SAASh3D,GACxBrI,KAAKunG,WAAWloC,YAAYh3D,EAChC,EAEArI,KAAKggE,aAAe,SAAS78D,EAAGs2D,EAAQlwB,GACpCvpC,KAAKunG,WAAWvnC,aAAa78D,EAAGs2D,EAAQlwB,EAC5C,EACAvpC,KAAK62F,aAAe,SAASC,GACzB92F,KAAKmgE,QAAQ02B,aAAaC,EAC9B,EACA92F,KAAK+2F,aAAe,WAChB,OAAO/2F,KAAKmgE,QAAQ42B,cACxB,EACA/2F,KAAKg3F,gBAAkB,WACnBh3F,KAAKmgE,QAAQ62B,iBACjB,EACAh3F,KAAKguG,eAAiB,SAASpoC,GAC3B5lE,KAAKkvE,UAAU,cAAetJ,EAClC,EACA5lE,KAAKiuG,eAAiB,WAClB,OAAOjuG,KAAKqvE,UAAU,cAC1B,EACArvE,KAAKkuG,aAAe,SAAS96B,GACzBpzE,KAAKkvE,UAAU,YAAakE,EAChC,EACApzE,KAAK2sE,aAAe,WAChB,OAAO3sE,KAAKqvE,UAAU,YAC1B,EACArvE,KAAKmuG,kBAAoB,SAASnsG,GAC9BhC,KAAKkvE,UAAU,iBAAkBltE,EACrC,EACAhC,KAAK4qE,kBAAoB,WACrB,OAAO5qE,KAAKqvE,UAAU,iBAC1B,EACArvE,KAAKouG,uBAAyB,SAASC,GACnCruG,KAAKkvE,UAAU,sBAAuBm/B,EAC1C,EACAruG,KAAKsuG,uBAAyB,WAC1B,OAAOtuG,KAAKqvE,UAAU,sBAC1B,EACArvE,KAAKuuG,uBAAyB,SAASF,GACnCruG,KAAKkvE,UAAU,sBAAuBm/B,EAC1C,EAEAruG,KAAKwuG,uBAAyB,WAC1B,OAAOxuG,KAAKqvE,UAAU,sBAC1B,EACArvE,KAAKyuG,yBAA2B,SAASJ,GACrCruG,KAAKkvE,UAAU,wBAAyBm/B,EAC5C,EACAruG,KAAK0uG,yBAA2B,WAC5B,OAAO1uG,KAAK+sG,sBAChB,EAEA/sG,KAAK2uG,kBAAoB,SAASC,GAC9B5uG,KAAK0gE,SAASiuC,kBAAkBC,EACpC,EAEA5uG,KAAK6uG,kBAAoB,WACrB,OAAO7uG,KAAK0gE,SAASmuC,mBACzB,EACA7uG,KAAK8uG,kBAAoB,SAASC,GAC9B/uG,KAAK0gE,SAASouC,kBAAkBC,EACpC,EACA/uG,KAAKgvG,kBAAoB,WACrB,OAAOhvG,KAAK0gE,SAASsuC,mBACzB,EAEAhvG,KAAKivG,uBAAyB,SAAS70D,GACnCp6C,KAAK0gE,SAASuuC,uBAAuB70D,EACzC,EAEAp6C,KAAKkvG,uBAAyB,WAC1B,OAAOlvG,KAAK0gE,SAASwuC,wBACzB,EACAlvG,KAAK+oD,mBAAqB,SAASomD,GAC/BnvG,KAAK0gE,SAAS3X,mBAAmBomD,EACrC,EACAnvG,KAAKovG,mBAAqB,WACtB,OAAOpvG,KAAK0gE,SAAS0uC,oBACzB,EACApvG,KAAKqvG,qBAAuB,SAASF,GACjCnvG,KAAK0gE,SAAS2uC,qBAAqBF,EACvC,EACAnvG,KAAKsvG,qBAAuB,WACxB,OAAOtvG,KAAK0gE,SAAS4uC,sBACzB,EACAtvG,KAAK8gE,YAAc,SAASC,GACxB/gE,KAAKkvE,UAAU,WAAYnO,EAC/B,EACA/gE,KAAKorE,YAAc,WACf,OAAOprE,KAAKqvE,UAAU,WAC1B,EACArvE,KAAKuvG,qBAAuB,SAAUC,GAClCxvG,KAAKkvE,UAAU,oBAAqBsgC,EACxC,EACAxvG,KAAK0tG,qBAAuB,WACxB,OAAO1tG,KAAKqvE,UAAU,oBAC1B,EACArvE,KAAKyvG,yBAA2B,SAAUD,GACtCxvG,KAAKkvE,UAAU,wBAAyBsgC,EAC5C,EACAxvG,KAAK0vG,yBAA2B,WAC5B,OAAO1vG,KAAKqvE,UAAU,wBAC1B,EACArvE,KAAK2vG,mBAAqB,SAASplE,GAC/BvqC,KAAKkvE,UAAU,kBAAmB3kC,EAEtC,EACAvqC,KAAK4vG,mBAAqB,WACtB,OAAO5vG,KAAKqvE,UAAU,kBAC1B,EAEArvE,KAAK6vG,mBAAqB,SAASC,GAC/B9vG,KAAKkvE,UAAU,kBAAmB4gC,EACtC,EAEA9vG,KAAK+vG,mBAAqB,WACtB,OAAO/vG,KAAKqvE,UAAU,kBAC1B,EACArvE,KAAKuH,OAAS,SAAS0qF,GACfjyF,KAAKihC,UAAU6d,YACJ,QAAPmzC,EACAjyF,KAAKihC,UAAU23C,aAEf54E,KAAKihC,UAAUy3C,eAGvB,IAAIl0C,EAAQxkC,KAAKsjE,oBACjB,GAAItjE,KAAK0tG,uBAAwB,CAC7B,IAAIvtC,EAAUngE,KAAKmgE,QACfhsB,EAAQgsB,EAAQqsB,SAAShoD,EAAM0D,MAAM66B,KACrCitC,EAAY7vC,EAAQ18D,UAAUyjF,gBAAgB/yC,EAAO,WAAYn0C,KAAMmgE,EAAS37B,GAEpF,GAAyB,IAArBA,EAAM2D,IAAI66B,OAAc,CACxB,IAAI36D,EAAO83D,EAAQwL,aAAannC,GAChC,GAA6B,MAAzBn8B,EAAKA,EAAKX,OAAS,GAAY,CAC/B,IAAI+sC,EAAO0rB,EAAQ8T,QAAQzvC,EAAM2D,IAAI46B,KACjC,QAAQjuD,KAAK2/B,KACbjQ,EAAM2D,IAAI66B,OAASvuB,EAAK/sC,OAEhC,CACJ,CACIsoG,IACAxrE,EAAQwrE,EAChB,CAEAhwG,KAAKmgE,QAAQ54D,OAAOi9B,GACpBxkC,KAAK4K,gBACT,EACA5K,KAAKsmG,gBAAkB,WACftmG,KAAKihC,UAAU6d,WACf9+C,KAAKihC,UAAUq4C,kBAEnBt5E,KAAKmgE,QAAQ54D,OAAOvH,KAAKsjE,qBACzBtjE,KAAK4K,gBACT,EACA5K,KAAKqmG,eAAiB,WACdrmG,KAAKihC,UAAU6d,WACf9+C,KAAKihC,UAAUu4C,iBAEnBx5E,KAAKmgE,QAAQ54D,OAAOvH,KAAKsjE,qBACzBtjE,KAAK4K,gBACT,EACA5K,KAAKmmG,kBAAoB,WACjBnmG,KAAKihC,UAAU6d,WACf9+C,KAAKihC,UAAU63C,kBAEnB94E,KAAKmgE,QAAQ54D,OAAOvH,KAAKsjE,qBACzBtjE,KAAK4K,gBACT,EACA5K,KAAKomG,gBAAkB,WACfpmG,KAAKihC,UAAU6d,WACf9+C,KAAKihC,UAAU+3C,gBAEnB,IAAIx0C,EAAQxkC,KAAKsjE,oBACb9+B,EAAM0D,MAAM86B,QAAUx+B,EAAM2D,IAAI66B,QAAUx+B,EAAM0D,MAAM66B,KAAOv+B,EAAM2D,IAAI46B,MACvEv+B,EAAM2D,IAAI66B,OAAS,EACnBx+B,EAAM2D,IAAI46B,OAGd/iE,KAAKmgE,QAAQ54D,OAAOi9B,GACpBxkC,KAAK4K,gBACT,EACA5K,KAAKymG,UAAY,WACRzmG,KAAKihC,UAAU6d,YAChB9+C,KAAKmgE,QAAQ54D,OAAOvH,KAAKsjE,qBACzBtjE,KAAK4K,kBAGT,IAAI01C,EAAStgD,KAAKwrG,oBAClBxrG,KAAKwtD,OAAO,MACZxtD,KAAK4pE,qBAAqBtpB,EAC9B,EACAtgD,KAAK0mG,iBAAmB,WACpB,GAAK1mG,KAAKihC,UAAU6d,UAApB,CAIA,IAAIwB,EAAStgD,KAAKwrG,oBACdxoC,EAAS1iB,EAAO0iB,OACpB,GAAe,IAAXA,EAAJ,CAGA,IACIitC,EAAMzrE,EADNiQ,EAAOz0C,KAAKmgE,QAAQ8T,QAAQ3zB,EAAOyiB,KAEnCC,EAASvuB,EAAK/sC,QACduoG,EAAOx7D,EAAK9wB,OAAOq/C,GAAUvuB,EAAK9wB,OAAOq/C,EAAO,GAChDx+B,EAAQ,IAAIixC,EAAMn1B,EAAOyiB,IAAKC,EAAO,EAAG1iB,EAAOyiB,IAAKC,EAAO,KAG3DitC,EAAOx7D,EAAK9wB,OAAOq/C,EAAO,GAAKvuB,EAAK9wB,OAAOq/C,EAAO,GAClDx+B,EAAQ,IAAIixC,EAAMn1B,EAAOyiB,IAAKC,EAAO,EAAG1iB,EAAOyiB,IAAKC,IAExDhjE,KAAKmgE,QAAQlhD,QAAQulB,EAAOyrE,EAZlB,CALV,CAkBJ,EACAjwG,KAAK+hB,YAAc,WACf,IAAImuF,EAAgBlwG,KAAKsjE,oBACrBtjE,KAAKihC,UAAU6d,WACf9+C,KAAKihC,UAAUy4C,aAGnB,IAAIl1C,EAAQxkC,KAAKsjE,oBACbj7D,EAAOrI,KAAKmgE,QAAQwL,aAAannC,GACrCxkC,KAAKmgE,QAAQlhD,QAAQulB,EAAOn8B,EAAK0Z,eACjC/hB,KAAKihC,UAAU50B,kBAAkB6jG,EACrC,EACAlwG,KAAKqxE,YAAc,WACf,IAAI6+B,EAAgBlwG,KAAKsjE,oBACrBtjE,KAAKihC,UAAU6d,WACf9+C,KAAKihC,UAAUy4C,aAGnB,IAAIl1C,EAAQxkC,KAAKsjE,oBACbj7D,EAAOrI,KAAKmgE,QAAQwL,aAAannC,GACrCxkC,KAAKmgE,QAAQlhD,QAAQulB,EAAOn8B,EAAKgpE,eACjCrxE,KAAKihC,UAAU50B,kBAAkB6jG,EACrC,EACAlwG,KAAKotB,OAAS,WACV,IAAI+yC,EAAUngE,KAAKmgE,QACf37B,EAAQxkC,KAAKsjE,oBAEjB,KAAI9+B,EAAM0D,MAAM66B,IAAMv+B,EAAM2D,IAAI46B,KAAhC,CAIO,GAAIv+B,EAAM0D,MAAM86B,OAASx+B,EAAM2D,IAAI66B,OAAQ,CAC9C,IAAI36D,EAAO83D,EAAQwL,aAAannC,GAChC,IAAK,QAAQ1vB,KAAKzM,GAAO,CACjBuzE,EAAO57E,KAAKmwG,mBAEhB,YADAhwC,EAAQk7B,WAAWzf,EAAKjzC,MAAOizC,EAAKr3D,KAAM,KAE9C,CACJ,CAEA,IAAIkwB,EAAO0rB,EAAQ8T,QAAQzvC,EAAM0D,MAAM66B,KACnCh8D,EAAWy9B,EAAM0D,MACjBwzD,EAAOv7B,EAAQka,aACfrX,EAAS7C,EAAQ8+B,uBAAuBl4F,EAASg8D,IAAKh8D,EAASi8D,QAEnE,GAAIhjE,KAAKmgE,QAAQ8kB,iBACb,IAAItmE,EAAS+8E,EAAO14B,EAAS04B,EACzBJ,EAAez6F,EAAKu6D,aAAa,IAAKz8C,OACvC,CACCA,EAAQqkD,EAAS04B,EACrB,MAAmC,KAA5BjnD,EAAKjQ,EAAM0D,MAAM86B,SAAkBrkD,EACtC6lB,EAAM0D,MAAM86B,SACZrkD,IAEJ3e,KAAKihC,UAAU50B,kBAAkBm4B,GACjC82D,EAAe,IACnB,CACA,OAAOt7F,KAAKwtD,OAAO8tC,EAnBnB,CAVI,IAAI1f,EAAO57E,KAAKmwG,mBAChBhwC,EAAQk7B,WAAWzf,EAAKjzC,MAAOizC,EAAKr3D,KAAM,KA6BlD,EACAvkB,KAAKwmG,YAAc,WACf,IAAI5qB,EAAO57E,KAAKmwG,mBAChBnwG,KAAKmgE,QAAQk7B,WAAWzf,EAAKjzC,MAAOizC,EAAKr3D,KAAM,KACnD,EACAvkB,KAAKumG,aAAe,WAChB,IAAItlE,EAAYjhC,KAAKmgE,QAAQr1D,eAC7B9K,KAAKmgE,QAAQo7B,YAAYt6D,EAAUq/B,WACvC,EACAtgE,KAAK+lG,UAAY,WACb,IAAInqB,EAAO57E,KAAKmwG,mBACZhwC,EAAUngE,KAAKmgE,QAEf/qB,EAAQ,GACZ,IAAKrvC,EAAI61E,EAAKjzC,MAAO5iC,GAAK61E,EAAKr3D,KAAMxe,IACjCqvC,EAAM1oC,KAAKyzD,EAAQ8T,QAAQluE,IAE/BqvC,EAAM5nB,MAAK,SAASnnB,EAAGP,GACnB,OAAIO,EAAE0b,cAAgBjc,EAAEic,eAAuB,EAC3C1b,EAAE0b,cAAgBjc,EAAEic,cAAsB,EACvC,CACX,IAGA,IADA,IAAI05E,EAAc,IAAIhmB,EAAM,EAAG,EAAG,EAAG,GAC5B1vE,EAAI61E,EAAKjzC,MAAO5iC,GAAK61E,EAAKr3D,KAAMxe,IAAK,CAC1C,IAAI0uC,EAAO0rB,EAAQ8T,QAAQluE,GAC3B01F,EAAYvzD,MAAM66B,IAAMh9D,EACxB01F,EAAYtzD,IAAI46B,IAAMh9D,EACtB01F,EAAYtzD,IAAI66B,OAASvuB,EAAK/sC,OAC9By4D,EAAQlhD,QAAQw8E,EAAarmD,EAAMrvC,EAAE61E,EAAKjzC,OAC9C,CACJ,EACA3oC,KAAK2kF,mBAAqB,WACtB,IAAIxwC,EAAQn0C,KAAKmgE,QAAQqsB,SAASxsF,KAAKwrG,oBAAoBzoC,KACvD6Y,EAAO57E,KAAKmwG,mBAChBnwG,KAAKmgE,QAAQ18D,UAAUkhF,mBAAmBxwC,EAAOn0C,KAAKmgE,QAASyb,EAAKjzC,MAAOizC,EAAKr3D,KACpF,EAEAvkB,KAAKgmF,mBAAqB,WACtB,IAAI1lC,EAAStgD,KAAKwrG,oBACdr3D,EAAQn0C,KAAKmgE,QAAQqsB,SAASlsC,EAAOyiB,KACrCv+B,EAAQxkC,KAAKsjE,oBACjBtjE,KAAKmgE,QAAQ18D,UAAUuiF,mBAAmB7xC,EAAOn0C,KAAKmgE,QAAS37B,EAAO8b,EAC1E,EACAtgD,KAAKowG,YAAc,SAASrtC,EAAKC,GAC7B,IAAIqtC,EAAY,4BAChBA,EAAU1hF,UAAY,EAEtB,IAAIzmB,EAAIlI,KAAKmgE,QAAQ8T,QAAQlR,GAC7B,MAAOstC,EAAU1hF,UAAYq0C,EAAQ,CACjC,IAAIp5D,EAAIymG,EAAUxuF,KAAK3Z,GACvB,GAAG0B,EAAE4S,OAASwmD,GAAUp5D,EAAE4S,MAAM5S,EAAE,GAAGlC,QAAUs7D,EAAO,CAClD,IAAI54C,EAAS,CACTlpB,MAAO0I,EAAE,GACTs+B,MAAOt+B,EAAE4S,MACT2rB,IAAKv+B,EAAE4S,MAAM5S,EAAE,GAAGlC,QAEtB,OAAO0iB,CACX,CACJ,CACA,OAAO,IACX,EACApqB,KAAKgmG,aAAe,SAASsK,GACzB,IAAIvtC,EAAM/iE,KAAKihC,UAAU22C,YAAY7U,IACjCC,EAAShjE,KAAKihC,UAAU22C,YAAY5U,OACpCutC,EAAY,IAAI96B,EAAM1S,EAAKC,EAAO,EAAGD,EAAKC,GAE1C98D,EAAIlG,KAAKmgE,QAAQwL,aAAa4kC,GAClC,IAAKxqD,MAAMxV,WAAWrqC,KAAOijB,SAASjjB,GAAI,CACtC,IAAIsqG,EAAKxwG,KAAKowG,YAAYrtC,EAAKC,GAC/B,GAAIwtC,EAAI,CACJ,IAAIC,EAAKD,EAAGtvG,MAAM2Q,QAAQ,MAAQ,EAAI2+F,EAAGtoE,MAAQsoE,EAAGtvG,MAAM2Q,QAAQ,KAAO,EAAI2+F,EAAGroE,IAC5EuoE,EAAWF,EAAGtoE,MAAQsoE,EAAGtvG,MAAMwG,OAAS+oG,EAExC/qG,EAAI6qC,WAAWigE,EAAGtvG,OACtBwE,GAAKmgB,KAAK0uC,IAAI,GAAIm8C,GAGfD,IAAOD,EAAGroE,KAAO66B,EAASytC,EACzBH,GAAUzqF,KAAK0uC,IAAI,GAAIi8C,EAAGroE,IAAM66B,EAAS,GAEzCstC,GAAUzqF,KAAK0uC,IAAI,GAAIi8C,EAAGroE,IAAM66B,GAGpCt9D,GAAK4qG,EACL5qG,GAAKmgB,KAAK0uC,IAAI,GAAIm8C,GAClB,IAAIC,EAAMjrG,EAAEkrG,QAAQF,GAChBG,EAAe,IAAIp7B,EAAM1S,EAAKytC,EAAGtoE,MAAO66B,EAAKytC,EAAGroE,KACpDnoC,KAAKmgE,QAAQlhD,QAAQ4xF,EAAcF,GACnC3wG,KAAKk4E,aAAanV,EAAKl9C,KAAKkf,IAAIyrE,EAAGtoE,MAAO,EAAG86B,EAAS2tC,EAAIjpG,OAAS8oG,EAAGtvG,MAAMwG,QAEhF,CACJ,CACJ,EACA1H,KAAKkqF,YAAc,WACf,IAAItO,EAAO57E,KAAKmwG,mBAChBnwG,KAAKmgE,QAAQgqB,gBAAgBvO,EAAKjzC,MAAOizC,EAAKr3D,MAC9CvkB,KAAK4K,gBACT,EAEA5K,KAAK8lG,mBAAqB,WACtB,IAAIl3D,EAAM5uC,KAAKihC,UACX8vB,EAAM/wD,KAAKmgE,QACX37B,EAAQoK,EAAI0xB,WACZnF,EAAUvsB,EAAIupC,cAClB,GAAI3zC,EAAMsa,UAAW,CACjB,IAAIikB,EAAMv+B,EAAM0D,MAAM66B,IACtBhS,EAAIirC,eAAej5B,EAAKA,EAC5B,KAAO,CACH,IAAIulB,EAAQntB,EAAU32B,EAAM0D,MAAQ1D,EAAM2D,IACtC2oE,EAAW//C,EAAIvD,OAAO86B,EAAOv3B,EAAI4a,aAAannC,IAAQ,GAC1DA,EAAM0D,MAAQogD,EACd9jD,EAAM2D,IAAM2oE,EAEZliE,EAAIviC,kBAAkBm4B,EAAO22B,EACjC,CACJ,EACAn7D,KAAK+7F,cAAgB,WACjB/7F,KAAK27F,WAAW,GAAG,EACvB,EACA37F,KAAK87F,YAAc,WACf97F,KAAK27F,YAAY,GAAG,EACxB,EACA37F,KAAKqsE,SAAW,SAAS7nC,EAAOu2D,EAAYjiF,GACxC,OAAO9Y,KAAKmgE,QAAQkM,SAAS7nC,EAAOu2D,EAAYjiF,EACpD,EACA9Y,KAAKimG,YAAc,WACfjmG,KAAK27F,YAAY,GAAG,EACxB,EACA37F,KAAKkmG,cAAgB,WACjBlmG,KAAK27F,WAAW,GAAG,EACvB,EACA37F,KAAK27F,WAAa,SAAS1J,EAAKn5E,GAC5B,IAAI8iE,EAAMt6B,EACNrgB,EAAYjhC,KAAKihC,UACrB,IAAKA,EAAUyiC,mBAAqB1jE,KAAKytG,uBAAwB,CAC7D,IAAIjpE,EAAQvD,EAAUypC,kBACtBkR,EAAO57E,KAAKmwG,iBAAiB3rE,GAC7B8c,EAAQthD,KAAKmgE,QAAQw7B,WAAW/f,EAAKjzC,MAAOizC,EAAKr3D,KAAMzL,EAAO,EAAIm5E,GAC9Dn5E,IAAgB,GAARm5E,IAAW3wC,EAAQ,GAC/B9c,EAAM0yC,OAAO51B,EAAO,GACpBrgB,EAAUkqC,kBAAkB3mC,EAChC,KAAO,CACH,IAAI43C,EAASn7C,EAAUs7C,UAAUH,OACjCn7C,EAAUs7C,UAAUzH,OAAO90E,KAAKmgE,SAChCngE,KAAKytG,wBAAyB,EAK9B,IAHA,IAAIxoE,EAAO,EACP8rE,EAAY,EACZlpG,EAAIu0E,EAAO10E,OACN3B,EAAI,EAAGA,EAAI8B,EAAG9B,IAAK,CACxB,IAAIirG,EAAajrG,EACjBq2E,EAAOr2E,GAAGmxE,OAAOjyC,EAAM,GACvB22C,EAAO57E,KAAKmwG,iBAAiB/zB,EAAOr2E,IACpC,IAAI4iC,EAAQizC,EAAKjzC,MACbpkB,EAAOq3D,EAAKr3D,KAChB,QAASxe,EAAI8B,EAAG,CACRkpG,GAAW30B,EAAOr2E,GAAGmxE,OAAO65B,EAAW,GAC3C,IAAIE,EAAUjxG,KAAKmwG,iBAAiB/zB,EAAOr2E,IAC3C,GAAI+S,GAAQm4F,EAAQtoE,OAASpkB,EACzB,MACC,IAAKzL,GAAQm4F,EAAQtoE,MAAQpkB,EAAO,EACrC,MACJA,EAAO0sF,EAAQ1sF,IACnB,CACAxe,IACAk/B,EAAOjlC,KAAKmgE,QAAQw7B,WAAWhzD,EAAOpkB,EAAMzL,EAAO,EAAIm5E,GACnDn5E,IAAgB,GAARm5E,IAAW+e,EAAajrG,EAAI,GACxC,MAAOirG,GAAcjrG,EACjBq2E,EAAO40B,GAAY95B,OAAOjyC,EAAM,GAChC+rE,IAECl4F,IAAMmsB,EAAO,GAClB8rE,GAAa9rE,CACjB,CAEAhE,EAAUkqC,kBAAkBlqC,EAAUm7C,OAAO,IAC7Cn7C,EAAUs7C,UAAU1H,OAAO70E,KAAKmgE,SAChCngE,KAAKytG,wBAAyB,CAClC,CACJ,EACAztG,KAAKmwG,iBAAmB,SAAS3rE,GAG7B,OAFAA,GAASA,GAASxkC,KAAKsjE,qBAAqBuT,eAErC,CACHluC,MAAO3oC,KAAKmgE,QAAQmxB,gBAAgB9sD,EAAM0D,MAAM66B,KAChDx+C,KAAMvkB,KAAKmgE,QAAQkxB,cAAc7sD,EAAM2D,IAAI46B,KAEnD,EAEA/iE,KAAK6+D,mBAAqB,SAASx2D,GAC/BrI,KAAK0gE,SAASwwC,gBAAgBlxG,KAAKwrG,oBACvC,EAEAxrG,KAAK4+D,oBAAsB,SAASv2D,GAChCrI,KAAK0gE,SAASywC,mBAAmB9oG,EACrC,EAEArI,KAAK2+D,iBAAmB,WACpB3+D,KAAK0gE,SAAS0wC,iBAClB,EACApxG,KAAKqxG,mBAAqB,WACtB,OAAOrxG,KAAK0gE,SAAS2wC,oBACzB,EACArxG,KAAKsxG,kBAAoB,WACrB,OAAOtxG,KAAK0gE,SAAS4wC,mBACzB,EACAtxG,KAAKuxG,aAAe,SAASxuC,GACzB,OAAQA,GAAO/iE,KAAKqxG,sBAAwBtuC,GAAO/iE,KAAKsxG,mBAC5D,EACAtxG,KAAKwxG,kBAAoB,SAASzuC,GAC9B,OAAQA,GAAO/iE,KAAK0gE,SAAS+wC,2BAA6B1uC,GAAO/iE,KAAK0gE,SAASgxC,wBACnF,EACA1xG,KAAK2xG,oBAAsB,WACvB,OAAO3xG,KAAK0gE,SAASkxC,qBAAuB5xG,KAAK0gE,SAASmxC,kBAAoB,CAClF,EAEA7xG,KAAK8xG,YAAc,SAAS7f,EAAK7lF,GAC7B,IAAIs0D,EAAW1gE,KAAK0gE,SAChBzxD,EAASjP,KAAK0gE,SAASqJ,YACvB6R,EAAOqW,EAAMpsE,KAAKD,MAAM3W,EAAO60B,OAAS70B,EAAO66D,YAEnD9pE,KAAK6oD,mBACU,IAAXz8C,EACApM,KAAKihC,UAAUm3C,gBAAe,WAC1Bp4E,KAAKm6E,aAAayB,EAAM,EAC5B,KACkB,IAAXxvE,IACPpM,KAAKihC,UAAUk5C,aAAayB,EAAM,GAClC57E,KAAKihC,UAAUr2B,kBAEnB5K,KAAK6oD,kBAEL,IAAI3hD,EAAYw5D,EAASx5D,UAEzBw5D,EAASmF,SAAS,EAAG+V,EAAO3sE,EAAO66D,YACrB,MAAV19D,GACAs0D,EAAS6D,qBAAqB,KAAM,IAExC7D,EAAS+nC,iBAAiBvhG,EAC9B,EACAlH,KAAKslG,eAAiB,WAClBtlG,KAAK8xG,YAAY,GAAG,EACxB,EACA9xG,KAAKylG,aAAe,WAChBzlG,KAAK8xG,aAAa,GAAG,EACzB,EACA9xG,KAAKwlG,aAAe,WACjBxlG,KAAK8xG,YAAY,GAAG,EACvB,EACA9xG,KAAK2lG,WAAa,WACd3lG,KAAK8xG,aAAa,GAAG,EACzB,EACA9xG,KAAKulG,eAAiB,WAClBvlG,KAAK8xG,YAAY,EACrB,EACA9xG,KAAK0lG,aAAe,WAChB1lG,KAAK8xG,aAAa,EACtB,EACA9xG,KAAK+xG,YAAc,SAAShvC,GACxB/iE,KAAK0gE,SAASqxC,YAAYhvC,EAC9B,EACA/iE,KAAKgyG,aAAe,SAASv9D,EAAMw9D,EAAQjtE,EAAS50B,GAChDpQ,KAAK0gE,SAASsxC,aAAav9D,EAAMw9D,EAAQjtE,EAAS50B,EACtD,EACApQ,KAAKmkG,gBAAkB,WACnB,IAAI3/D,EAAQxkC,KAAKsjE,oBACbj4C,EAAM,CACN03C,IAAKl9C,KAAKD,MAAM4e,EAAM0D,MAAM66B,KAAOv+B,EAAM2D,IAAI46B,IAAMv+B,EAAM0D,MAAM66B,KAAO,GACtEC,OAAQn9C,KAAKD,MAAM4e,EAAM0D,MAAM86B,QAAUx+B,EAAM2D,IAAI66B,OAASx+B,EAAM0D,MAAM86B,QAAU,IAEtFhjE,KAAK0gE,SAASwxC,YAAY7mF,EAAK,GACnC,EACArrB,KAAKwrG,kBAAoB,WACrB,OAAOxrG,KAAKihC,UAAU22C,WAC1B,EACA53E,KAAKmyG,wBAA0B,WAC3B,OAAOnyG,KAAKmgE,QAAQ6W,yBAAyBh3E,KAAKwrG,oBACtD,EACAxrG,KAAKsjE,kBAAoB,WACrB,OAAOtjE,KAAKihC,UAAUq/B,UAC1B,EACAtgE,KAAK++D,UAAY,WACb/+D,KAAK6oD,iBAAmB,EACxB7oD,KAAKihC,UAAU89B,YACf/+D,KAAK6oD,iBAAmB,CAC5B,EACA7oD,KAAK4K,eAAiB,WAClB5K,KAAKihC,UAAUr2B,gBACnB,EACA5K,KAAKk4E,aAAe,SAASnV,EAAKC,GAC9BhjE,KAAKihC,UAAUi3C,aAAanV,EAAKC,EACrC,EACAhjE,KAAK4pE,qBAAuB,SAASv+C,GACjCrrB,KAAKihC,UAAU2oC,qBAAqBv+C,EACxC,EACArrB,KAAK4lG,eAAiB,SAASx5F,EAAQk2B,GACnC,IAAIge,EAAStgD,KAAKwrG,oBACdzjG,EAAW,IAAIm7E,EAAcljF,KAAKmgE,QAAS7f,EAAOyiB,IAAKziB,EAAO0iB,QAC9D6oC,EAAY9jG,EAAS+7E,kBACrB9vC,EAAQ63D,GAAa9jG,EAAS67E,cAElC,GAAK5vC,EAAL,CACA,IAAIo+D,EAIAC,EAHAC,GAAQ,EACRpgB,EAAQ,CAAC,EACTnsF,EAAIu6C,EAAO0iB,OAAShvB,EAAM9L,MAE1BqqE,EAAW,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGT,EAAG,CACC,GAAIv+D,EAAM9yC,MAAM+gB,MAAM,gBAClB,KAAOlc,EAAIiuC,EAAM9yC,MAAMwG,SAAW4qG,EAAOvsG,IACrC,GAAKwsG,EAASv+D,EAAM9yC,MAAM6E,IAU1B,OANAssG,EAAcE,EAASv+D,EAAM9yC,MAAM6E,IAAM,IAAMiuC,EAAMvyC,KAAKwd,QAAQ,SAAU,UAExE8mC,MAAMmsC,EAAMmgB,MACZngB,EAAMmgB,GAAe,GAGjBr+D,EAAM9yC,MAAM6E,IAChB,IAAK,IACL,IAAK,IACL,IAAK,IACDmsF,EAAMmgB,KACN,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACDngB,EAAMmgB,MAEsB,IAAxBngB,EAAMmgB,KACND,EAAY,UACZE,GAAQ,GAEhB,YAIHt+D,IAA6C,IAApCA,EAAMvyC,KAAKoQ,QAAQ,cAC7Bk0C,MAAMmsC,EAAMl+C,EAAM9yC,UAClBgxF,EAAMl+C,EAAM9yC,OAAS,GAGD,MAApB2qG,EAAU3qG,MACVgxF,EAAMl+C,EAAM9yC,SAEa,OAApB2qG,EAAU3qG,OACfgxF,EAAMl+C,EAAM9yC,UAGY,IAAxBgxF,EAAMl+C,EAAM9yC,SACZkxG,EAAY,MACZE,GAAQ,IAIXA,IACDzG,EAAY73D,EACZA,EAAQjsC,EAAS67E,cACjB79E,EAAI,EAEZ,OAASiuC,IAAUs+D,GACnB,GAAKF,EAAL,CAGA,IAAI5tE,EAAOnZ,EACX,GAAkB,YAAd+mF,EACA5tE,EAAQxkC,KAAKmgE,QAAQgF,gBAAgB7kB,GAChC9b,IACDA,EAAQ,IAAIixC,EACR1tE,EAASg8E,qBACTh8E,EAASi8E,wBAA0Bj+E,EAAI,EACvCgC,EAASg8E,qBACTh8E,EAASi8E,wBAA0Bj+E,EAAI,GAE3CslB,EAAMmZ,EAAM0D,OACR5F,GAAUjX,EAAI03C,MAAQziB,EAAOyiB,KAAOl9C,KAAKqf,IAAI7Z,EAAI23C,OAAS1iB,EAAO0iB,QAAU,KAC3Ex+B,EAAQxkC,KAAKmgE,QAAQgF,gBAAgB95C,UAG5C,GAAkB,QAAd+mF,EAAqB,CAC1B,IAAIp+D,IAA6C,IAApCA,EAAMvyC,KAAKoQ,QAAQ,YAG5B,OAFA,IAAIq/C,EAAMld,EAAM9yC,MAUpB,GANAsjC,EAAQ,IAAIixC,EACR1tE,EAASg8E,qBACTh8E,EAASi8E,wBAA0B,EACnCj8E,EAASg8E,qBACTh8E,EAASi8E,wBAA0B,GAEU,IAA7Cx/C,EAAM/M,QAAQ6oB,EAAOyiB,IAAKziB,EAAO0iB,QAAe,CAChDsvC,GAAQ,EACR,GACIt+D,EAAQ63D,EACRA,EAAY9jG,EAAS47E,eAEjBkoB,KAC6C,IAAzCA,EAAUpqG,KAAKoQ,QAAQ,cACvB2yB,EAAM8K,OAAOvnC,EAASg8E,qBAAsBh8E,EAASi8E,wBAA0B,GAG/EhwC,EAAM9yC,QAAUgwD,IAA2C,IAApCld,EAAMvyC,KAAKoQ,QAAQ,cAClB,MAApBg6F,EAAU3qG,MACVgxF,EAAMhhC,KAEmB,OAApB26C,EAAU3qG,OACfgxF,EAAMhhC,KAGS,IAAfghC,EAAMhhC,KACNohD,GAAQ,WAGfzG,IAAcyG,EAC3B,CACIt+D,GAASA,EAAMvyC,KAAKoQ,QAAQ,cAC5BwZ,EAAMmZ,EAAM0D,MACR7c,EAAI03C,KAAOziB,EAAOyiB,KAAOl9C,KAAKqf,IAAI7Z,EAAI23C,OAAS1iB,EAAO0iB,QAAU,IAChE33C,EAAMmZ,EAAM2D,KAExB,CAEA9c,EAAMmZ,GAASA,EAAM8b,QAAUj1B,EAC3BA,IACIjf,EACIo4B,GAASlC,EACTtiC,KAAKihC,UAAUs/B,SAAS/7B,GACjBA,GAASA,EAAMsxC,QAAQ91E,KAAKsjE,qBACnCtjE,KAAK4K,iBAEL5K,KAAKihC,UAAU+mC,SAAS38C,EAAI03C,IAAK13C,EAAI23C,QAGzChjE,KAAKihC,UAAUoc,OAAOhyB,EAAI03C,IAAK13C,EAAI23C,QAxEjC,CAxEQ,CAmJtB,EACAhjE,KAAKqkG,SAAW,SAASmO,EAAYxvC,EAAQh+B,GACzChlC,KAAKihC,UAAUr2B,iBACf5K,KAAKmgE,QAAQ8wB,OAAO,CAACluB,IAAKyvC,EAAa,EAAGxvC,OAAQA,GAAU,IAE5DhjE,KAAK6oD,iBAAmB,EACxB7oD,KAAKknG,qBAAuBlnG,KAAKknG,sBACjClnG,KAAKk4E,aAAas6B,EAAa,EAAGxvC,GAAU,GAC5ChjE,KAAK6oD,iBAAmB,EAEnB7oD,KAAKwxG,kBAAkBgB,EAAa,IACrCxyG,KAAKgyG,aAAaQ,EAAa,GAAG,EAAMxtE,EAChD,EACAhlC,KAAKyyG,WAAa,SAAS1vC,EAAKC,GAC5BhjE,KAAKihC,UAAUoc,OAAO0lB,EAAKC,EAC/B,EACAhjE,KAAK4kG,WAAa,SAASC,GACvB,GAAI7kG,KAAKihC,UAAUokC,gBAAkBrlE,KAAKihC,UAAUk3C,cAAe,CAC/D,IAAIta,EAAiB79D,KAAKihC,UAAUiJ,OAAO2tC,cAC3C,OAAO73E,KAAK4pE,qBAAqB/L,EACrC,CACA79D,KAAKihC,UAAUr2B,iBACf5K,KAAKihC,UAAUk5C,cAAc0qB,IAAU,EAAG,EAC9C,EACA7kG,KAAK+kG,aAAe,SAASF,GACzB,GAAI7kG,KAAKihC,UAAUokC,eAAiBrlE,KAAKihC,UAAUk3C,cAAe,CAC9D,IAAIra,EAAe99D,KAAKihC,UAAUiJ,OAAO2tC,cACzC,OAAO73E,KAAK4pE,qBAAqB9L,EACrC,CACA99D,KAAKihC,UAAUr2B,iBACf5K,KAAKihC,UAAUk5C,aAAa0qB,GAAS,EAAG,EAC5C,EACA7kG,KAAKklG,aAAe,SAASL,GACzB,GAAK7kG,KAAKihC,UAAU6d,UAIf,CACD+lD,EAAQA,GAAS,EACjB,MAAOA,IACH7kG,KAAKihC,UAAU43C,gBAEvB,KAT+B,CAC3B,IAAIhb,EAAiB79D,KAAKsjE,oBAAoBp7B,MAC9CloC,KAAK4pE,qBAAqB/L,EAC9B,CAOA79D,KAAK4K,gBACT,EACA5K,KAAKqlG,cAAgB,SAASR,GAC1B,GAAK7kG,KAAKihC,UAAU6d,UAIf,CACD+lD,EAAQA,GAAS,EACjB,MAAOA,IACH7kG,KAAKihC,UAAU03C,iBAEvB,KAT+B,CAC3B,IAAI7a,EAAe99D,KAAKsjE,oBAAoBn7B,IAC5CnoC,KAAK4pE,qBAAqB9L,EAC9B,CAOA99D,KAAK4K,gBACT,EACA5K,KAAKilG,kBAAoB,WACrBjlG,KAAKihC,UAAU83C,sBACf/4E,KAAK4K,gBACT,EACA5K,KAAKolG,gBAAkB,WACnBplG,KAAKihC,UAAUg4C,oBACfj5E,KAAK4K,gBACT,EACA5K,KAAK8kG,gBAAkB,WACnB9kG,KAAKihC,UAAUk4C,oBACfn5E,KAAK4K,gBACT,EACA5K,KAAK2kG,kBAAoB,WACrB3kG,KAAKihC,UAAUo4C,sBACfr5E,KAAK4K,gBACT,EACA5K,KAAKmlG,kBAAoB,WACrBnlG,KAAKihC,UAAUs4C,sBACfv5E,KAAK4K,gBACT,EACA5K,KAAKglG,iBAAmB,WACpBhlG,KAAKihC,UAAUw4C,qBACfz5E,KAAK4K,gBACT,EACA5K,KAAKif,QAAU,SAASiiF,EAAap+F,GAC7BA,GACA9C,KAAKynG,QAAQ/jG,IAAIZ,GAErB,IAAI0hC,EAAQxkC,KAAKynG,QAAQ/G,KAAK1gG,KAAKmgE,SAC/BuyC,EAAW,EACf,OAAKluE,GAGDxkC,KAAK2yG,YAAYnuE,EAAO08D,KACxBwR,EAAW,GAED,OAAVluE,IACAxkC,KAAKihC,UAAU50B,kBAAkBm4B,GACjCxkC,KAAK0gE,SAAS8nC,wBAAwBhkE,EAAM0D,MAAO1D,EAAM2D,MAGtDuqE,GAVIA,CAWf,EACA1yG,KAAK4yG,WAAa,SAAS1R,EAAap+F,GAChCA,GACA9C,KAAKynG,QAAQ/jG,IAAIZ,GAGrB,IAAIs5E,EAASp8E,KAAKynG,QAAQ5G,QAAQ7gG,KAAKmgE,SACnCuyC,EAAW,EACf,IAAKt2B,EAAO10E,OACR,OAAOgrG,EAEX1yG,KAAK6oD,iBAAmB,EAExB,IAAI5nB,EAAYjhC,KAAKsjE,oBACrBtjE,KAAKihC,UAAUoc,OAAO,EAAG,GAEzB,IAAK,IAAIt3C,EAAIq2E,EAAO10E,OAAS,EAAG3B,GAAK,IAAKA,EACnC/F,KAAK2yG,YAAYv2B,EAAOr2E,GAAIm7F,IAC3BwR,IAOR,OAHA1yG,KAAKihC,UAAU50B,kBAAkB40B,GACjCjhC,KAAK6oD,iBAAmB,EAEjB6pD,CACX,EAEA1yG,KAAK2yG,YAAc,SAASnuE,EAAO08D,GAC/B,IAAI95E,EAAQpnB,KAAKmgE,QAAQwL,aAAannC,GAEtC,OADA08D,EAAclhG,KAAKynG,QAAQxoF,QAAQmI,EAAO85E,GACtB,OAAhBA,GACA18D,EAAM2D,IAAMnoC,KAAKmgE,QAAQlhD,QAAQulB,EAAO08D,GACjC18D,GAEA,IAEf,EACAxkC,KAAK6yG,qBAAuB,WACxB,OAAO7yG,KAAKynG,QAAQt4B,YACxB,EACAnvE,KAAK0gG,KAAO,SAASI,EAAQh+F,EAASkiC,GAC7BliC,IACDA,EAAU,CAAC,GAEM,iBAAVg+F,GAAsBA,aAAkB7pF,OAC/CnU,EAAQg+F,OAASA,EACK,iBAAVA,GACZ/sC,EAAIjhD,MAAMhQ,EAASg+F,GAEvB,IAAIt8D,EAAQxkC,KAAKihC,UAAUq/B,WACL,MAAlBx9D,EAAQg+F,SACRA,EAAS9gG,KAAKmgE,QAAQwL,aAAannC,IAC5BxkC,KAAKynG,QAAQxiG,SAAS67F,OACxBA,IACDt8D,EAAQxkC,KAAKmgE,QAAQiF,aAAa5gC,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,QAC/D89B,EAAS9gG,KAAKmgE,QAAQwL,aAAannC,IAEvCxkC,KAAKynG,QAAQ/jG,IAAI,CAACo9F,OAAQA,KAG9B9gG,KAAKynG,QAAQ/jG,IAAIZ,GACZA,EAAQolC,OACTloC,KAAKynG,QAAQ/jG,IAAI,CAACwkC,MAAO1D,IAE7B,IAAIsuE,EAAW9yG,KAAKynG,QAAQ/G,KAAK1gG,KAAKmgE,SACtC,OAAIr9D,EAAQiwG,cACDD,EACPA,GACA9yG,KAAKgzG,YAAYF,EAAU9tE,GACpB8tE,IAEPhwG,EAAQu+F,UACR78D,EAAM0D,MAAQ1D,EAAM2D,IAEpB3D,EAAM2D,IAAM3D,EAAM0D,WACtBloC,KAAKihC,UAAUs/B,SAAS/7B,GAC5B,EACAxkC,KAAKwkG,SAAW,SAAS1hG,EAASkiC,GAC9BhlC,KAAK0gG,KAAK,CAACE,aAAa,EAAMS,WAAW,GAAQv+F,EAASkiC,EAC9D,EACAhlC,KAAKykG,aAAe,SAAS3hG,EAASkiC,GAClChlC,KAAK0gG,KAAK59F,EAAS,CAAC89F,aAAa,EAAMS,WAAW,GAAOr8D,EAC7D,EAEAhlC,KAAKgzG,YAAc,SAASxuE,EAAOQ,GAC/BhlC,KAAK6oD,iBAAmB,EACxB7oD,KAAKmgE,QAAQ8wB,OAAOzsD,GACpBxkC,KAAKihC,UAAU50B,kBAAkBm4B,GACjCxkC,KAAK6oD,iBAAmB,EAExB,IAAI3hD,EAAYlH,KAAK0gE,SAASx5D,UAC9BlH,KAAK0gE,SAAS8nC,wBAAwBhkE,EAAM0D,MAAO1D,EAAM2D,IAAK,KAC9C,IAAZnD,GACAhlC,KAAK0gE,SAAS+nC,iBAAiBvhG,EACvC,EACAlH,KAAKumC,KAAO,WACRvmC,KAAK6oD,kBACL7oD,KAAKmgE,QAAQ61B,iBAAiBzvD,OAC9BvmC,KAAK6oD,kBACL7oD,KAAK0gE,SAAS6D,qBAAqB,KAAM,GAC7C,EACAvkE,KAAKymC,KAAO,WACRzmC,KAAK6oD,kBACL7oD,KAAKmgE,QAAQ61B,iBAAiBvvD,OAC9BzmC,KAAK6oD,kBACL7oD,KAAK0gE,SAAS6D,qBAAqB,KAAM,GAC7C,EACAvkE,KAAKgL,QAAU,WACXhL,KAAK0gE,SAAS11D,UACdhL,KAAKuuE,QAAQ,UAAWvuE,MACpBA,KAAKmgE,SACLngE,KAAKmgE,QAAQn1D,SAErB,EACAhL,KAAKizG,4BAA8B,SAASv5F,GACxC,GAAKA,EAAL,CAEA,IAAIi0B,EACA9qC,EAAO7C,KACPkzG,GAAe,EACdlzG,KAAKmzG,gBACNnzG,KAAKmzG,cAAgBhtG,SAASM,cAAc,QAChD,IAAI2sG,EAAepzG,KAAKmzG,cACxBC,EAAa1sG,MAAMsrD,QAAU,oBAC7BhyD,KAAKqH,UAAUkkC,aAAa6nE,EAAcpzG,KAAKqH,UAAU8nC,YACzD,IAAIkkE,EAAoBrzG,KAAKO,GAAG,mBAAmB,WAC/C2yG,GAAe,CACnB,IACII,EAAiBtzG,KAAK0gE,SAASngE,GAAG,gBAAgB,WAC9C2yG,IACAvlE,EAAO9qC,EAAK69D,SAASr5D,UAAUumC,wBACvC,IACI2lE,EAAgBvzG,KAAK0gE,SAASngE,GAAG,eAAe,WAChD,GAAI2yG,GAAgBvlE,IAAS9qC,EAAKw6D,aAC3Bx6D,EAAK++B,WAAa/+B,EAAK++B,UAAUy7B,aACtC,CACE,IAAIqD,EAAW79D,EAAK69D,SAChBr1C,EAAMq1C,EAASmK,aAAa2oC,UAC5BvkG,EAASyxD,EAASqJ,YAClB5iE,EAAMkkB,EAAIlkB,IAAM8H,EAAOitD,OAEvBg3C,EADA7nF,EAAIlkB,KAAO,GAAKA,EAAMwmC,EAAKxmC,IAAM,KAE1BkkB,EAAIlkB,IAAM8H,EAAO60B,QACxBzY,EAAIlkB,IAAMwmC,EAAKxmC,IAAM8H,EAAO66D,WAAa9iE,OAAOshE,cAGjC,KAEC,MAAhB4qC,IACAE,EAAa1sG,MAAMS,IAAMA,EAAM,KAC/BisG,EAAa1sG,MAAMmnC,KAAOxiB,EAAIwiB,KAAO,KACrCulE,EAAa1sG,MAAMo9B,OAAS70B,EAAO66D,WAAa,KAChDspC,EAAalP,eAAegP,IAEhCA,EAAevlE,EAAO,IAC1B,CACJ,IACA3tC,KAAKizG,4BAA8B,SAASv5F,GACpCA,WAEG1Z,KAAKizG,4BACZjzG,KAAK6M,IAAI,kBAAmBwmG,GAC5BrzG,KAAK0gE,SAAS7zD,IAAI,cAAe0mG,GACjCvzG,KAAK0gE,SAAS7zD,IAAI,eAAgBymG,GACtC,CAhDU,CAiDd,EAGAtzG,KAAKyzG,kBAAoB,WACrB,IAAI/sG,EAAQ1G,KAAK0zG,cAAgB,MAC7BC,EAAc3zG,KAAK0gE,SAASmK,aAC3B8oC,IAELA,EAAYC,kBAAkB,SAAS9+F,KAAKpO,IAC5CitG,EAAYE,YAAc7zG,KAAKkgE,WAAsB,QAATx5D,EAC5Cq6B,EAAIywB,YAAYmiD,EAAYnkE,QAAS,mBAAoB,OAAO16B,KAAKpO,IACzE,CAEH,GAAE9B,KAAKwiG,EAAOn/F,WAIfgH,EAAO4gE,cAAcu3B,EAAOn/F,UAAW,SAAU,CAC7C6rG,eAAgB,CACZpwG,IAAK,SAASgD,GACV1G,KAAK8qG,oBACL9qG,KAAKuuE,QAAQ,uBAAwB,CAAClsE,KAAMqE,GAChD,EACAopE,aAAc,QAElBikC,oBAAqB,CACjBrwG,IAAK,WAAY1D,KAAKssG,4BAA6B,EACnDx8B,cAAc,GAElBkkC,sBAAuB,CACnBtwG,IAAK,SAAS2qG,GAAkBruG,KAAKgqG,oBAAqB,EAC1Dl6B,cAAc,GAElB/O,SAAU,CACNr9D,IAAK,SAASq9D,GACV/gE,KAAKyzG,mBACT,EACA3jC,cAAc,GAElB/C,YAAa,CACTrpE,IAAK,SAAS1B,GAAOhC,KAAKyzG,mBAAqB,EAC/C11B,OAAQ,CAAC,MAAO,OAAQ,SAAU,QAClCjO,aAAc,OAElBumB,gBAAiB,CACbtY,OAAQ,EAAC,GAAO,EAAM,UACtBjO,cAAc,GAElBmkC,kBAAmB,CAACnkC,cAAc,GAClCokC,sBAAuB,CAACpkC,cAAc,GACtCqkC,yBAA0B,CACtBzwG,IAAK,SAAS1B,GAAMhC,KAAKizG,4BAA4BjxG,EAAI,GAE7DgnG,gBAAiB,CACbtlG,IAAK,SAAS1B,GAAOhC,KAAK20E,mBAAmB3yE,EAAM,EACnDgB,IAAK,WAAa,OAAOhD,KAAKo0G,YAAc,EAC5C5kC,YAAY,GAGhB6kC,wBAAyB,WACzBC,wBAAyB,WACzBC,oBAAqB,WACrBC,eAAgB,WAChBzF,eAAgB,WAChBI,gBAAiB,WACjBsF,kBAAmB,WACnBC,YAAa,WACbC,gBAAiB,WACjBC,gBAAiB,WACjBC,gBAAiB,WACjBC,WAAY,WACZC,oBAAqB,WACrBpuG,SAAU,WACVquG,WAAY,WACZC,SAAU,WACVC,SAAU,WACVC,cAAe,WACfC,iBAAkB,WAClBhtD,MAAO,WAEP+qB,YAAa,gBACbC,UAAW,gBACXC,YAAa,gBACbC,YAAa,gBACbC,oBAAqB,gBAErBgtB,gBAAiB,UACjBzJ,UAAW,UACXnN,YAAa,UACb4O,UAAW,UACXiI,YAAa,UACbpmB,QAAS,UACTxjD,KAAM,UACNunE,iBAAkB,UAClBkX,UAAW,UACX1zG,KAAM,YAGV8D,EAAQ2hG,OAASA,CACjB,IAEAr/C,IAAImC,OAAO,kBAAkB,CAAC,UAAU,UAAU,WAAW,SAASS,EAAUllD,EAASE,GACzF,aACA,IAAI2vG,EAAc,WACdt1G,KAAKi2F,OACT,GAEA,WA6DI,SAASsf,EAAgBvuF,GACrB,MAAO,CACH7e,OAAQ6e,EAAM7e,OACd+/B,MAAOlhB,EAAMkhB,MACbC,IAAKnhB,EAAMmhB,IACXiN,MAA6B,GAAtBpuB,EAAMouB,MAAM1tC,OAAc,KAAOsf,EAAMouB,MAC9C/sC,KAA4B,GAAtB2e,EAAMouB,MAAM1tC,OAAcsf,EAAMouB,MAAM,GAAK,KAEzD,CAEA,SAASogE,EAAkBxuF,GACvB,MAAO,CACH7e,OAAQ6e,EAAM7e,OACd+/B,MAAOlhB,EAAMkhB,MACbC,IAAKnhB,EAAMmhB,IACXiN,MAAOpuB,EAAMouB,OAAS,CAACpuB,EAAM3e,MAErC,CAEA,SAASotG,EAAkBC,EAAeC,GAEtC,IADA,IAAIC,EAAgB,IAAIt0G,MAAMo0G,EAAchuG,QACnC3B,EAAI,EAAGA,EAAI2vG,EAAchuG,OAAQ3B,IAAK,CAI3C,IAHA,IAAI8vG,EAAeH,EAAc3vG,GAC7B+vG,EAAe,CAAEv8E,MAAOs8E,EAAat8E,MAAOwxD,OAAQ,IAAIzpF,MAAMu0G,EAAanuG,SAEtEib,EAAI,EAAGA,EAAIkzF,EAAa9qB,OAAOrjF,OAAQib,IAAK,CACjD,IAAIozF,EAAYF,EAAa9qB,OAAOpoE,GACpCmzF,EAAa/qB,OAAOpoE,GAAKgzF,EAAmBI,EAChD,CAEAH,EAAc7vG,GAAK+vG,CACvB,CACA,OAAOF,CACX,CA7FA51G,KAAKo2F,QAAU,SAAStzF,GACpB,IAAIkzG,EAAYlzG,EAAQ4yB,KAAK,GAC7B11B,KAAKi2G,KAAQnzG,EAAQ4yB,KAAK,GACtB5yB,EAAQ67E,OAAS3+E,KAAKk2G,YACtBl2G,KAAKm2G,eACLH,EAAYh2G,KAAKo2G,WAAW/xF,MAAM7e,OAAOwwG,IAE7Ch2G,KAAKo2G,WAAW1pG,KAAKspG,GACrBh2G,KAAKq2G,WAAa,GACdr2G,KAAKm2G,aAAe,IACpBn2G,KAAKm2G,aAAeG,KAExBt2G,KAAKm2G,cACT,EACAn2G,KAAKumC,KAAO,SAASg0D,GACjB,IAAIyb,EAAYh2G,KAAKo2G,WAAW/xF,MAC5BkyF,EAAqB,KAOzB,OANIP,IACAO,EAAqBv2G,KAAKi2G,KAAK3b,YAAY0b,EAAWzb,GACtDv6F,KAAKq2G,WAAW3pG,KAAKspG,GACrBh2G,KAAKm2G,gBAGFI,CACX,EACAv2G,KAAKymC,KAAO,SAAS8zD,GACjB,IAAIyb,EAAYh2G,KAAKq2G,WAAWhyF,MAC5BmyF,EAAqB,KAOzB,OANIR,IACAQ,EACIx2G,KAAKi2G,KAAKtb,YAAY36F,KAAKy2G,mBAAmBT,GAAYzb,GAC9Dv6F,KAAKo2G,WAAW1pG,KAAKspG,GACrBh2G,KAAKm2G,gBAEFK,CACX,EACAx2G,KAAKi2F,MAAQ,WACTj2F,KAAKo2G,WAAa,GAClBp2G,KAAKq2G,WAAa,GAClBr2G,KAAKm2G,aAAe,CACxB,EACAn2G,KAAKk2G,QAAU,WACX,OAAOl2G,KAAKo2G,WAAW1uG,OAAS,CACpC,EACA1H,KAAK02G,QAAU,WACX,OAAO12G,KAAKq2G,WAAW3uG,OAAS,CACpC,EACA1H,KAAK22G,UAAY,WACb32G,KAAKm2G,aAAe,CACxB,EACAn2G,KAAK42G,QAAU,WACX,OAA6B,IAAtB52G,KAAKm2G,YAChB,EACAn2G,KAAK62G,iBAAmB,SAASb,GAC7B,OAAOP,EAAkBO,EAAWT,EACxC,EACAv1G,KAAKy2G,mBAAqB,SAAST,GAC/B,OAAOP,EAAkBO,EAAWR,EACxC,CAqCH,GAAE5wG,KAAK0wG,EAAYrtG,WAEpBxC,EAAQ6vG,YAAcA,CACtB,IAEAvtD,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,0BAA0B,SAASS,EAAUllD,EAASE,GAC7J,aAEA,IAAIo7B,EAAM4pB,EAAS,cACfoJ,EAAMpJ,EAAS,cACf9pD,EAAO8pD,EAAS,eAChBqjB,EAAerjB,EAAS,wBAAwBqjB,aAEhD8oC,EAAS,SAASC,GAClB/2G,KAAKwvC,QAAUzO,EAAIt6B,cAAc,OACjCzG,KAAKwvC,QAAQrK,UAAY,6BACzB4xE,EAASzvG,YAAYtH,KAAKwvC,SAC1BxvC,KAAK2vG,mBAAmB3vG,KAAKg3G,kBAE7Bh3G,KAAKi3G,YAAc,EAEnBj3G,KAAKmnE,aAAe,GACpBnnE,KAAKk3G,mBAAqBl3G,KAAKk3G,mBAAmBvrG,KAAK3L,MAEvDA,KAAKm3G,OAAS,EAClB,GAEA,WAEIpjD,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAK6nG,WAAa,SAAS1nC,GACnBngE,KAAKmgE,SACLngE,KAAKmgE,QAAQz0D,oBAAoB,SAAU1L,KAAKk3G,oBACpDl3G,KAAKmgE,QAAUA,EACXA,GACAA,EAAQ5/D,GAAG,SAAUP,KAAKk3G,mBAClC,EAEAl3G,KAAKi3F,oBAAsB,SAASl0B,EAAK59B,GACjCn+B,OAAOqH,SACPA,QAAQC,MAAQD,QAAQC,KAAK,8CACjCtO,KAAKmgE,QAAQ82B,oBAAoBl0B,EAAK59B,EAC1C,EAEAnlC,KAAKk3F,uBAAyB,SAASn0B,EAAK59B,GACpCn+B,OAAOqH,SACPA,QAAQC,MAAQD,QAAQC,KAAK,iDACjCtO,KAAKmgE,QAAQ+2B,uBAAuBn0B,EAAK59B,EAC7C,EAEAnlC,KAAKg4F,eAAiB,SAASC,GAC3Bj4F,KAAKmnE,aAAe,GACpB,IAAK,IAAIphE,EAAI,EAAGA,EAAIkyF,EAAYvwF,OAAQ3B,IAAK,CACzC,IAAImhE,EAAa+wB,EAAYlyF,GACzBg9D,EAAMmE,EAAWnE,IACjBq0C,EAAUp3G,KAAKmnE,aAAapE,GAC3Bq0C,IACDA,EAAUp3G,KAAKmnE,aAAapE,GAAO,CAAC16D,KAAM,KAE9C,IAAIgvG,EAAWnwC,EAAW7+D,KAC1BgvG,EAAWA,EAAWx2G,EAAKk7D,WAAWs7C,GAAYnwC,EAAWjhB,MAAQ,IAE7B,IAApCmxD,EAAQ/uG,KAAKwJ,QAAQwlG,IACrBD,EAAQ/uG,KAAKqE,KAAK2qG,GAEtB,IAAI51G,EAAOylE,EAAWzlE,KACV,SAARA,EACA21G,EAAQjyE,UAAY,aACP,WAAR1jC,GAA0C,cAArB21G,EAAQjyE,UAClCiyE,EAAQjyE,UAAY,eACP,QAAR1jC,GAAoB21G,EAAQjyE,YACjCiyE,EAAQjyE,UAAY,YAC5B,CACJ,EAEAnlC,KAAKk3G,mBAAqB,SAAUlwF,GAChC,GAAKhnB,KAAKmnE,aAAaz/D,OAAvB,CAEA,IAAIgvE,EAAW1vD,EAAMkhB,MAAM66B,IACvBl6C,EAAM7B,EAAMmhB,IAAI46B,IAAM2T,EAC1B,GAAY,IAAR7tD,QACG,GAAoB,UAAhB7B,EAAM7e,OACbnI,KAAKmnE,aAAaziD,OAAOgyD,EAAU7tD,EAAM,EAAG,UACzC,CACH,IAAI6M,EAAO,IAAIp0B,MAAMunB,EAAM,GAC3B6M,EAAKzS,QAAQyzD,EAAU,GACvB12E,KAAKmnE,aAAaziD,OAAOjb,MAAMzJ,KAAKmnE,aAAczxC,EACtD,CAVU,CAWd,EAEA11B,KAAKsQ,OAAS,SAASrB,GACnB,IAAIkxD,EAAUngE,KAAKmgE,QACfuW,EAAWznE,EAAOynE,SAClBC,EAAU9wD,KAAKif,IAAI71B,EAAO0nE,QAAU1nE,EAAOqoG,aAC3Cn3C,EAAQmH,YAAc,GACtBmM,EAAOtT,EAAQ6vB,gBAAgBtZ,GAC/B0jB,EAAY3mB,EAAOA,EAAKvrC,MAAM66B,IAAM5pD,IACpC06D,EAAc7zE,KAAKg3G,kBAAoB72C,EAAQ0T,YAC/C0jC,EAAcp3C,EAAQg0B,aACtBqjB,EAAcr3C,EAAQi0B,aACtBmM,EAAkBpgC,EAAQs3C,iBAC1BC,EAAiB,EAEjBC,EAAiBx3C,EAAQw3C,gBAAkB33G,KAAK43G,UAEhDC,EAAO,KACPr7F,GAAS,EACTumD,EAAM2T,EACV,MAAO,EAAM,CAMT,GALI3T,EAAMq3B,IACNr3B,EAAM0Q,EAAKtrC,IAAI46B,IAAM,EACrB0Q,EAAOtT,EAAQ6vB,gBAAgBjtB,EAAK0Q,GACpC2mB,EAAY3mB,EAAOA,EAAKvrC,MAAM66B,IAAM5pD,KAEpC4pD,EAAM4T,EAAS,CACf,MAAO32E,KAAKm3G,OAAOzvG,OAAS8U,EAAQ,EAChCq7F,EAAO73G,KAAKm3G,OAAO9yF,MACnBrkB,KAAKwvC,QAAQ7/B,YAAYkoG,EAAKroE,SAElC,KACJ,CAEAqoE,EAAO73G,KAAKm3G,SAAS36F,GAChBq7F,IACDA,EAAO,CAACroE,QAAS,KAAMsoE,SAAU,KAAMC,WAAY,MACnDF,EAAKroE,QAAUzO,EAAIt6B,cAAc,OACjCoxG,EAAKC,SAAW3xG,SAASipC,eAAe,IACxCyoE,EAAKroE,QAAQloC,YAAYuwG,EAAKC,UAC9B93G,KAAKwvC,QAAQloC,YAAYuwG,EAAKroE,SAC9BxvC,KAAKm3G,OAAO36F,GAASq7F,GAGzB,IAAI1yE,EAAY,mBACZoyE,EAAYx0C,KACZ59B,GAAaoyE,EAAYx0C,IACzBy0C,EAAYz0C,KACZ59B,GAAaqyE,EAAYz0C,IACzB/iE,KAAKmnE,aAAapE,KAClB59B,GAAanlC,KAAKmnE,aAAapE,GAAK59B,WACpC0yE,EAAKroE,QAAQrK,WAAaA,IAC1B0yE,EAAKroE,QAAQrK,UAAYA,GAE7B,IAAIrB,EAASq8B,EAAQ0+B,aAAa97B,GAAO9zD,EAAO66D,WAAa,KAI7D,GAHIhmC,GAAU+zE,EAAKroE,QAAQ9oC,MAAMo9B,SAC7B+zE,EAAKroE,QAAQ9oC,MAAMo9B,OAASA,GAE5B+vC,EAAa,CACb,IAAI3tE,EAAI2tE,EAAY9Q,GACX,MAAL78D,IACAA,EAAI2tE,EAAY9Q,GAAO5C,EAAQgyB,cAAcpvB,GACrD,CAEA,GAAI78D,EAAG,CACE2xG,EAAKE,aACNF,EAAKE,WAAah3E,EAAIt6B,cAAc,QACpCoxG,EAAKroE,QAAQloC,YAAYuwG,EAAKE,aAE9B5yE,EAAY,uBAAyBj/B,EAChC,SAALA,GAAgB68D,GAAOq3B,GAAar3B,EAAM0Q,EAAKtrC,IAAI46B,IACnD59B,GAAa,cAEbA,GAAa,YACb0yE,EAAKE,WAAW5yE,WAAaA,IAC7B0yE,EAAKE,WAAW5yE,UAAYA,GAE5BrB,EAAS70B,EAAO66D,WAAa,KAC7B+tC,EAAKE,WAAWrxG,MAAMo9B,QAAUA,IAChC+zE,EAAKE,WAAWrxG,MAAMo9B,OAASA,EACvC,MACQ+zE,EAAKE,aACLF,EAAKroE,QAAQ7/B,YAAYkoG,EAAKE,YAC9BF,EAAKE,WAAa,MAI1B,IAAI1vG,EAAOqvG,EAAiBC,EACtBA,EAAevlG,QAAQ+tD,EAAS4C,GAChCA,EAAMw9B,EACRl4F,GAAQwvG,EAAKC,SAASz1G,OACtBw1G,EAAKC,SAASz1G,KAAOgG,GAEzB06D,GACJ,CAEA/iE,KAAKwvC,QAAQ9oC,MAAMo9B,OAAS70B,EAAO+oG,UAAY,MAE3Ch4G,KAAKi4G,aAAe93C,EAAQqwB,gBAC5BknB,EAAiBv3C,EAAQmH,YAAci5B,GAE3C,IAAI0W,EAAcU,EACZA,EAAenxC,SAASrG,EAASu3C,EAAgBzoG,GACjDyoG,EAAenuG,WAAW7B,OAASuH,EAAO+6D,eAE5CnjE,EAAU7G,KAAKk4G,UAAYl4G,KAAKm4G,kBACpClB,GAAepwG,EAAQgnC,KAAOhnC,EAAQ0qC,MAClC0lE,IAAgBj3G,KAAKi3G,aAAgBlxD,MAAMkxD,KAC3Cj3G,KAAKi3G,YAAcA,EACnBj3G,KAAKwvC,QAAQ9oC,MAAMujC,MAAQpkB,KAAKuyF,KAAKp4G,KAAKi3G,aAAe,KACzDj3G,KAAKihE,MAAM,oBAAqBg2C,GAExC,EAEAj3G,KAAKi4G,aAAc,EAEnBj4G,KAAKq4G,kBAAmB,EACxBr4G,KAAK43G,UAAY,GACjB53G,KAAKs4G,mBAAqB,SAAS/tE,GAC/BvqC,KAAK43G,WAAartE,GAAQ,CACtBi8B,SAAU,WAAY,MAAO,EAAE,EAC/Bp0D,QAAS,WAAY,MAAO,EAAE,EAEtC,EAEApS,KAAKu4G,mBAAqB,WACtB,OAAOv4G,KAAKq4G,gBAChB,EAEAr4G,KAAKg3G,kBAAmB,EACxBh3G,KAAK2vG,mBAAqB,SAASplE,GAC3BA,EACAxJ,EAAIswB,YAAYrxD,KAAKwvC,QAAS,uBAE9BzO,EAAIuwB,eAAetxD,KAAKwvC,QAAS,uBAErCxvC,KAAKg3G,iBAAmBzsE,EACxBvqC,KAAKk4G,SAAW,IACpB,EAEAl4G,KAAK4vG,mBAAqB,WACtB,OAAO5vG,KAAKg3G,gBAChB,EAEAh3G,KAAKm4G,gBAAkB,WACnB,IAAKn4G,KAAKwvC,QAAQL,WACd,MAAO,CAACtB,KAAM,EAAG0D,MAAO,GAC5B,IAAI7qC,EAAQq6B,EAAIqxB,cAAcpyD,KAAKwvC,QAAQL,YAI3C,OAHAnvC,KAAKk4G,SAAW,CAAC,EACjBl4G,KAAKk4G,SAASrqE,KAAO5f,SAASvnB,EAAM4gD,aAAe,GAAK,EACxDtnD,KAAKk4G,SAAS3mE,MAAQtjB,SAASvnB,EAAM8xG,eAAiB,EAC/Cx4G,KAAKk4G,QAChB,EAEAl4G,KAAK+nE,UAAY,SAASugB,GACtB,IAAIzhF,EAAU7G,KAAKk4G,UAAYl4G,KAAKm4G,kBAChCxqE,EAAO3tC,KAAKwvC,QAAQ5B,wBACxB,OAAI06C,EAAMt/D,EAAIniB,EAAQgnC,KAAOF,EAAKE,KACvB,UACP7tC,KAAKg3G,kBAAoB1uB,EAAMt/D,EAAI2kB,EAAK4D,MAAQ1qC,EAAQ0qC,MACjD,mBADX,CAEJ,CAEH,GAAE3sC,KAAKkyG,EAAO7uG,WAEfxC,EAAQqxG,OAASA,CAEjB,IAEA/uD,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,YAAY,gBAAgB,SAASS,EAAUllD,EAASE,GACpH,aAEA,IAAI8vE,EAAQ9qB,EAAS,YAAY8qB,MAC7B10C,EAAM4pB,EAAS,cAEf8tD,EAAS,SAAS1B,GAClB/2G,KAAKwvC,QAAUzO,EAAIt6B,cAAc,OACjCzG,KAAKwvC,QAAQrK,UAAY,6BACzB4xE,EAASzvG,YAAYtH,KAAKwvC,QAC9B,GAEA,WA4DI,SAASkpE,EAAeC,EAAIliE,EAAImiE,EAAIC,GAChC,OAAQF,EAAK,EAAI,IAAMliE,EAAK,EAAI,IAAMmiE,EAAK,EAAI,IAAMC,EAAK,EAAI,EAClE,CA5DA74G,KAAKk4G,SAAW,EAEhBl4G,KAAK84G,WAAa,SAASjyG,GACvB7G,KAAKk4G,SAAWrxG,CACpB,EACA7G,KAAK6nG,WAAa,SAAS1nC,GACvBngE,KAAKmgE,QAAUA,CACnB,EAEAngE,KAAK+4G,WAAa,SAASnhB,GACvB53F,KAAK43F,QAAUA,CACnB,EAEA53F,KAAKsQ,OAAS,SAASrB,GACfA,EAASA,GAAUjP,KAAKiP,OAC5B,GAAKA,EAAL,CAGAjP,KAAKiP,OAASA,EAGd,IAAIg3C,EAAO,GACX,IAAK,IAAIn9C,KAAO9I,KAAK43F,QAAS,CAC1B,IAAIH,EAASz3F,KAAK43F,QAAQ9uF,GAE1B,GAAK2uF,EAAOjzD,MAAZ,CAKA,IAAIA,EAAQizD,EAAOjzD,MAAMiyC,SAASxnE,EAAOynE,SAAUznE,EAAO0nE,SAC1D,IAAInyC,EAAMsa,UAGV,GADAta,EAAQA,EAAMsyC,cAAc92E,KAAKmgE,SAC7Bs3B,EAAO/2B,SAAU,CACjB,IAAIv5D,EAAMnH,KAAKg5G,QAAQx0E,EAAM0D,MAAM66B,IAAK9zD,GACpC4+B,EAAO7tC,KAAKk4G,SAAW1zE,EAAM0D,MAAM86B,OAAS/zD,EAAO+6D,eACvDytB,EAAO/2B,SAASza,EAAMzhB,EAAOqJ,EAAM1mC,EAAK8H,EAC5C,KAA0B,YAAfwoF,EAAOh2F,KACdzB,KAAKi5G,mBAAmBhzD,EAAMzhB,EAAOizD,EAAO/K,MAAOz9E,GAC7B,cAAfwoF,EAAOh2F,KACdzB,KAAKk5G,qBAAqBjzD,EAAMzhB,EAAOizD,EAAO/K,MAAOz9E,GAC9Cu1B,EAAM6gC,cACM,QAAfoyB,EAAOh2F,KACPzB,KAAKm5G,eAAelzD,EAAMzhB,EAAOizD,EAAO/K,MAAOz9E,GAE/CjP,KAAKo5G,oBAAoBnzD,EAAMzhB,EAAOizD,EAAO/K,MAAOz9E,GAExDjP,KAAK8sF,qBAAqB7mC,EAAMzhB,EAAOizD,EAAO/K,MAAP+K,sBAA2CxoF,EApBtF,MAFIwoF,EAAOnnF,OAAO21C,EAAMjmD,KAAMA,KAAKmgE,QAASlxD,EAwBhD,CACAjP,KAAKwvC,QAAQuI,UAAYkO,EAAK/iC,KAAK,GAnCzB,CAoCd,EAEAljB,KAAKg5G,QAAU,SAASj2C,EAAKgH,GACzB,OAAQhH,EAAMgH,EAAYsvC,gBAAkBtvC,EAAYD,UAC5D,EAKA9pE,KAAKm5G,eAAiB,SAASG,EAAe90E,EAAOkoD,EAAO3iB,EAAawvC,GASrE,IARA,IAAIp5C,EAAUngE,KAAKmgE,QACfj4B,EAAQ1D,EAAM0D,MAAM66B,IACpB56B,EAAM3D,EAAM2D,IAAI46B,IAChBA,EAAM76B,EACN4E,EAAO,EACPD,EAAO,EACP/e,EAAOqyC,EAAQ6+B,uBAAuBj8B,GACtCy2C,EAAY,IAAI/jC,EAAM1S,EAAKv+B,EAAM0D,MAAM86B,OAAQD,EAAKl2B,GACjDk2B,GAAO56B,EAAK46B,IACfy2C,EAAUtxE,MAAM66B,IAAMy2C,EAAUrxE,IAAI46B,IAAMA,EAC1Cy2C,EAAUtxE,MAAM86B,OAASD,GAAO76B,EAAQ1D,EAAM0D,MAAM86B,OAAS7C,EAAQ4+B,iBAAiBh8B,GACtFy2C,EAAUrxE,IAAI66B,OAASl1C,EACvBgf,EAAOD,EACPA,EAAO/e,EACPA,EAAOi1C,EAAM,EAAI56B,EAAMg4B,EAAQ6+B,uBAAuBj8B,EAAM,GAAKA,GAAO56B,EAAM,EAAI3D,EAAM2D,IAAI66B,OAC5FhjE,KAAK8sF,qBAAqBwsB,EAAeE,EACrC9sB,GAAS3pB,GAAO76B,EAAS,aAAe,IAAM,UACxCwwE,EAAe31C,GAAO76B,GAAS66B,GAAO76B,EAAQ,GAAK1D,EAAM0D,MAAM86B,OAAQl2B,EAAOD,EAAMA,EAAO/e,EAAMi1C,GAAO56B,GAC9G4hC,EAAahH,GAAO56B,EAAM,EAAI,EAAGoxE,EAE7C,EACAv5G,KAAKo5G,oBAAsB,SAASE,EAAe90E,EAAOkoD,EAAOz9E,EAAQsqG,GACrE,IAAI1yG,EAAU7G,KAAKk4G,SACfp0E,EAAS70B,EAAO66D,WAChB3iE,EAAMnH,KAAKg5G,QAAQx0E,EAAM0D,MAAM66B,IAAK9zD,GACpC4+B,EAAOhnC,EAAU29B,EAAM0D,MAAM86B,OAAS/zD,EAAO+6D,eACjDuvC,EAAaA,GAAc,GAE3BD,EAAc5sG,KACV,eAAgBggF,EAAO,8BACvB,UAAW5oD,EAAQ,MACnB,WACA,OAAQ38B,EAAK,MACb,QAAS0mC,EAAM,MAAO0rE,EAAY,YAEtCpyG,EAAMnH,KAAKg5G,QAAQx0E,EAAM2D,IAAI46B,IAAK9zD,GAClC,IAAIg7B,EAAQzF,EAAM2D,IAAI66B,OAAS/zD,EAAO+6D,eAUtC,GARAsvC,EAAc5sG,KACV,eAAgBggF,EAAO,qBACvB,UAAW5oD,EAAQ,MACnB,SAAUmG,EAAO,MACjB,OAAQ9iC,EAAK,MACb,QAASN,EAAS,MAAO0yG,EAAY,YAEzCz1E,GAAUU,EAAM2D,IAAI46B,IAAMv+B,EAAM0D,MAAM66B,IAAM,GAAK9zD,EAAO66D,aACpDhmC,GAAU,GAAd,CAEA38B,EAAMnH,KAAKg5G,QAAQx0E,EAAM0D,MAAM66B,IAAM,EAAG9zD,GAExC,IAAIwqG,GAAej1E,EAAM0D,MAAM86B,OAAS,EAAI,IAAMx+B,EAAM2D,IAAI66B,OAAS,EAAI,GAEzEs2C,EAAc5sG,KACV,eAAgBggF,EAAQ+sB,EAAc,UAAYA,EAAc,GAAK,YACrE,UAAW31E,EAAQ,MACnB,WACA,OAAQ38B,EAAK,MACb,QAASN,EAAS,MAAO0yG,EAAY,WAV/B,CAYd,EACAv5G,KAAK8sF,qBAAuB,SAASwsB,EAAe90E,EAAOkoD,EAAOz9E,EAAQyqG,EAAaH,GACnF,IAAIz1E,EAAS70B,EAAO66D,WAChB7/B,GAASzF,EAAM2D,IAAI66B,QAAU02C,GAAe,GAAKl1E,EAAM0D,MAAM86B,QAAU/zD,EAAO+6D,eAE9E7iE,EAAMnH,KAAKg5G,QAAQx0E,EAAM0D,MAAM66B,IAAK9zD,GACpC4+B,EAAO7tC,KAAKk4G,SAAW1zE,EAAM0D,MAAM86B,OAAS/zD,EAAO+6D,eAEvDsvC,EAAc5sG,KACV,eAAgBggF,EAAO,YACvB,UAAW5oD,EAAQ,MACnB,SAAUmG,EAAO,MACjB,OAAQ9iC,EAAK,MACb,QAAS0mC,EAAM,MAAO0rE,GAAc,GAAI,WAEhD,EAEAv5G,KAAKi5G,mBAAqB,SAASK,EAAe90E,EAAOkoD,EAAOz9E,EAAQsqG,GACpE,IAAIpyG,EAAMnH,KAAKg5G,QAAQx0E,EAAM0D,MAAM66B,IAAK9zD,GACpC60B,EAAS70B,EAAO66D,WAChBtlC,EAAM0D,MAAM66B,KAAOv+B,EAAM2D,IAAI46B,MAC7Bj/B,GAAU9jC,KAAKg5G,QAAQx0E,EAAM2D,IAAI46B,IAAK9zD,GAAU9H,GAEpDmyG,EAAc5sG,KACV,eAAgBggF,EAAO,YACvB,UAAW5oD,EAAQ,MACnB,OAAQ38B,EAAK,MACb,kBAAmBoyG,GAAc,GAAI,WAE7C,EAEAv5G,KAAKk5G,qBAAuB,SAASI,EAAe90E,EAAOkoD,EAAOz9E,EAAQsqG,GACtE,IAAIpyG,EAAMnH,KAAKg5G,QAAQx0E,EAAM0D,MAAM66B,IAAK9zD,GACpC60B,EAAS70B,EAAO66D,WAEpBwvC,EAAc5sG,KACV,eAAgBggF,EAAO,YACvB,UAAW5oD,EAAQ,MACnB,OAAQ38B,EAAK,MACb,kBAAmBoyG,GAAc,GAAI,WAE7C,CAEH,GAAE30G,KAAK6zG,EAAOxwG,WAEfxC,EAAQgzG,OAASA,CAEjB,IAEA1wD,IAAImC,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,oBAAoB,0BAA0B,SAASS,EAAUllD,EAASE,GAC/K,aAEA,IAAIouD,EAAMpJ,EAAS,cACf5pB,EAAM4pB,EAAS,cACf9pD,EAAO8pD,EAAS,eAEhBqjB,GADYrjB,EAAS,oBACNA,EAAS,wBAAwBqjB,cAEhD2rC,EAAO,SAAS5C,GAChB/2G,KAAKwvC,QAAUzO,EAAIt6B,cAAc,OACjCzG,KAAKwvC,QAAQrK,UAAY,2BACzB4xE,EAASzvG,YAAYtH,KAAKwvC,SAC1BxvC,KAAK45G,eAAiB55G,KAAK45G,eAAejuG,KAAK3L,KACnD,GAEA,WAEI+zD,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAK65G,SAAW,IAChB75G,KAAK85G,YAAc,IACnB95G,KAAK+5G,cAAgB,IACrB/5G,KAAKg6G,SAAWh6G,KAAK85G,YACrB95G,KAAKi6G,SAAW,IAChBj6G,KAAKk6G,WAAa,IAClBl6G,KAAKk4G,SAAW,EAEhBl4G,KAAK45G,eAAiB,WAClB,IAAII,EAAqD,MAA1Ch6G,KAAKmgE,QAAQpP,IAAIs4B,sBAC3BrpF,KAAK85G,YACL95G,KAAK+5G,cACV,GAAI/5G,KAAKg6G,UAAYA,EAEjB,OADAh6G,KAAKg6G,SAAWA,GACT,CAEf,EAEAh6G,KAAK84G,WAAa,SAASjyG,GACvB7G,KAAKk4G,SAAWrxG,EAChB7G,KAAKwvC,QAAQ9oC,MAAMG,QAAU,KAAOA,EAAU,IAClD,EAEA7G,KAAKm6G,cAAgB,WACjB,OAAOn6G,KAAKo6G,aAAaC,eAAev2E,QAAU,CACtD,EAEA9jC,KAAKqgG,kBAAoB,WACrB,OAAOrgG,KAAKo6G,aAAaC,eAAepwE,OAAS,CACrD,EAEAjqC,KAAKkgG,gBAAkB,SAASoa,GAC5Bt6G,KAAKo6G,aAAeE,EACpBt6G,KAAKo6G,aAAa75G,GAAG,sBAAuB,SAAS4C,GACjDnD,KAAKuuE,QAAQ,sBAAuBprE,EACxC,EAAEwI,KAAK3L,OACPA,KAAKu6G,kBACT,EAEAv6G,KAAKw6G,oBAAsB,WACvBx6G,KAAKo6G,aAAaI,qBACtB,EACAx6G,KAAKu6G,iBAAmB,WACpB,OAAOv6G,KAAKy6G,sBAAwBz6G,KAAKo6G,aAAaG,kBAC1D,EACAv6G,KAAK6nG,WAAa,SAAS1nC,GACvBngE,KAAKmgE,QAAUA,EACXA,GACAngE,KAAK06G,mBACb,EAEA16G,KAAK+uG,gBAAiB,EACtB/uG,KAAK8uG,kBAAoB,SAASC,GAC9B,OAAI/uG,KAAK+uG,gBAAkBA,IAG3B/uG,KAAK+uG,eAAiBA,EACtB/uG,KAAK06G,qBACE,EACX,EAEA16G,KAAK+0G,qBAAsB,EAC3B/0G,KAAKivG,uBAAyB,SAAS70D,GACnC,OAAIp6C,KAAK+0G,qBAAuB36D,IAGhCp6C,KAAK+0G,oBAAsB36D,EAC3Bp6C,KAAK06G,qBACE,EACX,EAEA16G,KAAK26G,YAAc,GACnB36G,KAAKoqG,gBACLpqG,KAAK06G,kBAAoB,WACrB,IAAItgC,EAAUp6E,KAAKmgE,QAAQka,aAC3Br6E,KAAKo6E,QAAUA,EAEf,IADA,IAAIwgC,EAAS56G,KAAK26G,YAAc,CAAC,GACxB50G,EAAI,EAAGA,EAAIq0E,EAAU,EAAGr0E,IACzB/F,KAAK+uG,eACL6L,EAAOluG,KAAK,iDACN7L,EAAKu6D,aAAap7D,KAAKi6G,SAAUl0G,GACjC,WAEN60G,EAAOluG,KAAK7L,EAAKu6D,aAAa,IAAKr1D,IAG3C,GAAI/F,KAAK+0G,oBAAqB,CAC1B/0G,KAAK66G,eAAkB,mBACvB,IAAI11E,EAAY,mBACZ21E,EAAa,GACbC,EAAW,GACf,GAAI/6G,KAAK+uG,eAAgB,CACrB5pE,GAAa,iBACb21E,EAAa,uBACbC,EAAW,qBACX,IAAIC,EAAen6G,EAAKu6D,aAAap7D,KAAKk6G,WAAYl6G,KAAKo6E,SACvD6gC,EAAap6G,EAAKu6D,aAAap7D,KAAKi6G,SAAUj6G,KAAKo6E,QAC3D,MACQ4gC,EAAen6G,EAAKu6D,aAAa,IAAKp7D,KAAKo6E,SAC3C6gC,EAAaD,EAGrBh7G,KAAK26G,YAAY,KAAO,gBAAkBx1E,EAAY21E,EAAa,KAAOE,EAAe,UACzFh7G,KAAK26G,YAAY,MAAQ,gBAAkBx1E,EAAY41E,EAAW,KAAOE,EAAa,SAC1F,CACJ,EAEAj7G,KAAKqsG,YAAc,SAASp9F,EAAQynE,EAAUC,GACtC32E,KAAKiP,OAAO0nE,SAAW1nE,EAAO0nE,SAC9B32E,KAAKiP,OAAOynE,UAAYznE,EAAOynE,UAC/B12E,KAAKk7G,YAAYjsG,GAErBjP,KAAKiP,OAASA,EAQd,IANA,IAAI05B,EAAQ9iB,KAAKkf,IAAI2xC,EAAUznE,EAAOynE,UAClCnyD,EAAOsB,KAAKif,IAAI6xC,EAAS1nE,EAAO0nE,SAEhCwkC,EAAen7G,KAAKwvC,QAAQnB,WAC5B+sE,EAAkB,EAEbr4C,EAAM9zD,EAAOynE,SAAU3T,EAAMp6B,EAAOo6B,IAAO,CAChD,IAAIiX,EAAWh6E,KAAKmgE,QAAQ8Z,YAAYlX,GACxC,GAAIiX,EAAU,CACV,GAAIA,EAASqT,YAAY1kD,GAAQ,CAC7BA,EAAQqxC,EAAS9xC,MAAM66B,IACvB,KACJ,CACIA,EAAMiX,EAAS7xC,IAAI46B,GAE3B,CACAq4C,GACJ,CAEIr4C,EAAMp6B,EACNqxC,EAAWh6E,KAAKmgE,QAAQ6vB,gBAAgBjtB,GAD5C,IAEIq3B,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,IAEhD,MAAO,EAAM,CAMT,GALI4pD,EAAMq3B,IACNr3B,EAAMiX,EAAS7xC,IAAI46B,IAAI,EACvBiX,EAAWh6E,KAAKmgE,QAAQ6vB,gBAAgBjtB,EAAKiX,GAC7CogB,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAK5pD,KAE3C4pD,EAAMx+C,EACN,MAEJ,IAAI82F,EAAcF,EAAaC,KAC/B,GAAIC,EAAa,CACb,IAAIp1D,EAAO,GACXjmD,KAAKs7G,YACDr1D,EAAM8c,GAAM/iE,KAAKu7G,iBAAkBx4C,GAAOq3B,GAAYpgB,GAE1DqhC,EAAY30G,MAAMo9B,OAAS70B,EAAO66D,WAAa9pE,KAAKmgE,QAAQ0+B,aAAa97B,GAAO,KAChFs4C,EAAYtjE,UAAYkO,EAAK/iC,KAAK,GACtC,CACA6/C,GACJ,CACJ,EAEA/iE,KAAKk7G,YAAc,SAASjsG,GACxB,IAAIusG,EAAYx7G,KAAKiP,OAGrB,GAFAjP,KAAKiP,OAASA,GAETusG,GAAaA,EAAU7kC,QAAU1nE,EAAOynE,SACzC,OAAO12E,KAAKsQ,OAAOrB,GAEvB,GAAIA,EAAO0nE,QAAU6kC,EAAU9kC,SAC3B,OAAO12E,KAAKsQ,OAAOrB,GAEvB,IAAIY,EAAK7P,KAAKwvC,QACd,GAAIgsE,EAAU9kC,SAAWznE,EAAOynE,SAC5B,IAAK,IAAI3T,EAAI/iE,KAAKmgE,QAAQ8vB,kBAAkBurB,EAAU9kC,SAAUznE,EAAOynE,SAAW,GAAI3T,EAAI,EAAGA,IACzFlzD,EAAGF,YAAYE,EAAGs/B,YAE1B,GAAIqsE,EAAU7kC,QAAU1nE,EAAO0nE,QAC3B,IAAS5T,EAAI/iE,KAAKmgE,QAAQ8vB,kBAAkBhhF,EAAO0nE,QAAU,EAAG6kC,EAAU7kC,SAAU5T,EAAI,EAAGA,IACvFlzD,EAAGF,YAAYE,EAAG21C,WAE1B,GAAIv2C,EAAOynE,SAAW8kC,EAAU9kC,SAAU,CACtC,IAAI+kC,EAAWz7G,KAAK07G,qBAAqBzsG,EAAQA,EAAOynE,SAAU8kC,EAAU9kC,SAAW,GACnF7mE,EAAGs/B,WACHt/B,EAAG07B,aAAakwE,EAAU5rG,EAAGs/B,YAE7Bt/B,EAAGvI,YAAYm0G,EACvB,CAEA,GAAIxsG,EAAO0nE,QAAU6kC,EAAU7kC,QAAS,CAChC8kC,EAAWz7G,KAAK07G,qBAAqBzsG,EAAQusG,EAAU7kC,QAAU,EAAG1nE,EAAO0nE,SAC/E9mE,EAAGvI,YAAYm0G,EACnB,CACJ,EAEAz7G,KAAK07G,qBAAuB,SAASzsG,EAAQynE,EAAUC,GACnD,IAAI8kC,EAAWz7G,KAAKwvC,QAAQ4uB,cAAcu9C,yBACtC54C,EAAM2T,EACNsD,EAAWh6E,KAAKmgE,QAAQ6vB,gBAAgBjtB,GACxCq3B,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,IAEhD,MAAO,EAAM,CAMT,GALI4pD,EAAMq3B,IACNr3B,EAAMiX,EAAS7xC,IAAI46B,IAAI,EACvBiX,EAAWh6E,KAAKmgE,QAAQ6vB,gBAAgBjtB,EAAKiX,GAC7CogB,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,KAE5C4pD,EAAM4T,EACN,MAEJ,IAAItvE,EAAY05B,EAAIt6B,cAAc,OAE9Bw/C,EAAO,GAGX,GAFAjmD,KAAKs7G,YAAYr1D,EAAM8c,GAAK,EAAOA,GAAOq3B,GAAYpgB,GACtD3yE,EAAU0wC,UAAYkO,EAAK/iC,KAAK,IAC5BljB,KAAKu7G,iBACLl0G,EAAU89B,UAAY,iBACtBs2E,EAASn0G,YAAYD,GACrBA,EAAUX,MAAMo9B,OAAS70B,EAAO66D,WAAa9pE,KAAKmgE,QAAQ0+B,aAAa97B,GAAO,UAG9E,MAAM17D,EAAU8nC,WACZssE,EAASn0G,YAAYD,EAAU8nC,YAGvC4zB,GACJ,CACA,OAAO04C,CACX,EAEAz7G,KAAKsQ,OAAS,SAASrB,GACnBjP,KAAKiP,OAASA,EAEd,IAAIg3C,EAAO,GACPywB,EAAWznE,EAAOynE,SAAUC,EAAU1nE,EAAO0nE,QAE7C5T,EAAM2T,EACNsD,EAAWh6E,KAAKmgE,QAAQ6vB,gBAAgBjtB,GACxCq3B,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAM5pD,IAEhD,MAAO,EAAM,CAMT,GALI4pD,EAAMq3B,IACNr3B,EAAMiX,EAAS7xC,IAAI46B,IAAI,EACvBiX,EAAWh6E,KAAKmgE,QAAQ6vB,gBAAgBjtB,EAAKiX,GAC7CogB,EAAYpgB,EAAWA,EAAS9xC,MAAM66B,IAAK5pD,KAE3C4pD,EAAM4T,EACN,MAEA32E,KAAKu7G,kBACLt1D,EAAKv5C,KAAK,6CAA8CuC,EAAO66D,WAAW9pE,KAAKmgE,QAAQ0+B,aAAa97B,GAAM,QAE9G/iE,KAAKs7G,YAAYr1D,EAAM8c,GAAK,EAAOA,GAAOq3B,GAAYpgB,GAElDh6E,KAAKu7G,kBACLt1D,EAAKv5C,KAAK,UAEdq2D,GACJ,CACA/iE,KAAKwvC,QAAQuI,UAAYkO,EAAK/iC,KAAK,GACvC,EAEAljB,KAAK47G,WAAa,CACd,MAAQ,EACR,QAAU,EACV,QAAU,GAGd57G,KAAK67G,aAAe,SAASvC,EAAe1a,EAAc5qD,EAAO9yC,GAC7D,IAAI2B,EAAO7C,KACP87G,EAAa,yhBACbC,EAAc,SAAS71G,EAAGG,EAAGP,EAAGk2G,EAAQC,GACxC,GAAI51G,EACA,OAAOxD,EAAKksG,eACN,mDAAqDluG,EAAKu6D,aAAav4D,EAAKq3G,WAAYh0G,EAAEwB,QAAU,UACpGxB,EACH,GAAS,KAALA,EACP,MAAO,QACJ,GAAS,KAALA,EACP,MAAO,QACJ,GAAS,KAALA,EACP,MAAO,QACJ,GAAS,MAALA,EAAW,CAClB,IAAIk0E,EAAUv3E,EAAKs9D,QAAQu+B,iBAAiBE,EAAeod,GAE3D,OADApd,GAAgBxkB,EAAU,EACnBv3E,EAAK83G,YAAYvgC,EAC5B,CAAO,GAAS,KAALl0E,EAAe,CACtB,IAAIg2G,EAAar5G,EAAKksG,eAAiB,4CAA8C,UACjFliF,EAAQhqB,EAAKksG,eAAiBlsG,EAAKq3G,WAAa,GAEpD,OADAtb,GAAgB,EACT,gBAAkBsd,EAAa,kBACJ,EAA7Br5G,EAAKoM,OAAO+6D,eACb,OAASn9C,EAAQ,SACzB,CAAO,OAAI/mB,EACA,+DAAiEjD,EAAKq3G,WAAa,WAE1Ftb,GAAgB,EACT,sCAC2B,EAA7B/7F,EAAKoM,OAAO+6D,eACb,OAAS9jE,EAAI,UAEzB,EAEIqgB,EAASrlB,EAAM+d,QAAQ68F,EAAYC,GAEvC,GAAK/7G,KAAK47G,WAAW5nE,EAAMvyC,MAQvB63G,EAAc5sG,KAAK6Z,OARW,CAC9B,IAAI0nB,EAAU,OAAS+F,EAAMvyC,KAAKwd,QAAQ,MAAO,SAC7CvY,EAAQ,GACM,QAAdstC,EAAMvyC,OACNiF,EAAQ,iBAAoBstC,EAAM9yC,MAAMwG,OAAS1H,KAAKiP,OAAO+6D,eAAkB,SACnFsvC,EAAc5sG,KAAK,gBAAiBuhC,EAAS,IAAKvnC,EAAO,IAAK6f,EAAQ,UAC1E,CAIA,OAAOq4E,EAAe19F,EAAMwG,MAChC,EAEA1H,KAAKm8G,kBAAoB,SAAS7C,EAAep4G,EAAO6jC,GACpD,IAAIq3E,EAAOl7G,EAAMwe,OAAO1f,KAAK66G,gBAC7B,OAAIuB,GAAQ,GAAKA,GAAQr3E,EACd7jC,EACK,KAAZA,EAAM,IACNk7G,GAAQA,EAAOp8G,KAAKo6E,QACpBk/B,EAAc5sG,KAAK7L,EAAKu6D,aAAap7D,KAAK26G,YAAY,KAAMyB,EAAKp8G,KAAKo6E,UAC/Dl5E,EAAM8gB,OAAOo6F,IACD,MAAZl7G,EAAM,IACbo4G,EAAc5sG,KAAK7L,EAAKu6D,aAAap7D,KAAK26G,YAAY,MAAOyB,IACtDl7G,EAAM8gB,OAAOo6F,IAEjBl7G,CACX,EAEAlB,KAAKq8G,mBAAqB,SAAS/C,EAAet7B,EAAQ6f,EAAQye,GAM9D,IALA,IAAI1vE,EAAQ,EACR1uB,EAAQ,EACRq+F,EAAa1e,EAAO,GACpBe,EAAe,EAEV74F,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAAK,CACpC,IAAIiuC,EAAQgqC,EAAOj4E,GACf7E,EAAQ8yC,EAAM9yC,MAClB,GAAS,GAAL6E,GAAU/F,KAAK+0G,oBAAqB,CAGpC,GAFAnoE,EAAQ1rC,EAAMwG,OACdxG,EAAQlB,KAAKm8G,kBAAkB7C,EAAep4G,EAAOq7G,IAChDr7G,EACD,SACJ0rC,GAAS1rC,EAAMwG,MACnB,CAEA,GAAIklC,EAAQ1rC,EAAMwG,OAAS60G,EACvB3d,EAAe5+F,KAAK67G,aAAavC,EAAe1a,EAAc5qD,EAAO9yC,GACrE0rC,GAAS1rC,EAAMwG,WACZ,CACH,MAAOklC,EAAQ1rC,EAAMwG,QAAU60G,EAC3B3d,EAAe5+F,KAAK67G,aAChBvC,EAAe1a,EACf5qD,EAAO9yC,EAAM+vC,UAAU,EAAGsrE,EAAa3vE,IAE3C1rC,EAAQA,EAAM+vC,UAAUsrE,EAAa3vE,GACrCA,EAAQ2vE,EAEHD,GACDhD,EAAc5sG,KAAK,SACf,uCACA1M,KAAKiP,OAAO66D,WAAY,QAIhCwvC,EAAc5sG,KAAK7L,EAAKu6D,aAAa,IAAQyiC,EAAOzwE,SAEpDlP,IACA0gF,EAAe,EACf2d,EAAa1e,EAAO3/E,IAAU9c,OAAOy6F,UAErB,GAAhB36F,EAAMwG,SACNklC,GAAS1rC,EAAMwG,OACfk3F,EAAe5+F,KAAK67G,aAChBvC,EAAe1a,EAAc5qD,EAAO9yC,GAGhD,CACJ,CACJ,EAEAlB,KAAKw8G,kBAAoB,SAASlD,EAAet7B,GAC7C,IAAI4gB,EAAe,EACf5qD,EAAQgqC,EAAO,GACf98E,EAAQ8yC,EAAM9yC,MACdlB,KAAK+0G,sBACL7zG,EAAQlB,KAAKm8G,kBAAkB7C,EAAep4G,IAC9CA,IACA09F,EAAe5+F,KAAK67G,aAAavC,EAAe1a,EAAc5qD,EAAO9yC,IACzE,IAAK,IAAI6E,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAC/BiuC,EAAQgqC,EAAOj4E,GACf7E,EAAQ8yC,EAAM9yC,MACd09F,EAAe5+F,KAAK67G,aAAavC,EAAe1a,EAAc5qD,EAAO9yC,EAE7E,EACAlB,KAAKs7G,YAAc,SAAShC,EAAev2C,EAAKu5C,EAActiC,GAI1D,GAHKA,GAAwB,GAAZA,IACbA,EAAWh6E,KAAKmgE,QAAQ8Z,YAAYlX,IAEpCiX,EACA,IAAIgE,EAASh+E,KAAKy8G,mBAAmB15C,EAAKiX,QAEtCgE,EAASh+E,KAAKmgE,QAAQqjB,UAAUzgB,GAYxC,GATKu5C,GACDhD,EAAc5sG,KACV,uCACI1M,KAAKiP,OAAO66D,YACR9pE,KAAKu7G,iBAAmB,EAAGv7G,KAAKmgE,QAAQ0+B,aAAa97B,IACtD,QAIXib,EAAOt2E,OAAQ,CACf,IAAIm2F,EAAS79F,KAAKmgE,QAAQi/B,gBAAgBr8B,GACtC86B,GAAUA,EAAOn2F,OACjB1H,KAAKq8G,mBAAmB/C,EAAet7B,EAAQ6f,EAAQye,GAEvDt8G,KAAKw8G,kBAAkBlD,EAAet7B,EAC9C,CAEIh+E,KAAK+uG,iBACD/0B,IACAjX,EAAMiX,EAAS7xC,IAAI46B,KAEvBu2C,EAAc5sG,KACV,iDACAq2D,GAAO/iE,KAAKmgE,QAAQmH,YAAc,EAAItnE,KAAK65G,SAAW75G,KAAKg6G,SAC3D,YAGHsC,GACDhD,EAAc5sG,KAAK,SAC3B,EAEA1M,KAAKy8G,mBAAqB,SAAS15C,EAAKiX,GACpC,IAAI7Z,EAAUngE,KAAKmgE,QACfu8C,EAAe,GAEnB,SAASC,EAAU3+B,EAAQlyB,EAAMviC,GAC7B,IAAIN,EAAM,EAAG6gB,EAAM,EACnB,MAAQA,EAAMk0C,EAAO/0D,GAAK/nB,MAAMwG,OAAUokD,EAItC,GAHAhiB,GAAOk0C,EAAO/0D,GAAK/nB,MAAMwG,OACzBuhB,IAEIA,GAAO+0D,EAAOt2E,OACd,OAER,GAAIoiC,GAAOgiB,EAAM,CACb,IAAI5qD,EAAQ88E,EAAO/0D,GAAK/nB,MAAM+vC,UAAU6a,EAAOhiB,GAC3C5oC,EAAMwG,OAAU6hB,EAAKuiC,IACrB5qD,EAAQA,EAAM+vC,UAAU,EAAG1nB,EAAKuiC,IAEpC4wD,EAAahwG,KAAK,CACdjL,KAAMu8E,EAAO/0D,GAAKxnB,KAClBP,MAAOA,IAGX4oC,EAAMgiB,EAAO5qD,EAAMwG,OACnBuhB,GAAO,CACX,CAEA,MAAO6gB,EAAMvgB,GAAMN,EAAM+0D,EAAOt2E,OAAQ,CAChCxG,EAAQ88E,EAAO/0D,GAAK/nB,MACpBA,EAAMwG,OAASoiC,EAAMvgB,EACrBmzF,EAAahwG,KAAK,CACdjL,KAAMu8E,EAAO/0D,GAAKxnB,KAClBP,MAAOA,EAAM+vC,UAAU,EAAG1nB,EAAKugB,KAGnC4yE,EAAahwG,KAAKsxE,EAAO/0D,IAC7B6gB,GAAO5oC,EAAMwG,OACbuhB,GAAO,CACX,CACJ,CAEA,IAAI+0D,EAAS7d,EAAQqjB,UAAUzgB,GAgB/B,OAfAiX,EAAS3rD,MAAK,SAASm/D,EAAazqB,EAAKC,EAAQyuB,EAAYlE,GACtC,MAAfC,EACAkvB,EAAahwG,KAAK,CACdjL,KAAM,OACNP,MAAOssF,KAGPD,IACAvP,EAAS7d,EAAQqjB,UAAUzgB,IAE3Bib,EAAOt2E,QACPi1G,EAAU3+B,EAAQyT,EAAYzuB,GAE1C,GAAGgX,EAAS7xC,IAAI46B,IAAK/iE,KAAKmgE,QAAQ8T,QAAQ+F,EAAS7xC,IAAI46B,KAAKr7D,QAErDg1G,CACX,EAEA18G,KAAKu7G,eAAiB,WAClB,OAAOv7G,KAAKmgE,QAAQi8B,gBACxB,EAEAp8F,KAAKgL,QAAU,WACX+/D,cAAc/qE,KAAKy6G,uBACfz6G,KAAK48G,cACL58G,KAAK48G,aAAapxG,WAAWmE,YAAY3P,KAAK48G,qBAC3C58G,KAAK48G,YAChB,CAEH,GAAEh4G,KAAK+0G,EAAK1xG,WAEbxC,EAAQk0G,KAAOA,CAEf,IAEA5xD,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,gBAAgB,SAASS,EAAUllD,EAASE,GACxG,aAEA,IACIk3G,EADA97E,EAAM4pB,EAAS,cAGfmyD,EAAS,SAAS/F,GAClB/2G,KAAKwvC,QAAUzO,EAAIt6B,cAAc,OACjCzG,KAAKwvC,QAAQrK,UAAY,6BACzB4xE,EAASzvG,YAAYtH,KAAKwvC,cAEZr/B,IAAV0sG,IACAA,IAAU,YAAa78G,KAAKwvC,QAAQ9oC,QAExC1G,KAAK4kD,WAAY,EACjB5kD,KAAK6zG,YAAa,EAClB7zG,KAAK+8G,cAAgB,IACrB/8G,KAAKg9G,gBAAiB,EAEtBh9G,KAAKi9G,QAAU,GACfj9G,KAAKsgD,OAAStgD,KAAKk9G,YACnBn8E,EAAIswB,YAAYrxD,KAAKwvC,QAAS,sBAC9BxvC,KAAKm9G,gBAAkBN,EACjB78G,KAAKo9G,kBACLp9G,KAAKq9G,gBAAgB1xG,KAAK3L,KACpC,GAEA,WAEIA,KAAKo9G,kBAAoB,SAASp7G,GAE9B,IADA,IAAIi7G,EAAUj9G,KAAKi9G,QACVl3G,EAAIk3G,EAAQv1G,OAAQ3B,KACzBk3G,EAAQl3G,GAAGW,MAAM24C,WAAar9C,EAAM,GAAK,QACjD,EACAhC,KAAKq9G,eAAiB,SAASr7G,GAE3B,IADA,IAAIi7G,EAAUj9G,KAAKi9G,QACVl3G,EAAIk3G,EAAQv1G,OAAQ3B,KACzBk3G,EAAQl3G,GAAGW,MAAMo2D,QAAU96D,EAAM,GAAK,GAC9C,EAGAhC,KAAKk4G,SAAW,EAChBl4G,KAAK84G,WAAa,SAASjyG,GACvB7G,KAAKk4G,SAAWrxG,CACpB,EAEA7G,KAAK6nG,WAAa,SAAS1nC,GACvBngE,KAAKmgE,QAAUA,CACnB,EAEAngE,KAAK8qE,YAAc,SAASwyC,GACpBA,GAAYt9G,KAAK6zG,aACjB7zG,KAAK6zG,WAAayJ,EAClBt9G,KAAKu9G,eAEb,EAEAv9G,KAAKw9G,iBAAmB,SAAST,GACzBA,GAAiB/8G,KAAK+8G,gBACtB/8G,KAAK+8G,cAAgBA,EACrB/8G,KAAKu9G,eAEb,EAEAv9G,KAAK4zG,kBAAoB,SAASoJ,GAC1BA,GAAkBh9G,KAAKg9G,gBAAmBH,IAC1C78G,KAAKg9G,eAAiBA,EACtBj8E,EAAIywB,YAAYxxD,KAAKwvC,QAAS,sBAAuBwtE,GACrDh9G,KAAKm9G,gBAAe,GACpBn9G,KAAKm9G,eAAkBn9G,KAAmB,eAAE2L,KAAK3L,MACjDA,KAAKu9G,eAEb,EAEAv9G,KAAKk9G,UAAY,WACb,IAAIrtG,EAAKkxB,EAAIt6B,cAAc,OAI3B,OAHAoJ,EAAGs1B,UAAY,aACfnlC,KAAKwvC,QAAQloC,YAAYuI,GACzB7P,KAAKi9G,QAAQvwG,KAAKmD,GACXA,CACX,EAEA7P,KAAKy9G,aAAe,WAChB,GAAIz9G,KAAKi9G,QAAQv1G,OAAS,EAAG,CACzB,IAAImI,EAAK7P,KAAKi9G,QAAQ54F,MAEtB,OADAxU,EAAGrE,WAAWmE,YAAYE,GACnBA,CACX,CACJ,EAEA7P,KAAKisG,WAAa,WACdjsG,KAAK4kD,WAAY,EACjB7jB,EAAIswB,YAAYrxD,KAAKwvC,QAAS,sBAC9BxvC,KAAKu9G,cACT,EAEAv9G,KAAK+rG,WAAa,WACd/rG,KAAK4kD,WAAY,EACjB7jB,EAAIuwB,eAAetxD,KAAKwvC,QAAS,sBACjCxvC,KAAKu9G,cACT,EAEAv9G,KAAKu9G,aAAe,WAChB,IAAIjtG,EAAStQ,KAAKm9G,eASlB,GARApyC,cAAc/qE,KAAK09G,YACnBn5E,aAAavkC,KAAK29G,WACd39G,KAAKg9G,gBACLj8E,EAAIuwB,eAAetxD,KAAKwvC,QAAS,uBAGrCl/B,GAAO,GAEFtQ,KAAK6zG,YAAe7zG,KAAK+8G,eAAkB/8G,KAAK4kD,UAArD,CAGI5kD,KAAKg9G,gBACL/sF,WAAW,WACP8Q,EAAIswB,YAAYrxD,KAAKwvC,QAAS,sBAClC,EAAE7jC,KAAK3L,OAGX,IAAI49G,EAAQ,WACR59G,KAAK29G,UAAY1tF,YAAW,WACxB3f,GAAO,EACX,GAAG,GAAMtQ,KAAK+8G,cAClB,EAAEpxG,KAAK3L,MAEPA,KAAK09G,WAAar5E,aAAY,WAC1B/zB,GAAO,GACPstG,GACJ,GAAG59G,KAAK+8G,eAERa,GAnBU,CAoBd,EAEA59G,KAAK69G,iBAAmB,SAAS92G,EAAU+2G,GACvC,IAAK99G,KAAKiP,SAAWjP,KAAKmgE,QACtB,MAAO,CAACtyB,KAAO,EAAG1mC,IAAM,GAEvBJ,IACDA,EAAW/G,KAAKmgE,QAAQl/B,UAAU22C,aACtC,IAAIvsD,EAAMrrB,KAAKmgE,QAAQ6W,yBAAyBjwE,GAC5Cg3G,EAAa/9G,KAAKk4G,SAAW7sF,EAAI23C,OAAShjE,KAAKiP,OAAO+6D,eACtDg0C,GAAa3yF,EAAI03C,KAAO+6C,EAAW99G,KAAKiP,OAAOoqG,eAAiB,IAChEr5G,KAAKiP,OAAO66D,WAEhB,MAAO,CAACj8B,KAAOkwE,EAAY52G,IAAM62G,EACrC,EAEAh+G,KAAKsQ,OAAS,SAASrB,GACnBjP,KAAKiP,OAASA,EAEd,IAAI64F,EAAa9nG,KAAKmgE,QAAQ89C,kBAC1Bl4G,EAAI,EAAGm4G,EAAc,OAEN/tG,IAAf23F,GAAkD,IAAtBA,EAAWpgG,SACvCogG,EAAa,CAAC,CAACxnD,OAAQ,QAGlBv6C,EAAI,EAAb,IAAK,IAAWH,EAAIkiG,EAAWpgG,OAAQ3B,EAAIH,EAAGG,IAAK,CAC/C,IAAIo4G,EAAWn+G,KAAK69G,iBAAiB/V,EAAW/hG,GAAGu6C,QAAQ,GAC3D,MAAK69D,EAASh3G,IAAM8H,EAAO60B,OAAS70B,EAAOitD,QACtCiiD,EAASh3G,IAAM,IAAMpB,EAAI,GAD9B,CAKA,IAAIW,GAAS1G,KAAKi9G,QAAQiB,MAAkBl+G,KAAKk9G,aAAax2G,MAEzD1G,KAAKo+G,WAMNp+G,KAAKo+G,WAAW13G,EAAOy3G,EAAUlvG,EAAQ64F,EAAW/hG,GAAI/F,KAAKmgE,UAL7Dz5D,EAAMmnC,KAAOswE,EAAStwE,KAAO,KAC7BnnC,EAAMS,IAAMg3G,EAASh3G,IAAM,KAC3BT,EAAMujC,MAAQh7B,EAAO+6D,eAAiB,KACtCtjE,EAAMo9B,OAAS70B,EAAO66D,WAAa,KARvC,CAYJ,CACA,MAAO9pE,KAAKi9G,QAAQv1G,OAASw2G,EACzBl+G,KAAKy9G,eAET,IAAI3mB,EAAY92F,KAAKmgE,QAAQ42B,eAC7B/2F,KAAKq+G,cAAcvnB,GACnB92F,KAAKwzG,UAAY2K,EACjBn+G,KAAKu9G,cACT,EAEAv9G,KAAKo+G,WAAa,KAElBp+G,KAAKq+G,cAAgB,SAASvnB,GACtBA,GAAa92F,KAAK82F,YAClB92F,KAAK82F,UAAYA,EACbA,EACA/1D,EAAIswB,YAAYrxD,KAAKwvC,QAAS,yBAE9BzO,EAAIuwB,eAAetxD,KAAKwvC,QAAS,yBAE7C,EAEAxvC,KAAKgL,QAAU,WACX+/D,cAAc/qE,KAAK09G,YACnBn5E,aAAavkC,KAAK29G,UACtB,CAEH,GAAE/4G,KAAKk4G,EAAO70G,WAEfxC,EAAQq3G,OAASA,CAEjB,IAEA/0D,IAAImC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,0BAA0B,SAASS,EAAUllD,EAASE,GAC3J,aAEA,IAAIouD,EAAMpJ,EAAS,aACf5pB,EAAM4pB,EAAS,aACftlB,EAAQslB,EAAS,eACjBqjB,EAAerjB,EAAS,uBAAuBqjB,aAC/CswC,EAAY,SAAS55G,GACrB1E,KAAKwvC,QAAUzO,EAAIt6B,cAAc,OACjCzG,KAAKwvC,QAAQrK,UAAY,8BAAgCnlC,KAAKu+G,YAE9Dv+G,KAAKuyD,MAAQxxB,EAAIt6B,cAAc,OAC/BzG,KAAKuyD,MAAMptB,UAAY,sBACvBnlC,KAAKwvC,QAAQloC,YAAYtH,KAAKuyD,OAE9B7tD,EAAO4C,YAAYtH,KAAKwvC,SAExBxvC,KAAKw+G,YAAW,GAChBx+G,KAAKy+G,WAAY,EAEjBp5E,EAAMkxB,YAAYv2D,KAAKwvC,QAAS,SAAUxvC,KAAK0+G,SAAS/yG,KAAK3L,OAC7DqlC,EAAMkxB,YAAYv2D,KAAKwvC,QAAS,YAAanK,EAAMG,eACvD,GAEA,WACIuuB,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAKw+G,WAAa,SAAS55D,GACvB5kD,KAAKwvC,QAAQ9oC,MAAM0zC,QAAUwK,EAAY,GAAK,OAC9C5kD,KAAK4kD,UAAYA,CACrB,CACH,GAAEhgD,KAAK05G,EAAUr2G,WAClB,IAAI02G,EAAa,SAASj6G,EAAQg8D,GAC9B49C,EAAU15G,KAAK5E,KAAM0E,GACrB1E,KAAKkH,UAAY,EACjBw5D,EAASk+C,gBACT5+G,KAAKiqC,MAAQlJ,EAAIuxB,eAAe5tD,EAAO05D,eACvCp+D,KAAKuyD,MAAM7rD,MAAMujC,MACjBjqC,KAAKwvC,QAAQ9oC,MAAMujC,OAASjqC,KAAKiqC,OAAS,IAAM,EAAI,IACxD,EAEA8pB,EAAIL,SAASirD,EAAYL,GAEzB,WAEIt+G,KAAKu+G,YAAc,KACnBv+G,KAAK0+G,SAAW,WACP1+G,KAAKy+G,YACNz+G,KAAKkH,UAAYlH,KAAKwvC,QAAQtoC,UAC9BlH,KAAKihE,MAAM,SAAU,CAAC5+D,KAAMrC,KAAKkH,aAErClH,KAAKy+G,WAAY,CACrB,EACAz+G,KAAKwmE,SAAW,WACZ,OAAOxmE,KAAK4kD,UAAY5kD,KAAKiqC,MAAQ,CACzC,EACAjqC,KAAK6+G,UAAY,SAAS/6E,GACtB9jC,KAAKwvC,QAAQ9oC,MAAMo9B,OAASA,EAAS,IACzC,EACA9jC,KAAK8+G,eAAiB,SAASh7E,GAC3B9jC,KAAKuyD,MAAM7rD,MAAMo9B,OAASA,EAAS,IACvC,EACA9jC,KAAK++G,gBAAkB,SAASj7E,GAC5B9jC,KAAKuyD,MAAM7rD,MAAMo9B,OAASA,EAAS,IACvC,EACA9jC,KAAKs5F,aAAe,SAASpyF,GACrBlH,KAAKkH,WAAaA,IAClBlH,KAAKy+G,WAAY,EACjBz+G,KAAKkH,UAAYlH,KAAKwvC,QAAQtoC,UAAYA,EAElD,CAEH,EAAEtC,KAAK+5G,EAAW12G,WACnB,IAAI+2G,EAAa,SAASt6G,EAAQg8D,GAC9B49C,EAAU15G,KAAK5E,KAAM0E,GACrB1E,KAAK+tC,WAAa,EAClB/tC,KAAK8jC,OAAS48B,EAASk+C,gBACvB5+G,KAAKuyD,MAAM7rD,MAAMo9B,OACjB9jC,KAAKwvC,QAAQ9oC,MAAMo9B,QAAU9jC,KAAK8jC,QAAU,IAAM,EAAI,IAC1D,EAEAiwB,EAAIL,SAASsrD,EAAYV,GAEzB,WAEIt+G,KAAKu+G,YAAc,KACnBv+G,KAAK0+G,SAAW,WACP1+G,KAAKy+G,YACNz+G,KAAK+tC,WAAa/tC,KAAKwvC,QAAQzB,WAC/B/tC,KAAKihE,MAAM,SAAU,CAAC5+D,KAAMrC,KAAK+tC,cAErC/tC,KAAKy+G,WAAY,CACrB,EACAz+G,KAAKumE,UAAY,WACb,OAAOvmE,KAAK4kD,UAAY5kD,KAAK8jC,OAAS,CAC1C,EACA9jC,KAAKi/G,SAAW,SAASh1E,GACrBjqC,KAAKwvC,QAAQ9oC,MAAMujC,MAAQA,EAAQ,IACvC,EACAjqC,KAAKk/G,cAAgB,SAASj1E,GAC1BjqC,KAAKuyD,MAAM7rD,MAAMujC,MAAQA,EAAQ,IACrC,EACAjqC,KAAKm/G,eAAiB,SAASl1E,GAC3BjqC,KAAKuyD,MAAM7rD,MAAMujC,MAAQA,EAAQ,IACrC,EACAjqC,KAAKy5F,cAAgB,SAAS1rD,GACtB/tC,KAAK+tC,YAAcA,IACnB/tC,KAAKy+G,WAAY,EACjBz+G,KAAK+tC,WAAa/tC,KAAKwvC,QAAQzB,WAAaA,EAEpD,CAEH,EAAEnpC,KAAKo6G,EAAW/2G,WAGnBxC,EAAQ64G,UAAYK,EACpBl5G,EAAQ25G,WAAaT,EACrBl5G,EAAQ45G,WAAaL,EAErBv5G,EAAQk5G,WAAaA,EACrBl5G,EAAQu5G,WAAaA,CACrB,IAEAj3D,IAAImC,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,kBAAkB,SAASS,EAAUllD,EAASE,GACxG,aAEA,IAAI0/B,EAAQslB,EAAS,eAGjB20D,EAAa,SAASC,EAAU7kD,GAChC16D,KAAKu/G,SAAWA,EAChBv/G,KAAKw/G,SAAU,EACfx/G,KAAKy/G,QAAU,EACfz/G,KAAKgH,OAAS0zD,GAAO1zD,MACzB,GAEA,WAGIhH,KAAKu8D,SAAW,SAAShrD,GAErB,GADAvR,KAAKy/G,QAAUz/G,KAAKy/G,QAAUluG,GACzBvR,KAAKw/G,SAAWx/G,KAAKy/G,QAAS,CAC/Bz/G,KAAKw/G,SAAU,EACf,IAAIt/G,EAAQF,KACZqlC,EAAMu1B,WAAU,WAEZ,IAAI6kD,EADJv/G,EAAMs/G,SAAU,EAEhB,MAAOC,EAAUv/G,EAAMu/G,QACnBv/G,EAAMu/G,QAAU,EAChBv/G,EAAMq/G,SAASE,EAEvB,GAAGz/G,KAAKgH,OACZ,CACJ,CAEH,GAAEpC,KAAK06G,EAAWr3G,WAEnBxC,EAAQ65G,WAAaA,CACrB,IAEAv3D,IAAImC,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,oBAAoB,0BAA0B,SAASS,EAAUllD,EAASE,GAEvL,IAAIouD,EAAMpJ,EAAS,cACf5pB,EAAM4pB,EAAS,cACf9pD,EAAO8pD,EAAS,eAChByL,EAAYzL,EAAS,oBACrBqjB,EAAerjB,EAAS,wBAAwBqjB,aAEhD0xC,EAAa,EAEbC,EAAcl6G,EAAQk6G,YAAc,SAAS5I,GAC7C/2G,KAAK6P,GAAKkxB,EAAIt6B,cAAc,OAC5BzG,KAAK4/G,sBAAsB5/G,KAAK6P,GAAGnJ,OAAO,GAE1C1G,KAAK6/G,MAAQ9+E,EAAIt6B,cAAc,OAC/BzG,KAAK4/G,sBAAsB5/G,KAAK6/G,MAAMn5G,OAEtC1G,KAAK48G,aAAe77E,EAAIt6B,cAAc,OACtCzG,KAAK4/G,sBAAsB5/G,KAAK48G,aAAal2G,OAG7C1G,KAAK6P,GAAGvI,YAAYtH,KAAK6/G,OACzB7/G,KAAK6P,GAAGvI,YAAYtH,KAAK48G,cACzB7F,EAASzvG,YAAYtH,KAAK6P,IAErB6vG,GACD1/G,KAAK8/G,sBACT9/G,KAAK48G,aAAa7kE,UAAYl3C,EAAKu6D,aAAa,IAAKskD,GAErD1/G,KAAKq6G,eAAiB,CAACpwE,MAAO,EAAGnG,OAAQ,GACzC9jC,KAAKw6G,qBACT,GAEA,WAEIzmD,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAKq6G,eAAiB,CAACpwE,MAAO,EAAGnG,OAAQ,GAEzC9jC,KAAK8/G,oBAAsB,WACvB,IAAIjwG,EAAKkxB,EAAIt6B,cAAc,OAC3BzG,KAAK4/G,sBAAsB/vG,EAAGnJ,OAC9BmJ,EAAGnJ,MAAMujC,MAAQ,QACjB9jC,SAASI,gBAAgBe,YAAYuI,GACrC,IAAI2X,EAAI3X,EAAG+9B,wBAAwB3D,MAE/By1E,EADAl4F,EAAI,GAAKA,EAAI,EACA,GAEA,IACjB3X,EAAGrE,WAAWmE,YAAYE,EAC9B,EAEA7P,KAAK4/G,sBAAwB,SAASl5G,EAAO6T,GACzC7T,EAAMujC,MAAQvjC,EAAMo9B,OAAS,OAC7Bp9B,EAAMmnC,KAAOnnC,EAAMS,IAAM,MACzBT,EAAM24C,WAAa,SACnB34C,EAAMK,SAAW,WACjBL,EAAMq5G,WAAa,MAEf3pD,EAAUhB,KAAO,EACjB1uD,EAAM,eAAiB,UAEvBA,EAAMs5G,KAAO,UAEjBt5G,EAAMyyC,SAAW5+B,EAAS,SAAW,SACzC,EAEAva,KAAKw6G,oBAAsB,WACvB,IAAI9e,EAAO17F,KAAKigH,gBAChB,GAAIvkB,IAAS17F,KAAKq6G,eAAepwE,QAAUyxD,EAAKzxD,OAASjqC,KAAKq6G,eAAev2E,SAAW43D,EAAK53D,QAAS,CAClG9jC,KAAK48G,aAAal2G,MAAMw5G,WAAa,OACrC,IAAIC,EAAWngH,KAAKigH,gBACpBjgH,KAAK48G,aAAal2G,MAAMw5G,WAAa,GACrClgH,KAAKq6G,eAAiB3e,EACtB17F,KAAKogH,UAAY/+G,OAAOyI,OAAO,MAC/B9J,KAAKqgH,eAAiBF,GAAYA,EAASl2E,QAAUyxD,EAAKzxD,OAASk2E,EAASr8E,SAAW43D,EAAK53D,OAC5F9jC,KAAKihE,MAAM,sBAAuB,CAAC5+D,KAAMq5F,GAC7C,CACJ,EAEA17F,KAAKu6G,iBAAmB,WACpB,GAAIv6G,KAAKy6G,sBACL,OAAOz6G,KAAKy6G,sBAChB,IAAI53G,EAAO7C,KACX,OAAOA,KAAKy6G,sBAAwBp2E,aAAY,WAC5CxhC,EAAK23G,qBACT,GAAG,IACP,EAEAx6G,KAAKsgH,WAAa,SAASt+G,GACnBA,EACAhC,KAAKu6G,mBACEv6G,KAAKy6G,wBACZ1vC,cAAc/qE,KAAKy6G,uBACnBz6G,KAAKy6G,sBAAwB,EAErC,EAEAz6G,KAAKigH,cAAgB,WACjB,GAAmB,KAAfP,EAAmB,CACnB,IAAI/xE,EAAO,KACX,IACGA,EAAO3tC,KAAK48G,aAAahvE,uBAC5B,CAAE,MAAMzqC,GACLwqC,EAAO,CAAC1D,MAAO,EAAGnG,OAAO,EAC5B,CACA,IAAI43D,EAAO,CACP53D,OAAQ6J,EAAK7J,OACbmG,MAAO0D,EAAK1D,MAAQy1E,EAE5B,MACQhkB,EAAO,CACP53D,OAAQ9jC,KAAK48G,aAAa74E,aAC1BkG,MAAOjqC,KAAK48G,aAAar0D,YAAcm3D,GAG/C,OAAmB,IAAfhkB,EAAKzxD,OAA+B,IAAhByxD,EAAK53D,OAClB,KACJ43D,CACX,EAEA17F,KAAKugH,kBAAoB,SAAS3yF,GAC9B5tB,KAAK6/G,MAAM9nE,UAAYl3C,EAAKu6D,aAAaxtC,EAAI8xF,GAC7C,IAAI/xE,EAAO3tC,KAAK6/G,MAAMjyE,wBACtB,OAAOD,EAAK1D,MAAQy1E,CACxB,EAEA1/G,KAAKqgG,kBAAoB,SAASzyE,GAC9B,IAAIpG,EAAIxnB,KAAKogH,UAAUxyF,GAIvB,YAHUzd,IAANqX,IACAA,EAAIxnB,KAAKogH,UAAUxyF,GAAM5tB,KAAKugH,kBAAkB3yF,GAAM5tB,KAAKq6G,eAAepwE,OAEvEziB,CACX,EAEAxnB,KAAKgL,QAAU,WACX+/D,cAAc/qE,KAAKy6G,uBACfz6G,KAAK6P,IAAM7P,KAAK6P,GAAGrE,YACnBxL,KAAK6P,GAAGrE,WAAWmE,YAAY3P,KAAK6P,GAC5C,CAEH,GAAEjL,KAAK+6G,EAAY13G,UAEpB,IAEA8/C,IAAImC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,aAAa,oBAAoB,mBAAmB,mBAAmB,iBAAiB,mBAAmB,gBAAgB,gBAAgB,iBAAiB,yBAAyB,0BAA0B,SAASS,EAAUllD,EAASE,GACvU,aAEA,IAAIouD,EAAMpJ,EAAS,aACf5pB,EAAM4pB,EAAS,aACf17C,EAAS07C,EAAS,YAClByL,EAAYzL,EAAS,mBACrB61D,EAAc71D,EAAS,kBAAkBmsD,OACzC2J,EAAc91D,EAAS,kBAAkB8tD,OACzCiI,EAAY/1D,EAAS,gBAAgBgvD,KACrCgH,EAAch2D,EAAS,kBAAkBmyD,OACzCkC,EAAar0D,EAAS,eAAeq0D,WACrCL,EAAah0D,EAAS,eAAeg0D,WACrCW,EAAa30D,EAAS,gBAAgB20D,WACtCK,EAAch1D,EAAS,wBAAwBg1D,YAC/C3xC,EAAerjB,EAAS,uBAAuBqjB,aAC/C4yC,EAAY,i/YAsXhB7/E,EAAIgxB,gBAAgB6uD,EAAW,kBAE/B,IAAIC,EAAkB,SAASx5G,EAAW+gD,GACtC,IAAIloD,EAAQF,KAEZA,KAAKqH,UAAYA,GAAa05B,EAAIt6B,cAAc,OAChDzG,KAAK2gE,uBAAyBvK,EAAUf,QAExCt0B,EAAIswB,YAAYrxD,KAAKqH,UAAW,cAEhCrH,KAAK8oD,SAASV,GAEdpoD,KAAKkoE,QAAUnnC,EAAIt6B,cAAc,OACjCzG,KAAKkoE,QAAQ/iC,UAAY,aACzBnlC,KAAKqH,UAAUC,YAAYtH,KAAKkoE,SAEhCloE,KAAK0hE,SAAW3gC,EAAIt6B,cAAc,OAClCzG,KAAK0hE,SAASv8B,UAAY,eAC1BnlC,KAAKqH,UAAUC,YAAYtH,KAAK0hE,UAEhC1hE,KAAKgiC,QAAUjB,EAAIt6B,cAAc,OACjCzG,KAAKgiC,QAAQmD,UAAY,cACzBnlC,KAAK0hE,SAASp6D,YAAYtH,KAAKgiC,SAE/BhiC,KAAK8mE,aAAe,IAAI05C,EAAYxgH,KAAKkoE,SACzCloE,KAAK8mE,aAAavmE,GAAG,oBAAqBP,KAAK8gH,eAAen1G,KAAK3L,OAEnEA,KAAK+gH,YAAc,IAAIN,EAAYzgH,KAAKgiC,SAExC,IAAIg/E,EAAYhhH,KAAKihH,WAAa,IAAIP,EAAU1gH,KAAKgiC,SACrDhiC,KAAKkhH,OAASF,EAAUxxE,QAExBxvC,KAAKmhH,aAAe,IAAIV,EAAYzgH,KAAKgiC,SAEzChiC,KAAK6qE,aAAe,IAAI81C,EAAY3gH,KAAKgiC,SACzChiC,KAAKohH,cAAe,EACpBphH,KAAKqhH,UAAW,EAEhBrhH,KAAKshH,UACLthH,KAAKqyE,WAAa,IAAIssC,EAAW3+G,KAAKqH,UAAWrH,MACjDA,KAAKsyE,WAAa,IAAI0sC,EAAWh/G,KAAKqH,UAAWrH,MACjDA,KAAKqyE,WAAW5mE,iBAAiB,UAAU,SAAStI,GAC3CjD,EAAMqhH,kBACPrhH,EAAMigE,QAAQm5B,aAAan2F,EAAEd,KAAOnC,EAAMshH,aAAar6G,IAC/D,IACAnH,KAAKsyE,WAAW7mE,iBAAiB,UAAU,SAAStI,GAC3CjD,EAAMqhH,kBACPrhH,EAAMigE,QAAQs5B,cAAct2F,EAAEd,KAAOnC,EAAMshH,aAAa3zE,KAChE,IAEA7tC,KAAKkH,UAAY,EACjBlH,KAAK+tC,WAAa,EAElB/tC,KAAKirG,UAAY,CACbloC,IAAM,EACNC,OAAS,GAGbhjE,KAAKo6G,aAAe,IAAIuF,EAAY3/G,KAAKqH,WACzCrH,KAAKihH,WAAW/gB,gBAAgBlgG,KAAKo6G,cACrCp6G,KAAKihH,WAAWx1G,iBAAiB,uBAAuB,SAAStI,GAC7DjD,EAAMuhH,sBACNvhH,EAAMgrG,UAAS,EAAMhrG,EAAM+2G,YAAa/2G,EAAMwhH,MAAMz3E,MAAO/pC,EAAMwhH,MAAM59E,QACvE5jC,EAAMquE,QAAQ,sBAAuBprE,EACzC,IAEAnD,KAAK0hH,MAAQ,CACTz3E,MAAO,EACPnG,OAAQ,EACR69E,eAAgB,EAChBC,cAAe,EACfC,QAAQ,GAGZ7hH,KAAK+pE,YAAc,CACf9/B,MAAQ,EACRpjC,QAAU,EACV6vE,SAAW,EACX2iC,eAAgB,EAChB1iC,QAAU,EACV7M,WAAa,EACbE,eAAiB,EACjBguC,UAAY,EACZ5+D,UAAY,EACZ8iB,OAAS,EACTp4B,OAAS,EACTwzE,aAAc,GAGlBt3G,KAAKwhH,aAAe,CAChB3zE,KAAM,EACN0D,MAAO,EACPpqC,IAAK,EACL68B,OAAQ,EACRx6B,EAAG,EACHnE,EAAG,GAGPrF,KAAK8hH,MAAQ,IAAIxC,EACbt/G,KAAK+hH,eAAep2G,KAAK3L,MACzBA,KAAKqH,UAAU+2D,cAAc5K,aAEjCxzD,KAAK8hH,MAAMvlD,SAASv8D,KAAKgiH,aAEzBhiH,KAAKyhH,sBACLzhH,KAAK84G,WAAW,GAChB7pG,EAAO8gE,aAAa/vE,MACpBiP,EAAOgyD,MAAM,WAAYjhE,KAC7B,GAEA,WAEIA,KAAKiiH,cAAgB,EACrBjiH,KAAKkiH,cAAgB,EACrBliH,KAAKmiH,cAAgB,EACrBniH,KAAKoiH,cAAgB,EACrBpiH,KAAKqiH,aAAe,GACpBriH,KAAKsiH,YAAc,GACnBtiH,KAAKuiH,YAAc,GACnBviH,KAAKwiH,mBAAqB,IAC1BxiH,KAAKyiH,oBAAsB,IAC3BziH,KAAKgiH,YAAc,IACnBhiH,KAAK0iH,gBAAkB,KAEvB3uD,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAKyhH,oBAAsB,WACnBzhH,KAAKihH,WAAWZ,gBAAkBrgH,KAAK2iH,kBACvC3iH,KAAK2iH,gBAAkB3iH,KAAKihH,WAAWZ,eACvCrgH,KAAKmkE,SAAS,cAAenkE,KAAK2iH,kBAGtC3iH,KAAK+pE,YAAYC,eACjBhqE,KAAKgqE,eAAiBhqE,KAAKihH,WAAW5gB,oBACtCrgG,KAAK+pE,YAAYD,WACjB9pE,KAAK8pE,WAAa9pE,KAAKihH,WAAW9G,gBAClCn6G,KAAK4iH,oBACT,EACA5iH,KAAK6nG,WAAa,SAAS1nC,GACnBngE,KAAKmgE,SACLngE,KAAKmgE,QAAQpP,IAAIlkD,IAAI,oBAAqB7M,KAAK6iH,qBAEnD7iH,KAAKmgE,QAAUA,EACXA,GAAWngE,KAAKwhH,aAAar6G,KAAOg5D,EAAQo5B,gBAAkB,GAC9Dp5B,EAAQm5B,cAAct5F,KAAKwhH,aAAar6G,KAE5CnH,KAAK6qE,aAAag9B,WAAW1nC,GAC7BngE,KAAK+gH,YAAYlZ,WAAW1nC,GAC5BngE,KAAKmhH,aAAatZ,WAAW1nC,GAC7BngE,KAAK8mE,aAAa+gC,WAAW1nC,GAC7BngE,KAAKihH,WAAWpZ,WAAW1nC,GACtBA,IAGLngE,KAAK8hH,MAAMvlD,SAASv8D,KAAKgiH,aACzBhiH,KAAKmgE,QAAQ+/B,gBAAgBlgG,KAAKo6G,cAElCp6G,KAAK6iH,oBAAsB7iH,KAAK6iH,oBAAoBl3G,KAAK3L,MACzDA,KAAK6iH,sBACL7iH,KAAKmgE,QAAQpP,IAAIxwD,GAAG,oBAAqBP,KAAK6iH,qBAClD,EACA7iH,KAAKqsG,YAAc,SAAS31B,EAAUC,EAASltB,GAiB3C,QAhBgBt5C,IAAZwmE,IACAA,EAAUx9D,KAETnZ,KAAK8iH,eAOF9iH,KAAK8iH,cAAcpsC,SAAWA,IAC9B12E,KAAK8iH,cAAcpsC,SAAWA,GAE9B12E,KAAK8iH,cAAcnsC,QAAUA,IAC7B32E,KAAK8iH,cAAcnsC,QAAUA,IAVjC32E,KAAK8iH,cAAgB,CACjBpsC,SAAUA,EACVC,QAASA,GAUb32E,KAAK8iH,cAAcnsC,QAAU32E,KAAK+pE,YAAY2M,SAAU,CACxD,IAAIjtB,EAGA,OAFAzpD,KAAK8iH,cAAcnsC,QAAU32E,KAAK+pE,YAAY4M,OAGtD,CACI32E,KAAK8iH,cAAcpsC,SAAW12E,KAAK+pE,YAAY4M,SAEnD32E,KAAK8hH,MAAMvlD,SAASv8D,KAAKqiH,aAC7B,EAEAriH,KAAK6iH,oBAAsB,WACvB7iH,KAAK8hH,MAAMvlD,SAASv8D,KAAKsiH,aACzBtiH,KAAKihH,WAAWrH,gBACpB,EAEA55G,KAAKoqG,gBAAkB,WACnBpqG,KAAK8hH,MAAMvlD,SAASv8D,KAAKsiH,YAActiH,KAAKkiH,eAC5CliH,KAAKihH,WAAW7W,iBACpB,EACApqG,KAAKutG,WAAa,WACdvtG,KAAK8hH,MAAMvlD,SAASv8D,KAAKsiH,YAC7B,EACAtiH,KAAK+qG,WAAa,SAASthD,GACnBA,EACAzpD,KAAK+hH,eAAe/hH,KAAKgiH,aAAa,GAEtChiH,KAAK8hH,MAAMvlD,SAASv8D,KAAKgiH,YACjC,EACAhiH,KAAK+iH,eAAiB,WAClB/iH,KAAKihH,WAAWzG,qBACpB,EAEAx6G,KAAKgjH,SAAW,EAChBhjH,KAAKijH,iBAAmB,WAChBjjH,KAAK8hH,MAAMtC,QACXx/G,KAAK0hH,MAAMG,QAAS,EAEpB7hH,KAAKkrG,UACb,EACAlrG,KAAKkrG,SAAW,SAASzhD,EAAOwtD,EAAahtE,EAAOnG,GAChD,KAAI9jC,KAAKkjH,SAAW,GAApB,CAESljH,KAAKkjH,SAAW,EACrBljH,KAAKkjH,WAELljH,KAAKkjH,SAAWz5D,EAAQ,EAAI,EAChC,IAAI55C,EAAK7P,KAAKqH,UACTy8B,IACDA,EAASj0B,EAAGk0B,cAAgBl0B,EAAGs0B,cAC9B8F,IACDA,EAAQp6B,EAAG04C,aAAe14C,EAAGszG,aACjC,IAAI1D,EAAUz/G,KAAKojH,kBAAkB35D,EAAOwtD,EAAahtE,EAAOnG,GAGhE,IAAK9jC,KAAK0hH,MAAMC,iBAAoB13E,IAAUnG,EAC1C,OAAO9jC,KAAKkjH,SAAW,EAEvBz5D,IACAzpD,KAAK8mE,aAAaoxC,SAAW,MAE7BzuD,EACAzpD,KAAK+hH,eAAetC,EAAUz/G,KAAKgjH,UAAU,GAE7ChjH,KAAK8hH,MAAMvlD,SAASkjD,EAAUz/G,KAAKgjH,UAEnChjH,KAAKkjH,WACLljH,KAAKkjH,SAAW,GACpBljH,KAAKqyE,WAAWtkC,WAAa/tC,KAAKqyE,WAAWnrE,UAAY,IAtBxB,CAuBrC,EAEAlH,KAAKojH,kBAAoB,SAAS35D,EAAOwtD,EAAahtE,EAAOnG,GACzDA,GAAW9jC,KAAKqjH,cAAgB,EAChC,IAAI5D,EAAU,EACV/jB,EAAO17F,KAAK0hH,MACZ4B,EAAU,CACVr5E,MAAOyxD,EAAKzxD,MACZnG,OAAQ43D,EAAK53D,OACb69E,eAAgBjmB,EAAKimB,eACrBC,cAAelmB,EAAKkmB,eAwCxB,OAtCI99E,IAAW2lB,GAASiyC,EAAK53D,QAAUA,KACnC43D,EAAK53D,OAASA,EACd27E,GAAWz/G,KAAKuiH,YAEhB7mB,EAAKimB,eAAiBjmB,EAAK53D,OACvB9jC,KAAKohH,eACL1lB,EAAKimB,gBAAkB3hH,KAAKsyE,WAAW/L,aAC3CvmE,KAAKqyE,WAAW7iC,QAAQ9oC,MAAMs9B,OAAShkC,KAAKsyE,WAAW/L,YAAc,KAErEk5C,GAAoBz/G,KAAKoiH,eAGzBn4E,IAAUwf,GAASiyC,EAAKzxD,OAASA,KACjCw1E,GAAWz/G,KAAKuiH,YAChB7mB,EAAKzxD,MAAQA,EAEM,MAAfgtE,IACAA,EAAcj3G,KAAKujH,YAAcvjH,KAAKkoE,QAAQvV,YAAc,GAEhE3yD,KAAKi3G,YAAcA,EAEnBj3G,KAAKsyE,WAAW9iC,QAAQ9oC,MAAMmnC,KAC9B7tC,KAAK0hE,SAASh7D,MAAMmnC,KAAOopE,EAAc,KACzCvb,EAAKkmB,cAAgB/7F,KAAKkf,IAAI,EAAGkF,EAAQgtE,EAAcj3G,KAAKqyE,WAAW7L,YAEvExmE,KAAKsyE,WAAW9iC,QAAQ9oC,MAAM6qC,MAC9BvxC,KAAK0hE,SAASh7D,MAAM6qC,MAAQvxC,KAAKqyE,WAAW7L,WAAa,KACzDxmE,KAAK0hE,SAASh7D,MAAMs9B,OAAShkC,KAAKsyE,WAAW/L,YAAc,MAEvDvmE,KAAKmgE,SAAWngE,KAAKmgE,QAAQi8B,kBAAoBp8F,KAAKs8F,mBAAqB7yC,KAC3Eg2D,GAAWz/G,KAAKgiH,cAGxBtmB,EAAKmmB,QAAU53E,IAAUnG,EAErB27E,GACAz/G,KAAKuuE,QAAQ,SAAU+0C,GAEpB7D,CACX,EAEAz/G,KAAK8gH,eAAiB,WAClB,IAAI7J,EAAcj3G,KAAKujH,YAAcvjH,KAAKkoE,QAAQvV,YAAc,EAC5DskD,GAAej3G,KAAKi3G,cACpBj3G,KAAKgjH,UAAYhjH,KAAKojH,mBAAkB,EAAMnM,EAAaj3G,KAAK0hH,MAAMz3E,MAAOjqC,KAAK0hH,MAAM59E,SAExF9jC,KAAKmgE,QAAQi8B,kBAAoBp8F,KAAKs8F,mBAE/Bt8F,KAAK0hH,MAAMG,OADlB7hH,KAAK8hH,MAAMvlD,SAASv8D,KAAKgiH,cAIzBhiH,KAAKwjH,sBACLxjH,KAAK8hH,MAAMvlD,SAASv8D,KAAKkiH,eAEjC,EACAliH,KAAKs8F,gBAAkB,WACnB,IAAImnB,EAAiBzjH,KAAK0hH,MAAME,cAAgC,EAAhB5hH,KAAKk4G,SACjD35F,EAAQsH,KAAKD,MAAM69F,EAAiBzjH,KAAKgqE,gBAC7C,OAAOhqE,KAAKmgE,QAAQm8B,gBAAgB/9E,EAAOve,KAAK0jH,kBAAoB1jH,KAAK2jH,mBAC7E,EACA3jH,KAAK2uG,kBAAoB,SAASC,GAC9B5uG,KAAKkvE,UAAU,iBAAkB0/B,EACrC,EACA5uG,KAAK6uG,kBAAoB,WACrB,OAAO7uG,KAAK4jH,eAChB,EACA5jH,KAAK8uG,kBAAoB,SAASC,GAC9B/uG,KAAKkvE,UAAU,iBAAkB6/B,EACrC,EACA/uG,KAAKgvG,kBAAoB,WACrB,OAAOhvG,KAAKqvE,UAAU,iBAC1B,EACArvE,KAAKkvG,uBAAyB,WAC1B,OAAOlvG,KAAKqvE,UAAU,sBAC1B,EAEArvE,KAAKivG,uBAAyB,SAAS70D,GACnCp6C,KAAKkvE,UAAU,sBAAuB90B,EAC1C,EACAp6C,KAAK+oD,mBAAqB,SAASomD,GAC/BnvG,KAAKkvE,UAAU,kBAAmBigC,EACtC,EACAnvG,KAAKovG,mBAAqB,WACtB,OAAOpvG,KAAKqvE,UAAU,kBAC1B,EACArvE,KAAKqvG,qBAAuB,SAASF,GACjCnvG,KAAKkvE,UAAU,oBAAqBigC,EACxC,EACAnvG,KAAKsvG,qBAAuB,WACxB,OAAOtvG,KAAKqvE,UAAU,oBAC1B,EACArvE,KAAK6jH,cAAgB,WACjB,OAAO7jH,KAAKqvE,UAAU,aAC1B,EACArvE,KAAK8jH,cAAgB,SAASv5E,GAC1B,OAAOvqC,KAAKkvE,UAAU,aAAc3kC,EACxC,EAEAvqC,KAAK+vG,mBAAqB,WACtB,OAAO/vG,KAAKqvE,UAAU,kBAC1B,EAEArvE,KAAK6vG,mBAAqB,SAAStlE,GAC/BvqC,KAAKkvE,UAAU,kBAAmB3kC,EACtC,EAEAvqC,KAAKuuG,uBAAyB,SAASF,GACnCruG,KAAKkvE,UAAU,sBAAuBm/B,EAC1C,EAEAruG,KAAKwuG,uBAAyB,WAC1B,OAAOxuG,KAAKqvE,UAAU,sBAC1B,EAEArvE,KAAK+jH,2BAA6B,WAC9B,IAAI14F,EAAMrrB,KAAK6qE,aAAa2oC,UACxB1vE,EAAS9jC,KAAK+pE,YAAYD,WAC9B,GAAI9pE,KAAKmgE,QAAQi8B,iBAAkB,CAC/B,IAAI97C,EAAStgD,KAAKmgE,QAAQl/B,UAAU22C,YACpCt3B,EAAO0iB,OAAS,EAChB33C,EAAMrrB,KAAK6qE,aAAagzC,iBAAiBv9D,GAAQ,GACjDxc,GAAU9jC,KAAKmgE,QAAQ0+B,aAAav+C,EAAOyiB,IAC/C,CACA/iE,KAAKgkH,qBAAqBt9G,MAAMS,IAAMkkB,EAAIlkB,IAAMnH,KAAK+pE,YAAY7N,OAAS,KAC1El8D,KAAKgkH,qBAAqBt9G,MAAMo9B,OAASA,EAAS,IACtD,EAEA9jC,KAAK4iH,mBAAqB,WACtB,GAAK5iH,KAAK0jH,kBAAqB1jH,KAAKikH,eAApC,CAGA,IAAKjkH,KAAKikH,eAAgB,CACtB,IAAIC,EAAcnjF,EAAIt6B,cAAc,OACpCy9G,EAAY/+E,UAAY,mCACxBnlC,KAAKikH,eAAiBljF,EAAIt6B,cAAc,OACxCzG,KAAKikH,eAAe9+E,UAAY,mBAChC++E,EAAY58G,YAAYtH,KAAKikH,gBAC7BjkH,KAAKgiC,QAAQuJ,aAAa24E,EAAalkH,KAAKgiC,QAAQmN,WACxD,CAEA,IAAIzoC,EAAQ1G,KAAKikH,eAAev9G,MAChCA,EAAMmnC,KAAS7tC,KAAKgqE,eAAiBhqE,KAAK2jH,mBAAsB3jH,KAAKk4G,SAAY,KACjFxxG,EAAM24C,WAAar/C,KAAK0jH,iBAAmB,UAAY,SAEnD1jH,KAAKmgE,UAAkC,GAAvBngE,KAAKmgE,QAAQmgC,OAC7BtgG,KAAKs8F,iBAhBC,CAiBd,EACAt8F,KAAKqnG,oBAAsB,WACvB,OAAOrnG,KAAKqH,SAChB,EACArH,KAAKmyE,oBAAsB,WACvB,OAAOnyE,KAAK0hE,QAChB,EACA1hE,KAAKsnG,qBAAuB,WACxB,OAAOtnG,KAAKqH,SAChB,EACArH,KAAK4gE,sBAAwB,WACzB,GAAK5gE,KAAK2gE,sBAAV,CAEA,IAAI1xD,EAASjP,KAAK+pE,YACdo6C,EAASnkH,KAAK6qE,aAAa2oC,UAAUrsG,IACrCi9G,EAAUpkH,KAAK6qE,aAAa2oC,UAAU3lE,KAC1Cs2E,GAAUl1G,EAAOitD,OAEjB,IAAIx1D,EAAQ1G,KAAKsoD,SAAS5hD,MACtBrB,EAAIrF,KAAK8pE,WACb,GAAIq6C,EAAS,GAAKA,EAASl1G,EAAO60B,OAASz+B,EACvCqB,EAAMS,IAAMT,EAAMmnC,KAAO,QAD7B,CAKA,IAAIrmB,EAAIxnB,KAAKgqE,eACb,GAAIhqE,KAAKqkH,aAAc,CACnB,IAAIriH,EAAMhC,KAAKsoD,SAASpnD,MAAM+d,QAAQ,SAAU,IAChDuI,GAAMxnB,KAAKmgE,QAAQk6B,sBAAsBr4F,GAAK,GAAG,EACjDqD,GAAK,CACT,CACA++G,GAAWpkH,KAAK+tC,WACZq2E,EAAUpkH,KAAK0hH,MAAME,cAAgBp6F,IACrC48F,EAAUpkH,KAAK0hH,MAAME,cAAgBp6F,GAEzC48F,GAAWpkH,KAAKi3G,YAChBvwG,EAAMo9B,OAASz+B,EAAI,KACnBqB,EAAMujC,MAAQziB,EAAI,KAClB9gB,EAAMmnC,KAAOhoB,KAAKif,IAAIs/E,EAASpkH,KAAK0hH,MAAME,cAAgBp6F,GAAK,KAC/D9gB,EAAMS,IAAM0e,KAAKif,IAAIq/E,EAAQnkH,KAAK0hH,MAAM59E,OAASz+B,GAAK,IAhBtD,CAXU,CA4Bd,EACArF,KAAKqxG,mBAAqB,WACtB,OAAOrxG,KAAK+pE,YAAY2M,QAC5B,EACA12E,KAAKyxG,wBAA0B,WAC3B,OAAOzxG,KAAK+pE,YAAY2M,UAAwC,IAA5B12E,KAAK+pE,YAAY7N,OAAe,EAAI,EAC5E,EACAl8D,KAAK0xG,uBAAyB,WAC1B,IAAIziG,EAASjP,KAAK+pE,YACd4M,EAAU1nE,EAAO0nE,QACjBxvE,EAAMnH,KAAKmgE,QAAQuH,oBAAoBiP,EAAS,GAAK1nE,EAAO66D,WAChE,OAAI3iE,EAAMnH,KAAKmgE,QAAQo5B,eAAiBtqF,EAAO60B,OAAS70B,EAAO66D,WACpD6M,EAAU,EACdA,CACX,EACA32E,KAAKsxG,kBAAoB,WACrB,OAAOtxG,KAAK+pE,YAAY4M,OAC5B,EAEA32E,KAAKk4G,SAAW,KAChBl4G,KAAK84G,WAAa,SAASjyG,GACvB7G,KAAKk4G,SAAWrxG,EAChB7G,KAAKihH,WAAWnI,WAAWjyG,GAC3B7G,KAAK6qE,aAAaiuC,WAAWjyG,GAC7B7G,KAAKmhH,aAAarI,WAAWjyG,GAC7B7G,KAAK+gH,YAAYjI,WAAWjyG,GAC5B7G,KAAK8hH,MAAMvlD,SAASv8D,KAAKgiH,aACzBhiH,KAAK4iH,oBACT,EAEA5iH,KAAKskH,gBAAkB,SAASn9G,EAAK68B,EAAQ6J,EAAM0D,GAC/C,IAAIgzE,EAAKvkH,KAAKwhH,aACd+C,EAAGp9G,IAAU,EAAJA,EACTo9G,EAAGvgF,OAAgB,EAAPA,EACZugF,EAAGhzE,MAAc,EAANA,EACXgzE,EAAG12E,KAAY,EAALA,EACV02E,EAAG/6G,EAAI+6G,EAAGp9G,IAAMo9G,EAAGvgF,OACnBugF,EAAGl/G,EAAIk/G,EAAG12E,KAAO02E,EAAGhzE,MAChBgzE,EAAGp9G,KAAOnH,KAAKkH,WAAa,GAAKlH,KAAKmgE,SACtCngE,KAAKmgE,QAAQm5B,cAAcirB,EAAGp9G,KAClCnH,KAAK+qG,YACT,EACA/qG,KAAKwkH,2BAA6B,WAC9B,OAAOxkH,KAAKykH,wBAChB,EACAzkH,KAAK0kH,2BAA6B,SAASC,GACvC3kH,KAAKkvE,UAAU,0BAA2By1C,EAC9C,EACA3kH,KAAK4kH,2BAA6B,WAC9B,OAAO5kH,KAAK6kH,wBAChB,EACA7kH,KAAK8kH,2BAA6B,SAASH,GACvC3kH,KAAKkvE,UAAU,0BAA2By1C,EAC9C,EAEA3kH,KAAK+kH,kBAAoB,WACrB,IAAI5gF,EAAenkC,KAAK+pE,YAAY3wB,UAChCuoE,EAAiB3hH,KAAK0hH,MAAMC,gBAC3B3hH,KAAK2sG,WAAa3sG,KAAKglH,iBACxB7gF,IAAiBw9E,EAAiB3hH,KAAK8pE,YAAc9pE,KAAKglH,eACtDhlH,KAAKkH,UAAYi9B,EAAew9E,IAChCx9E,EAAenkC,KAAKkH,UAAYy6G,EAChC3hH,KAAKqyE,WAAWnrE,UAAY,OAGpClH,KAAKqyE,WAAW0sC,gBAAgB56E,EAAenkC,KAAKwhH,aAAah4G,GACjExJ,KAAKqyE,WAAWinB,aAAat5F,KAAKkH,UAAYlH,KAAKwhH,aAAar6G,IACpE,EACAnH,KAAKilH,kBAAoB,WACrBjlH,KAAKsyE,WAAW6sC,eAAen/G,KAAK+pE,YAAY9/B,MAAQ,EAAIjqC,KAAKk4G,SAAWl4G,KAAKwhH,aAAan8G,GAC9FrF,KAAKsyE,WAAWmnB,cAAcz5F,KAAK+tC,WAAa/tC,KAAKwhH,aAAa3zE,KACtE,EAEA7tC,KAAKklH,SAAU,EACfllH,KAAK6vD,OAAS,WACV7vD,KAAKklH,SAAU,CACnB,EAEAllH,KAAKmlH,SAAW,WACZnlH,KAAKklH,SAAU,CACnB,EAEAllH,KAAK+hH,eAAiB,SAAStC,EAASh2D,GAKpC,GAJIzpD,KAAKgjH,WACLvD,GAAWz/G,KAAKgjH,SAChBhjH,KAAKgjH,SAAW,GAEdhjH,KAAKmgE,SAAYngE,KAAKqH,UAAUsrD,cAAe3yD,KAAKklH,UAAczF,GAAYh2D,GAApF,CAIA,GAAIzpD,KAAK0hH,MAAMG,OAEX,OADA7hH,KAAKgjH,UAAYvD,EACVz/G,KAAKkrG,UAAS,GAEpBlrG,KAAK8pE,YACN9pE,KAAKihH,WAAWzG,sBAGpBx6G,KAAKuuE,QAAQ,gBACb,IAAIt/D,EAASjP,KAAK+pE,YAClB,GAAI01C,EAAUz/G,KAAKgiH,aACfvC,EAAUz/G,KAAKuiH,aACf9C,EAAUz/G,KAAKsiH,aACf7C,EAAUz/G,KAAKqiH,cACf5C,EAAUz/G,KAAKoiH,eACf3C,EAAUz/G,KAAK0iH,gBACjB,CAEE,GADAjD,GAAWz/G,KAAKwjH,sBACZv0G,EAAOynE,UAAY12E,KAAK+pE,YAAY2M,UAAYznE,EAAOoqG,gBAAkBr5G,KAAK+pE,YAAYsvC,eAAgB,CAC1G,IAAI+L,EAAKplH,KAAKkH,WAAa+H,EAAOynE,SAAW12E,KAAK+pE,YAAY2M,UAAY12E,KAAK8pE,WAC3Es7C,EAAK,IACLplH,KAAKkH,UAAYk+G,EACjB3F,GAAoBz/G,KAAKoiH,cACzB3C,GAAWz/G,KAAKwjH,sBAExB,CACAv0G,EAASjP,KAAK+pE,YACd/pE,KAAK+kH,oBACDtF,EAAUz/G,KAAK0iH,iBACf1iH,KAAKilH,oBACTjlH,KAAK8mE,aAAat3B,QAAQ9oC,MAAM2+G,WAAcp2G,EAAOitD,OAAU,KAC/Dl8D,KAAKgiC,QAAQt7B,MAAM2+G,WAAcp2G,EAAOitD,OAAU,KAClDl8D,KAAKgiC,QAAQt7B,MAAMujC,MAAQh7B,EAAOg7B,MAAQ,EAAIjqC,KAAKk4G,SAAW,KAC9Dl4G,KAAKgiC,QAAQt7B,MAAMo9B,OAAS70B,EAAO+oG,UAAY,IACnD,CAKA,GAJIyH,EAAUz/G,KAAK0iH,kBACf1iH,KAAKgiC,QAAQt7B,MAAMu7C,YAAcjiD,KAAK+tC,WAAa,KACnD/tC,KAAK0hE,SAASv8B,UAAYnlC,KAAK+tC,YAAc,EAAI,eAAiB,gCAElE0xE,EAAUz/G,KAAKgiH,YAUf,OATAhiH,KAAKihH,WAAW3wG,OAAOrB,GACnBjP,KAAKujH,aACLvjH,KAAK8mE,aAAax2D,OAAOrB,GAC7BjP,KAAK+gH,YAAYzwG,OAAOrB,GACxBjP,KAAKmhH,aAAa7wG,OAAOrB,GACzBjP,KAAK6qE,aAAav6D,OAAOrB,GACzBjP,KAAK4gE,wBACL5gE,KAAKslH,sBAAwBtlH,KAAK+jH,kCAClC/jH,KAAKuuE,QAAQ,eAGjB,GAAIkxC,EAAUz/G,KAAKoiH,cAcf,OAbI3C,EAAUz/G,KAAKsiH,aAAe7C,EAAUz/G,KAAKqiH,aAC7CriH,KAAKihH,WAAW3wG,OAAOrB,GAEvBjP,KAAKihH,WAAW/F,YAAYjsG,GAE5BjP,KAAKujH,aACLvjH,KAAK8mE,aAAax2D,OAAOrB,GAC7BjP,KAAK+gH,YAAYzwG,OAAOrB,GACxBjP,KAAKmhH,aAAa7wG,OAAOrB,GACzBjP,KAAK6qE,aAAav6D,OAAOrB,GACzBjP,KAAKslH,sBAAwBtlH,KAAK+jH,6BAClC/jH,KAAK4gE,6BACL5gE,KAAKuuE,QAAQ,eAIbkxC,EAAUz/G,KAAKsiH,aACftiH,KAAKihH,WAAW3wG,OAAOrB,GACnBjP,KAAKujH,aACLvjH,KAAK8mE,aAAax2D,OAAOrB,IAExBwwG,EAAUz/G,KAAKqiH,cAChBriH,KAAKulH,gBAAmB9F,EAAUz/G,KAAKmiH,eAAkBniH,KAAKujH,cAC9DvjH,KAAK8mE,aAAax2D,OAAOrB,IAExBwwG,EAAUz/G,KAAKsiH,aAAe7C,EAAUz/G,KAAKmiH,gBAC9CniH,KAAKujH,aACLvjH,KAAK8mE,aAAax2D,OAAOrB,GAG7BwwG,EAAUz/G,KAAKiiH,gBACfjiH,KAAK6qE,aAAav6D,OAAOrB,GACzBjP,KAAK4gE,wBACL5gE,KAAKslH,sBAAwBtlH,KAAK+jH,8BAGlCtE,GAAWz/G,KAAKkiH,cAAgBliH,KAAKyiH,sBACrCziH,KAAKmhH,aAAa7wG,OAAOrB,GAGzBwwG,GAAWz/G,KAAKkiH,cAAgBliH,KAAKwiH,qBACrCxiH,KAAK+gH,YAAYzwG,OAAOrB,GAG5BjP,KAAKuuE,QAAQ,cAjGb,MAFIvuE,KAAKgjH,UAAYvD,CAoGzB,EAGAz/G,KAAKwlH,UAAY,WACb,IAAI1hF,EAAS9jC,KAAKmgE,QAAQ4/B,kBAAoB//F,KAAK8pE,WAC/C1wB,EAAYp5C,KAAK2sG,UAAY3sG,KAAK8pE,WAClC27C,EAAgB5/F,KAAKkf,KACpB/kC,KAAK4sG,WAAW,GAAK5sG,KAAK8pE,WAC3BjkD,KAAKif,IAAIsU,EAAWtV,IACpB9jC,KAAKwhH,aAAah4G,GAAKxJ,KAAKqjH,cAAgB,GAC5CrjH,KAAKohH,eACLqE,GAAiBzlH,KAAKsyE,WAAW/L,aACrC,IAAI+D,EAAUxmC,EAASsV,EAEvB,GAAIqsE,GAAiBzlH,KAAKylH,eACtBzlH,KAAK0hH,MAAM59E,QAAU9jC,KAAKylH,eAAiBn7C,GAAWtqE,KAAKqhH,SAAU,CACjE/2C,GAAWtqE,KAAKqhH,WAChBrhH,KAAKqhH,SAAW/2C,EAChBtqE,KAAKqyE,WAAWmsC,WAAWl0C,IAG/B,IAAI9iD,EAAIxnB,KAAKqH,UAAUkhD,YACvBvoD,KAAKqH,UAAUX,MAAMo9B,OAAS2hF,EAAgB,KAC9CzlH,KAAKojH,mBAAkB,EAAMpjH,KAAK0lH,aAAcl+F,EAAGi+F,GACnDzlH,KAAKylH,cAAgBA,EAErBzlH,KAAKuuE,QAAQ,WACjB,CACJ,EAEAvuE,KAAKwjH,oBAAsB,WACvB,IAAIrjD,EAAUngE,KAAKmgE,QACfu7B,EAAO17F,KAAK0hH,MAEZiE,EAAiBjqB,EAAK53D,QAAU,EAAI9jC,KAAK8pE,WACzC87C,EAAc5lH,KAAKmgE,QAAQ4/B,kBAC3B3mD,EAAYwsE,EAAc5lH,KAAK8pE,WAE/B+7C,EAAc7lH,KAAK8lH,kBAEnBC,GAAeJ,IAAmB3lH,KAAKykH,0BACvC/oB,EAAKkmB,cAAgBiE,EAAc,EAAI7lH,KAAKk4G,SAAW,GAEvD8N,EAAiBhmH,KAAKohH,eAAiB2E,EACvCC,IACAhmH,KAAKohH,aAAe2E,EACpB/lH,KAAKsyE,WAAWksC,WAAWuH,IAE/B,IAAIE,EAAgBjmH,KAAKqhH,SACrBrhH,KAAK2sG,WAAa3sG,KAAK8pE,WAAa,GACpC9pE,KAAKwlH,YAET,IAAItpD,EAASl8D,KAAKkH,UAAYlH,KAAK8pE,WAC/BkuC,EAAYtc,EAAKimB,eAAiB3hH,KAAK8pE,WAEvCqrC,GAAiBn1G,KAAK2sG,WAAa3sG,KAAKglH,gBACrCtpB,EAAKimB,eAAiB3hH,KAAK8pE,YAAc9pE,KAAKglH,eAC/C,EACN5rE,GAAa+7D,EAEb,IAAIoP,EAAKvkH,KAAKwhH,aACdxhH,KAAKmgE,QAAQm5B,aAAazzE,KAAKkf,KAAKw/E,EAAGp9G,IACnC0e,KAAKif,IAAI9kC,KAAKkH,UAAWkyC,EAAYsiD,EAAKimB,eAAiB4C,EAAGvgF,UAElEhkC,KAAKmgE,QAAQs5B,cAAc5zE,KAAKkf,KAAKw/E,EAAG12E,KAAMhoB,KAAKif,IAAI9kC,KAAK+tC,WACxD83E,EAAc,EAAI7lH,KAAKk4G,SAAWxc,EAAKkmB,cAAgB2C,EAAGhzE,SAE9D,IAAI+4B,GAAWq7C,IAAmB3lH,KAAK6kH,0BACnCnpB,EAAKimB,eAAiBvoE,EAAY+7D,EAAgB,GAAKn1G,KAAKkH,UAAYq9G,EAAGp9G,KAC3E++G,EAAiBD,IAAkB37C,EACnC47C,IACAlmH,KAAKqhH,SAAW/2C,EAChBtqE,KAAKqyE,WAAWmsC,WAAWl0C,IAG/B,IAGI+uC,EAAgB8M,EAHhBC,EAAYvgG,KAAKuyF,KAAKJ,EAAYh4G,KAAK8pE,YAAc,EACrD4M,EAAW7wD,KAAKkf,IAAI,EAAGlf,KAAK47B,OAAOzhD,KAAKkH,UAAYg1D,GAAUl8D,KAAK8pE,aACnE6M,EAAUD,EAAW0vC,EAErBt8C,EAAa9pE,KAAK8pE,WACtB4M,EAAWvW,EAAQk/B,oBAAoB3oB,EAAU,GACjD,IAAIsD,EAAW7Z,EAAQ8Z,YAAYvD,GAC/BsD,IACAtD,EAAWsD,EAAS9xC,MAAM66B,KAG9Bs2C,EAAiBl5C,EAAQuH,oBAAoBgP,EAAU,GACvDyvC,EAAiBhmD,EAAQ0+B,aAAanoB,GAAY5M,EAElD6M,EAAU9wD,KAAKif,IAAIq7B,EAAQk/B,oBAAoB1oB,EAAS,GAAIxW,EAAQmH,YAAc,GAClF0wC,EAAYtc,EAAKimB,eAAiBxhD,EAAQ0+B,aAAaloB,GAAW7M,EAC1Bq8C,EAExCjqD,EAASl8D,KAAKkH,UAAYmyG,EAAiBvvC,EAE3C,IAAI21C,EAAU,EAyBd,OAxBIz/G,KAAK+pE,YAAY9/B,OAAS47E,IAC1BpG,EAAUz/G,KAAK0iH,kBACfsD,GAAkBE,KAClBzG,EAAUz/G,KAAKojH,mBAAkB,EAAMpjH,KAAKi3G,YAAavb,EAAKzxD,MAAOyxD,EAAK53D,QAC1E9jC,KAAKuuE,QAAQ,8BACT23C,IACAL,EAAc7lH,KAAK8lH,oBAG3B9lH,KAAK+pE,YAAc,CACf9/B,MAAQ47E,EACRh/G,QAAU7G,KAAKk4G,SACfxhC,SAAWA,EACX2iC,eAAgBA,EAChB1iC,QAAUA,EACV7M,WAAaA,EACbE,eAAiBhqE,KAAKgqE,eACtBguC,UAAYA,EACZ5+D,UAAYA,EACZ8iB,OAASA,EACTo7C,aAAezxF,KAAKkf,IAAI,EAAGlf,KAAKuyF,MAAMl8C,EAASw/B,EAAK53D,OAAS43D,EAAKimB,gBAAkB73C,IACpFhmC,OAAS9jC,KAAK0hH,MAAMC,gBAGjBlC,CACX,EAEAz/G,KAAKulH,aAAe,WAChB,IAAI7uC,EAAW12E,KAAK8iH,cAAcpsC,SAC9BC,EAAU32E,KAAK8iH,cAAcnsC,QACjC32E,KAAK8iH,cAAgB,KAErB,IAAI/4C,EAAc/pE,KAAK+pE,YAEvB,KAAI2M,EAAW3M,EAAY4M,QAAU,MACjCA,EAAU5M,EAAY2M,UAC1B,OAAIC,IAAYx9D,KACRnZ,KAAKujH,aACLvjH,KAAK8mE,aAAax2D,OAAOy5D,QAC7B/pE,KAAKihH,WAAW3wG,OAAOy5D,KAG3B/pE,KAAKihH,WAAW5U,YAAYtiC,EAAa2M,EAAUC,IAC5C,EACX,EAEA32E,KAAK8lH,gBAAkB,WACnB,IAAIO,EAAYrmH,KAAKmgE,QAAQw5B,iBAI7B,OAHI35F,KAAK+uG,iBAAmB/uG,KAAKmgE,QAAQqwB,eACrC61B,GAAa,GAEVxgG,KAAKkf,IAAI/kC,KAAK0hH,MAAME,cAAgB,EAAI5hH,KAAKk4G,SAAUryF,KAAK47B,MAAM4kE,EAAYrmH,KAAKgqE,gBAC9F,EACAhqE,KAAKotG,mBAAqB,WACtBptG,KAAKmhH,aAAapI,WAAW/4G,KAAKmgE,QAAQ03B,YAAW,IACrD73F,KAAK8hH,MAAMvlD,SAASv8D,KAAKyiH,oBAC7B,EACAziH,KAAKqtG,kBAAoB,WACrBrtG,KAAK+gH,YAAYhI,WAAW/4G,KAAKmgE,QAAQ03B,cACzC73F,KAAK8hH,MAAMvlD,SAASv8D,KAAKwiH,mBAC7B,EACAxiH,KAAKi3F,oBAAsB,SAASl0B,EAAK59B,GACrCnlC,KAAK8mE,aAAamwB,oBAAoBl0B,EAAK59B,EAC/C,EACAnlC,KAAKk3F,uBAAyB,SAASn0B,EAAK59B,GACxCnlC,KAAK8mE,aAAaowB,uBAAuBn0B,EAAK59B,EAClD,EACAnlC,KAAKstG,kBAAoB,SAAS1xB,GAC9B57E,KAAK8hH,MAAMvlD,SAASv8D,KAAKmiH,cAC7B,EACAniH,KAAKg4F,eAAiB,SAASC,GAC3Bj4F,KAAK8mE,aAAakxB,eAAeC,GACjCj4F,KAAK8hH,MAAMvlD,SAASv8D,KAAKmiH,cAC7B,EACAniH,KAAKosG,aAAe,WAChBpsG,KAAK8hH,MAAMvlD,SAASv8D,KAAKiiH,cAC7B,EACAjiH,KAAKisG,WAAa,WACdjsG,KAAK6qE,aAAaohC,YACtB,EACAjsG,KAAK+rG,WAAa,WACd/rG,KAAK6qE,aAAakhC,YACtB,EAEA/rG,KAAKwoG,wBAA0B,SAASt+D,EAAQmtC,EAAMnb,GAClDl8D,KAAKukE,qBAAqBr6B,EAAQgyB,GAClCl8D,KAAKukE,qBAAqB8S,EAAMnb,EACpC,EACAl8D,KAAKukE,qBAAuB,SAASjkB,EAAQ4b,EAAQoqD,GACjD,GAAkC,IAA9BtmH,KAAK0hH,MAAMC,eAAf,CAGA,IAAIt2F,EAAMrrB,KAAK6qE,aAAagzC,iBAAiBv9D,GAEzCzS,EAAOxiB,EAAIwiB,KACX1mC,EAAMkkB,EAAIlkB,IAEVo/G,EAAYD,GAAeA,EAAYn/G,KAAO,EAC9Cq/G,EAAeF,GAAeA,EAAYtiF,QAAU,EAEpD98B,EAAYlH,KAAKuhH,iBAAmBvhH,KAAKmgE,QAAQo5B,eAAiBv5F,KAAKkH,UAEvEA,EAAYq/G,EAAYp/G,GACpB+0D,GAAUh1D,EAAYq/G,EAAYp/G,EAAMnH,KAAK8pE,aAC7C3iE,GAAO+0D,EAASl8D,KAAK0hH,MAAMC,gBACnB,IAARx6G,IACAA,GAAOnH,KAAKwhH,aAAar6G,KAC7BnH,KAAKmgE,QAAQm5B,aAAanyF,IACnBD,EAAYlH,KAAK0hH,MAAMC,eAAiB6E,EAAer/G,EAAMnH,KAAK8pE,aACrE5N,GAAUh1D,EAAYlH,KAAK0hH,MAAMC,eAAiB6E,EAAer/G,EAAOnH,KAAK8pE,aAC7E3iE,GAAO+0D,EAASl8D,KAAK0hH,MAAMC,gBAC/B3hH,KAAKmgE,QAAQm5B,aAAanyF,EAAMnH,KAAK8pE,WAAa9pE,KAAK0hH,MAAMC,iBAGjE,IAAI5zE,EAAa/tC,KAAK+tC,WAElBA,EAAaF,GACTA,EAAO7tC,KAAKk4G,SAAW,EAAIl4G,KAAK+pE,YAAYC,iBAC5Cn8B,GAAQ7tC,KAAKwhH,aAAa3zE,MAC9B7tC,KAAKmgE,QAAQs5B,cAAc5rD,IACpBE,EAAa/tC,KAAK0hH,MAAME,cAAgB/zE,EAAO7tC,KAAKgqE,eAC3DhqE,KAAKmgE,QAAQs5B,cAAc5zE,KAAK47B,MAAM5T,EAAO7tC,KAAKgqE,eAAiBhqE,KAAK0hH,MAAME,gBACvE7zE,GAAc/tC,KAAKk4G,UAAYrqE,EAAOE,EAAa/tC,KAAKgqE,gBAC/DhqE,KAAKmgE,QAAQs5B,cAAc,EAjCrB,CAmCd,EACAz5F,KAAKu5F,aAAe,WAChB,OAAOv5F,KAAKmgE,QAAQo5B,cACxB,EACAv5F,KAAK05F,cAAgB,WACjB,OAAO15F,KAAKmgE,QAAQu5B,eACxB,EACA15F,KAAK6xG,gBAAkB,WACnB,OAAO7xG,KAAKkH,UAAYlH,KAAK8pE,UACjC,EACA9pE,KAAK4xG,mBAAqB,WACtB,OAAO/rF,KAAKkf,IAAI,EAAGlf,KAAKD,OAAO5lB,KAAKkH,UAAYlH,KAAK0hH,MAAMC,gBAAkB3hH,KAAK8pE,YAAc,EACpG,EACA9pE,KAAK+xG,YAAc,SAAShvC,GACxB/iE,KAAKmgE,QAAQm5B,aAAav2B,EAAM/iE,KAAK8pE,WACzC,EAEA9pE,KAAKkyG,YAAc,SAAS5xD,EAAQmmE,GACX,iBAAVnmE,IACPA,EAAS,CAACyiB,IAAKziB,EAAQ0iB,OAAQ,IAEnC,IAAI33C,EAAMrrB,KAAK6qE,aAAagzC,iBAAiBv9D,GACzCj7C,EAAIrF,KAAK0hH,MAAMC,eAAiB3hH,KAAK8pE,WACrC5N,EAAS7wC,EAAIlkB,IAAM9B,GAAKohH,GAAa,GAGzC,OADAzmH,KAAKmgE,QAAQm5B,aAAap9B,GACnBA,CACX,EAEAl8D,KAAK0mH,MAAQ,EACb1mH,KAAK2mH,WAAa,SAASC,EAAWC,GAClC,IAAI9gH,EAAI,EACJ8B,EAAI7H,KAAK0mH,MACTI,EAAQ,GAERt1E,EAAQ,SAAS9rC,EAAGqhH,EAAOC,GAC3B,OAAOA,GAAMnhG,KAAK0uC,IAAI7uD,EAAI,EAAG,GAAK,GAAKqhH,CAC3C,EAEA,IAAKhhH,EAAI,EAAGA,EAAI8B,IAAK9B,EACjB+gH,EAAMp6G,KAAK8kC,EAAKzrC,EAAI/F,KAAK0mH,MAAOE,EAAWC,EAAUD,IAEzD,OAAOE,CACX,EACA9mH,KAAKgyG,aAAe,SAASv9D,EAAMw9D,EAAQjtE,EAAS50B,GAChD,IAAIib,EAAMrrB,KAAK6qE,aAAagzC,iBAAiB,CAAC96C,IAAKtuB,EAAMuuB,OAAQ,IAC7D9G,EAAS7wC,EAAIlkB,IACb8qG,IACA/1C,GAAUl8D,KAAK0hH,MAAMC,eAAiB,GAE1C,IAAIsF,EAAgBjnH,KAAKkH,UACzBlH,KAAKmgE,QAAQm5B,aAAap9B,IACV,IAAZl3B,GACAhlC,KAAKyoG,iBAAiBwe,EAAe72G,EAC7C,EAEApQ,KAAKyoG,iBAAmB,SAASme,EAAWx2G,GACxC,IAAIy2G,EAAU7mH,KAAKkH,UACnB,GAAKlH,KAAK4jH,gBAAV,CAEA,IAAI1jH,EAAQF,KAEZ,GAAI4mH,GAAaC,EAAjB,CAGA,GAAI7mH,KAAKuhH,iBAAkB,CACvB,IAAI2F,EAAWlnH,KAAKuhH,iBAAiBuF,MACrC,GAAII,EAASx/G,SACTk/G,EAAYM,EAAS,GACjBN,GAAaC,GACb,MAEZ,CAEA,IAAIC,EAAQ5mH,EAAMymH,WAAWC,EAAWC,GACxC7mH,KAAKuhH,iBAAmB,CAACz1D,KAAM86D,EAAWr9F,GAAIs9F,EAASC,MAAOA,GAE9D/7C,cAAc/qE,KAAKmnH,QAEnBjnH,EAAMigE,QAAQm5B,aAAawtB,EAAMhjG,SACjC5jB,EAAMigE,QAAQk5B,WAAawtB,EAC3B7mH,KAAKmnH,OAAS9iF,aAAY,WAClByiF,EAAMp/G,QACNxH,EAAMigE,QAAQm5B,aAAawtB,EAAMhjG,SACjC5jB,EAAMigE,QAAQk5B,WAAawtB,GACT,MAAXA,GACP3mH,EAAMigE,QAAQk5B,YAAc,EAC5Bn5F,EAAMigE,QAAQm5B,aAAautB,GAC3BA,EAAU,OAEV3mH,EAAMinH,OAASp8C,cAAc7qE,EAAMinH,QACnCjnH,EAAMqhH,iBAAmB,KACzBnxG,GAAYA,IAEpB,GAAG,GA/BO,CAJA,CAoCd,EACApQ,KAAKusG,UAAY,SAASrlG,GAClBlH,KAAKkH,YAAcA,IACnBlH,KAAK8hH,MAAMvlD,SAASv8D,KAAKoiH,eACzBpiH,KAAKkH,UAAYA,EAEzB,EACAlH,KAAKwsG,UAAY,SAASz+D,GAClB/tC,KAAK+tC,aAAeA,IACpB/tC,KAAK+tC,WAAaA,GACtB/tC,KAAK8hH,MAAMvlD,SAASv8D,KAAK0iH,gBAC7B,EACA1iH,KAAK23C,SAAW,SAAS3uB,EAAGjgB,GACxB/I,KAAKmgE,QAAQm5B,aAAavwF,GAC1B/I,KAAKmgE,QAAQs5B,cAAc1wF,EAC/B,EACA/I,KAAK6lE,SAAW,SAAS3N,EAAQC,GAC7BA,GAAUn4D,KAAKmgE,QAAQm5B,aAAat5F,KAAKmgE,QAAQo5B,eAAiBphC,GAClED,GAAUl4D,KAAKmgE,QAAQs5B,cAAcz5F,KAAKmgE,QAAQu5B,gBAAkBxhC,EACxE,EACAl4D,KAAK2lE,eAAiB,SAASzN,EAAQC,GACnC,OAAIA,EAAS,GAAKn4D,KAAKmgE,QAAQo5B,gBAAkB,EAAIv5F,KAAKwhH,aAAar6G,MAEnEgxD,EAAS,GAAKn4D,KAAKmgE,QAAQo5B,eAAiBv5F,KAAK0hH,MAAMC,eACrD3hH,KAAK+pE,YAAY3wB,WAAa,EAAIp5C,KAAKwhH,aAAax9E,SAEtDk0B,EAAS,GAAKl4D,KAAKmgE,QAAQu5B,iBAAmB,EAAI15F,KAAKwhH,aAAa3zE,OAEpEqqB,EAAS,GAAKl4D,KAAKmgE,QAAQu5B,gBAAkB15F,KAAK0hH,MAAME,cACtD5hH,KAAK+pE,YAAY9/B,OAAS,EAAIjqC,KAAKwhH,aAAajwE,YADtD,IAGJ,EAEAvxC,KAAKwnE,yBAA2B,SAASx+C,EAAGjgB,GACxC,IAAIq+G,EAAYpnH,KAAK0hE,SAAS9zB,wBAE1BsuB,GAAUlzC,EAAIhpB,KAAK+tC,WAAaq5E,EAAUv5E,KAAO7tC,KAAKk4G,UAAYl4G,KAAKgqE,eACvEjH,EAAMl9C,KAAKD,OAAO7c,EAAI/I,KAAKkH,UAAYkgH,EAAUjgH,KAAOnH,KAAK8pE,YAC7DhgC,EAAMjkB,KAAK47B,MAAMya,GAErB,MAAO,CAAC6G,IAAKA,EAAKC,OAAQl5B,EAAKwlD,KAAMpzB,EAASpyB,EAAM,EAAI,GAAK,EACjE,EAEA9pC,KAAK+jE,wBAA0B,SAAS/6C,EAAGjgB,GACvC,IAAIq+G,EAAYpnH,KAAK0hE,SAAS9zB,wBAE1B9D,EAAMjkB,KAAK47B,OACVz4B,EAAIhpB,KAAK+tC,WAAaq5E,EAAUv5E,KAAO7tC,KAAKk4G,UAAYl4G,KAAKgqE,gBAG9DjH,GAAOh6D,EAAI/I,KAAKkH,UAAYkgH,EAAUjgH,KAAOnH,KAAK8pE,WAEtD,OAAO9pE,KAAKmgE,QAAQqa,yBAAyBzX,EAAKl9C,KAAKkf,IAAI+E,EAAK,GACpE,EACA9pC,KAAKqnH,wBAA0B,SAAStkD,EAAKC,GACzC,IAAIokD,EAAYpnH,KAAK0hE,SAAS9zB,wBAC1BviB,EAAMrrB,KAAKmgE,QAAQ6W,yBAAyBjU,EAAKC,GAEjDh6C,EAAIhpB,KAAKk4G,SAAWryF,KAAK47B,MAAMp2B,EAAI23C,OAAShjE,KAAKgqE,gBACjDjhE,EAAIsiB,EAAI03C,IAAM/iE,KAAK8pE,WAEvB,MAAO,CACHniC,MAAOy/E,EAAUv5E,KAAO7kB,EAAIhpB,KAAK+tC,WACjClG,MAAOu/E,EAAUjgH,IAAM4B,EAAI/I,KAAKkH,UAExC,EACAlH,KAAKgsG,eAAiB,WAClBjrE,EAAIswB,YAAYrxD,KAAKqH,UAAW,YACpC,EACArH,KAAKksG,cAAgB,WACjBnrE,EAAIuwB,eAAetxD,KAAKqH,UAAW,YACvC,EACArH,KAAKkxG,gBAAkB,SAASnqG,GACvB/G,KAAKqkH,eACNrkH,KAAKqkH,aAAe,CAChBiD,qBAAsBtnH,KAAK2gE,sBAC3B3O,QAAShyD,KAAKsoD,SAAS5hD,MAAMsrD,UAGrChyD,KAAK2gE,uBAAwB,EAC7B5/B,EAAIswB,YAAYrxD,KAAKsoD,SAAU,mBAC/BtoD,KAAKsoD,SAAS5hD,MAAMsrD,QAAU,GAC9BhyD,KAAK4gE,uBACT,EACA5gE,KAAKmxG,mBAAqB,SAAS9oG,GAC/BrI,KAAK4gE,uBACT,EACA5gE,KAAKoxG,gBAAkB,WACdpxG,KAAKqkH,eAGVtjF,EAAIuwB,eAAetxD,KAAKsoD,SAAU,mBAClCtoD,KAAK2gE,sBAAwB3gE,KAAKqkH,aAAaiD,qBAC/CtnH,KAAKsoD,SAAS5hD,MAAMsrD,QAAUhyD,KAAKqkH,aAAaryD,QAChDhyD,KAAKqkH,aAAe,KACxB,EACArkH,KAAK8oD,SAAW,SAASV,EAAO6W,GAC5B,IAAI/+D,EAAQF,KAIZ,GAHAA,KAAKunH,SAAWn/D,EAChBloD,EAAM+tE,eAAe,cAAc,CAAC7lB,MAAMA,IAErCA,GAAyB,iBAATA,EAIjBypB,EAAUzpB,OAJ0B,CACpC,IAAI0C,EAAa1C,GAASpoD,KAAKiF,SAASmjD,MAAM0nB,aAC9C7gE,EAAOyiE,WAAW,CAAC,QAAS5mB,GAAa+mB,EAC7C,CAIA,SAASA,EAAUlsE,GACf,GAAIzF,EAAMqnH,UAAYn/D,EAClB,OAAO6W,GAAMA,IACjB,GAAKt5D,EAAO6hH,SAAZ,CAEAzmF,EAAIgxB,gBACApsD,EAAOqsD,QACPrsD,EAAO6hH,SACPtnH,EAAMmH,UAAU+2D,eAGhBl+D,EAAMkoD,OACNrnB,EAAIuwB,eAAepxD,EAAMmH,UAAWnH,EAAMkoD,MAAMo/D,UAEpD,IAAI3gH,EAAU,YAAalB,EAASA,EAAOkB,QACrC,YAAc3G,EAAMkoD,OAAS,CAAC,GAAK,EAAIloD,EAAMg4G,SAC/Ch4G,EAAMg4G,UAAYrxG,GAAW3G,EAAMg4G,UACnCh4G,EAAM44G,WAAWjyG,GACrB3G,EAAMunH,OAAS9hH,EAAO6hH,SAEtBtnH,EAAMkoD,MAAQziD,EACdo7B,EAAIswB,YAAYnxD,EAAMmH,UAAW1B,EAAO6hH,UACxCzmF,EAAIywB,YAAYtxD,EAAMmH,UAAW,WAAY1B,EAAO+hH,QAChDxnH,EAAMwhH,QACNxhH,EAAMwhH,MAAMz3E,MAAQ,EACpB/pC,EAAM+iH,oBAGV/iH,EAAM+tE,eAAe,cAAe,CAAC7lB,MAAMziD,IAC3Cs5D,GAAMA,GAzBI,CA0Bd,CACJ,EACAj/D,KAAKmrG,SAAW,WACZ,OAAOnrG,KAAKunH,QAChB,EACAvnH,KAAKmkE,SAAW,SAASz9D,EAAO+qD,GAC5B1wB,EAAIywB,YAAYxxD,KAAKqH,UAAWX,GAAmB,IAAZ+qD,EAC3C,EACAzxD,KAAK+kE,WAAa,SAASr+D,GACvBq6B,EAAIuwB,eAAetxD,KAAKqH,UAAWX,EACvC,EAEA1G,KAAK6rE,eAAiB,SAASnlE,GACvB1G,KAAK0hE,SAASh7D,MAAM45C,QAAU55C,IAC9B1G,KAAK0hE,SAASh7D,MAAM45C,OAAS55C,EACrC,EACA1G,KAAK2nH,eAAiB,SAAS56C,GAC3B/sE,KAAK0hE,SAASh7D,MAAM45C,OAASysB,CACjC,EACA/sE,KAAKgL,QAAU,WACXhL,KAAKihH,WAAWj2G,UAChBhL,KAAK6qE,aAAa7/D,SACtB,CAEH,GAAEpG,KAAKi8G,EAAgB54G,WAGxBgH,EAAO4gE,cAAcgxC,EAAgB54G,UAAW,WAAY,CACxDusG,eAAgB,CAAC1kC,cAAc,GAC/Bi/B,eAAgB,CACZrrG,IAAK,SAASxC,GACNlB,KAAKihH,WAAWnS,kBAAkB5tG,IAClClB,KAAK8hH,MAAMvlD,SAASv8D,KAAKsiH,YACjC,EACAxyC,cAAc,GAElBq/B,gBAAiB,CACbzrG,IAAK,WAAa1D,KAAK4iH,oBAAsB,EAC7C9yC,cAAc,GAElB2kC,kBAAmB,CACf/wG,IAAK,WAAa1D,KAAK4iH,oBAAsB,EAC7C9yC,aAAc,IAElB4kC,YAAa,CACThxG,IAAK,SAAS1B,GACQ,iBAAPA,IACPhC,KAAK2jH,mBAAqB3hH,GAC9BhC,KAAK0jH,mBAAqB1hH,EAC1BhC,KAAK4iH,oBACT,EACA5/G,IAAK,WACD,OAAOhD,KAAK0jH,kBAAoB1jH,KAAK2jH,kBACzC,GAEJ7O,WAAY,CACRpxG,IAAK,SAAS6mC,GACVvqC,KAAKkoE,QAAQxhE,MAAM0zC,QAAU7P,EAAO,QAAU,OAC9CvqC,KAAK8hH,MAAMvlD,SAASv8D,KAAKgiH,aACzBhiH,KAAK8gH,gBACT,EACAhxC,cAAc,GAElB6kC,gBAAiB,CACbjxG,IAAK,SAAS6mC,GACVxJ,EAAIywB,YAAYxxD,KAAKkoE,QAAS,wBAAyB39B,EAC3D,EACAulC,cAAc,GAElB8kC,gBAAiB,CACblxG,IAAK,SAAS6mC,GAAOvqC,KAAK8mE,aAAa6oC,mBAAmBplE,EAAK,EAC/DulC,cAAc,GAElB+kC,gBAAiB,CACbnxG,IAAK,SAAS6mC,GACVvqC,KAAK8mE,aAAawxC,mBAAmB/tE,GACrCvqC,KAAK8hH,MAAMvlD,SAASv8D,KAAKmiH,cAC7B,EACAryC,cAAc,GAElBilC,oBAAqB,CACjBrxG,IAAK,SAAS6mC,GACNvqC,KAAKihH,WAAWhS,uBAAuB1kE,IACvCvqC,KAAK8hH,MAAMvlD,SAASv8D,KAAKsiH,YACjC,EACAxyC,cAAc,GAElBykC,oBAAqB,CACjB7wG,IAAK,SAAS2qG,GACV,IAAKruG,KAAKgkH,qBAIN,OAHAhkH,KAAKgkH,qBAAuBjjF,EAAIt6B,cAAc,OAC9CzG,KAAKgkH,qBAAqB7+E,UAAY,8BACtCnlC,KAAKkoE,QAAQ5gE,YAAYtH,KAAKgkH,sBAIlChkH,KAAKgkH,qBAAqBt9G,MAAM0zC,QAAUi0D,EAAkB,GAAK,OAC7DruG,KAAK6qE,aAAa2oC,WAClBxzG,KAAK+jH,4BACb,EACAj0C,cAAc,EACd5uE,OAAO,GAEXmzG,wBAAyB,CACrB3wG,IAAK,SAAS1B,GACLhC,KAAKykH,0BAA6BzkH,KAAKohH,cACxCphH,KAAK8hH,MAAMvlD,SAASv8D,KAAKoiH,cACjC,EACAtyC,cAAc,GAElBwkC,wBAAyB,CACrB5wG,IAAK,SAAS1B,GACLhC,KAAK6kH,0BAA6B7kH,KAAKqhH,UACxCrhH,KAAK8hH,MAAMvlD,SAASv8D,KAAKoiH,cACjC,EACAtyC,cAAc,GAElBnpE,SAAW,CACPjD,IAAK,SAASg4F,GACS,iBAARA,IACPA,GAAc,MAClB17F,KAAKqH,UAAUX,MAAMC,SAAW+0F,EAChC17F,KAAK+iH,gBACT,EACAjzC,aAAc,IAElBklC,WAAY,CACRtxG,IAAK,SAAS8O,GACVxS,KAAKqH,UAAUX,MAAMsuG,WAAaxiG,EAClCxS,KAAK+iH,gBACT,GAEJ9N,SAAU,CACNvxG,IAAK,SAAS1B,GACVhC,KAAK+qG,YACT,GAEJmK,SAAU,CACNxxG,IAAK,SAAS1B,GACVhC,KAAK+qG,YACT,GAEJoK,cAAe,CACXzxG,IAAK,SAAS1B,GACVA,GAAOA,GAAO,EACVhC,KAAKglH,gBAAkBhjH,IAE3BhC,KAAKglH,eAAiBhjH,EACtBhC,KAAK8hH,MAAMvlD,SAASv8D,KAAKoiH,eAC7B,EACAtyC,aAAc,EACdN,YAAY,GAEhB4lC,iBAAkB,CACd1xG,IAAK,SAAS1B,GACVhC,KAAK8mE,aAAamxC,cAAgBj2G,EAClChC,KAAK8hH,MAAMvlD,SAASv8D,KAAKmiH,cAC7B,GAEJ/5D,MAAO,CACH1kD,IAAK,SAAS1B,GAAOhC,KAAK8oD,SAAS9mD,EAAK,EACxCgB,IAAK,WAAa,OAAOhD,KAAKunH,UAAYvnH,KAAKooD,KAAO,EACtD0nB,aAAc,mBACdN,YAAY,KAIpB/pE,EAAQo7G,gBAAkBA,CAC1B,IAEA94D,IAAImC,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,wBAAwB,eAAe,SAASS,EAAUllD,EAASE,GACnK,aAEA,IAAIouD,EAAMpJ,EAAS,cACfwlB,EAAMxlB,EAAS,cACfqjB,EAAerjB,EAAS,wBAAwBqjB,aAChD/+D,EAAS07C,EAAS,aAElBi9D,EAAe,SAASC,EAAoB78D,EAAK88D,EAAWC,GAO5D,GANA/nH,KAAKgoH,gBAAkBhoH,KAAKgoH,gBAAgBr8G,KAAK3L,MACjDA,KAAKioH,eAAiBjoH,KAAKioH,eAAet8G,KAAK3L,MAC/CA,KAAKkoH,UAAYloH,KAAKkoH,UAAUv8G,KAAK3L,MACjC2qD,EAASw9D,YAAcx9D,EAASy9D,QAChCz9D,EAASy9D,MAAQz9D,EAASw9D,WAE1Bl5G,EAAOjM,IAAI,cAAgB2nD,EAASy9D,MACpCL,EAAYA,GAAa94G,EAAOqiE,UAAUtmB,EAAIn6C,GAAI,cAC/C,CACH,IAAIw3G,EAAgBroH,KAAKsoH,eACzBP,EAAYA,GAAaM,EAAc19D,EAASy9D,MAAM,uBAAwB,KAAM,MAEpF,IAAIG,EAAO,CAAC,EACZV,EAAmB39G,SAAQ,SAASmhD,GAChCk9D,EAAKl9D,GAAMg9D,EAAc19D,EAASy9D,MAAM/8D,EAAI,KAAM,KAAKpsC,QAAQ,kBAAmB,IACtF,GACJ,CAEA,IACQ,IAAIupG,EAAYx9D,EAAI+d,IACxB0/C,EAAO,EAAoB,IAC3BC,EAAO,IAAID,EAAK,CAAED,GAAa,CAAE/mH,KAAM,2BACvCknH,GAAW3hH,OAAO4hH,KAAO5hH,OAAO6hH,WAAWC,gBAAgBJ,GAE/D1oH,KAAK6rF,QAAU,IAAIk9B,OAAOJ,EAE1B,CAAE,MAAMxlH,GACJ,KAAIA,aAAa6D,OAAOgiH,cAQpB,MAAM7lH,EAPFulH,EAAO1oH,KAAKipH,YAAYlB,GAA5B,IACIa,EAAM5hH,OAAO4hH,KAAO5hH,OAAO6hH,UAC3BK,EAAUN,EAAIE,gBAAgBJ,GAElC1oH,KAAK6rF,QAAU,IAAIk9B,OAAOG,GAC1BN,EAAIO,gBAAgBD,EAI5B,CACAlpH,KAAK6rF,QAAQtxB,YAAY,CACrBmW,MAAO,EACP63C,KAAOA,EACP5iH,OAASqlD,EAAIn6C,GACbi3G,UAAYA,IAGhB9nH,KAAKopH,WAAa,EAClBppH,KAAKqpH,UAAY,CAAC,EAElBrpH,KAAK6rF,QAAQy9B,UAAYtpH,KAAKkoH,SAClC,GAEA,WAEIn0D,EAAID,UAAU9zD,KAAMguE,GAEpBhuE,KAAKkoH,UAAY,SAAS/kH,GACtB,IAAIusE,EAAMvsE,EAAEd,KACZ,OAAOqtE,EAAIjuE,MACP,IAAK,QACDzB,KAAKuuE,QAAQmB,EAAIl9D,KAAM,CAACnQ,KAAMqtE,EAAIrtE,OAClC,MACJ,IAAK,OACD,IAAI+N,EAAWpQ,KAAKqpH,UAAU35C,EAAI7+D,IAC9BT,IACAA,EAASs/D,EAAIrtE,aACNrC,KAAKqpH,UAAU35C,EAAI7+D,KAE9B,MACJ,IAAK,QACD7Q,KAAKyvE,YAAYC,EAAIrtE,MACrB,MACJ,IAAK,MACD2E,OAAOqH,SAAWA,QAAQuhB,KAAOvhB,QAAQuhB,IAAInmB,MAAM4E,QAASqhE,EAAIrtE,MAChE,MAEZ,EAEArC,KAAKyvE,YAAc,SAASrhE,GACxBpH,OAAOqH,SAAWA,QAAQ/N,OAAS+N,QAAQ/N,MAAM8N,EACrD,EAEApO,KAAKsoH,eAAiB,SAASvpG,GAC3B,OAAOoxD,EAAIpC,WAAWhvD,EAC1B,EAEA/e,KAAKo5F,UAAY,WACbp5F,KAAKuuE,QAAQ,YAAa,CAAC,GAC3BvuE,KAAKupH,WAAa,KAClBvpH,KAAK6rF,QAAQuN,YACbp5F,KAAK6rF,QAAU,KACX7rF,KAAKi2G,MACLj2G,KAAKi2G,KAAKppG,IAAI,SAAU7M,KAAKioH,gBACjCjoH,KAAKi2G,KAAO,IAChB,EAEAj2G,KAAK2tE,KAAO,SAAS67C,EAAK9zF,GACtB11B,KAAK6rF,QAAQtxB,YAAY,CAAC6a,QAASo0C,EAAK9zF,KAAMA,GAClD,EAEA11B,KAAK4E,KAAO,SAAS4kH,EAAK9zF,EAAMtlB,GAC5B,GAAIA,EAAU,CACV,IAAIS,EAAK7Q,KAAKopH,aACdppH,KAAKqpH,UAAUx4G,GAAMT,EACrBslB,EAAKhpB,KAAKmE,EACd,CACA7Q,KAAK2tE,KAAK67C,EAAK9zF,EACnB,EAEA11B,KAAK0K,KAAO,SAAS26B,EAAOhjC,GACxB,IACIrC,KAAK6rF,QAAQtxB,YAAY,CAACl1B,MAAOA,EAAOhjC,KAAM,CAACA,KAAMA,EAAKA,OAC9D,CACA,MAAMonH,GACFp7G,QAAQ/N,MAAMmpH,EAAGr2E,MACrB,CACJ,EAEApzC,KAAK0pH,iBAAmB,SAAS34D,GAC1B/wD,KAAKi2G,MACJj2G,KAAKo5F,YAETp5F,KAAKi2G,KAAOllD,EACZ/wD,KAAK4E,KAAK,WAAY,CAACmsD,EAAItuB,aAC3BsuB,EAAIxwD,GAAG,SAAUP,KAAKioH,eAC1B,EAEAjoH,KAAKioH,eAAiB,SAASjhG,GACtBhnB,KAAKupH,aACNvpH,KAAKupH,WAAa,GAClBt5F,WAAWjwB,KAAKgoH,gBAAiB,IAEjB,UAAhBhhG,EAAM7e,OACNnI,KAAKupH,WAAW78G,KAAKsa,EAAMkhB,MAAOlhB,EAAMouB,OAExCp1C,KAAKupH,WAAW78G,KAAKsa,EAAMkhB,MAAOlhB,EAAMmhB,IAChD,EAEAnoC,KAAKgoH,gBAAkB,WACnB,IAAIlgG,EAAI9nB,KAAKupH,WACRzhG,IACL9nB,KAAKupH,WAAa,KACdzhG,EAAEpgB,OAAS,IAAMogB,EAAEpgB,OAAS1H,KAAKi2G,KAAK3uC,aAAe,EACrDtnE,KAAK4E,KAAK,WAAY,CAAC5E,KAAKi2G,KAAKxzE,aAEjCziC,KAAK0K,KAAK,SAAU,CAACrI,KAAMylB,IACnC,EAEA9nB,KAAKipH,YAAc,SAASlB,GACxB,IAAI92C,EAAS,kBAAoBd,EAAIpC,WAAWg6C,GAAa,MAC7D,IACI,OAAO,IAAIU,KAAK,CAACx3C,GAAS,CAAC,KAAQ,0BACvC,CAAE,MAAO9tE,GACL,IAAIwmH,EAAc3iH,OAAO2iH,aAAe3iH,OAAO4iH,mBAAqB5iH,OAAO6iH,eACvEC,EAAc,IAAIH,EAEtB,OADAG,EAAYn+E,OAAOslC,GACZ64C,EAAYC,QAAQ,yBAC/B,CACJ,CAEH,GAAEnlH,KAAKgjH,EAAa3/G,WAGrB,IAAI+hH,EAAiB,SAASnC,EAAoB78D,EAAK88D,GACnD9nH,KAAKgoH,gBAAkBhoH,KAAKgoH,gBAAgBr8G,KAAK3L,MACjDA,KAAKioH,eAAiBjoH,KAAKioH,eAAet8G,KAAK3L,MAC/CA,KAAKopH,WAAa,EAClBppH,KAAKqpH,UAAY,CAAC,EAClBrpH,KAAKiqH,cAAgB,GAErB,IAAIC,EAAO,KACPC,GAAW,EACXC,EAAS/oH,OAAOyI,OAAOkkE,GACvB9tE,EAAQF,KAEZA,KAAK6rF,QAAU,CAAC,EAChB7rF,KAAK6rF,QAAQuN,UAAY,WAAY,EACrCp5F,KAAK6rF,QAAQtxB,YAAc,SAASp3D,GAChCjD,EAAM+pH,cAAcv9G,KAAKvJ,GACrB+mH,IACIC,EACAl6F,WAAWo6F,GAEXA,IAEZ,EACArqH,KAAKsqH,YAAc,SAAStoH,GAAOmoH,EAAWnoH,CAAI,EAElD,IAAIqoH,EAAc,WACd,IAAI36C,EAAMxvE,EAAM+pH,cAAcnmG,QAC1B4rD,EAAI0F,QACJ80C,EAAKx6C,EAAI0F,SAAS3rE,MAAMygH,EAAMx6C,EAAIh6C,MAC7Bg6C,EAAIrqC,OACT+kF,EAAO77C,QAAQmB,EAAIrqC,MAAOqqC,EAAIrtE,KACtC,EAEA+nH,EAAO7vD,YAAc,SAASmV,GAC1BxvE,EAAMgoH,UAAU,CAAC7lH,KAAMqtE,GAC3B,EACA06C,EAAOh6G,SAAW,SAAS/N,EAAM+mH,GAC7BppH,KAAKu6D,YAAY,CAAC94D,KAAM,OAAQoP,GAAIu4G,EAAY/mH,KAAMA,GAC1D,EACA+nH,EAAO1/G,KAAO,SAAS8H,EAAMnQ,GACzBrC,KAAKu6D,YAAY,CAAC94D,KAAM,QAAS+Q,KAAMA,EAAMnQ,KAAMA,GACvD,EAEA4M,EAAOyiE,WAAW,CAAC,SAAU1mB,IAAM,SAASu/D,GACxCL,EAAO,IAAIK,EAAKzC,GAAWsC,GAC3B,MAAOlqH,EAAM+pH,cAAcviH,OACvB2iH,GACR,GACJ,EAEAL,EAAe/hH,UAAY2/G,EAAa3/G,UAExCxC,EAAQukH,eAAiBA,EACzBvkH,EAAQmiH,aAAeA,CAEvB,IAEA7/D,IAAImC,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,YAAY,wBAAwB,gBAAgB,SAASS,EAAUllD,EAASE,GAC3I,aAEA,IAAI8vE,EAAQ9qB,EAAS,WAAW8qB,MAC5BzH,EAAerjB,EAAS,uBAAuBqjB,aAC/Cja,EAAMpJ,EAAS,aAEf6/D,EAAc,SAASrqD,EAASz4D,EAAQ2jB,EAAKo/F,EAAQC,EAAWC,GAChE,IAAIzqH,EAAQF,KACZA,KAAK0H,OAASA,EACd1H,KAAKmgE,QAAUA,EACfngE,KAAK+wD,IAAMoP,EAAQiX,cACnBp3E,KAAK0qH,UAAYA,EACjB1qH,KAAK2qH,YAAcA,EACnB3qH,KAAK4qH,UAAY5qH,KAAK6qH,SAASl/G,KAAK3L,MACpCA,KAAK+wD,IAAIxwD,GAAG,SAAUP,KAAK4qH,WAC3B5qH,KAAK8qH,QAAUL,EAEfzqH,KAAK6pG,gBAAkB,WACnB55E,YAAW,WACP/vB,EAAMyqG,gBACV,GACJ,EAEA3qG,KAAKynE,KAAOp8C,EACZ,IAAI0/F,EAAY5qD,EAAQ61B,iBAAiBogB,YAAcj2C,EAAQ61B,iBAAiBg1B,YAAc,CAACtjH,QAAS,GACxG1H,KAAKirH,gBAAkBF,EAAUrjH,OACjC1H,KAAKqZ,QAEL8mD,EAAQl/B,UAAU1gC,GAAG,eAAgBP,KAAK6pG,gBAC9C,GAEA,WAEI91C,EAAID,UAAU9zD,KAAMguE,GACpBhuE,KAAKqZ,MAAQ,WACT,IAAInZ,EAAQF,KACR+wD,EAAM/wD,KAAK+wD,IACXoP,EAAUngE,KAAKmgE,QAEnBngE,KAAKkrH,gBAAkB/qD,EAAQl/B,UAAU3T,SACrC6yC,EAAQl/B,UAAUyiC,mBAClBvD,EAAQl/B,UAAUu7C,gBAEtBx8E,KAAKqrB,IAAM0lC,EAAIwmB,aAAav3E,KAAKynE,KAAK1E,IAAK/iE,KAAKynE,KAAKzE,QACrD,IAAI33C,EAAMrrB,KAAKqrB,IACfA,EAAIy9D,cAAe,EACnBz9D,EAAIypD,SACJzpD,EAAIssE,SAAWx3B,EAAQwK,UAAU,IAAI8K,EAAMpqD,EAAI03C,IAAK13C,EAAI23C,OAAQ33C,EAAI03C,IAAK13C,EAAI23C,OAAShjE,KAAK0H,QAAS1H,KAAK0qH,UAAW,MAAM,GAC1H1qH,KAAKyqH,OAAS,GACdzqH,KAAK8qH,QAAQ5gH,SAAQ,SAAS64F,GAC1B,IAAI74D,EAAS6mB,EAAIwmB,aAAawrB,EAAMhgC,IAAKggC,EAAM//B,QAC/C94B,EAAO4+C,cAAe,EACtB5+C,EAAO4qC,SACP50E,EAAMuqH,OAAO/9G,KAAKw9B,EACtB,IACAi2B,EAAQy6B,eAAc,EAC1B,EACA56F,KAAKmrH,iBAAmB,WACpB,IAAInrH,KAAKorH,aAAT,CACA,IAAIjrD,EAAUngE,KAAKmgE,QACfjgE,EAAQF,KACZA,KAAKorH,cAAe,EACpBprH,KAAKyqH,OAAOvgH,SAAQ,SAASggC,GACzBA,EAAOytD,SAAWx3B,EAAQwK,UAAU,IAAI8K,EAAMvrC,EAAO64B,IAAK74B,EAAO84B,OAAQ94B,EAAO64B,IAAK74B,EAAO84B,OAAO9iE,EAAMwH,QAASxH,EAAMyqH,YAAa,MAAM,EAC/I,GAN6B,CAOjC,EACA3qH,KAAKqrH,iBAAmB,WACpB,GAAKrrH,KAAKorH,aAAV,CACAprH,KAAKorH,cAAe,EACpB,IAAK,IAAIrlH,EAAI,EAAGA,EAAI/F,KAAKyqH,OAAO/iH,OAAQ3B,IACpC/F,KAAKmgE,QAAQ+K,aAAalrE,KAAKyqH,OAAO1kH,GAAG4xF,SAHf,CAKlC,EACA33F,KAAK6qH,SAAW,SAAS7jG,GACrB,GAAIhnB,KAAK6wF,UACL,OAAO7wF,KAAKsrH,cAActkG,GAE9B,IAAIwd,EAAQxd,EACZ,GAAIwd,EAAM0D,MAAM66B,MAAQv+B,EAAM2D,IAAI46B,KAC9Bv+B,EAAM0D,MAAM66B,MAAQ/iE,KAAKqrB,IAAI03C,IAAjC,CACA/iE,KAAK6wF,WAAY,EACjB,IAAI06B,EAA8B,WAAjBvkG,EAAM7e,OAAsBq8B,EAAM2D,IAAI66B,OAASx+B,EAAM0D,MAAM86B,OAASx+B,EAAM0D,MAAM86B,OAASx+B,EAAM2D,IAAI66B,OAChHwoD,EAAchnF,EAAM0D,MAAM86B,QAAUhjE,KAAKqrB,IAAI23C,QAAUx+B,EAAM0D,MAAM86B,QAAUhjE,KAAKqrB,IAAI23C,OAAShjE,KAAK0H,OAAS,EAC7G+jH,EAAoBjnF,EAAM0D,MAAM86B,OAAShjE,KAAKqrB,IAAI23C,OAOtD,GALAhjE,KAAKsrH,cAActkG,GAEfwkG,IACAxrH,KAAK0H,QAAU6jH,GAEfC,IAAgBxrH,KAAKmgE,QAAQq1B,UAC7B,GAAqB,WAAjBxuE,EAAM7e,OACN,IAAK,IAAIpC,EAAI/F,KAAKyqH,OAAO/iH,OAAS,EAAG3B,GAAK,EAAGA,IAAK,CAC9C,IAAIi9F,EAAWhjG,KAAKyqH,OAAO1kH,GACvB2lH,EAAS,CAAC3oD,IAAKigC,EAASjgC,IAAKC,OAAQggC,EAAShgC,OAASyoD,GAC3DzrH,KAAK+wD,IAAIo4B,kBAAkBuiC,EAAQ1kG,EAAMouB,MAC7C,MACG,GAAqB,WAAjBpuB,EAAM7e,OACb,IAASpC,EAAI/F,KAAKyqH,OAAO/iH,OAAS,EAAG3B,GAAK,EAAGA,IAAK,CAC1Ci9F,EAAWhjG,KAAKyqH,OAAO1kH,GACvB2lH,EAAS,CAAC3oD,IAAKigC,EAASjgC,IAAKC,OAAQggC,EAAShgC,OAASyoD,GAC3DzrH,KAAK+wD,IAAIxpD,OAAO,IAAIkuE,EAAMi2C,EAAO3oD,IAAK2oD,EAAO1oD,OAAQ0oD,EAAO3oD,IAAK2oD,EAAO1oD,OAASuoD,GACrF,CAIRvrH,KAAK6wF,WAAY,EACjB7wF,KAAK2rH,eA5BuC,CA6BhD,EAEA3rH,KAAKsrH,cAAgB,SAAStkG,GAC1BhnB,KAAKqrB,IAAItoB,SAASikB,GAClB,IAAK,IAAIjhB,EAAI/F,KAAKyqH,OAAO/iH,OAAQ3B,KAC7B/F,KAAKyqH,OAAO1kH,GAAGhD,SAASikB,GAC5BhnB,KAAK2rH,eACT,EAEA3rH,KAAK2rH,cAAgB,WACjB,IAAI3rH,KAAK6wF,UAAT,CAEA,IAAI3wF,EAAQF,KACRmgE,EAAUngE,KAAKmgE,QACfyrD,EAAe,SAASvgG,EAAK8Z,GAC7Bg7B,EAAQ+K,aAAa7/C,EAAIssE,UACzBtsE,EAAIssE,SAAWx3B,EAAQwK,UAAU,IAAI8K,EAAMpqD,EAAI03C,IAAK13C,EAAI23C,OAAQ33C,EAAI03C,IAAK13C,EAAI23C,OAAO9iE,EAAMwH,QAASy9B,EAAW,MAAM,EACxH,EACAymF,EAAa5rH,KAAKqrB,IAAKrrB,KAAK0qH,WAC5B,IAAK,IAAI3kH,EAAI/F,KAAKyqH,OAAO/iH,OAAQ3B,KAC7B6lH,EAAa5rH,KAAKyqH,OAAO1kH,GAAI/F,KAAK2qH,YAT5B,CAUd,EAEA3qH,KAAK2qG,eAAiB,SAAStlE,GAC3B,IAAIrlC,KAAK6wF,WAAc7wF,KAAKmgE,QAA5B,CACA,IAAI90C,EAAMrrB,KAAKmgE,QAAQl/B,UAAU22C,YAC7BvsD,EAAI03C,MAAQ/iE,KAAKqrB,IAAI03C,KAAO13C,EAAI23C,QAAUhjE,KAAKqrB,IAAI23C,QAAU33C,EAAI23C,QAAUhjE,KAAKqrB,IAAI23C,OAAShjE,KAAK0H,QAClG1H,KAAKmrH,mBACLnrH,KAAKihE,MAAM,cAAe57B,KAE1BrlC,KAAKqrH,mBACLrrH,KAAKihE,MAAM,cAAe57B,GAPa,CAS/C,EACArlC,KAAK80E,OAAS,WACV90E,KAAKmgE,QAAQ+K,aAAalrE,KAAKqrB,KAAOrrB,KAAKqrB,IAAIssE,UAC/C33F,KAAKqrH,mBACLrrH,KAAK+wD,IAAIrlD,oBAAoB,SAAU1L,KAAK4qH,WAC5C5qH,KAAKmgE,QAAQl/B,UAAUv1B,oBAAoB,eAAgB1L,KAAK6pG,iBAChE7pG,KAAKmgE,QAAQy6B,eAAc,GAC3B56F,KAAKmgE,QAAU,IACnB,EACAngE,KAAKs8D,OAAS,WACV,IAA8B,IAA1Bt8D,KAAKirH,gBAAT,CAIA,IAFA,IAAI/0B,EAAcl2F,KAAKmgE,QAAQ61B,iBAC3B61B,GAAiB31B,EAAYkgB,YAAclgB,EAAY80B,YAAYtjH,OAAS1H,KAAKirH,gBAC5EllH,EAAI,EAAGA,EAAI8lH,EAAe9lH,IAC/BmwF,EAAY3vD,MAAK,GAEjBvmC,KAAKkrH,iBACLlrH,KAAKmgE,QAAQl/B,UAAUq7C,SAASt8E,KAAKkrH,gBAP/B,CAQd,CACH,GAAEtmH,KAAK4lH,EAAYviH,WAGpBxC,EAAQ+kH,YAAcA,CACtB,IAEAziE,IAAImC,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,gBAAgB,sBAAsB,SAASS,EAAUllD,EAASE,GAE5I,IAAI0/B,EAAQslB,EAAS,gBACjByL,EAAYzL,EAAS,oBACzB,SAASmhE,EAAYv2C,EAAIC,GACrB,OAAOD,EAAGxS,KAAOyS,EAAGzS,KAAOwS,EAAGvS,QAAUwS,EAAGxS,MAC/C,CAEA,SAAShB,EAAY7+D,GACjB,IAAI8/D,EAAK9/D,EAAE+9D,SACP6qD,EAAM9oD,EAAGtf,OACT7/B,EAAQm/C,EAAGx5B,SACXuiF,EAAO/oD,EAAGz5B,QACVyiF,EAAQ9oH,EAAEqiE,cACVjtB,EAASp1C,EAAE0zD,YAKf,GAHIm1D,GAAQ51D,EAAUrB,QAClBxc,EAAS0qB,EAAG1qB,QAEZp1C,EAAEb,OAAOohE,mBAA+B,GAAVnrB,EAC9Bp1C,EAAEb,OAAOm/D,UAAUT,cAAc79D,EAAE+9D,eAIvC,GAAK8qD,GAASD,GAAQE,GAMtB,GAAe,IAAX1zE,EAAJ,CAGA,IAiBI2zE,EAjBA5pH,EAASa,EAAEb,OACX2+B,EAAY3+B,EAAO2+B,UACnBkrF,EAAgB7pH,EAAOohE,kBACvBr4C,EAAMloB,EAAEggE,sBACR7iB,EAASrf,EAAU22C,YACnB1U,EAAc//D,EAAE+/D,eAAkBjiC,EAAU6d,WAAagtE,EAAYzgG,EAAKi1B,GAE1EC,EAASp9C,EAAE6lB,EAAG2a,EAASxgC,EAAE4F,EACzBqjH,EAAmB,SAASjpH,GAC5Bo9C,EAASp9C,EAAEo0D,QACX5zB,EAASxgC,EAAEq0D,OACf,EAEI2I,EAAU79D,EAAO69D,QACjBksD,EAAe/pH,EAAOo+D,SAAS8G,yBAAyBjnB,EAAQ5c,GAChE2oF,EAAeD,EAGnB,GAAI/pH,EAAOklG,cAAc+kB,iBACjBP,GAAQD,GAAOE,GAASF,EACxBG,EAAgBpoG,EAAQ,QAAU,MAC7BioG,GAAOzpH,EAAOkqH,sBACnBN,EAAgB,cAEpB,GAAID,IAAUF,GAEV,GADAG,EAAgB,OACXC,GAAiBroG,EAClB,YACGioG,GAAOzpH,EAAOkqH,sBACrBN,EAAgB,SAQxB,GAJIA,GAAiB91D,EAAUrB,OAASkO,EAAGz5B,SACvClnC,EAAOklG,cAAct0B,oBAGJ,OAAjBg5C,EAAwB,CACxB,IAAKC,GAAiBjpD,EAClB,OAEJ,IAAKipD,EAAe,CAChB,IAAI3nF,EAAQvD,EAAUypC,kBACtBpoE,EAAOmqH,mBAAmBjoF,EAC9B,CAEA,IAAIkoF,EAAWzrF,EAAUs7C,UAAUgS,aAAaljE,GAGhD/oB,EAAOumD,kBACPvmD,EAAOmrG,wBAAyB,EAE5B3pF,IACA4oG,EAAW,KACXloF,EAAQvD,EAAUm7C,OAAO,IAAM53C,EAC/BliC,EAAOqqH,sBAAsBnoF,IAEjCliC,EAAOsK,KAAK,WAAW,WACnB,IAAIggH,EAAS3rF,EAAUypC,kBAEnBgiD,GAAYE,EAAO9tE,WAAagtE,EAAYY,EAASpsE,OAAQssE,EAAOtsE,QACpErf,EAAUotD,eAAeu+B,EAAOtsE,SAE5Bx8B,EACAmd,EAAUotD,eAAe7pD,EAAM8b,QACxB9b,IACPliC,EAAOqqH,sBAAsBnoF,GAC7BvD,EAAUx0B,SAAS+3B,IAEvBvD,EAAUx0B,SAASmgH,IAEvBtqH,EAAOumD,kBACPvmD,EAAOmrG,wBAAyB,CACpC,GAEJ,MAAO,GAAqB,SAAjBye,EAA0B,CAGjC,IAAIhmC,EAFJ/iF,EAAE2iE,OACFxjE,EAAOmrG,wBAAyB,EAEhC,IAAIof,EAAU,GACVC,EAAc,WACd,IAAIC,EAAYzqH,EAAOo+D,SAAS8G,yBAAyBjnB,EAAQ5c,GAC7D2c,EAAS6f,EAAQqa,yBAAyBuyC,EAAUhqD,IAAKgqD,EAAU/pD,QAEnE8oD,EAAYQ,EAAcS,IAAcjB,EAAYxrE,EAAQrf,EAAUo2C,QAE1Ei1C,EAAeS,EAEfzqH,EAAOumD,kBACPvmD,EAAO2+B,UAAUuiC,eAAeljB,GAChCh+C,EAAOo+D,SAAS6D,uBAEhBjiE,EAAO0qH,uBAAuBH,GAC9BA,EAAU5rF,EAAUgsF,sBAAsBX,EAAcD,GACpD/pH,EAAOklG,cAAc1lC,iBAAqC,GAAlB+qD,EAAQnlH,QAAemlH,EAAQ,GAAG/tE,YAC1E+tE,EAAQ,GAAKvqH,EAAOklG,cAAc1lC,gBAAgBtlB,SACtDqwE,EAAQ3iH,QAAQ5H,EAAOmqH,mBAAoBnqH,GAC3CA,EAAO4qH,yBACP5qH,EAAOumD,kBACX,EACAvmD,EAAOumD,kBACHsjE,IAAkBF,EAClBhrF,EAAUu7C,iBACF2vC,GAAiBF,IACzB/lC,EAAejlD,EAAUypC,kBACzBpoE,EAAOmqH,mBAAmBvmC,IAG1BpiE,EACAuoG,EAAelsD,EAAQ6W,yBAAyB/1C,EAAUo2C,MAE1Dp2C,EAAUuiC,eAAen4C,GAC7B/oB,EAAOumD,kBAEPyjE,EAAe,CAACvpD,KAAM,EAAGC,QAAS,GAElC,IAAImqD,EAAsB,SAAShqH,GAC/B4nE,cAAc9B,GACd3mE,EAAO0qH,uBAAuBH,GACzBA,EAAQnlH,SACTmlH,EAAU,CAAC5rF,EAAUypC,oBACzBpoE,EAAOumD,kBACHq9B,IACA5jF,EAAOqqH,sBAAsBzmC,GAC7BjlD,EAAUu7C,cAAc0J,IAE5B,IAAK,IAAIngF,EAAI,EAAGA,EAAI8mH,EAAQnlH,OAAQ3B,IAChCk7B,EAAUx0B,SAASogH,EAAQ9mH,IAC/BzD,EAAOmrG,wBAAyB,EAChCnrG,EAAOklG,cAAc1lC,gBAAkB,KACvCx/D,EAAOumD,iBACX,EAEIukE,EAAsBN,EAE1BznF,EAAMyxB,QAAQx0D,EAAO+E,UAAW+kH,EAAkBe,GAClD,IAAIlkD,EAAU5kC,aAAY,WAAY+oF,GAAsB,GAAG,IAE/D,OAAOjqH,EAAEqiC,gBACb,CA7IU,OANS,IAAX+S,GAAgBp1C,EAAEb,OAAOohE,mBACzBvgE,EAAEb,OAAO4kG,qBAmJrB,CAGAzhG,EAAQu8D,YAAcA,CAEtB,IAEAja,IAAImC,OAAO,qCAAqC,CAAC,UAAU,UAAU,SAAS,8BAA8B,SAASS,EAAUllD,EAASE,GACxIF,EAAQ0hG,gBAAkB,CAAC,CACvB30F,KAAM,iBACNqP,KAAM,SAASvf,GAAUA,EAAO+qH,iBAAiB,EAAI,EACrD/jE,QAAS,CAACoR,IAAK,cAAeqpC,IAAK,eACnCG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,iBACNqP,KAAM,SAASvf,GAAUA,EAAO+qH,gBAAgB,EAAI,EACpD/jE,QAAS,CAACoR,IAAK,gBAAiBqpC,IAAK,iBACrCG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,4BACNqP,KAAM,SAASvf,GAAUA,EAAO+qH,iBAAiB,GAAG,EAAO,EAC3D/jE,QAAS,CAACoR,IAAK,oBAAqBqpC,IAAK,qBACzCG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,4BACNqP,KAAM,SAASvf,GAAUA,EAAO+qH,gBAAgB,GAAG,EAAO,EAC1D/jE,QAAS,CAACoR,IAAK,sBAAuBqpC,IAAK,uBAC3CG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,mBACNqP,KAAM,SAASvf,GAAUA,EAAOgrH,YAAY,EAAI,EAChDhkE,QAAS,CAACoR,IAAK,gBAAiBqpC,IAAK,iBACrCG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,kBACNqP,KAAM,SAASvf,GAAUA,EAAOgrH,WAAW,EAAI,EAC/ChkE,QAAS,CAACoR,IAAK,iBAAkBqpC,IAAK,kBACtCG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,mBACNqP,KAAM,SAASvf,GAAUA,EAAOgrH,YAAY,GAAG,EAAO,EACtDhkE,QAAS,CAACoR,IAAK,sBAAuBqpC,IAAK,uBAC3CG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,kBACNqP,KAAM,SAASvf,GAAUA,EAAOgrH,WAAW,GAAG,EAAO,EACrDhkE,QAAS,CAACoR,IAAK,uBAAwBqpC,IAAK,wBAC5CG,eAAgB,SAChBnjC,UAAU,GACX,CACCvuD,KAAM,iBACNqP,KAAM,SAASvf,GAAUA,EAAOirH,YAAYC,gBAAkB,EAC9DlkE,QAAS,CAACoR,IAAK,aAAcqpC,IAAK,cAClChjC,UAAU,GACX,CACCvuD,KAAM,eACNqP,KAAM,SAASvf,GAAUA,EAAOmrH,cAAgB,EAChDnkE,QAAS,CAACoR,IAAK,aAAcqpC,IAAK,cAClCG,eAAgB,UACjB,CACC1xF,KAAM,UACNqP,KAAM,SAASvf,GAAUA,EAAOu+F,SAAW,EAC3Cv3C,QAAS,CAACoR,IAAK,aAAcqpC,IAAK,cAClCG,eAAgB,SAChBnjC,UAAU,IAEdt7D,EAAQioH,oBAAsB,CAAC,CAC3Bl7G,KAAM,kBACN82C,QAAS,MACTznC,KAAM,SAASvf,GAAUA,EAAO4kG,qBAAuB,EACvDhD,eAAgB,SAChBnjC,UAAU,EACV4sD,YAAa,SAASrrH,GAAS,OAAOA,GAAUA,EAAOohE,iBAAiB,IAG5E,IAAIo+B,EAAcn3C,EAAS,4BAA4Bm3C,YACvDr8F,EAAQujG,gBAAkB,IAAIlH,EAAYr8F,EAAQioH,oBAElD,IAEA3lE,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,iBAAiB,YAAY,gBAAgB,iCAAiC,gBAAgB,eAAe,qCAAqC,aAAa,mBAAmB,aAAa,eAAe,SAASS,EAAUllD,EAASE,GAEtS,IAAIsoF,EAAYtjC,EAAS,gBAAgBsjC,UACrCxY,EAAQ9qB,EAAS,WAAW8qB,MAC5B0B,EAAYxsB,EAAS,eAAewsB,UACpCnV,EAAcrX,EAAS,gCAAgCqX,YACvD38B,EAAQslB,EAAS,eACjB9pD,EAAO8pD,EAAS,cAChBtB,EAAWsB,EAAS,oCACxBllD,EAAQ4jD,SAAWA,EAAS89C,gBAAgB3hG,OAAO6jD,EAASqkE,qBAC5D,IAAIjtB,EAAS91C,EAAS,YAAY81C,OAC9B/gF,EAAS,IAAI+gF,EAEjB,SAASC,EAAKvgC,EAAS2gC,EAAQ7O,GAI3B,OAHAvyE,EAAOza,SAAS2xB,MAAO,EACvBlX,EAAOza,SAAS67F,OAASA,EACzBphF,EAAOza,SAASo8F,WAAoB,GAARpP,EACrBvyE,EAAOghF,KAAKvgC,EACvB,CACA,IAAI+zB,EAAcvpC,EAAS,kBAAkBupC,aAC7C,WACIl0F,KAAK4tH,oBAAsB,WACvB,OAAO5tH,KAAKi+G,iBAChB,CACH,GAAEr5G,KAAKsvF,EAAYjsF,WACpB,WACIjI,KAAKo8E,OAAS,KACdp8E,KAAKu8E,UAAY,KACjBv8E,KAAKyM,SAAW,SAAS+3B,EAAOqpF,GAC5B,GAAKrpF,EAAL,CAGA,IAAKxkC,KAAK0jE,mBAAyC,IAApB1jE,KAAK8uC,WAAkB,CAClD,IAAI49E,EAAW1sH,KAAK0qE,kBAGpB,GAFA1qE,KAAKu8E,UAAUz3E,IAAI4nH,GACnB1sH,KAAKu8E,UAAUz3E,IAAI0/B,GACiB,GAAhCxkC,KAAKu8E,UAAUH,OAAO10E,OAEtB,OADA1H,KAAKu8E,UAAUkS,YACRo/B,GAAsB7tH,KAAKmrE,kBAAkB3mC,GAExDxkC,KAAKu8E,UAAUkS,YACfzuF,KAAKu8E,UAAUz3E,IAAI4nH,GACnB1sH,KAAK8tH,YAAYpB,EACrB,CAEKloF,EAAM8b,SACP9b,EAAM8b,OAAS9b,EAAM2D,KAEzB,IAAIolB,EAAUvtD,KAAKu8E,UAAUz3E,IAAI0/B,GAcjC,OAZAxkC,KAAK8tH,YAAYtpF,GAEb+oB,EAAQ7lD,QACR1H,KAAK+tH,eAAexgE,GAEpBvtD,KAAK8uC,WAAa,IAAM9uC,KAAK0jE,oBAC7B1jE,KAAKuuE,QAAQ,eACbvuE,KAAK0jE,mBAAoB,EACzB1jE,KAAKmgE,QAAQq0B,aAAc,EAC3Bx0F,KAAKu8E,UAAU1H,OAAO70E,KAAKmgE,UAGxB0tD,GAAsB7tH,KAAKmrE,kBAAkB3mC,EAhC1C,CAiCd,EAEAxkC,KAAKw8E,cAAgB,SAASh4C,GAC1BA,EAAQA,GAASxkC,KAAKo8E,OAAO,GAC7B,IAAI7uB,EAAUvtD,KAAKu8E,UAAUkS,YACzBlhC,EAAQ7lD,QACR1H,KAAK+tH,eAAexgE,GAExB/oB,GAASxkC,KAAKmrE,kBAAkB3mC,EACpC,EACAxkC,KAAKquF,eAAiB,SAAShjE,GAC3B,IAAIkiC,EAAUvtD,KAAKu8E,UAAU8R,eAAehjE,GAC5C,GAAIkiC,EAEA,OADAvtD,KAAK+tH,eAAexgE,GACbA,EAAQ,EAEvB,EACAvtD,KAAKguH,uBAAyB,WAC1B,IAAIzgE,EAAUvtD,KAAKu8E,UAAUoC,QACzBpxB,EAAQ7lD,OACR1H,KAAK+tH,eAAexgE,GAChBvtD,KAAKo8E,OAAO,IAChBp8E,KAAKmrE,kBAAkBnrE,KAAKo8E,OAAO,GAC3C,EAEAp8E,KAAK8tH,YAAc,SAAStpF,GACxBxkC,KAAK8uC,WAAa9uC,KAAKu8E,UAAUH,OAAO10E,OACxC1H,KAAKo8E,OAAOn5D,QAAQuhB,GACpBxkC,KAAKuuE,QAAQ,WAAY,CAAC/pC,MAAOA,GACrC,EAEAxkC,KAAK+tH,eAAiB,SAASxgE,GAE3B,GADAvtD,KAAK8uC,WAAa9uC,KAAKu8E,UAAUH,OAAO10E,OACjB,GAAnB1H,KAAK8uC,YAAmB9uC,KAAK0jE,kBAAmB,CAChD,IAAIuqD,EAAYjuH,KAAKu8E,UAAUH,OAAO/3D,MACtCkpC,EAAQ7gD,KAAKuhH,GACbjuH,KAAK8uC,WAAa,CACtB,CAEA,IAAK,IAAI/oC,EAAIwnD,EAAQ7lD,OAAQ3B,KAAO,CAChC,IAAIyW,EAAQxc,KAAKo8E,OAAOvqE,QAAQ07C,EAAQxnD,IACxC/F,KAAKo8E,OAAO13D,OAAOlI,EAAO,EAC9B,CAEAxc,KAAKuuE,QAAQ,cAAe,CAAC6N,OAAQ7uB,IAEb,IAApBvtD,KAAK8uC,YAAoB9uC,KAAK0jE,oBAC9B1jE,KAAK0jE,mBAAoB,EACzB1jE,KAAKuuE,QAAQ,gBACbvuE,KAAKmgE,QAAQq0B,aAAc,EAC3Bx0F,KAAKu8E,UAAUzH,OAAO90E,KAAKmgE,UAG/B8tD,EAAYA,GAAajuH,KAAKo8E,OAAO,GACjC6xC,IAAcA,EAAUn4C,QAAQ91E,KAAKsgE,aACrCtgE,KAAKmrE,kBAAkB8iD,EAC/B,EACAjuH,KAAKkuH,eAAiB,WACdluH,KAAKu8E,YAGTv8E,KAAKu8E,UAAY,IAAI0R,EACrBjuF,KAAKo8E,OAAS,GACdp8E,KAAK8uC,WAAa,EACtB,EACA9uC,KAAKukG,aAAe,WAChB,OAAOvkG,KAAK8uC,WAAa9uC,KAAKu8E,UAAUH,OAAO52E,SAAW,CAACxF,KAAKsgE,WACpE,EAEAtgE,KAAKwtH,eAAiB,WAClB,GAAIxtH,KAAK8uC,WAAa,EAAG,CACrB,IAAIstC,EAASp8E,KAAKu8E,UAAUH,OACxB6xC,EAAY7xC,EAAOA,EAAO10E,OAAS,GACnC88B,EAAQixC,EAAMmB,WAAWwF,EAAO,GAAGl0C,MAAO+lF,EAAU9lF,KAExDnoC,KAAKw8E,gBACLx8E,KAAKqM,kBAAkBm4B,EAAOypF,EAAU3tE,QAAU2tE,EAAU/lF,MAChE,KAAO,CACC1D,EAAQxkC,KAAKsgE,WAAjB,IACI6X,EAAcn4E,KAAKm4E,cACnBzC,EAAWlxC,EAAM0D,MAAM66B,IACvB6S,EAASpxC,EAAM2D,IAAI46B,IACvB,GAAI2S,GAAYE,EAAQ,CACpB,GAAIuC,EACA,IAAIjwC,EAAQ1D,EAAM2D,IAAKA,EAAM3D,EAAM0D,WAE/BA,EAAQ1D,EAAM0D,MAAOC,EAAM3D,EAAM2D,IAIzC,OAFAnoC,KAAKyM,SAASgpE,EAAMmB,WAAWzuC,EAAKA,SACpCnoC,KAAKyM,SAASgpE,EAAMmB,WAAW1uC,EAAOA,GAE1C,CAEA,IAAI2kF,EAAU,GACV5mH,EAAIjG,KAAKulE,aAAamQ,GAAU,GACpCzvE,EAAEiiC,MAAM86B,OAASx+B,EAAM0D,MAAM86B,OAC7B6pD,EAAQngH,KAAKzG,GAEb,IAAK,IAAIF,EAAI2vE,EAAW,EAAG3vE,EAAI6vE,EAAQ7vE,IACnC8mH,EAAQngH,KAAK1M,KAAKulE,aAAax/D,GAAG,IAEtCE,EAAIjG,KAAKulE,aAAaqQ,GAAQ,GAC9B3vE,EAAEkiC,IAAI66B,OAASx+B,EAAM2D,IAAI66B,OACzB6pD,EAAQngH,KAAKzG,GAEb4mH,EAAQ3iH,QAAQlK,KAAKyM,SAAUzM,KACnC,CACJ,EACAA,KAAKmuH,qBAAuB,WACxB,GAAInuH,KAAK8uC,WAAa,EAAG,CACrB,IAAIstC,EAASp8E,KAAKu8E,UAAUH,OACxB6xC,EAAY7xC,EAAOA,EAAO10E,OAAS,GACnC88B,EAAQixC,EAAMmB,WAAWwF,EAAO,GAAGl0C,MAAO+lF,EAAU9lF,KAExDnoC,KAAKw8E,gBACLx8E,KAAKqM,kBAAkBm4B,EAAOypF,EAAU3tE,QAAU2tE,EAAU/lF,MAChE,KAAO,CACH,IAAIoY,EAAStgD,KAAKmgE,QAAQ6W,yBAAyBh3E,KAAKs3E,eACpDptC,EAASlqC,KAAKmgE,QAAQ6W,yBAAyBh3E,KAAKw3E,iBAEpDq1C,EAAU7sH,KAAKitH,sBAAsB3sE,EAAQpW,GACjD2iF,EAAQ3iH,QAAQlK,KAAKyM,SAAUzM,KACnC,CACJ,EACAA,KAAKitH,sBAAwB,SAASX,EAAcD,EAAc+B,GAC9D,IAAIvB,EAAU,GAEVwB,EAAa/B,EAAatpD,OAASqpD,EAAarpD,OACpD,GAAIqrD,EACA,IAAI14C,EAAc22C,EAAatpD,OAC3B6S,EAAYw2C,EAAarpD,YAEzB2S,EAAc02C,EAAarpD,OAC3B6S,EAAYy2C,EAAatpD,OAGjC,IAAIsrD,EAAahC,EAAavpD,IAAMspD,EAAatpD,IACjD,GAAIurD,EACA,IAAI54C,EAAW42C,EAAavpD,IACxB6S,EAASy2C,EAAatpD,SAEtB2S,EAAW22C,EAAatpD,IACxB6S,EAAS02C,EAAavpD,IAG1B4S,EAAc,IACdA,EAAc,GACdD,EAAW,IACXA,EAAW,GAEXA,GAAYE,IACZw4C,GAAoB,GAExB,IAAK,IAAIrrD,EAAM2S,EAAU3S,GAAO6S,EAAQ7S,IAAO,CAC3C,IAAIv+B,EAAQixC,EAAMmB,WACd52E,KAAKmgE,QAAQqa,yBAAyBzX,EAAK4S,GAC3C31E,KAAKmgE,QAAQqa,yBAAyBzX,EAAK8S,IAE/C,GAAIrxC,EAAMsa,UAAW,CACjB,GAAIyvE,GAAUzC,EAAYtnF,EAAM2D,IAAKomF,GACjC,MACJ,IAAIA,EAAS/pF,EAAM2D,GACvB,CACA3D,EAAM8b,OAAS+tE,EAAa7pF,EAAM0D,MAAQ1D,EAAM2D,IAChD0kF,EAAQngH,KAAK83B,EACjB,CAKA,GAHI8pF,GACAzB,EAAQ1xD,WAEPizD,EAAmB,CACpB,IAAIjmF,EAAM0kF,EAAQnlH,OAAS,EAC3B,MAAOmlH,EAAQ1kF,GAAK2W,WAAa3W,EAAM,EACnCA,IACJ,GAAIA,EAAM,EAAG,CACT,IAAID,EAAQ,EACZ,MAAO2kF,EAAQ3kF,GAAO4W,UAClB5W,GACR,CACA,IAAK,IAAIniC,EAAIoiC,EAAKpiC,GAAKmiC,EAAOniC,IACtB8mH,EAAQ9mH,GAAG+4C,WACX+tE,EAAQnoG,OAAO3e,EAAG,EAE9B,CAEA,OAAO8mH,CACX,CACH,EAAEjoH,KAAKuyE,EAAUlvE,WAClB,IAAIm/F,EAASz8C,EAAS,YAAYy8C,OA4blC,SAAS0kB,EAAYv2C,EAAIC,GACrB,OAAOD,EAAGxS,KAAOyS,EAAGzS,KAAOwS,EAAGvS,QAAUwS,EAAGxS,MAC/C,CAoCA,SAASwrD,EAAYlsH,GACbA,EAAOmsH,8BAEXnsH,EAAOwrH,YAAcxrH,EAAOwrH,YAAYniH,KAAKrJ,GAC7CA,EAAOyrH,eAAiBzrH,EAAOyrH,eAAepiH,KAAKrJ,GACnDA,EAAOosH,eAAiBpsH,EAAOosH,eAAe/iH,KAAKrJ,GACnDA,EAAOqsH,gBAAkBrsH,EAAOqsH,gBAAgBhjH,KAAKrJ,GACrDA,EAAOmsH,4BAA8BhpH,EAAQmpH,gBAAgBjjH,KAAKrJ,GAClEA,EAAOusH,wBAA0BvsH,EAAOusH,wBAAwBljH,KAAKrJ,GAErEA,EAAOmsH,4BAA4BnsH,GACnCA,EAAO/B,GAAG,gBAAiB+B,EAAOmsH,6BAElCnsH,EAAO/B,GAAG,YAAayhE,GACvB1/D,EAAO+mD,SAAS24C,YAAY34C,EAAS89C,iBAErC2nB,EAAsBxsH,GAC1B,CAEA,SAASwsH,EAAsBxsH,GAC3B,IAAIuN,EAAKvN,EAAOm/D,UAAUZ,aACtBkuD,GAAY,EAehB,SAAS94B,EAAM9yF,GACP4rH,IACAzsH,EAAOo+D,SAASinD,eAAe,IAC/BoH,GAAY,EAEpB,CAnBA1pF,EAAMkxB,YAAY1mD,EAAI,WAAW,SAAS1M,GACtC,IAAI6rH,EAAuB,IAAb7rH,EAAEomC,WAAmBpmC,EAAEqmC,SAAWrmC,EAAEsmC,UAAYtmC,EAAEo2D,SAC5Dj3D,EAAOkqH,qBAAuBwC,EACzBD,IACDzsH,EAAOo+D,SAASinD,eAAe,aAC/BoH,GAAY,GAETA,GACP94B,GAER,IAEA5wD,EAAMkxB,YAAY1mD,EAAI,QAASomF,GAC/B5wD,EAAMkxB,YAAY1mD,EAAI,OAAQomF,EAOlC,EA3gBA,WACIj2F,KAAKktH,uBAAyB,WAC1BltH,KAAK0gE,SAAS0rC,eACdpsG,KAAK0gE,SAAS2sC,mBAClB,EACArtG,KAAKysH,mBAAqB,SAASpoD,GAC1BA,EAAc/jB,SACf+jB,EAAc/jB,OAAS+jB,EAAcl8B,KAEzC,IAAIzhC,EAAQ1G,KAAK4qE,oBAKjB,OAJAvG,EAAcozB,OAASz3F,KAAKmgE,QAAQwK,UAAUtG,EAAe,gBAAiB39D,GAE9E1G,KAAKmgE,QAAQ89C,kBAAkBvxG,KAAK23D,GACpCrkE,KAAKmgE,QAAQ8uD,qBAAuBjvH,KAAKmgE,QAAQ89C,kBAAkBv2G,OAC5D28D,CACX,EACArkE,KAAK2sH,sBAAwB,SAASnoF,GAClC,GAAKA,EAAMizD,OAAX,CAEAz3F,KAAKmgE,QAAQ+K,aAAa1mC,EAAMizD,QAChC,IAAIj7E,EAAQxc,KAAKmgE,QAAQ89C,kBAAkBpsG,QAAQ2yB,IACrC,GAAVhoB,GACAxc,KAAKmgE,QAAQ89C,kBAAkBv5F,OAAOlI,EAAO,GACjDxc,KAAKmgE,QAAQ8uD,qBAAuBjvH,KAAKmgE,QAAQ89C,kBAAkBv2G,MALzD,CAMd,EAEA1H,KAAKgtH,uBAAyB,SAAS5wC,GAEnC,IADA,IAAI8yC,EAAalvH,KAAKmgE,QAAQ89C,kBACrBl4G,EAAIq2E,EAAO10E,OAAQ3B,KAAO,CAC/B,IAAIy+B,EAAQ43C,EAAOr2E,GACnB,GAAKy+B,EAAMizD,OAAX,CAEAz3F,KAAKmgE,QAAQ+K,aAAa1mC,EAAMizD,QAChC,IAAIj7E,EAAQ0yG,EAAWr9G,QAAQ2yB,IACjB,GAAVhoB,GACA0yG,EAAWxqG,OAAOlI,EAAO,EAJjB,CAKhB,CACAxc,KAAKmgE,QAAQ8uD,qBAAuBC,EAAWxnH,MACnD,EAEA1H,KAAK8tH,YAAc,SAAS3qH,GACxBnD,KAAKysH,mBAAmBtpH,EAAEqhC,OAC1BxkC,KAAK0gE,SAAS0rC,eACdpsG,KAAK0gE,SAAS2sC,mBAClB,EAEArtG,KAAK+tH,eAAiB,SAAS5qH,GAC3BnD,KAAKgtH,uBAAuB7pH,EAAEi5E,QAC9Bp8E,KAAK0gE,SAAS0rC,eACdpsG,KAAK0gE,SAAS2sC,mBAClB,EAEArtG,KAAK0uH,eAAiB,SAASvrH,GACvBnD,KAAK0jE,oBAET1jE,KAAK0jE,mBAAoB,EAEzB1jE,KAAKmkE,SAAS,mBACdnkE,KAAKunG,WAAW7yB,mBAAmBrrB,EAAS2/C,iBAC5ChpG,KAAKqpD,SAAS0Y,kBAAkB,OAAQ/hE,KAAKmvH,oBAE7CnvH,KAAK0gE,SAAS0rC,eACdpsG,KAAK0gE,SAAS2sC,oBAClB,EAEArtG,KAAK2uH,gBAAkB,SAASxrH,GACxBnD,KAAKmgE,QAAQotD,YAAY6B,gBAE7BpvH,KAAK0jE,mBAAoB,EAEzB1jE,KAAK+kE,WAAW,mBAChB/kE,KAAKunG,WAAW/yB,sBAAsBnrB,EAAS2/C,iBAE/ChpG,KAAKqpD,SAASulB,qBAAqB,OAAQ5uE,KAAKmvH,oBAChDnvH,KAAK0gE,SAAS0rC,eACdpsG,KAAK0gE,SAAS2sC,oBACdrtG,KAAKihE,MAAM,mBACf,EAEAjhE,KAAKmvH,mBAAqB,SAAShsH,GAC/B,IAAIiyE,EAAUjyE,EAAEiyE,QACZ9yE,EAASa,EAAEb,OACf,GAAKA,EAAOirH,YAAZ,CAEA,GAAKn4C,EAAQkvB,kBAI2B,WAA7BlvB,EAAQkvB,kBACfpsF,EAAS5V,EAAO+sH,iBAAiBj6C,EAASjyE,EAAEuyB,MACR,eAA7B0/C,EAAQkvB,kBACfpsF,EAAS5V,EAAO+sH,iBAAiBj6C,EAASjyE,EAAEuyB,MAAM,GACd,UAA7B0/C,EAAQkvB,mBACfhiG,EAAO4kG,sBACPhvF,EAASk9D,EAAQvzD,KAAKvf,EAAQa,EAAEuyB,MAAQ,CAAC,IAEzCxd,EAASk9D,EAAQkvB,kBAAkBhiG,EAAQa,EAAEuyB,MAAQ,CAAC,OAZ1B,CAC5B,IAAIxd,EAASk9D,EAAQvzD,KAAKvf,EAAQa,EAAEuyB,MAAQ,CAAC,GAC7CpzB,EAAOirH,YAAY9gH,SAASnK,EAAOirH,YAAY7iD,mBAC/CpoE,EAAOirH,YAAYS,wBACvB,CAUA,OAAO91G,CAfG,CAgBd,EACAlY,KAAKqvH,iBAAmB,SAAS7F,EAAK9zF,EAAM5yB,GACxC,IAAI9C,KAAKytG,uBAAT,CAEA,IAMIv1F,EANAo3G,EAAYxsH,GAAWA,EAAQwsH,UAC/BC,EAAsB,GAAXzsH,GAAmBA,GAAWA,EAAQysH,SACjDpvD,EAAUngE,KAAKmgE,QACfl/B,EAAYjhC,KAAKihC,UACjBs7C,EAAYt7C,EAAUs7C,UACtBH,GAAUkzC,EAAYruF,EAAYs7C,GAAWH,OAGjD,IAAKA,EAAO10E,OACR,OAAO8hH,EAAI3nG,KAAO2nG,EAAI3nG,KAAK7hB,KAAM01B,GAAQ,CAAC,GAAK8zF,EAAIxpH,KAAM01B,GAAQ,CAAC,GAEtE,IAAI85F,EAAMvuF,EAAUktC,eACpBltC,EAAUktC,eAAiB,CAAC,EAE5B,IAAIy+C,EAAS,IAAIz1C,EAAUhX,GAC3BngE,KAAKytG,wBAAyB,EAC9B,IAAK,IAAI1nG,EAAIq2E,EAAO10E,OAAQ3B,KAAM,CAC9B,GAAIwpH,EACA,MAAOxpH,EAAI,GAAKq2E,EAAOr2E,GAAGmiC,MAAM66B,KAAOqZ,EAAOr2E,EAAI,GAAGoiC,IAAI46B,IACrDh9D,IAER6mH,EAAOzhD,kBAAkBiR,EAAOr2E,IAChC6mH,EAAOpwG,MAAQzW,EACf/F,KAAKihC,UAAYk/B,EAAQl/B,UAAY2rF,EACrC,IAAI6C,EAAYjG,EAAI3nG,KAAO2nG,EAAI3nG,KAAK7hB,KAAM01B,GAAQ,CAAC,GAAK8zF,EAAIxpH,KAAM01B,GAAQ,CAAC,GACtExd,QAAwB/H,IAAds/G,IACXv3G,EAASu3G,GACb7C,EAAOliD,gBAAgB0R,EAAOr2E,GAClC,CACA6mH,EAAO93C,SAEP90E,KAAKihC,UAAYk/B,EAAQl/B,UAAYA,EACrCjhC,KAAKytG,wBAAyB,EAC9BxsE,EAAUktC,eAAiBqhD,EAC3BvuF,EAAU+sF,yBAEV,IAAI0B,EAAO1vH,KAAK0gE,SAAS6gD,iBAMzB,OALAvhH,KAAK2qG,iBACL3qG,KAAK8qG,oBACD4kB,GAAQA,EAAK5jE,MAAQ4jE,EAAKnmG,IAC1BvpB,KAAK0gE,SAAS+nC,iBAAiBinB,EAAK5jE,MAEjC5zC,CA3CG,CA4Cd,EACAlY,KAAKknG,oBAAsB,WAClBlnG,KAAK0jE,oBAAqB1jE,KAAKytG,wBAEpCztG,KAAKutH,YAAY/wC,eACrB,EAEAx8E,KAAKwtG,gBAAkB,WACnB,IAAInlG,EAAO,GACX,GAAIrI,KAAK0jE,oBAAsB1jE,KAAKytG,uBAAwB,CAGxD,IAFA,IAAIrxB,EAASp8E,KAAKutH,YAAYhxC,UAAUH,OACpCuzC,EAAM,GACD5pH,EAAI,EAAGA,EAAIq2E,EAAO10E,OAAQ3B,IAC/B4pH,EAAIjjH,KAAK1M,KAAKmgE,QAAQwL,aAAayQ,EAAOr2E,KAE9C,IAAI6pH,EAAK5vH,KAAKmgE,QAAQiX,cAAciS,sBACpChhF,EAAOsnH,EAAIzsG,KAAK0sG,GACZvnH,EAAKX,SAAWioH,EAAIjoH,OAAS,GAAKkoH,EAAGloH,SACrCW,EAAO,GACf,MAAYrI,KAAKihC,UAAU6d,YACvBz2C,EAAOrI,KAAKmgE,QAAQwL,aAAa3rE,KAAKsjE,sBAE1C,OAAOj7D,CACX,EAEArI,KAAK6uH,wBAA0B,SAAS1rH,EAAG+mC,GACvC,GAAIlqC,KAAK0jE,oBAAsB1jE,KAAKytG,uBAAwB,CACxD,IAAIjpE,EAAQxkC,KAAKutH,YAAYnxC,OAAO,GACpC,GAAIp8E,KAAKutH,YAAYzuE,WAAa5U,GAAUlqC,KAAKutH,YAAYrjF,OACzD,OACJ,IAAI7e,EAAM6e,GAAUlqC,KAAKutH,YAAYrjF,OAC/B1F,EAAM8b,QAAU9b,EAAM0D,MAAQ1D,EAAM2D,IAAM3D,EAAM0D,MAChD1D,EAAM8b,OACRj1B,EAAI03C,KAAO74B,EAAO64B,KACf/iE,KAAKmgE,QAAQ0oB,wBAAwBx9D,EAAI03C,IAAK13C,EAAI23C,QAAQA,QAAU94B,EAAO84B,QAC9EhjE,KAAKutH,YAAY/wC,cAAcx8E,KAAKutH,YAAY7iD,kBACxD,CACJ,EACA1qE,KAAK6gG,QAAU,SAASC,EAAQh+F,EAAS+sH,GAGrC,GAFA/sH,EAAUA,GAAW,CAAC,EACtBA,EAAQg+F,OAASA,GAAUh+F,EAAQg+F,YACb3wF,GAAlBrN,EAAQg+F,OAAqB,CAC7B,IAAIt8D,EAAQxkC,KAAKihC,UAAU6d,UACrB9+C,KAAKihC,UAAUmkC,eACfplE,KAAKihC,UAAUq/B,WACrBx9D,EAAQg+F,OAAS9gG,KAAKmgE,QAAQwL,aAAannC,EAC/C,CACAxkC,KAAKynG,QAAQ/jG,IAAIZ,GAEjB,IAAIs5E,EAASp8E,KAAKynG,QAAQ5G,QAAQ7gG,KAAKmgE,SACvC,IAAKic,EAAO10E,OACR,OAAO,EAEX1H,KAAK6oD,iBAAmB,EACxB,IAAI5nB,EAAYjhC,KAAKutH,YAEhBsC,GACD5uF,EAAUu7C,cAAcJ,EAAO,IAEnC,IAAK,IAAIr2E,EAAIq2E,EAAO10E,OAAQ3B,KACxBk7B,EAAUx0B,SAAS2vE,EAAOr2E,IAAI,GAMlC,OALIy+B,GAASvD,EAAUs7C,UAAUgS,aAAa/pD,EAAM0D,QAChDjH,EAAUx0B,SAAS+3B,GAAO,GAE9BxkC,KAAK6oD,iBAAmB,EAEjBuzB,EAAO10E,MAClB,EACA1H,KAAKqtH,gBAAkB,SAASp7B,EAAK69B,GACjC,IAAItrF,EAAQxkC,KAAKihC,UAAUypC,kBACvByN,EAAc3zC,EAAM8b,QAAU9b,EAAM2D,IAEpC4nF,EAAa/vH,KAAKmgE,QAAQ6W,yBAAyBxyC,EAAM8b,QACzDtgD,KAAKihC,UAAU02C,iBACfo4C,EAAW/sD,OAAShjE,KAAKihC,UAAU02C,gBAEvC,IAAIN,EAAOr3E,KAAKmgE,QAAQqa,yBAAyBu1C,EAAWhtD,IAAMkvB,EAAK89B,EAAW/sD,QAElF,GAAKx+B,EAAMsa,UAIH5U,EAASmtC,OAHb,IAAIg1C,EAAersH,KAAKmgE,QAAQ6W,yBAAyBmB,EAAc3zC,EAAM2D,IAAM3D,EAAM0D,OACrFgC,EAASlqC,KAAKmgE,QAAQqa,yBAAyB6xC,EAAatpD,IAAMkvB,EAAKo6B,EAAarpD,QAK5F,GAAImV,EAAa,CACb,IAAI26B,EAAWr9B,EAAMmB,WAAWS,EAAMntC,GACtC4oE,EAASxyD,OAASwyD,EAAS5qE,KAC/B,KAAO,CACC4qE,EAAWr9B,EAAMmB,WAAW1sC,EAAQmtC,GACxCy7B,EAASxyD,OAASwyD,EAAS3qE,GAC/B,CAGA,GADA2qE,EAAS52B,cAAgB6zC,EAAW/sD,OAC/BhjE,KAAKihC,UAAUyiC,mBAGhB,GAAIosD,EACA,IAAIE,EAAWxrF,EAAM8b,YAHzBtgD,KAAKihC,UAAUx0B,SAAS+3B,GAM5BxkC,KAAKihC,UAAUx0B,SAASqmG,GACpBkd,GACAhwH,KAAKihC,UAAUotD,eAAe2hC,EACtC,EACAhwH,KAAK2mG,oBAAsB,SAAS1U,GAKhC,IAJA,IAAI9xB,EAAUngE,KAAKmgE,QACfvxB,EAAMuxB,EAAQotD,YACdh3F,EAAMqY,EAAIwtC,OAELr2E,EAAIwwB,EAAI7uB,OAAQ3B,KAAO,CAC5B,IAAIy+B,EAAQjO,EAAIxwB,GAChB,GAAIy+B,EAAMsa,UAAW,CACjB,IAAImxE,EAAM9vD,EAAQiF,aAAa5gC,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,QAC5Dx+B,EAAM0D,MAAM66B,IAAMktD,EAAI/nF,MAAM66B,IAC5Bv+B,EAAM0D,MAAM86B,OAASitD,EAAI/nF,MAAM86B,OAC/Bx+B,EAAM2D,IAAI46B,IAAMktD,EAAI9nF,IAAI46B,IACxBv+B,EAAM2D,IAAI66B,OAASitD,EAAI9nF,IAAI66B,MAC/B,CACJ,CACAp0B,EAAIo/E,yBAEJ,IAAIkC,EAAQ,GACZ,IAASnqH,EAAIwwB,EAAI7uB,OAAQ3B,KAAO,CACxBy+B,EAAQjO,EAAIxwB,GAChBmqH,EAAMjtG,QAAQk9C,EAAQwL,aAAannC,GACvC,CAEIytD,EAAM,EACNi+B,EAAMjtG,QAAQitG,EAAM7rG,OAEpB6rG,EAAMxjH,KAAKwjH,EAAMpsG,SAErB,IAAS/d,EAAIwwB,EAAI7uB,OAAQ3B,KAAO,CACxBy+B,EAAQjO,EAAIxwB,GACZkqH,EAAMzrF,EAAMgY,QAChB2jB,EAAQlhD,QAAQulB,EAAO0rF,EAAMnqH,IAC7By+B,EAAM0D,MAAM66B,IAAMktD,EAAI/nF,MAAM66B,IAC5Bv+B,EAAM0D,MAAM86B,OAASitD,EAAI/nF,MAAM86B,MACnC,CACJ,EACAhjE,KAAKstH,WAAa,SAASr7B,EAAK69B,EAAMK,GAClC,IAAIhwD,EAAUngE,KAAKmgE,QACfvxB,EAAMuxB,EAAQotD,YAEd/oF,EAAQoK,EAAI87B,kBAChB,IAAIlmC,EAAMsa,YACNta,EAAQ27B,EAAQiF,aAAa5gC,EAAM0D,MAAM66B,IAAKv+B,EAAM0D,MAAM86B,QAC1Dx+B,EAAM8b,QAAiB,GAAR2xC,EAAYztD,EAAM0D,MAAQ1D,EAAM2D,IAC/CnoC,KAAKutH,YAAY9gH,SAAS+3B,IACtB2rF,GAJR,CAOA,IAAIrvB,EAAS3gC,EAAQwL,aAAannC,GAE9BsuE,EAAWpS,EAAKvgC,EAAS2gC,EAAQ7O,GACjC6gB,IACAA,EAASxyD,QAAiB,GAAR2xC,EAAY6gB,EAAS5qE,MAAQ4qE,EAAS3qE,IACxDnoC,KAAK6oD,iBAAmB,EACxB7oD,KAAKmgE,QAAQ8wB,OAAO6hB,GACpB9yG,KAAKutH,YAAY9gH,SAASqmG,GAC1B9yG,KAAK6oD,iBAAmB,EACxB7oD,KAAK0gE,SAAS6D,qBAAqB,KAAM,KAEzCurD,GACA9vH,KAAKutH,YAAYl/B,eAAe7pD,EAAM8b,OAb1C,CAcJ,EACAtgD,KAAKytH,aAAe,WAChB,IAAIttD,EAAUngE,KAAKmgE,QACfvxB,EAAMuxB,EAAQotD,YACdnxC,EAASxtC,EAAIwtC,OACbrZ,GAAO,EACPqtD,EAAgBh0C,EAAO/4C,QAAO,SAASp9B,GACvC,GAAIA,EAAEq6C,OAAOyiB,KAAOA,EAChB,OAAO,EACXA,EAAM98D,EAAEq6C,OAAOyiB,GACnB,IAEA,GAAKqZ,EAAO10E,QAAU0oH,EAAc1oH,QAAU00E,EAAO10E,OAAS,EAyBvD,CACH0oH,EAAclmH,SAAQ,SAASjE,GAC3B2oC,EAAIy/C,eAAepoF,EAAEq6C,OACzB,IAEA,IAAI+vE,EAAS,EACTC,EAAWn3G,IACXo3G,EAAen0C,EAAOvwE,KAAI,SAAS5F,GACnC,IAAIwC,EAAIxC,EAAEq6C,OACN7L,EAAO0rB,EAAQ8T,QAAQxrE,EAAEs6D,KACzBytD,EAAc/7E,EAAKzyB,OAAOvZ,EAAEu6D,QAAQtjD,OAAO,OAQ/C,OAPoB,GAAhB8wG,IACAA,EAAc,GAEd/nH,EAAEu6D,OAASqtD,IACXA,EAAS5nH,EAAEu6D,QACXwtD,EAAcF,IACdA,EAAWE,GACRA,CACX,IACAp0C,EAAOlyE,SAAQ,SAASjE,EAAGF,GACvB,IAAI0C,EAAIxC,EAAEq6C,OACNz4C,EAAIwoH,EAAS5nH,EAAEu6D,OACfn9D,EAAI0qH,EAAaxqH,GAAKuqH,EACtBzoH,EAAIhC,EACJs6D,EAAQ3S,OAAO/kD,EAAG5H,EAAKu6D,aAAa,IAAKvzD,EAAIhC,IAE7Cs6D,EAAQ54D,OAAO,IAAIkuE,EAAMhtE,EAAEs6D,IAAKt6D,EAAEu6D,OAAQv6D,EAAEs6D,IAAKt6D,EAAEu6D,OAASn7D,EAAIhC,IAEpEI,EAAEiiC,MAAM86B,OAAS/8D,EAAEkiC,IAAI66B,OAASqtD,EAChCpqH,EAAEiiC,MAAM66B,IAAM98D,EAAEkiC,IAAI46B,IAAMt6D,EAAEs6D,IAC5B98D,EAAEq6C,OAASr6C,EAAEkiC,GACjB,IACAyG,EAAIu8B,kBAAkBiR,EAAO,IAC7Bp8E,KAAK0gE,SAAS0rC,eACdpsG,KAAK0gE,SAAS2sC,mBAClB,KA7DiE,CAC7D,IAAI7oE,EAAQxkC,KAAKihC,UAAUq/B,WACvBmwD,EAAKjsF,EAAM0D,MAAM66B,IAAK2tD,EAAKlsF,EAAM2D,IAAI46B,IACrC4tD,EAAaF,GAAMC,EACvB,GAAIC,EAAY,CACZ,IACIl8E,EADA1P,EAAM/kC,KAAKmgE,QAAQmH,YAEvB,GACI7yB,EAAOz0C,KAAKmgE,QAAQ8T,QAAQy8C,SACvB,OAAO57G,KAAK2/B,MAAWi8E,EAAK3rF,GACrC,GACI0P,EAAOz0C,KAAKmgE,QAAQ8T,QAAQw8C,SACvB,OAAO37G,KAAK2/B,MAAWg8E,EAAK,GAEjCA,EAAK,IAAGA,EAAK,GACbC,GAAM3rF,IAAK2rF,EAAK3rF,EAAM,EAC9B,CACA,IAAIqQ,EAAQp1C,KAAKmgE,QAAQgqB,gBAAgBsmC,EAAIC,GAC7Ct7E,EAAQp1C,KAAK4wH,aAAax7E,EAAOu7E,GACjC3wH,KAAKmgE,QAAQ3S,OAAO,CAACuV,IAAK0tD,EAAIztD,OAAQ,GAAI5tB,EAAMlyB,KAAK,MAAQ,MACxDytG,IACDnsF,EAAM0D,MAAM86B,OAAS,EACrBx+B,EAAM2D,IAAI66B,OAAS5tB,EAAMA,EAAM1tC,OAAS,GAAGA,QAE/C1H,KAAKihC,UAAUs/B,SAAS/7B,EAC5B,CAqCJ,EAEAxkC,KAAK4wH,aAAe,SAASx7E,EAAOy7E,GAChC,IACIC,EAAQC,EAAOC,EADfC,GAAgB,EAAMC,GAAiB,EAG3C,OAAO97E,EAAMvpC,KAAI,SAAS4oC,GACtB,IAAI7qC,EAAI6qC,EAAKxyB,MAAM,2BACnB,OAAKrY,EAGS,MAAVknH,GACAA,EAASlnH,EAAE,GAAGlC,OACdqpH,EAAQnnH,EAAE,GAAGlC,OACbspH,EAAOpnH,EAAE,GAAGlC,OACLkC,IAGPknH,EAASC,EAAQC,GAAQpnH,EAAE,GAAGlC,OAASkC,EAAE,GAAGlC,OAASkC,EAAE,GAAGlC,SAC1DwpH,GAAiB,GACjBJ,GAAUlnH,EAAE,GAAGlC,SACfupH,GAAgB,GAEhBH,EAASlnH,EAAE,GAAGlC,SACdopH,EAASlnH,EAAE,GAAGlC,QACdqpH,EAAQnnH,EAAE,GAAGlC,SACbqpH,EAAQnnH,EAAE,GAAGlC,QACbspH,EAAOpnH,EAAE,GAAGlC,SACZspH,EAAOpnH,EAAE,GAAGlC,QAETkC,GArBI,CAAC6qC,EAsBhB,IAAG5oC,IAAIglH,EAAYM,EACfF,EAAgBC,EAAiBE,EAAaD,EAAYE,GAE9D,SAAS1rC,EAAO//E,GACZ,OAAO/E,EAAKu6D,aAAa,IAAKx1D,EAClC,CAEA,SAASurH,EAAUvnH,GACf,OAAQA,EAAE,GAAY+7E,EAAOmrC,GAAUlnH,EAAE,GACnC+7E,EAAOorC,EAAQnnH,EAAE,GAAGlC,OAASspH,GAC7BpnH,EAAE,GAAGqV,QAAQ,aAAc,OAFlBrV,EAAE,EAGrB,CACA,SAASwnH,EAAWxnH,GAChB,OAAQA,EAAE,GAAY+7E,EAAOmrC,EAASC,EAAQnnH,EAAE,GAAGlC,QAAUkC,EAAE,GACzD+7E,EAAOqrC,EAAM,KACbpnH,EAAE,GAAGqV,QAAQ,aAAc,OAFlBrV,EAAE,EAGrB,CACA,SAASynH,EAAQznH,GACb,OAAQA,EAAE,GAAY+7E,EAAOmrC,GAAUlnH,EAAE,GACnC+7E,EAAOqrC,GACPpnH,EAAE,GAAGqV,QAAQ,aAAc,OAFlBrV,EAAE,EAGrB,CACJ,CACH,GAAEhF,KAAKwiG,EAAOn/F,WAMfxC,EAAQmpH,gBAAkB,SAASzrH,GAC/B,IAAIg9D,EAAUh9D,EAAEg9D,QACZA,IAAYA,EAAQotD,cACpBptD,EAAQ89C,kBAAoB,GAC5B99C,EAAQl/B,UAAUitF,iBAClB/tD,EAAQotD,YAAcptD,EAAQl/B,WAElCjhC,KAAKutH,YAAcptD,GAAWA,EAAQotD,YAEtC,IAAIrkB,EAAa/lG,EAAE+lG,WACfA,IACAA,EAAWqkB,YAAY1gH,IAAI,WAAY7M,KAAK8tH,aAC5C5kB,EAAWqkB,YAAY1gH,IAAI,cAAe7M,KAAK+tH,gBAC/C7kB,EAAWqkB,YAAY1gH,IAAI,cAAe7M,KAAK0uH,gBAC/CxlB,EAAWqkB,YAAY1gH,IAAI,eAAgB7M,KAAK2uH,iBAChDzlB,EAAWqkB,YAAYl2C,KAAKxqE,IAAI,SAAU7M,KAAK6uH,yBAC/C3lB,EAAWqkB,YAAYrjF,OAAOr9B,IAAI,SAAU7M,KAAK6uH,0BAGjD1uD,IACAA,EAAQotD,YAAYhtH,GAAG,WAAYP,KAAK8tH,aACxC3tD,EAAQotD,YAAYhtH,GAAG,cAAeP,KAAK+tH,gBAC3C5tD,EAAQotD,YAAYhtH,GAAG,cAAeP,KAAK0uH,gBAC3CvuD,EAAQotD,YAAYhtH,GAAG,eAAgBP,KAAK2uH,iBAC5CxuD,EAAQotD,YAAYl2C,KAAK92E,GAAG,SAAUP,KAAK6uH,yBAC3C1uD,EAAQotD,YAAYrjF,OAAO3pC,GAAG,SAAUP,KAAK6uH,0BAG7C1uD,GAAWngE,KAAK0jE,mBAAqBvD,EAAQl/B,UAAUyiC,oBACnDvD,EAAQl/B,UAAUyiC,kBAClB1jE,KAAK0uH,iBAEL1uH,KAAK2uH,kBAEjB,EA6CAlpH,EAAQ+oH,YAAcA,EAGtB7jE,EAAS,YAAYklB,cAAcu3B,EAAOn/F,UAAW,SAAU,CAC3DqpH,kBAAmB,CACf5tH,IAAK,SAAS1B,GACVwsH,EAAYxuH,MACRgC,GACAhC,KAAKO,GAAG,gBAAiBP,KAAKyuH,6BAC9BzuH,KAAKO,GAAG,YAAayhE,KAErBhiE,KAAK6M,IAAI,gBAAiB7M,KAAKyuH,6BAC/BzuH,KAAK6M,IAAI,YAAam1D,GAE9B,EACA9gE,OAAO,GAEXqwH,kBAAmB,CACf7tH,IAAK,SAAS1B,GACVhC,KAAKwsH,oBAAsBxqH,CAC/B,EACAd,OAAO,IAMf,IAEA6mD,IAAImC,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,cAAc,SAASS,EAAUllD,EAASE,GAChH,aAEA,IAAI8vE,EAAQ9qB,EAAS,eAAe8qB,MAEhC+7C,EAAW/rH,EAAQ+rH,SAAW,WAAY,GAE9C,WAEIxxH,KAAKyxH,mBAAqB,KAC1BzxH,KAAK0xH,kBAAoB,KACzB1xH,KAAKmyF,cAAgB,SAAShyB,EAASk1C,EAAWtyC,GAC9C,IAAItuB,EAAO0rB,EAAQ8T,QAAQlR,GAC3B,OAAI/iE,KAAKyxH,mBAAmB38G,KAAK2/B,GACtB,QACM,gBAAb4gE,GACOr1G,KAAK0xH,mBACL1xH,KAAK0xH,kBAAkB58G,KAAK2/B,GAC5B,MACJ,EACX,EAEAz0C,KAAKoyF,mBAAqB,SAASjyB,EAASk1C,EAAWtyC,GACnD,OAAO,IACX,EAEA/iE,KAAK2xH,iBAAmB,SAASxxD,EAAS4C,EAAKC,GAC3C,IAAI1yB,EAAK,KACLmE,EAAO0rB,EAAQ8T,QAAQlR,GACvB6uD,EAAan9E,EAAK/0B,OAAO4wB,GAC7B,IAAmB,GAAfshF,EAAJ,CAGA,IAAIj8C,EAAc3S,GAAUvuB,EAAK/sC,OAC7B2/D,EAASlH,EAAQmH,YACjBoO,EAAW3S,EACX6S,EAAS7S,EAEb,QAASA,EAAMsE,EAAQ,CACnB,IAAIl6C,EAAQgzC,EAAQ8T,QAAQlR,GAAKrjD,OAAO4wB,GAExC,IAAc,GAAVnjB,EAAJ,CAGA,GAAIA,GAASykG,EACT,MAEJh8C,EAAS7S,CALG,CAMhB,CAEA,GAAI6S,EAASF,EAAU,CACnB,IAAIG,EAAY1V,EAAQ8T,QAAQ2B,GAAQluE,OACxC,OAAO,IAAI+tE,EAAMC,EAAUC,EAAaC,EAAQC,EACpD,CAtBU,CAuBd,EAEA71E,KAAK6xH,oBAAsB,SAAS1xD,EAASwzB,EAAS5wB,EAAKC,EAAQ4wB,GAC/D,IAAI1rD,EAAQ,CAAC66B,IAAKA,EAAKC,OAAQA,EAAS,GACpC76B,EAAMg4B,EAAQqzB,oBAAoBG,EAASzrD,EAAO0rD,GACtD,GAAKzrD,EAAL,CAGA,IAAI6qD,EAAK7yB,EAAQ0T,YAAY1rC,EAAI46B,KAQjC,OAPU,MAANiwB,IACAA,EAAK7yB,EAAQgyB,cAAchqD,EAAI46B,MAEzB,SAANiwB,GAAiB7qD,EAAI46B,IAAM76B,EAAM66B,MACjC56B,EAAI46B,MACJ56B,EAAI66B,OAAS7C,EAAQ8T,QAAQ9rC,EAAI46B,KAAKr7D,QAEnC+tE,EAAMmB,WAAW1uC,EAAOC,EAVrB,CAWd,EAEAnoC,KAAK8xH,oBAAsB,SAAS3xD,EAASwzB,EAAS5wB,EAAKC,EAAQ4wB,GAC/D,IAAIzrD,EAAM,CAAC46B,IAAKA,EAAKC,OAAQA,GACzB96B,EAAQi4B,EAAQszB,oBAAoBE,EAASxrD,GAEjD,GAAKD,EAML,OAHAA,EAAM86B,SACN76B,EAAI66B,SAEIyS,EAAMmB,WAAW1uC,EAAOC,EACpC,CACH,GAAEvjC,KAAK4sH,EAASvpH,UAEjB,IAEA8/C,IAAImC,OAAO,qBAAqB,CAAC,UAAU,UAAU,SAAS,gBAAgB,SAASS,EAAUllD,EAASE,GAC1G,aAEAF,EAAQiiH,QAAS,EACjBjiH,EAAQ+hH,SAAW,SACnB/hH,EAAQusD,QAAU,ojFAyHlB,IAAIjxB,EAAM4pB,EAAS,cACnB5pB,EAAIgxB,gBAAgBtsD,EAAQusD,QAASvsD,EAAQ+hH,SAC7C,IAEAz/D,IAAImC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,cAAc,SAASS,EAAUllD,EAASE,GAClI,aAEUglD,EAAS,aAAnB,IACI5pB,EAAM4pB,EAAS,aACPA,EAAS,WAAW8qB,MAGhC,SAASs8C,EAAY5xD,GACjBngE,KAAKmgE,QAAUA,EACfngE,KAAKmgE,QAAQ6xD,cAAgBhyH,KAC7BA,KAAKmgE,QAAQ0+B,aAAe7+F,KAAK6+F,aACjC7+F,KAAKmgE,QAAQ8/B,uBAAyBjgG,KAAKigG,uBAC3CjgG,KAAKiyH,eAAiBjyH,KAAKiyH,eAAetmH,KAAK3L,MAC/CA,KAAKkyH,cAAgBlyH,KAAKkyH,cAAcvmH,KAAK3L,MAC7CA,KAAKmyH,eAAiBnyH,KAAKmyH,eAAexmH,KAAK3L,MAC/CA,KAAKmgE,QAAQiyD,gBAAkB,GAC/BpyH,KAAKqyH,gBAAkBryH,KAAKqyH,gBAAgB1mH,KAAK3L,MAEjDA,KAAKmgE,QAAQ5/D,GAAG,SAAUP,KAAKiyH,gBAC/BjyH,KAAKmgE,QAAQ5/D,GAAG,aAAcP,KAAKsyH,cACnCtyH,KAAKmgE,QAAQ5/D,GAAG,eAAgBP,KAAKqyH,gBACzC,EAEA,WACIryH,KAAK6+F,aAAe,SAAS97B,GACzB,IAAI19D,EAKJ,OAHIA,EADArF,KAAK+7E,aACD/7E,KAAK+7E,YAAYhZ,IAAQ/iE,KAAK+7E,YAAYhZ,GAAK8gB,UAE/C,EACH7jF,KAAKwwF,cAAiBxwF,KAAKo1F,UAAUryB,GAG/B/iE,KAAKo1F,UAAUryB,GAAKr7D,OAAS,EAAIrC,EAFjC,EAAIA,CAInB,EAEArF,KAAKigG,uBAAyB,WAC1B,IAAID,EAAa,EAKjB,OAJAhgG,KAAK+7E,YAAY7xE,SAAQ,SAASsd,GAC1BA,GAAKA,EAAEq8D,WAAar8D,EAAEuiC,SACtBi2C,GAAcx4E,EAAEq8D,SACxB,IACOmc,CACX,EAEAhgG,KAAKqyH,gBAAkB,SAASlvH,GAC5BnD,KAAK60E,OAAO1xE,EAAEb,OAClB,EAEAtC,KAAK60E,OAAS,SAASvyE,GACfA,GAAWA,EAAO0vH,eAAiB1vH,EAAO0vH,eAAiBhyH,MAC3DsC,EAAO0vH,cAAcl9C,SAErB90E,KAAKsC,QAAUA,IAGnBtC,KAAK80E,SACL90E,KAAKsC,OAASA,EAEVA,IACAA,EAAO0vH,cAAgBhyH,KACvBsC,EAAOo+D,SAASngE,GAAG,eAAgBP,KAAKmyH,gBACxC7vH,EAAOo+D,SAASngE,GAAG,cAAeP,KAAKkyH,gBAE/C,EACAlyH,KAAK80E,OAAS,SAAS3xE,GACnB,IAAIb,EAAStC,KAAKsC,OAClB,GAAKA,EAAL,CAGAtC,KAAKsC,OAAS,KACdA,EAAO0vH,cAAgB,KAEvB1vH,EAAOo+D,SAAS7zD,IAAI,eAAgB7M,KAAKmyH,gBACzC7vH,EAAOo+D,SAAS7zD,IAAI,cAAe7M,KAAKkyH,eACxC,IAAIn2C,EAAc/7E,KAAKmgE,QAAQ4b,YAC/BA,GAAeA,EAAY7xE,SAAQ,SAASsd,GACpCA,GAAKA,EAAE3X,IAAM2X,EAAE3X,GAAGrE,aAClBgc,EAAE+qG,aAAc,EAChB/qG,EAAE3X,GAAGrE,WAAWmE,YAAY6X,EAAE3X,IAEtC,GAbU,CAcd,EAEA7P,KAAKsyH,aAAe,SAASnvH,EAAGg9D,GAC5B,IAAI4b,EAAc5b,EAAQ4b,YAC1B,GAAKA,GAAgB54E,EAAEgF,OAAvB,CAMA,IAJA,IAAIsrE,EAAOtwE,EAAEd,KACT6lC,EAAQurC,EAAKvrC,MAAM66B,IACnB56B,EAAMsrC,EAAKtrC,IAAI46B,IACfvqB,EAAmB,OAAZr1C,EAAEgF,OACJpC,EAAImiC,EAAQ,EAAGniC,EAAIoiC,EAAKpiC,IACzBg2E,EAAYh2E,KACZg2E,EAAYh2E,GAAGgkD,OAASvR,GAE5BujC,EAAY5zC,KACRqQ,EACKujC,EAAY7zC,GAGb6zC,EAAY5zC,GAAK4hB,OAASvR,EAF1BujC,EAAY7zC,GAAS6zC,EAAY5zC,IAIjC4zC,EAAY7zC,IAAU6zC,EAAY5zC,KAClC4zC,EAAY7zC,QAAS/3B,GACzB4rE,EAAY5zC,GAAK4hB,OAASvR,GAlBxB,CAqBd,EAEAx4C,KAAKiyH,eAAiB,SAASjrG,GAC3B,IAAI+0D,EAAc/7E,KAAKmgE,QAAQ4b,YAC/B,GAAKA,EAAL,CAEA,IAAIrG,EAAW1uD,EAAMkhB,MAAM66B,IACvBl6C,EAAM7B,EAAMmhB,IAAI46B,IAAM2S,EAE1B,GAAY,IAAR7sD,QACG,GAAoB,UAAhB7B,EAAM7e,OAAoB,CACjC,IAAIolD,EAAUwuB,EAAYr3D,OAAOgxD,EAAW,EAAG7sD,GAC/C0kC,EAAQrjD,SAAQ,SAASsd,GACrBA,GAAKxnB,KAAKwyH,iBAAiBhrG,EAC/B,GAAGxnB,MACHA,KAAKyyH,aACT,KAAO,CACH,IAAI/8F,EAAO,IAAIp0B,MAAMunB,GACrB6M,EAAKzS,QAAQyyD,EAAU,GACvBqG,EAAYr3D,OAAOjb,MAAMsyE,EAAarmD,GACtC11B,KAAKyyH,aACT,CAjBwB,CAkB5B,EAEAzyH,KAAKyyH,YAAc,WACf,IAAI12C,EAAc/7E,KAAKmgE,QAAQ4b,YAC/B,GAAKA,EAAL,CACA,IAAI22C,GAAY,EAChB32C,EAAY7xE,SAAQ,SAASsd,EAAGzhB,GAC5B,GAAIyhB,EAAG,CACHkrG,GAAY,EACZlrG,EAAEu7C,IAAMh9D,EACR,MAAOyhB,EAAEmrG,WACLnrG,EAAEmrG,WAAW5vD,IAAMh9D,EACnByhB,EAAIA,EAAEmrG,UAEd,CACJ,IACID,IACA1yH,KAAKmgE,QAAQ4b,YAAc,KAbP,CAc5B,EAEA/7E,KAAK4yH,cAAgB,SAASprG,GACrBxnB,KAAKmgE,QAAQ4b,cACd/7E,KAAKmgE,QAAQ4b,YAAc,IAAIz6E,MAAMtB,KAAKmgE,QAAQmH,cAEtD,IAAIqH,EAAM3uE,KAAKmgE,QAAQ4b,YAAYv0D,EAAEu7C,KACjC4L,IACAnnD,EAAEmrG,WAAahkD,EACXA,EAAI9+D,IAAM8+D,EAAI9+D,GAAGrE,aACjBmjE,EAAI9+D,GAAGrE,WAAWmE,YAAYg/D,EAAI9+D,IAClC8+D,EAAI4jD,aAAc,IAI1BvyH,KAAKmgE,QAAQ4b,YAAYv0D,EAAEu7C,KAAOv7C,EAElCA,EAAE24C,QAAUngE,KAAKmgE,QAEjB,IAAIO,EAAW1gE,KAAKsC,OAAOo+D,SACvBl5C,EAAEy+B,OAASz+B,EAAE3X,KACb2X,EAAE3X,GAAKkxB,EAAIt6B,cAAc,OACzB+gB,EAAE3X,GAAGkoC,UAAYvwB,EAAEy+B,MAEnBz+B,EAAE3X,KACFkxB,EAAIswB,YAAY7pC,EAAE3X,GAAI,2BACtB2X,EAAE3X,GAAGnJ,MAAMK,SAAW,WACtBygB,EAAE3X,GAAGnJ,MAAMmsH,OAAS,EACpBnyD,EAASr5D,UAAUC,YAAYkgB,EAAE3X,IACjC2X,EAAE+qG,aAAc,GAGf/qG,EAAEsrG,cACHtrG,EAAE3X,GAAGnJ,MAAMmsH,OAAS,GAEnBrrG,EAAEurG,cACHvrG,EAAEurG,YAAcvrG,EAAE3X,GAAGkqC,cAEP,MAAdvyB,EAAEq8D,WACFr8D,EAAEq8D,SAAWr8D,EAAEurG,YAAcryD,EAASqJ,YAAYD,YAGtD,IAAI2J,EAAOzzE,KAAKmgE,QAAQuT,UAAUlsD,EAAEu7C,IAAK,GAEzC,GADAv7C,EAAEwrG,MAAQv/C,EACNA,EAAM,CACN,IAAIsI,EAAc/7E,KAAKmgE,QAAQ4b,YAC3Bv0D,EAAEu7C,KAAO0Q,EAAKtrC,IAAI46B,KAAQgZ,EAAYtI,EAAKvrC,MAAM66B,KAGjDv7C,EAAEuiC,QAAS,EAFXgyB,EAAYtI,EAAKvrC,MAAM66B,KAAOv7C,CAGtC,CAOA,OALAxnB,KAAKmgE,QAAQc,MAAM,aAAc,CAAC5+D,KAAK,CAAC6lC,MAAM,CAAC66B,IAAKv7C,EAAEu7C,QAEtD/iE,KAAKyyH,cACLzyH,KAAKkyH,cAAc,KAAMxxD,GACzB1gE,KAAKizH,gBAAgBzrG,GACdA,CACX,EAEAxnB,KAAKwyH,iBAAmB,SAAShrG,GAK7B,GAJAA,EAAE+qG,aAAc,EAChB/qG,EAAE24C,QAAU,KACR34C,EAAE3X,IAAM2X,EAAE3X,GAAGrE,YACbgc,EAAE3X,GAAGrE,WAAWmE,YAAY6X,EAAE3X,IAC9B2X,EAAEllB,QAAUklB,EAAEllB,OAAO0I,QAAS,IAC9Bwc,EAAEllB,OAAO0I,SACb,CAAE,MAAM7H,GAAG,CACX,GAAInD,KAAKmgE,QAAQ4b,YAAa,CAC1B,IAAIm3C,EAAKlzH,KAAKmgE,QAAQ4b,YAAYv0D,EAAEu7C,KACpC,GAAImwD,GAAM1rG,EACNxnB,KAAKmgE,QAAQ4b,YAAYv0D,EAAEu7C,KAAOv7C,EAAEmrG,WAChCnrG,EAAEmrG,YACF3yH,KAAKizH,gBAAgBzrG,EAAEmrG,iBAE3B,MAAOO,EAAI,CACP,GAAIA,EAAGP,YAAcnrG,EAAG,CACpB0rG,EAAGP,WAAanrG,EAAEmrG,WAClB,KACJ,CACAO,EAAKA,EAAGP,UACZ,CAER,CACA3yH,KAAKmgE,QAAQc,MAAM,aAAc,CAAC5+D,KAAK,CAAC6lC,MAAM,CAAC66B,IAAKv7C,EAAEu7C,QACtD/iE,KAAKyyH,aACT,EAEAzyH,KAAKmzH,gBAAkB,SAASpwD,GAC5B,IAAIgZ,EAAc/7E,KAAKmgE,QAAQ4b,YAC3Bv0D,EAAIu0D,GAAeA,EAAYhZ,GAC/B9qB,EAAO,GACX,MAAOzwB,EACHywB,EAAKvrC,KAAK8a,GACVA,EAAIA,EAAEmrG,WAEV,OAAO16E,CACX,EAEAj4C,KAAKizH,gBAAkB,SAASzrG,GAC5BxnB,KAAKmgE,QAAQiyD,gBAAgB1lH,KAAK8a,GAClCxnB,KAAKsC,QAAUtC,KAAKsC,OAAOo+D,SAASqqC,YACxC,EAEA/qG,KAAKmyH,eAAiB,SAAShvH,EAAGu9D,GAC9B,IAAI0yD,EAAiBpzH,KAAKmgE,QAAQiyD,gBAC9BnjH,EAASyxD,EAASqJ,YAEtB,GAAKqpD,GAAmBA,EAAe1rH,OAAvC,CAEA,IADA,IAAIo9B,EAAM3rB,IACDpT,EAAI,EAAGA,EAAIqtH,EAAe1rH,OAAQ3B,IAAK,CAC5C,IAAIyhB,EAAI4rG,EAAertH,GACvB,GAAKyhB,GAAMA,EAAE3X,IACT2X,EAAE24C,SAAWngE,KAAKmgE,QAAtB,CACA,IAAK34C,EAAE+qG,YAAa,CAChB,GAAIvyH,KAAKmgE,QAAQ4b,YAAYv0D,EAAEu7C,MAAQv7C,EACnC,SACJA,EAAE+qG,aAAc,EAChB7xD,EAASr5D,UAAUC,YAAYkgB,EAAE3X,GACrC,CAEA2X,EAAEniB,EAAImiB,EAAE3X,GAAGkqC,aAENvyB,EAAE6rG,aACH7rG,EAAEA,EAAIA,EAAE3X,GAAG8iD,YACXnrC,EAAEsyE,YAAcj0E,KAAKuyF,KAAK5wF,EAAEA,EAAIvY,EAAO+6D,iBAG3C,IAAI6Z,EAAWr8D,EAAEniB,EAAI4J,EAAO66D,WACxBtiD,EAAE8rG,YACFzvC,GAAY7jF,KAAKmgE,QAAQ2+B,gBAAgBt3E,EAAEu7C,KACvC8gB,EAAW,IACXA,EAAW,IAEfr8D,EAAEq8D,UAAYA,IACdr8D,EAAEq8D,SAAWA,EACTr8D,EAAEu7C,IAAMj+B,IACRA,EAAMtd,EAAEu7C,KAxBuB,CA0B3C,CACIj+B,GAAO3rB,MACPnZ,KAAKmgE,QAAQc,MAAM,aAAc,CAAC5+D,KAAK,CAAC6lC,MAAM,CAAC66B,IAAKj+B,MACpD9kC,KAAKmgE,QAAQ65B,gBAAkB,MAEnCh6F,KAAKmgE,QAAQiyD,gBAAkB,EApCsB,CAqCzD,EAEApyH,KAAKkyH,cAAgB,SAAS/uH,EAAGu9D,GAC7B,IAAIzxD,EAASyxD,EAASqJ,YAClBgS,EAAc/7E,KAAKmgE,QAAQ4b,YAC/B,GAAKA,EAAL,CAEA,IAAIpzC,EAAQ9iB,KAAKif,IAAI9kC,KAAK02E,SAAUznE,EAAOynE,UACvCnyD,EAAOsB,KAAKkf,IAAI/kC,KAAK22E,QAAS1nE,EAAO0nE,QAASoF,EAAYr0E,QAE9D,MAAOihC,EAAQ,IAAMozC,EAAYpzC,GAC7BA,IAEJ3oC,KAAK02E,SAAWznE,EAAOynE,SACvB12E,KAAK22E,QAAU1nE,EAAO0nE,QAEtBjW,EAASmK,aAAa57D,OAASA,EAC/B,IAAK,IAAIlJ,EAAI4iC,EAAO5iC,GAAKwe,EAAMxe,IAAK,CAChC,IAAIyhB,EAAIu0D,EAAYh2E,GACpB,GAAKyhB,GAAMA,EAAE3X,GACb,GAAI2X,EAAEuiC,OACFviC,EAAE3X,GAAGnJ,MAAMS,KAAO,KAAOqgB,EAAEurG,aAAe,GAAK,SADnD,CAIKvrG,EAAE+qG,cACH/qG,EAAE+qG,aAAc,EAChB7xD,EAASr5D,UAAUC,YAAYkgB,EAAE3X,KAErC,IAAI1I,EAAMu5D,EAASmK,aAAagzC,iBAAiB,CAAC96C,IAAKh9D,EAAGi9D,OAAO,IAAI,GAAM77D,IACtEqgB,EAAE8rG,YACHnsH,GAAO8H,EAAO66D,WAAa9pE,KAAKmgE,QAAQ2+B,gBAAgBt3E,EAAEu7C,MAC9Dv7C,EAAE3X,GAAGnJ,MAAMS,IAAMA,EAAM8H,EAAOitD,OAAS,KAEvC,IAAIruB,EAAOrmB,EAAEsrG,YAAc,EAAIpyD,EAASu2C,YACnCzvF,EAAE6rG,aACHxlF,GAAQ6yB,EAAS3yB,YACrBvmB,EAAE3X,GAAGnJ,MAAMmnC,KAAOA,EAAO,KAErBrmB,EAAE+rG,WAAa/rG,EAAEsyE,cACjBtyE,EAAE3X,GAAGnJ,MAAM8rD,SAAWvjD,EAAOg7B,MAAQ,EAAIh7B,EAAOpI,QAAU,MAG1D2gB,EAAE6rG,WACF7rG,EAAE3X,GAAGnJ,MAAM6qC,MAAQmvB,EAAS4gD,UAAU96C,WAAa,KAEnDh/C,EAAE3X,GAAGnJ,MAAM6qC,MAAQ,EAtBvB,CAwBJ,CAzCU,CA0Cd,CAEH,GAAE3sC,KAAKmtH,EAAY9pH,WAGpBxC,EAAQssH,YAAcA,CAEtB,IAEAhqE,IAAImC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,mBAAmB,cAAc,cAAc,SAASS,EAAUllD,EAASE,GAC3I,aACA,IAAIosH,EAAcpnE,EAAS,mBAAmBonE,YAC1ChxF,EAAM4pB,EAAS,cACf8qB,EAAQ9qB,EAAS,YAAY8qB,MAEjC,SAAS+9C,EAAavtG,EAAO66E,EAAQ2yB,GACjC,IAAI9qF,EAAQ,EACRpkB,EAAO0B,EAAMve,OAAS,EAE1B,MAAOihC,GAASpkB,EAAM,CAClB,IAAI4wE,EAAOxsD,EAAQpkB,GAAS,EACxBre,EAAIutH,EAAW3yB,EAAQ76E,EAAMkvE,IACjC,GAAIjvF,EAAI,EACJyiC,EAAQwsD,EAAM,MACb,MAAIjvF,EAAI,GAGT,OAAOivF,EAFP5wE,EAAO4wE,EAAM,CAEH,CAClB,CACA,QAASxsD,EAAQ,EACrB,CAEA,SAAS+qF,EAAgBvzD,EAAS4C,EAAKkvB,GACnC,IAAIgG,EAAc93B,EAAQ+3B,iBAAiB1qE,KAAKioD,EAAMH,eACtD,GAAK2iB,EAAYvwF,OAAjB,CAGA,IAAI3B,EAAIytH,EAAav7B,EAAa,CAACl1B,IAAKA,EAAKC,QAAS,GAAIyS,EAAMH,eAC5DvvE,EAAI,IACJA,GAAKA,EAAI,GAETA,GAAKkyF,EAAYvwF,OACjB3B,EAAIksF,EAAM,EAAI,EAAIgG,EAAYvwF,OAAS,EAC5B,IAAN3B,GAAWksF,EAAM,IACtBlsF,EAAIkyF,EAAYvwF,OAAS,GAE7B,IAAIw/D,EAAa+wB,EAAYlyF,GAC7B,GAAKmhE,GAAe+qB,EAApB,CAGA,GAAI/qB,EAAWnE,MAAQA,EAAK,CACxB,GACImE,EAAa+wB,EAAYlyF,GAAKksF,SACzB/qB,GAAcA,EAAWnE,MAAQA,GAC1C,IAAKmE,EACD,OAAO+wB,EAAYlrF,OAC3B,CAGA,IAAImoC,EAAU,GACd6tB,EAAMmE,EAAWnE,IACjB,GACI7tB,EAAQ+8C,EAAM,EAAI,UAAY,QAAQ/qB,GACtCA,EAAa+wB,EAAYlyF,GAAKksF,SACzB/qB,GAAcA,EAAWnE,KAAOA,GACzC,OAAO7tB,EAAQxtC,QAAUwtC,CAjBf,CAbA,CA+Bd,CAEAzvC,EAAQw+F,gBAAkB,SAAS3hG,EAAQ2vF,GACvC,IAAI9xB,EAAU79D,EAAO69D,QAChBA,EAAQ6xD,gBACT7xD,EAAQ6xD,cAAgB,IAAID,EAAY5xD,GACxCA,EAAQ6xD,cAAcn9C,OAAOvyE,IAGjC,IAAI+oB,EAAM/oB,EAAOkpG,oBACbzoC,EAAM13C,EAAI03C,IACV4wD,EAAYxzD,EAAQ6xD,cAAcmB,gBAAgBpwD,GAAK1/B,QAAO,SAAS7b,GACvE,MAAiB,eAAVA,EAAE/lB,IACb,IAAG,GACCkyH,EACAA,EAAU3oH,UAEV+3D,GAAOkvB,EAEX,IACI2hC,EADA37B,EAAcy7B,EAAgBvzD,EAAS4C,EAAKkvB,GAEhD,GAAIgG,EAAa,CACb,IAAI/wB,EAAa+wB,EAAY,GAC7B5sE,EAAI23C,QAAUkE,EAAW77C,KAAmC,iBAArB67C,EAAWlE,OAC5CkE,EAAW77C,IAAIwoG,GACf3sD,EAAWlE,SAAW,EAC5B33C,EAAI03C,IAAMmE,EAAWnE,IACrB6wD,EAAatxH,EAAOo+D,SAASoG,aAAaK,aAAa97C,EAAI03C,IAC/D,KAAO,IAAI4wD,EACP,OAEAC,EAAa,CACTvrH,KAAM,CAAC,eACP88B,UAAW,SAEnB,CACA7iC,EAAO69D,QAAQ8wB,OAAO5lE,EAAI03C,KAC1BzgE,EAAO2+B,UAAUuiC,eAAen4C,GAEhC,IAAI7D,EAAI,CACJu7C,IAAK13C,EAAI03C,IACTswD,YAAY,EACZP,aAAa,EACbjjH,GAAIkxB,EAAIt6B,cAAc,OACtBhF,KAAM,eAENoO,EAAK2X,EAAE3X,GAAGvI,YAAYy5B,EAAIt6B,cAAc,QACxCqtH,EAAQtsG,EAAE3X,GAAGvI,YAAYy5B,EAAIt6B,cAAc,QAC/CqtH,EAAM3uF,UAAY,sBAAwByuF,EAAWzuF,UAErD,IAAI0I,EAAOvrC,EAAOo+D,SAASmK,aACtBgzC,iBAAiBxyF,GAAKwiB,KAC3BimF,EAAMptH,MAAMmnC,KAAOA,EAAOvrC,EAAOo+D,SAASu2C,YAAc,EAAI,KAE5DzvF,EAAE3X,GAAGs1B,UAAY,uBACjBt1B,EAAGs1B,UAAY,gBAAkByuF,EAAWzuF,UAC5Ct1B,EAAGkoC,UAAY67E,EAAWvrH,KAAK6a,KAAK,QAEpCrT,EAAGvI,YAAYy5B,EAAIt6B,cAAc,QAEjC,IAAI8tE,EAAK,SAASznE,EAAG2sD,EAAQhF,GACzB,GAAe,IAAXgF,IAA+B,QAAdhF,GAAqC,WAAdA,GAExC,OADAjtC,EAAExc,UACK,CAACoqE,QAAS,OAEzB,EAEA5tD,EAAExc,QAAU,WACJ1I,EAAOklG,cAAcv/B,iBAEzB3lE,EAAOilG,WAAW/yB,sBAAsBD,GACxCpU,EAAQ6xD,cAAcQ,iBAAiBhrG,GACvCllB,EAAOuK,IAAI,kBAAmB2a,EAAExc,SAChC1I,EAAOuK,IAAI,gBAAiB2a,EAAExc,SAC9B1I,EAAOuK,IAAI,UAAW2a,EAAExc,SACxB1I,EAAOuK,IAAI,SAAU2a,EAAExc,SAC3B,EAEA1I,EAAOilG,WAAW7yB,mBAAmBH,GACrCjyE,EAAO/B,GAAG,kBAAmBinB,EAAExc,SAC/B1I,EAAO/B,GAAG,gBAAiBinB,EAAExc,SAC7B1I,EAAO/B,GAAG,UAAWinB,EAAExc,SACvB1I,EAAO/B,GAAG,SAAUinB,EAAExc,SAEtB1I,EAAO69D,QAAQ6xD,cAAcY,cAAcprG,GAE3CA,EAAE3X,GAAGk2B,YAAczjC,EAAOuI,MAAMc,KAAKrJ,GAErCA,EAAOo+D,SAAS6D,qBAAqB,KAAM,GAAK,CAACvgC,OAAQxc,EAAE3X,GAAGkqC,cAClE,EAGAhZ,EAAIgxB,gBAAgB,y7BAiCjB,GAEH,IAEAhK,IAAImC,OAAO,UAAU,CAAC,UAAU,UAAU,SAAS,yBAAyB,cAAc,gBAAgB,aAAa,mBAAmB,kBAAkB,uBAAuB,2BAA2B,4BAA4B,kBAAkB,mBAAmB,6BAA6B,qBAAqB,uBAAuB,eAAe,SAASS,EAAUllD,EAASE,GACnY,aAEAglD,EAAS,wBAET,IAAI5pB,EAAM4pB,EAAS,aACftlB,EAAQslB,EAAS,eAEjBy8C,EAASz8C,EAAS,YAAYy8C,OAC9BlT,EAAcvpC,EAAS,kBAAkBupC,YACzCohB,EAAc3qD,EAAS,iBAAiB2qD,YACxCye,EAAWppE,EAAS,sBAAsBk2D,gBAC9Cl2D,EAAS,0BACTA,EAAS,2BACTA,EAAS,iBACTA,EAAS,kBACTA,EAAS,4BACTA,EAAS,oBACTA,EAAS,sBAETllD,EAAQwJ,OAAS07C,EAAS,YAC1BllD,EAAQklD,SAAWA,EACnBllD,EAAQmjD,KAAO,SAAS/4C,GACpB,GAAiB,iBAANA,EAAgB,CACvB,IAAImkH,EAAMnkH,EAEV,GADAA,EAAK1J,SAAS8tH,eAAeD,IACxBnkH,EACD,MAAM,IAAIvH,MAAM,4BAA8B0rH,EACtD,CAEA,GAAInkH,GAAMA,EAAGqkH,KAAOrkH,EAAGqkH,IAAI5xH,kBAAkB8kG,EACzC,OAAOv3F,EAAGqkH,IAAI5xH,OAElB,IAAIpB,EAAQ,GACZ,GAAI2O,GAAM,kBAAkBiF,KAAKjF,EAAGskH,SAAU,CAC1C,IAAIC,EAAUvkH,EACd3O,EAAQkzH,EAAQlzH,MAChB2O,EAAKkxB,EAAIt6B,cAAc,OACvB2tH,EAAQ5oH,WAAW4nD,aAAavjD,EAAIukH,EACxC,MAAWvkH,IACP3O,EAAQ6/B,EAAIwO,aAAa1/B,GACzBA,EAAGkoC,UAAY,IAGnB,IAAIgZ,EAAMtrD,EAAQ4uH,kBAAkBnzH,GAEhCoB,EAAS,IAAI8kG,EAAO,IAAI2sB,EAASlkH,IACrCvN,EAAOulG,WAAW92C,GAElB,IAAImjE,EAAM,CACN/tH,SAAU4qD,EACVzuD,OAAQA,EACR4oG,SAAU5oG,EAAOknD,OAAO79C,KAAKrJ,EAAQ,OASzC,OAPI8xH,IAASF,EAAI5rE,SAAW8rE,GAC5B/uF,EAAMkxB,YAAYvvD,OAAQ,SAAUktH,EAAIhpB,UACxC5oG,EAAO/B,GAAG,WAAW,WACjB8kC,EAAMqxB,eAAe1vD,OAAQ,SAAUktH,EAAIhpB,UAC3CgpB,EAAI5xH,OAAO+E,UAAU6sH,IAAM,IAC/B,IACA5xH,EAAO+E,UAAU6sH,IAAM5xH,EAAO4xH,IAAMA,EAC7B5xH,CACX,EACAmD,EAAQ4uH,kBAAoB,SAAShsH,EAAM1G,GACvC,IAAIovD,EAAM,IAAImjC,EAAY7rF,EAAM1G,GAEhC,OADAovD,EAAIglC,eAAe,IAAIuf,GAChBvkD,CACX,EACAtrD,EAAQyuF,YAAcA,EACtBzuF,EAAQ6vG,YAAcA,EACtB7vG,EAAQuJ,QAAU,OAClB,IACY,WACI+4C,IAAI4C,SAAS,CAAC,YAAY,SAAStkD,GAI/B,IAAK,IAAIyC,KAHTzC,GAAKA,EAAE4I,OAAOyhE,MAAK,GACd1pE,OAAO+gD,MACR/gD,OAAO+gD,IAAM1hD,GACDA,EAAOA,EAAE6G,eAAepE,KACpC9B,OAAO+gD,IAAIj/C,GAAOzC,EAAEyC,GAC5B,GACH,CARD,GAUZnD,EAAOF,QAAUuB,OAAO+gD,IAAI4C,SAAS,UAEhC,EAEA,SAAShlD,EAAQF,GAEtBE,EAAOF,QAAU,WAAa,MAAM,IAAI6C,MAAM,iCAAmC,CAG5E,EAEA,SAAS3C,EAAQF,IAEM,SAASof,GAErC,SAASyvG,IACP,GAAGzvG,EAAO4jG,KACR,IAEE,OADA,IAAIA,KAAK,CAAC,QAAS,CAAChnH,KAAM,eACnBgnH,IACT,CAAE,MAAMr6G,GAAM,CAGhB,IAAImmH,EAAU1vG,EAAO+kG,mBACP/kG,EAAOglG,gBACPhlG,EAAO2vG,cAErB,OAAO,SAASv2G,EAAOw2G,GACrB,IAAIC,EAAU,IAAIH,EACdI,EAAUF,EAAIE,QACdlzH,EAAOgzH,EAAIhzH,KAEf,GAAGkzH,EAAS,IAAI,IAAI5uH,EAAI,EAAG8iB,EAAM5K,EAAMvW,OAAQ3B,EAAI8iB,IAAO9iB,EACxD2uH,EAAQ/oF,OAAO1tB,EAAMlY,GAAI4uH,QACpB,IAAQ5uH,EAAI,EAAG8iB,EAAM5K,EAAMvW,OAAQ3B,EAAI8iB,IAAO9iB,EACnD2uH,EAAQ/oF,OAAO1tB,EAAMlY,IAGvB,OAAOtE,EAAOizH,EAAQ3K,QAAQtoH,GAAQizH,EAAQ3K,SAChD,CACF,CA3B8CpkH,EAAOF,QAAU6uH,GA6BpC,GAAE1vH,KAAKa,EAAU,WAAa,OAAOzF,IAAM,CAA3B,GAEtC,EAEA,SAAS2F,EAAQF,EAAS,GAE/BsiD,IAAImC,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,cAAc,kCAAkC,SAASS,EAAUllD,EAASE,GACrJ,aAEA,IAAIouD,EAAMpJ,EAAS,cACfi0B,EAAqBj0B,EAAS,0BAA0Bi0B,mBAExDg2C,EAAqB,WACrB50H,KAAK6+E,OAAS,CACV,MAAU,CACN,CACI7qC,MAAQ,WACR78B,MAAQ,+CACT,CACC68B,MAAQ,SACR78B,MAAQ,IACR2W,KAAQ,UACT,CACCkmB,MAAQ,mBACR78B,MAAQ,wBACT,CACC68B,MAAQ,mBACR78B,MAAQ,mDACT,CACC68B,MAAQ,4BACR78B,MAAQ,qBACT,CACC68B,MAAQ,kBACR78B,MAAQ,sCACT,CACC68B,MAAQ,kBACR78B,MAAQ,aACT,CACC68B,MAAQ,eACR78B,MAAQ,SACT,CACC68B,MAAQ,eACR78B,MAAQ,WACT,CACC68B,MAAQ,OACR78B,MAAQ,SAGhB,OAAW,CACP,CACI68B,MAAQ,2BACR78B,MAAQ,sDACT,CACC68B,MAAQ,SACR78B,MAAQ,aACT,CACC68B,MAAQ,SACR78B,MAAQ,IACR2W,KAAQ,SACT,CACCkmB,MAAQ,SACR78B,MAAQ,GACR2W,KAAQ,UAKxB,EAEAimC,EAAIL,SAASkhE,EAAoBh2C,GAEjCn5E,EAAQmvH,mBAAqBA,CAC7B,IAEA7sE,IAAImC,OAAO,kCAAkC,CAAC,UAAU,UAAU,SAAS,cAAc,SAASS,EAAUllD,EAASE,GACrH,aAEA,IAAI8vE,EAAQ9qB,EAAS,YAAY8qB,MAE7Bo/C,EAAuB,WAAY,GAEvC,WAEI70H,KAAKwmF,aAAe,SAAS/xC,EAAMrtB,GAC/B,QAAM,QAAQtS,KAAK2/B,IAGZ,SAAS3/B,KAAKsS,EACzB,EAEApnB,KAAKymF,YAAc,SAAS11B,EAAKgS,GAC7B,IAAItuB,EAAOsc,EAAIkjB,QAAQlR,GACnB9gD,EAAQwyB,EAAKxyB,MAAM,YAEvB,IAAKA,EAAO,OAAO,EAEnB,IAAI+gD,EAAS/gD,EAAM,GAAGva,OAClBotH,EAAe/jE,EAAIghC,oBAAoB,CAAChvB,IAAKA,EAAKC,OAAQA,IAE9D,IAAK8xD,GAAgBA,EAAa/xD,KAAOA,EAAK,OAAO,EAErD,IAAI31C,EAASptB,KAAKumF,WAAWx1B,EAAIkjB,QAAQ6gD,EAAa/xD,MACtDhS,EAAI9xC,QAAQ,IAAIw2D,EAAM1S,EAAK,EAAGA,EAAKC,EAAO,GAAI51C,EAClD,EAEAptB,KAAKumF,WAAa,SAAS9xC,GACvB,OAAOA,EAAKxyB,MAAM,QAAQ,EAC9B,CAEH,GAAErd,KAAKiwH,EAAqB5sH,WAE7BxC,EAAQovH,qBAAuBA,CAC/B,IAEA9sE,IAAImC,OAAO,4BAA4B,CAAC,UAAU,UAAU,SAAS,cAAc,qBAAqB,qBAAqB,iBAAiB,SAASS,EAAUllD,EAASE,GAC1K,aAEA,IAUIpB,EAVAwvD,EAAMpJ,EAAS,iBACfy1B,EAAYz1B,EAAS,gBAAgBy1B,UACrC8C,EAAgBv4B,EAAS,wBAAwBu4B,cACjDriF,EAAO8pD,EAAS,kBAEhBoqE,EACA,CAAC,OAAQ,eAAgB,wBACzBC,EACA,CAAC,OAAQ,eAAgB,uBAAwB,WAGjDC,EAAe,CAAC,EAChBC,EAAc,SAAS5yH,GACvB,IAAIuO,GAAM,EAMV,GALIvO,EAAOirH,cACP18G,EAAKvO,EAAO2+B,UAAUzkB,MAClBy4G,EAAanmF,YAAcxsC,EAAOirH,YAAYz+E,aAC9CmmF,EAAe,CAACnmF,WAAYxsC,EAAOirH,YAAYz+E,cAEnDmmF,EAAapkH,GACb,OAAOtM,EAAU0wH,EAAapkH,GAClCtM,EAAU0wH,EAAapkH,GAAM,CACzBskH,qBAAsB,EACtBC,iBAAkB,EAClBC,oBAAqB,GACrBC,sBAAuB,EACvBC,kBAAmB,EACnBC,uBAAwB,GACxBC,qBAAsB,GAE9B,EAEIC,EAAa,SAASz0F,EAAWgG,EAAU0uF,EAASC,GACpD,IAAI36B,EAAUh6D,EAAUkH,IAAI46B,IAAM9hC,EAAUiH,MAAM66B,IAClD,MAAO,CACH16D,KAAMstH,EAAU1uF,EAAW2uF,EAC3B30F,UAAW,CACH,EACAA,EAAUiH,MAAM86B,OAAS,EACzBi4B,EACAh6D,EAAUkH,IAAI66B,QAAUi4B,EAAU,EAAI,IAGtD,EAEI46B,EAAkB,WAClB71H,KAAK8E,IAAI,SAAU,aAAa,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS93D,GACrE,IAAIi4C,EAASh+C,EAAOkpG,oBAChB/2D,EAAO0rB,EAAQpP,IAAIkjB,QAAQ3zB,EAAOyiB,KACtC,GAAY,KAAR16D,EAAa,CACb6sH,EAAY5yH,GACZ,IAAI2+B,EAAY3+B,EAAOghE,oBACnBr8B,EAAWk5B,EAAQpP,IAAI4a,aAAa1qC,GACxC,GAAiB,KAAbgG,GAAgC,MAAbA,GAAoB3kC,EAAOotG,2BAC9C,OAAOgmB,EAAWz0F,EAAWgG,EAAU,IAAK,KACzC,GAAI4uF,EAAgBC,gBAAgBxzH,EAAQ69D,GAC/C,MAAI,WAAWrrD,KAAK2/B,EAAK6L,EAAO0iB,UAAY1gE,EAAOohE,mBAC/CmyD,EAAgBE,iBAAiBzzH,EAAQ69D,EAAS,KAC3C,CACH93D,KAAM,KACN44B,UAAW,CAAC,EAAG,MAGnB40F,EAAgBG,kBAAkB1zH,EAAQ69D,EAAS,KAC5C,CACH93D,KAAM,IACN44B,UAAW,CAAC,EAAG,IAI/B,MAAO,GAAY,KAAR54B,EAAa,CACpB6sH,EAAY5yH,GACZ,IAAI2zH,EAAYxhF,EAAKxD,UAAUqP,EAAO0iB,OAAQ1iB,EAAO0iB,OAAS,GAC9D,GAAiB,KAAbizD,EAAkB,CAClB,IAAIC,EAAW/1D,EAAQszB,oBAAoB,IAAK,CAACzwB,OAAQ1iB,EAAO0iB,OAAS,EAAGD,IAAKziB,EAAOyiB,MACxF,GAAiB,OAAbmzD,GAAqBL,EAAgBM,sBAAsB71E,EAAQ7L,EAAMpsC,GAEzE,OADAwtH,EAAgBO,yBACT,CACH/tH,KAAM,GACN44B,UAAW,CAAC,EAAG,GAG3B,CACJ,KAAO,IAAY,MAAR54B,GAAwB,QAARA,EAAgB,CACvC6sH,EAAY5yH,GACZ,IAAIszH,EAAU,GACVC,EAAgBQ,uBAAuB/1E,EAAQ7L,KAC/CmhF,EAAU/0H,EAAKu6D,aAAa,IAAK72D,EAAQ+wH,uBACzCO,EAAgBS,6BAEhBL,EAAYxhF,EAAKxD,UAAUqP,EAAO0iB,OAAQ1iB,EAAO0iB,OAAS,GAC9D,GAAkB,MAAdizD,EAAmB,CACnB,IAAInB,EAAe30D,EAAQ4xB,oBAAoB,CAAChvB,IAAKziB,EAAOyiB,IAAKC,OAAQ1iB,EAAO0iB,OAAO,GAAI,KAC3F,IAAK8xD,EACA,OAAO,KACZ,IAAIyB,EAAcv2H,KAAKumF,WAAWpmB,EAAQ8T,QAAQ6gD,EAAa/xD,KACnE,KAAO,KAAI6yD,EAIP,YADAC,EAAgBS,4BAFZC,EAAcv2H,KAAKumF,WAAW9xC,EAItC,CACA,IAAIrnB,EAASmpG,EAAcp2D,EAAQo2B,eAEnC,MAAO,CACHluF,KAAM,KAAO+kB,EAAS,KAAOmpG,EAAcX,EAC3C30F,UAAW,CAAC,EAAG7T,EAAO1lB,OAAQ,EAAG0lB,EAAO1lB,QAEhD,CACImuH,EAAgBS,2BACpB,CACJ,IAEAt2H,KAAK8E,IAAI,SAAU,YAAY,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS37B,GACpE,IAAIyC,EAAWk5B,EAAQpP,IAAI4a,aAAannC,GACxC,IAAKA,EAAM6gC,eAA6B,KAAZp+B,EAAiB,CACzCiuF,EAAY5yH,GACZ,IAAImyC,EAAO0rB,EAAQpP,IAAIkjB,QAAQzvC,EAAM0D,MAAM66B,KACvCkzD,EAAYxhF,EAAKxD,UAAUzM,EAAM2D,IAAI66B,OAAQx+B,EAAM2D,IAAI66B,OAAS,GACpE,GAAiB,KAAbizD,EAEA,OADAzxF,EAAM2D,IAAI66B,SACHx+B,EAEPjgC,EAAQ+wH,uBAEhB,CACJ,IAEAt1H,KAAK8E,IAAI,SAAU,aAAa,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS93D,GACrE,GAAY,KAARA,EAAa,CACb6sH,EAAY5yH,GACZ,IAAI2+B,EAAY3+B,EAAOghE,oBACnBr8B,EAAWk5B,EAAQpP,IAAI4a,aAAa1qC,GACxC,GAAiB,KAAbgG,GAAmB3kC,EAAOotG,2BAC1B,OAAOgmB,EAAWz0F,EAAWgG,EAAU,IAAK,KACzC,GAAI4uF,EAAgBC,gBAAgBxzH,EAAQ69D,GAE/C,OADA01D,EAAgBE,iBAAiBzzH,EAAQ69D,EAAS,KAC3C,CACH93D,KAAM,KACN44B,UAAW,CAAC,EAAG,GAG3B,MAAO,GAAY,KAAR54B,EAAa,CACpB6sH,EAAY5yH,GACZ,IAAIg+C,EAASh+C,EAAOkpG,oBAChB/2D,EAAO0rB,EAAQpP,IAAIkjB,QAAQ3zB,EAAOyiB,KAClCkzD,EAAYxhF,EAAKxD,UAAUqP,EAAO0iB,OAAQ1iB,EAAO0iB,OAAS,GAC9D,GAAiB,KAAbizD,EAAkB,CAClB,IAAIC,EAAW/1D,EAAQszB,oBAAoB,IAAK,CAACzwB,OAAQ1iB,EAAO0iB,OAAS,EAAGD,IAAKziB,EAAOyiB,MACxF,GAAiB,OAAbmzD,GAAqBL,EAAgBM,sBAAsB71E,EAAQ7L,EAAMpsC,GAEzE,OADAwtH,EAAgBO,yBACT,CACH/tH,KAAM,GACN44B,UAAW,CAAC,EAAG,GAG3B,CACJ,CACJ,IAEAjhC,KAAK8E,IAAI,SAAU,YAAY,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS37B,GACpE,IAAIyC,EAAWk5B,EAAQpP,IAAI4a,aAAannC,GACxC,IAAKA,EAAM6gC,eAA6B,KAAZp+B,EAAiB,CACzCiuF,EAAY5yH,GACZ,IAAImyC,EAAO0rB,EAAQpP,IAAIkjB,QAAQzvC,EAAM0D,MAAM66B,KACvCkzD,EAAYxhF,EAAKxD,UAAUzM,EAAM0D,MAAM86B,OAAS,EAAGx+B,EAAM0D,MAAM86B,OAAS,GAC5E,GAAiB,KAAbizD,EAEA,OADAzxF,EAAM2D,IAAI66B,SACHx+B,CAEf,CACJ,IAEAxkC,KAAK8E,IAAI,WAAY,aAAa,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS93D,GACvE,GAAY,KAARA,EAAa,CACb6sH,EAAY5yH,GACZ,IAAI2+B,EAAY3+B,EAAOghE,oBACnBr8B,EAAWk5B,EAAQpP,IAAI4a,aAAa1qC,GACxC,GAAiB,KAAbgG,GAAmB3kC,EAAOotG,2BAC1B,OAAOgmB,EAAWz0F,EAAWgG,EAAU,IAAK,KACzC,GAAI4uF,EAAgBC,gBAAgBxzH,EAAQ69D,GAE/C,OADA01D,EAAgBE,iBAAiBzzH,EAAQ69D,EAAS,KAC3C,CACH93D,KAAM,KACN44B,UAAW,CAAC,EAAG,GAG3B,MAAO,GAAY,KAAR54B,EAAa,CACpB6sH,EAAY5yH,GACZ,IAAIg+C,EAASh+C,EAAOkpG,oBAChB/2D,EAAO0rB,EAAQpP,IAAIkjB,QAAQ3zB,EAAOyiB,KAClCkzD,EAAYxhF,EAAKxD,UAAUqP,EAAO0iB,OAAQ1iB,EAAO0iB,OAAS,GAC9D,GAAiB,KAAbizD,EAAkB,CAClB,IAAIC,EAAW/1D,EAAQszB,oBAAoB,IAAK,CAACzwB,OAAQ1iB,EAAO0iB,OAAS,EAAGD,IAAKziB,EAAOyiB,MACxF,GAAiB,OAAbmzD,GAAqBL,EAAgBM,sBAAsB71E,EAAQ7L,EAAMpsC,GAEzE,OADAwtH,EAAgBO,yBACT,CACH/tH,KAAM,GACN44B,UAAW,CAAC,EAAG,GAG3B,CACJ,CACJ,IAEAjhC,KAAK8E,IAAI,WAAY,YAAY,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS37B,GACtE,IAAIyC,EAAWk5B,EAAQpP,IAAI4a,aAAannC,GACxC,IAAKA,EAAM6gC,eAA6B,KAAZp+B,EAAiB,CACzCiuF,EAAY5yH,GACZ,IAAImyC,EAAO0rB,EAAQpP,IAAIkjB,QAAQzvC,EAAM0D,MAAM66B,KACvCkzD,EAAYxhF,EAAKxD,UAAUzM,EAAM0D,MAAM86B,OAAS,EAAGx+B,EAAM0D,MAAM86B,OAAS,GAC5E,GAAiB,KAAbizD,EAEA,OADAzxF,EAAM2D,IAAI66B,SACHx+B,CAEf,CACJ,IAEAxkC,KAAK8E,IAAI,iBAAkB,aAAa,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS93D,GAC7E,GAAY,KAARA,GAAuB,KAARA,EAAa,CAC5B6sH,EAAY5yH,GACZ,IAAIosB,EAAQrmB,EACR44B,EAAY3+B,EAAOghE,oBACnBr8B,EAAWk5B,EAAQpP,IAAI4a,aAAa1qC,GACxC,GAAiB,KAAbgG,GAAgC,MAAbA,GAAgC,KAAZA,GAAmB3kC,EAAOotG,2BACjE,OAAOgmB,EAAWz0F,EAAWgG,EAAUvY,EAAOA,GAC3C,IAAKuY,EAAU,CAClB,IAAIqZ,EAASh+C,EAAOkpG,oBAChB/2D,EAAO0rB,EAAQpP,IAAIkjB,QAAQ3zB,EAAOyiB,KAClCyzD,EAAW/hF,EAAKxD,UAAUqP,EAAO0iB,OAAO,EAAG1iB,EAAO0iB,QAClDizD,EAAYxhF,EAAKxD,UAAUqP,EAAO0iB,OAAQ1iB,EAAO0iB,OAAS,GAE1DhvB,EAAQmsB,EAAQsjB,WAAWnjC,EAAOyiB,IAAKziB,EAAO0iB,QAC9CyzD,EAAat2D,EAAQsjB,WAAWnjC,EAAOyiB,IAAKziB,EAAO0iB,OAAS,GAChE,GAAgB,MAAZwzD,GAAoBxiF,GAAS,SAASl/B,KAAKk/B,EAAMvyC,MACjD,OAAO,KAEX,IAGIi1H,EAHAC,EAAe3iF,GAAS,gBAAgBl/B,KAAKk/B,EAAMvyC,MACnDm1H,GAAeH,GAAc,gBAAgB3hH,KAAK2hH,EAAWh1H,MAGjE,GAAIw0H,GAAavnG,EACbgoG,EAAOC,IAAiBC,MACrB,CACH,GAAID,IAAiBC,EACjB,OAAO,KACX,GAAID,GAAgBC,EAChB,OAAO,KACX,IAAIC,EAAS12D,EAAQs2B,MAAMtb,QAC3B07C,EAAOloG,UAAY,EACnB,IAAImoG,EAAeD,EAAO/hH,KAAK0hH,GAC/BK,EAAOloG,UAAY,EACnB,IAAIooG,EAAcF,EAAO/hH,KAAK0hH,GAC9B,GAAIM,GAAgBC,EAChB,OAAO,KACX,GAAId,IAAc,gBAAgBnhH,KAAKmhH,GACnC,OAAO,KACXS,GAAO,CACX,CACA,MAAO,CACHruH,KAAMquH,EAAOhoG,EAAQA,EAAQ,GAC7BuS,UAAW,CAAC,EAAE,GAEtB,CACJ,CACJ,IAEAjhC,KAAK8E,IAAI,iBAAkB,YAAY,SAASqvC,EAAOhsC,EAAQ7F,EAAQ69D,EAAS37B,GAC5E,IAAIyC,EAAWk5B,EAAQpP,IAAI4a,aAAannC,GACxC,IAAKA,EAAM6gC,gBAA8B,KAAZp+B,GAA+B,KAAZA,GAAkB,CAC9DiuF,EAAY5yH,GACZ,IAAImyC,EAAO0rB,EAAQpP,IAAIkjB,QAAQzvC,EAAM0D,MAAM66B,KACvCkzD,EAAYxhF,EAAKxD,UAAUzM,EAAM0D,MAAM86B,OAAS,EAAGx+B,EAAM0D,MAAM86B,OAAS,GAC5E,GAAIizD,GAAahvF,EAEb,OADAzC,EAAM2D,IAAI66B,SACHx+B,CAEf,CACJ,GAEJ,EAGAqxF,EAAgBC,gBAAkB,SAASxzH,EAAQ69D,GAC/C,IAAI7f,EAASh+C,EAAOkpG,oBAChBzjG,EAAW,IAAIm7E,EAAc/iB,EAAS7f,EAAOyiB,IAAKziB,EAAO0iB,QAC7D,IAAKhjE,KAAKg3H,gBAAgBjvH,EAAS+7E,mBAAqB,OAAQixC,GAAwB,CACpF,IAAIkC,EAAY,IAAI/zC,EAAc/iB,EAAS7f,EAAOyiB,IAAKziB,EAAO0iB,OAAS,GACvE,IAAKhjE,KAAKg3H,gBAAgBC,EAAUnzC,mBAAqB,OAAQixC,GAC7D,OAAO,CACf,CAEA,OADAhtH,EAAS67E,cACF77E,EAASg8E,uBAAyBzjC,EAAOyiB,KAC5C/iE,KAAKg3H,gBAAgBjvH,EAAS+7E,mBAAqB,OAAQkxC,EACnE,EAEAa,EAAgBmB,gBAAkB,SAAShjF,EAAO/pB,GAC9C,OAAOA,EAAMpY,QAAQmiC,EAAMvyC,MAAQuyC,IAAU,CACjD,EAEA6hF,EAAgBE,iBAAmB,SAASzzH,EAAQ69D,EAASwzB,GACzD,IAAIrzC,EAASh+C,EAAOkpG,oBAChB/2D,EAAO0rB,EAAQpP,IAAIkjB,QAAQ3zB,EAAOyiB,KACjC/iE,KAAKm2H,sBAAsB71E,EAAQ7L,EAAMlwC,EAAQ8wH,oBAAoB,MACtE9wH,EAAQ4wH,qBAAuB,GACnC5wH,EAAQ6wH,gBAAkB90E,EAAOyiB,IACjCx+D,EAAQ8wH,oBAAsB1hC,EAAUl/C,EAAKzyB,OAAOs+B,EAAO0iB,QAC3Dz+D,EAAQ4wH,sBACZ,EAEAU,EAAgBG,kBAAoB,SAAS1zH,EAAQ69D,EAASwzB,GAC1D,IAAIrzC,EAASh+C,EAAOkpG,oBAChB/2D,EAAO0rB,EAAQpP,IAAIkjB,QAAQ3zB,EAAOyiB,KACjC/iE,KAAKq2H,uBAAuB/1E,EAAQ7L,KACrClwC,EAAQ+wH,sBAAwB,GACpC/wH,EAAQgxH,iBAAmBj1E,EAAOyiB,IAClCx+D,EAAQixH,uBAAyB/gF,EAAKzyB,OAAO,EAAGs+B,EAAO0iB,QAAU2wB,EACjEpvF,EAAQkxH,qBAAuBhhF,EAAKzyB,OAAOs+B,EAAO0iB,QAClDz+D,EAAQ+wH,uBACZ,EAEAO,EAAgBM,sBAAwB,SAAS71E,EAAQ7L,EAAMk/C,GAC3D,OAAOpvF,EAAQ4wH,qBAAuB,GAClC70E,EAAOyiB,MAAQx+D,EAAQ6wH,iBACvBzhC,IAAYpvF,EAAQ8wH,oBAAoB,IACxC5gF,EAAKzyB,OAAOs+B,EAAO0iB,UAAYz+D,EAAQ8wH,mBAC/C,EAEAQ,EAAgBQ,uBAAyB,SAAS/1E,EAAQ7L,GACtD,OAAOlwC,EAAQ+wH,sBAAwB,GACnCh1E,EAAOyiB,MAAQx+D,EAAQgxH,kBACvB9gF,EAAKzyB,OAAOs+B,EAAO0iB,UAAYz+D,EAAQkxH,sBACvChhF,EAAKzyB,OAAO,EAAGs+B,EAAO0iB,SAAWz+D,EAAQixH,sBACjD,EAEAK,EAAgBO,uBAAyB,WACrC7xH,EAAQ8wH,oBAAsB9wH,EAAQ8wH,oBAAoBrzG,OAAO,GACjEzd,EAAQ4wH,sBACZ,EAEAU,EAAgBS,0BAA4B,WACpC/xH,IACAA,EAAQ+wH,sBAAwB,EAChC/wH,EAAQgxH,kBAAoB,EAEpC,EAIAxhE,EAAIL,SAASmiE,EAAiBz1C,GAE9B36E,EAAQowH,gBAAkBA,CAC1B,IAEA9tE,IAAImC,OAAO,0BAA0B,CAAC,UAAU,UAAU,SAAS,cAAc,YAAY,+BAA+B,SAASS,EAAUllD,EAASE,GACxJ,aAEA,IAAIouD,EAAMpJ,EAAS,iBACf8qB,EAAQ9qB,EAAS,eAAe8qB,MAChCyhD,EAAevsE,EAAS,eAAe6mE,SAEvCA,EAAW/rH,EAAQ+rH,SAAW,SAAS2F,GACnCA,IACAn3H,KAAKyxH,mBAAqB,IAAIx6G,OAC1BjX,KAAKyxH,mBAAmBnwG,OAAOrC,QAAQ,YAAa,IAAMk4G,EAAajvF,QAE3EloC,KAAK0xH,kBAAoB,IAAIz6G,OACzBjX,KAAK0xH,kBAAkBpwG,OAAOrC,QAAQ,YAAa,IAAMk4G,EAAahvF,MAGlF,EACA4rB,EAAIL,SAAS89D,EAAU0F,GAEvB,WAEIl3H,KAAKyxH,mBAAqB,8BAC1BzxH,KAAK0xH,kBAAoB,kCACzB1xH,KAAKo3H,yBAA0B,uBAC/Bp3H,KAAKq3H,yBAA2B,2BAChCr3H,KAAKs3H,cAAgB,4BACrBt3H,KAAKu3H,mBAAqBv3H,KAAKmyF,cAC/BnyF,KAAKmyF,cAAgB,SAAShyB,EAASk1C,EAAWtyC,GAC9C,IAAItuB,EAAO0rB,EAAQ8T,QAAQlR,GAE3B,GAAI/iE,KAAKo3H,yBAAyBtiH,KAAK2/B,KAC9Bz0C,KAAKs3H,cAAcxiH,KAAK2/B,KAAUz0C,KAAKq3H,yBAAyBviH,KAAK2/B,GACtE,MAAO,GAGf,IAAIu+C,EAAKhzF,KAAKu3H,mBAAmBp3D,EAASk1C,EAAWtyC,GAErD,OAAKiwB,GAAMhzF,KAAKs3H,cAAcxiH,KAAK2/B,GACxB,QAEJu+C,CACX,EAEAhzF,KAAKoyF,mBAAqB,SAASjyB,EAASk1C,EAAWtyC,EAAKy0D,GACxD,IAAI/iF,EAAO0rB,EAAQ8T,QAAQlR,GAE3B,GAAI/iE,KAAKs3H,cAAcxiH,KAAK2/B,GACxB,OAAOz0C,KAAKy3H,sBAAsBt3D,EAAS1rB,EAAMsuB,GAErD,IAAI9gD,EAAQwyB,EAAKxyB,MAAMjiB,KAAKyxH,oBAC5B,GAAIxvG,EAAO,CACP,IAAIlc,EAAIkc,EAAMzF,MAEd,GAAIyF,EAAM,GACN,OAAOjiB,KAAK6xH,oBAAoB1xD,EAASl+C,EAAM,GAAI8gD,EAAKh9D,GAE5D,IAAIy+B,EAAQ27B,EAAQ6xB,oBAAoBjvB,EAAKh9D,EAAIkc,EAAM,GAAGva,OAAQ,GASlE,OAPI88B,IAAUA,EAAM6gC,gBACZmyD,EACAhzF,EAAQxkC,KAAK03H,gBAAgBv3D,EAAS4C,GAClB,OAAbsyC,IACP7wE,EAAQ,OAGTA,CACX,CAEA,GAAkB,cAAd6wE,EAAJ,CAGIpzF,EAAQwyB,EAAKxyB,MAAMjiB,KAAK0xH,mBAC5B,GAAIzvG,EAAO,CACHlc,EAAIkc,EAAMzF,MAAQyF,EAAM,GAAGva,OAE/B,OAAIua,EAAM,GACCjiB,KAAK8xH,oBAAoB3xD,EAASl+C,EAAM,GAAI8gD,EAAKh9D,GAErDo6D,EAAQ6xB,oBAAoBjvB,EAAKh9D,GAAI,EAChD,CAVU,CAWd,EAEA/F,KAAK03H,gBAAkB,SAASv3D,EAAS4C,GACrC,IAAItuB,EAAO0rB,EAAQ8T,QAAQlR,GACvB40D,EAAcljF,EAAK/0B,OAAO,MAC1Bg2D,EAAW3S,EACX4S,EAAclhC,EAAK/sC,OACvBq7D,GAAY,EACZ,IAAI6S,EAAS7S,EACTsE,EAASlH,EAAQmH,YACrB,QAASvE,EAAMsE,EAAQ,CACnB5yB,EAAO0rB,EAAQ8T,QAAQlR,GACvB,IAAI31C,EAASqnB,EAAK/0B,OAAO,MACzB,IAAgB,IAAZ0N,EAAJ,CAEA,GAAKuqG,EAAcvqG,EACf,MACJ,IAAIwqG,EAAW53H,KAAKoyF,mBAAmBjyB,EAAS,MAAO4C,GAEvD,GAAI60D,EAAU,CACV,GAAIA,EAAS1vF,MAAM66B,KAAO2S,EACtB,MACG,GAAIkiD,EAASvyD,cAChBtC,EAAM60D,EAASzvF,IAAI46B,SAChB,GAAI40D,GAAevqG,EACtB,KAER,CACAwoD,EAAS7S,CAdG,CAehB,CAEA,OAAO,IAAI0S,EAAMC,EAAUC,EAAaC,EAAQzV,EAAQ8T,QAAQ2B,GAAQluE,OAC5E,EACA1H,KAAKy3H,sBAAwB,SAASt3D,EAAS1rB,EAAMsuB,GACjD,IAAI4S,EAAclhC,EAAK/0B,OAAO,QAC1B2nD,EAASlH,EAAQmH,YACjBoO,EAAW3S,EAEXzyB,EAAK,uCACL4hD,EAAQ,EACZ,QAASnvB,EAAMsE,EAAQ,CACnB5yB,EAAO0rB,EAAQ8T,QAAQlR,GACvB,IAAIn5D,EAAI0mC,EAAGzuB,KAAK4yB,GAChB,GAAK7qC,IACDA,EAAE,GAAIsoF,IACLA,KAEAA,GAAO,KAChB,CAEA,IAAItc,EAAS7S,EACb,GAAI6S,EAASF,EACT,OAAO,IAAID,EAAMC,EAAUC,EAAaC,EAAQnhC,EAAK/sC,OAE7D,CAEH,EAAE9C,KAAK4sH,EAASvpH,UAEjB,IAEA8/C,IAAImC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,gCAAgC,kCAAkC,4BAA4B,0BAA0B,6BAA6B,SAASS,EAAUllD,EAASE,GACxQ,aAEA,IAAIouD,EAAMpJ,EAAS,cACfspC,EAAWtpC,EAAS,UAAUy5B,KAC9BjF,EAAiBx0B,EAAS,0BAA0BiqE,mBACpDC,EAAuBlqE,EAAS,4BAA4BkqE,qBAC5DgB,EAAkBlrE,EAAS,sBAAsBkrE,gBACjDgC,EAAiBltE,EAAS,oBAAoB6mE,SAC9C5J,EAAej9D,EAAS,2BAA2Bi9D,aAEnDxjC,EAAO,WACPpkF,KAAKm/E,eAAiBA,EACtBn/E,KAAK83H,SAAW,IAAIjD,EACpB70H,KAAKqkF,WAAa,IAAIwxC,EACtB71H,KAAKm5F,aAAe,IAAI0+B,CAC5B,EACA9jE,EAAIL,SAAS0wB,EAAM6P,GAEnB,WAEIj0F,KAAKqmF,kBAAoB,SAASlyC,EAAOM,EAAM6xC,GAC3C,IAAIl5D,EAASptB,KAAKumF,WAAW9xC,GAE7B,GAAa,SAATN,EAAkB,CAClB,IAAIlyB,EAAQwyB,EAAKxyB,MAAM,mBACnBA,IACAmL,GAAUk5D,EAElB,CAEA,OAAOl5D,CACX,EAEAptB,KAAKwmF,aAAe,SAASryC,EAAOM,EAAMrtB,GACtC,OAAOpnB,KAAK83H,SAAStxC,aAAa/xC,EAAMrtB,EAC5C,EAEApnB,KAAKymF,YAAc,SAAStyC,EAAO4c,EAAKgS,GACpC/iE,KAAK83H,SAASrxC,YAAY11B,EAAKgS,EACnC,EAEA/iE,KAAK0mF,aAAe,SAASvmB,GACzB,IAAI43D,EAAS,IAAInQ,EAAa,CAAC,OAAQ,EAAoB,IAAK,cAWhE,OAVAmQ,EAAOrO,iBAAiBvpD,EAAQiX,eAEhC2gD,EAAOx3H,GAAG,YAAY,SAAS4C,GAC3Bg9D,EAAQ63B,eAAe70F,EAAEd,KAC7B,IAEA01H,EAAOx3H,GAAG,aAAa,WACnB4/D,EAAQg4B,kBACZ,IAEO4/B,CACX,EAGA/3H,KAAK0nF,IAAM,eACd,EAAE9iF,KAAKw/E,EAAKn8E,WAEbxC,EAAQ2+E,KAAOA,CACf,GAGK,EAEA,SAASz+E,EAAQF,GAEtBE,EAAOF,QAAQoL,GAAK,uBACpBlL,EAAOF,QAAQsjE,IAAM,g5zCAEhB,EAEA,SAASpjE,EAAQF,GAEtBsiD,IAAImC,OAAO,oBAAoB,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,gBAAgB,4BAA4B,iBAAiB,SAASS,EAAUllD,EAASE,GACnL,aAEA,IAAIo7B,EAAM4pB,EAAS,cACf9pD,EAAO8pD,EAAS,eAChBtlB,EAAQslB,EAAS,gBACjBqtE,EAAe,2wGA8Ifl2B,EAAcn3C,EAAS,4BAA4Bm3C,YACnD3tB,EAAUxpB,EAAS,eAEvB5pB,EAAIgxB,gBAAgBimE,EAAc,iBAElC,IAAI/xE,EAAO,qrCAkBHhnC,QAAQ,QAAS,KAErB0hB,EAAY,SAASr+B,EAAQkiC,EAAOyzF,GACpC,IAAIC,EAAMn3F,EAAIt6B,cAAc,OAC5ByxH,EAAIngF,UAAYkO,EAChBjmD,KAAKwvC,QAAU0oF,EAAI/oF,WAEnBnvC,KAAKmmE,QACLnmE,KAAKkC,UAAUI,EACnB,GAEA,WACItC,KAAKkC,UAAY,SAASI,GACtBA,EAAOs/B,UAAY5hC,KACnBsC,EAAO+E,UAAUC,YAAYtH,KAAKwvC,SAClCxvC,KAAKsC,OAASA,CAClB,EAEAtC,KAAKm4H,cAAgB,SAASC,GAC1Bp4H,KAAK4hC,UAAYw2F,EAAG90H,cAAc,oBAClCtD,KAAKq4H,WAAaD,EAAG90H,cAAc,qBACnCtD,KAAKs4H,cAAgBF,EAAG90H,cAAc,uBACtCtD,KAAKu4H,aAAeH,EAAG90H,cAAc,6BACrCtD,KAAKw4H,oBAAsBJ,EAAG90H,cAAc,gCAC5CtD,KAAKy4H,gBAAkBL,EAAG90H,cAAc,6BACxCtD,KAAK04H,YAAc14H,KAAK4hC,UAAUt+B,cAAc,qBAChDtD,KAAK24H,aAAe34H,KAAKq4H,WAAW/0H,cAAc,oBACtD,EAEAtD,KAAKmmE,MAAQ,WACT,IAAIiyD,EAAKp4H,KAAKwvC,QAEdxvC,KAAKm4H,cAAcC,GAEnB,IAAIQ,EAAQ54H,KACZqlC,EAAMkxB,YAAY6hE,EAAI,aAAa,SAASj1H,GACxC8sB,YAAW,WACP2oG,EAAMC,YAAYhuH,OACtB,GAAG,GACHw6B,EAAMwE,gBAAgB1mC,EAC1B,IACAkiC,EAAMkxB,YAAY6hE,EAAI,SAAS,SAASj1H,GACpC,IAAIuC,EAAIvC,EAAEiF,QAAUjF,EAAE+/C,WAClB/6C,EAASzC,EAAEc,aAAa,UACxB2B,GAAUywH,EAAMzwH,GAChBywH,EAAMzwH,KACDywH,EAAME,aAAazvE,SAASlhD,IACjCywH,EAAME,aAAazvE,SAASlhD,GAAQ0Z,KAAK+2G,GAC7CvzF,EAAMwE,gBAAgB1mC,EAC1B,IAEAkiC,EAAM+0B,sBAAsBg+D,GAAI,SAASj1H,EAAGs2D,EAAQlwB,GAChD,IAAIkrB,EAAY0f,EAAQ3f,gBAAgBjrB,GACpC6rC,EAAUwjD,EAAME,aAAa11B,eAAe3pC,EAAQhF,GACpD2gB,GAAWA,EAAQvzD,OACnBuzD,EAAQvzD,KAAK+2G,GACbvzF,EAAMsxB,UAAUxzD,GAExB,IAEAnD,KAAK+nF,UAAYlnF,EAAK47D,aAAY,WAC9Bm8D,EAAMl4B,MAAK,GAAO,EACtB,IAEAr7D,EAAMkxB,YAAYv2D,KAAK04H,YAAa,SAAS,WACzCE,EAAM7wC,UAAUxrB,SAAS,GAC7B,IACAl3B,EAAMkxB,YAAYv2D,KAAK04H,YAAa,SAAS,WACzCE,EAAMC,YAAcD,EAAMF,YAC1BE,EAAMF,YAAYx3H,OAAS03H,EAAMnuF,WACrC,IACApF,EAAMkxB,YAAYv2D,KAAK24H,aAAc,SAAS,WAC1CC,EAAMC,YAAcD,EAAMD,aAC1BC,EAAMF,YAAYx3H,OAAS03H,EAAMnuF,WACrC,GACJ,EACAzqC,KAAK+4H,kBAAoB,IAAIj3B,EAAY,CAAC,CACtCx4C,QAAS,MACT92C,KAAM,iBACNqP,KAAM,SAASvf,GACXA,EAAOs/B,UAAU4W,MACrB,KAEJx4C,KAAK84H,aAAe,IAAIh3B,EACxB9hG,KAAK84H,aAAa51B,SAAS,CACvB,mBAAoB,SAASk1B,GACzB,IAAIY,EAAYZ,EAAGY,WAAaZ,EAAGY,UACnCZ,EAAGC,WAAW3xH,MAAM0zC,QAAU4+E,EAAY,GAAK,OAC/CZ,EAAGM,YAAY7tH,OACnB,EACA,0BAA2B,SAASutH,GAChCA,EAAGC,WAAW3xH,MAAM0zC,QAAU,GAC9Bg+E,EAAGO,aAAa9tH,OACpB,EACA,mBAAoB,SAASutH,GACzBA,EAAG5zB,UACP,EACA,+BAAgC,SAAS4zB,GACrCA,EAAGa,UACP,EACA,IAAO,SAASb,GACZnoG,YAAW,WAAamoG,EAAG5/E,MAAO,GACtC,EACA,OAAU,SAAS4/E,GACXA,EAAGS,aAAeT,EAAGO,cACrBP,EAAGn5G,UACPm5G,EAAG5zB,UACP,EACA,eAAgB,SAAS4zB,GACjBA,EAAGS,aAAeT,EAAGO,cACrBP,EAAGn5G,UACPm5G,EAAGa,UACP,EACA,aAAc,SAASb,GACfA,EAAGS,aAAeT,EAAGO,cACrBP,EAAGxlB,aACPwlB,EAAGv3B,SACP,EACA,IAAO,SAASu3B,IACXA,EAAGS,aAAeT,EAAGO,aAAeP,EAAGM,YAAcN,EAAGO,cAAc9tH,OAC3E,IAGJ7K,KAAK84H,aAAa92B,YAAY,CAAC,CAC3BxvF,KAAM,mBACN82C,QAAS,CAACoR,IAAK,cAAeqpC,IAAK,yBACnCliF,KAAM,SAASu2G,GACXA,EAAGG,aAAat5E,SAAWm5E,EAAGG,aAAat5E,QAC3Cm5E,EAAGc,cACP,GACD,CACC1mH,KAAM,sBACN82C,QAAS,CAACoR,IAAK,cAAeqpC,IAAK,yBACnCliF,KAAM,SAASu2G,GACXA,EAAGI,oBAAoBv5E,SAAWm5E,EAAGI,oBAAoBv5E,QACzDm5E,EAAGc,cACP,GACD,CACC1mH,KAAM,mBACN82C,QAAS,CAACoR,IAAK,cAAeqpC,IAAK,yBACnCliF,KAAM,SAASu2G,GACXA,EAAGK,gBAAgBx5E,SAAWm5E,EAAGK,gBAAgBx5E,QACjDm5E,EAAGc,cACP,KAGJl5H,KAAKk5H,aAAe,WAChBn4F,EAAIywB,YAAYxxD,KAAKu4H,aAAc,UAAWv4H,KAAKu4H,aAAat5E,SAChEle,EAAIywB,YAAYxxD,KAAKy4H,gBAAiB,UAAWz4H,KAAKy4H,gBAAgBx5E,SACtEle,EAAIywB,YAAYxxD,KAAKw4H,oBAAqB,UAAWx4H,KAAKw4H,oBAAoBv5E,SAC9Ej/C,KAAK0gG,MAAK,GAAO,EACrB,EAEA1gG,KAAKyqC,UAAY,SAAS6F,GACtBtwC,KAAKsC,OAAO69D,QAAQ11B,UAAU6F,GAAMtwC,KAAKsC,OAAOmlG,QAAQxiG,SAASqrC,IACjEtwC,KAAKsC,OAAOo+D,SAAS2sC,mBACzB,EACArtG,KAAK0gG,KAAO,SAASE,EAAaS,EAAW0R,GACzC,IAAIvuE,EAAQxkC,KAAKsC,OAAOo+F,KAAK1gG,KAAK04H,YAAYx3H,MAAO,CACjD0/F,YAAaA,EACbS,UAAWA,EACXzqE,MAAM,EACNqlC,OAAQj8D,KAAKu4H,aAAat5E,QAC1B2iD,cAAe5hG,KAAKw4H,oBAAoBv5E,QACxCyiD,UAAW1hG,KAAKy4H,gBAAgBx5E,QAChC8zD,cAAeA,IAEfomB,GAAW30F,GAASxkC,KAAK04H,YAAYx3H,MACzC6/B,EAAIywB,YAAYxxD,KAAK4hC,UAAW,cAAeu3F,GAC/Cn5H,KAAKsC,OAAO2+D,MAAM,gBAAiB,CAAEh/C,OAAQk3G,IAC7Cn5H,KAAKyqC,WACT,EACAzqC,KAAKwkG,SAAW,WACZxkG,KAAK0gG,MAAK,GAAM,EACpB,EACA1gG,KAAKi5H,SAAW,WACZj5H,KAAK0gG,MAAK,GAAM,EACpB,EACA1gG,KAAK6gG,QAAU,WACX,IAAIr8D,EAAQxkC,KAAKsC,OAAOu+F,QAAQ7gG,KAAK04H,YAAYx3H,MAAO,CACpD+6D,OAAQj8D,KAAKu4H,aAAat5E,QAC1B2iD,cAAe5hG,KAAKw4H,oBAAoBv5E,QACxCyiD,UAAW1hG,KAAKy4H,gBAAgBx5E,UAEhCk6E,GAAW30F,GAASxkC,KAAK04H,YAAYx3H,MACzC6/B,EAAIywB,YAAYxxD,KAAK4hC,UAAW,cAAeu3F,GAC/Cn5H,KAAKsC,OAAO2+D,MAAM,gBAAiB,CAAEh/C,OAAQk3G,IAC7Cn5H,KAAKyqC,YACLzqC,KAAKw4C,MACT,EACAx4C,KAAKif,QAAU,WACNjf,KAAKsC,OAAO8oE,eACbprE,KAAKsC,OAAO2c,QAAQjf,KAAK24H,aAAaz3H,MAC9C,EACAlB,KAAKo5H,mBAAqB,WACjBp5H,KAAKsC,OAAO8oE,gBACbprE,KAAKsC,OAAO2c,QAAQjf,KAAK24H,aAAaz3H,OACtClB,KAAKwkG,WAEb,EACAxkG,KAAK4yG,WAAa,WACT5yG,KAAKsC,OAAO8oE,eACbprE,KAAKsC,OAAOswG,WAAW5yG,KAAK24H,aAAaz3H,MACjD,EAEAlB,KAAKw4C,KAAO,WACRx4C,KAAKwvC,QAAQ9oC,MAAM0zC,QAAU,OAC7Bp6C,KAAKsC,OAAOilG,WAAW/yB,sBAAsBx0E,KAAK+4H,mBAClD/4H,KAAKsC,OAAOuI,OAChB,EACA7K,KAAKuqC,KAAO,SAASrpC,EAAO83H,GACxBh5H,KAAKwvC,QAAQ9oC,MAAM0zC,QAAU,GAC7Bp6C,KAAKq4H,WAAW3xH,MAAM0zC,QAAU4+E,EAAY,GAAK,OAEjDh5H,KAAKg5H,UAAYA,EAEb93H,IACAlB,KAAK04H,YAAYx3H,MAAQA,GAE7BlB,KAAK0gG,MAAK,GAAO,GAAO,GAExB1gG,KAAK04H,YAAY7tH,QACjB7K,KAAK04H,YAAYtsH,SAEjBpM,KAAKsC,OAAOilG,WAAW7yB,mBAAmB10E,KAAK+4H,kBACnD,EAEA/4H,KAAKq9D,UAAY,WACb,IAAIxtD,EAAK1J,SAASm3D,cAClB,OAAOztD,GAAM7P,KAAK04H,aAAe7oH,GAAM7P,KAAK24H,YAChD,CACH,GAAE/zH,KAAK+7B,EAAU14B,WAElBxC,EAAQk7B,UAAYA,EAEpBl7B,EAAQg7F,OAAS,SAASn+F,EAAQ02H,GAC9B,IAAIZ,EAAK91H,EAAOs/B,WAAa,IAAIjB,EAAUr+B,GAC3C81H,EAAG7tF,KAAKjoC,EAAO69D,QAAQwL,eAAgBqtD,EAC3C,CAEA,IACgB,WACIjxE,IAAI4C,SAAS,CAAC,sBAAsB,WAAY,GACnD,CAFD,EAKX,EAEA,SAAShlD,EAAQF,GAgCtBsiD,IAAImC,OAAO,uBAAwB,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAASS,EAAUllD,EAASE,GAEhHF,EAAQiiH,QAAS,EACjBjiH,EAAQ+hH,SAAW,iBACnB/hH,EAAQusD,QAAU,smFA2GlB,IAAIjxB,EAAM4pB,EAAS,cACnB5pB,EAAIgxB,gBAAgBtsD,EAAQusD,QAASvsD,EAAQ+hH,SAC7C,GAGK,GAEN,G,mCCpgnCA,SAAS90G,EAAQrM,EAAGP,GAClB,IAAK,IAAIgD,KAAOhD,EACdO,EAAEyC,GAAOhD,EAAEgD,GAEb,OAAOzC,CACT,C,kCAIA,IAAIgzH,EAAkB,WAClBC,EAAwB,SAAUpzH,GAAK,MAAO,IAAMA,EAAE2c,WAAW,GAAGtZ,SAAS,GAAK,EAClFgwH,EAAU,OAKVl2G,EAAS,SAAUxO,GAAO,OAAO2O,mBAAmB3O,GACnDoK,QAAQo6G,EAAiBC,GACzBr6G,QAAQs6G,EAAS,IAAM,EAE5B,SAASpyG,EAAQtS,GACf,IACE,OAAOyN,mBAAmBzN,EAC5B,CAAE,MAAOzG,GACH,CAGN,CACA,OAAOyG,CACT,CAEA,SAAS2kH,EACP75G,EACA85G,EACAC,QAEoB,IAAfD,IAAwBA,EAAa,CAAC,GAE3C,IACIE,EADAxnH,EAAQunH,GAAeE,EAE3B,IACED,EAAcxnH,EAAMwN,GAAS,GAC/B,CAAE,MAAOxc,GAEPw2H,EAAc,CAAC,CACjB,CACA,IAAK,IAAI7wH,KAAO2wH,EAAY,CAC1B,IAAIv4H,EAAQu4H,EAAW3wH,GACvB6wH,EAAY7wH,GAAOxH,MAAMsS,QAAQ1S,GAC7BA,EAAM2K,IAAIguH,GACVA,EAAoB34H,EAC1B,CACA,OAAOy4H,CACT,CAEA,IAAIE,EAAsB,SAAU34H,GAAS,OAAiB,MAATA,GAAkC,kBAAVA,EAAqBA,EAAQC,OAAOD,EAAS,EAE1H,SAAS04H,EAAYj6G,GACnB,IAAI7R,EAAM,CAAC,EAIX,OAFA6R,EAAQA,EAAMgC,OAAO1C,QAAQ,YAAa,IAErCU,GAILA,EAAMzB,MAAM,KAAKhU,SAAQ,SAAUi9E,GACjC,IAAIlpE,EAAQkpE,EAAMloE,QAAQ,MAAO,KAAKf,MAAM,KACxCpV,EAAMqe,EAAOlJ,EAAM6F,SACnB9hB,EAAMic,EAAMvW,OAAS,EAAIyf,EAAOlJ,EAAMiF,KAAK,MAAQ,UAEtC/S,IAAbrC,EAAIhF,GACNgF,EAAIhF,GAAO9G,EACFV,MAAMsS,QAAQ9F,EAAIhF,IAC3BgF,EAAIhF,GAAK4D,KAAK1K,GAEd8L,EAAIhF,GAAO,CAACgF,EAAIhF,GAAM9G,EAE1B,IAEO8L,GAjBEA,CAkBX,CAEA,SAASgsH,EAAgB14G,GACvB,IAAItT,EAAMsT,EACN/f,OAAOsQ,KAAKyP,GACXvV,KAAI,SAAU/C,GACb,IAAI9G,EAAMof,EAAItY,GAEd,QAAYqH,IAARnO,EACF,MAAO,GAGT,GAAY,OAARA,EACF,OAAOqhB,EAAOva,GAGhB,GAAIxH,MAAMsS,QAAQ5R,GAAM,CACtB,IAAIkW,EAAS,GAWb,OAVAlW,EAAIkI,SAAQ,SAAU6vH,QACP5pH,IAAT4pH,IAGS,OAATA,EACF7hH,EAAOxL,KAAK2W,EAAOva,IAEnBoP,EAAOxL,KAAK2W,EAAOva,GAAO,IAAMua,EAAO02G,IAE3C,IACO7hH,EAAOgL,KAAK,IACrB,CAEA,OAAOG,EAAOva,GAAO,IAAMua,EAAOrhB,EACpC,IACCqhC,QAAO,SAAUra,GAAK,OAAOA,EAAEthB,OAAS,CAAG,IAC3Cwb,KAAK,KACN,KACJ,OAAOpV,EAAO,IAAMA,EAAO,EAC7B,CAIA,IAAIksH,EAAkB,OAEtB,SAASC,EACPC,EACAtgE,EACAugE,EACAC,GAEA,IAAIN,EAAiBM,GAAUA,EAAOt3H,QAAQg3H,eAE1Cn6G,EAAQi6C,EAASj6C,OAAS,CAAC,EAC/B,IACEA,EAAQ68B,EAAM78B,EAChB,CAAE,MAAOxc,GAAI,CAEb,IAAIk3H,EAAQ,CACV7nH,KAAMonD,EAASpnD,MAAS0nH,GAAUA,EAAO1nH,KACzCuD,KAAOmkH,GAAUA,EAAOnkH,MAAS,CAAC,EAClCgJ,KAAM66C,EAAS76C,MAAQ,IACvBf,KAAM47C,EAAS57C,MAAQ,GACvB2B,MAAOA,EACPuiB,OAAQ03B,EAAS13B,QAAU,CAAC,EAC5BtkB,SAAUL,EAAYq8C,EAAUkgE,GAChC5kF,QAASglF,EAASI,EAAYJ,GAAU,IAK1C,OAHIC,IACFE,EAAMF,eAAiB58G,EAAY48G,EAAgBL,IAE9Cz4H,OAAOwuD,OAAOwqE,EACvB,CAEA,SAAS79E,EAAOt7C,GACd,GAAII,MAAMsS,QAAQ1S,GAChB,OAAOA,EAAM2K,IAAI2wC,GACZ,GAAIt7C,GAA0B,kBAAVA,EAAoB,CAC7C,IAAI4M,EAAM,CAAC,EACX,IAAK,IAAIhF,KAAO5H,EACd4M,EAAIhF,GAAO0zC,EAAMt7C,EAAM4H,IAEzB,OAAOgF,CACT,CACE,OAAO5M,CAEX,CAGA,IAAIq5H,EAAQN,EAAY,KAAM,CAC5Bl7G,KAAM,MAGR,SAASu7G,EAAaJ,GACpB,IAAIpsH,EAAM,GACV,MAAOosH,EACLpsH,EAAImV,QAAQi3G,GACZA,EAASA,EAAOx1H,OAElB,OAAOoJ,CACT,CAEA,SAASyP,EACP9B,EACA++G,GAEA,IAAIz7G,EAAOtD,EAAIsD,KACXY,EAAQlE,EAAIkE,WAAsB,IAAVA,IAAmBA,EAAQ,CAAC,GACxD,IAAI3B,EAAOvC,EAAIuC,UAAoB,IAATA,IAAkBA,EAAO,IAEnD,IAAI1L,EAAYkoH,GAAmBV,EACnC,OAAQ/6G,GAAQ,KAAOzM,EAAUqN,GAAS3B,CAC5C,CAEA,SAASy8G,EAAap0H,EAAGP,EAAG40H,GAC1B,OAAI50H,IAAMy0H,EACDl0H,IAAMP,IACHA,IAEDO,EAAE0Y,MAAQjZ,EAAEiZ,KACd1Y,EAAE0Y,KAAKE,QAAQ+6G,EAAiB,MAAQl0H,EAAEiZ,KAAKE,QAAQ+6G,EAAiB,MAAQU,GACrFr0H,EAAE2X,OAASlY,EAAEkY,MACb28G,EAAct0H,EAAEsZ,MAAO7Z,EAAE6Z,WAClBtZ,EAAEmM,OAAQ1M,EAAE0M,QAEnBnM,EAAEmM,OAAS1M,EAAE0M,OACZkoH,GACCr0H,EAAE2X,OAASlY,EAAEkY,MACf28G,EAAct0H,EAAEsZ,MAAO7Z,EAAE6Z,QACzBg7G,EAAct0H,EAAE67B,OAAQp8B,EAAEo8B,UAMhC,CAEA,SAASy4F,EAAet0H,EAAGP,GAKzB,QAJW,IAANO,IAAeA,EAAI,CAAC,QACd,IAANP,IAAeA,EAAI,CAAC,IAGpBO,IAAMP,EAAK,OAAOO,IAAMP,EAC7B,IAAI80H,EAAQv5H,OAAOsQ,KAAKtL,GAAGmnB,OACvBqtG,EAAQx5H,OAAOsQ,KAAK7L,GAAG0nB,OAC3B,OAAIotG,EAAMlzH,SAAWmzH,EAAMnzH,QAGpBkzH,EAAM3/F,OAAM,SAAUnyB,EAAK/C,GAChC,IAAI+0H,EAAOz0H,EAAEyC,GACTiyH,EAAOF,EAAM90H,GACjB,GAAIg1H,IAASjyH,EAAO,OAAO,EAC3B,IAAIkyH,EAAOl1H,EAAEgD,GAEb,OAAY,MAARgyH,GAAwB,MAARE,EAAuBF,IAASE,EAEhC,kBAATF,GAAqC,kBAATE,EAC9BL,EAAcG,EAAME,GAEtB75H,OAAO25H,KAAU35H,OAAO65H,EACjC,GACF,CAEA,SAASC,EAAiB1zE,EAASn/C,GACjC,OAGQ,IAFNm/C,EAAQxoC,KAAKE,QAAQ+6G,EAAiB,KAAKnoH,QACzCzJ,EAAO2W,KAAKE,QAAQ+6G,EAAiB,SAErC5xH,EAAO4V,MAAQupC,EAAQvpC,OAAS5V,EAAO4V,OACzCk9G,EAAc3zE,EAAQ5nC,MAAOvX,EAAOuX,MAExC,CAEA,SAASu7G,EAAe3zE,EAASn/C,GAC/B,IAAK,IAAIU,KAAOV,EACd,KAAMU,KAAOy+C,GACX,OAAO,EAGX,OAAO,CACT,CAEA,SAAS4zE,EAAoBd,GAC3B,IAAK,IAAIt0H,EAAI,EAAGA,EAAIs0H,EAAMnlF,QAAQxtC,OAAQ3B,IAAK,CAC7C,IAAIm0H,EAASG,EAAMnlF,QAAQnvC,GAC3B,IAAK,IAAIyM,KAAQ0nH,EAAOkB,UAAW,CACjC,IAAIC,EAAWnB,EAAOkB,UAAU5oH,GAC5B8oH,EAAMpB,EAAOqB,WAAW/oH,GAC5B,GAAK6oH,GAAaC,EAAlB,QACOpB,EAAOqB,WAAW/oH,GACzB,IAAK,IAAIgpH,EAAM,EAAGA,EAAMF,EAAI5zH,OAAQ8zH,IAC7BH,EAASI,mBAAqBH,EAAIE,GAAKH,EAHZ,CAKpC,CACF,CACF,CAEA,IAAIK,EAAO,CACTlpH,KAAM,aACNnO,YAAY,EACZpD,MAAO,CACLuR,KAAM,CACJ/Q,KAAMN,OACNO,QAAS,YAGb5B,OAAQ,SAAiBgN,EAAG2O,GAC1B,IAAIxa,EAAQwa,EAAIxa,MACZsnB,EAAW9M,EAAI8M,SACf7jB,EAAS+W,EAAI/W,OACbrC,EAAOoZ,EAAIpZ,KAGfA,EAAKs5H,YAAa,EAIlB,IAAIt2H,EAAIX,EAAOk3H,eACXppH,EAAOvR,EAAMuR,KACb6nH,EAAQ31H,EAAOm3H,OACf9iH,EAAQrU,EAAOo3H,mBAAqBp3H,EAAOo3H,iBAAmB,CAAC,GAI/D5pC,EAAQ,EACR6pC,GAAW,EACf,MAAOr3H,GAAUA,EAAOs3H,cAAgBt3H,EAAQ,CAC9C,IAAIu3H,EAAYv3H,EAAOF,OAASE,EAAOF,OAAOnC,KAAO,CAAC,EAClD45H,EAAUN,YACZzpC,IAEE+pC,EAAUC,WAAax3H,EAAOy3H,iBAAmBz3H,EAAO03H,YAC1DL,GAAW,GAEbr3H,EAASA,EAAO23H,OAClB,CAIA,GAHAh6H,EAAKi6H,gBAAkBpqC,EAGnB6pC,EAAU,CACZ,IAAIQ,EAAaxjH,EAAMvG,GACnBgqH,EAAkBD,GAAcA,EAAW54H,UAC/C,OAAI64H,GAGED,EAAWE,aACbC,EAAgBF,EAAiBn6H,EAAMk6H,EAAWlC,MAAOkC,EAAWE,aAE/Dp3H,EAAEm3H,EAAiBn6H,EAAMkmB,IAGzBljB,GAEX,CAEA,IAAI6vC,EAAUmlF,EAAMnlF,QAAQg9C,GACxBvuF,EAAYuxC,GAAWA,EAAQynF,WAAWnqH,GAG9C,IAAK0iC,IAAYvxC,EAEf,OADAoV,EAAMvG,GAAQ,KACPnN,IAIT0T,EAAMvG,GAAQ,CAAE7O,UAAWA,GAI3BtB,EAAKu6H,sBAAwB,SAAUC,EAAI76H,GAEzC,IAAIulD,EAAUrS,EAAQkmF,UAAU5oH,IAE7BxQ,GAAOulD,IAAYs1E,IAClB76H,GAAOulD,IAAYs1E,KAErB3nF,EAAQkmF,UAAU5oH,GAAQxQ,EAE9B,GAIEK,EAAK8B,OAAS9B,EAAK8B,KAAO,CAAC,IAAI24H,SAAW,SAAUhwH,EAAGiD,GACvDmlC,EAAQkmF,UAAU5oH,GAAQzC,EAAMgtH,iBAClC,EAIA16H,EAAK8B,KAAKusE,KAAO,SAAU3gE,GACrBA,EAAM1N,KAAK65H,WACbnsH,EAAMgtH,mBACNhtH,EAAMgtH,oBAAsB7nF,EAAQkmF,UAAU5oH,KAE9C0iC,EAAQkmF,UAAU5oH,GAAQzC,EAAMgtH,mBAMlC5B,EAAmBd,EACrB,EAEA,IAAIoC,EAAcvnF,EAAQj0C,OAASi0C,EAAQj0C,MAAMuR,GAUjD,OARIiqH,IACF/pH,EAAOqG,EAAMvG,GAAO,CAClB6nH,MAAOA,EACPoC,YAAaA,IAEfC,EAAgB/4H,EAAWtB,EAAMg4H,EAAOoC,IAGnCp3H,EAAE1B,EAAWtB,EAAMkmB,EAC5B,GAGF,SAASm0G,EAAiB/4H,EAAWtB,EAAMg4H,EAAOoC,GAEhD,IAAIO,EAAc36H,EAAKpB,MAAQg8H,EAAa5C,EAAOoC,GACnD,GAAIO,EAAa,CAEfA,EAAc36H,EAAKpB,MAAQyR,EAAO,CAAC,EAAGsqH,GAEtC,IAAI38H,EAAQgC,EAAKhC,MAAQgC,EAAKhC,OAAS,CAAC,EACxC,IAAK,IAAIyI,KAAOk0H,EACTr5H,EAAU1C,OAAW6H,KAAOnF,EAAU1C,QACzCZ,EAAMyI,GAAOk0H,EAAYl0H,UAClBk0H,EAAYl0H,GAGzB,CACF,CAEA,SAASm0H,EAAc5C,EAAOprH,GAC5B,cAAeA,GACb,IAAK,YACH,OACF,IAAK,SACH,OAAOA,EACT,IAAK,WACH,OAAOA,EAAOorH,GAChB,IAAK,UACH,OAAOprH,EAASorH,EAAMn4F,YAAS/xB,EACjC,QACM,EAQV,CAIA,SAAS+sH,EACP37G,EACAyD,EACA2mB,GAEA,IAAIwxF,EAAY57G,EAASoC,OAAO,GAChC,GAAkB,MAAdw5G,EACF,OAAO57G,EAGT,GAAkB,MAAd47G,GAAmC,MAAdA,EACvB,OAAOn4G,EAAOzD,EAGhB,IAAI6xB,EAAQpuB,EAAK9G,MAAM,KAKlBytB,GAAWyH,EAAMA,EAAM1rC,OAAS,IACnC0rC,EAAM/uB,MAKR,IADA,IAAIoI,EAAWlL,EAAStC,QAAQ,MAAO,IAAIf,MAAM,KACxCnY,EAAI,EAAGA,EAAI0mB,EAAS/kB,OAAQ3B,IAAK,CACxC,IAAI2mB,EAAUD,EAAS1mB,GACP,OAAZ2mB,EACF0mB,EAAM/uB,MACe,MAAZqI,GACT0mB,EAAM1mC,KAAKggB,EAEf,CAOA,MAJiB,KAAb0mB,EAAM,IACRA,EAAMnwB,QAAQ,IAGTmwB,EAAMlwB,KAAK,IACpB,CAEA,SAAS2tB,EAAW9xB,GAClB,IAAIf,EAAO,GACP2B,EAAQ,GAERy9G,EAAYr+G,EAAKlN,QAAQ,KACzBurH,GAAa,IACfp/G,EAAOe,EAAKhS,MAAMqwH,GAClBr+G,EAAOA,EAAKhS,MAAM,EAAGqwH,IAGvB,IAAIC,EAAat+G,EAAKlN,QAAQ,KAM9B,OALIwrH,GAAc,IAChB19G,EAAQZ,EAAKhS,MAAMswH,EAAa,GAChCt+G,EAAOA,EAAKhS,MAAM,EAAGswH,IAGhB,CACLt+G,KAAMA,EACNY,MAAOA,EACP3B,KAAMA,EAEV,CAEA,SAASs/G,EAAWv+G,GAClB,OAAOA,EAAKE,QAAQ,gBAAiB,IACvC,CAEA,IAAIs+G,EAAUj8H,MAAMsS,SAAW,SAAUoJ,GACvC,MAA8C,kBAAvC3b,OAAO4G,UAAUsB,SAAS3E,KAAKoY,EACxC,EAKIwgH,EAAiBC,EACjBC,EAAUvrH,EACVwrH,EAAYpqH,EACZqqH,EAAqBC,EACrBC,EAAmBC,EAOnBC,EAAc,IAAI/mH,OAAO,CAG3B,UAOA,0GACAiM,KAAK,KAAM,KASb,SAAS/Q,EAAO0C,EAAK/R,GACnB,IAKIgL,EALAkwE,EAAS,GACTl1E,EAAM,EACN0T,EAAQ,EACRuC,EAAO,GACPk/G,EAAmBn7H,GAAWA,EAAQyiB,WAAa,IAGvD,MAAwC,OAAhCzX,EAAMkwH,EAAYn8G,KAAKhN,IAAe,CAC5C,IAAIjL,EAAIkE,EAAI,GACRu4C,EAAUv4C,EAAI,GACdouD,EAASpuD,EAAI0O,MAKjB,GAJAuC,GAAQlK,EAAI9H,MAAMyP,EAAO0/C,GACzB1/C,EAAQ0/C,EAAStyD,EAAElC,OAGf2+C,EACFtnC,GAAQsnC,EAAQ,OADlB,CAKA,IAAIv4B,EAAOjZ,EAAI2H,GACXuiE,EAASjxE,EAAI,GACb0E,EAAO1E,EAAI,GACXgpD,EAAUhpD,EAAI,GACdyrB,EAAQzrB,EAAI,GACZ6zF,EAAW7zF,EAAI,GACfowH,EAAWpwH,EAAI,GAGfiR,IACFi/D,EAAOtxE,KAAKqS,GACZA,EAAO,IAGT,IAAI6P,EAAoB,MAAVmwD,GAA0B,MAARjxD,GAAgBA,IAASixD,EACrDo/C,EAAsB,MAAbx8B,GAAiC,MAAbA,EAC7By8B,EAAwB,MAAbz8B,GAAiC,MAAbA,EAC/Bp8E,EAAYzX,EAAI,IAAMmwH,EACtB1jG,EAAUu8B,GAAWv9B,EAEzBykD,EAAOtxE,KAAK,CACV8F,KAAMA,GAAQ1J,IACdi2E,OAAQA,GAAU,GAClBx5D,UAAWA,EACX64G,SAAUA,EACVD,OAAQA,EACRvvG,QAASA,EACTsvG,WAAYA,EACZ3jG,QAASA,EAAU8jG,EAAY9jG,GAAY2jG,EAAW,KAAO,KAAOI,EAAa/4G,GAAa,OA9BhG,CAgCF,CAYA,OATI/I,EAAQ3H,EAAInN,SACdqX,GAAQlK,EAAImN,OAAOxF,IAIjBuC,GACFi/D,EAAOtxE,KAAKqS,GAGPi/D,CACT,CASA,SAASzqE,EAASsB,EAAK/R,GACrB,OAAO+6H,EAAiB1rH,EAAM0C,EAAK/R,GAAUA,EAC/C,CAQA,SAASy7H,EAA0B1pH,GACjC,OAAO2pH,UAAU3pH,GAAKoK,QAAQ,WAAW,SAAU/Y,GACjD,MAAO,IAAMA,EAAE2c,WAAW,GAAGtZ,SAAS,IAAI8nE,aAC5C,GACF,CAQA,SAASotD,EAAgB5pH,GACvB,OAAO2pH,UAAU3pH,GAAKoK,QAAQ,SAAS,SAAU/Y,GAC/C,MAAO,IAAMA,EAAE2c,WAAW,GAAGtZ,SAAS,IAAI8nE,aAC5C,GACF,CAKA,SAASwsD,EAAkB7/C,EAAQl7E,GAKjC,IAHA,IAAIoI,EAAU,IAAI5J,MAAM08E,EAAOt2E,QAGtB3B,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IACR,kBAAdi4E,EAAOj4E,KAChBmF,EAAQnF,GAAK,IAAIkR,OAAO,OAAS+mE,EAAOj4E,GAAGw0B,QAAU,KAAMmkG,EAAM57H,KAIrE,OAAO,SAAUse,EAAKpM,GAMpB,IALA,IAAI+J,EAAO,GACP1c,EAAO+e,GAAO,CAAC,EACfte,EAAUkS,GAAQ,CAAC,EACnBqO,EAASvgB,EAAQ67H,OAASJ,EAA2B/6G,mBAEhDzd,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAAK,CACtC,IAAIiuC,EAAQgqC,EAAOj4E,GAEnB,GAAqB,kBAAViuC,EAAX,CAMA,IACItnB,EADAxrB,EAAQmB,EAAK2xC,EAAMxhC,MAGvB,GAAa,MAATtR,EAAe,CACjB,GAAI8yC,EAAMoqF,SAAU,CAEdpqF,EAAMplB,UACR7P,GAAQi1B,EAAM+qC,QAGhB,QACF,CACE,MAAM,IAAIl1E,UAAU,aAAemqC,EAAMxhC,KAAO,kBAEpD,CAEA,GAAI+qH,EAAQr8H,GAAZ,CACE,IAAK8yC,EAAMmqF,OACT,MAAM,IAAIt0H,UAAU,aAAemqC,EAAMxhC,KAAO,kCAAoCH,KAAKC,UAAUpR,GAAS,KAG9G,GAAqB,IAAjBA,EAAMwG,OAAc,CACtB,GAAIssC,EAAMoqF,SACR,SAEA,MAAM,IAAIv0H,UAAU,aAAemqC,EAAMxhC,KAAO,oBAEpD,CAEA,IAAK,IAAImQ,EAAI,EAAGA,EAAIzhB,EAAMwG,OAAQib,IAAK,CAGrC,GAFA+J,EAAUrJ,EAAOniB,EAAMyhB,KAElBzX,EAAQnF,GAAG+O,KAAK4X,GACnB,MAAM,IAAI7iB,UAAU,iBAAmBmqC,EAAMxhC,KAAO,eAAiBwhC,EAAMzZ,QAAU,oBAAsBloB,KAAKC,UAAUoa,GAAW,KAGvI3N,IAAe,IAAN4D,EAAUqxB,EAAM+qC,OAAS/qC,EAAMzuB,WAAamH,CACvD,CAGF,KAxBA,CA4BA,GAFAA,EAAUsnB,EAAMkqF,SAAWO,EAAev9H,GAASmiB,EAAOniB,IAErDgK,EAAQnF,GAAG+O,KAAK4X,GACnB,MAAM,IAAI7iB,UAAU,aAAemqC,EAAMxhC,KAAO,eAAiBwhC,EAAMzZ,QAAU,oBAAsB7N,EAAU,KAGnH3N,GAAQi1B,EAAM+qC,OAASryD,CARvB,CA1CA,MAHE3N,GAAQi1B,CAsDZ,CAEA,OAAOj1B,CACT,CACF,CAQA,SAASu/G,EAAczpH,GACrB,OAAOA,EAAIoK,QAAQ,6BAA8B,OACnD,CAQA,SAASo/G,EAAa9kG,GACpB,OAAOA,EAAMta,QAAQ,gBAAiB,OACxC,CASA,SAAS2/G,EAAYtuF,EAAI3+B,GAEvB,OADA2+B,EAAG3+B,KAAOA,EACH2+B,CACT,CAQA,SAASouF,EAAO57H,GACd,OAAOA,GAAWA,EAAQ+7H,UAAY,GAAK,GAC7C,CASA,SAASC,EAAgB//G,EAAMpN,GAE7B,IAAIotH,EAAShgH,EAAKuC,OAAOW,MAAM,aAE/B,GAAI88G,EACF,IAAK,IAAIh5H,EAAI,EAAGA,EAAIg5H,EAAOr3H,OAAQ3B,IACjC4L,EAAKjF,KAAK,CACR8F,KAAMzM,EACNg5E,OAAQ,KACRx5D,UAAW,KACX64G,UAAU,EACVD,QAAQ,EACRvvG,SAAS,EACTsvG,UAAU,EACV3jG,QAAS,OAKf,OAAOqkG,EAAW7/G,EAAMpN,EAC1B,CAUA,SAASqtH,EAAejgH,EAAMpN,EAAM7O,GAGlC,IAFA,IAAImb,EAAQ,GAEHlY,EAAI,EAAGA,EAAIgZ,EAAKrX,OAAQ3B,IAC/BkY,EAAMvR,KAAK+wH,EAAa1+G,EAAKhZ,GAAI4L,EAAM7O,GAASwe,QAGlD,IAAIqH,EAAS,IAAI1R,OAAO,MAAQgH,EAAMiF,KAAK,KAAO,IAAKw7G,EAAM57H,IAE7D,OAAO87H,EAAWj2G,EAAQhX,EAC5B,CAUA,SAASstH,EAAgBlgH,EAAMpN,EAAM7O,GACnC,OAAOi7H,EAAe5rH,EAAM4M,EAAMjc,GAAU6O,EAAM7O,EACpD,CAUA,SAASi7H,EAAgB//C,EAAQrsE,EAAM7O,GAChCy6H,EAAQ5rH,KACX7O,EAAkC6O,GAAQ7O,EAC1C6O,EAAO,IAGT7O,EAAUA,GAAW,CAAC,EAOtB,IALA,IAAIo8H,EAASp8H,EAAQo8H,OACjB/2F,GAAsB,IAAhBrlC,EAAQqlC,IACdkyF,EAAQ,GAGHt0H,EAAI,EAAGA,EAAIi4E,EAAOt2E,OAAQ3B,IAAK,CACtC,IAAIiuC,EAAQgqC,EAAOj4E,GAEnB,GAAqB,kBAAViuC,EACTqmF,GAASiE,EAAatqF,OACjB,CACL,IAAI+qC,EAASu/C,EAAatqF,EAAM+qC,QAC5BjoB,EAAU,MAAQ9iB,EAAMzZ,QAAU,IAEtC5oB,EAAKjF,KAAKsnC,GAENA,EAAMmqF,SACRrnE,GAAW,MAAQioB,EAASjoB,EAAU,MAOpCA,EAJA9iB,EAAMoqF,SACHpqF,EAAMplB,QAGCmwD,EAAS,IAAMjoB,EAAU,KAFzB,MAAQioB,EAAS,IAAMjoB,EAAU,MAKnCioB,EAAS,IAAMjoB,EAAU,IAGrCujE,GAASvjE,CACX,CACF,CAEA,IAAIvxC,EAAY+4G,EAAax7H,EAAQyiB,WAAa,KAC9C45G,EAAoB9E,EAAMttH,OAAOwY,EAAU7d,UAAY6d,EAkB3D,OAZK25G,IACH7E,GAAS8E,EAAoB9E,EAAMttH,MAAM,GAAIwY,EAAU7d,QAAU2yH,GAAS,MAAQ90G,EAAY,WAI9F80G,GADElyF,EACO,IAIA+2F,GAAUC,EAAoB,GAAK,MAAQ55G,EAAY,MAG3Dq5G,EAAW,IAAI3nH,OAAO,IAAMojH,EAAOqE,EAAM57H,IAAW6O,EAC7D,CAcA,SAAS8rH,EAAc1+G,EAAMpN,EAAM7O,GAQjC,OAPKy6H,EAAQ5rH,KACX7O,EAAkC6O,GAAQ7O,EAC1C6O,EAAO,IAGT7O,EAAUA,GAAW,CAAC,EAElBic,aAAgB9H,OACX6nH,EAAe//G,EAA4B,GAGhDw+G,EAAQx+G,GACHigH,EAAoC,EAA8B,EAAQl8H,GAG5Em8H,EAAqC,EAA8B,EAAQn8H,EACpF,CACA06H,EAAerrH,MAAQurH,EACvBF,EAAejqH,QAAUoqH,EACzBH,EAAeK,iBAAmBD,EAClCJ,EAAeO,eAAiBD,EAKhC,IAAIsB,EAAqB/9H,OAAOyI,OAAO,MAEvC,SAASu1H,EACPtgH,EACAmjB,EACAo9F,GAEAp9F,EAASA,GAAU,CAAC,EACpB,IACE,IAAIq9F,EACFH,EAAmBrgH,KAClBqgH,EAAmBrgH,GAAQy+G,EAAejqH,QAAQwL,IAMrD,MAFgC,kBAArBmjB,EAAOs9F,YAA0Bt9F,EAAO,GAAKA,EAAOs9F,WAExDD,EAAOr9F,EAAQ,CAAEy8F,QAAQ,GAClC,CAAE,MAAOx7H,GAKP,MAAO,EACT,CAAE,eAEO++B,EAAO,EAChB,CACF,CAIA,SAASu9F,EACPC,EACAn4E,EACA5b,EACAyuF,GAEA,IAAItsG,EAAsB,kBAAR4xG,EAAmB,CAAE3gH,KAAM2gH,GAAQA,EAErD,GAAI5xG,EAAK6xG,YACP,OAAO7xG,EACF,GAAIA,EAAKtb,KAAM,CACpBsb,EAAOpb,EAAO,CAAC,EAAGgtH,GAClB,IAAIx9F,EAASpU,EAAKoU,OAIlB,OAHIA,GAA4B,kBAAXA,IACnBpU,EAAKoU,OAASxvB,EAAO,CAAC,EAAGwvB,IAEpBpU,CACT,CAGA,IAAKA,EAAK/O,MAAQ+O,EAAKoU,QAAUqlB,EAAS,CACxCz5B,EAAOpb,EAAO,CAAC,EAAGob,GAClBA,EAAK6xG,aAAc,EACnB,IAAIC,EAAWltH,EAAOA,EAAO,CAAC,EAAG60C,EAAQrlB,QAASpU,EAAKoU,QACvD,GAAIqlB,EAAQ/0C,KACVsb,EAAKtb,KAAO+0C,EAAQ/0C,KACpBsb,EAAKoU,OAAS09F,OACT,GAAIr4E,EAAQrS,QAAQxtC,OAAQ,CACjC,IAAIm4H,EAAUt4E,EAAQrS,QAAQqS,EAAQrS,QAAQxtC,OAAS,GAAGqX,KAC1D+O,EAAK/O,KAAOsgH,EAAWQ,EAASD,EAAW,QAAWr4E,EAAY,KACpE,MAAW,EAGX,OAAOz5B,CACT,CAEA,IAAIgyG,EAAajvF,EAAU/iB,EAAK/O,MAAQ,IACpCwxD,EAAYhpB,GAAWA,EAAQxoC,MAAS,IACxCA,EAAO+gH,EAAW/gH,KAClBm+G,EAAY4C,EAAW/gH,KAAMwxD,EAAU5kC,GAAU7d,EAAK6d,QACtD4kC,EAEA5wD,EAAQ65G,EACVsG,EAAWngH,MACXmO,EAAKnO,MACLy6G,GAAUA,EAAOt3H,QAAQ82H,YAGvB57G,EAAO8P,EAAK9P,MAAQ8hH,EAAW9hH,KAKnC,OAJIA,GAA2B,MAAnBA,EAAK2F,OAAO,KACtB3F,EAAO,IAAMA,GAGR,CACL2hH,aAAa,EACb5gH,KAAMA,EACNY,MAAOA,EACP3B,KAAMA,EAEV,CAKA,IA4NI+hH,GA5NAC,GAAU,CAAC7+H,OAAQE,QACnB4+H,GAAa,CAAC9+H,OAAQG,OAEtB4+H,GAAO,WAAa,EAMpBC,GAAO,CACT3tH,KAAM,aACNvR,MAAO,CACLsoB,GAAI,CACF9nB,KAAMu+H,GACNxwG,UAAU,GAEZ0hC,IAAK,CACHzvD,KAAMN,OACNO,QAAS,KAEX2yB,OAAQ9yB,QACR6+H,MAAO7+H,QACP8+H,UAAW9+H,QACXoqC,OAAQpqC,QACR0d,QAAS1d,QACT++H,YAAan/H,OACbo/H,iBAAkBp/H,OAClBq/H,iBAAkB,CAChB/+H,KAAMN,OACNO,QAAS,QAEX2jC,MAAO,CACL5jC,KAAMw+H,GACNv+H,QAAS,UAGb5B,OAAQ,SAAiBuF,GACvB,IAAIo7H,EAAWzgI,KAEXo6H,EAASp6H,KAAK0gI,QACdn5E,EAAUvnD,KAAK67H,OACfpgH,EAAM2+G,EAAO9qH,QACftP,KAAKupB,GACLg+B,EACAvnD,KAAK2rC,QAEHiuB,EAAWn+C,EAAIm+C,SACfygE,EAAQ5+G,EAAI4+G,MACZx6G,EAAOpE,EAAIoE,KAEXouB,EAAU,CAAC,EACX0yF,EAAoBvG,EAAOt3H,QAAQ89H,gBACnCC,EAAyBzG,EAAOt3H,QAAQg+H,qBAExCC,EACmB,MAArBJ,EAA4B,qBAAuBA,EACjDK,EACwB,MAA1BH,EACI,2BACAA,EACFP,EACkB,MAApBtgI,KAAKsgI,YAAsBS,EAAsB/gI,KAAKsgI,YACpDC,EACuB,MAAzBvgI,KAAKugI,iBACDS,EACAhhI,KAAKugI,iBAEPU,EAAgB5G,EAAMF,eACtBF,EAAY,KAAMwF,EAAkBpF,EAAMF,gBAAiB,KAAMC,GACjEC,EAEJpsF,EAAQsyF,GAAoB9F,EAAYlzE,EAAS05E,EAAejhI,KAAKqgI,WACrEpyF,EAAQqyF,GAAetgI,KAAKogI,OAASpgI,KAAKqgI,UACtCpyF,EAAQsyF,GACRtF,EAAgB1zE,EAAS05E,GAE7B,IAAIT,EAAmBvyF,EAAQsyF,GAAoBvgI,KAAKwgI,iBAAmB,KAEvEz+H,EAAU,SAAUoB,GAClB+9H,GAAW/9H,KACTs9H,EAASxhH,QACXm7G,EAAOn7G,QAAQ26C,EAAUsmE,IAEzB9F,EAAO1tH,KAAKktD,EAAUsmE,IAG5B,EAEI3/H,EAAK,CAAEmP,MAAOwxH,IACd5/H,MAAMsS,QAAQ5T,KAAKqlC,OACrBrlC,KAAKqlC,MAAMn7B,SAAQ,SAAU/G,GAC3B5C,EAAG4C,GAAKpB,CACV,IAEAxB,EAAGP,KAAKqlC,OAAStjC,EAGnB,IAAIM,EAAO,CAAE8+H,MAAOlzF,GAEhBmzF,GACDphI,KAAKqhI,aAAaC,YACnBthI,KAAKqhI,aAAa3/H,SAClB1B,KAAKqhI,aAAa3/H,QAAQ,CACxBme,KAAMA,EACNw6G,MAAOA,EACPkH,SAAUx/H,EACVy/H,SAAUvzF,EAAQqyF,GAClBmB,cAAexzF,EAAQsyF,KAG3B,GAAIa,EAAY,CAKd,GAA0B,IAAtBA,EAAW15H,OACb,OAAO05H,EAAW,GACb,GAAIA,EAAW15H,OAAS,IAAM05H,EAAW15H,OAO9C,OAA6B,IAAtB05H,EAAW15H,OAAerC,IAAMA,EAAE,OAAQ,CAAC,EAAG+7H,EAEzD,CAmBA,GAAiB,MAAbphI,KAAKkxD,IACP7uD,EAAK9B,GAAKA,EACV8B,EAAKhC,MAAQ,CAAEwf,KAAMA,EAAM,eAAgB2gH,OACtC,CAEL,IAAIn6H,EAAIq7H,GAAW1hI,KAAK2hI,OAAOjgI,SAC/B,GAAI2E,EAAG,CAELA,EAAEu7H,UAAW,EACb,IAAIC,EAASx7H,EAAEhE,KAAOqQ,EAAO,CAAC,EAAGrM,EAAEhE,MAGnC,IAAK,IAAIgjC,KAFTw8F,EAAMthI,GAAKshI,EAAMthI,IAAM,CAAC,EAENshI,EAAMthI,GAAI,CAC1B,IAAIuhI,EAAYD,EAAMthI,GAAG8kC,GACrBA,KAAS9kC,IACXshI,EAAMthI,GAAG8kC,GAAS/jC,MAAMsS,QAAQkuH,GAAaA,EAAY,CAACA,GAE9D,CAEA,IAAK,IAAIC,KAAWxhI,EACdwhI,KAAWF,EAAMthI,GAEnBshI,EAAMthI,GAAGwhI,GAASr1H,KAAKnM,EAAGwhI,IAE1BF,EAAMthI,GAAGwhI,GAAWhgI,EAIxB,IAAIigI,EAAU37H,EAAEhE,KAAKhC,MAAQqS,EAAO,CAAC,EAAGrM,EAAEhE,KAAKhC,OAC/C2hI,EAAOniH,KAAOA,EACdmiH,EAAO,gBAAkBxB,CAC3B,MAEEn+H,EAAK9B,GAAKA,CAEd,CAEA,OAAO8E,EAAErF,KAAKkxD,IAAK7uD,EAAMrC,KAAK2hI,OAAOjgI,QACvC,GAGF,SAASw/H,GAAY/9H,GAEnB,KAAIA,EAAEo2D,SAAWp2D,EAAEwgD,QAAUxgD,EAAEqmC,SAAWrmC,EAAEsmC,YAExCtmC,EAAE62D,wBAEW7pD,IAAbhN,EAAEo1C,QAAqC,IAAbp1C,EAAEo1C,QAAhC,CAEA,GAAIp1C,EAAEsH,eAAiBtH,EAAEsH,cAAcjE,aAAc,CACnD,IAAI4B,EAASjF,EAAEsH,cAAcjE,aAAa,UAC1C,GAAI,cAAcsO,KAAK1M,GAAW,MACpC,CAKA,OAHIjF,EAAEqiC,gBACJriC,EAAEqiC,kBAEG,CAVgD,CAWzD,CAEA,SAASk8F,GAAYn5G,GACnB,GAAIA,EAEF,IADA,IAAIkb,EACK19B,EAAI,EAAGA,EAAIwiB,EAAS7gB,OAAQ3B,IAAK,CAExC,GADA09B,EAAQlb,EAASxiB,GACC,MAAd09B,EAAMytB,IACR,OAAOztB,EAET,GAAIA,EAAMlb,WAAakb,EAAQi+F,GAAWj+F,EAAMlb,WAC9C,OAAOkb,CAEX,CAEJ,CAIA,SAAS50B,GAASC,GAChB,IAAID,GAAQozH,WAAalC,KAASjxH,EAAlC,CACAD,GAAQozH,WAAY,EAEpBlC,GAAOjxH,EAEP,IAAIozH,EAAQ,SAAU14H,GAAK,YAAa2G,IAAN3G,CAAiB,EAE/C24H,EAAmB,SAAUtF,EAAIuF,GACnC,IAAIr8H,EAAI82H,EAAG53H,SAASo9H,aAChBH,EAAMn8H,IAAMm8H,EAAMn8H,EAAIA,EAAE1D,OAAS6/H,EAAMn8H,EAAIA,EAAE62H,wBAC/C72H,EAAE82H,EAAIuF,EAEV,EAEAtzH,EAAIgE,MAAM,CACRvN,aAAc,WACR28H,EAAMliI,KAAKiF,SAASm1H,SACtBp6H,KAAKg8H,YAAch8H,KACnBA,KAAKsiI,QAAUtiI,KAAKiF,SAASm1H,OAC7Bp6H,KAAKsiI,QAAQ5xD,KAAK1wE,MAClB8O,EAAIoC,KAAKqxH,eAAeviI,KAAM,SAAUA,KAAKsiI,QAAQ/gG,QAAQgmB,UAE7DvnD,KAAKg8H,YAAeh8H,KAAKq8H,SAAWr8H,KAAKq8H,QAAQL,aAAgBh8H,KAEnEmiI,EAAiBniI,KAAMA,KACzB,EACAwiI,UAAW,WACTL,EAAiBniI,KACnB,IAGFqB,OAAOwH,eAAeiG,EAAI7G,UAAW,UAAW,CAC9CjF,IAAK,WAAkB,OAAOhD,KAAKg8H,YAAYsG,OAAQ,IAGzDjhI,OAAOwH,eAAeiG,EAAI7G,UAAW,SAAU,CAC7CjF,IAAK,WAAkB,OAAOhD,KAAKg8H,YAAYyG,MAAO,IAGxD3zH,EAAInL,UAAU,aAAc+3H,GAC5B5sH,EAAInL,UAAU,aAAcw8H,IAE5B,IAAIuC,EAAS5zH,EAAIG,OAAO0zH,sBAExBD,EAAOE,iBAAmBF,EAAOG,iBAAmBH,EAAOI,kBAAoBJ,EAAOK,OA5CtC,CA6ClD,CAIA,IAAIC,GAA8B,qBAAXh8H,OAIvB,SAASi8H,GACPC,EACAC,EACAC,EACAC,EACAC,GAGA,IAAIC,EAAWJ,GAAe,GAE1BK,EAAUJ,GAAc/hI,OAAOyI,OAAO,MAEtC25H,EAAUJ,GAAchiI,OAAOyI,OAAO,MAE1Co5H,EAAOh5H,SAAQ,SAAUmwH,GACvBqJ,GAAeH,EAAUC,EAASC,EAASpJ,EAAOiJ,EACpD,IAGA,IAAK,IAAIv9H,EAAI,EAAG8B,EAAI07H,EAAS77H,OAAQ3B,EAAI8B,EAAG9B,IACtB,MAAhBw9H,EAASx9H,KACXw9H,EAAS72H,KAAK62H,EAAS7+G,OAAO3e,EAAG,GAAG,IACpC8B,IACA9B,KAgBJ,MAAO,CACLw9H,SAAUA,EACVC,QAASA,EACTC,QAASA,EAEb,CAEA,SAASC,GACPH,EACAC,EACAC,EACApJ,EACA31H,EACAi/H,GAEA,IAAI5kH,EAAOs7G,EAAMt7G,KACbvM,EAAO6nH,EAAM7nH,KAmBjB,IAAIoxH,EACFvJ,EAAMuJ,qBAAuB,CAAC,EAC5BC,EAAiBxb,GAActpG,EAAMra,EAAQk/H,EAAoB1E,QAElC,mBAAxB7E,EAAMz4B,gBACfgiC,EAAoB/E,UAAYxE,EAAMz4B,eAGxC,IAAIs4B,EAAS,CACXn7G,KAAM8kH,EACN1sH,MAAO2sH,GAAkBD,EAAgBD,GACzCjH,WAAYtC,EAAMsC,YAAc,CAAEj7H,QAAS24H,EAAM12H,WACjDogI,MAAO1J,EAAM0J,MACc,kBAAhB1J,EAAM0J,MACX,CAAC1J,EAAM0J,OACP1J,EAAM0J,MACR,GACJ3I,UAAW,CAAC,EACZG,WAAY,CAAC,EACb/oH,KAAMA,EACN9N,OAAQA,EACRi/H,QAASA,EACTK,SAAU3J,EAAM2J,SAChBC,YAAa5J,EAAM4J,YACnBluH,KAAMskH,EAAMtkH,MAAQ,CAAC,EACrB9U,MACiB,MAAfo5H,EAAMp5H,MACF,CAAC,EACDo5H,EAAMsC,WACJtC,EAAMp5H,MACN,CAAES,QAAS24H,EAAMp5H,QAoC3B,GAjCIo5H,EAAM9xG,UAoBR8xG,EAAM9xG,SAASre,SAAQ,SAAUu5B,GAC/B,IAAIygG,EAAeP,EACfrG,EAAWqG,EAAU,IAAOlgG,EAAU,WACtCtzB,EACJuzH,GAAeH,EAAUC,EAASC,EAAShgG,EAAOy2F,EAAQgK,EAC5D,IAGGV,EAAQtJ,EAAOn7G,QAClBwkH,EAAS72H,KAAKwtH,EAAOn7G,MACrBykH,EAAQtJ,EAAOn7G,MAAQm7G,QAGL/pH,IAAhBkqH,EAAM0J,MAER,IADA,IAAII,EAAU7iI,MAAMsS,QAAQymH,EAAM0J,OAAS1J,EAAM0J,MAAQ,CAAC1J,EAAM0J,OACvDh+H,EAAI,EAAGA,EAAIo+H,EAAQz8H,SAAU3B,EAAG,CACvC,IAAIg+H,EAAQI,EAAQp+H,GAChB,EASJ,IAAIq+H,EAAa,CACfrlH,KAAMglH,EACNx7G,SAAU8xG,EAAM9xG,UAElBm7G,GACEH,EACAC,EACAC,EACAW,EACA1/H,EACAw1H,EAAOn7G,MAAQ,IAEnB,CAGEvM,IACGixH,EAAQjxH,KACXixH,EAAQjxH,GAAQ0nH,GAStB,CAEA,SAAS4J,GACP/kH,EACA6kH,GAEA,IAAIzsH,EAAQqmH,EAAez+G,EAAM,GAAI6kH,GAWrC,OAAOzsH,CACT,CAEA,SAASkxG,GACPtpG,EACAra,EACAw6H,GAGA,OADKA,IAAUngH,EAAOA,EAAKE,QAAQ,MAAO,KAC1B,MAAZF,EAAK,IACK,MAAVra,EAD0Bqa,EAEvBu+G,EAAY54H,EAAW,KAAI,IAAMqa,EAC1C,CAMA,SAASslH,GACPnB,EACA9I,GAEA,IAAI3+G,EAAMwnH,GAAeC,GACrBK,EAAW9nH,EAAI8nH,SACfC,EAAU/nH,EAAI+nH,QACdC,EAAUhoH,EAAIgoH,QAElB,SAASa,EAAWpB,GAClBD,GAAeC,EAAQK,EAAUC,EAASC,EAC5C,CAEA,SAASc,EAAUC,EAAenK,GAChC,IAAI31H,EAAmC,kBAAlB8/H,EAA8Bf,EAAQe,QAAiBr0H,EAE5E8yH,GAAe,CAAC5I,GAASmK,GAAgBjB,EAAUC,EAASC,EAAS/+H,GAGjEA,GAAUA,EAAOq/H,MAAMr8H,QACzBu7H,GAEEv+H,EAAOq/H,MAAMl4H,KAAI,SAAUk4H,GAAS,MAAO,CAAGhlH,KAAMglH,EAAOx7G,SAAU,CAAC8xG,GAAW,IACjFkJ,EACAC,EACAC,EACA/+H,EAGN,CAEA,SAAS+/H,IACP,OAAOlB,EAAS13H,KAAI,SAAUkT,GAAQ,OAAOykH,EAAQzkH,EAAO,GAC9D,CAEA,SAASkD,EACPy9G,EACAgF,EACAvK,GAEA,IAAIvgE,EAAW6lE,EAAkBC,EAAKgF,GAAc,EAAOtK,GACvD5nH,EAAOonD,EAASpnD,KAEpB,GAAIA,EAAM,CACR,IAAI0nH,EAASuJ,EAAQjxH,GAIrB,IAAK0nH,EAAU,OAAOyK,EAAa,KAAM/qE,GACzC,IAAIgrE,EAAa1K,EAAO/iH,MAAMxF,KAC3B0xB,QAAO,SAAUv6B,GAAO,OAAQA,EAAIs1H,QAAU,IAC9CvyH,KAAI,SAAU/C,GAAO,OAAOA,EAAI0J,IAAM,IAMzC,GAJ+B,kBAApBonD,EAAS13B,SAClB03B,EAAS13B,OAAS,CAAC,GAGjBwiG,GAA+C,kBAAxBA,EAAaxiG,OACtC,IAAK,IAAIp5B,KAAO47H,EAAaxiG,SACrBp5B,KAAO8wD,EAAS13B,SAAW0iG,EAAW/yH,QAAQ/I,IAAQ,IAC1D8wD,EAAS13B,OAAOp5B,GAAO47H,EAAaxiG,OAAOp5B,IAMjD,OADA8wD,EAAS76C,KAAOsgH,EAAWnF,EAAOn7G,KAAM66C,EAAS13B,OAAS,gBAAmB1vB,EAAO,KAC7EmyH,EAAazK,EAAQtgE,EAAUugE,EACxC,CAAO,GAAIvgE,EAAS76C,KAAM,CACxB66C,EAAS13B,OAAS,CAAC,EACnB,IAAK,IAAIn8B,EAAI,EAAGA,EAAIw9H,EAAS77H,OAAQ3B,IAAK,CACxC,IAAIgZ,EAAOwkH,EAASx9H,GAChB8+H,EAAWrB,EAAQzkH,GACvB,GAAI+lH,GAAWD,EAAS1tH,MAAOyiD,EAAS76C,KAAM66C,EAAS13B,QACrD,OAAOyiG,EAAaE,EAAUjrE,EAAUugE,EAE5C,CACF,CAEA,OAAOwK,EAAa,KAAM/qE,EAC5B,CAEA,SAASoqE,EACP9J,EACAtgE,GAEA,IAAImrE,EAAmB7K,EAAO8J,SAC1BA,EAAuC,oBAArBe,EAClBA,EAAiB9K,EAAYC,EAAQtgE,EAAU,KAAMwgE,IACrD2K,EAMJ,GAJwB,kBAAbf,IACTA,EAAW,CAAEjlH,KAAMilH,KAGhBA,GAAgC,kBAAbA,EAMtB,OAAOW,EAAa,KAAM/qE,GAG5B,IAAItpB,EAAK0zF,EACLxxH,EAAO89B,EAAG99B,KACVuM,EAAOuxB,EAAGvxB,KACVY,EAAQi6C,EAASj6C,MACjB3B,EAAO47C,EAAS57C,KAChBkkB,EAAS03B,EAAS13B,OAKtB,GAJAviB,EAAQ2wB,EAAGpjC,eAAe,SAAWojC,EAAG3wB,MAAQA,EAChD3B,EAAOsyB,EAAGpjC,eAAe,QAAUojC,EAAGtyB,KAAOA,EAC7CkkB,EAASoO,EAAGpjC,eAAe,UAAYojC,EAAGpO,OAASA,EAE/C1vB,EAAM,CAEWixH,EAAQjxH,GAI3B,OAAOyP,EAAM,CACX09G,aAAa,EACbntH,KAAMA,EACNmN,MAAOA,EACP3B,KAAMA,EACNkkB,OAAQA,QACP/xB,EAAWypD,EAChB,CAAO,GAAI76C,EAAM,CAEf,IAAI8gH,EAAUmF,GAAkBjmH,EAAMm7G,GAElC+K,EAAe5F,EAAWQ,EAAS39F,EAAS,6BAAgC29F,EAAU,KAE1F,OAAO59G,EAAM,CACX09G,aAAa,EACb5gH,KAAMkmH,EACNtlH,MAAOA,EACP3B,KAAMA,QACL7N,EAAWypD,EAChB,CAIE,OAAO+qE,EAAa,KAAM/qE,EAE9B,CAEA,SAASmqE,EACP7J,EACAtgE,EACA+pE,GAEA,IAAIuB,EAAc7F,EAAWsE,EAAS/pE,EAAS13B,OAAS,4BAA+ByhG,EAAU,KAC7FwB,EAAeljH,EAAM,CACvB09G,aAAa,EACb5gH,KAAMmmH,IAER,GAAIC,EAAc,CAChB,IAAIjwF,EAAUiwF,EAAajwF,QACvBkwF,EAAgBlwF,EAAQA,EAAQxtC,OAAS,GAE7C,OADAkyD,EAAS13B,OAASijG,EAAajjG,OACxByiG,EAAaS,EAAexrE,EACrC,CACA,OAAO+qE,EAAa,KAAM/qE,EAC5B,CAEA,SAAS+qE,EACPzK,EACAtgE,EACAugE,GAEA,OAAID,GAAUA,EAAO8J,SACZA,EAAS9J,EAAQC,GAAkBvgE,GAExCsgE,GAAUA,EAAOyJ,QACZI,EAAM7J,EAAQtgE,EAAUsgE,EAAOyJ,SAEjC1J,EAAYC,EAAQtgE,EAAUugE,EAAgBC,EACvD,CAEA,MAAO,CACLn4G,MAAOA,EACPsiH,SAAUA,EACVE,UAAWA,EACXH,UAAWA,EAEf,CAEA,SAASQ,GACP3tH,EACA4H,EACAmjB,GAEA,IAAIt4B,EAAImV,EAAKkD,MAAM9K,GAEnB,IAAKvN,EACH,OAAO,EACF,IAAKs4B,EACV,OAAO,EAGT,IAAK,IAAIn8B,EAAI,EAAG8iB,EAAMjf,EAAElC,OAAQ3B,EAAI8iB,IAAO9iB,EAAG,CAC5C,IAAI+C,EAAMqO,EAAMxF,KAAK5L,EAAI,GACrB+C,IAEFo5B,EAAOp5B,EAAI0J,MAAQ,aAA+B,kBAAT5I,EAAE7D,GAAkBohB,EAAOvd,EAAE7D,IAAM6D,EAAE7D,GAElF,CAEA,OAAO,CACT,CAEA,SAASi/H,GAAmBjmH,EAAMm7G,GAChC,OAAOgD,EAAYn+G,EAAMm7G,EAAOx1H,OAASw1H,EAAOx1H,OAAOqa,KAAO,KAAK,EACrE,CAKA,IAAIsmH,GACFrC,IAAah8H,OAAOs+H,aAAet+H,OAAOs+H,YAAY90E,IAClDxpD,OAAOs+H,YACPh8H,KAEN,SAASi8H,KACP,OAAOF,GAAK70E,MAAMogD,QAAQ,EAC5B,CAEA,IAAI40B,GAAOD,KAEX,SAASE,KACP,OAAOD,EACT,CAEA,SAASE,GAAa58H,GACpB,OAAQ08H,GAAO18H,CACjB,CAIA,IAAI68H,GAAgBtkI,OAAOyI,OAAO,MAElC,SAAS87H,KAEH,sBAAuB5+H,OAAOu6B,UAChCv6B,OAAOu6B,QAAQskG,kBAAoB,UAOrC,IAAIC,EAAkB9+H,OAAO4yD,SAAS/6C,SAAW,KAAO7X,OAAO4yD,SAAS96C,KACpEinH,EAAe/+H,OAAO4yD,SAAS/5C,KAAKZ,QAAQ6mH,EAAiB,IAE7DE,EAAYtzH,EAAO,CAAC,EAAG1L,OAAOu6B,QAAQ4S,OAI1C,OAHA6xF,EAAUl9H,IAAM28H,KAChBz+H,OAAOu6B,QAAQ0kG,aAAaD,EAAW,GAAID,GAC3C/+H,OAAOyE,iBAAiB,WAAYy6H,IAC7B,WACLl/H,OAAO0E,oBAAoB,WAAYw6H,GACzC,CACF,CAEA,SAASC,GACP/L,EACA7wG,EACAuiC,EACAs6E,GAEA,GAAKhM,EAAOiM,IAAZ,CAIA,IAAIC,EAAWlM,EAAOt3H,QAAQyjI,eACzBD,GASLlM,EAAOiM,IAAInjI,WAAU,WACnB,IAAI6D,EAAWy/H,KACXtzB,EAAeozB,EAAS1hI,KAC1Bw1H,EACA7wG,EACAuiC,EACAs6E,EAAQr/H,EAAW,MAGhBmsG,IAI4B,oBAAtBA,EAAarlG,KACtBqlG,EACGrlG,MAAK,SAAUqlG,GACduzB,GAAiB,EAAgB1/H,EACnC,IACCoH,OAAM,SAAUC,GACX,CAGN,IAEFq4H,GAAiBvzB,EAAcnsG,GAEnC,GAtCA,CAuCF,CAEA,SAAS2/H,KACP,IAAI59H,EAAM28H,KACN38H,IACF68H,GAAc78H,GAAO,CACnBkgB,EAAGhiB,OAAO8mC,YACV/kC,EAAG/B,OAAOC,aAGhB,CAEA,SAASi/H,GAAgB/iI,GACvBujI,KACIvjI,EAAEgxC,OAAShxC,EAAEgxC,MAAMrrC,KACrB48H,GAAYviI,EAAEgxC,MAAMrrC,IAExB,CAEA,SAAS09H,KACP,IAAI19H,EAAM28H,KACV,GAAI38H,EACF,OAAO68H,GAAc78H,EAEzB,CAEA,SAAS69H,GAAoB92H,EAAIqsD,GAC/B,IAAI0qE,EAAQzgI,SAASI,gBACjBsgI,EAAUD,EAAMh5F,wBAChBk5F,EAASj3H,EAAG+9B,wBAChB,MAAO,CACL5kB,EAAG89G,EAAOj5F,KAAOg5F,EAAQh5F,KAAOquB,EAAOlzC,EACvCjgB,EAAG+9H,EAAO3/H,IAAM0/H,EAAQ1/H,IAAM+0D,EAAOnzD,EAEzC,CAEA,SAASg+H,GAAiB3lH,GACxB,OAAO+K,GAAS/K,EAAI4H,IAAMmD,GAAS/K,EAAIrY,EACzC,CAEA,SAASi+H,GAAmB5lH,GAC1B,MAAO,CACL4H,EAAGmD,GAAS/K,EAAI4H,GAAK5H,EAAI4H,EAAIhiB,OAAO8mC,YACpC/kC,EAAGojB,GAAS/K,EAAIrY,GAAKqY,EAAIrY,EAAI/B,OAAOC,YAExC,CAEA,SAASggI,GAAiB7lH,GACxB,MAAO,CACL4H,EAAGmD,GAAS/K,EAAI4H,GAAK5H,EAAI4H,EAAI,EAC7BjgB,EAAGojB,GAAS/K,EAAIrY,GAAKqY,EAAIrY,EAAI,EAEjC,CAEA,SAASojB,GAAU3iB,GACjB,MAAoB,kBAANA,CAChB,CAEA,IAAI09H,GAAyB,OAE7B,SAAST,GAAkBvzB,EAAcnsG,GACvC,IAAIoa,EAAmC,kBAAjB+xF,EACtB,GAAI/xF,GAA6C,kBAA1B+xF,EAAai0B,SAAuB,CAGzD,IAAIt3H,EAAKq3H,GAAuBpyH,KAAKo+F,EAAai0B,UAC9ChhI,SAAS8tH,eAAe/gB,EAAai0B,SAASp6H,MAAM,IACpD5G,SAAS7C,cAAc4vG,EAAai0B,UAExC,GAAIt3H,EAAI,CACN,IAAIqsD,EACFg3C,EAAah3C,QAAyC,kBAAxBg3C,EAAah3C,OACvCg3C,EAAah3C,OACb,CAAC,EACPA,EAAS+qE,GAAgB/qE,GACzBn1D,EAAW4/H,GAAmB92H,EAAIqsD,EACpC,MAAW6qE,GAAgB7zB,KACzBnsG,EAAWigI,GAAkB9zB,GAEjC,MAAW/xF,GAAY4lH,GAAgB7zB,KACrCnsG,EAAWigI,GAAkB9zB,IAG3BnsG,IAEE,mBAAoBZ,SAASI,gBAAgBG,MAC/CM,OAAO2wC,SAAS,CACd9J,KAAM9mC,EAASiiB,EACf7hB,IAAKJ,EAASgC,EAEdu9H,SAAUpzB,EAAaozB,WAGzBt/H,OAAO2wC,SAAS5wC,EAASiiB,EAAGjiB,EAASgC,GAG3C,CAIA,IAAIq+H,GACFpE,IACA,WACE,IAAI5yF,EAAKppC,OAAOkpC,UAAUG,UAE1B,QACiC,IAA9BD,EAAGv+B,QAAQ,gBAAuD,IAA/Bu+B,EAAGv+B,QAAQ,iBACd,IAAjCu+B,EAAGv+B,QAAQ,mBACe,IAA1Bu+B,EAAGv+B,QAAQ,YACsB,IAAjCu+B,EAAGv+B,QAAQ,oBAKN7K,OAAOu6B,SAA+C,oBAA7Bv6B,OAAOu6B,QAAQ4U,UAChD,CAbD,GAeF,SAASA,GAAWz6B,EAAKuD,GACvBynH,KAGA,IAAInlG,EAAUv6B,OAAOu6B,QACrB,IACE,GAAItiB,EAAS,CAEX,IAAI+mH,EAAYtzH,EAAO,CAAC,EAAG6uB,EAAQ4S,OACnC6xF,EAAUl9H,IAAM28H,KAChBlkG,EAAQ0kG,aAAaD,EAAW,GAAItqH,EACtC,MACE6lB,EAAQ4U,UAAU,CAAErtC,IAAK48H,GAAYH,OAAkB,GAAI7pH,EAE/D,CAAE,MAAOvY,GACP6D,OAAO4yD,SAAS36C,EAAU,UAAY,UAAUvD,EAClD,CACF,CAEA,SAASuqH,GAAcvqH,GACrBy6B,GAAUz6B,GAAK,EACjB,CAGA,IAAI2rH,GAAwB,CAC1BC,WAAY,EACZC,QAAS,EACTC,UAAW,EACXC,WAAY,IAGd,SAASC,GAAiC57E,EAAMviC,GAC9C,OAAOo+G,GACL77E,EACAviC,EACA89G,GAAsBC,WACrB,+BAAmCx7E,EAAa,SAAI,SAAc87E,GACjEr+G,GACG,4BAET,CAEA,SAASs+G,GAAiC/7E,EAAMviC,GAC9C,IAAIjpB,EAAQqnI,GACV77E,EACAviC,EACA89G,GAAsBI,WACrB,sDAA0D37E,EAAa,SAAI,MAI9E,OADAxrD,EAAMkS,KAAO,uBACNlS,CACT,CAEA,SAASwnI,GAAgCh8E,EAAMviC,GAC7C,OAAOo+G,GACL77E,EACAviC,EACA89G,GAAsBG,UACrB,8BAAkC17E,EAAa,SAAI,SAAcviC,EAAW,SAAI,2BAErF,CAEA,SAASw+G,GAA8Bj8E,EAAMviC,GAC3C,OAAOo+G,GACL77E,EACAviC,EACA89G,GAAsBE,QACrB,4BAAgCz7E,EAAa,SAAI,SAAcviC,EAAW,SAAI,4BAEnF,CAEA,SAASo+G,GAAmB77E,EAAMviC,EAAI9nB,EAAM8M,GAC1C,IAAIjO,EAAQ,IAAIgI,MAAMiG,GAMtB,OALAjO,EAAM0nI,WAAY,EAClB1nI,EAAMwrD,KAAOA,EACbxrD,EAAMipB,GAAKA,EACXjpB,EAAMmB,KAAOA,EAENnB,CACT,CAEA,IAAI2nI,GAAkB,CAAC,SAAU,QAAS,QAE1C,SAASL,GAAgBr+G,GACvB,GAAkB,kBAAPA,EAAmB,OAAOA,EACrC,GAAI,SAAUA,EAAM,OAAOA,EAAGxK,KAC9B,IAAI66C,EAAW,CAAC,EAIhB,OAHAquE,GAAgB/9H,SAAQ,SAAUpB,GAC5BA,KAAOygB,IAAMqwC,EAAS9wD,GAAOygB,EAAGzgB,GACtC,IACOuJ,KAAKC,UAAUsnD,EAAU,KAAM,EACxC,CAEA,SAASsuE,GAAS95H,GAChB,OAAO/M,OAAO4G,UAAUsB,SAAS3E,KAAKwJ,GAAKyD,QAAQ,UAAY,CACjE,CAEA,SAASs2H,GAAqB/5H,EAAKg6H,GACjC,OACEF,GAAQ95H,IACRA,EAAI45H,YACU,MAAbI,GAAqBh6H,EAAI3M,OAAS2mI,EAEvC,CAIA,SAASC,GAAUC,EAAOp8H,EAAI+yD,GAC5B,IAAIspE,EAAO,SAAU/rH,GACfA,GAAS8rH,EAAM5gI,OACjBu3D,IAEIqpE,EAAM9rH,GACRtQ,EAAGo8H,EAAM9rH,IAAQ,WACf+rH,EAAK/rH,EAAQ,EACf,IAEA+rH,EAAK/rH,EAAQ,EAGnB,EACA+rH,EAAK,EACP,CAIA,SAASC,GAAwBtzF,GAC/B,OAAO,SAAU3rB,EAAIuiC,EAAMh+B,GACzB,IAAI26G,GAAW,EACXjpB,EAAU,EACVl/G,EAAQ,KAEZooI,GAAkBxzF,GAAS,SAAUyzF,EAAK77H,EAAGmV,EAAOnZ,GAMlD,GAAmB,oBAAR6/H,QAAkCx4H,IAAZw4H,EAAIC,IAAmB,CACtDH,GAAW,EACXjpB,IAEA,IA0BI1xG,EA1BAwB,EAAU1C,IAAK,SAAUi8H,GACvBC,GAAWD,KACbA,EAAcA,EAAYnnI,SAG5BinI,EAAII,SAAkC,oBAAhBF,EAClBA,EACA9I,GAAKrtH,OAAOm2H,GAChB5mH,EAAM06G,WAAW7zH,GAAO+/H,EACxBrpB,IACIA,GAAW,GACb1xF,GAEJ,IAEIve,EAAS3C,IAAK,SAAUo8H,GAC1B,IAAIt5D,EAAM,qCAAuC5mE,EAAM,KAAOkgI,EAEzD1oI,IACHA,EAAQ4nI,GAAQc,GACZA,EACA,IAAI1gI,MAAMonE,GACd5hD,EAAKxtB,GAET,IAGA,IACEwN,EAAM66H,EAAIr5H,EAASC,EACrB,CAAE,MAAOpM,GACPoM,EAAOpM,EACT,CACA,GAAI2K,EACF,GAAwB,oBAAbA,EAAID,KACbC,EAAID,KAAKyB,EAASC,OACb,CAEL,IAAI05H,EAAOn7H,EAAInK,UACXslI,GAA6B,oBAAdA,EAAKp7H,MACtBo7H,EAAKp7H,KAAKyB,EAASC,EAEvB,CAEJ,CACF,IAEKk5H,GAAY36G,GACnB,CACF,CAEA,SAAS46G,GACPxzF,EACAhpC,GAEA,OAAOg9H,GAAQh0F,EAAQrpC,KAAI,SAAUjC,GACnC,OAAOvI,OAAOsQ,KAAK/H,EAAE+yH,YAAY9wH,KAAI,SAAU/C,GAAO,OAAOoD,EAC3DtC,EAAE+yH,WAAW7zH,GACbc,EAAEwxH,UAAUtyH,GACZc,EAAGd,EACF,GACL,IACF,CAEA,SAASogI,GAASlsH,GAChB,OAAO1b,MAAM2G,UAAUzC,OAAOiE,MAAM,GAAIuT,EAC1C,CAEA,IAAImsH,GACgB,oBAAXrhI,QACuB,kBAAvBA,OAAOshI,YAEhB,SAASN,GAAY1nH,GACnB,OAAOA,EAAInU,YAAek8H,IAAyC,WAA5B/nH,EAAItZ,OAAOshI,YACpD,CAMA,SAASx8H,GAAMV,GACb,IAAIm9H,GAAS,EACb,OAAO,WACL,IAAI3zG,EAAO,GAAI7M,EAAMphB,UAAUC,OAC/B,MAAQmhB,IAAQ6M,EAAM7M,GAAQphB,UAAWohB,GAEzC,IAAIwgH,EAEJ,OADAA,GAAS,EACFn9H,EAAGzC,MAAMzJ,KAAM01B,EACxB,CACF,CAIA,IAAIgL,GAAU,SAAkB05F,EAAQp1G,GACtChlB,KAAKo6H,OAASA,EACdp6H,KAAKglB,KAAOskH,GAActkH,GAE1BhlB,KAAKunD,QAAUgzE,EACfv6H,KAAKw/G,QAAU,KACfx/G,KAAKupI,OAAQ,EACbvpI,KAAKwpI,SAAW,GAChBxpI,KAAKypI,cAAgB,GACrBzpI,KAAK0pI,SAAW,GAChB1pI,KAAKquE,UAAY,EACnB,EAuNA,SAASi7D,GAAetkH,GACtB,IAAKA,EACH,GAAIg+G,GAAW,CAEb,IAAI2G,EAASxjI,SAAS7C,cAAc,QACpC0hB,EAAQ2kH,GAAUA,EAAOnjI,aAAa,SAAY,IAElDwe,EAAOA,EAAK/F,QAAQ,qBAAsB,GAC5C,MACE+F,EAAO,IAQX,MAJuB,MAAnBA,EAAKrB,OAAO,KACdqB,EAAO,IAAMA,GAGRA,EAAK/F,QAAQ,MAAO,GAC7B,CAEA,SAAS2qH,GACPriF,EACAz5B,GAEA,IAAI/nB,EACAg/B,EAAMlf,KAAKkf,IAAIwiB,EAAQ7/C,OAAQomB,EAAKpmB,QACxC,IAAK3B,EAAI,EAAGA,EAAIg/B,EAAKh/B,IACnB,GAAIwhD,EAAQxhD,KAAO+nB,EAAK/nB,GACtB,MAGJ,MAAO,CACL8jI,QAAS/7G,EAAK/gB,MAAM,EAAGhH,GACvB+jI,UAAWh8G,EAAK/gB,MAAMhH,GACtBgkI,YAAaxiF,EAAQx6C,MAAMhH,GAE/B,CAEA,SAASikI,GACPC,EACAz3H,EACA7G,EACAwvD,GAEA,IAAI+uE,EAASxB,GAAkBuB,GAAS,SAAUtB,EAAKtN,EAAUp5G,EAAOnZ,GACtE,IAAIqhI,EAAQC,GAAazB,EAAKn2H,GAC9B,GAAI23H,EACF,OAAO7oI,MAAMsS,QAAQu2H,GACjBA,EAAMt+H,KAAI,SAAUs+H,GAAS,OAAOx+H,EAAKw+H,EAAO9O,EAAUp5G,EAAOnZ,EAAM,IACvE6C,EAAKw+H,EAAO9O,EAAUp5G,EAAOnZ,EAErC,IACA,OAAOogI,GAAQ/tE,EAAU+uE,EAAO/uE,UAAY+uE,EAC9C,CAEA,SAASE,GACPzB,EACA7/H,GAMA,MAJmB,oBAAR6/H,IAETA,EAAM5I,GAAKrtH,OAAOi2H,IAEbA,EAAI7lI,QAAQgG,EACrB,CAEA,SAASuhI,GAAoBN,GAC3B,OAAOC,GAAcD,EAAa,mBAAoBO,IAAW,EACnE,CAEA,SAASC,GAAoBV,GAC3B,OAAOG,GAAcH,EAAS,oBAAqBS,GACrD,CAEA,SAASA,GAAWH,EAAO9O,GACzB,GAAIA,EACF,OAAO,WACL,OAAO8O,EAAM1gI,MAAM4xH,EAAU5zH,UAC/B,CAEJ,CAEA,SAAS+iI,GACPV,GAEA,OAAOE,GACLF,EACA,oBACA,SAAUK,EAAOr9H,EAAGmV,EAAOnZ,GACzB,OAAO2hI,GAAeN,EAAOloH,EAAOnZ,EACtC,GAEJ,CAEA,SAAS2hI,GACPN,EACAloH,EACAnZ,GAEA,OAAO,SAA0BygB,EAAIuiC,EAAMh+B,GACzC,OAAOq8G,EAAM5gH,EAAIuiC,GAAM,SAAUmT,GACb,oBAAPA,IACJh9C,EAAMs5G,WAAWzyH,KACpBmZ,EAAMs5G,WAAWzyH,GAAO,IAE1BmZ,EAAMs5G,WAAWzyH,GAAK4D,KAAKuyD,IAE7BnxC,EAAKmxC,EACP,GACF,CACF,CAnUAv+B,GAAQz4B,UAAUyiI,OAAS,SAAiBzrE,GAC1Cj/D,KAAKi/D,GAAKA,CACZ,EAEAv+B,GAAQz4B,UAAU0iI,QAAU,SAAkB1rE,EAAI2rE,GAC5C5qI,KAAKupI,MACPtqE,KAEAj/D,KAAKwpI,SAAS98H,KAAKuyD,GACf2rE,GACF5qI,KAAKypI,cAAc/8H,KAAKk+H,GAG9B,EAEAlqG,GAAQz4B,UAAUqJ,QAAU,SAAkBs5H,GAC5C5qI,KAAK0pI,SAASh9H,KAAKk+H,EACrB,EAEAlqG,GAAQz4B,UAAU4iI,aAAe,SAC/BjxE,EACAkxE,EACAC,GAEE,IAEE1Q,EAFEoG,EAAWzgI,KAIjB,IACEq6H,EAAQr6H,KAAKo6H,OAAOn4G,MAAM23C,EAAU55D,KAAKunD,QAC3C,CAAE,MAAOpkD,GAKP,MAJAnD,KAAK0pI,SAASx/H,SAAQ,SAAU+0D,GAC9BA,EAAG97D,EACL,IAEMA,CACR,CACA,IAAI2pC,EAAO9sC,KAAKunD,QAChBvnD,KAAKgrI,kBACH3Q,GACA,WACEoG,EAASwK,YAAY5Q,GACrByQ,GAAcA,EAAWzQ,GACzBoG,EAASyK,YACTzK,EAASrG,OAAO+Q,WAAWjhI,SAAQ,SAAU/F,GAC3CA,GAAQA,EAAKk2H,EAAOvtF,EACtB,IAGK2zF,EAAS8I,QACZ9I,EAAS8I,OAAQ,EACjB9I,EAAS+I,SAASt/H,SAAQ,SAAU+0D,GAClCA,EAAGo7D,EACL,IAEJ,IACA,SAAUjsH,GACJ28H,GACFA,EAAQ38H,GAENA,IAAQqyH,EAAS8I,QAKdpB,GAAoB/5H,EAAKi5H,GAAsBC,aAAex6F,IAASytF,IAC1EkG,EAAS8I,OAAQ,EACjB9I,EAASgJ,cAAcv/H,SAAQ,SAAU+0D,GACvCA,EAAG7wD,EACL,KAGN,GAEJ,EAEAsyB,GAAQz4B,UAAU+iI,kBAAoB,SAA4B3Q,EAAOyQ,EAAYC,GACjF,IAAItK,EAAWzgI,KAEbunD,EAAUvnD,KAAKunD,QACnBvnD,KAAKw/G,QAAU6a,EACf,IAAI+Q,EAAQ,SAAUh9H,IAIf+5H,GAAoB/5H,IAAQ85H,GAAQ95H,KACnCqyH,EAASiJ,SAAShiI,OACpB+4H,EAASiJ,SAASx/H,SAAQ,SAAU+0D,GAClCA,EAAG7wD,EACL,IAKAC,QAAQ/N,MAAM8N,IAGlB28H,GAAWA,EAAQ38H,EACrB,EACIi9H,EAAiBhR,EAAMnlF,QAAQxtC,OAAS,EACxC4jI,EAAmB/jF,EAAQrS,QAAQxtC,OAAS,EAChD,GACE+yH,EAAYJ,EAAO9yE,IAEnB8jF,IAAmBC,GACnBjR,EAAMnlF,QAAQm2F,KAAoB9jF,EAAQrS,QAAQo2F,GAMlD,OAJAtrI,KAAKkrI,YACD7Q,EAAMr8G,MACRmoH,GAAanmI,KAAKo6H,OAAQ7yE,EAAS8yE,GAAO,GAErC+Q,EAAMvD,GAAgCtgF,EAAS8yE,IAGxD,IAAI5+G,EAAMmuH,GACR5pI,KAAKunD,QAAQrS,QACbmlF,EAAMnlF,SAEF20F,EAAUpuH,EAAIouH,QACdE,EAActuH,EAAIsuH,YAClBD,EAAYruH,EAAIquH,UAElBxB,EAAQ,GAAG9iI,OAEb6kI,GAAmBN,GAEnB/pI,KAAKo6H,OAAOmR,YAEZhB,GAAmBV,GAEnBC,EAAUj+H,KAAI,SAAUjC,GAAK,OAAOA,EAAEq6H,WAAa,IAEnDuE,GAAuBsB,IAGrB/hI,EAAW,SAAU5D,EAAM2pB,GAC7B,GAAI2yG,EAASjhB,UAAY6a,EACvB,OAAO+Q,EAAMtD,GAA+BvgF,EAAS8yE,IAEvD,IACEl2H,EAAKk2H,EAAO9yE,GAAS,SAAUh+B,IAClB,IAAPA,GAEFk3G,EAASyK,WAAU,GACnBE,EAAMrD,GAA6BxgF,EAAS8yE,KACnC6N,GAAQ3+G,IACjBk3G,EAASyK,WAAU,GACnBE,EAAM7hH,IAEQ,kBAAPA,GACQ,kBAAPA,IACc,kBAAZA,EAAGxK,MAAwC,kBAAZwK,EAAG/W,OAG5C44H,EAAM1D,GAAgCngF,EAAS8yE,IAC7B,kBAAP9wG,GAAmBA,EAAGtK,QAC/BwhH,EAASxhH,QAAQsK,GAEjBk3G,EAAS/zH,KAAK6c,IAIhBuE,EAAKvE,EAET,GACF,CAAE,MAAOpmB,GACPioI,EAAMjoI,EACR,CACF,EAEAklI,GAASC,EAAOvgI,GAAU,WAGxB,IAAIyjI,EAAchB,GAAmBV,GACjCxB,EAAQkD,EAAYhmI,OAAOi7H,EAASrG,OAAOqR,cAC/CpD,GAASC,EAAOvgI,GAAU,WACxB,GAAI04H,EAASjhB,UAAY6a,EACvB,OAAO+Q,EAAMtD,GAA+BvgF,EAAS8yE,IAEvDoG,EAASjhB,QAAU,KACnBsrB,EAAWzQ,GACPoG,EAASrG,OAAOiM,KAClB5F,EAASrG,OAAOiM,IAAInjI,WAAU,WAC5Bi4H,EAAmBd,EACrB,GAEJ,GACF,GACF,EAEA35F,GAAQz4B,UAAUgjI,YAAc,SAAsB5Q,GACpDr6H,KAAKunD,QAAU8yE,EACfr6H,KAAKi/D,IAAMj/D,KAAKi/D,GAAGo7D,EACrB,EAEA35F,GAAQz4B,UAAUyjI,eAAiB,WAEnC,EAEAhrG,GAAQz4B,UAAU0jI,SAAW,WAG3B3rI,KAAKquE,UAAUnkE,SAAQ,SAAU0hI,GAC/BA,GACF,IACA5rI,KAAKquE,UAAY,GAIjBruE,KAAKunD,QAAUgzE,EACfv6H,KAAKw/G,QAAU,IACjB,EAoHA,IAAIqsB,GAA6B,SAAUnrG,GACzC,SAASmrG,EAAczR,EAAQp1G,GAC7B0b,EAAQ97B,KAAK5E,KAAMo6H,EAAQp1G,GAE3BhlB,KAAK8rI,eAAiBC,GAAY/rI,KAAKglB,KACzC,CAkFA,OAhFK0b,IAAUmrG,EAAa5iI,UAAYy3B,GACxCmrG,EAAa5jI,UAAY5G,OAAOyI,OAAQ42B,GAAWA,EAAQz4B,WAC3D4jI,EAAa5jI,UAAUD,YAAc6jI,EAErCA,EAAa5jI,UAAUyjI,eAAiB,WACtC,IAAIjL,EAAWzgI,KAEf,KAAIA,KAAKquE,UAAU3mE,OAAS,GAA5B,CAIA,IAAI0yH,EAASp6H,KAAKo6H,OACd4R,EAAe5R,EAAOt3H,QAAQyjI,eAC9B0F,EAAiB7E,IAAqB4E,EAEtCC,GACFjsI,KAAKquE,UAAU3hE,KAAKk5H,MAGtB,IAAIsG,EAAqB,WACvB,IAAI3kF,EAAUk5E,EAASl5E,QAInBqS,EAAWmyE,GAAYtL,EAASz7G,MAChCy7G,EAASl5E,UAAYgzE,GAAS3gE,IAAa6mE,EAASqL,gBAIxDrL,EAASoK,aAAajxE,GAAU,SAAUygE,GACpC4R,GACF9F,GAAa/L,EAAQC,EAAO9yE,GAAS,EAEzC,GACF,EACAvgD,OAAOyE,iBAAiB,WAAYygI,GACpClsI,KAAKquE,UAAU3hE,MAAK,WAClB1F,OAAO0E,oBAAoB,WAAYwgI,EACzC,GA7BA,CA8BF,EAEAL,EAAa5jI,UAAUkkI,GAAK,SAAavmI,GACvCoB,OAAOu6B,QAAQ4qG,GAAGvmI,EACpB,EAEAimI,EAAa5jI,UAAUyE,KAAO,SAAektD,EAAUkxE,EAAYC,GACjE,IAAItK,EAAWzgI,KAEXyb,EAAMzb,KACNosI,EAAY3wH,EAAI8rC,QACpBvnD,KAAK6qI,aAAajxE,GAAU,SAAUygE,GACpClkF,GAAUmnF,EAAUmD,EAASz7G,KAAOq1G,EAAMz8G,WAC1CuoH,GAAa1F,EAASrG,OAAQC,EAAO+R,GAAW,GAChDtB,GAAcA,EAAWzQ,EAC3B,GAAG0Q,EACL,EAEAc,EAAa5jI,UAAUgX,QAAU,SAAkB26C,EAAUkxE,EAAYC,GACvE,IAAItK,EAAWzgI,KAEXyb,EAAMzb,KACNosI,EAAY3wH,EAAI8rC,QACpBvnD,KAAK6qI,aAAajxE,GAAU,SAAUygE,GACpC4L,GAAa3I,EAAUmD,EAASz7G,KAAOq1G,EAAMz8G,WAC7CuoH,GAAa1F,EAASrG,OAAQC,EAAO+R,GAAW,GAChDtB,GAAcA,EAAWzQ,EAC3B,GAAG0Q,EACL,EAEAc,EAAa5jI,UAAUijI,UAAY,SAAoBx+H,GACrD,GAAIq/H,GAAY/rI,KAAKglB,QAAUhlB,KAAKunD,QAAQ3pC,SAAU,CACpD,IAAI2pC,EAAU+1E,EAAUt9H,KAAKglB,KAAOhlB,KAAKunD,QAAQ3pC,UACjDlR,EAAOypC,GAAUoR,GAAW0+E,GAAa1+E,EAC3C,CACF,EAEAskF,EAAa5jI,UAAUokI,mBAAqB,WAC1C,OAAON,GAAY/rI,KAAKglB,KAC1B,EAEO6mH,CACT,CAxFgC,CAwF9BnrG,IAEF,SAASqrG,GAAa/mH,GACpB,IAAIjG,EAAO/X,OAAO4yD,SAASh6C,SACvB0sH,EAAgBvtH,EAAKgD,cACrBwqH,EAAgBvnH,EAAKjD,cAQzB,OAJIiD,GAAUsnH,IAAkBC,GAC6B,IAA1DD,EAAcz6H,QAAQyrH,EAAUiP,EAAgB,QACjDxtH,EAAOA,EAAKhS,MAAMiY,EAAKtd,UAEjBqX,GAAQ,KAAO/X,OAAO4yD,SAASl6C,OAAS1Y,OAAO4yD,SAAS57C,IAClE,CAIA,IAAIwuH,GAA4B,SAAU9rG,GACxC,SAAS8rG,EAAapS,EAAQp1G,EAAMynH,GAClC/rG,EAAQ97B,KAAK5E,KAAMo6H,EAAQp1G,GAEvBynH,GAAYC,GAAc1sI,KAAKglB,OAGnC2nH,IACF,CA8FA,OA5FKjsG,IAAU8rG,EAAYvjI,UAAYy3B,GACvC8rG,EAAYvkI,UAAY5G,OAAOyI,OAAQ42B,GAAWA,EAAQz4B,WAC1DukI,EAAYvkI,UAAUD,YAAcwkI,EAIpCA,EAAYvkI,UAAUyjI,eAAiB,WACrC,IAAIjL,EAAWzgI,KAEf,KAAIA,KAAKquE,UAAU3mE,OAAS,GAA5B,CAIA,IAAI0yH,EAASp6H,KAAKo6H,OACd4R,EAAe5R,EAAOt3H,QAAQyjI,eAC9B0F,EAAiB7E,IAAqB4E,EAEtCC,GACFjsI,KAAKquE,UAAU3hE,KAAKk5H,MAGtB,IAAIsG,EAAqB,WACvB,IAAI3kF,EAAUk5E,EAASl5E,QAClBolF,MAGLlM,EAASoK,aAAa+B,MAAW,SAAUvS,GACrC4R,GACF9F,GAAa1F,EAASrG,OAAQC,EAAO9yE,GAAS,GAE3C6/E,IACHyF,GAAYxS,EAAMz8G,SAEtB,GACF,EACIkvH,EAAY1F,GAAoB,WAAa,aACjDpgI,OAAOyE,iBACLqhI,EACAZ,GAEFlsI,KAAKquE,UAAU3hE,MAAK,WAClB1F,OAAO0E,oBAAoBohI,EAAWZ,EACxC,GA/BA,CAgCF,EAEAM,EAAYvkI,UAAUyE,KAAO,SAAektD,EAAUkxE,EAAYC,GAChE,IAAItK,EAAWzgI,KAEXyb,EAAMzb,KACNosI,EAAY3wH,EAAI8rC,QACpBvnD,KAAK6qI,aACHjxE,GACA,SAAUygE,GACR0S,GAAS1S,EAAMz8G,UACfuoH,GAAa1F,EAASrG,OAAQC,EAAO+R,GAAW,GAChDtB,GAAcA,EAAWzQ,EAC3B,GACA0Q,EAEJ,EAEAyB,EAAYvkI,UAAUgX,QAAU,SAAkB26C,EAAUkxE,EAAYC,GACtE,IAAItK,EAAWzgI,KAEXyb,EAAMzb,KACNosI,EAAY3wH,EAAI8rC,QACpBvnD,KAAK6qI,aACHjxE,GACA,SAAUygE,GACRwS,GAAYxS,EAAMz8G,UAClBuoH,GAAa1F,EAASrG,OAAQC,EAAO+R,GAAW,GAChDtB,GAAcA,EAAWzQ,EAC3B,GACA0Q,EAEJ,EAEAyB,EAAYvkI,UAAUkkI,GAAK,SAAavmI,GACtCoB,OAAOu6B,QAAQ4qG,GAAGvmI,EACpB,EAEA4mI,EAAYvkI,UAAUijI,UAAY,SAAoBx+H,GACpD,IAAI66C,EAAUvnD,KAAKunD,QAAQ3pC,SACvBgvH,OAAcrlF,IAChB76C,EAAOqgI,GAASxlF,GAAWslF,GAAYtlF,GAE3C,EAEAilF,EAAYvkI,UAAUokI,mBAAqB,WACzC,OAAOO,IACT,EAEOJ,CACT,CAvG+B,CAuG7B9rG,IAEF,SAASgsG,GAAe1nH,GACtB,IAAI40C,EAAWmyE,GAAY/mH,GAC3B,IAAK,OAAOlQ,KAAK8kD,GAEf,OADA5yD,OAAO4yD,SAAS36C,QAAQq+G,EAAUt4G,EAAO,KAAO40C,KACzC,CAEX,CAEA,SAAS+yE,KACP,IAAI5tH,EAAO6tH,KACX,MAAuB,MAAnB7tH,EAAK4E,OAAO,KAGhBkpH,GAAY,IAAM9tH,IACX,EACT,CAEA,SAAS6tH,KAGP,IAAI/sH,EAAO7Y,OAAO4yD,SAAS/5C,KACvBrD,EAAQqD,EAAKhO,QAAQ,KAEzB,OAAI2K,EAAQ,EAAY,IAExBqD,EAAOA,EAAK9S,MAAMyP,EAAQ,GAEnBqD,EACT,CAEA,SAASmtH,GAAQjuH,GACf,IAAIc,EAAO7Y,OAAO4yD,SAAS/5C,KACvB9Z,EAAI8Z,EAAKhO,QAAQ,KACjBmT,EAAOjf,GAAK,EAAI8Z,EAAK9S,MAAM,EAAGhH,GAAK8Z,EACvC,OAAQmF,EAAO,IAAMjG,CACvB,CAEA,SAASguH,GAAUhuH,GACbqoH,GACFjxF,GAAU62F,GAAOjuH,IAEjB/X,OAAO4yD,SAAS57C,KAAOe,CAE3B,CAEA,SAAS8tH,GAAa9tH,GAChBqoH,GACFnB,GAAa+G,GAAOjuH,IAEpB/X,OAAO4yD,SAAS36C,QAAQ+tH,GAAOjuH,GAEnC,CAIA,IAAIkuH,GAAgC,SAAUvsG,GAC5C,SAASusG,EAAiB7S,EAAQp1G,GAChC0b,EAAQ97B,KAAK5E,KAAMo6H,EAAQp1G,GAC3BhlB,KAAKozC,MAAQ,GACbpzC,KAAKwc,OAAS,CAChB,CAoEA,OAlEKkkB,IAAUusG,EAAgBhkI,UAAYy3B,GAC3CusG,EAAgBhlI,UAAY5G,OAAOyI,OAAQ42B,GAAWA,EAAQz4B,WAC9DglI,EAAgBhlI,UAAUD,YAAcilI,EAExCA,EAAgBhlI,UAAUyE,KAAO,SAAektD,EAAUkxE,EAAYC,GACpE,IAAItK,EAAWzgI,KAEfA,KAAK6qI,aACHjxE,GACA,SAAUygE,GACRoG,EAASrtF,MAAQqtF,EAASrtF,MAAMrmC,MAAM,EAAG0zH,EAASjkH,MAAQ,GAAGhX,OAAO60H,GACpEoG,EAASjkH,QACTsuH,GAAcA,EAAWzQ,EAC3B,GACA0Q,EAEJ,EAEAkC,EAAgBhlI,UAAUgX,QAAU,SAAkB26C,EAAUkxE,EAAYC,GAC1E,IAAItK,EAAWzgI,KAEfA,KAAK6qI,aACHjxE,GACA,SAAUygE,GACRoG,EAASrtF,MAAQqtF,EAASrtF,MAAMrmC,MAAM,EAAG0zH,EAASjkH,OAAOhX,OAAO60H,GAChEyQ,GAAcA,EAAWzQ,EAC3B,GACA0Q,EAEJ,EAEAkC,EAAgBhlI,UAAUkkI,GAAK,SAAavmI,GAC1C,IAAI66H,EAAWzgI,KAEXq6C,EAAcr6C,KAAKwc,MAAQ5W,EAC/B,KAAIy0C,EAAc,GAAKA,GAAer6C,KAAKozC,MAAM1rC,QAAjD,CAGA,IAAI2yH,EAAQr6H,KAAKozC,MAAMiH,GACvBr6C,KAAKgrI,kBACH3Q,GACA,WACE,IAAIvtF,EAAO2zF,EAASl5E,QACpBk5E,EAASjkH,MAAQ69B,EACjBomF,EAASwK,YAAY5Q,GACrBoG,EAASrG,OAAO+Q,WAAWjhI,SAAQ,SAAU/F,GAC3CA,GAAQA,EAAKk2H,EAAOvtF,EACtB,GACF,IACA,SAAU1+B,GACJ+5H,GAAoB/5H,EAAKi5H,GAAsBI,cACjDhH,EAASjkH,MAAQ69B,EAErB,GAhBF,CAkBF,EAEA4yF,EAAgBhlI,UAAUokI,mBAAqB,WAC7C,IAAI9kF,EAAUvnD,KAAKozC,MAAMpzC,KAAKozC,MAAM1rC,OAAS,GAC7C,OAAO6/C,EAAUA,EAAQ3pC,SAAW,GACtC,EAEAqvH,EAAgBhlI,UAAUijI,UAAY,WAEtC,EAEO+B,CACT,CA1EmC,CA0EjCvsG,IAMEwsG,GAAY,SAAoBpqI,QACjB,IAAZA,IAAqBA,EAAU,CAAC,GAKrC9C,KAAKqmI,IAAM,KACXrmI,KAAKmtI,KAAO,GACZntI,KAAK8C,QAAUA,EACf9C,KAAKurI,YAAc,GACnBvrI,KAAKyrI,aAAe,GACpBzrI,KAAKmrI,WAAa,GAClBnrI,KAAKotI,QAAU/I,GAAcvhI,EAAQogI,QAAU,GAAIljI,MAEnD,IAAI2B,EAAOmB,EAAQnB,MAAQ,OAW3B,OAVA3B,KAAKysI,SACM,YAAT9qI,IAAuBylI,KAA0C,IAArBtkI,EAAQ2pI,SAClDzsI,KAAKysI,WACP9qI,EAAO,QAEJqhI,KACHrhI,EAAO,YAET3B,KAAK2B,KAAOA,EAEJA,GACN,IAAK,UACH3B,KAAKuhC,QAAU,IAAIsqG,GAAa7rI,KAAM8C,EAAQkiB,MAC9C,MACF,IAAK,OACHhlB,KAAKuhC,QAAU,IAAIirG,GAAYxsI,KAAM8C,EAAQkiB,KAAMhlB,KAAKysI,UACxD,MACF,IAAK,WACHzsI,KAAKuhC,QAAU,IAAI0rG,GAAgBjtI,KAAM8C,EAAQkiB,MACjD,MACF,QACM,EAIV,EAEIqoH,GAAqB,CAAE3I,aAAc,CAAE/7H,cAAc,IAEzDukI,GAAUjlI,UAAUga,MAAQ,SAAgBy9G,EAAKn4E,EAAS4yE,GACxD,OAAOn6H,KAAKotI,QAAQnrH,MAAMy9G,EAAKn4E,EAAS4yE,EAC1C,EAEAkT,GAAmB3I,aAAa1hI,IAAM,WACpC,OAAOhD,KAAKuhC,SAAWvhC,KAAKuhC,QAAQgmB,OACtC,EAEA2lF,GAAUjlI,UAAUyoE,KAAO,SAAe21D,GACtC,IAAI5F,EAAWzgI,KA0BjB,GAjBAA,KAAKmtI,KAAKzgI,KAAK25H,GAIfA,EAAIiH,MAAM,kBAAkB,WAE1B,IAAI9wH,EAAQikH,EAAS0M,KAAKt7H,QAAQw0H,GAC9B7pH,GAAS,GAAKikH,EAAS0M,KAAKzoH,OAAOlI,EAAO,GAG1CikH,EAAS4F,MAAQA,IAAO5F,EAAS4F,IAAM5F,EAAS0M,KAAK,IAAM,MAE1D1M,EAAS4F,KAAO5F,EAASl/F,QAAQoqG,UACxC,KAII3rI,KAAKqmI,IAAT,CAIArmI,KAAKqmI,IAAMA,EAEX,IAAI9kG,EAAUvhC,KAAKuhC,QAEnB,GAAIA,aAAmBsqG,IAAgBtqG,aAAmBirG,GAAa,CACrE,IAAIe,EAAsB,SAAUC,GAClC,IAAI1hF,EAAOvqB,EAAQgmB,QACfykF,EAAevL,EAAS39H,QAAQyjI,eAChC0F,EAAiB7E,IAAqB4E,EAEtCC,GAAkB,aAAcuB,GAClCrH,GAAa1F,EAAU+M,EAAc1hF,GAAM,EAE/C,EACI4/E,EAAiB,SAAU8B,GAC7BjsG,EAAQmqG,iBACR6B,EAAoBC,EACtB,EACAjsG,EAAQspG,aACNtpG,EAAQ8qG,qBACRX,EACAA,EAEJ,CAEAnqG,EAAQmpG,QAAO,SAAUrQ,GACvBoG,EAAS0M,KAAKjjI,SAAQ,SAAUm8H,GAC9BA,EAAI5D,OAASpI,CACf,GACF,GA/BA,CAgCF,EAEA6S,GAAUjlI,UAAUwlI,WAAa,SAAqBvhI,GACpD,OAAOwhI,GAAa1tI,KAAKurI,YAAar/H,EACxC,EAEAghI,GAAUjlI,UAAU0lI,cAAgB,SAAwBzhI,GAC1D,OAAOwhI,GAAa1tI,KAAKyrI,aAAcv/H,EACzC,EAEAghI,GAAUjlI,UAAU2lI,UAAY,SAAoB1hI,GAClD,OAAOwhI,GAAa1tI,KAAKmrI,WAAYj/H,EACvC,EAEAghI,GAAUjlI,UAAU0iI,QAAU,SAAkB1rE,EAAI2rE,GAClD5qI,KAAKuhC,QAAQopG,QAAQ1rE,EAAI2rE,EAC3B,EAEAsC,GAAUjlI,UAAUqJ,QAAU,SAAkBs5H,GAC9C5qI,KAAKuhC,QAAQjwB,QAAQs5H,EACvB,EAEAsC,GAAUjlI,UAAUyE,KAAO,SAAektD,EAAUkxE,EAAYC,GAC5D,IAAItK,EAAWzgI,KAGjB,IAAK8qI,IAAeC,GAA8B,qBAAZ17H,QACpC,OAAO,IAAIA,SAAQ,SAAUC,EAASC,GACpCkxH,EAASl/F,QAAQ70B,KAAKktD,EAAUtqD,EAASC,EAC3C,IAEAvP,KAAKuhC,QAAQ70B,KAAKktD,EAAUkxE,EAAYC,EAE5C,EAEAmC,GAAUjlI,UAAUgX,QAAU,SAAkB26C,EAAUkxE,EAAYC,GAClE,IAAItK,EAAWzgI,KAGjB,IAAK8qI,IAAeC,GAA8B,qBAAZ17H,QACpC,OAAO,IAAIA,SAAQ,SAAUC,EAASC,GACpCkxH,EAASl/F,QAAQtiB,QAAQ26C,EAAUtqD,EAASC,EAC9C,IAEAvP,KAAKuhC,QAAQtiB,QAAQ26C,EAAUkxE,EAAYC,EAE/C,EAEAmC,GAAUjlI,UAAUkkI,GAAK,SAAavmI,GACpC5F,KAAKuhC,QAAQ4qG,GAAGvmI,EAClB,EAEAsnI,GAAUjlI,UAAU4lI,KAAO,WACzB7tI,KAAKmsI,IAAI,EACX,EAEAe,GAAUjlI,UAAU6lI,QAAU,WAC5B9tI,KAAKmsI,GAAG,EACV,EAEAe,GAAUjlI,UAAU8lI,qBAAuB,SAA+BxkH,GACxE,IAAI8wG,EAAQ9wG,EACRA,EAAG2rB,QACD3rB,EACAvpB,KAAKsP,QAAQia,GAAI8wG,MACnBr6H,KAAK0kI,aACT,OAAKrK,EAGE,GAAG70H,OAAOiE,MACf,GACA4wH,EAAMnlF,QAAQrpC,KAAI,SAAUjC,GAC1B,OAAOvI,OAAOsQ,KAAK/H,EAAE+yH,YAAY9wH,KAAI,SAAU/C,GAC7C,OAAOc,EAAE+yH,WAAW7zH,EACtB,GACF,KARO,EAUX,EAEAokI,GAAUjlI,UAAUqH,QAAU,SAC5Bia,EACAg+B,EACA5b,GAEA4b,EAAUA,GAAWvnD,KAAKuhC,QAAQgmB,QAClC,IAAIqS,EAAW6lE,EAAkBl2G,EAAIg+B,EAAS5b,EAAQ3rC,MAClDq6H,EAAQr6H,KAAKiiB,MAAM23C,EAAUrS,GAC7B3pC,EAAWy8G,EAAMF,gBAAkBE,EAAMz8G,SACzCoH,EAAOhlB,KAAKuhC,QAAQvc,KACpBnF,EAAOmuH,GAAWhpH,EAAMpH,EAAU5d,KAAK2B,MAC3C,MAAO,CACLi4D,SAAUA,EACVygE,MAAOA,EACPx6G,KAAMA,EAENouH,aAAcr0E,EACdmvE,SAAU1O,EAEd,EAEA6S,GAAUjlI,UAAUw8H,UAAY,WAC9B,OAAOzkI,KAAKotI,QAAQ3I,WACtB,EAEAyI,GAAUjlI,UAAUs8H,SAAW,SAAmBC,EAAenK,GAC/Dr6H,KAAKotI,QAAQ7I,SAASC,EAAenK,GACjCr6H,KAAKuhC,QAAQgmB,UAAYgzE,GAC3Bv6H,KAAKuhC,QAAQspG,aAAa7qI,KAAKuhC,QAAQ8qG,qBAE3C,EAEAa,GAAUjlI,UAAUq8H,UAAY,SAAoBpB,GAIlDljI,KAAKotI,QAAQ9I,UAAUpB,GACnBljI,KAAKuhC,QAAQgmB,UAAYgzE,GAC3Bv6H,KAAKuhC,QAAQspG,aAAa7qI,KAAKuhC,QAAQ8qG,qBAE3C,EAEAhrI,OAAO8tD,iBAAkB+9E,GAAUjlI,UAAWolI,IAE9C,IAAIa,GAAchB,GAElB,SAASQ,GAAcz1F,EAAM/rC,GAE3B,OADA+rC,EAAKvrC,KAAKR,GACH,WACL,IAAInG,EAAIkyC,EAAKpmC,QAAQ3F,GACjBnG,GAAK,GAAKkyC,EAAKvzB,OAAO3e,EAAG,EAC/B,CACF,CAEA,SAASioI,GAAYhpH,EAAMpH,EAAUjc,GACnC,IAAIod,EAAgB,SAATpd,EAAkB,IAAMic,EAAWA,EAC9C,OAAOoH,EAAOs4G,EAAUt4G,EAAO,IAAMjG,GAAQA,CAC/C,CAGAmuH,GAAUr+H,QAAUA,GACpBq+H,GAAUl+H,QAAU,QACpBk+H,GAAU/E,oBAAsBA,GAChC+E,GAAU7F,sBAAwBA,GAClC6F,GAAUiB,eAAiB5T,EAEvByI,IAAah8H,OAAO8H,KACtB9H,OAAO8H,IAAIs/H,IAAIlB,G;;;;;;AC5kGjB,IAAImB,EAAchtI,OAAOwuD,OAAO,CAAC,GAC7Bj8C,EAAUtS,MAAMsS,QAGpB,SAAS06H,EAAQ9kI,GACb,YAAa2G,IAAN3G,GAAyB,OAANA,CAC9B,CACA,SAAS04H,EAAM14H,GACX,YAAa2G,IAAN3G,GAAyB,OAANA,CAC9B,CACA,SAAS+kI,EAAO/kI,GACZ,OAAa,IAANA,CACX,CACA,SAASglI,EAAQhlI,GACb,OAAa,IAANA,CACX,CAIA,SAASilI,EAAYvtI,GACjB,MAAyB,kBAAVA,GACM,kBAAVA,GAEU,kBAAVA,GACU,mBAAVA,CACf,CACA,SAASwtI,EAAWxtI,GAChB,MAAwB,oBAAVA,CAClB,CAMA,SAASigB,EAASC,GACd,OAAe,OAARA,GAA+B,kBAARA,CAClC,CAIA,IAAIwrC,EAAYvrD,OAAO4G,UAAUsB,SAQjC,SAASolI,EAAcvtH,GACnB,MAA+B,oBAAxBwrC,EAAUhoD,KAAKwc,EAC1B,CACA,SAASwtH,EAASplI,GACd,MAA6B,oBAAtBojD,EAAUhoD,KAAK4E,EAC1B,CAIA,SAASqlI,EAAkB7sI,GACvB,IAAI4D,EAAI2qC,WAAWpvC,OAAOa,IAC1B,OAAO4D,GAAK,GAAKigB,KAAKD,MAAMhgB,KAAOA,GAAKujB,SAASnnB,EACrD,CACA,SAASi0B,EAAUj0B,GACf,OAAQkgI,EAAMlgI,IACU,oBAAbA,EAAI6L,MACU,oBAAd7L,EAAImM,KACnB,CAIA,SAAS5E,EAASvH,GACd,OAAc,MAAPA,EACD,GACAV,MAAMsS,QAAQ5R,IAAS2sI,EAAc3sI,IAAQA,EAAIuH,WAAaqjD,EAC1Dv6C,KAAKC,UAAUtQ,EAAK,KAAM,GAC1Bb,OAAOa,EACrB,CAKA,SAAS8sI,EAAS9sI,GACd,IAAI4D,EAAI2qC,WAAWvuC,GACnB,OAAO+jD,MAAMngD,GAAK5D,EAAM4D,CAC5B,CAKA,SAASmpI,EAAQl6H,EAAKm6H,GAGlB,IAFA,IAAInjI,EAAMxK,OAAOyI,OAAO,MACpBmuC,EAAOpjC,EAAIqJ,MAAM,KACZnY,EAAI,EAAGA,EAAIkyC,EAAKvwC,OAAQ3B,IAC7B8F,EAAIosC,EAAKlyC,KAAM,EAEnB,OAAOipI,EAAmB,SAAUhtI,GAAO,OAAO6J,EAAI7J,EAAI+f,cAAgB,EAAI,SAAU/f,GAAO,OAAO6J,EAAI7J,EAAM,CACpH,CAImB+sI,EAAQ,kBAAkB,GAA7C,IAIIE,EAAsBF,EAAQ,8BAIlC,SAASG,EAASlyH,EAAK0B,GACnB,IAAImK,EAAM7L,EAAItV,OACd,GAAImhB,EAAK,CAEL,GAAInK,IAAS1B,EAAI6L,EAAM,GAEnB,YADA7L,EAAItV,OAASmhB,EAAM,GAGvB,IAAIrM,EAAQQ,EAAInL,QAAQ6M,GACxB,GAAIlC,GAAS,EACT,OAAOQ,EAAI0H,OAAOlI,EAAO,EAEjC,CACJ,CAIA,IAAItP,EAAiB7L,OAAO4G,UAAUiF,eACtC,SAASiiI,EAAO/tH,EAAKtY,GACjB,OAAOoE,EAAetI,KAAKwc,EAAKtY,EACpC,CAIA,SAASuO,EAAOnL,GACZ,IAAI6M,EAAQ1X,OAAOyI,OAAO,MAC1B,OAAO,SAAkB+K,GACrB,IAAIu6H,EAAMr2H,EAAMlE,GAChB,OAAOu6H,IAAQr2H,EAAMlE,GAAO3I,EAAG2I,GACnC,CACJ,CAIA,IAAIw6H,EAAa,SACbC,EAAWj4H,GAAO,SAAUxC,GAC5B,OAAOA,EAAIoK,QAAQowH,GAAY,SAAUviI,EAAG5G,GAAK,OAAQA,EAAIA,EAAEmrE,cAAgB,EAAK,GACxF,IAIIk+D,EAAal4H,GAAO,SAAUxC,GAC9B,OAAOA,EAAI8O,OAAO,GAAG0tD,cAAgBx8D,EAAI9H,MAAM,EACnD,IAIIyiI,EAAc,aACdC,EAAYp4H,GAAO,SAAUxC,GAC7B,OAAOA,EAAIoK,QAAQuwH,EAAa,OAAOztH,aAC3C,IASA,SAAS2tH,EAAaxjI,EAAIS,GACtB,SAASgjI,EAAQtpI,GACb,IAAIwB,EAAIJ,UAAUC,OAClB,OAAOG,EACDA,EAAI,EACAqE,EAAGzC,MAAMkD,EAAKlF,WACdyE,EAAGtH,KAAK+H,EAAKtG,GACjB6F,EAAGtH,KAAK+H,EAClB,CAEA,OADAgjI,EAAQC,QAAU1jI,EAAGxE,OACdioI,CACX,CACA,SAASE,EAAW3jI,EAAIS,GACpB,OAAOT,EAAGP,KAAKgB,EACnB,CAEA,IAAIhB,EAAOo2B,SAAS95B,UAAU0D,KAAOkkI,EAAaH,EAIlD,SAASI,EAAQ73F,EAAM/P,GACnBA,EAAQA,GAAS,EACjB,IAAIniC,EAAIkyC,EAAKvwC,OAASwgC,EAClBtS,EAAM,IAAIt0B,MAAMyE,GACpB,MAAOA,IACH6vB,EAAI7vB,GAAKkyC,EAAKlyC,EAAImiC,GAEtB,OAAOtS,CACX,CAIA,SAASljB,EAAO6W,EAAIwmH,GAChB,IAAK,IAAIjnI,KAAOinI,EACZxmH,EAAGzgB,GAAOinI,EAAMjnI,GAEpB,OAAOygB,CACX,CAIA,SAAS0kC,EAASjxC,GAEd,IADA,IAAIlP,EAAM,CAAC,EACF/H,EAAI,EAAGA,EAAIiX,EAAItV,OAAQ3B,IACxBiX,EAAIjX,IACJ2M,EAAO5E,EAAKkP,EAAIjX,IAGxB,OAAO+H,CACX,CAOA,SAASoyH,EAAK75H,EAAGP,EAAGI,GAAK,CAIzB,IAAI8pI,EAAK,SAAU3pI,EAAGP,EAAGI,GAAK,OAAO,CAAO,EAKxC+pI,EAAW,SAAUnjI,GAAK,OAAOA,CAAG,EAKxC,SAASojI,EAAW7pI,EAAGP,GACnB,GAAIO,IAAMP,EACN,OAAO,EACX,IAAIqqI,EAAYhvH,EAAS9a,GACrB+pI,EAAYjvH,EAASrb,GACzB,IAAIqqI,IAAaC,EA+BZ,OAAKD,IAAcC,GACbjvI,OAAOkF,KAAOlF,OAAO2E,GA/B5B,IACI,IAAIuqI,EAAW/uI,MAAMsS,QAAQvN,GACzBiqI,EAAWhvI,MAAMsS,QAAQ9N,GAC7B,GAAIuqI,GAAYC,EACZ,OAAQjqI,EAAEqB,SAAW5B,EAAE4B,QACnBrB,EAAE40B,OAAM,SAAU93B,EAAG4C,GACjB,OAAOmqI,EAAW/sI,EAAG2C,EAAEC,GAC3B,IAEH,GAAIM,aAAaiD,MAAQxD,aAAawD,KACvC,OAAOjD,EAAEoqD,YAAc3qD,EAAE2qD,UAExB,GAAK4/E,GAAaC,EAUnB,OAAO,EATP,IAAIC,EAAQlvI,OAAOsQ,KAAKtL,GACpBmqI,EAAQnvI,OAAOsQ,KAAK7L,GACxB,OAAQyqI,EAAM7oI,SAAW8oI,EAAM9oI,QAC3B6oI,EAAMt1G,OAAM,SAAUnyB,GAClB,OAAOonI,EAAW7pI,EAAEyC,GAAMhD,EAAEgD,GAChC,GAMZ,CACA,MAAO3F,GAEH,OAAO,CACX,CAQR,CAMA,SAASstI,EAAazzH,EAAKhb,GACvB,IAAK,IAAI+D,EAAI,EAAGA,EAAIiX,EAAItV,OAAQ3B,IAC5B,GAAImqI,EAAWlzH,EAAIjX,GAAI/D,GACnB,OAAO+D,EAEf,OAAQ,CACZ,CAIA,SAAS6G,EAAKV,GACV,IAAIm9H,GAAS,EACb,OAAO,WACEA,IACDA,GAAS,EACTn9H,EAAGzC,MAAMzJ,KAAMyH,WAEvB,CACJ,CAEA,SAASipI,EAAW1nH,EAAGjgB,GACnB,OAAIigB,IAAMjgB,EACO,IAANigB,GAAW,EAAIA,IAAM,EAAIjgB,EAGzBigB,IAAMA,GAAKjgB,IAAMA,CAEhC,CAEA,IAAI4nI,EAAW,uBACXC,EAAc,CAAC,YAAa,YAAa,UACzCC,EAAkB,CAClB,eACA,UACA,cACA,UACA,eACA,UACA,gBACA,YACA,YACA,cACA,gBACA,iBACA,gBACA,mBAGA5hI,EAAS,CAKT0zH,sBAAuBthI,OAAOyI,OAAO,MAIrCy0C,QAAQ,EAIRuyF,eAAe,EAIfC,UAAU,EAIVzL,aAAa,EAIb0L,aAAc,KAIdC,YAAa,KAIbC,gBAAiB,GAKjBC,SAAU9vI,OAAOyI,OAAO,MAKxBsnI,cAAepB,EAKfqB,eAAgBrB,EAKhBsB,iBAAkBtB,EAIlBuB,gBAAiBrR,EAIjBsR,qBAAsBvB,EAKtBwB,YAAazB,EAKb37H,OAAO,EAIPq9H,gBAAiBb,GAQjBc,EAAgB,8JAIpB,SAASC,EAAW/8H,GAChB,IAAI3O,GAAK2O,EAAM,IAAIgO,WAAW,GAC9B,OAAa,KAAN3c,GAAoB,KAANA,CACzB,CAIA,SAASyiI,EAAIvnH,EAAKtY,EAAK9G,EAAK0G,GACxBrH,OAAOwH,eAAeuY,EAAKtY,EAAK,CAC5B5H,MAAOc,EACP0G,aAAcA,EACdE,UAAU,EACVD,cAAc,GAEtB,CAIA,IAAIkpI,EAAS,IAAI56H,OAAO,KAAKzR,OAAOmsI,EAAcrwH,OAAQ,YAC1D,SAASuvB,EAAU9xB,GACf,IAAI8yH,EAAO/8H,KAAKiK,GAAhB,CAGA,IAAI0N,EAAW1N,EAAKb,MAAM,KAC1B,OAAO,SAAUkD,GACb,IAAK,IAAIrb,EAAI,EAAGA,EAAI0mB,EAAS/kB,OAAQ3B,IAAK,CACtC,IAAKqb,EACD,OACJA,EAAMA,EAAIqL,EAAS1mB,GACvB,CACA,OAAOqb,CACX,CATA,CAUJ,CAGA,IAAI0wH,EAAW,aAAe,CAAC,EAE3B9O,EAA8B,qBAAXh8H,OACnB+qI,GAAK/O,GAAah8H,OAAOkpC,UAAUG,UAAUtuB,cAC7CqzC,GAAO28E,IAAM,eAAej9H,KAAKi9H,IACjCC,GAAQD,IAAMA,GAAGlgI,QAAQ,YAAc,EACvCogI,GAASF,IAAMA,GAAGlgI,QAAQ,SAAW,EACzCkgI,IAAMA,GAAGlgI,QAAQ,WACjB,IAAIqgI,GAAQH,IAAM,uBAAuBj9H,KAAKi9H,IAC9CA,IAAM,cAAcj9H,KAAKi9H,IACzBA,IAAM,YAAYj9H,KAAKi9H,IACvB,IAoBII,GApBAC,GAAOL,IAAMA,GAAG9vH,MAAM,kBAGtBowH,GAAc,CAAC,EAAExwI,MACjBywI,IAAkB,EACtB,GAAItP,EACA,IACI,IAAIhuH,GAAO,CAAC,EACZ3T,OAAOwH,eAAemM,GAAM,UAAW,CACnChS,IAAK,WAEDsvI,IAAkB,CACtB,IAEJtrI,OAAOyE,iBAAiB,eAAgB,KAAMuJ,GAClD,CACA,MAAO7R,IAAK,CAKhB,IAAIovI,GAAoB,WAapB,YAZkBpiI,IAAdgiI,KASIA,IAPCnP,GAA+B,qBAAX,EAAAwP,IAIjB,EAAAA,EAAO,YAAgD,WAAlC,EAAAA,EAAO,WAAWte,IAAIue,UAMhDN,EACX,EAEIpB,GAAW/N,GAAah8H,OAAO0rI,6BAEnC,SAASC,GAASC,GACd,MAAuB,oBAATA,GAAuB,cAAc99H,KAAK89H,EAAKrpI,WACjE,CACA,IAIIspI,GAJA1J,GAA8B,qBAAXrhI,QACnB6qI,GAAS7qI,SACU,qBAAZoB,SACPypI,GAASzpI,QAAQ4pI,SAIjBD,GAFwC,qBAARE,KAAuBJ,GAASI,KAEzDA,IAIe,WAClB,SAASA,IACL/yI,KAAK0D,IAAMrC,OAAOyI,OAAO,KAC7B,CAUA,OATAipI,EAAI9qI,UAAUylB,IAAM,SAAU5kB,GAC1B,OAAyB,IAAlB9I,KAAK0D,IAAIoF,EACpB,EACAiqI,EAAI9qI,UAAUnD,IAAM,SAAUgE,GAC1B9I,KAAK0D,IAAIoF,IAAO,CACpB,EACAiqI,EAAI9qI,UAAU4K,MAAQ,WAClB7S,KAAK0D,IAAMrC,OAAOyI,OAAO,KAC7B,EACOipI,CACX,CAdqB,GAiBzB,IAAIC,GAAkB,KActB,SAASC,GAAmBpW,QACb,IAAPA,IAAiBA,EAAK,MACrBA,GACDmW,IAAmBA,GAAgBE,OAAOrmI,MAC9CmmI,GAAkBnW,EAClBA,GAAMA,EAAGqW,OAAO3yI,IACpB,CAKA,IAAI4yI,GAAuB,WACvB,SAASA,EAAMjiF,EAAK7uD,EAAMkmB,EAAUlgB,EAAM+qI,EAAK7uI,EAAS8uI,EAAkBC,GACtEtzI,KAAKkxD,IAAMA,EACXlxD,KAAKqC,KAAOA,EACZrC,KAAKuoB,SAAWA,EAChBvoB,KAAKqI,KAAOA,EACZrI,KAAKozI,IAAMA,EACXpzI,KAAKqrD,QAAKl7C,EACVnQ,KAAKuE,QAAUA,EACfvE,KAAKuzI,eAAYpjI,EACjBnQ,KAAKwzI,eAAYrjI,EACjBnQ,KAAKyzI,eAAYtjI,EACjBnQ,KAAK8I,IAAMzG,GAAQA,EAAKyG,IACxB9I,KAAKqzI,iBAAmBA,EACxBrzI,KAAK+8H,uBAAoB5sH,EACzBnQ,KAAK0E,YAASyL,EACdnQ,KAAK0/H,KAAM,EACX1/H,KAAK4hI,UAAW,EAChB5hI,KAAK0zI,cAAe,EACpB1zI,KAAK2zI,WAAY,EACjB3zI,KAAK4zI,UAAW,EAChB5zI,KAAK6zI,QAAS,EACd7zI,KAAKszI,aAAeA,EACpBtzI,KAAK8zI,eAAY3jI,EACjBnQ,KAAK+zI,oBAAqB,CAC9B,CAUA,OATA1yI,OAAOwH,eAAesqI,EAAMlrI,UAAW,QAAS,CAG5CjF,IAAK,WACD,OAAOhD,KAAK+8H,iBAChB,EACAr0H,YAAY,EACZC,cAAc,IAEXwqI,CACX,CApC0B,GAqCtBa,GAAmB,SAAU3rI,QAChB,IAATA,IAAmBA,EAAO,IAC9B,IAAIyD,EAAO,IAAIqnI,GAGf,OAFArnI,EAAKzD,KAAOA,EACZyD,EAAK6nI,WAAY,EACV7nI,CACX,EACA,SAASmoI,GAAgBjyI,GACrB,OAAO,IAAImxI,QAAMhjI,OAAWA,OAAWA,EAAWhP,OAAOa,GAC7D,CAKA,SAASkyI,GAAWnkI,GAChB,IAAIokI,EAAS,IAAIhB,GAAMpjI,EAAMmhD,IAAKnhD,EAAM1N,KAIxC0N,EAAMwY,UAAYxY,EAAMwY,SAASxb,QAASgD,EAAM1H,KAAM0H,EAAMqjI,IAAKrjI,EAAMxL,QAASwL,EAAMsjI,iBAAkBtjI,EAAMujI,cAU9G,OATAa,EAAO9oF,GAAKt7C,EAAMs7C,GAClB8oF,EAAOvS,SAAW7xH,EAAM6xH,SACxBuS,EAAOrrI,IAAMiH,EAAMjH,IACnBqrI,EAAOR,UAAY5jI,EAAM4jI,UACzBQ,EAAOZ,UAAYxjI,EAAMwjI,UACzBY,EAAOX,UAAYzjI,EAAMyjI,UACzBW,EAAOV,UAAY1jI,EAAM0jI,UACzBU,EAAOL,UAAY/jI,EAAM+jI,UACzBK,EAAOP,UAAW,EACXO,CACX,CAiBA,IAWIC,GAAQ,EACRC,GAAqB,GACrBC,GAAc,WACd,IAAK,IAAIvuI,EAAI,EAAGA,EAAIsuI,GAAmB3sI,OAAQ3B,IAAK,CAChD,IAAI2kD,EAAM2pF,GAAmBtuI,GAC7B2kD,EAAI6pF,KAAO7pF,EAAI6pF,KAAKlxG,QAAO,SAAUn7B,GAAK,OAAOA,CAAG,IACpDwiD,EAAI8pF,UAAW,CACnB,CACAH,GAAmB3sI,OAAS,CAChC,EAMI+sI,GAAqB,WACrB,SAASA,IAELz0I,KAAKw0I,UAAW,EAChBx0I,KAAK6Q,GAAKujI,KACVp0I,KAAKu0I,KAAO,EAChB,CAyCA,OAxCAE,EAAIxsI,UAAUysI,OAAS,SAAUC,GAC7B30I,KAAKu0I,KAAK7nI,KAAKioI,EACnB,EACAF,EAAIxsI,UAAU2sI,UAAY,SAAUD,GAKhC30I,KAAKu0I,KAAKv0I,KAAKu0I,KAAK1iI,QAAQ8iI,IAAQ,KAC/B30I,KAAKw0I,WACNx0I,KAAKw0I,UAAW,EAChBH,GAAmB3nI,KAAK1M,MAEhC,EACAy0I,EAAIxsI,UAAU4sI,OAAS,SAAUC,GACzBL,EAAIrsI,QACJqsI,EAAIrsI,OAAO2sI,OAAO/0I,KAK1B,EACAy0I,EAAIxsI,UAAU+sI,OAAS,SAAUF,GAE7B,IAAIP,EAAOv0I,KAAKu0I,KAAKlxG,QAAO,SAAUn7B,GAAK,OAAOA,CAAG,IAOrD,IAAK,IAAInC,EAAI,EAAG8B,EAAI0sI,EAAK7sI,OAAQ3B,EAAI8B,EAAG9B,IAAK,CACzC,IAAI4uI,EAAMJ,EAAKxuI,GACX,EAIJ4uI,EAAIrkI,QACR,CACJ,EACOmkI,CACX,CAhDwB,GAoDxBA,GAAIrsI,OAAS,KACb,IAAI6sI,GAAc,GAClB,SAASC,GAAW9sI,GAChB6sI,GAAYvoI,KAAKtE,GACjBqsI,GAAIrsI,OAASA,CACjB,CACA,SAAS+sI,KACLF,GAAY5wH,MACZowH,GAAIrsI,OAAS6sI,GAAYA,GAAYvtI,OAAS,EAClD,CAMA,IAAI0tI,GAAa9zI,MAAM2G,UACnBotI,GAAeh0I,OAAOyI,OAAOsrI,IAC7BE,GAAiB,CACjB,OACA,MACA,QACA,UACA,SACA,OACA,WAKJA,GAAeprI,SAAQ,SAAU+8E,GAE7B,IAAI38B,EAAW8qF,GAAWnuD,GAC1B0hD,EAAI0M,GAAcpuD,GAAQ,WAEtB,IADA,IAAIvxD,EAAO,GACF6/G,EAAK,EAAGA,EAAK9tI,UAAUC,OAAQ6tI,IACpC7/G,EAAK6/G,GAAM9tI,UAAU8tI,GAEzB,IAEIC,EAFAt9H,EAASoyC,EAAS7gD,MAAMzJ,KAAM01B,GAC9B+/G,EAAKz1I,KAAK01I,OAEd,OAAQzuD,GACJ,IAAK,OACL,IAAK,UACDuuD,EAAW9/G,EACX,MACJ,IAAK,SACD8/G,EAAW9/G,EAAK3oB,MAAM,GACtB,MAeR,OAbIyoI,GACAC,EAAGE,aAAaH,GAUhBC,EAAG/qF,IAAIsqF,SAEJ98H,CACX,GACJ,IAEA,IAAI09H,GAAYv0I,OAAOutD,oBAAoBymF,IACvCQ,GAAmB,CAAC,EAKpBC,IAAgB,EACpB,SAASC,GAAgB70I,GACrB40I,GAAgB50I,CACpB,CAEA,IAAI80I,GAAU,CACVhB,OAAQ9U,EACR2U,OAAQ3U,EACRwU,OAAQxU,EACR0U,UAAW1U,GAQX+V,GAA0B,WAC1B,SAASA,EAAS/0I,EAAOg1I,EAASC,GAU9B,QATgB,IAAZD,IAAsBA,GAAU,QACvB,IAATC,IAAmBA,GAAO,GAC9Bn2I,KAAKkB,MAAQA,EACblB,KAAKk2I,QAAUA,EACfl2I,KAAKm2I,KAAOA,EAEZn2I,KAAK0qD,IAAMyrF,EAAOH,GAAU,IAAIvB,GAChCz0I,KAAKo2I,QAAU,EACfzN,EAAIznI,EAAO,SAAUlB,MACjB4T,EAAQ1S,GAAQ,CAChB,IAAKi1I,EACD,GAAIrE,EACA5wI,EAAM+H,UAAYosI,QAIlB,IAAK,IAAItvI,EAAI,EAAG8B,EAAI+tI,GAAUluI,OAAQ3B,EAAI8B,EAAG9B,IAAK,CAC9C,IAAI+C,EAAM8sI,GAAU7vI,GACpB4iI,EAAIznI,EAAO4H,EAAKusI,GAAavsI,GACjC,CAGHotI,GACDl2I,KAAK21I,aAAaz0I,EAE1B,KAOI,KAAIyQ,EAAOtQ,OAAOsQ,KAAKzQ,GACvB,IAAS6E,EAAI,EAAGA,EAAI4L,EAAKjK,OAAQ3B,IAAK,CAC9B+C,EAAM6I,EAAK5L,GACfw8H,GAAerhI,EAAO4H,EAAK+sI,QAAkB1lI,EAAW+lI,EAASC,EACrE,CAJ6B,CAMrC,CASA,OALAF,EAAShuI,UAAU0tI,aAAe,SAAUz0I,GACxC,IAAK,IAAI6E,EAAI,EAAG8B,EAAI3G,EAAMwG,OAAQ3B,EAAI8B,EAAG9B,IACrCswI,GAAQn1I,EAAM6E,IAAI,EAAO/F,KAAKm2I,KAEtC,EACOF,CACX,CAlD6B,GAyD7B,SAASI,GAAQn1I,EAAOg1I,EAASI,GAC7B,OAAIp1I,GAASiuI,EAAOjuI,EAAO,WAAaA,EAAMw0I,kBAAkBO,GACrD/0I,EAAMw0I,QAEbI,KACCQ,GAAsB/D,OACtB3+H,EAAQ1S,KAAUytI,EAAcztI,KACjCG,OAAO6uD,aAAahvD,IACnBA,EAAMq1I,UACNC,GAAMt1I,IACLA,aAAiBiyI,QANvB,EAOW,IAAI8C,GAAS/0I,EAAOg1I,EAASI,EAE5C,CAIA,SAAS/T,GAAenhH,EAAKtY,EAAK9G,EAAKy0I,EAAcP,EAASC,GAC1D,IAAIzrF,EAAM,IAAI+pF,GACVjmF,EAAWntD,OAAOitD,yBAAyBltC,EAAKtY,GACpD,IAAI0lD,IAAsC,IAA1BA,EAAS7lD,aAAzB,CAIA,IAAI+lD,EAASF,GAAYA,EAASxrD,IAC9B2rD,EAASH,GAAYA,EAAS9qD,IAC5BgrD,IAAUC,GACX3sD,IAAQ6zI,IAAyC,IAArBpuI,UAAUC,SACvC1F,EAAMof,EAAItY,IAEd,IAAI4tI,GAAWR,GAAWG,GAAQr0I,GAAK,EAAOm0I,GA+D9C,OA9DA90I,OAAOwH,eAAeuY,EAAKtY,EAAK,CAC5BJ,YAAY,EACZC,cAAc,EACd3F,IAAK,WACD,IAAI9B,EAAQwtD,EAASA,EAAO9pD,KAAKwc,GAAOpf,EAmBxC,OAlBIyyI,GAAIrsI,SASAsiD,EAAImqF,SAEJ6B,IACAA,EAAQhsF,IAAImqF,SACRjhI,EAAQ1S,IACRy1I,GAAYz1I,KAIjBs1I,GAAMt1I,KAAWg1I,EAAUh1I,EAAMA,MAAQA,CACpD,EACAwC,IAAK,SAAwBkzI,GACzB,IAAI11I,EAAQwtD,EAASA,EAAO9pD,KAAKwc,GAAOpf,EACxC,GAAK0uI,EAAWxvI,EAAO01I,GAAvB,CAMA,GAAIjoF,EACAA,EAAO/pD,KAAKwc,EAAKw1H,OAEhB,IAAIloF,EAEL,OAEC,IAAKwnF,GAAWM,GAAMt1I,KAAWs1I,GAAMI,GAExC,YADA11I,EAAMA,MAAQ01I,GAId50I,EAAM40I,CACV,CACAF,GAAWR,GAAWG,GAAQO,GAAQ,EAAOT,GAWzCzrF,EAAIsqF,QA7BR,CA+BJ,IAEGtqF,CAvEP,CAwEJ,CACA,SAAShnD,GAAI0E,EAAQU,EAAK9G,GAItB,IAAI60I,GAAWzuI,GAAf,CAIA,IAAIqtI,EAAKrtI,EAAOstI,OAChB,OAAI9hI,EAAQxL,IAAWymI,EAAkB/lI,IACrCV,EAAOV,OAASme,KAAKkf,IAAI38B,EAAOV,OAAQoB,GACxCV,EAAOsc,OAAO5b,EAAK,EAAG9G,GAElByzI,IAAOA,EAAGS,SAAWT,EAAGU,MACxBE,GAAQr0I,GAAK,GAAO,GAEjBA,GAEP8G,KAAOV,KAAYU,KAAOzH,OAAO4G,YACjCG,EAAOU,GAAO9G,EACPA,GAEPoG,EAAO0uI,QAAWrB,GAAMA,EAAGW,QAIpBp0I,EAENyzI,GAILlT,GAAekT,EAAGv0I,MAAO4H,EAAK9G,OAAKmO,EAAWslI,EAAGS,QAAST,EAAGU,MAWzDV,EAAG/qF,IAAIsqF,SAEJhzI,IAhBHoG,EAAOU,GAAO9G,EACPA,EAvBX,CAuCJ,CACA,SAAS+U,GAAI3O,EAAQU,GAIjB,GAAI8K,EAAQxL,IAAWymI,EAAkB/lI,GACrCV,EAAOsc,OAAO5b,EAAK,OADvB,CAIA,IAAI2sI,EAAKrtI,EAAOstI,OACZttI,EAAO0uI,QAAWrB,GAAMA,EAAGW,SAM3BS,GAAWzuI,IAKV+mI,EAAO/mI,EAAQU,YAGbV,EAAOU,GACT2sI,GAWDA,EAAG/qF,IAAIsqF,SA5BX,CA8BJ,CAKA,SAAS2B,GAAYz1I,GACjB,IAAK,IAAIiC,OAAI,EAAQ4C,EAAI,EAAG8B,EAAI3G,EAAMwG,OAAQ3B,EAAI8B,EAAG9B,IACjD5C,EAAIjC,EAAM6E,GACN5C,GAAKA,EAAEuyI,QACPvyI,EAAEuyI,OAAOhrF,IAAImqF,SAEbjhI,EAAQzQ,IACRwzI,GAAYxzI,EAGxB,CAWA,SAAS4zI,GAAgB3uI,GAGrB,OAFA4uI,GAAa5uI,GAAQ,GACrBugI,EAAIvgI,EAAQ,iBAAgD,GACrDA,CACX,CACA,SAAS4uI,GAAa5uI,EAAQ8tI,GAE1B,IAAKW,GAAWzuI,GAAS,CAUZiuI,GAAQjuI,EAAQ8tI,EAAS3D,MAC9B,CAQR,CACJ,CAUA,SAASsE,GAAW31I,GAChB,SAAUA,IAASA,EAAM+1I,eAC7B,CA2BA,SAAST,GAAMvwI,GACX,SAAUA,IAAqB,IAAhBA,EAAEixI,UACrB,CA+CA,SAASC,GAAmB/uI,EAAQkZ,EAAQxY,GACxCzH,OAAOwH,eAAeT,EAAQU,EAAK,CAC/BJ,YAAY,EACZC,cAAc,EACd3F,IAAK,WACD,IAAIhB,EAAMsf,EAAOxY,GACjB,GAAI0tI,GAAMx0I,GACN,OAAOA,EAAId,MAGX,IAAIu0I,EAAKzzI,GAAOA,EAAI0zI,OAGpB,OAFID,GACAA,EAAG/qF,IAAImqF,SACJ7yI,CAEf,EACA0B,IAAK,SAAUxC,GACX,IAAI+pC,EAAW3pB,EAAOxY,GAClB0tI,GAAMvrG,KAAcurG,GAAMt1I,GAC1B+pC,EAAS/pC,MAAQA,EAGjBogB,EAAOxY,GAAO5H,CAEtB,GAER,CAoMA,IAAIk2I,GAAU,UACG,GAAG5xI,OAAO4xI,GAAS,aACf,GAAG5xI,OAAO4xI,GAAS,WAClB,GAAG5xI,OAAO4xI,GAAS,YAczC,IAqMIC,GACJ,IAAIC,GAA6B,WAC7B,SAASA,EAAYC,QACA,IAAbA,IAAuBA,GAAW,GACtCv3I,KAAKu3I,SAAWA,EAIhBv3I,KAAKw3I,QAAS,EAIdx3I,KAAKy3I,QAAU,GAIfz3I,KAAK03I,SAAW,GAChB13I,KAAK0E,OAAS2yI,IACTE,GAAYF,KACbr3I,KAAKwc,OACA66H,GAAkBM,SAAWN,GAAkBM,OAAS,KAAKjrI,KAAK1M,MAAQ,EAEvF,CAyDA,OAxDAs3I,EAAYrvI,UAAU2vI,IAAM,SAAU1rI,GAClC,GAAIlM,KAAKw3I,OAAQ,CACb,IAAIK,EAAqBR,GACzB,IAEI,OADAA,GAAoBr3I,KACbkM,GACX,CACA,QACImrI,GAAoBQ,CACxB,CACJ,MACS,CAGb,EAKAP,EAAYrvI,UAAU1H,GAAK,WACvB82I,GAAoBr3I,IACxB,EAKAs3I,EAAYrvI,UAAU4E,IAAM,WACxBwqI,GAAoBr3I,KAAK0E,MAC7B,EACA4yI,EAAYrvI,UAAU69D,KAAO,SAAUgyE,GACnC,GAAI93I,KAAKw3I,OAAQ,CACb,IAAIzxI,OAAI,EAAQ8B,OAAI,EACpB,IAAK9B,EAAI,EAAG8B,EAAI7H,KAAKy3I,QAAQ/vI,OAAQ3B,EAAI8B,EAAG9B,IACxC/F,KAAKy3I,QAAQ1xI,GAAG4lI,WAEpB,IAAK5lI,EAAI,EAAG8B,EAAI7H,KAAK03I,SAAShwI,OAAQ3B,EAAI8B,EAAG9B,IACzC/F,KAAK03I,SAAS3xI,KAElB,GAAI/F,KAAK23I,OACL,IAAK5xI,EAAI,EAAG8B,EAAI7H,KAAK23I,OAAOjwI,OAAQ3B,EAAI8B,EAAG9B,IACvC/F,KAAK23I,OAAO5xI,GAAG+/D,MAAK,GAI5B,IAAK9lE,KAAKu3I,UAAYv3I,KAAK0E,SAAWozI,EAAY,CAE9C,IAAIvzH,EAAOvkB,KAAK0E,OAAOizI,OAAOtzH,MAC1BE,GAAQA,IAASvkB,OACjBA,KAAK0E,OAAOizI,OAAO33I,KAAKwc,OAAS+H,EACjCA,EAAK/H,MAAQxc,KAAKwc,MAE1B,CACAxc,KAAK0E,YAASyL,EACdnQ,KAAKw3I,QAAS,CAClB,CACJ,EACOF,CACX,CA/EgC,GAsFhC,SAASS,GAAkBC,EAAQlxD,QACjB,IAAVA,IAAoBA,EAAQuwD,IAC5BvwD,GAASA,EAAM0wD,QACf1wD,EAAM2wD,QAAQ/qI,KAAKsrI,EAE3B,CACA,SAASC,KACL,OAAOZ,EACX,CAsBA,SAASa,GAAgBrb,GAMrB,IAAIv3H,EAAWu3H,EAAGsb,UACdC,EAAiBvb,EAAGR,SAAWQ,EAAGR,QAAQ8b,UAC9C,OAAIC,IAAmB9yI,EACXu3H,EAAGsb,UAAY92I,OAAOyI,OAAOsuI,GAG9B9yI,CAEf,CA6BA,IAAI+yI,GAAiBhhI,GAAO,SAAU7E,GAClC,IAAI8lI,EAA6B,MAAnB9lI,EAAKmR,OAAO,GAC1BnR,EAAO8lI,EAAU9lI,EAAKzF,MAAM,GAAKyF,EACjC,IAAI5F,EAA0B,MAAnB4F,EAAKmR,OAAO,GACvBnR,EAAO5F,EAAO4F,EAAKzF,MAAM,GAAKyF,EAC9B,IAAIskD,EAA6B,MAAnBtkD,EAAKmR,OAAO,GAE1B,OADAnR,EAAOskD,EAAUtkD,EAAKzF,MAAM,GAAKyF,EAC1B,CACHA,KAAMA,EACN5F,KAAMA,EACNkqD,QAASA,EACTwhF,QAASA,EAEjB,IACA,SAASC,GAAgBC,EAAK3b,GAC1B,SAAS4b,IACL,IAAID,EAAMC,EAAQD,IAClB,IAAI5kI,EAAQ4kI,GAQR,OAAOE,GAAwBF,EAAK,KAAM/wI,UAAWo1H,EAAI,gBANzD,IADA,IAAIsX,EAASqE,EAAIzrI,QACRhH,EAAI,EAAGA,EAAIouI,EAAOzsI,OAAQ3B,IAC/B2yI,GAAwBvE,EAAOpuI,GAAI,KAAM0B,UAAWo1H,EAAI,eAOpE,CAEA,OADA4b,EAAQD,IAAMA,EACPC,CACX,CACA,SAASE,GAAgBp4I,EAAIq4I,EAAO9zI,EAAKyC,EAAQsxI,EAAmBhc,GAChE,IAAIrqH,EAAMsmI,EAAKnqE,EAAKtpC,EACpB,IAAK7yB,KAAQjS,EACTu4I,EAAMv4I,EAAGiS,GACTm8D,EAAMiqE,EAAMpmI,GACZ6yB,EAAQgzG,GAAe7lI,GACnB87H,EAAQwK,KAIHxK,EAAQ3/D,IACT2/D,EAAQwK,EAAIN,OACZM,EAAMv4I,EAAGiS,GAAQ+lI,GAAgBO,EAAKjc,IAEtC0R,EAAOlpG,EAAMz4B,QACbksI,EAAMv4I,EAAGiS,GAAQqmI,EAAkBxzG,EAAM7yB,KAAMsmI,EAAKzzG,EAAMyxB,UAE9DhyD,EAAIugC,EAAM7yB,KAAMsmI,EAAKzzG,EAAMyxB,QAASzxB,EAAMizG,QAASjzG,EAAMnD,SAEpD42G,IAAQnqE,IACbA,EAAI6pE,IAAMM,EACVv4I,EAAGiS,GAAQm8D,IAGnB,IAAKn8D,KAAQomI,EACLtK,EAAQ/tI,EAAGiS,MACX6yB,EAAQgzG,GAAe7lI,GACvBjL,EAAO89B,EAAM7yB,KAAMomI,EAAMpmI,GAAO6yB,EAAMyxB,SAGlD,CAEA,SAASiiF,GAAepQ,EAAKqQ,EAAS70I,GAIlC,IAAIs0I,EAHA9P,aAAewK,KACfxK,EAAMA,EAAItmI,KAAK8B,OAASwkI,EAAItmI,KAAK8B,KAAO,CAAC,IAG7C,IAAI80I,EAAUtQ,EAAIqQ,GAClB,SAASE,IACL/0I,EAAKsF,MAAMzJ,KAAMyH,WAGjBynI,EAASuJ,EAAQD,IAAKU,EAC1B,CACI5K,EAAQ2K,GAERR,EAAUF,GAAgB,CAACW,IAIvBhX,EAAM+W,EAAQT,MAAQjK,EAAO0K,EAAQE,SAErCV,EAAUQ,EACVR,EAAQD,IAAI9rI,KAAKwsI,IAIjBT,EAAUF,GAAgB,CAACU,EAASC,IAG5CT,EAAQU,QAAS,EACjBxQ,EAAIqQ,GAAWP,CACnB,CAEA,SAASW,GAA0B/2I,EAAMuwI,EAAM1hF,GAI3C,IAAImoF,EAAczG,EAAK9vI,QAAQ7B,MAC/B,IAAIqtI,EAAQ+K,GAAZ,CAGA,IAAIvrI,EAAM,CAAC,EACPzN,EAAQgC,EAAKhC,MAAOY,EAAQoB,EAAKpB,MACrC,GAAIihI,EAAM7hI,IAAU6hI,EAAMjhI,GACtB,IAAK,IAAI6H,KAAOuwI,EAAa,CACzB,IAAI11F,EAAS8rF,EAAU3mI,GAcvBwwI,GAAUxrI,EAAK7M,EAAO6H,EAAK66C,GAAQ,IAC/B21F,GAAUxrI,EAAKzN,EAAOyI,EAAK66C,GAAQ,EAC3C,CAEJ,OAAO71C,CAvBP,CAwBJ,CACA,SAASwrI,GAAUxrI,EAAKkQ,EAAMlV,EAAK66C,EAAQ41F,GACvC,GAAIrX,EAAMlkH,GAAO,CACb,GAAImxH,EAAOnxH,EAAMlV,GAKb,OAJAgF,EAAIhF,GAAOkV,EAAKlV,GACXywI,UACMv7H,EAAKlV,IAET,EAEN,GAAIqmI,EAAOnxH,EAAM2lC,GAKlB,OAJA71C,EAAIhF,GAAOkV,EAAK2lC,GACX41F,UACMv7H,EAAK2lC,IAET,CAEf,CACA,OAAO,CACX,CAaA,SAAS61F,GAAwBjxH,GAC7B,IAAK,IAAIxiB,EAAI,EAAGA,EAAIwiB,EAAS7gB,OAAQ3B,IACjC,GAAI6N,EAAQ2U,EAASxiB,IACjB,OAAOzE,MAAM2G,UAAUzC,OAAOiE,MAAM,GAAI8e,GAGhD,OAAOA,CACX,CAKA,SAASkxH,GAAkBlxH,GACvB,OAAOkmH,EAAYlmH,GACb,CAAC0rH,GAAgB1rH,IACjB3U,EAAQ2U,GACJmxH,GAAuBnxH,QACvBpY,CACd,CACA,SAASwpI,GAAW7tI,GAChB,OAAOo2H,EAAMp2H,IAASo2H,EAAMp2H,EAAKzD,OAASmmI,EAAQ1iI,EAAK6nI,UAC3D,CACA,SAAS+F,GAAuBnxH,EAAUqxH,GACtC,IACI7zI,EAAGG,EAAGyoB,EAAWpK,EADjBzW,EAAM,GAEV,IAAK/H,EAAI,EAAGA,EAAIwiB,EAAS7gB,OAAQ3B,IAC7BG,EAAIqiB,EAASxiB,GACTuoI,EAAQpoI,IAAmB,mBAANA,IAEzByoB,EAAY7gB,EAAIpG,OAAS,EACzB6c,EAAOzW,EAAI6gB,GAEP/a,EAAQ1N,GACJA,EAAEwB,OAAS,IACXxB,EAAIwzI,GAAuBxzI,EAAG,GAAGV,OAAOo0I,GAAe,GAAI,KAAKp0I,OAAOO,IAEnE4zI,GAAWzzI,EAAE,KAAOyzI,GAAWp1H,KAC/BzW,EAAI6gB,GAAaslH,GAAgB1vH,EAAKlc,KAAOnC,EAAE,GAAGmC,MAClDnC,EAAE4d,SAENhW,EAAIpB,KAAKjD,MAAMqE,EAAK5H,IAGnBuoI,EAAYvoI,GACbyzI,GAAWp1H,GAIXzW,EAAI6gB,GAAaslH,GAAgB1vH,EAAKlc,KAAOnC,GAElC,KAANA,GAEL4H,EAAIpB,KAAKunI,GAAgB/tI,IAIzByzI,GAAWzzI,IAAMyzI,GAAWp1H,GAE5BzW,EAAI6gB,GAAaslH,GAAgB1vH,EAAKlc,KAAOnC,EAAEmC,OAI3CkmI,EAAOhmH,EAASsxH,WAChB3X,EAAMh8H,EAAEgrD,MACRo9E,EAAQpoI,EAAE4C,MACVo5H,EAAM0X,KACN1zI,EAAE4C,IAAM,UAAUtD,OAAOo0I,EAAa,KAAKp0I,OAAOO,EAAG,OAEzD+H,EAAIpB,KAAKxG,KAIrB,OAAO4H,CACX,CAKA,SAASgsI,GAAW93I,EAAKlC,GACrB,IAAgBiG,EAAG8B,EAAG8J,EAAM7I,EAAxB8sB,EAAM,KACV,GAAIhiB,EAAQ5R,IAAuB,kBAARA,EAEvB,IADA4zB,EAAM,IAAIt0B,MAAMU,EAAI0F,QACf3B,EAAI,EAAG8B,EAAI7F,EAAI0F,OAAQ3B,EAAI8B,EAAG9B,IAC/B6vB,EAAI7vB,GAAKjG,EAAOkC,EAAI+D,GAAIA,QAG3B,GAAmB,kBAAR/D,EAEZ,IADA4zB,EAAM,IAAIt0B,MAAMU,GACX+D,EAAI,EAAGA,EAAI/D,EAAK+D,IACjB6vB,EAAI7vB,GAAKjG,EAAOiG,EAAI,EAAGA,QAG1B,GAAIob,EAASnf,GACd,GAAImnI,IAAannI,EAAI8F,OAAOC,UAAW,CACnC6tB,EAAM,GACN,IAAI7tB,EAAW/F,EAAI8F,OAAOC,YACtBmQ,EAASnQ,EAAS+lB,OACtB,OAAQ5V,EAAO6d,KACXH,EAAIlpB,KAAK5M,EAAOoY,EAAOhX,MAAO00B,EAAIluB,SAClCwQ,EAASnQ,EAAS+lB,MAE1B,MAII,IAFAnc,EAAOtQ,OAAOsQ,KAAK3P,GACnB4zB,EAAM,IAAIt0B,MAAMqQ,EAAKjK,QAChB3B,EAAI,EAAG8B,EAAI8J,EAAKjK,OAAQ3B,EAAI8B,EAAG9B,IAChC+C,EAAM6I,EAAK5L,GACX6vB,EAAI7vB,GAAKjG,EAAOkC,EAAI8G,GAAMA,EAAK/C,GAQ3C,OAJKm8H,EAAMtsG,KACPA,EAAM,IAEVA,EAAIikH,UAAW,EACRjkH,CACX,CAKA,SAASmkH,GAAWvnI,EAAMwnI,EAAgB/4I,EAAOg5I,GAC7C,IACI94G,EADA+4G,EAAel6I,KAAKqhI,aAAa7uH,GAEjC0nI,GAEAj5I,EAAQA,GAAS,CAAC,EACdg5I,IAIAh5I,EAAQyR,EAAOA,EAAO,CAAC,EAAGunI,GAAah5I,IAE3CkgC,EACI+4G,EAAaj5I,KACRytI,EAAWsL,GAAkBA,IAAmBA,IAGzD74G,EACInhC,KAAK2hI,OAAOnvH,KACPk8H,EAAWsL,GAAkBA,IAAmBA,GAE7D,IAAI5xI,EAASnH,GAASA,EAAMk5I,KAC5B,OAAI/xI,EACOpI,KAAK47H,eAAe,WAAY,CAAEue,KAAM/xI,GAAU+4B,GAGlDA,CAEf,CAKA,SAASi5G,GAAcvpI,GACnB,OAAOwpI,GAAar6I,KAAKiF,SAAU,UAAW4L,GAAI,IAASo/H,CAC/D,CAEA,SAASqK,GAAcC,EAAQC,GAC3B,OAAI5mI,EAAQ2mI,IAC2B,IAA5BA,EAAO1oI,QAAQ2oI,GAGfD,IAAWC,CAE1B,CAMA,SAASC,GAAcC,EAAc5xI,EAAK6xI,EAAgBC,EAAcC,GACpE,IAAIC,EAAgB7rI,EAAOkiI,SAASroI,IAAQ6xI,EAC5C,OAAIE,GAAkBD,IAAiB3rI,EAAOkiI,SAASroI,GAC5CwxI,GAAcO,EAAgBD,GAEhCE,EACER,GAAcQ,EAAeJ,GAE/BE,EACEnL,EAAUmL,KAAkB9xI,OAEfqH,IAAjBuqI,CACX,CAKA,SAASK,GAAgB14I,EAAM6uD,EAAKhwD,EAAO85I,EAAQC,GAC/C,GAAI/5I,EACA,GAAKigB,EAASjgB,GAIT,CACG0S,EAAQ1S,KACRA,EAAQ+sD,EAAS/sD,IAErB,IAAI8c,OAAO,EACPk9H,EAAU,SAAUpyI,GACpB,GAAY,UAARA,GAA2B,UAARA,GAAmBmmI,EAAoBnmI,GAC1DkV,EAAO3b,MAEN,CACD,IAAIZ,EAAOY,EAAKhC,OAASgC,EAAKhC,MAAMoB,KACpCuc,EACIg9H,GAAU/rI,EAAOwiI,YAAYvgF,EAAKzvD,EAAMqH,GAClCzG,EAAK84I,WAAa94I,EAAK84I,SAAW,CAAC,GACnC94I,EAAKhC,QAAUgC,EAAKhC,MAAQ,CAAC,EAC3C,CACA,IAAI+6I,EAAe9L,EAASxmI,GACxBuyI,EAAgB5L,EAAU3mI,GAC9B,KAAMsyI,KAAgBp9H,MAAWq9H,KAAiBr9H,KAC9CA,EAAKlV,GAAO5H,EAAM4H,GACdmyI,GAAQ,CACR,IAAI16I,EAAK8B,EAAK9B,KAAO8B,EAAK9B,GAAK,CAAC,GAChCA,EAAG,UAAUiF,OAAOsD,IAAQ,SAAUtI,GAClCU,EAAM4H,GAAOtI,CACjB,CACJ,CAER,EACA,IAAK,IAAIsI,KAAO5H,EACZg6I,EAAQpyI,EAEhB,MAEJ,OAAOzG,CACX,CAKA,SAASi5I,GAAa9+H,EAAO++H,GACzB,IAAIlkI,EAASrX,KAAKw7I,eAAiBx7I,KAAKw7I,aAAe,IACnD57F,EAAOvoC,EAAOmF,GAGlB,OAAIojC,IAAS27F,IAIb37F,EAAOvoC,EAAOmF,GAASxc,KAAKiF,SAASjE,gBAAgBwb,GAAO5X,KAAK5E,KAAKy7I,aAAcz7I,KAAKC,GAAID,MAE7F07I,GAAW97F,EAAM,aAAap6C,OAAOgX,IAAQ,IALlCojC,CAOf,CAKA,SAAS+7F,GAAS/7F,EAAMpjC,EAAO1T,GAE3B,OADA4yI,GAAW97F,EAAM,WAAWp6C,OAAOgX,GAAOhX,OAAOsD,EAAM,IAAItD,OAAOsD,GAAO,KAAK,GACvE82C,CACX,CACA,SAAS87F,GAAW97F,EAAM92C,EAAK+qI,GAC3B,GAAIjgI,EAAQgsC,GACR,IAAK,IAAI75C,EAAI,EAAGA,EAAI65C,EAAKl4C,OAAQ3B,IACzB65C,EAAK75C,IAAyB,kBAAZ65C,EAAK75C,IACvB61I,GAAeh8F,EAAK75C,GAAI,GAAGP,OAAOsD,EAAK,KAAKtD,OAAOO,GAAI8tI,QAK/D+H,GAAeh8F,EAAM92C,EAAK+qI,EAElC,CACA,SAAS+H,GAAe9vI,EAAMhD,EAAK+qI,GAC/B/nI,EAAK81H,UAAW,EAChB91H,EAAKhD,IAAMA,EACXgD,EAAK+nI,OAASA,CAClB,CAEA,SAASgI,GAAoBx5I,EAAMnB,GAC/B,GAAIA,EACA,GAAKytI,EAAcztI,GAGd,CACD,IAAIX,EAAM8B,EAAK9B,GAAK8B,EAAK9B,GAAKmS,EAAO,CAAC,EAAGrQ,EAAK9B,IAAM,CAAC,EACrD,IAAK,IAAIuI,KAAO5H,EAAO,CACnB,IAAIoE,EAAW/E,EAAGuI,GACdgzI,EAAO56I,EAAM4H,GACjBvI,EAAGuI,GAAOxD,EAAW,GAAGE,OAAOF,EAAUw2I,GAAQA,CACrD,CACJ,MAEJ,OAAOz5I,CACX,CAEA,SAAS05I,GAAmBvD,EAAK1qI,EAEjCkuI,EAAgBC,GACZnuI,EAAMA,GAAO,CAAEouI,SAAUF,GACzB,IAAK,IAAIj2I,EAAI,EAAGA,EAAIyyI,EAAI9wI,OAAQ3B,IAAK,CACjC,IAAIo0I,EAAO3B,EAAIzyI,GACX6N,EAAQumI,GACR4B,GAAmB5B,EAAMrsI,EAAKkuI,GAEzB7B,IAGDA,EAAKgC,QAELhC,EAAKjuI,GAAGiwI,OAAQ,GAEpBruI,EAAIqsI,EAAKrxI,KAAOqxI,EAAKjuI,GAE7B,CAIA,OAHI+vI,IACAnuI,EAAIqyB,KAAO87G,GAERnuI,CACX,CAGA,SAASsuI,GAAgBC,EAASt+D,GAC9B,IAAK,IAAIh4E,EAAI,EAAGA,EAAIg4E,EAAOr2E,OAAQ3B,GAAK,EAAG,CACvC,IAAI+C,EAAMi1E,EAAOh4E,GACE,kBAAR+C,GAAoBA,IAC3BuzI,EAAQt+D,EAAOh4E,IAAMg4E,EAAOh4E,EAAI,GAMxC,CACA,OAAOs2I,CACX,CAIA,SAASC,GAAgBp7I,EAAO+yC,GAC5B,MAAwB,kBAAV/yC,EAAqB+yC,EAAS/yC,EAAQA,CACxD,CAEA,SAASq7I,GAAqBn0I,GAC1BA,EAAOo0I,GAAKb,GACZvzI,EAAOq0I,GAAK3N,EACZ1mI,EAAOzH,GAAK4I,EACZnB,EAAOs0I,GAAK5C,GACZ1xI,EAAOu0I,GAAK5C,GACZ3xI,EAAOw0I,GAAK1M,EACZ9nI,EAAOmtI,GAAK9E,EACZroI,EAAOy0I,GAAKvB,GACZlzI,EAAO00I,GAAK1C,GACZhyI,EAAO20I,GAAKtC,GACZryI,EAAO40I,GAAKjC,GACZ3yI,EAAO1H,GAAKuzI,GACZ7rI,EAAOrH,GAAKizI,GACZ5rI,EAAO60I,GAAKlB,GACZ3zI,EAAO80I,GAAKrB,GACZzzI,EAAO+0I,GAAKf,GACZh0I,EAAOg1I,GAAKd,EAChB,CAKA,SAASe,GAAa90H,EAAUhkB,GAC5B,IAAKgkB,IAAaA,EAAS7gB,OACvB,MAAO,CAAC,EAGZ,IADA,IAAI41I,EAAQ,CAAC,EACJv3I,EAAI,EAAG8B,EAAI0gB,EAAS7gB,OAAQ3B,EAAI8B,EAAG9B,IAAK,CAC7C,IAAI09B,EAAQlb,EAASxiB,GACjB1D,EAAOohC,EAAMphC,KAOjB,GALIA,GAAQA,EAAKhC,OAASgC,EAAKhC,MAAM85I,aAC1B93I,EAAKhC,MAAM85I,KAIjB12G,EAAMl/B,UAAYA,GAAWk/B,EAAM8vG,YAAchvI,IAClDlC,GACa,MAAbA,EAAK83I,MAWJmD,EAAM57I,UAAY47I,EAAM57I,QAAU,KAAKgL,KAAK+2B,OAX1B,CACnB,IAAI85G,EAASl7I,EAAK83I,KACdA,EAAOmD,EAAMC,KAAYD,EAAMC,GAAU,IAC3B,aAAd95G,EAAMytB,IACNipF,EAAKztI,KAAKjD,MAAM0wI,EAAM12G,EAAMlb,UAAY,IAGxC4xH,EAAKztI,KAAK+2B,EAElB,CAIJ,CAEA,IAAK,IAAI+5G,KAAUF,EACXA,EAAME,GAAQviH,MAAMwiH,YACbH,EAAME,GAGrB,OAAOF,CACX,CACA,SAASG,GAAa3xI,GAClB,OAAQA,EAAK6nI,YAAc7nI,EAAKwnI,cAA+B,MAAdxnI,EAAKzD,IAC1D,CAEA,SAAS0rI,GAAmBjoI,GAExB,OAAOA,EAAK6nI,WAAa7nI,EAAKwnI,YAClC,CAEA,SAASoK,GAAqBC,EAASC,EAAaC,EAAaC,GAC7D,IAAIhwI,EACAiwI,EAAiB18I,OAAOsQ,KAAKksI,GAAan2I,OAAS,EACnDs2I,EAAWJ,IAAgBA,EAAY1B,SAAW6B,EAClDj1I,EAAM80I,GAAeA,EAAYz9G,KACrC,GAAKy9G,EAGA,IAAIA,EAAYje,YAEjB,OAAOie,EAAYje,YAElB,GAAIqe,GACLF,GACAA,IAAoBzP,GACpBvlI,IAAQg1I,EAAgB39G,OACvB49G,IACAD,EAAgBxc,WAGjB,OAAOwc,EAIP,IAAK,IAAIG,KADTnwI,EAAM,CAAC,EACW8vI,EACVA,EAAYK,IAAuB,MAAbA,EAAM,KAC5BnwI,EAAImwI,GAASC,GAAoBP,EAASE,EAAaI,EAAOL,EAAYK,IAGtF,MAvBInwI,EAAM,CAAC,EAyBX,IAAK,IAAIqwI,KAASN,EACRM,KAASrwI,IACXA,EAAIqwI,GAASC,GAAgBP,EAAaM,IAWlD,OANIP,GAAev8I,OAAO6uD,aAAa0tF,KACnCA,EAAYje,YAAc7xH,GAE9B66H,EAAI76H,EAAK,UAAWkwI,GACpBrV,EAAI76H,EAAK,OAAQhF,GACjB6/H,EAAI76H,EAAK,aAAciwI,GAChBjwI,CACX,CACA,SAASowI,GAAoBrhB,EAAIghB,EAAa/0I,EAAKoD,GAC/C,IAAImyI,EAAa,WACb,IAAIvF,EAAM9F,GACVC,GAAmBpW,GACnB,IAAI/uH,EAAMrG,UAAUC,OAASwE,EAAGzC,MAAM,KAAMhC,WAAayE,EAAG,CAAC,GAC7D4B,EACIA,GAAsB,kBAARA,IAAqB8F,EAAQ9F,GACrC,CAACA,GACD2rI,GAAkB3rI,GAC5B,IAAIiC,EAAQjC,GAAOA,EAAI,GAEvB,OADAmlI,GAAmB6F,GACZhrI,KACDiC,GACkB,IAAfjC,EAAIpG,QAAgBqI,EAAM4jI,YAAcI,GAAmBhkI,SAC9DI,EACArC,CACV,EAWA,OAPI5B,EAAGiwI,OACH96I,OAAOwH,eAAeg1I,EAAa/0I,EAAK,CACpC9F,IAAKq7I,EACL31I,YAAY,EACZC,cAAc,IAGf01I,CACX,CACA,SAASD,GAAgBd,EAAOx0I,GAC5B,OAAO,WAAc,OAAOw0I,EAAMx0I,EAAM,CAC5C,CAEA,SAASw1I,GAAUzhB,GACf,IAAI/5H,EAAU+5H,EAAG53H,SACboU,EAAQvW,EAAQuW,MACpB,GAAIA,EAAO,CACP,IAAI1M,EAAOkwH,EAAG0hB,cAAgBC,GAAmB3hB,GACjDoW,GAAmBpW,GACnBqY,KACA,IAAIuJ,EAAc/F,GAAwBr/H,EAAO,KAAM,CAACwjH,EAAG6hB,QAAU3H,GAAgB,CAAC,GAAIpqI,GAAMkwH,EAAI,SAGpG,GAFAsY,KACAlC,KACIvE,EAAW+P,GAGX37I,EAAQhD,OAAS2+I,OAEhB,GAAIt9H,EAASs9H,GAQd,GAFA5hB,EAAG8hB,YAAcF,EAEZA,EAAYG,MAUZ,CAED,IAAIzC,EAAStf,EAAGgiB,YAAc,CAAC,EAC/B,IAAK,IAAI/1I,KAAO21I,EACA,UAAR31I,GACAquI,GAAmBgF,EAAOsC,EAAa31I,EAGnD,MAjBI,IAAK,IAAIA,KAAO21I,EACP7M,EAAW9oI,IACZquI,GAAmBta,EAAI4hB,EAAa31I,QAiB3C,CAGb,CACJ,CACA,SAAS01I,GAAmB3hB,GAExB,MAAO,CACH,SAAIx8H,GACA,IAAKw8H,EAAGiiB,YAAa,CACjB,IAAI3C,EAAStf,EAAGiiB,YAAc,CAAC,EAC/BnW,EAAIwT,EAAO,iBAAiB,GAC5B4C,GAAe5C,EAAOtf,EAAGmiB,OAAQ3Q,EAAaxR,EAAI,SACtD,CACA,OAAOA,EAAGiiB,WACd,EACA,aAAIzwE,GACA,IAAKwuD,EAAGoiB,gBAAiB,CACrB,IAAI9C,EAAStf,EAAGoiB,gBAAkB,CAAC,EACnCF,GAAe5C,EAAOtf,EAAGqiB,WAAY7Q,EAAaxR,EAAI,aAC1D,CACA,OAAOA,EAAGoiB,eACd,EACA,SAAI3B,GACA,OAAO6B,GAAetiB,EAC1B,EACAnyH,KAAMiB,EAAKkxH,EAAG55H,MAAO45H,GACrBuiB,OAAQ,SAAUC,GAOVA,GACAh+I,OAAOsQ,KAAK0tI,GAASn1I,SAAQ,SAAUpB,GACnC,OAAOquI,GAAmBta,EAAIwiB,EAASv2I,EAC3C,GAER,EAER,CACA,SAASi2I,GAAex1H,EAAIuiC,EAAMhf,EAAMuuF,EAAU55H,GAC9C,IAAI69I,GAAU,EACd,IAAK,IAAIx2I,KAAOgjD,EACNhjD,KAAOygB,EAIJuiC,EAAKhjD,KAASgkC,EAAKhkC,KACxBw2I,GAAU,IAJVA,GAAU,EACVC,GAAgBh2H,EAAIzgB,EAAKuyH,EAAU55H,IAM3C,IAAK,IAAIqH,KAAOygB,EACNzgB,KAAOgjD,IACTwzF,GAAU,SACH/1H,EAAGzgB,IAGlB,OAAOw2I,CACX,CACA,SAASC,GAAgBpD,EAAOrzI,EAAKuyH,EAAU55H,GAC3CJ,OAAOwH,eAAeszI,EAAOrzI,EAAK,CAC9BJ,YAAY,EACZC,cAAc,EACd3F,IAAK,WACD,OAAOq4H,EAAS55H,GAAMqH,EAC1B,GAER,CACA,SAASq2I,GAAetiB,GAIpB,OAHKA,EAAG2iB,aACJC,GAAgB5iB,EAAG2iB,YAAc,CAAC,EAAI3iB,EAAGwE,cAEtCxE,EAAG2iB,WACd,CACA,SAASC,GAAel2H,EAAIuiC,GACxB,IAAK,IAAIhjD,KAAOgjD,EACZviC,EAAGzgB,GAAOgjD,EAAKhjD,GAEnB,IAAK,IAAIA,KAAOygB,EACNzgB,KAAOgjD,UACFviC,EAAGzgB,EAGtB,CA2DA,SAAS42I,GAAW7iB,GAChBA,EAAG8iB,OAAS,KACZ9iB,EAAG2e,aAAe,KAClB,IAAI14I,EAAU+5H,EAAG53H,SACb26I,EAAe/iB,EAAGr4H,OAAS1B,EAAQu/H,aACnCwd,EAAgBD,GAAeA,EAAYr7I,QAC/Cs4H,EAAG8E,OAAS0b,GAAav6I,EAAQg9I,gBAAiBD,GAClDhjB,EAAGwE,aAAeue,EACZlC,GAAqB7gB,EAAGR,QAASujB,EAAYv9I,KAAKu7I,YAAa/gB,EAAG8E,QAClE0M,EAMNxR,EAAG58H,GAAK,SAAUoG,EAAGP,EAAGI,EAAGL,GAAK,OAAOk6I,GAAgBljB,EAAIx2H,EAAGP,EAAGI,EAAGL,GAAG,EAAQ,EAI/Eg3H,EAAGjB,eAAiB,SAAUv1H,EAAGP,EAAGI,EAAGL,GAAK,OAAOk6I,GAAgBljB,EAAIx2H,EAAGP,EAAGI,EAAGL,GAAG,EAAO,EAG1F,IAAIm6I,EAAaJ,GAAeA,EAAYv9I,KAWxCkgI,GAAe1F,EAAI,SAAWmjB,GAAcA,EAAW3/I,OAAUguI,EAAa,MAAM,GACpF9L,GAAe1F,EAAI,aAAc/5H,EAAQm9I,kBAAoB5R,EAAa,MAAM,EAExF,CACA,IAAI6R,GAA2B,KAC/B,SAASC,GAAYrxI,GAEjBytI,GAAqBztI,EAAI7G,WACzB6G,EAAI7G,UAAU/E,UAAY,SAAUgJ,GAChC,OAAOuuD,GAASvuD,EAAIlM,KACxB,EACA8O,EAAI7G,UAAUm4I,QAAU,WACpB,IAYIrwI,EAZA8sH,EAAK78H,KACLqgJ,EAAKxjB,EAAG53H,SAAUnF,EAASugJ,EAAGvgJ,OAAQuiI,EAAege,EAAGhe,aACxDA,GAAgBxF,EAAGyjB,aACnBzjB,EAAGwE,aAAeqc,GAAqB7gB,EAAGR,QAASgG,EAAahgI,KAAKu7I,YAAa/gB,EAAG8E,OAAQ9E,EAAGwE,cAC5FxE,EAAG2iB,aACHC,GAAe5iB,EAAG2iB,YAAa3iB,EAAGwE,eAK1CxE,EAAGr4H,OAAS69H,EAGZ,IAII4Q,GAAmBpW,GACnBqjB,GAA2BrjB,EAC3B9sH,EAAQjQ,EAAO8E,KAAKi4H,EAAG4e,aAAc5e,EAAGjB,eAC5C,CACA,MAAOz4H,IACHo9I,GAAYp9I,GAAG05H,EAAI,UAcf9sH,EAAQ8sH,EAAG8iB,MAEnB,CACA,QACIO,GAA2B,KAC3BjN,IACJ,CAeA,OAbIr/H,EAAQ7D,IAA2B,IAAjBA,EAAMrI,SACxBqI,EAAQA,EAAM,IAGZA,aAAiBojI,KAKnBpjI,EAAQikI,MAGZjkI,EAAMrL,OAAS29H,EACRtyH,CACX,CACJ,CAEA,SAASywI,GAAWvX,EAAMjkH,GAItB,OAHIikH,EAAKh8H,YAAek8H,IAA0C,WAA7BF,EAAKnhI,OAAOshI,gBAC7CH,EAAOA,EAAKvnI,SAETyf,EAAS8nH,GAAQjkH,EAAKtS,OAAOu2H,GAAQA,CAChD,CACA,SAASwX,GAAuBhwI,EAASpO,EAAMkC,EAASgkB,EAAU2oC,GAC9D,IAAIplD,EAAOkoI,KAGX,OAFAloI,EAAKwnI,aAAe7iI,EACpB3E,EAAKgoI,UAAY,CAAEzxI,KAAMA,EAAMkC,QAASA,EAASgkB,SAAUA,EAAU2oC,IAAKA,GACnEplD,CACX,CACA,SAAS40I,GAAsBjwI,EAASkwI,GACpC,GAAIpS,EAAO99H,EAAQnQ,QAAU4hI,EAAMzxH,EAAQmwI,WACvC,OAAOnwI,EAAQmwI,UAEnB,GAAI1e,EAAMzxH,EAAQs4H,UACd,OAAOt4H,EAAQs4H,SAEnB,IAAI8X,EAAQX,GAKZ,GAJIW,GAAS3e,EAAMzxH,EAAQqwI,UAA8C,IAAnCrwI,EAAQqwI,OAAOjvI,QAAQgvI,IAEzDpwI,EAAQqwI,OAAOp0I,KAAKm0I,GAEpBtS,EAAO99H,EAAQswI,UAAY7e,EAAMzxH,EAAQuwI,aACzC,OAAOvwI,EAAQuwI,YAEnB,GAAIH,IAAU3e,EAAMzxH,EAAQqwI,QAAS,CACjC,IAAIG,EAAYxwI,EAAQqwI,OAAS,CAACD,GAC9BK,GAAS,EACTC,EAAiB,KACjBC,EAAiB,KACrBP,EAAMQ,IAAI,kBAAkB,WAAc,OAAOnS,EAAS+R,EAAUJ,EAAQ,IAC5E,IAAIS,EAAgB,SAAUC,GAC1B,IAAK,IAAIx7I,EAAI,EAAG8B,EAAIo5I,EAASv5I,OAAQ3B,EAAI8B,EAAG9B,IACxCk7I,EAASl7I,GAAGy7I,eAEZD,IACAN,EAASv5I,OAAS,EACK,OAAnBy5I,IACA58G,aAAa48G,GACbA,EAAiB,MAEE,OAAnBC,IACA78G,aAAa68G,GACbA,EAAiB,MAG7B,EACI9xI,EAAU1C,GAAK,SAAUkB,GAEzB2C,EAAQs4H,SAAWyX,GAAW1yI,EAAK6yI,GAG9BO,EAIDD,EAASv5I,OAAS,EAHlB45I,GAAc,EAKtB,IACIG,EAAW70I,GAAK,SAAUo8H,GAItB9G,EAAMzxH,EAAQmwI,aACdnwI,EAAQnQ,OAAQ,EAChBghJ,GAAc,GAEtB,IACII,EAAQjxI,EAAQnB,EAASmyI,GA0C7B,OAzCItgI,EAASugI,KACLzrH,EAAUyrH,GAENpT,EAAQ79H,EAAQs4H,WAChB2Y,EAAM7zI,KAAKyB,EAASmyI,GAGnBxrH,EAAUyrH,EAAM/9I,aACrB+9I,EAAM/9I,UAAUkK,KAAKyB,EAASmyI,GAC1Bvf,EAAMwf,EAAMphJ,SACZmQ,EAAQmwI,UAAYJ,GAAWkB,EAAMphJ,MAAOqgJ,IAE5Cze,EAAMwf,EAAMX,WACZtwI,EAAQuwI,YAAcR,GAAWkB,EAAMX,QAASJ,GAC5B,IAAhBe,EAAMnrG,MACN9lC,EAAQswI,SAAU,EAIlBI,EAAiBlxH,YAAW,WACxBkxH,EAAiB,KACb7S,EAAQ79H,EAAQs4H,WAAauF,EAAQ79H,EAAQnQ,SAC7CmQ,EAAQswI,SAAU,EAClBO,GAAc,GAEtB,GAAGI,EAAMnrG,OAAS,MAGtB2rF,EAAMwf,EAAMhwG,WAEZ0vG,EAAiBnxH,YAAW,WACxBmxH,EAAiB,KACb9S,EAAQ79H,EAAQs4H,WAChB0Y,EAA4F,KAEpG,GAAGC,EAAMhwG,YAIrBwvG,GAAS,EAEFzwI,EAAQswI,QAAUtwI,EAAQuwI,YAAcvwI,EAAQs4H,QAC3D,CACJ,CAEA,SAAS4Y,GAAuBp5H,GAC5B,GAAI3U,EAAQ2U,GACR,IAAK,IAAIxiB,EAAI,EAAGA,EAAIwiB,EAAS7gB,OAAQ3B,IAAK,CACtC,IAAIG,EAAIqiB,EAASxiB,GACjB,GAAIm8H,EAAMh8H,KAAOg8H,EAAMh8H,EAAEmtI,mBAAqBU,GAAmB7tI,IAC7D,OAAOA,CAEf,CAER,CAEA,IAAI07I,GAAmB,EACnBC,GAAmB,EAGvB,SAAS9B,GAAgBx7I,EAAS2sD,EAAK7uD,EAAMkmB,EAAUu5H,EAAmBC,GAStE,OARInuI,EAAQvR,IAASosI,EAAYpsI,MAC7By/I,EAAoBv5H,EACpBA,EAAWlmB,EACXA,OAAO8N,GAEPo+H,EAAOwT,KACPD,EAAoBD,IAEjBG,GAAez9I,EAAS2sD,EAAK7uD,EAAMkmB,EAAUu5H,EACxD,CACA,SAASE,GAAez9I,EAAS2sD,EAAK7uD,EAAMkmB,EAAUu5H,GAClD,GAAI5f,EAAM7/H,IAAS6/H,EAAM7/H,EAAKqzI,QAG1B,OAAO1B,KAMX,GAHI9R,EAAM7/H,IAAS6/H,EAAM7/H,EAAK4/I,MAC1B/wF,EAAM7uD,EAAK4/I,KAEV/wF,EAED,OAAO8iF,KAmBX,IAAIjkI,EAAOs7C,EACX,GAZIz3C,EAAQ2U,IAAammH,EAAWnmH,EAAS,MACzClmB,EAAOA,GAAQ,CAAC,EAChBA,EAAKu7I,YAAc,CAAEl8I,QAAS6mB,EAAS,IACvCA,EAAS7gB,OAAS,GAElBo6I,IAAsBD,GACtBt5H,EAAWkxH,GAAkBlxH,GAExBu5H,IAAsBF,KAC3Br5H,EAAWixH,GAAwBjxH,IAGpB,kBAAR2oC,EAAkB,CACzB,IAAI0hF,OAAO,EACXvnF,EAAM9mD,EAAQC,QAAUD,EAAQC,OAAO6mD,IAAOp8C,EAAOsiI,gBAAgBrgF,GASjEnhD,EARAd,EAAOmiI,cAAclgF,GAQb,IAAIiiF,GAAMlkI,EAAOuiI,qBAAqBtgF,GAAM7uD,EAAMkmB,OAAUpY,OAAWA,EAAW5L,GAEnFlC,GAASA,EAAKqzC,MACrBwsF,EAAO0Q,EAAOyH,GAAa91I,EAAQU,SAAU,aAAcisD,IAQnD,IAAIiiF,GAAMjiF,EAAK7uD,EAAMkmB,OAAUpY,OAAWA,EAAW5L,GANrD29I,GAAgBtP,EAAMvwI,EAAMkC,EAASgkB,EAAU2oC,EAQ/D,MAGInhD,EAAQmyI,GAAgBhxF,EAAK7uD,EAAMkC,EAASgkB,GAEhD,OAAI3U,EAAQ7D,GACDA,EAEFmyH,EAAMnyH,IACPmyH,EAAM72E,IACN82F,GAAQpyI,EAAOs7C,GACf62E,EAAM7/H,IACN+/I,GAAqB//I,GAClB0N,GAGAikI,IAEf,CACA,SAASmO,GAAQpyI,EAAOs7C,EAAI5B,GAOxB,GANA15C,EAAMs7C,GAAKA,EACO,kBAAdt7C,EAAMmhD,MAEN7F,OAAKl7C,EACLs5C,GAAQ,GAERy4E,EAAMnyH,EAAMwY,UACZ,IAAK,IAAIxiB,EAAI,EAAG8B,EAAIkI,EAAMwY,SAAS7gB,OAAQ3B,EAAI8B,EAAG9B,IAAK,CACnD,IAAI09B,EAAQ1zB,EAAMwY,SAASxiB,GACvBm8H,EAAMz+F,EAAMytB,OACXo9E,EAAQ7qG,EAAM4nB,KAAQkjF,EAAO9kF,IAAwB,QAAdhmB,EAAMytB,MAC9CixF,GAAQ1+G,EAAO4nB,EAAI5B,EAE3B,CAER,CAIA,SAAS24F,GAAqB//I,GACtB8e,EAAS9e,EAAKqE,QACd27I,GAAShgJ,EAAKqE,OAEdya,EAAS9e,EAAK8+H,QACdkhB,GAAShgJ,EAAK8+H,MAEtB,CAeA,SAASof,GAAYnyI,EAAKyuH,EAAIiY,GAG1BI,KACA,IACI,GAAIrY,EAAI,CACJ,IAAIic,EAAMjc,EACV,MAAQic,EAAMA,EAAIzc,QAAU,CACxB,IAAIimB,EAAQxJ,EAAI7zI,SAASs9I,cACzB,GAAID,EACA,IAAK,IAAIv8I,EAAI,EAAGA,EAAIu8I,EAAM56I,OAAQ3B,IAC9B,IACI,IAAI+wD,GAAgD,IAAtCwrF,EAAMv8I,GAAGnB,KAAKk0I,EAAK1qI,EAAKyuH,EAAIiY,GAC1C,GAAIh+E,EACA,MACR,CACA,MAAO3zD,IACHq/I,GAAkBr/I,GAAG21I,EAAK,qBAC9B,CAGZ,CACJ,CACA0J,GAAkBp0I,EAAKyuH,EAAIiY,EAC/B,CACA,QACIK,IACJ,CACJ,CACA,SAASuD,GAAwB32I,EAASwC,EAASmxB,EAAMmnG,EAAIiY,GACzD,IAAIhnI,EACJ,IACIA,EAAM4nB,EAAO3zB,EAAQ0H,MAAMlF,EAASmxB,GAAQ3zB,EAAQ6C,KAAKL,GACrDuJ,IAAQA,EAAIgpI,QAAU7gH,EAAUnoB,KAASA,EAAI20I,WAC7C30I,EAAIK,OAAM,SAAUhL,GAAK,OAAOo9I,GAAYp9I,EAAG05H,EAAIiY,EAAO,mBAAqB,IAC/EhnI,EAAI20I,UAAW,EAEvB,CACA,MAAOt/I,IACHo9I,GAAYp9I,GAAG05H,EAAIiY,EACvB,CACA,OAAOhnI,CACX,CACA,SAAS00I,GAAkBp0I,EAAKyuH,EAAIiY,GAChC,GAAI7lI,EAAO+hI,aACP,IACI,OAAO/hI,EAAO+hI,aAAapsI,KAAK,KAAMwJ,EAAKyuH,EAAIiY,EACnD,CACA,MAAO3xI,IAGCA,KAAMiL,GACNs0I,GAASv/I,GAAG,KAAM,sBAE1B,CAEJu/I,GAASt0I,EAAKyuH,EAAIiY,EACtB,CACA,SAAS4N,GAASt0I,EAAKyuH,EAAIiY,GAKvB,IAAI9R,GAAgC,qBAAZ30H,QAIpB,MAAMD,EAHNC,QAAQ/N,MAAM8N,EAKtB,CAGA,IAsBIu0I,GAtBAC,IAAmB,EACnBv5B,GAAY,GACZ7J,IAAU,EACd,SAASqjC,KACLrjC,IAAU,EACV,IAAIsjC,EAASz5B,GAAUt8G,MAAM,GAC7Bs8G,GAAU3hH,OAAS,EACnB,IAAK,IAAI3B,EAAI,EAAGA,EAAI+8I,EAAOp7I,OAAQ3B,IAC/B+8I,EAAO/8I,IAEf,CAoBA,GAAuB,qBAAZsJ,SAA2BsjI,GAAStjI,SAAU,CACrD,IAAI0zI,GAAM1zI,QAAQC,UAClBqzI,GAAY,WACRI,GAAIl1I,KAAKg1I,IAML3Q,IACAjiH,WAAWiwG,EACnB,EACA0iB,IAAmB,CACvB,MACK,GAAKxtF,IACsB,qBAArB4tF,mBACNrQ,GAASqQ,mBAE0B,yCAAhCA,iBAAiBz5I,WAoBrBo5I,GAJ6B,qBAAjBM,cAAgCtQ,GAASsQ,cAIzC,WACRA,aAAaJ,GACjB,EAIY,WACR5yH,WAAW4yH,GAAgB,EAC/B,MA5B6E,CAI7E,IAAIK,GAAY,EACZC,GAAW,IAAIH,iBAAiBH,IAChCO,GAAaj9I,SAASipC,eAAejuC,OAAO+hJ,KAChDC,GAAS9M,QAAQ+M,GAAY,CACzBC,eAAe,IAEnBV,GAAY,WACRO,IAAaA,GAAY,GAAK,EAC9BE,GAAW/gJ,KAAOlB,OAAO+hJ,GAC7B,EACAN,IAAmB,CACvB,CAkBA,SAASnoF,GAASwE,EAAItyD,GAClB,IAAIyQ,EAmBJ,GAlBAisG,GAAU38G,MAAK,WACX,GAAIuyD,EACA,IACIA,EAAGr6D,KAAK+H,EACZ,CACA,MAAOxJ,IACHo9I,GAAYp9I,GAAGwJ,EAAK,WACxB,MAEKyQ,GACLA,EAASzQ,EAEjB,IACK6yG,KACDA,IAAU,EACVmjC,OAGC1jF,GAAyB,qBAAZ5vD,QACd,OAAO,IAAIA,SAAQ,SAAUC,GACzB8N,EAAW9N,CACf,GAER,CAqHA,SAASg0I,GAAgBC,GACrB,OAAO,SAAUr3I,EAAI9D,GAEjB,QADe,IAAXA,IAAqBA,EAAS4qI,IAC7B5qI,EAOL,OAAOo7I,GAAWp7I,EAAQm7I,EAAUr3I,EACxC,CACJ,CAUA,SAASs3I,GAAWnoB,EAAUkoB,EAAUr3I,GACpC,IAAIpJ,EAAUu4H,EAASp2H,SACvBnC,EAAQygJ,GAAYE,GAAmB3gJ,EAAQygJ,GAAWr3I,EAC9D,CACoBo3I,GAAgB,eACpBA,GAAgB,WACXA,GAAgB,gBACrBA,GAAgB,WACVA,GAAgB,iBACpBA,GAAgB,aAChBA,GAAgB,aACdA,GAAgB,eACbA,GAAgB,kBACjBA,GAAgB,iBACdA,GAAgB,mBACVA,GAAgB,iBAS9C,IAAIt0I,GAAU,SAQd,IAAI00I,GAAc,IAAI7Q,GAMtB,SAASwP,GAASrgJ,GAGd,OAFA2hJ,GAAU3hJ,EAAK0hJ,IACfA,GAAY7wI,QACL7Q,CACX,CACA,SAAS2hJ,GAAU3hJ,EAAKkrB,GACpB,IAAInnB,EAAG4L,EACHiyI,EAAMhwI,EAAQ5R,GAClB,MAAM4hJ,IAAQziI,EAASnf,IACnBA,EAAIu0I,UACJl1I,OAAO4uD,SAASjuD,IAChBA,aAAemxI,IAHnB,CAMA,GAAInxI,EAAI0zI,OAAQ,CACZ,IAAImO,EAAQ7hJ,EAAI0zI,OAAOhrF,IAAI75C,GAC3B,GAAIqc,EAAKQ,IAAIm2H,GACT,OAEJ32H,EAAKpoB,IAAI++I,EACb,CACA,GAAID,EAAK,CACL79I,EAAI/D,EAAI0F,OACR,MAAO3B,IACH49I,GAAU3hJ,EAAI+D,GAAImnB,EAC1B,MACK,GAAIspH,GAAMx0I,GACX2hJ,GAAU3hJ,EAAId,MAAOgsB,OAEpB,CACDvb,EAAOtQ,OAAOsQ,KAAK3P,GACnB+D,EAAI4L,EAAKjK,OACT,MAAO3B,IACH49I,GAAU3hJ,EAAI2P,EAAK5L,IAAKmnB,EAChC,CArBA,CAsBJ,CAEA,IA4OI42H,GA5OAC,GAAQ,EAORC,GAAyB,WACzB,SAASA,EAAQnnB,EAAIonB,EAAShlF,EAAIn8D,EAASohJ,GACvCnM,GAAkB/3I,KAGlBq3I,KAAsBA,GAAkBt3I,IAClCs3I,GACAxa,EACIA,EAAGqW,YACH/iI,IACLnQ,KAAK68H,GAAKA,IAAOqnB,IAClBrnB,EAAGsnB,SAAWnkJ,MAGd8C,GACA9C,KAAKoC,OAASU,EAAQV,KACtBpC,KAAKokJ,OAASthJ,EAAQshJ,KACtBpkJ,KAAKqkJ,OAASvhJ,EAAQuhJ,KACtBrkJ,KAAKskJ,OAASxhJ,EAAQwhJ,KACtBtkJ,KAAKylF,OAAS3iF,EAAQ2iF,QAOtBzlF,KAAKoC,KAAOpC,KAAKokJ,KAAOpkJ,KAAKqkJ,KAAOrkJ,KAAKskJ,MAAO,EAEpDtkJ,KAAKi/D,GAAKA,EACVj/D,KAAK6Q,KAAOkzI,GACZ/jJ,KAAKw3I,QAAS,EACdx3I,KAAKukJ,MAAO,EACZvkJ,KAAKwkJ,MAAQxkJ,KAAKqkJ,KAClBrkJ,KAAKmqD,KAAO,GACZnqD,KAAKykJ,QAAU,GACfzkJ,KAAK0kJ,OAAS,IAAI7R,GAClB7yI,KAAK2kJ,UAAY,IAAI9R,GACrB7yI,KAAK4kJ,WAA0E,GAE3ElW,EAAWuV,GACXjkJ,KAAK0uD,OAASu1F,GAGdjkJ,KAAK0uD,OAAS7d,EAAUozG,GACnBjkJ,KAAK0uD,SACN1uD,KAAK0uD,OAASwxE,IAOtBlgI,KAAKkB,MAAQlB,KAAKqkJ,UAAOl0I,EAAYnQ,KAAKgD,KAC9C,CA4IA,OAxIAghJ,EAAQ/7I,UAAUjF,IAAM,WAEpB,IAAI9B,EADJg0I,GAAWl1I,MAEX,IAAI68H,EAAK78H,KAAK68H,GACd,IACI37H,EAAQlB,KAAK0uD,OAAO9pD,KAAKi4H,EAAIA,EACjC,CACA,MAAO15H,IACH,IAAInD,KAAKokJ,KAIL,MAAMjhJ,GAHNo9I,GAAYp9I,GAAG05H,EAAI,uBAAwBr3H,OAAOxF,KAAK4kJ,WAAY,KAK3E,CACA,QAGQ5kJ,KAAKoC,MACLigJ,GAASnhJ,GAEbi0I,KACAn1I,KAAKs0I,aACT,CACA,OAAOpzI,CACX,EAIA8iJ,EAAQ/7I,UAAU8sI,OAAS,SAAUrqF,GACjC,IAAI75C,EAAK65C,EAAI75C,GACR7Q,KAAK2kJ,UAAUj3H,IAAI7c,KACpB7Q,KAAK2kJ,UAAU7/I,IAAI+L,GACnB7Q,KAAKykJ,QAAQ/3I,KAAKg+C,GACb1qD,KAAK0kJ,OAAOh3H,IAAI7c,IACjB65C,EAAIgqF,OAAO10I,MAGvB,EAIAgkJ,EAAQ/7I,UAAUqsI,YAAc,WAC5B,IAAIvuI,EAAI/F,KAAKmqD,KAAKziD,OAClB,MAAO3B,IAAK,CACR,IAAI2kD,EAAM1qD,KAAKmqD,KAAKpkD,GACf/F,KAAK2kJ,UAAUj3H,IAAIg9B,EAAI75C,KACxB65C,EAAIkqF,UAAU50I,KAEtB,CACA,IAAIiwH,EAAMjwH,KAAK0kJ,OACf1kJ,KAAK0kJ,OAAS1kJ,KAAK2kJ,UACnB3kJ,KAAK2kJ,UAAY10B,EACjBjwH,KAAK2kJ,UAAU9xI,QACfo9G,EAAMjwH,KAAKmqD,KACXnqD,KAAKmqD,KAAOnqD,KAAKykJ,QACjBzkJ,KAAKykJ,QAAUx0B,EACfjwH,KAAKykJ,QAAQ/8I,OAAS,CAC1B,EAKAs8I,EAAQ/7I,UAAUqI,OAAS,WAEnBtQ,KAAKqkJ,KACLrkJ,KAAKwkJ,OAAQ,EAERxkJ,KAAKskJ,KACVtkJ,KAAK43I,MAGLiN,GAAa7kJ,KAErB,EAKAgkJ,EAAQ/7I,UAAU2vI,IAAM,WACpB,GAAI53I,KAAKw3I,OAAQ,CACb,IAAIt2I,EAAQlB,KAAKgD,MACjB,GAAI9B,IAAUlB,KAAKkB,OAIfigB,EAASjgB,IACTlB,KAAKoC,KAAM,CAEX,IAAI6oC,EAAWjrC,KAAKkB,MAEpB,GADAlB,KAAKkB,MAAQA,EACTlB,KAAKokJ,KAAM,CACX,IAAItP,EAAO,yBAA0BtvI,OAAOxF,KAAK4kJ,WAAY,KAC7DlM,GAAwB14I,KAAKi/D,GAAIj/D,KAAK68H,GAAI,CAAC37H,EAAO+pC,GAAWjrC,KAAK68H,GAAIiY,EAC1E,MAEI90I,KAAKi/D,GAAGr6D,KAAK5E,KAAK68H,GAAI37H,EAAO+pC,EAErC,CACJ,CACJ,EAKA+4G,EAAQ/7I,UAAU68I,SAAW,WACzB9kJ,KAAKkB,MAAQlB,KAAKgD,MAClBhD,KAAKwkJ,OAAQ,CACjB,EAIAR,EAAQ/7I,UAAU4sI,OAAS,WACvB,IAAI9uI,EAAI/F,KAAKmqD,KAAKziD,OAClB,MAAO3B,IACH/F,KAAKmqD,KAAKpkD,GAAG8uI,QAErB,EAIAmP,EAAQ/7I,UAAU0jI,SAAW,WAIzB,GAHI3rI,KAAK68H,KAAO78H,KAAK68H,GAAGpB,mBACpByT,EAASlvI,KAAK68H,GAAGqW,OAAOuE,QAASz3I,MAEjCA,KAAKw3I,OAAQ,CACb,IAAIzxI,EAAI/F,KAAKmqD,KAAKziD,OAClB,MAAO3B,IACH/F,KAAKmqD,KAAKpkD,GAAG6uI,UAAU50I,MAE3BA,KAAKw3I,QAAS,EACVx3I,KAAK+kJ,QACL/kJ,KAAK+kJ,QAEb,CACJ,EACOf,CACX,CAlM4B,GA4N5B,SAASgB,GAAWnoB,GAChBA,EAAGooB,QAAU5jJ,OAAOyI,OAAO,MAC3B+yH,EAAGqoB,eAAgB,EAEnB,IAAI72E,EAAYwuD,EAAG53H,SAASg7I,iBACxB5xE,GACA82E,GAAyBtoB,EAAIxuD,EAErC,CAEA,SAAS+2E,GAAM//G,EAAOn5B,GAClB43I,GAASzC,IAAIh8G,EAAOn5B,EACxB,CACA,SAASm5I,GAAShgH,EAAOn5B,GACrB43I,GAASwB,KAAKjgH,EAAOn5B,EACzB,CACA,SAASq5I,GAAoBlgH,EAAOn5B,GAChC,IAAIs5I,EAAU1B,GACd,OAAO,SAAS2B,IACZ,IAAI33I,EAAM5B,EAAGzC,MAAM,KAAMhC,WACb,OAARqG,GACA03I,EAAQF,KAAKjgH,EAAOogH,EAE5B,CACJ,CACA,SAASN,GAAyBtoB,EAAIxuD,EAAWq3E,GAC7C5B,GAAWjnB,EACX8b,GAAgBtqE,EAAWq3E,GAAgB,CAAC,EAAGN,GAAOC,GAAUE,GAAqB1oB,GACrFinB,QAAW3zI,CACf,CACA,SAASw1I,GAAY72I,GACjB,IAAI82I,EAAS,SACb92I,EAAI7G,UAAUo5I,IAAM,SAAUh8G,EAAOn5B,GACjC,IAAI2wH,EAAK78H,KACT,GAAI4T,EAAQyxB,GACR,IAAK,IAAIt/B,EAAI,EAAG8B,EAAIw9B,EAAM39B,OAAQ3B,EAAI8B,EAAG9B,IACrC82H,EAAGwkB,IAAIh8G,EAAMt/B,GAAImG,QAIpB2wH,EAAGooB,QAAQ5/G,KAAWw3F,EAAGooB,QAAQ5/G,GAAS,KAAK34B,KAAKR,GAGjD05I,EAAO9wI,KAAKuwB,KACZw3F,EAAGqoB,eAAgB,GAG3B,OAAOroB,CACX,EACA/tH,EAAI7G,UAAUqlI,MAAQ,SAAUjoG,EAAOn5B,GACnC,IAAI2wH,EAAK78H,KACT,SAASO,IACLs8H,EAAGyoB,KAAKjgH,EAAO9kC,GACf2L,EAAGzC,MAAMozH,EAAIp1H,UACjB,CAGA,OAFAlH,EAAG2L,GAAKA,EACR2wH,EAAGwkB,IAAIh8G,EAAO9kC,GACPs8H,CACX,EACA/tH,EAAI7G,UAAUq9I,KAAO,SAAUjgH,EAAOn5B,GAClC,IAAI2wH,EAAK78H,KAET,IAAKyH,UAAUC,OAEX,OADAm1H,EAAGooB,QAAU5jJ,OAAOyI,OAAO,MACpB+yH,EAGX,GAAIjpH,EAAQyxB,GAAQ,CAChB,IAAK,IAAIwgH,EAAM,EAAGh+I,EAAIw9B,EAAM39B,OAAQm+I,EAAMh+I,EAAGg+I,IACzChpB,EAAGyoB,KAAKjgH,EAAMwgH,GAAM35I,GAExB,OAAO2wH,CACX,CAEA,IASI59D,EATAq8D,EAAMuB,EAAGooB,QAAQ5/G,GACrB,IAAKi2F,EACD,OAAOuB,EAEX,IAAK3wH,EAED,OADA2wH,EAAGooB,QAAQ5/G,GAAS,KACbw3F,EAIX,IAAI92H,EAAIu1H,EAAI5zH,OACZ,MAAO3B,IAEH,GADAk5D,EAAKq8D,EAAIv1H,GACLk5D,IAAO/yD,GAAM+yD,EAAG/yD,KAAOA,EAAI,CAC3BovH,EAAI52G,OAAO3e,EAAG,GACd,KACJ,CAEJ,OAAO82H,CACX,EACA/tH,EAAI7G,UAAUhF,MAAQ,SAAUoiC,GAC5B,IAAIw3F,EAAK78H,KAWLs7H,EAAMuB,EAAGooB,QAAQ5/G,GACrB,GAAIi2F,EAAK,CACLA,EAAMA,EAAI5zH,OAAS,EAAIooI,EAAQxU,GAAOA,EAGtC,IAFA,IAAI5lG,EAAOo6G,EAAQroI,UAAW,GAC1BqtI,EAAO,sBAAuBtvI,OAAO6/B,EAAO,KACvCt/B,EAAI,EAAG8B,EAAIyzH,EAAI5zH,OAAQ3B,EAAI8B,EAAG9B,IACnC2yI,GAAwBpd,EAAIv1H,GAAI82H,EAAInnG,EAAMmnG,EAAIiY,EAEtD,CACA,OAAOjY,CACX,CACJ,CAEA,IAAIipB,GAAiB,KAErB,SAASC,GAAkBlpB,GACvB,IAAImpB,EAAqBF,GAEzB,OADAA,GAAiBjpB,EACV,WACHipB,GAAiBE,CACrB,CACJ,CACA,SAASC,GAAcppB,GACnB,IAAI/5H,EAAU+5H,EAAG53H,SAEbP,EAAS5B,EAAQ4B,OACrB,GAAIA,IAAW5B,EAAQojJ,SAAU,CAC7B,MAAOxhJ,EAAOO,SAASihJ,UAAYxhJ,EAAO23H,QACtC33H,EAASA,EAAO23H,QAEpB33H,EAAOyhJ,UAAUz5I,KAAKmwH,EAC1B,CACAA,EAAGR,QAAU33H,EACbm4H,EAAG73H,MAAQN,EAASA,EAAOM,MAAQ63H,EACnCA,EAAGspB,UAAY,GACftpB,EAAGupB,MAAQ,CAAC,EACZvpB,EAAGsb,UAAYzzI,EAASA,EAAOyzI,UAAY92I,OAAOyI,OAAO,MACzD+yH,EAAGsnB,SAAW,KACdtnB,EAAGT,UAAY,KACfS,EAAGV,iBAAkB,EACrBU,EAAGyjB,YAAa,EAChBzjB,EAAGwpB,cAAe,EAClBxpB,EAAGpB,mBAAoB,CAC3B,CACA,SAAS6qB,GAAex3I,GACpBA,EAAI7G,UAAUs+I,QAAU,SAAUx2I,EAAOy2I,GACrC,IAAI3pB,EAAK78H,KACLymJ,EAAS5pB,EAAGx5H,IACZqjJ,EAAY7pB,EAAG8iB,OACfgH,EAAwBZ,GAAkBlpB,GAC9CA,EAAG8iB,OAAS5vI,EASR8sH,EAAGx5H,IANFqjJ,EAMQ7pB,EAAG+pB,UAAUF,EAAW32I,GAJxB8sH,EAAG+pB,UAAU/pB,EAAGx5H,IAAK0M,EAAOy2I,GAAW,GAMpDG,IAEIF,IACAA,EAAOI,QAAU,MAEjBhqB,EAAGx5H,MACHw5H,EAAGx5H,IAAIwjJ,QAAUhqB,GAGrB,IAAIrmE,EAAUqmE,EACd,MAAOrmE,GACHA,EAAQhyD,QACRgyD,EAAQ6lE,SACR7lE,EAAQhyD,SAAWgyD,EAAQ6lE,QAAQsjB,OACnCnpF,EAAQ6lE,QAAQh5H,IAAMmzD,EAAQnzD,IAC9BmzD,EAAUA,EAAQ6lE,OAI1B,EACAvtH,EAAI7G,UAAUu5I,aAAe,WACzB,IAAI3kB,EAAK78H,KACL68H,EAAGsnB,UACHtnB,EAAGsnB,SAAS7zI,QAEpB,EACAxB,EAAI7G,UAAU6+I,SAAW,WACrB,IAAIjqB,EAAK78H,KACT,IAAI68H,EAAGpB,kBAAP,CAGAsrB,GAAWlqB,EAAI,iBACfA,EAAGpB,mBAAoB,EAEvB,IAAI/2H,EAASm4H,EAAGR,SACZ33H,GAAWA,EAAO+2H,mBAAsBoB,EAAG53H,SAASihJ,UACpDhX,EAASxqI,EAAOyhJ,UAAWtpB,GAI/BA,EAAGqW,OAAOptE,OAGN+2D,EAAGmqB,MAAMtR,QACT7Y,EAAGmqB,MAAMtR,OAAOU,UAGpBvZ,EAAGwpB,cAAe,EAElBxpB,EAAG+pB,UAAU/pB,EAAG8iB,OAAQ,MAExBoH,GAAWlqB,EAAI,aAEfA,EAAGyoB,OAECzoB,EAAGx5H,MACHw5H,EAAGx5H,IAAIwjJ,QAAU,MAGjBhqB,EAAGr4H,SACHq4H,EAAGr4H,OAAOE,OAAS,KA9BvB,CAgCJ,CACJ,CACA,SAASuiJ,GAAepqB,EAAIhtH,EAAI22I,GAoB5B,IAAIU,EAnBJrqB,EAAGx5H,IAAMwM,EACJgtH,EAAG53H,SAASnF,SAEb+8H,EAAG53H,SAASnF,OAASk0I,IAezB+S,GAAWlqB,EAAI,eAoBXqqB,EAAkB,WACdrqB,EAAG0pB,QAAQ1pB,EAAGujB,UAAWoG,EAC7B,EAEJ,IAAIW,EAAiB,CACjB1hE,OAAQ,WACAo3C,EAAGyjB,aAAezjB,EAAGwpB,cACrBU,GAAWlqB,EAAI,eAEvB,GASJ,IAAImnB,GAAQnnB,EAAIqqB,EAAiBhnB,EAAMinB,GAAgB,GACvDX,GAAY,EAEZ,IAAIY,EAAcvqB,EAAGwqB,aACrB,GAAID,EACA,IAAK,IAAIrhJ,EAAI,EAAGA,EAAIqhJ,EAAY1/I,OAAQ3B,IACpCqhJ,EAAYrhJ,GAAG6xI,MASvB,OAJiB,MAAb/a,EAAGr4H,SACHq4H,EAAGyjB,YAAa,EAChByG,GAAWlqB,EAAI,YAEZA,CACX,CACA,SAASyqB,GAAqBzqB,EAAI0qB,EAAWl5E,EAAWuxE,EAAa4H,GASjE,IAAIC,EAAiB7H,EAAYv9I,KAAKu7I,YAClC8J,EAAiB7qB,EAAGwE,aACpBsmB,KAA2BF,IAAmBA,EAAevL,SAC5DwL,IAAmBrZ,IAAgBqZ,EAAexL,SAClDuL,GAAkB5qB,EAAGwE,aAAalhG,OAASsnH,EAAetnH,OACzDsnH,GAAkB5qB,EAAGwE,aAAalhG,MAIpCynH,KAAsBJ,GACtB3qB,EAAG53H,SAAS66I,iBACZ6H,GACAE,EAAYhrB,EAAGr4H,OACnBq4H,EAAG53H,SAASo9H,aAAeud,EAC3B/iB,EAAGr4H,OAASo7I,EACR/iB,EAAG8iB,SAEH9iB,EAAG8iB,OAAOj7I,OAASk7I,GAEvB/iB,EAAG53H,SAAS66I,gBAAkB0H,EAI9B,IAAInnJ,EAAQu/I,EAAYv9I,KAAKhC,OAASguI,EAClCxR,EAAGiiB,aAGCC,GAAeliB,EAAGiiB,YAAaz+I,EAAQwnJ,EAAUxlJ,MAAQwlJ,EAAUxlJ,KAAKhC,OAAUguI,EAAaxR,EAAI,YACnG+qB,GAAmB,GAG3B/qB,EAAGmiB,OAAS3+I,EAEZguE,EAAYA,GAAaggE,EACzB,IAAIyZ,EAAgBjrB,EAAG53H,SAASg7I,iBAOhC,GANIpjB,EAAGoiB,iBACHF,GAAeliB,EAAGoiB,gBAAiB5wE,EAAWy5E,GAAiBzZ,EAAaxR,EAAI,cAEpFA,EAAGqiB,WAAariB,EAAG53H,SAASg7I,iBAAmB5xE,EAC/C82E,GAAyBtoB,EAAIxuD,EAAWy5E,GAEpCP,GAAa1qB,EAAG53H,SAAShE,MAAO,CAChC80I,IAAgB,GAGhB,IAFA,IAAI90I,EAAQ47H,EAAG6hB,OACXqJ,EAAWlrB,EAAG53H,SAAS+iJ,WAAa,GAC/BjiJ,EAAI,EAAGA,EAAIgiJ,EAASrgJ,OAAQ3B,IAAK,CACtC,IAAI+C,EAAMi/I,EAAShiJ,GACfszI,EAAcxc,EAAG53H,SAAShE,MAC9BA,EAAM6H,GAAOm/I,GAAan/I,EAAKuwI,EAAakO,EAAW1qB,EAC3D,CACAkZ,IAAgB,GAEhBlZ,EAAG53H,SAASsiJ,UAAYA,CAC5B,CAEIK,IACA/qB,EAAG8E,OAAS0b,GAAamK,EAAgB5H,EAAYr7I,SACrDs4H,EAAG2kB,eAKX,CACA,SAAS0G,GAAiBrrB,GACtB,MAAOA,IAAOA,EAAKA,EAAGR,SAClB,GAAIQ,EAAGT,UACH,OAAO,EAEf,OAAO,CACX,CACA,SAAS+rB,GAAuBtrB,EAAIurB,GAChC,GAAIA,GAEA,GADAvrB,EAAGV,iBAAkB,EACjB+rB,GAAiBrrB,GACjB,YAGH,GAAIA,EAAGV,gBACR,OAEJ,GAAIU,EAAGT,WAA8B,OAAjBS,EAAGT,UAAoB,CACvCS,EAAGT,WAAY,EACf,IAAK,IAAIr2H,EAAI,EAAGA,EAAI82H,EAAGspB,UAAUz+I,OAAQ3B,IACrCoiJ,GAAuBtrB,EAAGspB,UAAUpgJ,IAExCghJ,GAAWlqB,EAAI,YACnB,CACJ,CACA,SAASwrB,GAAyBxrB,EAAIurB,GAClC,KAAIA,IACAvrB,EAAGV,iBAAkB,GACjB+rB,GAAiBrrB,OAIpBA,EAAGT,UAAW,CACfS,EAAGT,WAAY,EACf,IAAK,IAAIr2H,EAAI,EAAGA,EAAI82H,EAAGspB,UAAUz+I,OAAQ3B,IACrCsiJ,GAAyBxrB,EAAGspB,UAAUpgJ,IAE1CghJ,GAAWlqB,EAAI,cACnB,CACJ,CACA,SAASkqB,GAAWlqB,EAAI14H,EAAMuxB,EAAM4yH,QACb,IAAfA,IAAyBA,GAAa,GAE1CpT,KACA,IAAIqT,EAAWvV,GACXwV,EAAYvQ,KAChBqQ,GAAcrV,GAAmBpW,GACjC,IAAIpuD,EAAWouD,EAAG53H,SAASd,GACvB2wI,EAAO,GAAGtvI,OAAOrB,EAAM,SAC3B,GAAIsqE,EACA,IAAK,IAAI1oE,EAAI,EAAG4c,EAAI8rD,EAAS/mE,OAAQ3B,EAAI4c,EAAG5c,IACxC2yI,GAAwBjqE,EAAS1oE,GAAI82H,EAAInnG,GAAQ,KAAMmnG,EAAIiY,GAG/DjY,EAAGqoB,eACHroB,EAAG55H,MAAM,QAAUkB,GAEnBmkJ,IACArV,GAAmBsV,GACnBC,GAAaA,EAAUjoJ,MAE3B40I,IACJ,CAEA,IACI7M,GAAQ,GACRmgB,GAAoB,GACpB/6H,GAAM,CAAC,EAEPg7H,IAAU,EACVC,IAAW,EACXnsI,GAAQ,EAIZ,SAASosI,KACLpsI,GAAQ8rH,GAAM5gI,OAAS+gJ,GAAkB/gJ,OAAS,EAClDgmB,GAAM,CAAC,EAIPg7H,GAAUC,IAAW,CACzB,CAMA,IAAIE,GAAwB,EAExBC,GAASx/I,KAAKknD,IAOlB,GAAIwyE,IAAc5tE,GAAM,CACpB,IAAI2zF,GAAgB/hJ,OAAOs+H,YACvByjB,IAC6B,oBAAtBA,GAAcv4F,KACrBs4F,KAAW3iJ,SAAS6iJ,YAAY,SAASlvF,YAKzCgvF,GAAS,WAAc,OAAOC,GAAcv4F,KAAO,EAE3D,CACA,IAAIy4F,GAAgB,SAAU5iJ,EAAGP,GAC7B,GAAIO,EAAEk+I,MACF,IAAKz+I,EAAEy+I,KACH,OAAO,OAEV,GAAIz+I,EAAEy+I,KACP,OAAQ,EAEZ,OAAOl+I,EAAEwK,GAAK/K,EAAE+K,EACpB,EAIA,SAASq4I,KAGL,IAAIC,EAASt4I,EAYb,IAdAg4I,GAAwBC,KACxBH,IAAW,EAUXrgB,GAAM96G,KAAKy7H,IAGNzsI,GAAQ,EAAGA,GAAQ8rH,GAAM5gI,OAAQ8U,KAClC2sI,EAAU7gB,GAAM9rH,IACZ2sI,EAAQ1jE,QACR0jE,EAAQ1jE,SAEZ50E,EAAKs4I,EAAQt4I,GACb6c,GAAI7c,GAAM,KACVs4I,EAAQvR,MAcZ,IAAIwR,EAAiBX,GAAkB17I,QACnCs8I,EAAe/gB,GAAMv7H,QACzB67I,KAEAU,GAAmBF,GACnBG,GAAiBF,GACjB/U,KAGIvD,IAAY9hI,EAAO8hI,UACnBA,GAASrmI,KAAK,QAEtB,CACA,SAAS6+I,GAAiBjhB,GACtB,IAAIviI,EAAIuiI,EAAM5gI,OACd,MAAO3B,IAAK,CACR,IAAIojJ,EAAU7gB,EAAMviI,GAChB82H,EAAKssB,EAAQtsB,GACbA,GAAMA,EAAGsnB,WAAagF,GAAWtsB,EAAGyjB,aAAezjB,EAAGwpB,cACtDU,GAAWlqB,EAAI,UAEvB,CACJ,CAKA,SAAS2sB,GAAwB3sB,GAG7BA,EAAGT,WAAY,EACfqsB,GAAkB/7I,KAAKmwH,EAC3B,CACA,SAASysB,GAAmBhhB,GACxB,IAAK,IAAIviI,EAAI,EAAGA,EAAIuiI,EAAM5gI,OAAQ3B,IAC9BuiI,EAAMviI,GAAGq2H,WAAY,EACrB+rB,GAAuB7f,EAAMviI,IAAI,EAEzC,CAMA,SAAS8+I,GAAasE,GAClB,IAAIt4I,EAAKs4I,EAAQt4I,GACjB,GAAe,MAAX6c,GAAI7c,KAGJs4I,IAAY1U,GAAIrsI,SAAU+gJ,EAAQM,WAAtC,CAIA,GADA/7H,GAAI7c,IAAM,EACL83I,GAGA,CAGD,IAAI5iJ,EAAIuiI,GAAM5gI,OAAS,EACvB,MAAO3B,EAAIyW,IAAS8rH,GAAMviI,GAAG8K,GAAKs4I,EAAQt4I,GACtC9K,IAEJuiI,GAAM5jH,OAAO3e,EAAI,EAAG,EAAGojJ,EAC3B,MAVI7gB,GAAM57H,KAAKy8I,GAYVT,KACDA,IAAU,EAKVjuF,GAASyuF,IArBb,CAuBJ,CAEA,SAASQ,GAAY7sB,GACjB,IAAI8sB,EAAgB9sB,EAAG53H,SAAS2kJ,QAChC,GAAID,EAAe,CACf,IAAIE,EAAWnb,EAAWib,GACpBA,EAAc/kJ,KAAKi4H,GACnB8sB,EACN,IAAKxoI,EAAS0oI,GACV,OAMJ,IAJA,IAAIvoI,EAAS42H,GAAgBrb,GAGzBlrH,EAAOw3H,GAAYjgI,QAAQ4pI,QAAQ+W,GAAYxoJ,OAAOsQ,KAAKk4I,GACtD9jJ,EAAI,EAAGA,EAAI4L,EAAKjK,OAAQ3B,IAAK,CAClC,IAAI+C,EAAM6I,EAAK5L,GACf1E,OAAOwH,eAAeyY,EAAQxY,EAAKzH,OAAOitD,yBAAyBu7F,EAAU/gJ,GACjF,CACJ,CACJ,CACA,SAASghJ,GAAejtB,GACpB,IAAI3kH,EAAS6xI,GAAcltB,EAAG53H,SAAS+kJ,OAAQntB,GAC3C3kH,IACA69H,IAAgB,GAChB10I,OAAOsQ,KAAKuG,GAAQhO,SAAQ,SAAUpB,GAU9By5H,GAAe1F,EAAI/zH,EAAKoP,EAAOpP,GAEvC,IACAitI,IAAgB,GAExB,CACA,SAASgU,GAAcC,EAAQntB,GAC3B,GAAImtB,EAAQ,CAIR,IAFA,IAAI9xI,EAAS7W,OAAOyI,OAAO,MACvB6H,EAAOw3H,GAAYjgI,QAAQ4pI,QAAQkX,GAAU3oJ,OAAOsQ,KAAKq4I,GACpDjkJ,EAAI,EAAGA,EAAI4L,EAAKjK,OAAQ3B,IAAK,CAClC,IAAI+C,EAAM6I,EAAK5L,GAEf,GAAY,WAAR+C,EAAJ,CAEA,IAAImhJ,EAAaD,EAAOlhJ,GAAKgjD,KAC7B,GAAIm+F,KAAcptB,EAAGsb,UACjBjgI,EAAOpP,GAAO+zH,EAAGsb,UAAU8R,QAE1B,GAAI,YAAaD,EAAOlhJ,GAAM,CAC/B,IAAIohJ,EAAiBF,EAAOlhJ,GAAKpH,QACjCwW,EAAOpP,GAAO4lI,EAAWwb,GACnBA,EAAetlJ,KAAKi4H,GACpBqtB,CACV,MACS,CAXG,CAchB,CACA,OAAOhyI,CACX,CACJ,CAEA,SAASiyI,GAAwB9nJ,EAAMpB,EAAOsnB,EAAU7jB,EAAQkuI,GAC5D,IAIIwX,EAJAxxB,EAAQ54H,KACR8C,EAAU8vI,EAAK9vI,QAIfqsI,EAAOzqI,EAAQ,SACf0lJ,EAAY/oJ,OAAOyI,OAAOpF,GAC1B0lJ,EAAUC,UAAY3lJ,IAMtB0lJ,EAAY1lJ,EAEZA,EAASA,EAAO2lJ,WAEpB,IAAIC,EAAa/b,EAAOzrI,EAAQsB,WAC5BmmJ,GAAqBD,EACzBtqJ,KAAKqC,KAAOA,EACZrC,KAAKiB,MAAQA,EACbjB,KAAKuoB,SAAWA,EAChBvoB,KAAK0E,OAASA,EACd1E,KAAKquE,UAAYhsE,EAAK9B,IAAM8tI,EAC5BruI,KAAKwqJ,WAAaT,GAAcjnJ,EAAQknJ,OAAQtlJ,GAChD1E,KAAKs9I,MAAQ,WAIT,OAHK1kB,EAAM+I,QACP+b,GAAqBh5I,EAAQrC,EAAKu7I,YAAchlB,EAAM+I,OAAS0b,GAAa90H,EAAU7jB,IAEnFk0H,EAAM+I,MACjB,EACAtgI,OAAOwH,eAAe7I,KAAM,cAAe,CACvC0I,YAAY,EACZ1F,IAAK,WACD,OAAO06I,GAAqBh5I,EAAQrC,EAAKu7I,YAAa59I,KAAKs9I,QAC/D,IAGAgN,IAEAtqJ,KAAKiF,SAAWnC,EAEhB9C,KAAK2hI,OAAS3hI,KAAKs9I,QACnBt9I,KAAKqhI,aAAeqc,GAAqBh5I,EAAQrC,EAAKu7I,YAAa59I,KAAK2hI,SAExE7+H,EAAQwB,SACRtE,KAAKC,GAAK,SAAUoG,EAAGP,EAAGI,EAAGL,GACzB,IAAIkK,EAAQgwI,GAAgBqK,EAAW/jJ,EAAGP,EAAGI,EAAGL,EAAG0kJ,GAKnD,OAJIx6I,IAAU6D,EAAQ7D,KAClBA,EAAM0jI,UAAY3wI,EAAQwB,SAC1ByL,EAAMwjI,UAAY7uI,GAEfqL,CACX,EAGA/P,KAAKC,GAAK,SAAUoG,EAAGP,EAAGI,EAAGL,GACzB,OAAOk6I,GAAgBqK,EAAW/jJ,EAAGP,EAAGI,EAAGL,EAAG0kJ,EAClD,CAER,CAEA,SAASE,GAA0B7X,EAAM2U,EAAWllJ,EAAM+nJ,EAAW7hI,GACjE,IAAIzlB,EAAU8vI,EAAK9vI,QACf7B,EAAQ,CAAC,EACTo4I,EAAcv2I,EAAQ7B,MAC1B,GAAIihI,EAAMmX,GACN,IAAK,IAAIvwI,KAAOuwI,EACZp4I,EAAM6H,GAAOm/I,GAAan/I,EAAKuwI,EAAakO,GAAalZ,QAIzDnM,EAAM7/H,EAAKhC,QACXqqJ,GAAWzpJ,EAAOoB,EAAKhC,OACvB6hI,EAAM7/H,EAAKpB,QACXypJ,GAAWzpJ,EAAOoB,EAAKpB,OAE/B,IAAI4+I,EAAgB,IAAIsK,GAAwB9nJ,EAAMpB,EAAOsnB,EAAU6hI,EAAWxX,GAC9E7iI,EAAQjN,EAAQhD,OAAO8E,KAAK,KAAMi7I,EAAc5/I,GAAI4/I,GACxD,GAAI9vI,aAAiBojI,GACjB,OAAOwX,GAA6B56I,EAAO1N,EAAMw9I,EAAcn7I,OAAQ5B,EAAS+8I,GAE/E,GAAIjsI,EAAQ7D,GAAQ,CAGrB,IAFA,IAAI66I,EAASnR,GAAkB1pI,IAAU,GACrCjC,EAAM,IAAIxM,MAAMspJ,EAAOljJ,QAClB3B,EAAI,EAAGA,EAAI6kJ,EAAOljJ,OAAQ3B,IAC/B+H,EAAI/H,GAAK4kJ,GAA6BC,EAAO7kJ,GAAI1D,EAAMw9I,EAAcn7I,OAAQ5B,EAAS+8I,GAE1F,OAAO/xI,CACX,CACJ,CACA,SAAS68I,GAA6B56I,EAAO1N,EAAM+nJ,EAAWtnJ,EAAS+8I,GAInE,IAAIrjG,EAAQ03F,GAAWnkI,GAUvB,OATAysC,EAAM+2F,UAAY6W,EAClB5tG,EAAMg3F,UAAY1wI,EAKdT,EAAK83I,QACJ39F,EAAMn6C,OAASm6C,EAAMn6C,KAAO,CAAC,IAAI83I,KAAO93I,EAAK83I,MAE3C39F,CACX,CACA,SAASkuG,GAAWnhI,EAAIuiC,GACpB,IAAK,IAAIhjD,KAAOgjD,EACZviC,EAAG+lH,EAASxmI,IAAQgjD,EAAKhjD,EAEjC,CAEA,SAAS+hJ,GAAiB/nJ,GACtB,OAAOA,EAAQ0P,MAAQ1P,EAAQgoJ,QAAUhoJ,EAAQioJ,aACrD,CAtDAxO,GAAqB4N,GAAwBliJ,WAwD7C,IAAI+iJ,GAAsB,CACtBt6E,KAAM,SAAU3gE,EAAOy2I,GACnB,GAAIz2I,EAAMgtH,oBACLhtH,EAAMgtH,kBAAkBspB,cACzBt2I,EAAM1N,KAAK65H,UAAW,CAEtB,IAAI+uB,EAAcl7I,EAClBi7I,GAAoBluB,SAASmuB,EAAaA,EAC9C,KACK,CACD,IAAIxnH,EAAS1zB,EAAMgtH,kBAAoBmuB,GAAgCn7I,EAAO+1I,IAC9EriH,EAAM0nH,OAAO3E,EAAYz2I,EAAMqjI,SAAMjjI,EAAWq2I,EACpD,CACJ,EACA1pB,SAAU,SAAUsuB,EAAUr7I,GAC1B,IAAIjN,EAAUiN,EAAMsjI,iBAChB5vG,EAAS1zB,EAAMgtH,kBAAoBquB,EAASruB,kBAChDuqB,GAAqB7jH,EAAO3gC,EAAQykJ,UACpCzkJ,EAAQurE,UACRt+D,EACAjN,EAAQylB,SAEZ,EACAilC,OAAQ,SAAUz9C,GACd,IAAIxL,EAAUwL,EAAMxL,QAASw4H,EAAoBhtH,EAAMgtH,kBAClDA,EAAkBujB,aACnBvjB,EAAkBujB,YAAa,EAC/ByG,GAAWhqB,EAAmB,YAE9BhtH,EAAM1N,KAAK65H,YACP33H,EAAQ+7I,WAMRkJ,GAAwBzsB,GAGxBorB,GAAuBprB,GAAmB,GAGtD,EACA/xH,QAAS,SAAU+E,GACf,IAAIgtH,EAAoBhtH,EAAMgtH,kBACzBA,EAAkBspB,eACdt2I,EAAM1N,KAAK65H,UAIZmsB,GAAyBtrB,GAAmB,GAH5CA,EAAkB+pB,WAM9B,GAEAuE,GAAehqJ,OAAOsQ,KAAKq5I,IAC/B,SAAS9I,GAAgBtP,EAAMvwI,EAAMkC,EAASgkB,EAAU2oC,GACpD,IAAIo9E,EAAQsE,GAAZ,CAGA,IAAI+N,EAAWp8I,EAAQU,SAASqmJ,MAOhC,GALInqI,EAASyxH,KACTA,EAAO+N,EAASjuI,OAAOkgI,IAIP,oBAATA,EAAX,CAOA,IAAIU,EAEJ,GAAIhF,EAAQsE,EAAKhK,OACb0K,EAAeV,EACfA,EAAO8N,GAAsBpN,EAAcqN,QAC9BxwI,IAATyiI,GAIA,OAAO6N,GAAuBnN,EAAcjxI,EAAMkC,EAASgkB,EAAU2oC,GAG7E7uD,EAAOA,GAAQ,CAAC,EAGhBkpJ,GAA0B3Y,GAEtB1Q,EAAM7/H,EAAKmpJ,QAEXC,GAAe7Y,EAAK9vI,QAAST,GAIjC,IAAIklJ,EAAYnO,GAA0B/2I,EAAMuwI,EAAM1hF,GAGtD,GAAIq9E,EAAOqE,EAAK9vI,QAAQuB,YACpB,OAAOomJ,GAA0B7X,EAAM2U,EAAWllJ,EAAMkC,EAASgkB,GAIrE,IAAI8lD,EAAYhsE,EAAK9B,GAKrB,GAFA8B,EAAK9B,GAAK8B,EAAKqpJ,SAEXnd,EAAOqE,EAAK9vI,QAAQojJ,UAAW,CAI/B,IAAI/L,EAAO93I,EAAK83I,KAChB93I,EAAO,CAAC,EACJ83I,IACA93I,EAAK83I,KAAOA,EAEpB,CAEAwR,GAAsBtpJ,GAGtB,IAAImQ,EAAOq4I,GAAiBjY,EAAK9vI,UAAYouD,EACzCnhD,EAAQ,IAAIojI,GAEhB,iBAAiB3tI,OAAOotI,EAAKhK,KAAKpjI,OAAOgN,EAAO,IAAIhN,OAAOgN,GAAQ,IAAKnQ,OAAM8N,OAAWA,OAAWA,EAAW5L,EAE/G,CAAEquI,KAAMA,EAAM2U,UAAWA,EAAWl5E,UAAWA,EAAWnd,IAAKA,EAAK3oC,SAAUA,GAAY+qH,GAC1F,OAAOvjI,CA1DP,CAbA,CAwEJ,CACA,SAASm7I,GAETn7I,EAEArL,GACI,IAAI5B,EAAU,CACV8oJ,cAAc,EACdvpB,aAActyH,EACdrL,OAAQA,GAGRmnJ,EAAiB97I,EAAM1N,KAAKwpJ,eAKhC,OAJI3pB,EAAM2pB,KACN/oJ,EAAQhD,OAAS+rJ,EAAe/rJ,OAChCgD,EAAQ9B,gBAAkB6qJ,EAAe7qJ,iBAEtC,IAAI+O,EAAMsjI,iBAAiBT,KAAK9vI,EAC3C,CACA,SAAS6oJ,GAAsBtpJ,GAE3B,IADA,IAAIigJ,EAAQjgJ,EAAK8B,OAAS9B,EAAK8B,KAAO,CAAC,GAC9B4B,EAAI,EAAGA,EAAIslJ,GAAa3jJ,OAAQ3B,IAAK,CAC1C,IAAI+C,EAAMuiJ,GAAatlJ,GACnBT,EAAWg9I,EAAMx5I,GACjBgjJ,EAAUd,GAAoBliJ,GAE9BxD,IAAawmJ,GAAaxmJ,GAAYA,EAASymJ,UAC/CzJ,EAAMx5I,GAAOxD,EAAW0mJ,GAAUF,EAASxmJ,GAAYwmJ,EAE/D,CACJ,CACA,SAASE,GAAUC,EAAIC,GACnB,IAAI/S,EAAS,SAAU9yI,EAAGP,GAEtBmmJ,EAAG5lJ,EAAGP,GACNomJ,EAAG7lJ,EAAGP,EACV,EAEA,OADAqzI,EAAO4S,SAAU,EACV5S,CACX,CAGA,SAASsS,GAAe3oJ,EAAST,GAC7B,IAAIsR,EAAQ7Q,EAAQ0oJ,OAAS1oJ,EAAQ0oJ,MAAM73I,MAAS,QAChD0xB,EAASviC,EAAQ0oJ,OAAS1oJ,EAAQ0oJ,MAAMnmH,OAAU,SACrDhjC,EAAKhC,QAAUgC,EAAKhC,MAAQ,CAAC,IAAIsT,GAAQtR,EAAKmpJ,MAAMtqJ,MACrD,IAAIX,EAAK8B,EAAK9B,KAAO8B,EAAK9B,GAAK,CAAC,GAC5B+E,EAAW/E,EAAG8kC,GACdj1B,EAAW/N,EAAKmpJ,MAAMp7I,SACtB8xH,EAAM58H,IACFsO,EAAQtO,IAC0B,IAAhCA,EAASuM,QAAQzB,GACjB9K,IAAa8K,KACf7P,EAAG8kC,GAAS,CAACj1B,GAAU5K,OAAOF,IAIlC/E,EAAG8kC,GAASj1B,CAEpB,CAEA,IAAI9B,GAAO4xH,EA8FPwC,GAASzzH,EAAO0zH,sBAgBpB,SAASwpB,GAAU5iI,EAAIuiC,EAAMsgG,GAEzB,QADkB,IAAdA,IAAwBA,GAAY,IACnCtgG,EACD,OAAOviC,EAKX,IAJA,IAAIzgB,EAAKujJ,EAAOC,EACZ36I,EAAOw3H,GACLjgI,QAAQ4pI,QAAQhnF,GAChBzqD,OAAOsQ,KAAKm6C,GACT/lD,EAAI,EAAGA,EAAI4L,EAAKjK,OAAQ3B,IAC7B+C,EAAM6I,EAAK5L,GAEC,WAAR+C,IAEJujJ,EAAQ9iI,EAAGzgB,GACXwjJ,EAAUxgG,EAAKhjD,GACVsjJ,GAAcjd,EAAO5lH,EAAIzgB,GAGrBujJ,IAAUC,GACf3d,EAAc0d,IACd1d,EAAc2d,IACdH,GAAUE,EAAOC,GALjB5oJ,GAAI6lB,EAAIzgB,EAAKwjJ,IAQrB,OAAO/iI,CACX,CAIA,SAASgjI,GAAcC,EAAWC,EAAU5vB,GACxC,OAAKA,EAkBM,WAEH,IAAI6vB,EAAehe,EAAW+d,GACxBA,EAAS7nJ,KAAKi4H,EAAIA,GAClB4vB,EACFE,EAAcje,EAAW8d,GACvBA,EAAU5nJ,KAAKi4H,EAAIA,GACnB2vB,EACN,OAAIE,EACOP,GAAUO,EAAcC,GAGxBA,CAEf,EA9BKF,EAGAD,EAQE,WACH,OAAOL,GAAUzd,EAAW+d,GAAYA,EAAS7nJ,KAAK5E,KAAMA,MAAQysJ,EAAU/d,EAAW8d,GAAaA,EAAU5nJ,KAAK5E,KAAMA,MAAQwsJ,EACvI,EATWC,EAHAD,CA+BnB,CAiBA,SAAS/I,GAAmB+I,EAAWC,GACnC,IAAI3+I,EAAM2+I,EACJD,EACIA,EAAUhnJ,OAAOinJ,GACjB74I,EAAQ64I,GACJA,EACA,CAACA,GACTD,EACN,OAAO1+I,EAAM8+I,GAAY9+I,GAAOA,CACpC,CACA,SAAS8+I,GAAYtK,GAEjB,IADA,IAAIx0I,EAAM,GACD/H,EAAI,EAAGA,EAAIu8I,EAAM56I,OAAQ3B,KACC,IAA3B+H,EAAI+D,QAAQywI,EAAMv8I,KAClB+H,EAAIpB,KAAK41I,EAAMv8I,IAGvB,OAAO+H,CACX,CAWA,SAAS++I,GAAYL,EAAWC,EAAU5vB,EAAI/zH,GAC1C,IAAIgF,EAAMzM,OAAOyI,OAAO0iJ,GAAa,MACrC,OAAIC,EAEO/5I,EAAO5E,EAAK2+I,GAGZ3+I,CAEf,CAtDA40H,GAAOrgI,KAAO,SAAUmqJ,EAAWC,EAAU5vB,GACzC,OAAKA,EAUE0vB,GAAcC,EAAWC,EAAU5vB,GATlC4vB,GAAgC,oBAAbA,EAKZD,EAEJD,GAAcC,EAAWC,EAGxC,EAuBA5b,EAAgB3mI,SAAQ,SAAU/F,GAC9Bu+H,GAAOv+H,GAAQs/I,EACnB,IAkBA7S,EAAY1mI,SAAQ,SAAUzI,GAC1BihI,GAAOjhI,EAAO,KAAOorJ,EACzB,IAOAnqB,GAAO7gI,MAAQ,SAAU2qJ,EAAWC,EAAU5vB,EAAI/zH,GAS9C,GANI0jJ,IAAcna,KACdma,OAAYr8I,GAEZs8I,IAAapa,KACboa,OAAWt8I,IAEVs8I,EACD,OAAOprJ,OAAOyI,OAAO0iJ,GAAa,MAItC,IAAKA,EACD,OAAOC,EACX,IAAI72H,EAAM,CAAC,EAEX,IAAK,IAAIqoH,KADTvrI,EAAOkjB,EAAK42H,GACMC,EAAU,CACxB,IAAIK,EAAWl3H,EAAIqoH,GACfx6G,EAAQgpH,EAASxO,GACjB6O,IAAal5I,EAAQk5I,KACrBA,EAAW,CAACA,IAEhBl3H,EAAIqoH,GAAS6O,EAAWA,EAAStnJ,OAAOi+B,GAAS7vB,EAAQ6vB,GAASA,EAAQ,CAACA,EAC/E,CACA,OAAO7N,CACX,EAIA8sG,GAAOzhI,MACHyhI,GAAOn/H,QACHm/H,GAAOsnB,OACHtnB,GAAOqqB,SACH,SAAUP,EAAWC,EAAU5vB,EAAI/zH,GAI/B,IAAK0jJ,EACD,OAAOC,EACX,IAAI72H,EAAMv0B,OAAOyI,OAAO,MAIxB,OAHA4I,EAAOkjB,EAAK42H,GACRC,GACA/5I,EAAOkjB,EAAK62H,GACT72H,CACX,EAChB8sG,GAAOknB,QAAU,SAAU4C,EAAWC,GAClC,OAAKD,EAEE,WACH,IAAI52H,EAAMv0B,OAAOyI,OAAO,MAMxB,OALAqiJ,GAAUv2H,EAAK84G,EAAW8d,GAAaA,EAAU5nJ,KAAK5E,MAAQwsJ,GAC1DC,GACAN,GAAUv2H,EAAK84G,EAAW+d,GAAYA,EAAS7nJ,KAAK5E,MAAQysJ,GAAU,GAGnE72H,CACX,EATW62H,CAUf,EAIA,IAAIO,GAAe,SAAUR,EAAWC,GACpC,YAAoBt8I,IAAbs8I,EAAyBD,EAAYC,CAChD,EA0BA,SAASQ,GAAenqJ,EAAS+5H,GAC7B,IAAI57H,EAAQ6B,EAAQ7B,MACpB,GAAKA,EAAL,CAEA,IACI8E,EAAG/D,EAAKwQ,EADR1E,EAAM,CAAC,EAEX,GAAI8F,EAAQ3S,GAAQ,CAChB8E,EAAI9E,EAAMyG,OACV,MAAO3B,IACH/D,EAAMf,EAAM8E,GACO,kBAAR/D,IACPwQ,EAAO88H,EAASttI,GAChB8L,EAAI0E,GAAQ,CAAE/Q,KAAM,MAMhC,MACK,GAAIktI,EAAc1tI,GACnB,IAAK,IAAI6H,KAAO7H,EACZe,EAAMf,EAAM6H,GACZ0J,EAAO88H,EAASxmI,GAChBgF,EAAI0E,GAAQm8H,EAAc3sI,GAAOA,EAAM,CAAEP,KAAMO,QAG9C,EAITc,EAAQ7B,MAAQ6M,CA3BN,CA4Bd,CAIA,SAASo/I,GAAgBpqJ,EAAS+5H,GAC9B,IAAImtB,EAASlnJ,EAAQknJ,OACrB,GAAKA,EAAL,CAEA,IAAI3L,EAAcv7I,EAAQknJ,OAAS,CAAC,EACpC,GAAIp2I,EAAQo2I,GACR,IAAK,IAAIjkJ,EAAI,EAAGA,EAAIikJ,EAAOtiJ,OAAQ3B,IAC/Bs4I,EAAW2L,EAAOjkJ,IAAM,CAAE+lD,KAAMk+F,EAAOjkJ,SAG1C,GAAI4oI,EAAcqb,GACnB,IAAK,IAAIlhJ,KAAOkhJ,EAAQ,CACpB,IAAIhoJ,EAAMgoJ,EAAOlhJ,GACjBu1I,EAAWv1I,GAAO6lI,EAAc3sI,GAC1B0Q,EAAO,CAAEo5C,KAAMhjD,GAAO9G,GACtB,CAAE8pD,KAAM9pD,EAClB,MAEK,CAfC,CAmBd,CAIA,SAASmrJ,GAAsBrqJ,GAC3B,IAAIsqJ,EAAOtqJ,EAAQuqJ,WACnB,GAAID,EACA,IAAK,IAAItkJ,KAAOskJ,EAAM,CAClB,IAAIzkB,EAAMykB,EAAKtkJ,GACX4lI,EAAW/F,KACXykB,EAAKtkJ,GAAO,CAAE6C,KAAMg9H,EAAKr4H,OAAQq4H,GAEzC,CAER,CAWA,SAAS2kB,GAAa5oJ,EAAQ++B,EAAOo5F,GAejC,GAXI6R,EAAWjrG,KAEXA,EAAQA,EAAM3gC,SAElBmqJ,GAAexpH,EAAOo5F,GACtBqwB,GAAgBzpH,EAAOo5F,GACvBswB,GAAsB1pH,IAKjBA,EAAM6nH,QACH7nH,EAAM8pH,UACN7oJ,EAAS4oJ,GAAa5oJ,EAAQ++B,EAAM8pH,QAAS1wB,IAE7Cp5F,EAAM+pH,QACN,IAAK,IAAIznJ,EAAI,EAAG8B,EAAI47B,EAAM+pH,OAAO9lJ,OAAQ3B,EAAI8B,EAAG9B,IAC5CrB,EAAS4oJ,GAAa5oJ,EAAQ++B,EAAM+pH,OAAOznJ,GAAI82H,GAI3D,IACI/zH,EADAhG,EAAU,CAAC,EAEf,IAAKgG,KAAOpE,EACR+oJ,EAAW3kJ,GAEf,IAAKA,KAAO26B,EACH0rG,EAAOzqI,EAAQoE,IAChB2kJ,EAAW3kJ,GAGnB,SAAS2kJ,EAAW3kJ,GAChB,IAAI4kJ,EAAQhrB,GAAO55H,IAAQkkJ,GAC3BlqJ,EAAQgG,GAAO4kJ,EAAMhpJ,EAAOoE,GAAM26B,EAAM36B,GAAM+zH,EAAI/zH,EACtD,CACA,OAAOhG,CACX,CAMA,SAASu3I,GAAav3I,EAASrB,EAAMoP,EAAI88I,GAErC,GAAkB,kBAAP98I,EAAX,CAGA,IAAI+8I,EAAS9qJ,EAAQrB,GAErB,GAAI0tI,EAAOye,EAAQ/8I,GACf,OAAO+8I,EAAO/8I,GAClB,IAAIg9I,EAAcve,EAASz+H,GAC3B,GAAIs+H,EAAOye,EAAQC,GACf,OAAOD,EAAOC,GAClB,IAAIC,EAAeve,EAAWse,GAC9B,GAAI1e,EAAOye,EAAQE,GACf,OAAOF,EAAOE,GAElB,IAAIhgJ,EAAM8/I,EAAO/8I,IAAO+8I,EAAOC,IAAgBD,EAAOE,GAItD,OAAOhgJ,CAhBP,CAiBJ,CAEA,SAASm6I,GAAan/I,EAAKuwI,EAAakO,EAAW1qB,GAC/C,IAAIlpH,EAAO0lI,EAAYvwI,GACnBilJ,GAAU5e,EAAOoY,EAAWz+I,GAC5B5H,EAAQqmJ,EAAUz+I,GAElBklJ,EAAeC,GAAa1sJ,QAASoS,EAAKlS,MAC9C,GAAIusJ,GAAgB,EAChB,GAAID,IAAW5e,EAAOx7H,EAAM,WACxBzS,GAAQ,OAEP,GAAc,KAAVA,GAAgBA,IAAUuuI,EAAU3mI,GAAM,CAG/C,IAAIolJ,EAAcD,GAAa9sJ,OAAQwS,EAAKlS,OACxCysJ,EAAc,GAAKF,EAAeE,KAClChtJ,GAAQ,EAEhB,CAGJ,QAAciP,IAAVjP,EAAqB,CACrBA,EAAQitJ,GAAoBtxB,EAAIlpH,EAAM7K,GAGtC,IAAIslJ,EAAoBtY,GACxBC,IAAgB,GAChBM,GAAQn1I,GACR60I,GAAgBqY,EACpB,CAIA,OAAOltJ,CACX,CAIA,SAASitJ,GAAoBtxB,EAAIlpH,EAAM7K,GAEnC,GAAKqmI,EAAOx7H,EAAM,WAAlB,CAGA,IAAIg1H,EAAMh1H,EAAKjS,QAWf,OAAIm7H,GACAA,EAAG53H,SAASsiJ,gBACmBp3I,IAA/B0sH,EAAG53H,SAASsiJ,UAAUz+I,SACHqH,IAAnB0sH,EAAG6hB,OAAO51I,GACH+zH,EAAG6hB,OAAO51I,GAId4lI,EAAW/F,IAA+B,aAAvB0lB,GAAQ16I,EAAKlS,MACjCknI,EAAI/jI,KAAKi4H,GACT8L,CAtBN,CAuBJ,CAqEA,IAAI2lB,GAAsB,qBAM1B,SAASD,GAAQniJ,GACb,IAAI+V,EAAQ/V,GAAMA,EAAG3C,WAAW0Y,MAAMqsI,IACtC,OAAOrsI,EAAQA,EAAM,GAAK,EAC9B,CACA,SAASssI,GAAWloJ,EAAGP,GACnB,OAAOuoJ,GAAQhoJ,KAAOgoJ,GAAQvoJ,EAClC,CACA,SAASmoJ,GAAaxsJ,EAAM+sJ,GACxB,IAAK56I,EAAQ46I,GACT,OAAOD,GAAWC,EAAe/sJ,GAAQ,GAAK,EAElD,IAAK,IAAIsE,EAAI,EAAG8iB,EAAM2lI,EAAc9mJ,OAAQ3B,EAAI8iB,EAAK9iB,IACjD,GAAIwoJ,GAAWC,EAAczoJ,GAAItE,GAC7B,OAAOsE,EAGf,OAAQ,CACZ,CAwHA,IAAI0oJ,GAA2B,CAC3B/lJ,YAAY,EACZC,cAAc,EACd3F,IAAKk9H,EACLx8H,IAAKw8H,GAET,SAASic,GAAM/zI,EAAQsmJ,EAAW5lJ,GAC9B2lJ,GAAyBzrJ,IAAM,WAC3B,OAAOhD,KAAK0uJ,GAAW5lJ,EAC3B,EACA2lJ,GAAyB/qJ,IAAM,SAAqB1B,GAChDhC,KAAK0uJ,GAAW5lJ,GAAO9G,CAC3B,EACAX,OAAOwH,eAAeT,EAAQU,EAAK2lJ,GACvC,CACA,SAASE,GAAU9xB,GACf,IAAI7nH,EAAO6nH,EAAG53H,SAOd,GANI+P,EAAK/T,OACL2tJ,GAAY/xB,EAAI7nH,EAAK/T,OAEzBq9I,GAAUzhB,GACN7nH,EAAKzR,SACLsrJ,GAAYhyB,EAAI7nH,EAAKzR,SACrByR,EAAK3S,KACLysJ,GAASjyB,OAER,CACD,IAAI4Y,EAAKY,GAASxZ,EAAGmqB,MAAQ,CAAC,GAC9BvR,GAAMA,EAAGW,SACb,CACIphI,EAAK+3I,UACLgC,GAAelyB,EAAI7nH,EAAK+3I,UACxB/3I,EAAKnT,OAASmT,EAAKnT,QAAUwwI,IAC7B2c,GAAUnyB,EAAI7nH,EAAKnT,MAE3B,CACA,SAAS+sJ,GAAY/xB,EAAIoyB,GACrB,IAAI1H,EAAY1qB,EAAG53H,SAASsiJ,WAAa,CAAC,EACtCtmJ,EAAS47H,EAAG6hB,OAAS3H,GAAgB,CAAC,GAGtCplI,EAAQkrH,EAAG53H,SAAS+iJ,UAAY,GAChCztI,GAAUsiH,EAAGR,QAEZ9hH,GACDw7H,IAAgB,GAEpB,IAAImF,EAAU,SAAUpyI,GACpB6I,EAAKjF,KAAK5D,GACV,IAAI5H,EAAQ+mJ,GAAan/I,EAAKmmJ,EAAc1H,EAAW1qB,GAkBnD0F,GAAethI,EAAO6H,EAAK5H,GAKzB4H,KAAO+zH,GACTsf,GAAMtf,EAAI,SAAU/zH,EAE5B,EACA,IAAK,IAAIA,KAAOmmJ,EACZ/T,EAAQpyI,GAEZitI,IAAgB,EACpB,CACA,SAAS+Y,GAASjyB,GACd,IAAIx6H,EAAOw6H,EAAG53H,SAAS5C,KACvBA,EAAOw6H,EAAGmqB,MAAQtY,EAAWrsI,GAAQ2oB,GAAQ3oB,EAAMw6H,GAAMx6H,GAAQ,CAAC,EAC7DssI,EAActsI,KACfA,EAAO,CAAC,GAMZ,IAAIsP,EAAOtQ,OAAOsQ,KAAKtP,GACnBpB,EAAQ47H,EAAG53H,SAAShE,MAEpB8E,GADU82H,EAAG53H,SAAS1B,QAClBoO,EAAKjK,QACb,MAAO3B,IAAK,CACR,IAAI+C,EAAM6I,EAAK5L,GACX,EAKA9E,GAASkuI,EAAOluI,EAAO6H,IAKjB8oI,EAAW9oI,IACjBqzI,GAAMtf,EAAI,QAAS/zH,EAE3B,CAEA,IAAI2sI,EAAKY,GAAQh0I,GACjBozI,GAAMA,EAAGW,SACb,CACA,SAASprH,GAAQ3oB,EAAMw6H,GAEnBqY,KACA,IACI,OAAO7yI,EAAKuC,KAAKi4H,EAAIA,EACzB,CACA,MAAO15H,IAEH,OADAo9I,GAAYp9I,GAAG05H,EAAI,UACZ,CAAC,CACZ,CACA,QACIsY,IACJ,CACJ,CACA,IAAI+Z,GAAyB,CAAE7K,MAAM,GACrC,SAAS0K,GAAelyB,EAAIkwB,GAExB,IAAIoC,EAAYtyB,EAAGuyB,kBAAoB/tJ,OAAOyI,OAAO,MAEjDulJ,EAAQ9c,KACZ,IAAK,IAAIzpI,KAAOikJ,EAAU,CACtB,IAAIuC,EAAUvC,EAASjkJ,GACnB4lD,EAASggF,EAAW4gB,GAAWA,EAAUA,EAAQtsJ,IACjD,EAGCqsJ,IAEDF,EAASrmJ,GAAO,IAAIk7I,GAAQnnB,EAAInuE,GAAUwxE,EAAMA,EAAMgvB,KAKpDpmJ,KAAO+zH,GACT0yB,GAAe1yB,EAAI/zH,EAAKwmJ,EAahC,CACJ,CACA,SAASC,GAAennJ,EAAQU,EAAKwmJ,GACjC,IAAIE,GAAejd,KACf7D,EAAW4gB,IACXb,GAAyBzrJ,IAAMwsJ,EACzBC,GAAqB3mJ,GACrB4mJ,GAAoBJ,GAC1Bb,GAAyB/qJ,IAAMw8H,IAG/BuuB,GAAyBzrJ,IAAMssJ,EAAQtsJ,IACjCwsJ,IAAiC,IAAlBF,EAAQv2I,MACnB02I,GAAqB3mJ,GACrB4mJ,GAAoBJ,EAAQtsJ,KAChCk9H,EACNuuB,GAAyB/qJ,IAAM4rJ,EAAQ5rJ,KAAOw8H,GAOlD7+H,OAAOwH,eAAeT,EAAQU,EAAK2lJ,GACvC,CACA,SAASgB,GAAqB3mJ,GAC1B,OAAO,WACH,IAAIqgJ,EAAUnpJ,KAAKovJ,mBAAqBpvJ,KAAKovJ,kBAAkBtmJ,GAC/D,GAAIqgJ,EAeA,OAdIA,EAAQ3E,OACR2E,EAAQrE,WAERrQ,GAAIrsI,QASJ+gJ,EAAQtU,SAELsU,EAAQjoJ,KAEvB,CACJ,CACA,SAASwuJ,GAAoBxjJ,GACzB,OAAO,WACH,OAAOA,EAAGtH,KAAK5E,KAAMA,KACzB,CACJ,CACA,SAAS6uJ,GAAYhyB,EAAIt5H,GACTs5H,EAAG53H,SAAShE,MACxB,IAAK,IAAI6H,KAAOvF,EAcZs5H,EAAG/zH,GAA+B,oBAAjBvF,EAAQuF,GAAsBo3H,EAAOv0H,EAAKpI,EAAQuF,GAAM+zH,EAEjF,CACA,SAASmyB,GAAUnyB,EAAIh7H,GACnB,IAAK,IAAIiH,KAAOjH,EAAO,CACnB,IAAIE,EAAUF,EAAMiH,GACpB,GAAI8K,EAAQ7R,GACR,IAAK,IAAIgE,EAAI,EAAGA,EAAIhE,EAAQ2F,OAAQ3B,IAChC4pJ,GAAc9yB,EAAI/zH,EAAK/G,EAAQgE,SAInC4pJ,GAAc9yB,EAAI/zH,EAAK/G,EAE/B,CACJ,CACA,SAAS4tJ,GAAc9yB,EAAIonB,EAASliJ,EAASe,GAQzC,OAPI6rI,EAAc5sI,KACde,EAAUf,EACVA,EAAUA,EAAQA,SAEC,kBAAZA,IACPA,EAAU86H,EAAG96H,IAEV86H,EAAG+yB,OAAO3L,EAASliJ,EAASe,EACvC,CACA,SAAS+sJ,GAAW/gJ,GAIhB,IAAIghJ,EAAU,CACdA,IAAc,WACV,OAAO9vJ,KAAKgnJ,KAChB,GACI+I,EAAW,CACfA,IAAe,WACX,OAAO/vJ,KAAK0+I,MAChB,GAUAr9I,OAAOwH,eAAeiG,EAAI7G,UAAW,QAAS6nJ,GAC9CzuJ,OAAOwH,eAAeiG,EAAI7G,UAAW,SAAU8nJ,GAC/CjhJ,EAAI7G,UAAU+nJ,KAAOtsJ,GACrBoL,EAAI7G,UAAUgoJ,QAAUl5I,GACxBjI,EAAI7G,UAAU2nJ,OAAS,SAAU3L,EAAShlF,EAAIn8D,GAC1C,IAAI+5H,EAAK78H,KACT,GAAI2uI,EAAc1vE,GACd,OAAO0wF,GAAc9yB,EAAIonB,EAAShlF,EAAIn8D,GAE1CA,EAAUA,GAAW,CAAC,EACtBA,EAAQshJ,MAAO,EACf,IAAI+E,EAAU,IAAInF,GAAQnnB,EAAIonB,EAAShlF,EAAIn8D,GAC3C,GAAIA,EAAQhB,UAAW,CACnB,IAAIgzI,EAAO,mCAAoCtvI,OAAO2jJ,EAAQvE,WAAY,KAC1E1P,KACAwD,GAAwBz5E,EAAI49D,EAAI,CAACssB,EAAQjoJ,OAAQ27H,EAAIiY,GACrDK,IACJ,CACA,OAAO,WACHgU,EAAQxd,UACZ,CACJ,CACJ,CAEA,IAAIukB,GAAM,EACV,SAASC,GAAYrhJ,GACjBA,EAAI7G,UAAUmoJ,MAAQ,SAAUttJ,GAC5B,IAAI+5H,EAAK78H,KAET68H,EAAGwzB,KAAOH,KAUVrzB,EAAGia,QAAS,EAEZja,EAAG0Z,UAAW,EAEd1Z,EAAGqW,OAAS,IAAIoE,IAAY,GAC5Bza,EAAGqW,OAAOnzI,KAAM,EAEZ+C,GAAWA,EAAQ8oJ,aAInB0E,GAAsBzzB,EAAI/5H,GAG1B+5H,EAAG53H,SAAWqoJ,GAAa/B,GAA0B1uB,EAAG70H,aAAclF,GAAW,CAAC,EAAG+5H,GAOrFA,EAAG4e,aAAe5e,EAGtBA,EAAG38H,MAAQ28H,EACXopB,GAAcppB,GACdmoB,GAAWnoB,GACX6iB,GAAW7iB,GACXkqB,GAAWlqB,EAAI,oBAAgB1sH,GAAW,GAC1C25I,GAAejtB,GACf8xB,GAAU9xB,GACV6sB,GAAY7sB,GACZkqB,GAAWlqB,EAAI,WAOXA,EAAG53H,SAAS4K,IACZgtH,EAAGsuB,OAAOtuB,EAAG53H,SAAS4K,GAE9B,CACJ,CACA,SAASygJ,GAAsBzzB,EAAI/5H,GAC/B,IAAIkS,EAAQ6nH,EAAG53H,SAAW5D,OAAOyI,OAAO+yH,EAAG70H,YAAYlF,SAEnD88I,EAAc98I,EAAQu/H,aAC1BrtH,EAAKtQ,OAAS5B,EAAQ4B,OACtBsQ,EAAKqtH,aAAeud,EACpB,IAAI2Q,EAAwB3Q,EAAYvM,iBACxCr+H,EAAKuyI,UAAYgJ,EAAsBhJ,UACvCvyI,EAAKirI,iBAAmBsQ,EAAsBliF,UAC9Cr5D,EAAK8qI,gBAAkByQ,EAAsBhoI,SAC7CvT,EAAK+1I,cAAgBwF,EAAsBr/F,IACvCpuD,EAAQhD,SACRkV,EAAKlV,OAASgD,EAAQhD,OACtBkV,EAAKhU,gBAAkB8B,EAAQ9B,gBAEvC,CACA,SAASuqJ,GAA0B3Y,GAC/B,IAAI9vI,EAAU8vI,EAAK9vI,QACnB,GAAI8vI,EAAK4d,MAAO,CACZ,IAAIC,EAAelF,GAA0B3Y,EAAK4d,OAC9CE,EAAqB9d,EAAK6d,aAC9B,GAAIA,IAAiBC,EAAoB,CAGrC9d,EAAK6d,aAAeA,EAEpB,IAAIE,EAAkBC,GAAuBhe,GAEzC+d,GACAj+I,EAAOkgI,EAAKie,cAAeF,GAE/B7tJ,EAAU8vI,EAAK9vI,QAAUwqJ,GAAamD,EAAc7d,EAAKie,eACrD/tJ,EAAQ0P,OACR1P,EAAQ65H,WAAW75H,EAAQ0P,MAAQogI,EAE3C,CACJ,CACA,OAAO9vI,CACX,CACA,SAAS8tJ,GAAuBhe,GAC5B,IAAIke,EACAC,EAASne,EAAK9vI,QACdkuJ,EAASpe,EAAKqe,cAClB,IAAK,IAAInoJ,KAAOioJ,EACRA,EAAOjoJ,KAASkoJ,EAAOloJ,KAClBgoJ,IACDA,EAAW,CAAC,GAChBA,EAAShoJ,GAAOioJ,EAAOjoJ,IAG/B,OAAOgoJ,CACX,CAEA,SAAShiJ,GAAIhM,GAIT9C,KAAKowJ,MAAMttJ,EACf,CAYA,SAASouJ,GAAQpiJ,GACbA,EAAIs/H,IAAM,SAAU+iB,GAChB,IAAIC,EAAmBpxJ,KAAKqxJ,oBAAsBrxJ,KAAKqxJ,kBAAoB,IAC3E,GAAID,EAAiBv/I,QAAQs/I,IAAW,EACpC,OAAOnxJ,KAGX,IAAI01B,EAAOo6G,EAAQroI,UAAW,GAS9B,OARAiuB,EAAKzS,QAAQjjB,MACT0uI,EAAWyiB,EAAOtiJ,SAClBsiJ,EAAOtiJ,QAAQpF,MAAM0nJ,EAAQz7H,GAExBg5G,EAAWyiB,IAChBA,EAAO1nJ,MAAM,KAAMisB,GAEvB07H,EAAiB1kJ,KAAKykJ,GACfnxJ,IACX,CACJ,CAEA,SAASsxJ,GAAUxiJ,GACfA,EAAIgE,MAAQ,SAAUA,GAElB,OADA9S,KAAK8C,QAAUwqJ,GAAattJ,KAAK8C,QAASgQ,GACnC9S,IACX,CACJ,CAEA,SAASuxJ,GAAWziJ,GAMhBA,EAAI85H,IAAM,EACV,IAAIA,EAAM,EAIV95H,EAAI4D,OAAS,SAAUm+I,GACnBA,EAAgBA,GAAiB,CAAC,EAClC,IAAIW,EAAQxxJ,KACRyxJ,EAAUD,EAAM5oB,IAChB8oB,EAAcb,EAAcc,QAAUd,EAAcc,MAAQ,CAAC,GACjE,GAAID,EAAYD,GACZ,OAAOC,EAAYD,GAEvB,IAAIj/I,EAAOq4I,GAAiBgG,IAAkBhG,GAAiB2G,EAAM1uJ,SAIrE,IAAI8uJ,EAAM,SAAsB9uJ,GAC5B9C,KAAKowJ,MAAMttJ,EACf,EAoCA,OAnCA8uJ,EAAI3pJ,UAAY5G,OAAOyI,OAAO0nJ,EAAMvpJ,WACpC2pJ,EAAI3pJ,UAAUD,YAAc4pJ,EAC5BA,EAAIhpB,IAAMA,IACVgpB,EAAI9uJ,QAAUwqJ,GAAakE,EAAM1uJ,QAAS+tJ,GAC1Ce,EAAI,SAAWJ,EAIXI,EAAI9uJ,QAAQ7B,OACZ4wJ,GAAUD,GAEVA,EAAI9uJ,QAAQiqJ,UACZ+E,GAAaF,GAGjBA,EAAIl/I,OAAS8+I,EAAM9+I,OACnBk/I,EAAI9+I,MAAQ0+I,EAAM1+I,MAClB8+I,EAAIxjB,IAAMojB,EAAMpjB,IAGhBwC,EAAY1mI,SAAQ,SAAUzI,GAC1BmwJ,EAAInwJ,GAAQ+vJ,EAAM/vJ,EACtB,IAEI+Q,IACAo/I,EAAI9uJ,QAAQ65H,WAAWnqH,GAAQo/I,GAKnCA,EAAInB,aAAee,EAAM1uJ,QACzB8uJ,EAAIf,cAAgBA,EACpBe,EAAIX,cAAgBv+I,EAAO,CAAC,EAAGk/I,EAAI9uJ,SAEnC4uJ,EAAYD,GAAWG,EAChBA,CACX,CACJ,CACA,SAASC,GAAUE,GACf,IAAI9wJ,EAAQ8wJ,EAAKjvJ,QAAQ7B,MACzB,IAAK,IAAI6H,KAAO7H,EACZk7I,GAAM4V,EAAK9pJ,UAAW,SAAUa,EAExC,CACA,SAASgpJ,GAAaC,GAClB,IAAIhF,EAAWgF,EAAKjvJ,QAAQiqJ,SAC5B,IAAK,IAAIjkJ,KAAOikJ,EACZwC,GAAewC,EAAK9pJ,UAAWa,EAAKikJ,EAASjkJ,GAErD,CAEA,SAASkpJ,GAAmBljJ,GAIxB8hI,EAAY1mI,SAAQ,SAAUzI,GAE1BqN,EAAIrN,GAAQ,SAAUoP,EAAIgM,GACtB,OAAKA,GAQY,cAATpb,GAAwBktI,EAAc9xH,KAEtCA,EAAWrK,KAAOqK,EAAWrK,MAAQ3B,EACrCgM,EAAa7c,KAAK8C,QAAQwoJ,MAAM54I,OAAOmK,IAE9B,cAATpb,GAAwBitI,EAAW7xH,KACnCA,EAAa,CAAElR,KAAMkR,EAAYvM,OAAQuM,IAE7C7c,KAAK8C,QAAQrB,EAAO,KAAKoP,GAAMgM,EACxBA,GAhBA7c,KAAK8C,QAAQrB,EAAO,KAAKoP,EAkBxC,CACJ,GACJ,CAEA,SAASohJ,GAAkBj9I,GACvB,OAAOA,IAAS61I,GAAiB71I,EAAK49H,KAAK9vI,UAAYkS,EAAKk8C,IAChE,CACA,SAAShmD,GAAQqvB,EAAS/nB,GACtB,OAAIoB,EAAQ2mB,GACDA,EAAQ1oB,QAAQW,IAAS,EAER,kBAAZ+nB,EACLA,EAAQrc,MAAM,KAAKrM,QAAQW,IAAS,IAEtCo8H,EAASr0G,IACPA,EAAQzlB,KAAKtC,EAI5B,CACA,SAAS0/I,GAAWC,EAAmB9uH,GACnC,IAAItqB,EAAQo5I,EAAkBp5I,MAAOpH,EAAOwgJ,EAAkBxgJ,KAAMguI,EAASwS,EAAkBxS,OAC/F,IAAK,IAAI72I,KAAOiQ,EAAO,CACnB,IAAIuqB,EAAQvqB,EAAMjQ,GAClB,GAAIw6B,EAAO,CACP,IAAIi6G,EAASj6G,EAAM9wB,KACf+qI,IAAWl6G,EAAOk6G,IAClB6U,GAAgBr5I,EAAOjQ,EAAK6I,EAAMguI,EAE1C,CACJ,CACJ,CACA,SAASyS,GAAgBr5I,EAAOjQ,EAAK6I,EAAM41C,GACvC,IAAIjkB,EAAQvqB,EAAMjQ,IACdw6B,GAAWikB,GAAWjkB,EAAM4tB,MAAQ3J,EAAQ2J,KAE5C5tB,EAAMy5F,kBAAkB+pB,WAE5B/tI,EAAMjQ,GAAO,KACbomI,EAASv9H,EAAM7I,EACnB,CApLAqnJ,GAAYrhJ,IAEZ+gJ,GAAW/gJ,IAEX62I,GAAY72I,IAEZw3I,GAAex3I,IAEfqxI,GAAYrxI,IA6KZ,IAAIujJ,GAAe,CAAClxJ,OAAQ8V,OAAQ3V,OAEhCgxJ,GAAY,CACZ9/I,KAAM,aACN0zI,UAAU,EACVjlJ,MAAO,CACHwwD,QAAS4gG,GACTE,QAASF,GACTttH,IAAK,CAAC5jC,OAAQC,SAElBmC,QAAS,CACLivJ,WAAY,WACR,IAAInS,EAAKrgJ,KAAM+Y,EAAQsnI,EAAGtnI,MAAOpH,EAAO0uI,EAAG1uI,KAAM8gJ,EAAepS,EAAGoS,aAAcC,EAAarS,EAAGqS,WACjG,GAAID,EAAc,CACd,IAAIvhG,EAAMuhG,EAAavhG,IAAK6rE,EAAoB01B,EAAa11B,kBAAmBsW,EAAmBof,EAAapf,iBAChHt6H,EAAM25I,GAAc,CAChBlgJ,KAAMy/I,GAAkB5e,GACxBniF,IAAKA,EACL6rE,kBAAmBA,GAEvBprH,EAAKjF,KAAKgmJ,GAEN1yJ,KAAK+kC,KAAOpzB,EAAKjK,OAASumB,SAASjuB,KAAK+kC,MACxCqtH,GAAgBr5I,EAAOpH,EAAK,GAAIA,EAAM3R,KAAK2/I,QAE/C3/I,KAAKyyJ,aAAe,IACxB,CACJ,GAEJ1vB,QAAS,WACL/iI,KAAK+Y,MAAQ1X,OAAOyI,OAAO,MAC3B9J,KAAK2R,KAAO,EAChB,EACA6wH,UAAW,WACP,IAAK,IAAI15H,KAAO9I,KAAK+Y,MACjBq5I,GAAgBpyJ,KAAK+Y,MAAOjQ,EAAK9I,KAAK2R,KAE9C,EACA/O,QAAS,WACL,IAAIg2H,EAAQ54H,KACZA,KAAKwyJ,aACLxyJ,KAAK4vJ,OAAO,WAAW,SAAU5tJ,GAC7BkwJ,GAAWt5B,GAAO,SAAUpmH,GAAQ,OAAOtH,GAAQlJ,EAAKwQ,EAAO,GACnE,IACAxS,KAAK4vJ,OAAO,WAAW,SAAU5tJ,GAC7BkwJ,GAAWt5B,GAAO,SAAUpmH,GAAQ,OAAQtH,GAAQlJ,EAAKwQ,EAAO,GACpE,GACJ,EACAq3H,QAAS,WACL7pI,KAAKwyJ,YACT,EACA1yJ,OAAQ,WACJ,IAAIq6I,EAAOn6I,KAAK2hI,OAAOjgI,QACnBqO,EAAQ4xI,GAAuBxH,GAC/B9G,EAAmBtjI,GAASA,EAAMsjI,iBACtC,GAAIA,EAAkB,CAElB,IAAImK,EAASyU,GAAkB5e,GAC3BgN,EAAKrgJ,KAAMyxD,EAAU4uF,EAAG5uF,QAAS8gG,EAAUlS,EAAGkS,QAClD,GAEC9gG,KAAa+rF,IAAWtyI,GAAQumD,EAAS+rF,KAErC+U,GAAW/U,GAAUtyI,GAAQqnJ,EAAS/U,GACvC,OAAOztI,EAEX,IAAIitI,EAAKh9I,KAAM+Y,EAAQikI,EAAGjkI,MAAOpH,EAAOqrI,EAAGrrI,KACvC7I,EAAmB,MAAbiH,EAAMjH,IAGRuqI,EAAiBT,KAAKhK,KACjByK,EAAiBniF,IAAM,KAAK1rD,OAAO6tI,EAAiBniF,KAAO,IAClEnhD,EAAMjH,IACRiQ,EAAMjQ,IACNiH,EAAMgtH,kBAAoBhkH,EAAMjQ,GAAKi0H,kBAErCmS,EAASv9H,EAAM7I,GACf6I,EAAKjF,KAAK5D,KAIV9I,KAAKyyJ,aAAe1iJ,EACpB/P,KAAK0yJ,WAAa5pJ,GAGtBiH,EAAM1N,KAAK65H,WAAY,CAC3B,CACA,OAAOnsH,GAAUoqI,GAAQA,EAAK,EAClC,GAGAwY,GAAoB,CACpBL,UAAWA,IAGf,SAASM,GAAc9jJ,GAEnB,IAAI+jJ,EAAY,CAChBA,IAAgB,WAAc,OAAO5jJ,CAAQ,GAM7C5N,OAAOwH,eAAeiG,EAAK,SAAU+jJ,GAIrC/jJ,EAAIoC,KAAO,CACP5C,KAAMA,GACNoE,OAAQA,EACR46I,aAAcA,GACd/qB,eAAgBA,IAEpBzzH,EAAIpL,IAAMA,GACVoL,EAAIgkJ,OAAS/7I,GACbjI,EAAI2rD,SAAWA,GAEf3rD,EAAIikJ,WAAa,SAAU3xI,GAEvB,OADAi1H,GAAQj1H,GACDA,CACX,EACAtS,EAAIhM,QAAUzB,OAAOyI,OAAO,MAC5B8mI,EAAY1mI,SAAQ,SAAUzI,GAC1BqN,EAAIhM,QAAQrB,EAAO,KAAOJ,OAAOyI,OAAO,KAC5C,IAGAgF,EAAIhM,QAAQwoJ,MAAQx8I,EACpB4D,EAAO5D,EAAIhM,QAAQ65H,WAAYg2B,IAC/BzB,GAAQpiJ,GACRwiJ,GAAUxiJ,GACVyiJ,GAAWziJ,GACXkjJ,GAAmBljJ,EACvB,CAEA8jJ,GAAc9jJ,IACdzN,OAAOwH,eAAeiG,GAAI7G,UAAW,YAAa,CAC9CjF,IAAKuvI,KAETlxI,OAAOwH,eAAeiG,GAAI7G,UAAW,cAAe,CAChDjF,IAAK,WAED,OAAOhD,KAAKwE,QAAUxE,KAAKwE,OAAOC,UACtC,IAGJpD,OAAOwH,eAAeiG,GAAK,0BAA2B,CAClD5N,MAAOipJ,KAEXr7I,GAAIE,QAAUA,GAId,IAAIqiI,GAAiBtC,EAAQ,eAEzBikB,GAAcjkB,EAAQ,yCACtB0C,GAAc,SAAUvgF,EAAKzvD,EAAMyvE,GACnC,MAAkB,UAATA,GAAoB8hF,GAAY9hG,IAAiB,WAATzvD,GACnC,aAATyvE,GAA+B,WAARhgB,GACd,YAATggB,GAA8B,UAARhgB,GACb,UAATggB,GAA4B,UAARhgB,CAC7B,EACI+hG,GAAmBlkB,EAAQ,wCAC3BmkB,GAA8BnkB,EAAQ,sCACtCokB,GAAyB,SAAUrqJ,EAAK5H,GACxC,OAAOkyJ,GAAiBlyJ,IAAoB,UAAVA,EAC5B,QAEU,oBAAR4H,GAA6BoqJ,GAA4BhyJ,GACnDA,EACA,MAClB,EACImyJ,GAAgBtkB,EAAQ,8XAMxBukB,GAAU,+BACVC,GAAU,SAAU/gJ,GACpB,MAA0B,MAAnBA,EAAKmR,OAAO,IAAmC,UAArBnR,EAAKzF,MAAM,EAAG,EACnD,EACIymJ,GAAe,SAAUhhJ,GACzB,OAAO+gJ,GAAQ/gJ,GAAQA,EAAKzF,MAAM,EAAGyF,EAAK9K,QAAU,EACxD,EACI0rJ,GAAmB,SAAUpxJ,GAC7B,OAAc,MAAPA,IAAuB,IAARA,CAC1B,EAEA,SAASyxJ,GAAiB1jJ,GACtB,IAAI1N,EAAO0N,EAAM1N,KACbmJ,EAAauE,EACb2jJ,EAAY3jJ,EAChB,MAAOmyH,EAAMwxB,EAAU32B,mBACnB22B,EAAYA,EAAU32B,kBAAkB4iB,OACpC+T,GAAaA,EAAUrxJ,OACvBA,EAAOsxJ,GAAeD,EAAUrxJ,KAAMA,IAI9C,MAAO6/H,EAAO12H,EAAaA,EAAW9G,QAC9B8G,GAAcA,EAAWnJ,OACzBA,EAAOsxJ,GAAetxJ,EAAMmJ,EAAWnJ,OAG/C,OAAOuxJ,GAAYvxJ,EAAKlC,YAAakC,EAAK8+H,MAC9C,CACA,SAASwyB,GAAelwH,EAAO/+B,GAC3B,MAAO,CACHvE,YAAaqF,GAAOi+B,EAAMtjC,YAAauE,EAAOvE,aAC9CghI,MAAOe,EAAMz+F,EAAM09F,OAAS,CAAC19F,EAAM09F,MAAOz8H,EAAOy8H,OAASz8H,EAAOy8H,MAEzE,CACA,SAASyyB,GAAYzzJ,EAAa0zJ,GAC9B,OAAI3xB,EAAM/hI,IAAgB+hI,EAAM2xB,GACrBruJ,GAAOrF,EAAa2zJ,GAAeD,IAGvC,EACX,CACA,SAASruJ,GAAOa,EAAGP,GACf,OAAOO,EAAKP,EAAIO,EAAI,IAAMP,EAAIO,EAAKP,GAAK,EAC5C,CACA,SAASguJ,GAAe5yJ,GACpB,OAAII,MAAMsS,QAAQ1S,GACP6yJ,GAAe7yJ,GAEtBigB,EAASjgB,GACF8yJ,GAAgB9yJ,GAEN,kBAAVA,EACAA,EAGJ,EACX,CACA,SAAS6yJ,GAAe7yJ,GAGpB,IAFA,IACI+yJ,EADAnmJ,EAAM,GAED/H,EAAI,EAAG8B,EAAI3G,EAAMwG,OAAQ3B,EAAI8B,EAAG9B,IACjCm8H,EAAO+xB,EAAcH,GAAe5yJ,EAAM6E,MAAyB,KAAhBkuJ,IAC/CnmJ,IACAA,GAAO,KACXA,GAAOmmJ,GAGf,OAAOnmJ,CACX,CACA,SAASkmJ,GAAgB9yJ,GACrB,IAAI4M,EAAM,GACV,IAAK,IAAIhF,KAAO5H,EACRA,EAAM4H,KACFgF,IACAA,GAAO,KACXA,GAAOhF,GAGf,OAAOgF,CACX,CAEA,IAAIomJ,GAAe,CACfC,IAAK,6BACLC,KAAM,sCAENC,GAAYtlB,EAAQ,snBAapBulB,GAAQvlB,EAAQ,kNAEoD,GACpEqC,GAAgB,SAAUlgF,GAC1B,OAAOmjG,GAAUnjG,IAAQojG,GAAMpjG,EACnC,EACA,SAASqgF,GAAgBrgF,GACrB,OAAIojG,GAAMpjG,GACC,MAIC,SAARA,EACO,YADX,CAGJ,CACA,IAAIqjG,GAAsBlzJ,OAAOyI,OAAO,MACxC,SAASwnI,GAAiBpgF,GAEtB,IAAK8xE,EACD,OAAO,EAEX,GAAIoO,GAAclgF,GACd,OAAO,EAIX,GAFAA,EAAMA,EAAInvC,cAEsB,MAA5BwyI,GAAoBrjG,GACpB,OAAOqjG,GAAoBrjG,GAE/B,IAAIrhD,EAAK1J,SAASM,cAAcyqD,GAChC,OAAIA,EAAIr/C,QAAQ,MAAQ,EAEZ0iJ,GAAoBrjG,GACxBrhD,EAAG7H,cAAgBhB,OAAOwtJ,oBACtB3kJ,EAAG7H,cAAgBhB,OAAO+E,YAG1BwoJ,GAAoBrjG,GAAO,qBAAqBp8C,KAAKjF,EAAGtG,WAExE,CACA,IAAIkrJ,GAAkB1lB,EAAQ,6CAK9B,SAASpvH,GAAM9P,GACX,GAAkB,kBAAPA,EAAiB,CACxB,IAAIo3B,EAAW9gC,SAAS7C,cAAcuM,GACtC,OAAKo3B,GAEM9gC,SAASM,cAAc,MAGtC,CAEI,OAAOoJ,CAEf,CAEA,SAASpJ,GAAc0tH,EAASpkH,GAC5B,IAAIqjI,EAAMjtI,SAASM,cAAc0tH,GACjC,MAAgB,WAAZA,GAIApkH,EAAM1N,MACN0N,EAAM1N,KAAKhC,YACmB8P,IAA9BJ,EAAM1N,KAAKhC,MAAMq0J,UACjBthB,EAAIhsI,aAAa,WAAY,YANtBgsI,CASf,CACA,SAASjiF,GAAgBwjG,EAAWxgC,GAChC,OAAOhuH,SAASgrD,gBAAgB+iG,GAAaS,GAAYxgC,EAC7D,CACA,SAAS/kF,GAAe/mC,GACpB,OAAOlC,SAASipC,eAAe/mC,EACnC,CACA,SAASusJ,GAAcvsJ,GACnB,OAAOlC,SAASyuJ,cAAcvsJ,EAClC,CACA,SAASkjC,GAAa//B,EAAYw5C,EAAS6vG,GACvCrpJ,EAAW+/B,aAAayZ,EAAS6vG,EACrC,CACA,SAASllJ,GAAY7D,EAAM23B,GACvB33B,EAAK6D,YAAY8zB,EACrB,CACA,SAASn8B,GAAYwE,EAAM23B,GACvB33B,EAAKxE,YAAYm8B,EACrB,CACA,SAASj4B,GAAWM,GAChB,OAAOA,EAAKN,UAChB,CACA,SAASuxC,GAAYjxC,GACjB,OAAOA,EAAKixC,WAChB,CACA,SAASo3E,GAAQroH,GACb,OAAOA,EAAKqoH,OAChB,CACA,SAAS2gC,GAAehpJ,EAAMzD,GAC1ByD,EAAKwnD,YAAcjrD,CACvB,CACA,SAAS0sJ,GAAcjpJ,EAAM9H,GACzB8H,EAAK1E,aAAapD,EAAS,GAC/B,CAEA,IAAIgxJ,GAAuB3zJ,OAAOwuD,OAAO,CACvC5mD,UAAW,KACXxC,cAAeA,GACf0qD,gBAAiBA,GACjB/hB,eAAgBA,GAChBwlH,cAAeA,GACfrpH,aAAcA,GACd57B,YAAaA,GACbrI,YAAaA,GACbkE,WAAYA,GACZuxC,YAAaA,GACbo3E,QAASA,GACT2gC,eAAgBA,GAChBC,cAAeA,KAGbt5I,GAAM,CACN3R,OAAQ,SAAUgD,EAAGiD,GACjBklJ,GAAYllJ,EAChB,EACAO,OAAQ,SAAU86I,EAAUr7I,GACpBq7I,EAAS/oJ,KAAKoZ,MAAQ1L,EAAM1N,KAAKoZ,MACjCw5I,GAAY7J,GAAU,GACtB6J,GAAYllJ,GAEpB,EACA/E,QAAS,SAAU+E,GACfklJ,GAAYllJ,GAAO,EACvB,GAEJ,SAASklJ,GAAYllJ,EAAOmlJ,GACxB,IAAIz5I,EAAM1L,EAAM1N,KAAKoZ,IACrB,GAAKymH,EAAMzmH,GAAX,CAEA,IAAIohH,EAAK9sH,EAAMxL,QACX4wJ,EAAWplJ,EAAMgtH,mBAAqBhtH,EAAMqjI,IAC5ClyI,EAAQg0J,EAAY,KAAOC,EAC3BC,EAAaF,OAAY/kJ,EAAYglJ,EACzC,GAAIzmB,EAAWjzH,GACXi9H,GAAwBj9H,EAAKohH,EAAI,CAAC37H,GAAQ27H,EAAI,6BADlD,CAIA,IAAIw4B,EAAQtlJ,EAAM1N,KAAKizJ,SACnBC,EAA2B,kBAAR95I,GAAmC,kBAARA,EAC9C+5I,EAAShf,GAAM/6H,GACf1D,EAAO8kH,EAAGupB,MACd,GAAImP,GAAaC,EACb,GAAIH,EAAO,CACP,IAAI/vJ,EAAWiwJ,EAAYx9I,EAAK0D,GAAOA,EAAIva,MACvCg0J,EACAthJ,EAAQtO,IAAa4pI,EAAS5pI,EAAU6vJ,GAGnCvhJ,EAAQtO,GASHA,EAAS9B,SAAS2xJ,IACxB7vJ,EAASoH,KAAKyoJ,GATVI,GACAx9I,EAAK0D,GAAO,CAAC05I,GACbM,GAAY54B,EAAIphH,EAAK1D,EAAK0D,KAG1BA,EAAIva,MAAQ,CAACi0J,EAO7B,MACK,GAAII,EAAW,CAChB,GAAIL,GAAan9I,EAAK0D,KAAS05I,EAC3B,OAEJp9I,EAAK0D,GAAO25I,EACZK,GAAY54B,EAAIphH,EAAKva,EACzB,MACK,GAAIs0J,EAAQ,CACb,GAAIN,GAAaz5I,EAAIva,QAAUi0J,EAC3B,OAEJ15I,EAAIva,MAAQA,CAChB,MACS,CAvCb,CARU,CAmDd,CACA,SAASu0J,GAAYpV,EAAIv3I,EAAK9G,GAC1B,IAAI28I,EAAc0B,EAAG1B,YACjBA,GAAexP,EAAOwP,EAAa71I,KAC/B0tI,GAAMmI,EAAY71I,IAClB61I,EAAY71I,GAAK5H,MAAQc,EAGzB28I,EAAY71I,GAAO9G,EAG/B,CAaA,IAAI0zJ,GAAY,IAAIviB,GAAM,GAAI,CAAC,EAAG,IAC9BmP,GAAQ,CAAC,SAAU,WAAY,SAAU,SAAU,WACvD,SAASqT,GAAUtvJ,EAAGP,GAClB,OAAQO,EAAEyC,MAAQhD,EAAEgD,KAChBzC,EAAEitI,eAAiBxtI,EAAEwtI,eACnBjtI,EAAE6qD,MAAQprD,EAAEorD,KACV7qD,EAAEstI,YAAc7tI,EAAE6tI,WAClBzR,EAAM77H,EAAEhE,QAAU6/H,EAAMp8H,EAAEzD,OAC1BuzJ,GAAcvvJ,EAAGP,IAChByoI,EAAOloI,EAAE0tI,qBAAuBzF,EAAQxoI,EAAEwtI,aAAahzI,OACpE,CACA,SAASs1J,GAAcvvJ,EAAGP,GACtB,GAAc,UAAVO,EAAE6qD,IACF,OAAO,EACX,IAAInrD,EACA8vJ,EAAQ3zB,EAAOn8H,EAAIM,EAAEhE,OAAU6/H,EAAOn8H,EAAIA,EAAE1F,QAAW0F,EAAEtE,KACzDq0J,EAAQ5zB,EAAOn8H,EAAID,EAAEzD,OAAU6/H,EAAOn8H,EAAIA,EAAE1F,QAAW0F,EAAEtE,KAC7D,OAAOo0J,IAAUC,GAAUrB,GAAgBoB,IAAUpB,GAAgBqB,EACzE,CACA,SAASC,GAAkBxtI,EAAUytI,EAAUC,GAC3C,IAAIlwJ,EAAG+C,EACH+C,EAAM,CAAC,EACX,IAAK9F,EAAIiwJ,EAAUjwJ,GAAKkwJ,IAAUlwJ,EAC9B+C,EAAMyf,EAASxiB,GAAG+C,IACdo5H,EAAMp5H,KACN+C,EAAI/C,GAAO/C,GAEnB,OAAO8F,CACX,CACA,SAASqqJ,GAAoBC,GACzB,IAAIpwJ,EAAG4c,EACH24G,EAAM,CAAC,EACP5qH,EAAUylJ,EAAQzlJ,QAASskJ,EAAUmB,EAAQnB,QACjD,IAAKjvJ,EAAI,EAAGA,EAAIu8I,GAAM56I,SAAU3B,EAE5B,IADAu1H,EAAIgnB,GAAMv8I,IAAM,GACX4c,EAAI,EAAGA,EAAIjS,EAAQhJ,SAAUib,EAC1Bu/G,EAAMxxH,EAAQiS,GAAG2/H,GAAMv8I,MACvBu1H,EAAIgnB,GAAMv8I,IAAI2G,KAAKgE,EAAQiS,GAAG2/H,GAAMv8I,KAIhD,SAASqwJ,EAAYhjB,GACjB,OAAO,IAAID,GAAM6hB,EAAQ7gC,QAAQif,GAAKrxH,cAAe,CAAC,EAAG,QAAI5R,EAAWijI,EAC5E,CACA,SAASijB,EAAWC,EAAUjoF,GAC1B,SAAS9mE,IACsB,MAArBA,EAAO8mE,WACTkoF,EAAWD,EAEnB,CAEA,OADA/uJ,EAAO8mE,UAAYA,EACZ9mE,CACX,CACA,SAASgvJ,EAAW1mJ,GAChB,IAAInL,EAASswJ,EAAQxpJ,WAAWqE,GAE5BqyH,EAAMx9H,IACNswJ,EAAQrlJ,YAAYjL,EAAQmL,EAEpC,CAaA,SAAS2mJ,EAAUzmJ,EAAO0mJ,EAAoBC,EAAWC,EAAQC,EAAQC,EAAYr6I,GAUjF,GATI0lH,EAAMnyH,EAAMqjI,MAAQlR,EAAM20B,KAM1B9mJ,EAAQ8mJ,EAAWr6I,GAAS03H,GAAWnkI,IAE3CA,EAAM2jI,cAAgBkjB,GAClB1U,EAAgBnyI,EAAO0mJ,EAAoBC,EAAWC,GAA1D,CAGA,IAAIt0J,EAAO0N,EAAM1N,KACbkmB,EAAWxY,EAAMwY,SACjB2oC,EAAMnhD,EAAMmhD,IACZgxE,EAAMhxE,IAaNnhD,EAAMqjI,IAAMrjI,EAAMs7C,GACZ2pG,EAAQ7jG,gBAAgBphD,EAAMs7C,GAAI6F,GAClC8jG,EAAQvuJ,cAAcyqD,EAAKnhD,GACjC+mJ,EAAS/mJ,GACTgnJ,EAAehnJ,EAAOwY,EAAUkuI,GAC5Bv0B,EAAM7/H,IACN20J,EAAkBjnJ,EAAO0mJ,GAE7BjpG,EAAOkpG,EAAW3mJ,EAAMqjI,IAAKujB,IAKxBpoB,EAAOx+H,EAAM4jI,YAClB5jI,EAAMqjI,IAAM4hB,EAAQJ,cAAc7kJ,EAAM1H,MACxCmlD,EAAOkpG,EAAW3mJ,EAAMqjI,IAAKujB,KAG7B5mJ,EAAMqjI,IAAM4hB,EAAQ5lH,eAAer/B,EAAM1H,MACzCmlD,EAAOkpG,EAAW3mJ,EAAMqjI,IAAKujB,GApCjC,CAsCJ,CACA,SAASzU,EAAgBnyI,EAAO0mJ,EAAoBC,EAAWC,GAC3D,IAAI5wJ,EAAIgK,EAAM1N,KACd,GAAI6/H,EAAMn8H,GAAI,CACV,IAAIkxJ,EAAgB/0B,EAAMnyH,EAAMgtH,oBAAsBh3H,EAAEm2H,UAQxD,GAPIgG,EAAOn8H,EAAIA,EAAE5B,OAAU+9H,EAAOn8H,EAAIA,EAAE2qE,OACpC3qE,EAAEgK,GAAO,GAMTmyH,EAAMnyH,EAAMgtH,mBAMZ,OALAm6B,EAAcnnJ,EAAO0mJ,GACrBjpG,EAAOkpG,EAAW3mJ,EAAMqjI,IAAKujB,GACzBpoB,EAAO0oB,IACPE,EAAoBpnJ,EAAO0mJ,EAAoBC,EAAWC,IAEvD,CAEf,CACJ,CACA,SAASO,EAAcnnJ,EAAO0mJ,GACtBv0B,EAAMnyH,EAAM1N,KAAK+0J,iBACjBX,EAAmB/pJ,KAAKjD,MAAMgtJ,EAAoB1mJ,EAAM1N,KAAK+0J,eAC7DrnJ,EAAM1N,KAAK+0J,cAAgB,MAE/BrnJ,EAAMqjI,IAAMrjI,EAAMgtH,kBAAkB15H,IAChCg0J,EAAYtnJ,IACZinJ,EAAkBjnJ,EAAO0mJ,GACzBK,EAAS/mJ,KAKTklJ,GAAYllJ,GAEZ0mJ,EAAmB/pJ,KAAKqD,GAEhC,CACA,SAASonJ,EAAoBpnJ,EAAO0mJ,EAAoBC,EAAWC,GAC/D,IAAI5wJ,EAKAuxJ,EAAYvnJ,EAChB,MAAOunJ,EAAUv6B,kBAEb,GADAu6B,EAAYA,EAAUv6B,kBAAkB4iB,OACpCzd,EAAOn8H,EAAIuxJ,EAAUj1J,OAAU6/H,EAAOn8H,EAAIA,EAAEwxJ,YAAc,CAC1D,IAAKxxJ,EAAI,EAAGA,EAAIu1H,EAAIk8B,SAAS9vJ,SAAU3B,EACnCu1H,EAAIk8B,SAASzxJ,GAAG2vJ,GAAW4B,GAE/Bb,EAAmB/pJ,KAAK4qJ,GACxB,KACJ,CAIJ9pG,EAAOkpG,EAAW3mJ,EAAMqjI,IAAKujB,EACjC,CACA,SAASnpG,EAAO9oD,EAAQ0uI,EAAK33H,GACrBymH,EAAMx9H,KACFw9H,EAAMzmH,GACFu5I,EAAQxpJ,WAAWiQ,KAAS/W,GAC5BswJ,EAAQzpH,aAAa7mC,EAAQ0uI,EAAK33H,GAItCu5I,EAAQ1tJ,YAAY5C,EAAQ0uI,GAGxC,CACA,SAAS2jB,EAAehnJ,EAAOwY,EAAUkuI,GACrC,GAAI7iJ,EAAQ2U,GAAW,CACf,EAGJ,IAAK,IAAIs9H,EAAM,EAAGA,EAAMt9H,EAAS7gB,SAAUm+I,EACvC2Q,EAAUjuI,EAASs9H,GAAM4Q,EAAoB1mJ,EAAMqjI,IAAK,MAAM,EAAM7qH,EAAUs9H,EAEtF,MACSpX,EAAY1+H,EAAM1H,OACvB2sJ,EAAQ1tJ,YAAYyI,EAAMqjI,IAAK4hB,EAAQ5lH,eAAejuC,OAAO4O,EAAM1H,OAE3E,CACA,SAASgvJ,EAAYtnJ,GACjB,MAAOA,EAAMgtH,kBACThtH,EAAQA,EAAMgtH,kBAAkB4iB,OAEpC,OAAOzd,EAAMnyH,EAAMmhD,IACvB,CACA,SAAS8lG,EAAkBjnJ,EAAO0mJ,GAC9B,IAAK,IAAIgB,EAAM,EAAGA,EAAMn8B,EAAIxxH,OAAOpC,SAAU+vJ,EACzCn8B,EAAIxxH,OAAO2tJ,GAAK/B,GAAW3lJ,GAE/BhK,EAAIgK,EAAM1N,KAAK8B,KACX+9H,EAAMn8H,KACFm8H,EAAMn8H,EAAE+D,SACR/D,EAAE+D,OAAO4rJ,GAAW3lJ,GACpBmyH,EAAMn8H,EAAEynD,SACRipG,EAAmB/pJ,KAAKqD,GAEpC,CAIA,SAAS+mJ,EAAS/mJ,GACd,IAAIhK,EACJ,GAAIm8H,EAAOn8H,EAAIgK,EAAM0jI,WACjBuhB,EAAQD,cAAchlJ,EAAMqjI,IAAKrtI,OAEhC,CACD,IAAI2xJ,EAAW3nJ,EACf,MAAO2nJ,EACCx1B,EAAOn8H,EAAI2xJ,EAASnzJ,UAAa29H,EAAOn8H,EAAIA,EAAEd,SAASX,WACvD0wJ,EAAQD,cAAchlJ,EAAMqjI,IAAKrtI,GAErC2xJ,EAAWA,EAAShzJ,MAE5B,CAEIw9H,EAAOn8H,EAAI+/I,KACX//I,IAAMgK,EAAMxL,SACZwB,IAAMgK,EAAMwjI,WACZrR,EAAOn8H,EAAIA,EAAEd,SAASX,WACtB0wJ,EAAQD,cAAchlJ,EAAMqjI,IAAKrtI,EAEzC,CACA,SAAS4xJ,EAAUjB,EAAWC,EAAQ/L,EAAQgN,EAAU3B,EAAQQ,GAC5D,KAAOmB,GAAY3B,IAAU2B,EACzBpB,EAAU5L,EAAOgN,GAAWnB,EAAoBC,EAAWC,GAAQ,EAAO/L,EAAQgN,EAE1F,CACA,SAASC,EAAkB9nJ,GACvB,IAAIhK,EAAG4c,EACHtgB,EAAO0N,EAAM1N,KACjB,GAAI6/H,EAAM7/H,GAGN,IAFI6/H,EAAOn8H,EAAI1D,EAAK8B,OAAU+9H,EAAOn8H,EAAIA,EAAEiF,UACvCjF,EAAEgK,GACDhK,EAAI,EAAGA,EAAIu1H,EAAItwH,QAAQtD,SAAU3B,EAClCu1H,EAAItwH,QAAQjF,GAAGgK,GAEvB,GAAImyH,EAAOn8H,EAAIgK,EAAMwY,UACjB,IAAK5F,EAAI,EAAGA,EAAI5S,EAAMwY,SAAS7gB,SAAUib,EACrCk1I,EAAkB9nJ,EAAMwY,SAAS5F,GAG7C,CACA,SAASm1I,EAAalN,EAAQgN,EAAU3B,GACpC,KAAO2B,GAAY3B,IAAU2B,EAAU,CACnC,IAAIhqI,EAAKg9H,EAAOgN,GACZ11B,EAAMt0G,KACFs0G,EAAMt0G,EAAGsjC,MACT6mG,EAA0BnqI,GAC1BiqI,EAAkBjqI,IAIlB2oI,EAAW3oI,EAAGwlH,KAG1B,CACJ,CACA,SAAS2kB,EAA0BhoJ,EAAOioJ,GACtC,GAAI91B,EAAM81B,IAAO91B,EAAMnyH,EAAM1N,MAAO,CAChC,IAAI41J,EACA5pF,EAAYitD,EAAI/zH,OAAOG,OAAS,EAgBpC,IAfIw6H,EAAM81B,GAGNA,EAAG3pF,WAAaA,EAIhB2pF,EAAK3B,EAAWtmJ,EAAMqjI,IAAK/kE,GAG3B6zD,EAAO+1B,EAAMloJ,EAAMgtH,oBACnBmF,EAAO+1B,EAAMA,EAAItY,SACjBzd,EAAM+1B,EAAI51J,OACV01J,EAA0BE,EAAKD,GAE9BC,EAAM,EAAGA,EAAM38B,EAAI/zH,OAAOG,SAAUuwJ,EACrC38B,EAAI/zH,OAAO0wJ,GAAKloJ,EAAOioJ,GAEvB91B,EAAO+1B,EAAMloJ,EAAM1N,KAAK8B,OAAU+9H,EAAO+1B,EAAMA,EAAI1wJ,QACnD0wJ,EAAIloJ,EAAOioJ,GAGXA,GAER,MAEIzB,EAAWxmJ,EAAMqjI,IAEzB,CACA,SAAS8kB,EAAexB,EAAWyB,EAAOC,EAAO3B,EAAoB4B,GACjE,IAQIC,EAAaC,EAAUC,EAAa7B,EARpC8B,EAAc,EACdC,EAAc,EACdC,EAAYR,EAAMzwJ,OAAS,EAC3BkxJ,EAAgBT,EAAM,GACtBU,EAAcV,EAAMQ,GACpBG,EAAYV,EAAM1wJ,OAAS,EAC3BqxJ,EAAgBX,EAAM,GACtBY,EAAcZ,EAAMU,GAKpBG,GAAWZ,EAIf,MAAOI,GAAeE,GAAaD,GAAeI,EAC1CxqB,EAAQsqB,GACRA,EAAgBT,IAAQM,GAEnBnqB,EAAQuqB,GACbA,EAAcV,IAAQQ,GAEjBhD,GAAUiD,EAAeG,IAC9BG,EAAWN,EAAeG,EAAetC,EAAoB2B,EAAOM,GACpEE,EAAgBT,IAAQM,GACxBM,EAAgBX,IAAQM,IAEnB/C,GAAUkD,EAAaG,IAC5BE,EAAWL,EAAaG,EAAavC,EAAoB2B,EAAOU,GAChED,EAAcV,IAAQQ,GACtBK,EAAcZ,IAAQU,IAEjBnD,GAAUiD,EAAeI,IAE9BE,EAAWN,EAAeI,EAAavC,EAAoB2B,EAAOU,GAClEG,GACIjE,EAAQzpH,aAAamrH,EAAWkC,EAAcxlB,IAAK4hB,EAAQj4G,YAAY87G,EAAYzlB,MACvFwlB,EAAgBT,IAAQM,GACxBO,EAAcZ,IAAQU,IAEjBnD,GAAUkD,EAAaE,IAE5BG,EAAWL,EAAaE,EAAetC,EAAoB2B,EAAOM,GAClEO,GACIjE,EAAQzpH,aAAamrH,EAAWmC,EAAYzlB,IAAKwlB,EAAcxlB,KACnEylB,EAAcV,IAAQQ,GACtBI,EAAgBX,IAAQM,KAGpBpqB,EAAQgqB,KACRA,EAAcvC,GAAkBoC,EAAOM,EAAaE,IACxDJ,EAAWr2B,EAAM62B,EAAcjwJ,KACzBwvJ,EAAYS,EAAcjwJ,KAC1BqwJ,EAAaJ,EAAeZ,EAAOM,EAAaE,GAClDrqB,EAAQiqB,GAER/B,EAAUuC,EAAetC,EAAoBC,EAAWkC,EAAcxlB,KAAK,EAAOglB,EAAOM,IAGzFF,EAAcL,EAAMI,GAChB5C,GAAU6C,EAAaO,IACvBG,EAAWV,EAAaO,EAAetC,EAAoB2B,EAAOM,GAClEP,EAAMI,QAAYpoJ,EAClB8oJ,GACIjE,EAAQzpH,aAAamrH,EAAW8B,EAAYplB,IAAKwlB,EAAcxlB,MAInEojB,EAAUuC,EAAetC,EAAoBC,EAAWkC,EAAcxlB,KAAK,EAAOglB,EAAOM,IAGjGK,EAAgBX,IAAQM,IAG5BD,EAAcE,GACdhC,EAASroB,EAAQ8pB,EAAMU,EAAY,IAAM,KAAOV,EAAMU,EAAY,GAAG1lB,IACrEukB,EAAUjB,EAAWC,EAAQyB,EAAOM,EAAaI,EAAWrC,IAEvDiC,EAAcI,GACnBhB,EAAaK,EAAOM,EAAaE,EAEzC,CAgBA,SAASQ,EAAartJ,EAAMqsJ,EAAOjwH,EAAOC,GACtC,IAAK,IAAIixH,EAAMlxH,EAAOkxH,EAAMjxH,EAAKixH,IAAO,CACpC,IAAIlzJ,EAAIiyJ,EAAMiB,GACd,GAAIl3B,EAAMh8H,IAAMyvJ,GAAU7pJ,EAAM5F,GAC5B,OAAOkzJ,CACf,CACJ,CACA,SAASF,EAAW9N,EAAUr7I,EAAO0mJ,EAAoBI,EAAYr6I,EAAO67I,GACxE,GAAIjN,IAAar7I,EAAjB,CAGImyH,EAAMnyH,EAAMqjI,MAAQlR,EAAM20B,KAE1B9mJ,EAAQ8mJ,EAAWr6I,GAAS03H,GAAWnkI,IAE3C,IAAIqjI,EAAOrjI,EAAMqjI,IAAMgY,EAAShY,IAChC,GAAI7E,EAAO6c,EAASrX,oBACZ7R,EAAMnyH,EAAMujI,aAAavK,UACzBswB,EAAQjO,EAAShY,IAAKrjI,EAAO0mJ,GAG7B1mJ,EAAMgkI,oBAAqB,OAQnC,GAAIxF,EAAOx+H,EAAM6xH,WACb2M,EAAO6c,EAASxpB,WAChB7xH,EAAMjH,MAAQsiJ,EAAStiJ,MACtBylI,EAAOx+H,EAAM6jI,WAAarF,EAAOx+H,EAAM8jI,SACxC9jI,EAAMgtH,kBAAoBquB,EAASruB,sBAJvC,CAOA,IAAIh3H,EACA1D,EAAO0N,EAAM1N,KACb6/H,EAAM7/H,IAAS6/H,EAAOn8H,EAAI1D,EAAK8B,OAAU+9H,EAAOn8H,EAAIA,EAAE+2H,WACtD/2H,EAAEqlJ,EAAUr7I,GAEhB,IAAIooJ,EAAQ/M,EAAS7iI,SACjBqF,EAAK7d,EAAMwY,SACf,GAAI25G,EAAM7/H,IAASg1J,EAAYtnJ,GAAQ,CACnC,IAAKhK,EAAI,EAAGA,EAAIu1H,EAAIhrH,OAAO5I,SAAU3B,EACjCu1H,EAAIhrH,OAAOvK,GAAGqlJ,EAAUr7I,GACxBmyH,EAAOn8H,EAAI1D,EAAK8B,OAAU+9H,EAAOn8H,EAAIA,EAAEuK,SACvCvK,EAAEqlJ,EAAUr7I,EACpB,CACIu+H,EAAQv+H,EAAM1H,MACV65H,EAAMi2B,IAAUj2B,EAAMt0G,GAClBuqI,IAAUvqI,GACVsqI,EAAe9kB,EAAK+kB,EAAOvqI,EAAI6oI,EAAoB4B,GAElDn2B,EAAMt0G,IAIPs0G,EAAMkpB,EAAS/iJ,OACf2sJ,EAAQF,eAAe1hB,EAAK,IAChCukB,EAAUvkB,EAAK,KAAMxlH,EAAI,EAAGA,EAAGlmB,OAAS,EAAG+uJ,IAEtCv0B,EAAMi2B,GACXL,EAAaK,EAAO,EAAGA,EAAMzwJ,OAAS,GAEjCw6H,EAAMkpB,EAAS/iJ,OACpB2sJ,EAAQF,eAAe1hB,EAAK,IAG3BgY,EAAS/iJ,OAAS0H,EAAM1H,MAC7B2sJ,EAAQF,eAAe1hB,EAAKrjI,EAAM1H,MAElC65H,EAAM7/H,IACF6/H,EAAOn8H,EAAI1D,EAAK8B,OAAU+9H,EAAOn8H,EAAIA,EAAEuzJ,YACvCvzJ,EAAEqlJ,EAAUr7I,EAvCpB,CAzBA,CAkEJ,CACA,SAASwpJ,EAAiBxpJ,EAAOu4H,EAAOkxB,GAGpC,GAAIjrB,EAAOirB,IAAYt3B,EAAMnyH,EAAMrL,QAC/BqL,EAAMrL,OAAOrC,KAAK+0J,cAAgB9uB,OAGlC,IAAK,IAAImxB,EAAM,EAAGA,EAAMnxB,EAAM5gI,SAAU+xJ,EACpCnxB,EAAMmxB,GAAKp3J,KAAK8B,KAAKqpD,OAAO86E,EAAMmxB,GAG9C,CACA,IAKIC,EAAmB3qB,EAAQ,2CAE/B,SAASsqB,EAAQjmB,EAAKrjI,EAAO0mJ,EAAoBkD,GAC7C,IAAI5zJ,EACAmrD,EAAMnhD,EAAMmhD,IAAK7uD,EAAO0N,EAAM1N,KAAMkmB,EAAWxY,EAAMwY,SAGzD,GAFAoxI,EAASA,GAAWt3J,GAAQA,EAAKqzC,IACjC3lC,EAAMqjI,IAAMA,EACR7E,EAAOx+H,EAAM4jI,YAAczR,EAAMnyH,EAAMujI,cAEvC,OADAvjI,EAAMgkI,oBAAqB,GACpB,EAQX,GAAI7R,EAAM7/H,KACF6/H,EAAOn8H,EAAI1D,EAAK8B,OAAU+9H,EAAOn8H,EAAIA,EAAE2qE,OACvC3qE,EAAEgK,GAAO,GACTmyH,EAAOn8H,EAAIgK,EAAMgtH,oBAGjB,OADAm6B,EAAcnnJ,EAAO0mJ,IACd,EAGf,GAAIv0B,EAAMhxE,GAAM,CACZ,GAAIgxE,EAAM35G,GAEN,GAAK6qH,EAAIxjG,gBAKL,GAAIsyF,EAAOn8H,EAAI1D,IACX6/H,EAAOn8H,EAAIA,EAAEo1I,WACbjZ,EAAOn8H,EAAIA,EAAEgyC,YACb,GAAIhyC,IAAMqtI,EAAIr7F,UAUV,OAAO,MAGV,CAID,IAFA,IAAI6hH,GAAgB,EAChBlG,EAAYtgB,EAAIjkG,WACX0qH,EAAM,EAAGA,EAAMtxI,EAAS7gB,OAAQmyJ,IAAO,CAC5C,IAAKnG,IACA2F,EAAQ3F,EAAWnrI,EAASsxI,GAAMpD,EAAoBkD,GAAS,CAChEC,GAAgB,EAChB,KACJ,CACAlG,EAAYA,EAAU32G,WAC1B,CAGA,IAAK68G,GAAiBlG,EASlB,OAAO,CAEf,MA7CAqD,EAAehnJ,EAAOwY,EAAUkuI,GAgDxC,GAAIv0B,EAAM7/H,GAAO,CACb,IAAIy3J,GAAa,EACjB,IAAK,IAAIhxJ,KAAOzG,EACZ,IAAKq3J,EAAiB5wJ,GAAM,CACxBgxJ,GAAa,EACb9C,EAAkBjnJ,EAAO0mJ,GACzB,KACJ,EAECqD,GAAcz3J,EAAK,UAEpBggJ,GAAShgJ,EAAK,SAEtB,CACJ,MACS+wI,EAAI/wI,OAAS0N,EAAM1H,OACxB+qI,EAAI/wI,KAAO0N,EAAM1H,MAErB,OAAO,CACX,CAYA,OAAO,SAAe+iJ,EAAUr7I,EAAOy2I,EAAW6R,GAC9C,IAAI/pB,EAAQv+H,GAAZ,CAKA,IAAIgqJ,GAAiB,EACjBtD,EAAqB,GACzB,GAAInoB,EAAQ8c,GAER2O,GAAiB,EACjBvD,EAAUzmJ,EAAO0mJ,OAEhB,CACD,IAAIuD,EAAgB93B,EAAMkpB,EAAS7iJ,UACnC,IAAKyxJ,GAAiBrE,GAAUvK,EAAUr7I,GAEtCmpJ,EAAW9N,EAAUr7I,EAAO0mJ,EAAoB,KAAM,KAAM4B,OAE3D,CACD,GAAI2B,EAAe,CAQf,GAJ0B,IAAtB5O,EAAS7iJ,UAAkB6iJ,EAAS5iJ,aAAamoI,KACjDya,EAAS9+I,gBAAgBqkI,GACzB6V,GAAY,GAEZjY,EAAOiY,IACH6S,EAAQjO,EAAUr7I,EAAO0mJ,GAEzB,OADA8C,EAAiBxpJ,EAAO0mJ,GAAoB,GACrCrL,EAYfA,EAAWgL,EAAYhL,EAC3B,CAEA,IAAI6O,EAAS7O,EAAShY,IAClBsjB,EAAY1B,EAAQxpJ,WAAWyuJ,GAQnC,GANAzD,EAAUzmJ,EAAO0mJ,EAIjBwD,EAAOC,SAAW,KAAOxD,EAAW1B,EAAQj4G,YAAYk9G,IAEpD/3B,EAAMnyH,EAAMrL,QAAS,CACrB,IAAIgzJ,EAAW3nJ,EAAMrL,OACjBy1J,EAAY9C,EAAYtnJ,GAC5B,MAAO2nJ,EAAU,CACb,IAAK,IAAI0C,EAAM,EAAGA,EAAM9+B,EAAItwH,QAAQtD,SAAU0yJ,EAC1C9+B,EAAItwH,QAAQovJ,GAAK1C,GAGrB,GADAA,EAAStkB,IAAMrjI,EAAMqjI,IACjB+mB,EAAW,CACX,IAAK,IAAIE,EAAM,EAAGA,EAAM/+B,EAAIxxH,OAAOpC,SAAU2yJ,EACzC/+B,EAAIxxH,OAAOuwJ,GAAK3E,GAAWgC,GAK/B,IAAI4C,EAAW5C,EAASr1J,KAAK8B,KAAKqpD,OAClC,GAAI8sG,EAASnhB,OAKT,IADA,IAAIhF,EAASmmB,EAAS9hB,IAAIzrI,MAAM,GACvBwtJ,EAAO,EAAGA,EAAOpmB,EAAOzsI,OAAQ6yJ,IACrCpmB,EAAOomB,IAGnB,MAEItF,GAAYyC,GAEhBA,EAAWA,EAAShzJ,MACxB,CACJ,CAEIw9H,EAAMw0B,GACNoB,EAAa,CAAC1M,GAAW,EAAG,GAEvBlpB,EAAMkpB,EAASl6F,MACpB2mG,EAAkBzM,EAE1B,CACJ,CAEA,OADAmO,EAAiBxpJ,EAAO0mJ,EAAoBsD,GACrChqJ,EAAMqjI,GA5Fb,CAHQlR,EAAMkpB,IACNyM,EAAkBzM,EA+F9B,CACJ,CAEA,IAAIiC,GAAa,CACbvjJ,OAAQ0wJ,GACRlqJ,OAAQkqJ,GACRxvJ,QAAS,SAA0B+E,GAE/ByqJ,GAAiBzqJ,EAAO2lJ,GAC5B,GAEJ,SAAS8E,GAAiBpP,EAAUr7I,IAC5Bq7I,EAAS/oJ,KAAKgrJ,YAAct9I,EAAM1N,KAAKgrJ,aACvC9G,GAAQ6E,EAAUr7I,EAE1B,CACA,SAASw2I,GAAQ6E,EAAUr7I,GACvB,IAMIjH,EAAK2xJ,EAAQxoE,EANbyoE,EAAWtP,IAAasK,GACxBiF,EAAY5qJ,IAAU2lJ,GACtBkF,EAAUC,GAAoBzP,EAAS/oJ,KAAKgrJ,WAAYjC,EAAS7mJ,SACjEu2J,EAAUD,GAAoB9qJ,EAAM1N,KAAKgrJ,WAAYt9I,EAAMxL,SAC3Dw2J,EAAiB,GACjBC,EAAoB,GAExB,IAAKlyJ,KAAOgyJ,EACRL,EAASG,EAAQ9xJ,GACjBmpF,EAAM6oE,EAAQhyJ,GACT2xJ,GASDxoE,EAAIhnD,SAAWwvH,EAAOv5J,MACtB+wF,EAAIgpE,OAASR,EAAOzqJ,IACpBkrJ,GAASjpE,EAAK,SAAUliF,EAAOq7I,GAC3Bn5D,EAAI02C,KAAO12C,EAAI02C,IAAIwyB,kBACnBH,EAAkBtuJ,KAAKulF,KAX3BipE,GAASjpE,EAAK,OAAQliF,EAAOq7I,GACzBn5D,EAAI02C,KAAO12C,EAAI02C,IAAI6M,UACnBulB,EAAeruJ,KAAKulF,IAahC,GAAI8oE,EAAerzJ,OAAQ,CACvB,IAAI0zJ,EAAa,WACb,IAAK,IAAIr1J,EAAI,EAAGA,EAAIg1J,EAAerzJ,OAAQ3B,IACvCm1J,GAASH,EAAeh1J,GAAI,WAAYgK,EAAOq7I,EAEvD,EACIsP,EACA3hB,GAAehpI,EAAO,SAAUqrJ,GAGhCA,GAER,CAQA,GAPIJ,EAAkBtzJ,QAClBqxI,GAAehpI,EAAO,aAAa,WAC/B,IAAK,IAAIhK,EAAI,EAAGA,EAAIi1J,EAAkBtzJ,OAAQ3B,IAC1Cm1J,GAASF,EAAkBj1J,GAAI,mBAAoBgK,EAAOq7I,EAElE,KAECsP,EACD,IAAK5xJ,KAAO8xJ,EACHE,EAAQhyJ,IAEToyJ,GAASN,EAAQ9xJ,GAAM,SAAUsiJ,EAAUA,EAAUuP,EAIrE,CACA,IAAIU,GAAiBh6J,OAAOyI,OAAO,MACnC,SAAS+wJ,GAAoBzN,EAAMvwB,GAC/B,IAKI92H,EAAGksF,EALHnkF,EAAMzM,OAAOyI,OAAO,MACxB,IAAKsjJ,EAED,OAAOt/I,EAGX,IAAK/H,EAAI,EAAGA,EAAIqnJ,EAAK1lJ,OAAQ3B,IAAK,CAO9B,GANAksF,EAAMm7D,EAAKrnJ,GACNksF,EAAIqpE,YAELrpE,EAAIqpE,UAAYD,IAEpBvtJ,EAAIytJ,GAActpE,IAAQA,EACtB4qC,EAAG8hB,aAAe9hB,EAAG8hB,YAAYC,MAAO,CACxC,IAAI4c,EAAWvpE,EAAI02C,KAAO0R,GAAaxd,EAAI,cAAe,KAAO5qC,EAAIz/E,MAEjEy/E,EAAI02C,IADgB,oBAAb6yB,EACG,CACN7vJ,KAAM6vJ,EACNlrJ,OAAQkrJ,GAIFA,CAElB,CACAvpE,EAAI02C,IAAM12C,EAAI02C,KAAO0R,GAAaxd,EAAG53H,SAAU,aAAcgtF,EAAIz/E,MAAM,EAC3E,CAEA,OAAO1E,CACX,CACA,SAASytJ,GAActpE,GACnB,OAAQA,EAAIwpE,SAAW,GAAGj2J,OAAOysF,EAAIz/E,KAAM,KAAKhN,OAAOnE,OAAOsQ,KAAKsgF,EAAIqpE,WAAa,CAAC,GAAGp4I,KAAK,KACjG,CACA,SAASg4I,GAASjpE,EAAK9tF,EAAM4L,EAAOq7I,EAAUuP,GAC1C,IAAIzuJ,EAAK+lF,EAAI02C,KAAO12C,EAAI02C,IAAIxkI,GAC5B,GAAI+H,EACA,IACIA,EAAG6D,EAAMqjI,IAAKnhD,EAAKliF,EAAOq7I,EAAUuP,EACxC,CACA,MAAOx3J,IACHo9I,GAAYp9I,GAAG4M,EAAMxL,QAAS,aAAaiB,OAAOysF,EAAIz/E,KAAM,KAAKhN,OAAOrB,EAAM,SAClF,CAER,CAEA,IAAIu3J,GAAc,CAACjgJ,GAAK4xI,IAExB,SAASsO,GAAYvQ,EAAUr7I,GAC3B,IAAIiF,EAAOjF,EAAMsjI,iBACjB,KAAInR,EAAMltH,KAA4C,IAAnCA,EAAK49H,KAAK9vI,QAAQ84J,iBAGjCttB,EAAQ8c,EAAS/oJ,KAAKhC,SAAUiuI,EAAQv+H,EAAM1N,KAAKhC,QAAvD,CAGA,IAAIyI,EAAKgwI,EAAKnqE,EACVykE,EAAMrjI,EAAMqjI,IACZyoB,EAAWzQ,EAAS/oJ,KAAKhC,OAAS,CAAC,EACnCA,EAAQ0P,EAAM1N,KAAKhC,OAAS,CAAC,EAKjC,IAAKyI,KAHDo5H,EAAM7hI,EAAMq1I,SAAWnH,EAAOluI,EAAMy7J,kBACpCz7J,EAAQ0P,EAAM1N,KAAKhC,MAAQqS,EAAO,CAAC,EAAGrS,IAE9BA,EACRy4I,EAAMz4I,EAAMyI,GACZ6lE,EAAMktF,EAAS/yJ,GACX6lE,IAAQmqE,GACRijB,GAAQ3oB,EAAKtqI,EAAKgwI,EAAK/oI,EAAM1N,KAAKqzC,KAS1C,IAAK5sC,KAHAssD,IAAQ68E,KAAW5xI,EAAMa,QAAU26J,EAAS36J,OAC7C66J,GAAQ3oB,EAAK,QAAS/yI,EAAMa,OAEpB26J,EACJvtB,EAAQjuI,EAAMyI,MACVyqJ,GAAQzqJ,GACRsqI,EAAI4oB,kBAAkB1I,GAASE,GAAa1qJ,IAEtCmqJ,GAAiBnqJ,IACvBsqI,EAAI9mI,gBAAgBxD,GA5BhC,CAgCJ,CACA,SAASizJ,GAAQlsJ,EAAI/G,EAAK5H,EAAO+6J,GACzBA,GAAWpsJ,EAAGskH,QAAQtiH,QAAQ,MAAQ,EACtCqqJ,GAAYrsJ,EAAI/G,EAAK5H,GAEhBmyJ,GAAcvqJ,GAGfsqJ,GAAiBlyJ,GACjB2O,EAAGvD,gBAAgBxD,IAKnB5H,EAAgB,oBAAR4H,GAA4C,UAAf+G,EAAGskH,QAAsB,OAASrrH,EACvE+G,EAAGzI,aAAa0B,EAAK5H,IAGpB+xJ,GAAiBnqJ,GACtB+G,EAAGzI,aAAa0B,EAAKqqJ,GAAuBrqJ,EAAK5H,IAE5CqyJ,GAAQzqJ,GACTsqJ,GAAiBlyJ,GACjB2O,EAAGmsJ,kBAAkB1I,GAASE,GAAa1qJ,IAG3C+G,EAAGssJ,eAAe7I,GAASxqJ,EAAK5H,GAIpCg7J,GAAYrsJ,EAAI/G,EAAK5H,EAE7B,CACA,SAASg7J,GAAYrsJ,EAAI/G,EAAK5H,GAC1B,GAAIkyJ,GAAiBlyJ,GACjB2O,EAAGvD,gBAAgBxD,OAElB,CAKD,GAAIssD,KACC48E,IACc,aAAfniI,EAAGskH,SACK,gBAARrrH,GACU,KAAV5H,IACC2O,EAAGusJ,OAAQ,CACZ,IAAIC,EAAY,SAAUl5J,GACtBA,EAAEm5J,2BACFzsJ,EAAGnE,oBAAoB,QAAS2wJ,EACpC,EACAxsJ,EAAGpE,iBAAiB,QAAS4wJ,GAE7BxsJ,EAAGusJ,QAAS,CAChB,CACAvsJ,EAAGzI,aAAa0B,EAAK5H,EACzB,CACJ,CACA,IAAIb,GAAQ,CACRyJ,OAAQ6xJ,GACRrrJ,OAAQqrJ,IAGZ,SAASY,GAAYnR,EAAUr7I,GAC3B,IAAIF,EAAKE,EAAMqjI,IACX/wI,EAAO0N,EAAM1N,KACbm6J,EAAUpR,EAAS/oJ,KACvB,KAAIisI,EAAQjsI,EAAKlC,cACbmuI,EAAQjsI,EAAK8+H,SACZmN,EAAQkuB,IACJluB,EAAQkuB,EAAQr8J,cAAgBmuI,EAAQkuB,EAAQr7B,SAHzD,CAMA,IAAIs7B,EAAMhJ,GAAiB1jJ,GAEvB2sJ,EAAkB7sJ,EAAG8sJ,mBACrBz6B,EAAMw6B,KACND,EAAMj3J,GAAOi3J,EAAK3I,GAAe4I,KAGjCD,IAAQ5sJ,EAAG+sJ,aACX/sJ,EAAGzI,aAAa,QAASq1J,GACzB5sJ,EAAG+sJ,WAAaH,EAVpB,CAYJ,CACA,IA8BIr0J,GA9BAy0J,GAAQ,CACR/yJ,OAAQyyJ,GACRjsJ,OAAQisJ,IAKRO,GAAc,MACdC,GAAuB,MAM3B,SAASC,GAAgBz8J,GAErB,GAAI2hI,EAAM3hI,EAAGu8J,KAAe,CAExB,IAAIG,EAAU7nG,GAAO,SAAW,QAChC70D,EAAG08J,GAAW,GAAGz3J,OAAOjF,EAAGu8J,IAAcv8J,EAAG08J,IAAY,WACjD18J,EAAGu8J,GACd,CAII56B,EAAM3hI,EAAGw8J,OACTx8J,EAAGgR,OAAS,GAAG/L,OAAOjF,EAAGw8J,IAAuBx8J,EAAGgR,QAAU,WACtDhR,EAAGw8J,IAElB,CAEA,SAASlkB,GAAkBxzG,EAAOtjC,EAAS+0D,GACvC,IAAI0uF,EAAUp9I,GACd,OAAO,SAASq9I,IACZ,IAAI33I,EAAM/L,EAAQ0H,MAAM,KAAMhC,WAClB,OAARqG,GACAvG,GAAO89B,EAAOogH,EAAa3uF,EAAS0uF,EAE5C,CACJ,CAIA,IAAI0X,GAAkBta,MAAsBxQ,IAAQhxI,OAAOgxI,GAAK,KAAO,IACvE,SAASttI,GAAI0N,EAAMzQ,EAAS+0D,EAASwhF,GAOjC,GAAI4kB,GAAiB,CACjB,IAAIC,EAAsBtU,GACtBuU,EAAar7J,EAEjBA,EAAUq7J,EAAW3mG,SAAW,SAAUtzD,GACtC,GAIAA,EAAEiF,SAAWjF,EAAEsH,eAEXtH,EAAE22D,WAAaqjG,GAIfh6J,EAAE22D,WAAa,GAIf32D,EAAEiF,OAAOg2D,gBAAkBj4D,SAC3B,OAAOi3J,EAAW3zJ,MAAMzJ,KAAMyH,UAEtC,CACJ,CACAW,GAAOqD,iBAAiB+G,EAAMzQ,EAASuwI,GAAkB,CAAEx7E,QAASA,EAASwhF,QAASA,GAAYxhF,EACtG,CACA,SAASvvD,GAAOiL,EAAMzQ,EAAS+0D,EAAS0uF,IACnCA,GAAWp9I,IAAQsD,oBAAoB8G,EAExCzQ,EAAQ00D,UAAY10D,EAAS+0D,EACjC,CACA,SAASumG,GAAmBjS,EAAUr7I,GAClC,IAAIu+H,EAAQ8c,EAAS/oJ,KAAK9B,MAAO+tI,EAAQv+H,EAAM1N,KAAK9B,IAApD,CAGA,IAAIA,EAAKwP,EAAM1N,KAAK9B,IAAM,CAAC,EACvBq4I,EAAQwS,EAAS/oJ,KAAK9B,IAAM,CAAC,EAGjC6H,GAAS2H,EAAMqjI,KAAOgY,EAAShY,IAC/B4pB,GAAgBz8J,GAChBo4I,GAAgBp4I,EAAIq4I,EAAO9zI,GAAKyC,GAAQsxI,GAAmB9oI,EAAMxL,SACjE6D,QAAS+H,CART,CASJ,CACA,IAOImtJ,GAPAC,GAAS,CACTzzJ,OAAQuzJ,GACR/sJ,OAAQ+sJ,GAERryJ,QAAS,SAAU+E,GAAS,OAAOstJ,GAAmBttJ,EAAO2lJ,GAAY,GAI7E,SAAS8H,GAAepS,EAAUr7I,GAC9B,IAAIu+H,EAAQ8c,EAAS/oJ,KAAK84I,YAAa7M,EAAQv+H,EAAM1N,KAAK84I,UAA1D,CAGA,IAAIryI,EAAKgwI,EACL1F,EAAMrjI,EAAMqjI,IACZqqB,EAAWrS,EAAS/oJ,KAAK84I,UAAY,CAAC,EACtCl6I,EAAQ8O,EAAM1N,KAAK84I,UAAY,CAAC,EAKpC,IAAKryI,KAHDo5H,EAAMjhI,EAAMy0I,SAAWnH,EAAOttI,EAAM66J,kBACpC76J,EAAQ8O,EAAM1N,KAAK84I,SAAWzoI,EAAO,CAAC,EAAGzR,IAEjCw8J,EACF30J,KAAO7H,IACTmyI,EAAItqI,GAAO,IAGnB,IAAKA,KAAO7H,EAAO,CAKf,GAJA63I,EAAM73I,EAAM6H,GAIA,gBAARA,GAAiC,cAARA,EAAqB,CAG9C,GAFIiH,EAAMwY,WACNxY,EAAMwY,SAAS7gB,OAAS,GACxBoxI,IAAQ2kB,EAAS30J,GACjB,SAG0B,IAA1BsqI,EAAI/kG,WAAW3mC,QACf0rI,EAAIzjI,YAAYyjI,EAAI/kG,WAAW,GAEvC,CACA,GAAY,UAARvlC,GAAmC,aAAhBsqI,EAAIjf,QAAwB,CAG/Cif,EAAIsqB,OAAS5kB,EAEb,IAAI6kB,EAASrvB,EAAQwK,GAAO,GAAK33I,OAAO23I,GACpC8kB,GAAkBxqB,EAAKuqB,KACvBvqB,EAAIlyI,MAAQy8J,EAEpB,MACK,GAAY,cAAR70J,GACLwrJ,GAAMlhB,EAAIjf,UACVma,EAAQ8E,EAAIr7F,WAAY,CAExBulH,GAAeA,IAAgBn3J,SAASM,cAAc,OACtD62J,GAAavlH,UAAY,QAAQvyC,OAAOszI,EAAK,UAC7C,IAAIqb,EAAMmJ,GAAanuH,WACvB,MAAOikG,EAAIjkG,WACPikG,EAAIzjI,YAAYyjI,EAAIjkG,YAExB,MAAOglH,EAAIhlH,WACPikG,EAAI9rI,YAAY6sJ,EAAIhlH,WAE5B,MACK,GAKL2pG,IAAQ2kB,EAAS30J,GAGb,IACIsqI,EAAItqI,GAAOgwI,CACf,CACA,MAAO31I,IAAK,CAEpB,CAnEA,CAoEJ,CACA,SAASy6J,GAAkBxqB,EAAKyqB,GAC5B,OAECzqB,EAAI0qB,YACgB,WAAhB1qB,EAAIjf,SACD4pC,GAAqB3qB,EAAKyqB,IAC1BG,GAAqB5qB,EAAKyqB,GACtC,CACA,SAASE,GAAqB3qB,EAAKyqB,GAG/B,IAAII,GAAa,EAGjB,IACIA,EAAa93J,SAASm3D,gBAAkB81E,CAC5C,CACA,MAAOjwI,IAAK,CACZ,OAAO86J,GAAc7qB,EAAIlyI,QAAU28J,CACvC,CACA,SAASG,GAAqB5qB,EAAKwD,GAC/B,IAAI11I,EAAQkyI,EAAIlyI,MACZo6J,EAAYloB,EAAI8qB,YACpB,GAAIh8B,EAAMo5B,GAAY,CAClB,GAAIA,EAAUlxI,OACV,OAAO0kH,EAAS5tI,KAAW4tI,EAAS8H,GAExC,GAAI0kB,EAAU35I,KACV,OAAOzgB,EAAMygB,SAAWi1H,EAAOj1H,MAEvC,CACA,OAAOzgB,IAAU01I,CACrB,CACA,IAAIuE,GAAW,CACXrxI,OAAQ0zJ,GACRltJ,OAAQktJ,IAGRW,GAAiB9mJ,GAAO,SAAU26C,GAClC,IAAIlkD,EAAM,CAAC,EACPswJ,EAAgB,gBAChBC,EAAoB,QAOxB,OANArsG,EAAQ9zC,MAAMkgJ,GAAel0J,SAAQ,SAAUwU,GAC3C,GAAIA,EAAM,CACN,IAAIuxG,EAAMvxG,EAAKR,MAAMmgJ,GACrBpuC,EAAIvoH,OAAS,IAAMoG,EAAImiH,EAAI,GAAGtuG,QAAUsuG,EAAI,GAAGtuG,OACnD,CACJ,IACO7T,CACX,IAEA,SAASwwJ,GAAmBj8J,GACxB,IAAIqE,EAAQ63J,GAAsBl8J,EAAKqE,OAGvC,OAAOrE,EAAKm8J,YAAc9rJ,EAAOrQ,EAAKm8J,YAAa93J,GAASA,CAChE,CAEA,SAAS63J,GAAsBE,GAC3B,OAAIn9J,MAAMsS,QAAQ6qJ,GACPxwG,EAASwwG,GAEQ,kBAAjBA,EACAN,GAAeM,GAEnBA,CACX,CAKA,SAASC,GAAS3uJ,EAAO4uJ,GACrB,IACIC,EADA9wJ,EAAM,CAAC,EAEX,GAAI6wJ,EAAY,CACZ,IAAIjL,EAAY3jJ,EAChB,MAAO2jJ,EAAU32B,kBACb22B,EAAYA,EAAU32B,kBAAkB4iB,OACpC+T,GACAA,EAAUrxJ,OACTu8J,EAAYN,GAAmB5K,EAAUrxJ,QAC1CqQ,EAAO5E,EAAK8wJ,EAGxB,EACKA,EAAYN,GAAmBvuJ,EAAM1N,QACtCqQ,EAAO5E,EAAK8wJ,GAEhB,IAAIpzJ,EAAauE,EAEjB,MAAQvE,EAAaA,EAAW9G,OACxB8G,EAAWnJ,OAASu8J,EAAYN,GAAmB9yJ,EAAWnJ,QAC9DqQ,EAAO5E,EAAK8wJ,GAGpB,OAAO9wJ,CACX,CAEA,IA0BI+wJ,GA1BAC,GAAW,MACXC,GAAc,iBACdC,GAAU,SAAUnvJ,EAAI2C,EAAMxQ,GAE9B,GAAI88J,GAAShqJ,KAAKtC,GACd3C,EAAGnJ,MAAMu4J,YAAYzsJ,EAAMxQ,QAE1B,GAAI+8J,GAAYjqJ,KAAK9S,GACtB6N,EAAGnJ,MAAMu4J,YAAYxvB,EAAUj9H,GAAOxQ,EAAIid,QAAQ8/I,GAAa,IAAK,iBAEnE,CACD,IAAIG,EAAiBtgJ,GAAUpM,GAC/B,GAAIlR,MAAMsS,QAAQ5R,GAId,IAAK,IAAI+D,EAAI,EAAG8iB,EAAM7mB,EAAI0F,OAAQ3B,EAAI8iB,EAAK9iB,IACvC8J,EAAGnJ,MAAMw4J,GAAkBl9J,EAAI+D,QAInC8J,EAAGnJ,MAAMw4J,GAAkBl9J,CAEnC,CACJ,EACIm9J,GAAc,CAAC,SAAU,MAAO,MAEhCvgJ,GAAYvH,GAAO,SAAU1D,GAG7B,GAFAkrJ,GAAaA,IAAc14J,SAASM,cAAc,OAAOC,MACzDiN,EAAO27H,EAAS37H,GACH,WAATA,GAAqBA,KAAQkrJ,GAC7B,OAAOlrJ,EAGX,IADA,IAAIyrJ,EAAUzrJ,EAAKgQ,OAAO,GAAG0tD,cAAgB19D,EAAK5G,MAAM,GAC/ChH,EAAI,EAAGA,EAAIo5J,GAAYz3J,OAAQ3B,IAAK,CACzC,IAAIw3I,EAAS4hB,GAAYp5J,GAAKq5J,EAC9B,GAAI7hB,KAAUshB,GACV,OAAOthB,CAEf,CACJ,IACA,SAAS8hB,GAAYjU,EAAUr7I,GAC3B,IAAI1N,EAAO0N,EAAM1N,KACbm6J,EAAUpR,EAAS/oJ,KACvB,KAAIisI,EAAQjsI,EAAKm8J,cACblwB,EAAQjsI,EAAKqE,QACb4nI,EAAQkuB,EAAQgC,cAChBlwB,EAAQkuB,EAAQ91J,QAHpB,CAMA,IAAIoyI,EAAKtmI,EACL3C,EAAKE,EAAMqjI,IACXksB,EAAiB9C,EAAQgC,YACzBe,EAAkB/C,EAAQgD,iBAAmBhD,EAAQ91J,OAAS,CAAC,EAE/D+4J,EAAWH,GAAkBC,EAC7B74J,EAAQ63J,GAAsBxuJ,EAAM1N,KAAKqE,QAAU,CAAC,EAIxDqJ,EAAM1N,KAAKm9J,gBAAkBt9B,EAAMx7H,EAAMgvI,QAAUhjI,EAAO,CAAC,EAAGhM,GAASA,EACvE,IAAIg5J,EAAWhB,GAAS3uJ,GAAO,GAC/B,IAAKyC,KAAQitJ,EACLnxB,EAAQoxB,EAASltJ,KACjBwsJ,GAAQnvJ,EAAI2C,EAAM,IAG1B,IAAKA,KAAQktJ,EACT5mB,EAAM4mB,EAASltJ,GACXsmI,IAAQ2mB,EAASjtJ,IAEjBwsJ,GAAQnvJ,EAAI2C,EAAa,MAAPsmI,EAAc,GAAKA,EAtB7C,CAyBJ,CACA,IAAIpyI,GAAQ,CACRoD,OAAQu1J,GACR/uJ,OAAQ+uJ,IAGRM,GAAe,MAKnB,SAASC,GAAS/vJ,EAAI4sJ,GAElB,GAAKA,IAASA,EAAMA,EAAI96I,QAIxB,GAAI9R,EAAGgwJ,UACCpD,EAAI5qJ,QAAQ,MAAQ,EACpB4qJ,EAAIv+I,MAAMyhJ,IAAcz1J,SAAQ,SAAUhE,GAAK,OAAO2J,EAAGgwJ,UAAU/6J,IAAIoB,EAAI,IAG3E2J,EAAGgwJ,UAAU/6J,IAAI23J,OAGpB,CACD,IAAI3jB,EAAM,IAAItzI,OAAOqK,EAAGrJ,aAAa,UAAY,GAAI,KACjDsyI,EAAIjnI,QAAQ,IAAM4qJ,EAAM,KAAO,GAC/B5sJ,EAAGzI,aAAa,SAAU0xI,EAAM2jB,GAAK96I,OAE7C,CACJ,CAKA,SAASm+I,GAAYjwJ,EAAI4sJ,GAErB,GAAKA,IAASA,EAAMA,EAAI96I,QAIxB,GAAI9R,EAAGgwJ,UACCpD,EAAI5qJ,QAAQ,MAAQ,EACpB4qJ,EAAIv+I,MAAMyhJ,IAAcz1J,SAAQ,SAAUhE,GAAK,OAAO2J,EAAGgwJ,UAAUt4J,OAAOrB,EAAI,IAG9E2J,EAAGgwJ,UAAUt4J,OAAOk1J,GAEnB5sJ,EAAGgwJ,UAAUn4J,QACdmI,EAAGvD,gBAAgB,aAGtB,CACD,IAAIwsI,EAAM,IAAItzI,OAAOqK,EAAGrJ,aAAa,UAAY,GAAI,KACjDu5J,EAAM,IAAMtD,EAAM,IACtB,MAAO3jB,EAAIjnI,QAAQkuJ,IAAQ,EACvBjnB,EAAMA,EAAI75H,QAAQ8gJ,EAAK,KAE3BjnB,EAAMA,EAAIn3H,OACNm3H,EACAjpI,EAAGzI,aAAa,QAAS0xI,GAGzBjpI,EAAGvD,gBAAgB,QAE3B,CACJ,CAEA,SAAS0zJ,GAAkBr3B,GACvB,GAAKA,EAAL,CAIA,GAAmB,kBAARA,EAAkB,CACzB,IAAI76H,EAAM,CAAC,EAKX,OAJgB,IAAZ66H,EAAIs3B,KACJvtJ,EAAO5E,EAAKoyJ,GAAkBv3B,EAAIn2H,MAAQ,MAE9CE,EAAO5E,EAAK66H,GACL76H,CACX,CACK,MAAmB,kBAAR66H,EACLu3B,GAAkBv3B,QADxB,CAVL,CAaJ,CACA,IAAIu3B,GAAoB7oJ,GAAO,SAAU7E,GACrC,MAAO,CACH2tJ,WAAY,GAAG36J,OAAOgN,EAAM,UAC5B4tJ,aAAc,GAAG56J,OAAOgN,EAAM,aAC9B6tJ,iBAAkB,GAAG76J,OAAOgN,EAAM,iBAClC8tJ,WAAY,GAAG96J,OAAOgN,EAAM,UAC5B+tJ,aAAc,GAAG/6J,OAAOgN,EAAM,aAC9BguJ,iBAAkB,GAAGh7J,OAAOgN,EAAM,iBAE1C,IACIiuJ,GAAgBz9B,IAAcgP,GAC9B0uB,GAAa,aACbC,GAAY,YAEZC,GAAiB,aACjBC,GAAqB,gBACrBC,GAAgB,YAChBC,GAAoB,eACpBN,UAE+BtwJ,IAA3BnJ,OAAOg6J,sBAC0B7wJ,IAAjCnJ,OAAOi6J,wBACPL,GAAiB,mBACjBC,GAAqB,4BAEK1wJ,IAA1BnJ,OAAOk6J,qBACyB/wJ,IAAhCnJ,OAAOm6J,uBACPL,GAAgB,kBAChBC,GAAoB,uBAI5B,IAAIK,GAAMp+B,EACJh8H,OAAO6zD,sBACH7zD,OAAO6zD,sBAAsBlvD,KAAK3E,QAClCipB,WACuB,SAAqC/jB,GAAM,OAAOA,GAAM,EACzF,SAAS0uD,GAAU1uD,GACfk1J,IAAI,WAEAA,GAAIl1J,EACR,GACJ,CACA,SAASm1J,GAAmBxxJ,EAAI4sJ,GAC5B,IAAI6E,EAAoBzxJ,EAAG8sJ,qBAAuB9sJ,EAAG8sJ,mBAAqB,IACtE2E,EAAkBzvJ,QAAQ4qJ,GAAO,IACjC6E,EAAkB50J,KAAK+vJ,GACvBmD,GAAS/vJ,EAAI4sJ,GAErB,CACA,SAAS8E,GAAsB1xJ,EAAI4sJ,GAC3B5sJ,EAAG8sJ,oBACHztB,EAASr/H,EAAG8sJ,mBAAoBF,GAEpCqD,GAAYjwJ,EAAI4sJ,EACpB,CACA,SAAS+E,GAAmB3xJ,EAAI4xJ,EAAcxiG,GAC1C,IAAIohF,EAAKqhB,GAAkB7xJ,EAAI4xJ,GAAehgK,EAAO4+I,EAAG5+I,KAAMiwC,EAAU2uG,EAAG3uG,QAASiwH,EAAYthB,EAAGshB,UACnG,IAAKlgK,EACD,OAAOw9D,IACX,IAAI55B,EAAQ5jC,IAASi/J,GAAaG,GAAqBE,GACnDa,EAAQ,EACRz5H,EAAM,WACNt4B,EAAGnE,oBAAoB25B,EAAOw8H,GAC9B5iG,GACJ,EACI4iG,EAAQ,SAAU1+J,GACdA,EAAEiF,SAAWyH,KACP+xJ,GAASD,GACXx5H,GAGZ,EACAlY,YAAW,WACH2xI,EAAQD,GACRx5H,GAER,GAAGuJ,EAAU,GACb7hC,EAAGpE,iBAAiB45B,EAAOw8H,EAC/B,CACA,IAAIC,GAAc,yBAClB,SAASJ,GAAkB7xJ,EAAI4xJ,GAC3B,IAQIhgK,EARAsgK,EAAS/6J,OAAO+rD,iBAAiBljD,GAEjCmyJ,GAAoBD,EAAOnB,GAAiB,UAAY,IAAI1iJ,MAAM,MAClE+jJ,GAAuBF,EAAOnB,GAAiB,aAAe,IAAI1iJ,MAAM,MACxEgkJ,EAAoBC,GAAWH,EAAkBC,GACjDG,GAAmBL,EAAOjB,GAAgB,UAAY,IAAI5iJ,MAAM,MAChEmkJ,GAAsBN,EAAOjB,GAAgB,aAAe,IAAI5iJ,MAAM,MACtEokJ,EAAmBH,GAAWC,EAAiBC,GAE/C3wH,EAAU,EACViwH,EAAY,EAEZF,IAAiBf,GACbwB,EAAoB,IACpBzgK,EAAOi/J,GACPhvH,EAAUwwH,EACVP,EAAYM,EAAoBv6J,QAG/B+5J,IAAiBd,GAClB2B,EAAmB,IACnB7gK,EAAOk/J,GACPjvH,EAAU4wH,EACVX,EAAYU,EAAmB36J,SAInCgqC,EAAU7rB,KAAKkf,IAAIm9H,EAAmBI,GACtC7gK,EACIiwC,EAAU,EACJwwH,EAAoBI,EAChB5B,GACAC,GACJ,KACVgB,EAAYlgK,EACNA,IAASi/J,GACLuB,EAAoBv6J,OACpB26J,EAAmB36J,OACvB,GAEV,IAAI66J,EAAe9gK,IAASi/J,IAAcoB,GAAYhtJ,KAAKitJ,EAAOnB,GAAiB,aACnF,MAAO,CACHn/J,KAAMA,EACNiwC,QAASA,EACTiwH,UAAWA,EACXY,aAAcA,EAEtB,CACA,SAASJ,GAAWK,EAAQC,GAExB,MAAOD,EAAO96J,OAAS+6J,EAAU/6J,OAC7B86J,EAASA,EAAOh9J,OAAOg9J,GAE3B,OAAO38I,KAAKkf,IAAIt7B,MAAM,KAAMg5J,EAAU52J,KAAI,SAAUhG,EAAGE,GACnD,OAAO28J,GAAK78J,GAAK68J,GAAKF,EAAOz8J,GACjC,IACJ,CAKA,SAAS28J,GAAKx6J,GACV,OAAkD,IAA3C9G,OAAO8G,EAAE6E,MAAM,GAAI,GAAGkS,QAAQ,IAAK,KAC9C,CAEA,SAASo1C,GAAMtkD,EAAO4yJ,GAClB,IAAI9yJ,EAAKE,EAAMqjI,IAEXlR,EAAMryH,EAAGqqJ,YACTrqJ,EAAGqqJ,SAAS1yB,WAAY,EACxB33H,EAAGqqJ,YAEP,IAAI73J,EAAO29J,GAAkBjwJ,EAAM1N,KAAKk1J,YACxC,IAAIjpB,EAAQjsI,KAIR6/H,EAAMryH,EAAG+yJ,WAA6B,IAAhB/yJ,EAAGtH,SAA7B,CAGA,IAAI03J,EAAM59J,EAAK49J,IAAKx+J,EAAOY,EAAKZ,KAAM0+J,EAAa99J,EAAK89J,WAAYC,EAAe/9J,EAAK+9J,aAAcC,EAAmBh+J,EAAKg+J,iBAAkBwC,EAAcxgK,EAAKwgK,YAAaC,EAAgBzgK,EAAKygK,cAAeC,EAAoB1gK,EAAK0gK,kBAAmB9+B,EAAc5hI,EAAK4hI,YAAa5vE,EAAQhyD,EAAKgyD,MAAO2uG,EAAa3gK,EAAK2gK,WAAYC,EAAiB5gK,EAAK4gK,eAAgBC,EAAe7gK,EAAK6gK,aAAcC,EAAS9gK,EAAK8gK,OAAQC,EAAc/gK,EAAK+gK,YAAaC,EAAkBhhK,EAAKghK,gBAAiBC,EAAWjhK,EAAKihK,SAKpgB/+J,EAAUuhJ,GACVyd,EAAiBzd,GAAethJ,OACpC,MAAO++J,GAAkBA,EAAe7+J,OACpCH,EAAUg/J,EAAeh/J,QACzBg/J,EAAiBA,EAAe7+J,OAEpC,IAAI8+J,GAAYj/J,EAAQ+7I,aAAevwI,EAAM2jI,aAC7C,IAAI8vB,GAAaL,GAAqB,KAAXA,EAA3B,CAGA,IAAIM,EAAaD,GAAYX,EAAcA,EAAc1C,EACrD7/B,EAAckjC,GAAYT,EAAoBA,EAAoB1C,EAClEqD,EAAUF,GAAYV,EAAgBA,EAAgB1C,EACtDuD,EAAkBH,GAAWN,GAA8Bj/B,EAC3D2/B,EAAYJ,GAAY90B,EAAWy0B,GAAUA,EAAkB9uG,EAC/DwvG,EAAiBL,GAAWJ,GAA4BJ,EACxDc,EAAqBN,GACnBH,GACAJ,EACFc,EAAwBj1B,EAAS3tH,EAASmiJ,GAAYA,EAASjvG,MAAQivG,GACvE,EAGJ,IAAIU,GAAqB,IAAR/D,IAAkBjuB,GAC/BiyB,EAAmBC,GAAuBN,GAC1C3kG,EAAMpvD,EAAG+yJ,SAAWh2J,GAAK,WACrBo3J,IACAzC,GAAsB1xJ,EAAI6zJ,GAC1BnC,GAAsB1xJ,EAAIywH,IAG1BrhE,EAAGuoE,WACCw8B,GACAzC,GAAsB1xJ,EAAI4zJ,GAE9BK,GAAsBA,EAAmBj0J,IAGzCg0J,GAAkBA,EAAeh0J,GAErCA,EAAG+yJ,SAAW,IAClB,IACK7yJ,EAAM1N,KAAKkoC,MAEZwuG,GAAehpI,EAAO,UAAU,WAC5B,IAAIrL,EAASmL,EAAGrE,WACZ24J,EAAcz/J,GAAUA,EAAO8vI,UAAY9vI,EAAO8vI,SAASzkI,EAAMjH,KACjEq7J,GACAA,EAAYjzG,MAAQnhD,EAAMmhD,KAC1BizG,EAAY/wB,IAAI8mB,UAChBiK,EAAY/wB,IAAI8mB,WAEpB0J,GAAaA,EAAU/zJ,EAAIovD,EAC/B,IAGJ0kG,GAAmBA,EAAgB9zJ,GAC/Bm0J,IACA3C,GAAmBxxJ,EAAI4zJ,GACvBpC,GAAmBxxJ,EAAIywH,GACvB1lE,IAAU,WACN2mG,GAAsB1xJ,EAAI4zJ,GAErBxkG,EAAGuoE,YACJ65B,GAAmBxxJ,EAAI6zJ,GAClBO,IACGG,GAAgBL,GAChB9zI,WAAWgvC,EAAI8kG,GAGfvC,GAAmB3xJ,EAAIpO,EAAMw9D,IAI7C,KAEAlvD,EAAM1N,KAAKkoC,OACXo4H,GAAiBA,IACjBiB,GAAaA,EAAU/zJ,EAAIovD,IAE1B+kG,GAAeC,GAChBhlG,GAxEJ,CAfA,CAyFJ,CACA,SAASolG,GAAMt0J,EAAOioJ,GAClB,IAAInoJ,EAAKE,EAAMqjI,IAEXlR,EAAMryH,EAAG+yJ,YACT/yJ,EAAG+yJ,SAASp7B,WAAY,EACxB33H,EAAG+yJ,YAEP,IAAIvgK,EAAO29J,GAAkBjwJ,EAAM1N,KAAKk1J,YACxC,GAAIjpB,EAAQjsI,IAAyB,IAAhBwN,EAAGtH,SACpB,OAAOyvJ,IAGX,IAAI91B,EAAMryH,EAAGqqJ,UAAb,CAGA,IAAI+F,EAAM59J,EAAK49J,IAAKx+J,EAAOY,EAAKZ,KAAM6+J,EAAaj+J,EAAKi+J,WAAYC,EAAel+J,EAAKk+J,aAAcC,EAAmBn+J,EAAKm+J,iBAAkB8D,EAAcjiK,EAAKiiK,YAAaD,EAAQhiK,EAAKgiK,MAAOE,EAAaliK,EAAKkiK,WAAYC,EAAiBniK,EAAKmiK,eAAgBC,EAAapiK,EAAKoiK,WAAYnB,EAAWjhK,EAAKihK,SAClTU,GAAqB,IAAR/D,IAAkBjuB,GAC/BiyB,EAAmBC,GAAuBG,GAC1CK,EAAwB51B,EAAS3tH,EAASmiJ,GAAYA,EAASe,MAAQf,GACvE,EAGJ,IAAIrkG,EAAMpvD,EAAGqqJ,SAAWttJ,GAAK,WACrBiD,EAAGrE,YAAcqE,EAAGrE,WAAWgpI,WAC/B3kI,EAAGrE,WAAWgpI,SAASzkI,EAAMjH,KAAO,MAEpCk7J,IACAzC,GAAsB1xJ,EAAI0wJ,GAC1BgB,GAAsB1xJ,EAAI2wJ,IAG1BvhG,EAAGuoE,WACCw8B,GACAzC,GAAsB1xJ,EAAIywJ,GAE9BkE,GAAkBA,EAAe30J,KAGjCmoJ,IACAuM,GAAcA,EAAW10J,IAE7BA,EAAGqqJ,SAAW,IAClB,IACIuK,EACAA,EAAWE,GAGXA,GAjCJ,CAmCA,SAASA,IAGD1lG,EAAGuoE,aAIFz3H,EAAM1N,KAAKkoC,MAAQ16B,EAAGrE,cACtBqE,EAAGrE,WAAWgpI,WAAa3kI,EAAGrE,WAAWgpI,SAAW,CAAC,IAAIzkI,EAAMjH,KAC5DiH,GAERu0J,GAAeA,EAAYz0J,GACvBm0J,IACA3C,GAAmBxxJ,EAAIywJ,GACvBe,GAAmBxxJ,EAAI2wJ,GACvB5lG,IAAU,WACN2mG,GAAsB1xJ,EAAIywJ,GAErBrhG,EAAGuoE,YACJ65B,GAAmBxxJ,EAAI0wJ,GAClB0D,IACGG,GAAgBM,GAChBz0I,WAAWgvC,EAAIylG,GAGflD,GAAmB3xJ,EAAIpO,EAAMw9D,IAI7C,KAEJolG,GAASA,EAAMx0J,EAAIovD,GACd+kG,GAAeC,GAChBhlG,IAER,CACJ,CAYA,SAASmlG,GAAgBpiK,GACrB,MAAsB,kBAARA,IAAqB+jD,MAAM/jD,EAC7C,CAOA,SAASkiK,GAAuBh4J,GAC5B,GAAIoiI,EAAQpiI,GACR,OAAO,EAGX,IAAI04J,EAAa14J,EAAGssI,IACpB,OAAItW,EAAM0iC,GAECV,GAAuB5iK,MAAMsS,QAAQgxJ,GAAcA,EAAW,GAAKA,IAIlE14J,EAAG0jI,SAAW1jI,EAAGxE,QAAU,CAE3C,CACA,SAASm9J,GAAO/3J,EAAGiD,IACS,IAApBA,EAAM1N,KAAKkoC,MACX8pB,GAAMtkD,EAEd,CACA,IAAIwnJ,GAAav0B,EACX,CACEl5H,OAAQ+6J,GACRrN,SAAUqN,GACVt9J,OAAQ,SAAUwI,EAAOioJ,IAEG,IAApBjoJ,EAAM1N,KAAKkoC,KAEX85H,GAAMt0J,EAAOioJ,GAGbA,GAER,GAEF,CAAC,EAEH8M,GAAkB,CAACzkK,GAAOw8J,GAAOU,GAAQpiB,GAAUz0I,GAAO6wJ,IAI1D7mJ,GAAUo0J,GAAgBt/J,OAAOk2J,IACjCqJ,GAAQ7O,GAAoB,CAAElB,QAASA,GAAStkJ,QAASA,KAOzDshI,IAEA7rI,SAASsF,iBAAiB,mBAAmB,WACzC,IAAIoE,EAAK1J,SAASm3D,cAEdztD,GAAMA,EAAGm1J,QACTr6J,GAAQkF,EAAI,QAEpB,IAEJ,IAAID,GAAY,CACZ4lI,SAAU,SAAU3lI,EAAIC,EAASC,EAAOq7I,GAClB,WAAdr7I,EAAMmhD,KAEFk6F,EAAShY,MAAQgY,EAAShY,IAAI6xB,UAC9BlsB,GAAehpI,EAAO,aAAa,WAC/BH,GAAUurJ,iBAAiBtrJ,EAAIC,EAASC,EAC5C,IAGA24B,GAAY74B,EAAIC,EAASC,EAAMxL,SAEnCsL,EAAGo1J,UAAY,GAAGp5J,IAAIjH,KAAKiL,EAAG/M,QAAS2/B,MAEpB,aAAd1yB,EAAMmhD,KAAsBujG,GAAgB5kJ,EAAGpO,SACpDoO,EAAGquJ,YAAcpuJ,EAAQwrJ,UACpBxrJ,EAAQwrJ,UAAUjX,OACnBx0I,EAAGpE,iBAAiB,mBAAoBozD,IACxChvD,EAAGpE,iBAAiB,iBAAkBkzD,IAKtC9uD,EAAGpE,iBAAiB,SAAUkzD,IAE1BqzE,KACAniI,EAAGm1J,QAAS,IAI5B,EACA7J,iBAAkB,SAAUtrJ,EAAIC,EAASC,GACrC,GAAkB,WAAdA,EAAMmhD,IAAkB,CACxBxoB,GAAY74B,EAAIC,EAASC,EAAMxL,SAK/B,IAAI2gK,EAAgBr1J,EAAGo1J,UACnBE,EAAgBt1J,EAAGo1J,UAAY,GAAGp5J,IAAIjH,KAAKiL,EAAG/M,QAAS2/B,IAC3D,GAAI0iI,EAAavjH,MAAK,SAAUt7C,EAAGP,GAAK,OAAQmqI,EAAW5pI,EAAG4+J,EAAcn/J,GAAK,IAAI,CAGjF,IAAIq/J,EAAYv1J,EAAG6kJ,SACb5kJ,EAAQ5O,MAAM0gD,MAAK,SAAUp4C,GAAK,OAAO67J,GAAoB77J,EAAG27J,EAAe,IAC/Er1J,EAAQ5O,QAAU4O,EAAQm7B,UACxBo6H,GAAoBv1J,EAAQ5O,MAAOikK,GACvCC,GACAz6J,GAAQkF,EAAI,SAEpB,CACJ,CACJ,GAEJ,SAAS64B,GAAY74B,EAAIC,EAAS+sH,GAC9ByoC,GAAoBz1J,EAAIC,EAAS+sH,IAE7BznE,IAAQ68E,KACRhiH,YAAW,WACPq1I,GAAoBz1J,EAAIC,EAAS+sH,EACrC,GAAG,EAEX,CACA,SAASyoC,GAAoBz1J,EAAIC,EAAS+sH,GACtC,IAAI37H,EAAQ4O,EAAQ5O,MAChBqkK,EAAa11J,EAAG6kJ,SACpB,IAAI6Q,GAAejkK,MAAMsS,QAAQ1S,GAAjC,CASA,IADA,IAAI+lC,EAAUr1B,EACL7L,EAAI,EAAG8B,EAAIgI,EAAG/M,QAAQ4E,OAAQ3B,EAAI8B,EAAG9B,IAE1C,GADA6L,EAAS/B,EAAG/M,QAAQiD,GAChBw/J,EACAt+H,EAAWwpG,EAAavvI,EAAOuhC,GAAS7wB,KAAY,EAChDA,EAAOq1B,WAAaA,IACpBr1B,EAAOq1B,SAAWA,QAItB,GAAIipG,EAAWztG,GAAS7wB,GAAS1Q,GAI7B,YAHI2O,EAAG21J,gBAAkBz/J,IACrB8J,EAAG21J,cAAgBz/J,IAM9Bw/J,IACD11J,EAAG21J,eAAiB,EApBxB,CAsBJ,CACA,SAASH,GAAoBnkK,EAAO4B,GAChC,OAAOA,EAAQm4B,OAAM,SAAU30B,GAAK,OAAQ4pI,EAAW5pI,EAAGpF,EAAQ,GACtE,CACA,SAASuhC,GAAS7wB,GACd,MAAO,WAAYA,EAASA,EAAO8rJ,OAAS9rJ,EAAO1Q,KACvD,CACA,SAAS29D,GAAmB17D,GACxBA,EAAEiF,OAAO01J,WAAY,CACzB,CACA,SAASn/F,GAAiBx7D,GAEjBA,EAAEiF,OAAO01J,YAEd36J,EAAEiF,OAAO01J,WAAY,EACrBnzJ,GAAQxH,EAAEiF,OAAQ,SACtB,CACA,SAASuC,GAAQkF,EAAIpO,GACjB,IAAI0B,EAAIgD,SAAS6iJ,YAAY,cAC7B7lJ,EAAEsiK,UAAUhkK,GAAM,GAAM,GACxBoO,EAAG61J,cAAcviK,EACrB,CAGA,SAASwiK,GAAW51J,GAEhB,OAAOA,EAAMgtH,mBAAuBhtH,EAAM1N,MAAS0N,EAAM1N,KAAKk1J,WAExDxnJ,EADA41J,GAAW51J,EAAMgtH,kBAAkB4iB,OAE7C,CACA,IAAIp1G,GAAO,CACP5+B,KAAM,SAAUkE,EAAIwwI,EAAItwI,GACpB,IAAI7O,EAAQm/I,EAAGn/I,MACf6O,EAAQ41J,GAAW51J,GACnB,IAAIwnJ,EAAaxnJ,EAAM1N,MAAQ0N,EAAM1N,KAAKk1J,WACtCqO,EAAmB/1J,EAAGg2J,mBACD,SAArBh2J,EAAGnJ,MAAM0zC,QAAqB,GAAKvqC,EAAGnJ,MAAM0zC,QAC5Cl5C,GAASq2J,GACTxnJ,EAAM1N,KAAKkoC,MAAO,EAClB8pB,GAAMtkD,GAAO,WACTF,EAAGnJ,MAAM0zC,QAAUwrH,CACvB,KAGA/1J,EAAGnJ,MAAM0zC,QAAUl5C,EAAQ0kK,EAAkB,MAErD,EACAt1J,OAAQ,SAAUT,EAAIwwI,EAAItwI,GACtB,IAAI7O,EAAQm/I,EAAGn/I,MAAO+pC,EAAWo1G,EAAGp1G,SAEpC,IAAK/pC,KAAW+pC,EAAhB,CAEAl7B,EAAQ41J,GAAW51J,GACnB,IAAIwnJ,EAAaxnJ,EAAM1N,MAAQ0N,EAAM1N,KAAKk1J,WACtCA,GACAxnJ,EAAM1N,KAAKkoC,MAAO,EACdrpC,EACAmzD,GAAMtkD,GAAO,WACTF,EAAGnJ,MAAM0zC,QAAUvqC,EAAGg2J,kBAC1B,IAGAxB,GAAMt0J,GAAO,WACTF,EAAGnJ,MAAM0zC,QAAU,MACvB,KAIJvqC,EAAGnJ,MAAM0zC,QAAUl5C,EAAQ2O,EAAGg2J,mBAAqB,MAjB7C,CAmBd,EACAt1J,OAAQ,SAAUV,EAAIC,EAASC,EAAOq7I,EAAUuP,GACvCA,IACD9qJ,EAAGnJ,MAAM0zC,QAAUvqC,EAAGg2J,mBAE9B,GAGAC,GAAqB,CACrBta,MAAO57I,GACP26B,KAAMA,IAINw7H,GAAkB,CAClBvzJ,KAAMrR,OACNgiK,OAAQ5hK,QACR0+J,IAAK1+J,QACLI,KAAMR,OACNM,KAAMN,OACNg/J,WAAYh/J,OACZm/J,WAAYn/J,OACZi/J,aAAcj/J,OACdo/J,aAAcp/J,OACdk/J,iBAAkBl/J,OAClBq/J,iBAAkBr/J,OAClB0hK,YAAa1hK,OACb4hK,kBAAmB5hK,OACnB2hK,cAAe3hK,OACfmiK,SAAU,CAACliK,OAAQD,OAAQE,SAI/B,SAAS2kK,GAAaj2J,GAClB,IAAIk2J,EAAcl2J,GAASA,EAAMsjI,iBACjC,OAAI4yB,GAAeA,EAAYrzB,KAAK9vI,QAAQojJ,SACjC8f,GAAarkB,GAAuBskB,EAAY19I,WAGhDxY,CAEf,CACA,SAASm2J,GAAsBj9B,GAC3B,IAAI5mI,EAAO,CAAC,EACRS,EAAUmmI,EAAKhkI,SAEnB,IAAK,IAAI6D,KAAOhG,EAAQykJ,UACpBllJ,EAAKyG,GAAOmgI,EAAKngI,GAIrB,IAAIulE,EAAYvrE,EAAQm9I,iBACxB,IAAK,IAAIn3I,KAAOulE,EACZhsE,EAAKitI,EAASxmI,IAAQulE,EAAUvlE,GAEpC,OAAOzG,CACX,CACA,SAASmrF,GAAYnoF,EAAG8gK,GAEpB,GAAI,iBAAiBrxJ,KAAKqxJ,EAASj1G,KAC/B,OAAO7rD,EAAE,aAAc,CACnBpE,MAAOklK,EAAS9yB,iBAAiBkU,WAG7C,CACA,SAAS6e,GAAoBr2J,GACzB,MAAQA,EAAQA,EAAMrL,OAClB,GAAIqL,EAAM1N,KAAKk1J,WACX,OAAO,CAGnB,CACA,SAAS8O,GAAY5iI,EAAO6iI,GACxB,OAAOA,EAASx9J,MAAQ26B,EAAM36B,KAAOw9J,EAASp1G,MAAQztB,EAAMytB,GAChE,CACA,IAAIq1G,GAAgB,SAAUrgK,GAAK,OAAOA,EAAEgrD,KAAO6iF,GAAmB7tI,EAAI,EACtEsgK,GAAmB,SAAU3gK,GAAK,MAAkB,SAAXA,EAAE2M,IAAiB,EAC5Di0J,GAAa,CACbj0J,KAAM,aACNvR,MAAO8kK,GACP7f,UAAU,EACVpmJ,OAAQ,SAAUuF,GACd,IAAIuzH,EAAQ54H,KACRuoB,EAAWvoB,KAAK2hI,OAAOjgI,QAC3B,GAAK6mB,IAILA,EAAWA,EAAS8a,OAAOkjI,IAEtBh+I,EAAS7gB,QAAd,CAII,EAIJ,IAAI/F,EAAO3B,KAAK2B,KAEZ,EAGJ,IAAIwkK,EAAW59I,EAAS,GAGxB,GAAI69I,GAAoBpmK,KAAKwE,QACzB,OAAO2hK,EAIX,IAAI1iI,EAAQuiI,GAAaG,GAEzB,IAAK1iI,EACD,OAAO0iI,EAEX,GAAInmK,KAAK0mK,SACL,OAAOl5E,GAAYnoF,EAAG8gK,GAK1B,IAAIt1J,EAAK,gBAAgBrL,OAAOxF,KAAKqwJ,KAAM,KAC3C5sH,EAAM36B,IACW,MAAb26B,EAAM36B,IACA26B,EAAMkwG,UACF9iI,EAAK,UACLA,EAAK4yB,EAAMytB,IACfu9E,EAAYhrG,EAAM36B,KACoB,IAAlC3H,OAAOsiC,EAAM36B,KAAK+I,QAAQhB,GACtB4yB,EAAM36B,IACN+H,EAAK4yB,EAAM36B,IACf26B,EAAM36B,IACpB,IAAIzG,GAASohC,EAAMphC,OAASohC,EAAMphC,KAAO,CAAC,IAAIk1J,WAC1C2O,GAAsBlmK,MACtB2mK,EAAc3mK,KAAK2/I,OACnB2mB,EAAWN,GAAaW,GAM5B,GAHIljI,EAAMphC,KAAKgrJ,YAAc5pH,EAAMphC,KAAKgrJ,WAAWzrG,KAAK4kH,MACpD/iI,EAAMphC,KAAKkoC,MAAO,GAElB+7H,GACAA,EAASjkK,OACRgkK,GAAY5iI,EAAO6iI,KACnBvyB,GAAmBuyB,MAElBA,EAASvpC,oBACPupC,EAASvpC,kBAAkB4iB,OAAOhM,WAAY,CAGlD,IAAI6oB,EAAW8J,EAASjkK,KAAKk1J,WAAa7kJ,EAAO,CAAC,EAAGrQ,GAErD,GAAa,WAATV,EAOA,OALA3B,KAAK0mK,UAAW,EAChB3tB,GAAeyjB,EAAS,cAAc,WAClC5jC,EAAM8tC,UAAW,EACjB9tC,EAAM4oB,cACV,IACOh0D,GAAYnoF,EAAG8gK,GAErB,GAAa,WAATxkK,EAAmB,CACxB,GAAIoyI,GAAmBtwG,GACnB,OAAOkjI,EAEX,IAAIC,EACAjC,EAAe,WACfiC,GACJ,EACA7tB,GAAe12I,EAAM,aAAcsiK,GACnC5rB,GAAe12I,EAAM,iBAAkBsiK,GACvC5rB,GAAeyjB,EAAS,cAAc,SAAU6H,GAC5CuC,EAAiBvC,CACrB,GACJ,CACJ,CACA,OAAO8B,CArFP,CAsFJ,GAIAllK,GAAQyR,EAAO,CACfw+C,IAAK/vD,OACL0lK,UAAW1lK,QACZ4kK,WACI9kK,GAAMU,KACb,IAAImlK,GAAkB,CAClB7lK,MAAOA,GACP8lK,YAAa,WACT,IAAInuC,EAAQ54H,KACRsQ,EAAStQ,KAAKumJ,QAClBvmJ,KAAKumJ,QAAU,SAAUx2I,EAAOy2I,GAC5B,IAAIG,EAAwBZ,GAAkBntB,GAE9CA,EAAMguB,UAAUhuB,EAAM+mB,OAAQ/mB,EAAMouC,MAAM,GAC1C,GAEApuC,EAAM+mB,OAAS/mB,EAAMouC,KACrBrgB,IACAr2I,EAAO1L,KAAKg0H,EAAO7oH,EAAOy2I,EAC9B,CACJ,EACA1mJ,OAAQ,SAAUuF,GAOd,IANA,IAAI6rD,EAAMlxD,KAAKkxD,KAAOlxD,KAAKwE,OAAOnC,KAAK6uD,KAAO,OAC1CrlD,EAAMxK,OAAOyI,OAAO,MACpBm9J,EAAgBjnK,KAAKinK,aAAejnK,KAAKuoB,SACzC2+I,EAAclnK,KAAK2hI,OAAOjgI,SAAW,GACrC6mB,EAAYvoB,KAAKuoB,SAAW,GAC5B4+I,EAAiBjB,GAAsBlmK,MAClC+F,EAAI,EAAGA,EAAImhK,EAAYx/J,OAAQ3B,IAAK,CACzC,IAAIG,EAAIghK,EAAYnhK,GACpB,GAAIG,EAAEgrD,IACF,GAAa,MAAThrD,EAAE4C,KAAoD,IAArC3H,OAAO+E,EAAE4C,KAAK+I,QAAQ,WACvC0W,EAAS7b,KAAKxG,GACd2F,EAAI3F,EAAE4C,KAAO5C,GACZA,EAAE7D,OAAS6D,EAAE7D,KAAO,CAAC,IAAIk1J,WAAa4P,OAUnD,CACA,GAAIF,EAAc,CACd,IAAID,EAAO,GACPz5G,EAAU,GACd,IAASxnD,EAAI,EAAGA,EAAIkhK,EAAav/J,OAAQ3B,IAAK,CACtCG,EAAI+gK,EAAalhK,GACrBG,EAAE7D,KAAKk1J,WAAa4P,EAEpBjhK,EAAE7D,KAAKgpB,IAAMnlB,EAAEktI,IAAIxlG,wBACf/hC,EAAI3F,EAAE4C,KACNk+J,EAAKt6J,KAAKxG,GAGVqnD,EAAQ7gD,KAAKxG,EAErB,CACAlG,KAAKgnK,KAAO3hK,EAAE6rD,EAAK,KAAM81G,GACzBhnK,KAAKutD,QAAUA,CACnB,CACA,OAAOloD,EAAE6rD,EAAK,KAAM3oC,EACxB,EACAshH,QAAS,WACL,IAAIthH,EAAWvoB,KAAKinK,aAChBJ,EAAY7mK,KAAK6mK,YAAc7mK,KAAKwS,MAAQ,KAAO,QAClD+V,EAAS7gB,QAAW1H,KAAKonK,QAAQ7+I,EAAS,GAAG6qH,IAAKyzB,KAKvDt+I,EAASre,QAAQm9J,IACjB9+I,EAASre,QAAQo9J,IACjB/+I,EAASre,QAAQq9J,IAIjBvnK,KAAKwnK,QAAUrhK,SAASwB,KAAKoyC,aAC7BxxB,EAASre,SAAQ,SAAUhE,GACvB,GAAIA,EAAE7D,KAAKi/C,MAAO,CACd,IAAImmH,EAAOvhK,EAAEktI,IACTlrI,EAAIu/J,EAAK/gK,MACb26J,GAAmBoG,EAAMZ,GACzB3+J,EAAEylG,UAAYzlG,EAAEw/J,gBAAkBx/J,EAAEy/J,mBAAqB,GACzDF,EAAKh8J,iBAAiBo1J,GAAqB4G,EAAKG,QAAU,SAAS3oG,EAAG97D,GAC9DA,GAAKA,EAAEiF,SAAWq/J,GAGjBtkK,IAAK,aAAa2R,KAAK3R,EAAE0kK,gBAC1BJ,EAAK/7J,oBAAoBm1J,GAAoB5hG,GAC7CwoG,EAAKG,QAAU,KACfrG,GAAsBkG,EAAMZ,GAEpC,EACJ,CACJ,IACJ,EACAtjK,QAAS,CACL6jK,QAAS,SAAUv3J,EAAIg3J,GAEnB,IAAKpG,GACD,OAAO,EAGX,GAAIzgK,KAAK8nK,SACL,OAAO9nK,KAAK8nK,SAOhB,IAAItrH,EAAQ3sC,EAAGsjD,YACXtjD,EAAG8sJ,oBACH9sJ,EAAG8sJ,mBAAmBzyJ,SAAQ,SAAUuyJ,GACpCqD,GAAYtjH,EAAOigH,EACvB,IAEJmD,GAASpjH,EAAOqqH,GAChBrqH,EAAM91C,MAAM0zC,QAAU,OACtBp6C,KAAKqD,IAAIiE,YAAYk1C,GACrB,IAAIs4F,EAAO4sB,GAAkBllH,GAE7B,OADAx8C,KAAKqD,IAAIsM,YAAY6sC,GACbx8C,KAAK8nK,SAAWhzB,EAAKytB,YACjC,IAGR,SAAS8E,GAAenhK,GAEhBA,EAAEktI,IAAIw0B,SACN1hK,EAAEktI,IAAIw0B,UAGN1hK,EAAEktI,IAAIwvB,UACN18J,EAAEktI,IAAIwvB,UAEd,CACA,SAAS0E,GAAephK,GACpBA,EAAE7D,KAAKqpH,OAASxlH,EAAEktI,IAAIxlG,uBAC1B,CACA,SAAS25H,GAAiBrhK,GACtB,IAAI6hK,EAAS7hK,EAAE7D,KAAKgpB,IAChBqgG,EAASxlH,EAAE7D,KAAKqpH,OAChB1E,EAAK+gD,EAAOl6H,KAAO69E,EAAO79E,KAC1Bm6H,EAAKD,EAAO5gK,IAAMukH,EAAOvkH,IAC7B,GAAI6/G,GAAMghD,EAAI,CACV9hK,EAAE7D,KAAKi/C,OAAQ,EACf,IAAIp5C,EAAIhC,EAAEktI,IAAI1sI,MACdwB,EAAEylG,UAAYzlG,EAAEw/J,gBAAkB,aAAaliK,OAAOwhH,EAAI,OAAOxhH,OAAOwiK,EAAI,OAC5E9/J,EAAEy/J,mBAAqB,IAC3B,CACJ,CAEA,IAAIM,GAAqB,CACrBxB,WAAYA,GACZK,gBAAiBA,IAIrBh4J,GAAIG,OAAOwiI,YAAcA,GACzB3iI,GAAIG,OAAOmiI,cAAgBA,GAC3BtiI,GAAIG,OAAOoiI,eAAiBA,GAC5BviI,GAAIG,OAAOsiI,gBAAkBA,GAC7BziI,GAAIG,OAAOqiI,iBAAmBA,GAE9B5+H,EAAO5D,GAAIhM,QAAQuqJ,WAAYyY,IAC/BpzJ,EAAO5D,GAAIhM,QAAQ65H,WAAYsrC,IAE/Bn5J,GAAI7G,UAAU2+I,UAAY5jB,EAAY+hC,GAAQ7kC,EAE9CpxH,GAAI7G,UAAUkjJ,OAAS,SAAUt7I,EAAI22I,GAEjC,OADA32I,EAAKA,GAAMmzH,EAAYrjH,GAAM9P,QAAMM,EAC5B82I,GAAejnJ,KAAM6P,EAAI22I,EACpC,EAGIxjB,GACA/yG,YAAW,WACHhhB,EAAO8hI,UACHA,IACAA,GAASrmI,KAAK,OAAQoE,GAiBlC,GAAG,E;;;;;GC9lRP,SAASo5J,EAAYp5J,GACnB,IAAIE,EAAU5N,OAAO0N,EAAIE,QAAQkP,MAAM,KAAK,IAE5C,GAAIlP,GAAW,EACbF,EAAIgE,MAAM,CAAEvN,aAAc4iK,QACrB,CAGL,IAAI/X,EAAQthJ,EAAI7G,UAAUmoJ,MAC1BthJ,EAAI7G,UAAUmoJ,MAAQ,SAAUttJ,QACb,IAAZA,IAAqBA,EAAU,CAAC,GAErCA,EAAQ4tE,KAAO5tE,EAAQ4tE,KACnB,CAACy3F,GAAU3iK,OAAO1C,EAAQ4tE,MAC1By3F,EACJ/X,EAAMxrJ,KAAK5E,KAAM8C,EACnB,CACF,CAMA,SAASqlK,IACP,IAAIrlK,EAAU9C,KAAKiF,SAEfnC,EAAQslK,MACVpoK,KAAKqoK,OAAkC,oBAAlBvlK,EAAQslK,MACzBtlK,EAAQslK,QACRtlK,EAAQslK,MACHtlK,EAAQ4B,QAAU5B,EAAQ4B,OAAO2jK,SAC1CroK,KAAKqoK,OAASvlK,EAAQ4B,OAAO2jK,OAEjC,CACF,CAEA,IAAIjgK,EAA2B,qBAAXpB,OAChBA,OACkB,qBAAX,EAAAwrI,EACL,EAAAA,EACA,CAAC,EACH81B,EAAclgK,EAAOsqI,6BAEzB,SAAS61B,EAAeH,GACjBE,IAELF,EAAMI,aAAeF,EAErBA,EAAY59J,KAAK,YAAa09J,GAE9BE,EAAY/nK,GAAG,wBAAwB,SAAUkoK,GAC/CL,EAAMniC,aAAawiC,EACrB,IAEAL,EAAMM,WAAU,SAAUC,EAAUx0H,GAClCm0H,EAAY59J,KAAK,gBAAiBi+J,EAAUx0H,EAC9C,GAAG,CAAEy0H,SAAS,IAEdR,EAAMS,iBAAgB,SAAU1gK,EAAQgsC,GACtCm0H,EAAY59J,KAAK,cAAevC,EAAQgsC,EAC1C,GAAG,CAAEy0H,SAAS,IAChB,CAUA,SAASloE,EAAMzoD,EAAMzwC,GACnB,OAAOywC,EAAK5U,OAAO77B,GAAG,EACxB,CAWA,SAASi0D,EAAUr6C,EAAKrI,GAItB,QAHe,IAAVA,IAAmBA,EAAQ,IAGpB,OAARqI,GAA+B,kBAARA,EACzB,OAAOA,EAIT,IAAIguH,EAAM1uC,EAAK3nF,GAAO,SAAU7S,GAAK,OAAOA,EAAEokD,WAAalpC,CAAK,IAChE,GAAIguH,EACF,OAAOA,EAAIt2H,KAGb,IAAIA,EAAOxX,MAAMsS,QAAQwN,GAAO,GAAK,CAAC,EAYtC,OATArI,EAAMrM,KAAK,CACT49C,SAAUlpC,EACVtI,KAAMA,IAGRzX,OAAOsQ,KAAKyP,GAAKlX,SAAQ,SAAUpB,GACjCgQ,EAAKhQ,GAAO2yD,EAASr6C,EAAItY,GAAMiQ,EACjC,IAEOD,CACT,CAKA,SAASgwJ,EAAc1nJ,EAAKlV,GAC1B7K,OAAOsQ,KAAKyP,GAAKlX,SAAQ,SAAUpB,GAAO,OAAOoD,EAAGkV,EAAItY,GAAMA,EAAM,GACtE,CAEA,SAASqY,EAAUC,GACjB,OAAe,OAARA,GAA+B,kBAARA,CAChC,CAEA,SAAS6U,EAAWj0B,GAClB,OAAOA,GAA2B,oBAAbA,EAAI6L,IAC3B,CAMA,SAAS+gB,EAAS1iB,EAAI8D,GACpB,OAAO,WACL,OAAO9D,EAAG8D,EACZ,CACF,CAGA,IAAI+4J,EAAS,SAAiBC,EAAWt5I,GACvC1vB,KAAK0vB,QAAUA,EAEf1vB,KAAKipK,UAAY5nK,OAAOyI,OAAO,MAE/B9J,KAAKkpK,WAAaF,EAClB,IAAIG,EAAWH,EAAU70H,MAGzBn0C,KAAKm0C,OAA6B,oBAAbg1H,EAA0BA,IAAaA,IAAa,CAAC,CAC5E,EAEI97B,EAAqB,CAAE+7B,WAAY,CAAEzgK,cAAc,IAEvD0kI,EAAmB+7B,WAAWpmK,IAAM,WAClC,QAAShD,KAAKkpK,WAAWE,UAC3B,EAEAL,EAAO9gK,UAAUohK,SAAW,SAAmBvgK,EAAKnD,GAClD3F,KAAKipK,UAAUngK,GAAOnD,CACxB,EAEAojK,EAAO9gK,UAAU0H,YAAc,SAAsB7G,UAC5C9I,KAAKipK,UAAUngK,EACxB,EAEAigK,EAAO9gK,UAAUqhK,SAAW,SAAmBxgK,GAC7C,OAAO9I,KAAKipK,UAAUngK,EACxB,EAEAigK,EAAO9gK,UAAUshK,SAAW,SAAmBzgK,GAC7C,OAAOA,KAAO9I,KAAKipK,SACrB,EAEAF,EAAO9gK,UAAUqI,OAAS,SAAiB04J,GACzChpK,KAAKkpK,WAAWE,WAAaJ,EAAUI,WACnCJ,EAAUh+H,UACZhrC,KAAKkpK,WAAWl+H,QAAUg+H,EAAUh+H,SAElCg+H,EAAUQ,YACZxpK,KAAKkpK,WAAWM,UAAYR,EAAUQ,WAEpCR,EAAUS,UACZzpK,KAAKkpK,WAAWO,QAAUT,EAAUS,QAExC,EAEAV,EAAO9gK,UAAUyhK,aAAe,SAAuBx9J,GACrD48J,EAAa9oK,KAAKipK,UAAW/8J,EAC/B,EAEA68J,EAAO9gK,UAAU0hK,cAAgB,SAAwBz9J,GACnDlM,KAAKkpK,WAAWO,SAClBX,EAAa9oK,KAAKkpK,WAAWO,QAASv9J,EAE1C,EAEA68J,EAAO9gK,UAAU2hK,cAAgB,SAAwB19J,GACnDlM,KAAKkpK,WAAWl+H,SAClB89H,EAAa9oK,KAAKkpK,WAAWl+H,QAAS9+B,EAE1C,EAEA68J,EAAO9gK,UAAU4hK,gBAAkB,SAA0B39J,GACvDlM,KAAKkpK,WAAWM,WAClBV,EAAa9oK,KAAKkpK,WAAWM,UAAWt9J,EAE5C,EAEA7K,OAAO8tD,iBAAkB45G,EAAO9gK,UAAWolI,GAE3C,IAAIy8B,EAAmB,SAA2BC,GAEhD/pK,KAAKgqK,SAAS,GAAID,GAAe,EACnC,EA6EA,SAASz5J,EAAQyO,EAAMkrJ,EAAcC,GASnC,GAHAD,EAAa35J,OAAO45J,GAGhBA,EAAUx5J,QACZ,IAAK,IAAI5H,KAAOohK,EAAUx5J,QAAS,CACjC,IAAKu5J,EAAaX,SAASxgK,GAOzB,cAEFwH,EACEyO,EAAKvZ,OAAOsD,GACZmhK,EAAaX,SAASxgK,GACtBohK,EAAUx5J,QAAQ5H,GAEtB,CAEJ,CAtGAghK,EAAiB7hK,UAAUjF,IAAM,SAAc+b,GAC7C,OAAOA,EAAKwkB,QAAO,SAAU59B,EAAQmD,GACnC,OAAOnD,EAAO2jK,SAASxgK,EACzB,GAAG9I,KAAKwQ,KACV,EAEAs5J,EAAiB7hK,UAAUkiK,aAAe,SAAuBprJ,GAC/D,IAAIpZ,EAAS3F,KAAKwQ,KAClB,OAAOuO,EAAKwkB,QAAO,SAAUoxH,EAAW7rJ,GAEtC,OADAnD,EAASA,EAAO2jK,SAASxgK,GAClB6rJ,GAAahvJ,EAAOyjK,WAAatgK,EAAM,IAAM,GACtD,GAAG,GACL,EAEAghK,EAAiB7hK,UAAUqI,OAAS,SAAmBy5J,GACrDz5J,EAAO,GAAItQ,KAAKwQ,KAAMu5J,EACxB,EAEAD,EAAiB7hK,UAAU+hK,SAAW,SAAmBjrJ,EAAMiqJ,EAAWt5I,GACtE,IAAI06I,EAASpqK,UACI,IAAZ0vB,IAAqBA,GAAU,GAMtC,IAAIw6I,EAAY,IAAInB,EAAOC,EAAWt5I,GACtC,GAAoB,IAAhB3Q,EAAKrX,OACP1H,KAAKwQ,KAAO05J,MACP,CACL,IAAIxlK,EAAS1E,KAAKgD,IAAI+b,EAAKhS,MAAM,GAAI,IACrCrI,EAAO2kK,SAAStqJ,EAAKA,EAAKrX,OAAS,GAAIwiK,EACzC,CAGIlB,EAAUt4J,SACZo4J,EAAaE,EAAUt4J,SAAS,SAAU25J,EAAgBvhK,GACxDshK,EAAOJ,SAASjrJ,EAAKvZ,OAAOsD,GAAMuhK,EAAgB36I,EACpD,GAEJ,EAEAo6I,EAAiB7hK,UAAUqiK,WAAa,SAAqBvrJ,GAC3D,IAAIra,EAAS1E,KAAKgD,IAAI+b,EAAKhS,MAAM,GAAI,IACjCjE,EAAMiW,EAAKA,EAAKrX,OAAS,GACzB+7B,EAAQ/+B,EAAO4kK,SAASxgK,GAEvB26B,GAUAA,EAAM/T,SAIXhrB,EAAOiL,YAAY7G,EACrB,EAEAghK,EAAiB7hK,UAAUsiK,aAAe,SAAuBxrJ,GAC/D,IAAIra,EAAS1E,KAAKgD,IAAI+b,EAAKhS,MAAM,GAAI,IACjCjE,EAAMiW,EAAKA,EAAKrX,OAAS,GAE7B,QAAIhD,GACKA,EAAO6kK,SAASzgK,EAI3B,EA+BA,IAyCIgG,EAEJ,IAAI07J,EAAQ,SAAgB1nK,GAC1B,IAAIsnK,EAASpqK,UACI,IAAZ8C,IAAqBA,EAAU,CAAC,IAKhCgM,GAAyB,qBAAX9H,QAA0BA,OAAO8H,KAClDD,EAAQ7H,OAAO8H,KASjB,IAAI27J,EAAU3nK,EAAQ2nK,aAA0B,IAAZA,IAAqBA,EAAU,IACnE,IAAIvrC,EAASp8H,EAAQo8H,YAAwB,IAAXA,IAAoBA,GAAS,GAG/Dl/H,KAAK0qK,aAAc,EACnB1qK,KAAK2qK,SAAWtpK,OAAOyI,OAAO,MAC9B9J,KAAK4qK,mBAAqB,GAC1B5qK,KAAK6qK,WAAaxpK,OAAOyI,OAAO,MAChC9J,KAAK8qK,gBAAkBzpK,OAAOyI,OAAO,MACrC9J,KAAK+qK,SAAW,IAAIjB,EAAiBhnK,GACrC9C,KAAKgrK,qBAAuB3pK,OAAOyI,OAAO,MAC1C9J,KAAKirK,aAAe,GACpBjrK,KAAKkrK,WAAa,IAAIp8J,EACtB9O,KAAKmrK,uBAAyB9pK,OAAOyI,OAAO,MAG5C,IAAIs+J,EAAQpoK,KACRyb,EAAMzb,KACNorK,EAAW3vJ,EAAI2vJ,SACfC,EAAS5vJ,EAAI4vJ,OACjBrrK,KAAKorK,SAAW,SAAwB3pK,EAAM2oD,GAC5C,OAAOghH,EAASxmK,KAAKwjK,EAAO3mK,EAAM2oD,EACpC,EACApqD,KAAKqrK,OAAS,SAAsB5pK,EAAM2oD,EAAStnD,GACjD,OAAOuoK,EAAOzmK,KAAKwjK,EAAO3mK,EAAM2oD,EAAStnD,EAC3C,EAGA9C,KAAKk/H,OAASA,EAEd,IAAI/qF,EAAQn0C,KAAK+qK,SAASv6J,KAAK2jC,MAK/Bm3H,EAActrK,KAAMm0C,EAAO,GAAIn0C,KAAK+qK,SAASv6J,MAI7C+6J,EAAavrK,KAAMm0C,GAGnBs2H,EAAQvgK,SAAQ,SAAUinJ,GAAU,OAAOA,EAAOiZ,EAAS,IAE3D,IAAIoB,OAAmCr7J,IAArBrN,EAAQiuI,SAAyBjuI,EAAQiuI,SAAWjiI,EAAIG,OAAO8hI,SAC7Ey6B,GACFjD,EAAcvoK,KAElB,EAEIyrK,EAAuB,CAAEt3H,MAAO,CAAExrC,cAAc,IAmMpD,SAAS+iK,EAAkBx/J,EAAIqoI,EAAMzxI,GAMnC,OALIyxI,EAAK1iI,QAAQ3F,GAAM,IACrBpJ,GAAWA,EAAQ8lK,QACfr0B,EAAKtxH,QAAQ/W,GACbqoI,EAAK7nI,KAAKR,IAET,WACL,IAAInG,EAAIwuI,EAAK1iI,QAAQ3F,GACjBnG,GAAK,GACPwuI,EAAK7vH,OAAO3e,EAAG,EAEnB,CACF,CAEA,SAAS4lK,EAAYvD,EAAOwD,GAC1BxD,EAAMuC,SAAWtpK,OAAOyI,OAAO,MAC/Bs+J,EAAMyC,WAAaxpK,OAAOyI,OAAO,MACjCs+J,EAAM0C,gBAAkBzpK,OAAOyI,OAAO,MACtCs+J,EAAM4C,qBAAuB3pK,OAAOyI,OAAO,MAC3C,IAAIqqC,EAAQi0H,EAAMj0H,MAElBm3H,EAAclD,EAAOj0H,EAAO,GAAIi0H,EAAM2C,SAASv6J,MAAM,GAErD+6J,EAAanD,EAAOj0H,EAAOy3H,EAC7B,CAEA,SAASL,EAAcnD,EAAOj0H,EAAOy3H,GACnC,IAAIC,EAAQzD,EAAMroK,IAGlBqoK,EAAMqB,QAAU,CAAC,EAEjBrB,EAAM+C,uBAAyB9pK,OAAOyI,OAAO,MAC7C,IAAIgiK,EAAiB1D,EAAM0C,gBACvB/d,EAAW,CAAC,EAChB+b,EAAagD,GAAgB,SAAU5/J,EAAIpD,GAIzCikJ,EAASjkJ,GAAO8lB,EAAQ1iB,EAAIk8J,GAC5B/mK,OAAOwH,eAAeu/J,EAAMqB,QAAS3gK,EAAK,CACxC9F,IAAK,WAAc,OAAOolK,EAAMroK,IAAI+I,EAAM,EAC1CJ,YAAY,GAEhB,IAKA,IAAI61C,EAASzvC,EAAIG,OAAOsvC,OACxBzvC,EAAIG,OAAOsvC,QAAS,EACpB6pH,EAAMroK,IAAM,IAAI+O,EAAI,CAClBzM,KAAM,CACJ0pK,QAAS53H,GAEX44G,SAAUA,IAEZj+I,EAAIG,OAAOsvC,OAASA,EAGhB6pH,EAAMlpC,QACR8sC,EAAiB5D,GAGfyD,IACED,GAGFxD,EAAM6D,aAAY,WAChBJ,EAAM7kB,MAAM+kB,QAAU,IACxB,IAEFj9J,EAAI2rD,UAAS,WAAc,OAAOoxG,EAAM/kB,UAAY,IAExD,CAEA,SAASwkB,EAAelD,EAAO8D,EAAWntJ,EAAMpZ,EAAQimK,GACtD,IAAIrxJ,GAAUwE,EAAKrX,OACfitJ,EAAYyT,EAAM2C,SAASZ,aAAaprJ,GAW5C,GARIpZ,EAAOyjK,aACLhB,EAAM4C,qBAAqBrW,GAG/ByT,EAAM4C,qBAAqBrW,GAAahvJ,IAIrC4U,IAAWqxJ,EAAK,CACnB,IAAIO,EAAcC,EAAeF,EAAWntJ,EAAKhS,MAAM,GAAI,IACvD+9C,EAAa/rC,EAAKA,EAAKrX,OAAS,GACpC0gK,EAAM6D,aAAY,WAQhBn9J,EAAIpL,IAAIyoK,EAAarhH,EAAYnlD,EAAOwuC,MAC1C,GACF,CAEA,IAAIk4H,EAAQ1mK,EAAOpB,QAAU+nK,EAAiBlE,EAAOzT,EAAW51I,GAEhEpZ,EAAOkkK,iBAAgB,SAAUlB,EAAU7/J,GACzC,IAAIyjK,EAAiB5X,EAAY7rJ,EACjC0jK,EAAiBpE,EAAOmE,EAAgB5D,EAAU0D,EACpD,IAEA1mK,EAAOikK,eAAc,SAAUzhK,EAAQW,GACrC,IAAIrH,EAAO0G,EAAOqI,KAAO1H,EAAM6rJ,EAAY7rJ,EACvC/G,EAAUoG,EAAOpG,SAAWoG,EAChCskK,EAAerE,EAAO3mK,EAAMM,EAASsqK,EACvC,IAEA1mK,EAAOgkK,eAAc,SAAUj7G,EAAQ5lD,GACrC,IAAIyjK,EAAiB5X,EAAY7rJ,EACjC4jK,EAAetE,EAAOmE,EAAgB79G,EAAQ29G,EAChD,IAEA1mK,EAAO+jK,cAAa,SAAUjmI,EAAO36B,GACnCwiK,EAAclD,EAAO8D,EAAWntJ,EAAKvZ,OAAOsD,GAAM26B,EAAOmoI,EAC3D,GACF,CAMA,SAASU,EAAkBlE,EAAOzT,EAAW51I,GAC3C,IAAI4tJ,EAA4B,KAAdhY,EAEd0X,EAAQ,CACVjB,SAAUuB,EAAcvE,EAAMgD,SAAW,SAAUwB,EAAOC,EAAUC,GAClE,IAAIp3I,EAAOq3I,EAAiBH,EAAOC,EAAUC,GACzC1iH,EAAU10B,EAAK00B,QACftnD,EAAU4yB,EAAK5yB,QACfrB,EAAOi0B,EAAKj0B,KAUhB,OARKqB,GAAYA,EAAQ0N,OACvB/O,EAAOkzJ,EAAYlzJ,GAOd2mK,EAAMgD,SAAS3pK,EAAM2oD,EAC9B,EAEAihH,OAAQsB,EAAcvE,EAAMiD,OAAS,SAAUuB,EAAOC,EAAUC,GAC9D,IAAIp3I,EAAOq3I,EAAiBH,EAAOC,EAAUC,GACzC1iH,EAAU10B,EAAK00B,QACftnD,EAAU4yB,EAAK5yB,QACfrB,EAAOi0B,EAAKj0B,KAEXqB,GAAYA,EAAQ0N,OACvB/O,EAAOkzJ,EAAYlzJ,GAOrB2mK,EAAMiD,OAAO5pK,EAAM2oD,EAAStnD,EAC9B,GAgBF,OAXAzB,OAAO8tD,iBAAiBk9G,EAAO,CAC7B5C,QAAS,CACPzmK,IAAK2pK,EACD,WAAc,OAAOvE,EAAMqB,OAAS,EACpC,WAAc,OAAOuD,EAAiB5E,EAAOzT,EAAY,GAE/DxgH,MAAO,CACLnxC,IAAK,WAAc,OAAOopK,EAAehE,EAAMj0H,MAAOp1B,EAAO,KAI1DstJ,CACT,CAEA,SAASW,EAAkB5E,EAAOzT,GAChC,IAAKyT,EAAM+C,uBAAuBxW,GAAY,CAC5C,IAAIsY,EAAe,CAAC,EAChBC,EAAWvY,EAAUjtJ,OACzBrG,OAAOsQ,KAAKy2J,EAAMqB,SAASv/J,SAAQ,SAAUzI,GAE3C,GAAIA,EAAKsL,MAAM,EAAGmgK,KAAcvY,EAAhC,CAGA,IAAIwY,EAAY1rK,EAAKsL,MAAMmgK,GAK3B7rK,OAAOwH,eAAeokK,EAAcE,EAAW,CAC7CnqK,IAAK,WAAc,OAAOolK,EAAMqB,QAAQhoK,EAAO,EAC/CiH,YAAY,GAVsC,CAYtD,IACA0/J,EAAM+C,uBAAuBxW,GAAasY,CAC5C,CAEA,OAAO7E,EAAM+C,uBAAuBxW,EACtC,CAEA,SAAS6X,EAAkBpE,EAAO3mK,EAAMM,EAASsqK,GAC/C,IAAI/oI,EAAQ8kI,EAAMyC,WAAWppK,KAAU2mK,EAAMyC,WAAWppK,GAAQ,IAChE6hC,EAAM52B,MAAK,SAAiC09C,GAC1CroD,EAAQ6C,KAAKwjK,EAAOiE,EAAMl4H,MAAOiW,EACnC,GACF,CAEA,SAASqiH,EAAgBrE,EAAO3mK,EAAMM,EAASsqK,GAC7C,IAAI/oI,EAAQ8kI,EAAMuC,SAASlpK,KAAU2mK,EAAMuC,SAASlpK,GAAQ,IAC5D6hC,EAAM52B,MAAK,SAA+B09C,GACxC,IAAIt8C,EAAM/L,EAAQ6C,KAAKwjK,EAAO,CAC5BgD,SAAUiB,EAAMjB,SAChBC,OAAQgB,EAAMhB,OACd5B,QAAS4C,EAAM5C,QACft1H,MAAOk4H,EAAMl4H,MACbi5H,YAAahF,EAAMqB,QACnByC,UAAW9D,EAAMj0H,OAChBiW,GAIH,OAHKn0B,EAAUnoB,KACbA,EAAMuB,QAAQC,QAAQxB,IAEpBs6J,EAAMI,aACD16J,EAAIK,OAAM,SAAUC,GAEzB,MADAg6J,EAAMI,aAAa99J,KAAK,aAAc0D,GAChCA,CACR,IAEON,CAEX,GACF,CAEA,SAAS4+J,EAAgBtE,EAAO3mK,EAAM4rK,EAAWhB,GAC3CjE,EAAM0C,gBAAgBrpK,KAM1B2mK,EAAM0C,gBAAgBrpK,GAAQ,SAAwB2mK,GACpD,OAAOiF,EACLhB,EAAMl4H,MACNk4H,EAAM5C,QACNrB,EAAMj0H,MACNi0H,EAAMqB,QAEV,EACF,CAEA,SAASuC,EAAkB5D,GACzBA,EAAMroK,IAAI6vJ,QAAO,WAAc,OAAO5vJ,KAAKgnJ,MAAM+kB,OAAQ,IAAG,WACtD,CAGN,GAAG,CAAE3pK,MAAM,EAAMkiJ,MAAM,GACzB,CAEA,SAAS8nB,EAAgBj4H,EAAOp1B,GAC9B,OAAOA,EAAKwkB,QAAO,SAAU4Q,EAAOrrC,GAAO,OAAOqrC,EAAMrrC,EAAM,GAAGqrC,EACnE,CAEA,SAAS44H,EAAkBtrK,EAAM2oD,EAAStnD,GAWxC,OAVIqe,EAAS1f,IAASA,EAAKA,OACzBqB,EAAUsnD,EACVA,EAAU3oD,EACVA,EAAOA,EAAKA,MAOP,CAAEA,KAAMA,EAAM2oD,QAASA,EAAStnD,QAASA,EAClD,CAEA,SAAS+L,EAASkxH,GACZjxH,GAAOixH,IAASjxH,IAQpBA,EAAMixH,EACNmoC,EAAWp5J,GACb,CA1eA28J,EAAqBt3H,MAAMnxC,IAAM,WAC/B,OAAOhD,KAAKD,IAAIinJ,MAAM+kB,OACxB,EAEAN,EAAqBt3H,MAAMzwC,IAAM,SAAU8F,GACrC,CAGN,EAEAghK,EAAMviK,UAAUojK,OAAS,SAAiBuB,EAAOC,EAAUC,GACvD,IAAI1C,EAASpqK,KAGXyb,EAAMsxJ,EAAiBH,EAAOC,EAAUC,GACtCrrK,EAAOga,EAAIha,KACX2oD,EAAU3uC,EAAI2uC,QAGhBu+G,GAFYltJ,EAAI3Y,QAEL,CAAErB,KAAMA,EAAM2oD,QAASA,IAClC9mB,EAAQtjC,KAAK6qK,WAAWppK,GACvB6hC,IAMLtjC,KAAKisK,aAAY,WACf3oI,EAAMp5B,SAAQ,SAAyBnI,GACrCA,EAAQqoD,EACV,GACF,IAEApqD,KAAKirK,aACFl+J,QACA7C,SAAQ,SAAUyqI,GAAO,OAAOA,EAAIg0B,EAAUyB,EAAOj2H,MAAQ,IAWlE,EAEAq2H,EAAMviK,UAAUmjK,SAAW,SAAmBwB,EAAOC,GACjD,IAAIzC,EAASpqK,KAGXyb,EAAMsxJ,EAAiBH,EAAOC,GAC5BprK,EAAOga,EAAIha,KACX2oD,EAAU3uC,EAAI2uC,QAEhBjiD,EAAS,CAAE1G,KAAMA,EAAM2oD,QAASA,GAChC9mB,EAAQtjC,KAAK2qK,SAASlpK,GAC1B,GAAK6hC,EAAL,CAOA,IACEtjC,KAAK4qK,mBACF79J,QACAs2B,QAAO,SAAUsxG,GAAO,OAAOA,EAAIlvD,MAAQ,IAC3Cv7E,SAAQ,SAAUyqI,GAAO,OAAOA,EAAIlvD,OAAOt9E,EAAQiiK,EAAOj2H,MAAQ,GACvE,CAAE,MAAOhxC,GACH,CAIN,CAEA,IAAI+U,EAASorB,EAAM57B,OAAS,EACxB2H,QAAQknB,IAAI+M,EAAMz3B,KAAI,SAAU9J,GAAW,OAAOA,EAAQqoD,EAAU,KACpE9mB,EAAM,GAAG8mB,GAEb,OAAO,IAAI/6C,SAAQ,SAAUC,EAASC,GACpC2I,EAAOrK,MAAK,SAAUC,GACpB,IACEs8J,EAAOQ,mBACJvnI,QAAO,SAAUsxG,GAAO,OAAOA,EAAIjvD,KAAO,IAC1Cx7E,SAAQ,SAAUyqI,GAAO,OAAOA,EAAIjvD,MAAMv9E,EAAQiiK,EAAOj2H,MAAQ,GACtE,CAAE,MAAOhxC,GACH,CAIN,CACAmM,EAAQxB,EACV,IAAG,SAAUxN,GACX,IACE8pK,EAAOQ,mBACJvnI,QAAO,SAAUsxG,GAAO,OAAOA,EAAIr0I,KAAO,IAC1C4J,SAAQ,SAAUyqI,GAAO,OAAOA,EAAIr0I,MAAM6H,EAAQiiK,EAAOj2H,MAAO7zC,EAAQ,GAC7E,CAAE,MAAO6C,GACH,CAIN,CACAoM,EAAOjP,EACT,GACF,GA5CA,CA6CF,EAEAkqK,EAAMviK,UAAUygK,UAAY,SAAoBx8J,EAAIpJ,GAClD,OAAO4oK,EAAiBx/J,EAAIlM,KAAKirK,aAAcnoK,EACjD,EAEA0nK,EAAMviK,UAAU4gK,gBAAkB,SAA0B38J,EAAIpJ,GAC9D,IAAIyxI,EAAqB,oBAAProI,EAAoB,CAAEu5E,OAAQv5E,GAAOA,EACvD,OAAOw/J,EAAiBn3B,EAAMv0I,KAAK4qK,mBAAoB9nK,EACzD,EAEA0nK,EAAMviK,UAAUpG,MAAQ,SAAgB6sD,EAAQuQ,EAAIn8D,GAChD,IAAIsnK,EAASpqK,KAKf,OAAOA,KAAKkrK,WAAWtb,QAAO,WAAc,OAAOlhG,EAAO07G,EAAOj2H,MAAOi2H,EAAOX,QAAU,GAAGxqG,EAAIn8D,EAClG,EAEA0nK,EAAMviK,UAAUg+H,aAAe,SAAuB9xF,GAClD,IAAIi2H,EAASpqK,KAEfA,KAAKisK,aAAY,WACf7B,EAAOrqK,IAAIinJ,MAAM+kB,QAAU53H,CAC7B,GACF,EAEAq2H,EAAMviK,UAAUqlK,eAAiB,SAAyBvuJ,EAAMiqJ,EAAWlmK,QACtD,IAAZA,IAAqBA,EAAU,CAAC,GAEnB,kBAATic,IAAqBA,EAAO,CAACA,IAOxC/e,KAAK+qK,SAASf,SAASjrJ,EAAMiqJ,GAC7BsC,EAActrK,KAAMA,KAAKm0C,MAAOp1B,EAAM/e,KAAK+qK,SAAS/nK,IAAI+b,GAAOjc,EAAQyqK,eAEvEhC,EAAavrK,KAAMA,KAAKm0C,MAC1B,EAEAq2H,EAAMviK,UAAUulK,iBAAmB,SAA2BzuJ,GAC1D,IAAIqrJ,EAASpqK,KAEK,kBAAT+e,IAAqBA,EAAO,CAACA,IAMxC/e,KAAK+qK,SAAST,WAAWvrJ,GACzB/e,KAAKisK,aAAY,WACf,IAAIE,EAAcC,EAAehC,EAAOj2H,MAAOp1B,EAAKhS,MAAM,GAAI,IAC9D+B,EAAIgkJ,OAAOqZ,EAAaptJ,EAAKA,EAAKrX,OAAS,GAC7C,IACAikK,EAAW3rK,KACb,EAEAwqK,EAAMviK,UAAUwlK,UAAY,SAAoB1uJ,GAO9C,MANoB,kBAATA,IAAqBA,EAAO,CAACA,IAMjC/e,KAAK+qK,SAASR,aAAaxrJ,EACpC,EAEAyrJ,EAAMviK,UAAUylK,UAAY,SAAoBC,GAC9C3tK,KAAK+qK,SAASz6J,OAAOq9J,GACrBhC,EAAW3rK,MAAM,EACnB,EAEAwqK,EAAMviK,UAAUgkK,YAAc,SAAsB//J,GAClD,IAAI0hK,EAAa5tK,KAAK0qK,YACtB1qK,KAAK0qK,aAAc,EACnBx+J,IACAlM,KAAK0qK,YAAckD,CACrB,EAEAvsK,OAAO8tD,iBAAkBq7G,EAAMviK,UAAWwjK,GAmT1C,IAAIoC,EAAWC,GAAmB,SAAUnZ,EAAWh4E,GACrD,IAAI7uE,EAAM,CAAC,EA0BX,OAtBAigK,EAAapxF,GAAQzyE,SAAQ,SAAUuR,GACrC,IAAI3S,EAAM2S,EAAI3S,IACV9G,EAAMyZ,EAAIzZ,IAEd8L,EAAIhF,GAAO,WACT,IAAIqrC,EAAQn0C,KAAKqoK,OAAOl0H,MACpBs1H,EAAUzpK,KAAKqoK,OAAOoB,QAC1B,GAAI9U,EAAW,CACb,IAAIhvJ,EAASqoK,EAAqBhuK,KAAKqoK,OAAQ,WAAY1T,GAC3D,IAAKhvJ,EACH,OAEFwuC,EAAQxuC,EAAOpB,QAAQ4vC,MACvBs1H,EAAU9jK,EAAOpB,QAAQklK,OAC3B,CACA,MAAsB,oBAARznK,EACVA,EAAI4C,KAAK5E,KAAMm0C,EAAOs1H,GACtBt1H,EAAMnyC,EACZ,EAEA8L,EAAIhF,GAAKmlK,MAAO,CAClB,IACOngK,CACT,IAQIogK,EAAeJ,GAAmB,SAAUnZ,EAAW6U,GACzD,IAAI17J,EAAM,CAAC,EA0BX,OAtBAigK,EAAavE,GAAWt/J,SAAQ,SAAUuR,GACxC,IAAI3S,EAAM2S,EAAI3S,IACV9G,EAAMyZ,EAAIzZ,IAEd8L,EAAIhF,GAAO,WACT,IAAI4sB,EAAO,GAAI7M,EAAMphB,UAAUC,OAC/B,MAAQmhB,IAAQ6M,EAAM7M,GAAQphB,UAAWohB,GAGzC,IAAIwiJ,EAASrrK,KAAKqoK,OAAOgD,OACzB,GAAI1W,EAAW,CACb,IAAIhvJ,EAASqoK,EAAqBhuK,KAAKqoK,OAAQ,eAAgB1T,GAC/D,IAAKhvJ,EACH,OAEF0lK,EAAS1lK,EAAOpB,QAAQ8mK,MAC1B,CACA,MAAsB,oBAARrpK,EACVA,EAAIyH,MAAMzJ,KAAM,CAACqrK,GAAQ7lK,OAAOkwB,IAChC21I,EAAO5hK,MAAMzJ,KAAKqoK,OAAQ,CAACrmK,GAAKwD,OAAOkwB,GAC7C,CACF,IACO5nB,CACT,IAQIqgK,EAAaL,GAAmB,SAAUnZ,EAAW8U,GACvD,IAAI37J,EAAM,CAAC,EAuBX,OAnBAigK,EAAatE,GAASv/J,SAAQ,SAAUuR,GACtC,IAAI3S,EAAM2S,EAAI3S,IACV9G,EAAMyZ,EAAIzZ,IAGdA,EAAM2yJ,EAAY3yJ,EAClB8L,EAAIhF,GAAO,WACT,IAAI6rJ,GAAcqZ,EAAqBhuK,KAAKqoK,OAAQ,aAAc1T,GAOlE,OAAO30J,KAAKqoK,OAAOoB,QAAQznK,EAC7B,EAEA8L,EAAIhF,GAAKmlK,MAAO,CAClB,IACOngK,CACT,IAQIsgK,EAAaN,GAAmB,SAAUnZ,EAAW3pH,GACvD,IAAIl9B,EAAM,CAAC,EA0BX,OAtBAigK,EAAa/iI,GAAS9gC,SAAQ,SAAUuR,GACtC,IAAI3S,EAAM2S,EAAI3S,IACV9G,EAAMyZ,EAAIzZ,IAEd8L,EAAIhF,GAAO,WACT,IAAI4sB,EAAO,GAAI7M,EAAMphB,UAAUC,OAC/B,MAAQmhB,IAAQ6M,EAAM7M,GAAQphB,UAAWohB,GAGzC,IAAIuiJ,EAAWprK,KAAKqoK,OAAO+C,SAC3B,GAAIzW,EAAW,CACb,IAAIhvJ,EAASqoK,EAAqBhuK,KAAKqoK,OAAQ,aAAc1T,GAC7D,IAAKhvJ,EACH,OAEFylK,EAAWzlK,EAAOpB,QAAQ6mK,QAC5B,CACA,MAAsB,oBAARppK,EACVA,EAAIyH,MAAMzJ,KAAM,CAACorK,GAAU5lK,OAAOkwB,IAClC01I,EAAS3hK,MAAMzJ,KAAKqoK,OAAQ,CAACrmK,GAAKwD,OAAOkwB,GAC/C,CACF,IACO5nB,CACT,IAOIugK,EAA0B,SAAU1Z,GAAa,MAAO,CAC1DkZ,SAAUA,EAASliK,KAAK,KAAMgpJ,GAC9BwZ,WAAYA,EAAWxiK,KAAK,KAAMgpJ,GAClCuZ,aAAcA,EAAaviK,KAAK,KAAMgpJ,GACtCyZ,WAAYA,EAAWziK,KAAK,KAAMgpJ,GAChC,EASJ,SAASoZ,EAAcliK,GACrB,OAAKyiK,EAAWziK,GAGTvK,MAAMsS,QAAQ/H,GACjBA,EAAIA,KAAI,SAAU/C,GAAO,MAAO,CAAGA,IAAKA,EAAK9G,IAAK8G,EAAQ,IAC1DzH,OAAOsQ,KAAK9F,GAAKA,KAAI,SAAU/C,GAAO,MAAO,CAAGA,IAAKA,EAAK9G,IAAK6J,EAAI/C,GAAS,IAJvE,EAKX,CAOA,SAASwlK,EAAYziK,GACnB,OAAOvK,MAAMsS,QAAQ/H,IAAQsV,EAAStV,EACxC,CAOA,SAASiiK,EAAoB5hK,GAC3B,OAAO,SAAUyoJ,EAAW9oJ,GAO1B,MANyB,kBAAd8oJ,GACT9oJ,EAAM8oJ,EACNA,EAAY,IACwC,MAA3CA,EAAUhxI,OAAOgxI,EAAUjtJ,OAAS,KAC7CitJ,GAAa,KAERzoJ,EAAGyoJ,EAAW9oJ,EACvB,CACF,CASA,SAASmiK,EAAsB5F,EAAOmG,EAAQ5Z,GAC5C,IAAIhvJ,EAASyiK,EAAM4C,qBAAqBrW,GAIxC,OAAOhvJ,CACT,CAIA,SAAS6oK,EAAc/yJ,QACR,IAARA,IAAiBA,EAAM,CAAC,GAC7B,IAAIgzJ,EAAYhzJ,EAAIgzJ,eAA8B,IAAdA,IAAuBA,GAAY,GACvE,IAAIprI,EAAS5nB,EAAI4nB,YAAwB,IAAXA,IAAoBA,EAAS,SAAUslI,EAAU+F,EAAaC,GAAc,OAAO,CAAM,GACvH,IAAIC,EAAcnzJ,EAAImzJ,iBAAkC,IAAhBA,IAAyBA,EAAc,SAAUz6H,GAAS,OAAOA,CAAO,GAChH,IAAI06H,EAAsBpzJ,EAAIozJ,yBAAkD,IAAxBA,IAAiCA,EAAsB,SAAUC,GAAO,OAAOA,CAAK,GAC5I,IAAIC,EAAetzJ,EAAIszJ,kBAAoC,IAAjBA,IAA0BA,EAAe,SAAU5mK,EAAQgsC,GAAS,OAAO,CAAM,GAC3H,IAAI66H,EAAoBvzJ,EAAIuzJ,uBAA8C,IAAtBA,IAA+BA,EAAoB,SAAUC,GAAO,OAAOA,CAAK,GACpI,IAAIC,EAAezzJ,EAAIyzJ,kBAAoC,IAAjBA,IAA0BA,GAAe,GACnF,IAAIC,EAAa1zJ,EAAI0zJ,gBAAgC,IAAfA,IAAwBA,GAAa,GAC3E,IAAIC,EAAS3zJ,EAAI2zJ,OAEjB,YAFyC,IAAXA,IAAoBA,EAAS/gK,SAEpD,SAAU+5J,GACf,IAAIiH,EAAY5zG,EAAS2sG,EAAMj0H,OAET,qBAAXi7H,IAIPF,GACF9G,EAAMM,WAAU,SAAUC,EAAUx0H,GAClC,IAAI6qC,EAAYvjB,EAAStnB,GAEzB,GAAI9Q,EAAOslI,EAAU0G,EAAWrwF,GAAY,CAC1C,IAAIswF,EAAgBC,IAChBC,EAAoBX,EAAoBlG,GACxCp6J,EAAU,YAAeo6J,EAAa,KAAI2G,EAE9CG,EAAaL,EAAQ7gK,EAASkgK,GAC9BW,EAAOx/I,IAAI,gBAAiB,oCAAqCg/I,EAAYS,IAC7ED,EAAOx/I,IAAI,cAAe,oCAAqC4/I,GAC/DJ,EAAOx/I,IAAI,gBAAiB,oCAAqCg/I,EAAY5vF,IAC7E0wF,EAAWN,EACb,CAEAC,EAAYrwF,CACd,IAGEmwF,GACF/G,EAAMS,iBAAgB,SAAU1gK,EAAQgsC,GACtC,GAAI46H,EAAa5mK,EAAQgsC,GAAQ,CAC/B,IAAIm7H,EAAgBC,IAChBI,EAAkBX,EAAkB7mK,GACpCoG,EAAU,UAAapG,EAAW,KAAImnK,EAE1CG,EAAaL,EAAQ7gK,EAASkgK,GAC9BW,EAAOx/I,IAAI,YAAa,oCAAqC+/I,GAC7DD,EAAWN,EACb,CACF,IAEJ,CACF,CAEA,SAASK,EAAcL,EAAQ7gK,EAASkgK,GACtC,IAAIgB,EAAehB,EACfW,EAAOQ,eACPR,EAAO71I,MAGX,IACEk2I,EAAa7qK,KAAKwqK,EAAQ7gK,EAC5B,CAAE,MAAOpL,GACPisK,EAAOx/I,IAAIrhB,EACb,CACF,CAEA,SAASmhK,EAAYN,GACnB,IACEA,EAAOS,UACT,CAAE,MAAO1sK,GACPisK,EAAOx/I,IAAI,gBACb,CACF,CAEA,SAAS2/I,IACP,IAAI13I,EAAO,IAAIvuB,KACf,MAAQ,MAASwmK,EAAIj4I,EAAKk4I,WAAY,GAAM,IAAOD,EAAIj4I,EAAKm4I,aAAc,GAAM,IAAOF,EAAIj4I,EAAKo4I,aAAc,GAAM,IAAOH,EAAIj4I,EAAKq4I,kBAAmB,EACzJ,CAEA,SAAS/xC,EAAQtpH,EAAKgwF,GACpB,OAAO,IAAKvjG,MAAMujG,EAAQ,GAAI3hF,KAAKrO,EACrC,CAEA,SAASi7J,EAAKjqH,EAAK7rB,GACjB,OAAOmkG,EAAO,IAAKnkG,EAAY6rB,EAAIt8C,WAAW7B,QAAUm+C,CAC1D,CAEA,IAAIrpC,EAAQ,CACVguJ,MAAOA,EACP37J,QAASA,EACTG,QAAS,QACT6+J,SAAUA,EACVK,aAAcA,EACdC,WAAYA,EACZC,WAAYA,EACZC,wBAAyBA,EACzBG,aAAcA,GAGhB,M","sources":["webpack://vue-editor/./node_modules/vue-json-editor/vue-json-editor.vue?be89","webpack://vue-editor/node_modules/vue-json-editor/vue-json-editor.vue","webpack://vue-editor/./node_modules/vue-json-editor/vue-json-editor.vue?dadb","webpack://vue-editor/./node_modules/vue-json-editor/vue-json-editor.vue","webpack://vue-editor/./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js","webpack://vue-editor/./node_modules/clipboard/dist/clipboard.min.js","webpack://vue-editor/./node_modules/svg-symbol-sprite-loader/src/browser/icon-sprite-loader.js","webpack://vue-editor/./node_modules/vue-clipboard2/vue-clipboard.js","webpack://vue-editor/./node_modules/vue-json-editor/assets/jsoneditor.js","webpack://vue-editor/./node_modules/vue-router/dist/vue-router.esm.js","webpack://vue-editor/./node_modules/vue/dist/vue.runtime.esm.js","webpack://vue-editor/./node_modules/vuex/dist/vuex.esm.js"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"jsoneditor-vue\"}),(_vm.showBtns!==false)?_c('div',{staticClass:\"jsoneditor-btns\"},[_c('button',{staticClass:\"json-save-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.error},on:{\"click\":function($event){return _vm.onSave()}}},[_vm._v(_vm._s(_vm.locale[_vm.lang].save))])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./vue-json-editor.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./vue-json-editor.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./vue-json-editor.vue?vue&type=template&id=9b72cb1a&scoped=true\"\nimport script from \"./vue-json-editor.vue?vue&type=script&lang=js\"\nexport * from \"./vue-json-editor.vue?vue&type=script&lang=js\"\nimport style0 from \"./vue-json-editor.vue?vue&type=style&index=0&id=9b72cb1a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9b72cb1a\",\n null\n \n)\n\nexport default component.exports","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT © Zeno Rocha\n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){\"use strict\";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c(\"cut\"),t};function o(t,e){var n,o,t=(n=t,o=\"rtl\"===document.documentElement.getAttribute(\"dir\"),(t=document.createElement(\"textarea\")).style.fontSize=\"12pt\",t.style.border=\"0\",t.style.padding=\"0\",t.style.margin=\"0\",t.style.position=\"absolute\",t.style[o?\"right\":\"left\"]=\"-9999px\",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top=\"\".concat(o,\"px\"),t.setAttribute(\"readonly\",\"\"),t.value=n,t);return e.container.appendChild(t),e=r()(t),c(\"copy\"),t.remove(),e}var f=function(t){var e=1 {\n if (!res.ok) throw new Error(res.statusText)\n return res\n })\n .then((res) => res.text())\n .then((svgSprite) => {\n document.body.insertAdjacentHTML('afterbegin', svgSprite)\n // Add version and data to localstorage for subsequent fetches 🎉\n if (localStorage && localStorage.setItem) {\n localStorage.setItem('ICON_SPRITE_ID', spriteId)\n localStorage.setItem('SVG_SPRITE_DATA', svgSprite)\n }\n })\n // eslint-disable-next-line\n .catch((err) => console.warn(`SVG sprite fetch failure: ${err.message}`))\n }\n}\n\nexport default iconSpriteLoader\n","var Clipboard = require('clipboard/dist/clipboard.min.js') // FIXME: workaround for browserify\n\nvar VueClipboardConfig = {\n autoSetContainer: false,\n appendToBody: true // This fixes IE, see #50\n}\n\nvar VueClipboard = {\n install: function (Vue) {\n var globalPrototype = Vue.version.slice(0, 2) === '3.' ? Vue.config.globalProperties : Vue.prototype\n globalPrototype.$clipboardConfig = VueClipboardConfig\n globalPrototype.$copyText = function (text, container) {\n return new Promise(function (resolve, reject) {\n var fakeElement = document.createElement('button')\n var clipboard = new Clipboard(fakeElement, {\n text: function () { return text },\n action: function () { return 'copy' },\n container: typeof container === 'object' ? container : document.body\n })\n clipboard.on('success', function (e) {\n clipboard.destroy()\n resolve(e)\n })\n clipboard.on('error', function (e) {\n clipboard.destroy()\n reject(e)\n })\n if (VueClipboardConfig.appendToBody) document.body.appendChild(fakeElement)\n fakeElement.click()\n if (VueClipboardConfig.appendToBody) document.body.removeChild(fakeElement)\n })\n }\n\n Vue.directive('clipboard', {\n bind: function (el, binding, vnode) {\n if (binding.arg === 'success') {\n el._vClipboard_success = binding.value\n } else if (binding.arg === 'error') {\n el._vClipboard_error = binding.value\n } else {\n var clipboard = new Clipboard(el, {\n text: function () { return binding.value },\n action: function () { return binding.arg === 'cut' ? 'cut' : 'copy' },\n container: VueClipboardConfig.autoSetContainer ? el : undefined\n })\n clipboard.on('success', function (e) {\n var callback = el._vClipboard_success\n callback && callback(e)\n })\n clipboard.on('error', function (e) {\n var callback = el._vClipboard_error\n callback && callback(e)\n })\n el._vClipboard = clipboard\n }\n },\n update: function (el, binding) {\n if (binding.arg === 'success') {\n el._vClipboard_success = binding.value\n } else if (binding.arg === 'error') {\n el._vClipboard_error = binding.value\n } else {\n el._vClipboard.text = function () { return binding.value }\n el._vClipboard.action = function () { return binding.arg === 'cut' ? 'cut' : 'copy' }\n }\n },\n unbind: function (el, binding) {\n // FIXME: investigate why $element._vClipboard was missing\n if (!el._vClipboard) return\n if (binding.arg === 'success') {\n delete el._vClipboard_success\n } else if (binding.arg === 'error') {\n delete el._vClipboard_error\n } else {\n el._vClipboard.destroy()\n delete el._vClipboard\n }\n }\n })\n },\n config: VueClipboardConfig\n}\n\nif (typeof exports === 'object') {\n module.exports = VueClipboard\n} else if (typeof define === 'function' && define.amd) {\n define([], function () {\n return VueClipboard\n })\n}\n","/*!\r\n * jsoneditor.js\r\n *\r\n * @brief\r\n * JSONEditor is a web-based tool to view, edit, format, and validate JSON.\r\n * It has various modes such as a tree editor, a code editor, and a plain text\r\n * editor.\r\n *\r\n * Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+\r\n *\r\n * @license\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a copy\r\n * of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n *\r\n * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org\r\n *\r\n * @author Jos de Jong, \r\n * @version 5.5.11\r\n * @date 2017-01-06\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine([], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"JSONEditor\"] = factory();\r\n\telse\r\n\t\troot[\"JSONEditor\"] = factory();\r\n})(this, function() {\r\nreturn /******/ (function(modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(installedModules[moduleId])\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\texports: {},\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false\r\n/******/ \t\t};\r\n\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n\r\n\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = \"\";\r\n\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(0);\r\n/******/ })\r\n/************************************************************************/\r\n/******/ ([\r\n/* 0 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar Ajv;\r\n\ttry {\r\n\t Ajv = __webpack_require__(1);\r\n\t}\r\n\tcatch (err) {\r\n\t // no problem... when we need Ajv we will throw a neat exception\r\n\t}\r\n\r\n\tvar treemode = __webpack_require__(51);\r\n\tvar textmode = __webpack_require__(62);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * 'form', 'text', and 'code'.\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {function} onError Callback method, triggered\r\n\t * when an error occurs\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {String} name Field name for the root node.\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 4 by default.\r\n\t * Only applicable for\r\n\t * modes 'text' and 'code'\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {boolean} sortObjectKeys If true, object keys are\r\n\t * sorted before display.\r\n\t * false by default.\r\n\t * @param {Object | undefined} json JSON object\r\n\t */\r\n\tfunction JSONEditor (container, options, json) {\r\n\t if (!(this instanceof JSONEditor)) {\r\n\t throw new Error('JSONEditor constructor called without \"new\".');\r\n\t }\r\n\r\n\t // check for unsupported browser (IE8 and older)\r\n\t var ieVersion = util.getInternetExplorerVersion();\r\n\t if (ieVersion != -1 && ieVersion < 9) {\r\n\t throw new Error('Unsupported browser, IE9 or newer required. ' +\r\n\t 'Please install the newest version of your browser.');\r\n\t }\r\n\r\n\t if (options) {\r\n\t // check for deprecated options\r\n\t if (options.error) {\r\n\t console.warn('Option \"error\" has been renamed to \"onError\"');\r\n\t options.onError = options.error;\r\n\t delete options.error;\r\n\t }\r\n\t if (options.change) {\r\n\t console.warn('Option \"change\" has been renamed to \"onChange\"');\r\n\t options.onChange = options.change;\r\n\t delete options.change;\r\n\t }\r\n\t if (options.editable) {\r\n\t console.warn('Option \"editable\" has been renamed to \"onEditable\"');\r\n\t options.onEditable = options.editable;\r\n\t delete options.editable;\r\n\t }\r\n\r\n\t // validate options\r\n\t if (options) {\r\n\t var VALID_OPTIONS = [\r\n\t 'ace', 'theme',\r\n\t 'ajv', 'schema',\r\n\t 'onChange', 'onEditable', 'onError', 'onModeChange',\r\n\t 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'sortObjectKeys'\r\n\t ];\r\n\r\n\t Object.keys(options).forEach(function (option) {\r\n\t if (VALID_OPTIONS.indexOf(option) === -1) {\r\n\t console.warn('Unknown option \"' + option + '\". This option will be ignored');\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (arguments.length) {\r\n\t this._create(container, options, json);\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Configuration for all registered modes. Example:\r\n\t * {\r\n\t * tree: {\r\n\t * mixin: TreeEditor,\r\n\t * data: 'json'\r\n\t * },\r\n\t * text: {\r\n\t * mixin: TextEditor,\r\n\t * data: 'text'\r\n\t * }\r\n\t * }\r\n\t *\r\n\t * @type { Object. }\r\n\t */\r\n\tJSONEditor.modes = {};\r\n\r\n\t// debounce interval for JSON schema vaidation in milliseconds\r\n\tJSONEditor.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Create the JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @param {Object | undefined} json JSON object\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._create = function (container, options, json) {\r\n\t this.container = container;\r\n\t this.options = options || {};\r\n\t this.json = json || {};\r\n\r\n\t var mode = this.options.mode || 'tree';\r\n\t this.setMode(mode);\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\tJSONEditor.prototype.destroy = function () {};\r\n\r\n\t/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t */\r\n\tJSONEditor.prototype.set = function (json) {\r\n\t this.json = json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get JSON from the editor\r\n\t * @returns {Object} json\r\n\t */\r\n\tJSONEditor.prototype.get = function () {\r\n\t return this.json;\r\n\t};\r\n\r\n\t/**\r\n\t * Set string containing JSON for the editor\r\n\t * @param {String | undefined} jsonText\r\n\t */\r\n\tJSONEditor.prototype.setText = function (jsonText) {\r\n\t this.json = util.parse(jsonText);\r\n\t};\r\n\r\n\t/**\r\n\t * Get stringified JSON contents from the editor\r\n\t * @returns {String} jsonText\r\n\t */\r\n\tJSONEditor.prototype.getText = function () {\r\n\t return JSON.stringify(this.json);\r\n\t};\r\n\r\n\t/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.setName = function (name) {\r\n\t if (!this.options) {\r\n\t this.options = {};\r\n\t }\r\n\t this.options.name = name;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.getName = function () {\r\n\t return this.options && this.options.name;\r\n\t};\r\n\r\n\t/**\r\n\t * Change the mode of the editor.\r\n\t * JSONEditor will be extended with all methods needed for the chosen mode.\r\n\t * @param {String} mode Available modes: 'tree' (default), 'view', 'form',\r\n\t * 'text', and 'code'.\r\n\t */\r\n\tJSONEditor.prototype.setMode = function (mode) {\r\n\t var container = this.container;\r\n\t var options = util.extend({}, this.options);\r\n\t var oldMode = options.mode;\r\n\t var data;\r\n\t var name;\r\n\r\n\t options.mode = mode;\r\n\t var config = JSONEditor.modes[mode];\r\n\t if (config) {\r\n\t try {\r\n\t var asText = (config.data == 'text');\r\n\t name = this.getName();\r\n\t data = this[asText ? 'getText' : 'get'](); // get text or json\r\n\r\n\t this.destroy();\r\n\t util.clear(this);\r\n\t util.extend(this, config.mixin);\r\n\t this.create(container, options);\r\n\r\n\t this.setName(name);\r\n\t this[asText ? 'setText' : 'set'](data); // set text or json\r\n\r\n\t if (typeof config.load === 'function') {\r\n\t try {\r\n\t config.load.call(this);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\r\n\t if (typeof options.onModeChange === 'function' && mode !== oldMode) {\r\n\t try {\r\n\t options.onModeChange(mode, oldMode);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this._onError(err);\r\n\t }\r\n\t }\r\n\t else {\r\n\t throw new Error('Unknown mode \"' + options.mode + '\"');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current mode\r\n\t * @return {string}\r\n\t */\r\n\tJSONEditor.prototype.getMode = function () {\r\n\t return this.options.mode;\r\n\t};\r\n\r\n\t/**\r\n\t * Throw an error. If an error callback is configured in options.error, this\r\n\t * callback will be invoked. Else, a regular error is thrown.\r\n\t * @param {Error} err\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._onError = function(err) {\r\n\t if (this.options && typeof this.options.onError === 'function') {\r\n\t this.options.onError(err);\r\n\t }\r\n\t else {\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set a JSON schema for validation of the JSON object.\r\n\t * To remove the schema, call JSONEditor.setSchema(null)\r\n\t * @param {Object | null} schema\r\n\t */\r\n\tJSONEditor.prototype.setSchema = function (schema) {\r\n\t // compile a JSON schema validator if a JSON schema is provided\r\n\t if (schema) {\r\n\t var ajv;\r\n\t try {\r\n\t // grab ajv from options if provided, else create a new instance\r\n\t ajv = this.options.ajv || Ajv({ allErrors: true, verbose: true });\r\n\r\n\t }\r\n\t catch (err) {\r\n\t console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');\r\n\t }\r\n\r\n\t if (ajv) {\r\n\t this.validateSchema = ajv.compile(schema);\r\n\r\n\t // add schema to the options, so that when switching to an other mode,\r\n\t // the set schema is not lost\r\n\t this.options.schema = schema;\r\n\r\n\t // validate now\r\n\t this.validate();\r\n\t }\r\n\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t else {\r\n\t // remove current schema\r\n\t this.validateSchema = null;\r\n\t this.options.schema = null;\r\n\t this.validate(); // to clear current error messages\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\tJSONEditor.prototype.validate = function () {\r\n\t // must be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Refresh the rendered contents\r\n\t */\r\n\tJSONEditor.prototype.refresh = function () {\r\n\t // can be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Register a plugin with one ore multiple modes for the JSON Editor.\r\n\t *\r\n\t * A mode is described as an object with properties:\r\n\t *\r\n\t * - `mode: String` The name of the mode.\r\n\t * - `mixin: Object` An object containing the mixin functions which\r\n\t * will be added to the JSONEditor. Must contain functions\r\n\t * create, get, getText, set, and setText. May have\r\n\t * additional functions.\r\n\t * When the JSONEditor switches to a mixin, all mixin\r\n\t * functions are added to the JSONEditor, and then\r\n\t * the function `create(container, options)` is executed.\r\n\t * - `data: 'text' | 'json'` The type of data that will be used to load the mixin.\r\n\t * - `[load: function]` An optional function called after the mixin\r\n\t * has been loaded.\r\n\t *\r\n\t * @param {Object | Array} mode A mode object or an array with multiple mode objects.\r\n\t */\r\n\tJSONEditor.registerMode = function (mode) {\r\n\t var i, prop;\r\n\r\n\t if (util.isArray(mode)) {\r\n\t // multiple modes\r\n\t for (i = 0; i < mode.length; i++) {\r\n\t JSONEditor.registerMode(mode[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // validate the new mode\r\n\t if (!('mode' in mode)) throw new Error('Property \"mode\" missing');\r\n\t if (!('mixin' in mode)) throw new Error('Property \"mixin\" missing');\r\n\t if (!('data' in mode)) throw new Error('Property \"data\" missing');\r\n\t var name = mode.mode;\r\n\t if (name in JSONEditor.modes) {\r\n\t throw new Error('Mode \"' + name + '\" already registered');\r\n\t }\r\n\r\n\t // validate the mixin\r\n\t if (typeof mode.mixin.create !== 'function') {\r\n\t throw new Error('Required function \"create\" missing on mixin');\r\n\t }\r\n\t var reserved = ['setMode', 'registerMode', 'modes'];\r\n\t for (i = 0; i < reserved.length; i++) {\r\n\t prop = reserved[i];\r\n\t if (prop in mode.mixin) {\r\n\t throw new Error('Reserved property \"' + prop + '\" not allowed in mixin');\r\n\t }\r\n\t }\r\n\r\n\t JSONEditor.modes[name] = mode;\r\n\t }\r\n\t};\r\n\r\n\t// register tree and text modes\r\n\tJSONEditor.registerMode(treemode);\r\n\tJSONEditor.registerMode(textmode);\r\n\r\n\tmodule.exports = JSONEditor;\r\n\r\n\r\n/***/ },\r\n/* 1 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar compileSchema = __webpack_require__(2)\r\n\t , resolve = __webpack_require__(3)\r\n\t , Cache = __webpack_require__(21)\r\n\t , SchemaObject = __webpack_require__(16)\r\n\t , stableStringify = __webpack_require__(12)\r\n\t , formats = __webpack_require__(22)\r\n\t , rules = __webpack_require__(23)\r\n\t , v5 = __webpack_require__(43)\r\n\t , util = __webpack_require__(11)\r\n\t , async = __webpack_require__(17)\r\n\t , co = __webpack_require__(19);\r\n\r\n\tmodule.exports = Ajv;\r\n\r\n\tAjv.prototype.compileAsync = async.compile;\r\n\tAjv.prototype.addKeyword = __webpack_require__(49);\r\n\tAjv.ValidationError = __webpack_require__(20);\r\n\r\n\tvar META_SCHEMA_ID = 'http://json-schema.org/draft-04/schema';\r\n\tvar SCHEMA_URI_FORMAT = /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i;\r\n\tfunction SCHEMA_URI_FORMAT_FUNC(str) {\r\n\t return SCHEMA_URI_FORMAT.test(str);\r\n\t}\r\n\r\n\tvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ];\r\n\r\n\t/**\r\n\t * Creates validator instance.\r\n\t * Usage: `Ajv(opts)`\r\n\t * @param {Object} opts optional options\r\n\t * @return {Object} ajv instance\r\n\t */\r\n\tfunction Ajv(opts) {\r\n\t if (!(this instanceof Ajv)) return new Ajv(opts);\r\n\t var self = this;\r\n\r\n\t opts = this._opts = util.copy(opts) || {};\r\n\t this._schemas = {};\r\n\t this._refs = {};\r\n\t this._formats = formats(opts.format);\r\n\t this._cache = opts.cache || new Cache;\r\n\t this._loadingSchemas = {};\r\n\t this.RULES = rules();\r\n\r\n\t // this is done on purpose, so that methods are bound to the instance\r\n\t // (without using bind) so that they can be used without the instance\r\n\t this.validate = validate;\r\n\t this.compile = compile;\r\n\t this.addSchema = addSchema;\r\n\t this.addMetaSchema = addMetaSchema;\r\n\t this.validateSchema = validateSchema;\r\n\t this.getSchema = getSchema;\r\n\t this.removeSchema = removeSchema;\r\n\t this.addFormat = addFormat;\r\n\t this.errorsText = errorsText;\r\n\r\n\t this._addSchema = _addSchema;\r\n\t this._compile = _compile;\r\n\r\n\t opts.loopRequired = opts.loopRequired || Infinity;\r\n\t if (opts.async || opts.transpile) async.setup(opts);\r\n\t if (opts.beautify === true) opts.beautify = { indent_size: 2 };\r\n\t if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\r\n\t this._metaOpts = getMetaSchemaOptions();\r\n\r\n\t addInitialSchemas();\r\n\t if (opts.formats) addInitialFormats();\r\n\t if (opts.v5) v5.enable(this);\r\n\t if (typeof opts.meta == 'object') addMetaSchema(opts.meta);\r\n\r\n\r\n\t /**\r\n\t * Validate data using schema\r\n\t * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize.\r\n\t * @param {String|Object} schemaKeyRef key, ref or schema object\r\n\t * @param {Any} data to be validated\r\n\t * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\r\n\t */\r\n\t function validate(schemaKeyRef, data) {\r\n\t var v;\r\n\t if (typeof schemaKeyRef == 'string') {\r\n\t v = getSchema(schemaKeyRef);\r\n\t if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\r\n\t } else {\r\n\t var schemaObj = _addSchema(schemaKeyRef);\r\n\t v = schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\t var valid = v(data);\r\n\t if (v.async) return self._opts.async == '*' ? co(valid) : valid;\r\n\t self.errors = v.errors;\r\n\t return valid;\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Create validating function for passed schema.\r\n\t * @param {Object} schema schema object\r\n\t * @return {Function} validating function\r\n\t */\r\n\t function compile(schema) {\r\n\t var schemaObj = _addSchema(schema);\r\n\t return schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Adds schema to the instance.\r\n\t * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\r\n\t * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\r\n\t * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\r\n\t * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\r\n\t */\r\n\t function addSchema(schema, key, _skipValidation, _meta) {\r\n\t if (Array.isArray(schema)){\r\n\t for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used.\r\n\t * @param {Object} options optional options with properties `separator` and `dataVar`.\r\n\t * @return {String} human readable string with all errors descriptions\r\n\t */\r\n\t function errorsText(errors, options) {\r\n\t errors = errors || self.errors;\r\n\t if (!errors) return 'No errors';\r\n\t options = options || {};\r\n\t var separator = options.separator === undefined ? ', ' : options.separator;\r\n\t var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\r\n\r\n\t var text = '';\r\n\t for (var i=0; i', '\"', '`', ' ', '\\r', '\\n', '\\t'],\r\n\r\n\t // RFC 2396: characters not allowed for various reasons.\r\n\t unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\r\n\r\n\t // Allowed by RFCs, but cause of XSS attacks. Always escape these.\r\n\t autoEscape = ['\\''].concat(unwise),\r\n\t // Characters that are never ever allowed in a hostname.\r\n\t // Note that any invalid chars are also handled, but these\r\n\t // are the ones that are *expected* to be seen, so we fast-path\r\n\t // them.\r\n\t nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\r\n\t hostEndingChars = ['/', '?', '#'],\r\n\t hostnameMaxLen = 255,\r\n\t hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\r\n\t hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\r\n\t // protocols that can allow \"unsafe\" and \"unwise\" chars.\r\n\t unsafeProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that never have a hostname.\r\n\t hostlessProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that always contain a // bit.\r\n\t slashedProtocol = {\r\n\t 'http': true,\r\n\t 'https': true,\r\n\t 'ftp': true,\r\n\t 'gopher': true,\r\n\t 'file': true,\r\n\t 'http:': true,\r\n\t 'https:': true,\r\n\t 'ftp:': true,\r\n\t 'gopher:': true,\r\n\t 'file:': true\r\n\t },\r\n\t querystring = __webpack_require__(7);\r\n\r\n\tfunction urlParse(url, parseQueryString, slashesDenoteHost) {\r\n\t if (url && isObject(url) && url instanceof Url) return url;\r\n\r\n\t var u = new Url;\r\n\t u.parse(url, parseQueryString, slashesDenoteHost);\r\n\t return u;\r\n\t}\r\n\r\n\tUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\r\n\t if (!isString(url)) {\r\n\t throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\r\n\t }\r\n\r\n\t var rest = url;\r\n\r\n\t // trim before proceeding.\r\n\t // This is to support parse stuff like \" http://foo.com \\n\"\r\n\t rest = rest.trim();\r\n\r\n\t var proto = protocolPattern.exec(rest);\r\n\t if (proto) {\r\n\t proto = proto[0];\r\n\t var lowerProto = proto.toLowerCase();\r\n\t this.protocol = lowerProto;\r\n\t rest = rest.substr(proto.length);\r\n\t }\r\n\r\n\t // figure out if it's got a host\r\n\t // user@server is *always* interpreted as a hostname, and url\r\n\t // resolution will treat //foo/bar as host=foo,path=bar because that's\r\n\t // how the browser resolves relative URLs.\r\n\t if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\r\n\t var slashes = rest.substr(0, 2) === '//';\r\n\t if (slashes && !(proto && hostlessProtocol[proto])) {\r\n\t rest = rest.substr(2);\r\n\t this.slashes = true;\r\n\t }\r\n\t }\r\n\r\n\t if (!hostlessProtocol[proto] &&\r\n\t (slashes || (proto && !slashedProtocol[proto]))) {\r\n\r\n\t // there's a hostname.\r\n\t // the first instance of /, ?, ;, or # ends the host.\r\n\t //\r\n\t // If there is an @ in the hostname, then non-host chars *are* allowed\r\n\t // to the left of the last @ sign, unless some host-ending character\r\n\t // comes *before* the @-sign.\r\n\t // URLs are obnoxious.\r\n\t //\r\n\t // ex:\r\n\t // http://a@b@c/ => user:a@b host:c\r\n\t // http://a@b?@c => user:a host:c path:/?@c\r\n\r\n\t // v0.12 TODO(isaacs): This is not quite how Chrome does things.\r\n\t // Review our test case against browsers more comprehensively.\r\n\r\n\t // find the first instance of any hostEndingChars\r\n\t var hostEnd = -1;\r\n\t for (var i = 0; i < hostEndingChars.length; i++) {\r\n\t var hec = rest.indexOf(hostEndingChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\r\n\t // at this point, either we have an explicit point where the\r\n\t // auth portion cannot go past, or the last @ char is the decider.\r\n\t var auth, atSign;\r\n\t if (hostEnd === -1) {\r\n\t // atSign can be anywhere.\r\n\t atSign = rest.lastIndexOf('@');\r\n\t } else {\r\n\t // atSign must be in auth portion.\r\n\t // http://a@b/c@d => host:b auth:a path:/c@d\r\n\t atSign = rest.lastIndexOf('@', hostEnd);\r\n\t }\r\n\r\n\t // Now we have a portion which is definitely the auth.\r\n\t // Pull that off.\r\n\t if (atSign !== -1) {\r\n\t auth = rest.slice(0, atSign);\r\n\t rest = rest.slice(atSign + 1);\r\n\t this.auth = decodeURIComponent(auth);\r\n\t }\r\n\r\n\t // the host is the remaining to the left of the first non-host char\r\n\t hostEnd = -1;\r\n\t for (var i = 0; i < nonHostChars.length; i++) {\r\n\t var hec = rest.indexOf(nonHostChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\t // if we still have not hit it, then the entire thing is a host.\r\n\t if (hostEnd === -1)\r\n\t hostEnd = rest.length;\r\n\r\n\t this.host = rest.slice(0, hostEnd);\r\n\t rest = rest.slice(hostEnd);\r\n\r\n\t // pull out port.\r\n\t this.parseHost();\r\n\r\n\t // we've indicated that there is a hostname,\r\n\t // so even if it's empty, it has to be present.\r\n\t this.hostname = this.hostname || '';\r\n\r\n\t // if hostname begins with [ and ends with ]\r\n\t // assume that it's an IPv6 address.\r\n\t var ipv6Hostname = this.hostname[0] === '[' &&\r\n\t this.hostname[this.hostname.length - 1] === ']';\r\n\r\n\t // validate a little.\r\n\t if (!ipv6Hostname) {\r\n\t var hostparts = this.hostname.split(/\\./);\r\n\t for (var i = 0, l = hostparts.length; i < l; i++) {\r\n\t var part = hostparts[i];\r\n\t if (!part) continue;\r\n\t if (!part.match(hostnamePartPattern)) {\r\n\t var newpart = '';\r\n\t for (var j = 0, k = part.length; j < k; j++) {\r\n\t if (part.charCodeAt(j) > 127) {\r\n\t // we replace non-ASCII char with a temporary placeholder\r\n\t // we need this to make sure size of hostname is not\r\n\t // broken by replacing non-ASCII by nothing\r\n\t newpart += 'x';\r\n\t } else {\r\n\t newpart += part[j];\r\n\t }\r\n\t }\r\n\t // we test again with ASCII char only\r\n\t if (!newpart.match(hostnamePartPattern)) {\r\n\t var validParts = hostparts.slice(0, i);\r\n\t var notHost = hostparts.slice(i + 1);\r\n\t var bit = part.match(hostnamePartStart);\r\n\t if (bit) {\r\n\t validParts.push(bit[1]);\r\n\t notHost.unshift(bit[2]);\r\n\t }\r\n\t if (notHost.length) {\r\n\t rest = '/' + notHost.join('.') + rest;\r\n\t }\r\n\t this.hostname = validParts.join('.');\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (this.hostname.length > hostnameMaxLen) {\r\n\t this.hostname = '';\r\n\t } else {\r\n\t // hostnames are always lower case.\r\n\t this.hostname = this.hostname.toLowerCase();\r\n\t }\r\n\r\n\t if (!ipv6Hostname) {\r\n\t // IDNA Support: Returns a puny coded representation of \"domain\".\r\n\t // It only converts the part of the domain name that\r\n\t // has non ASCII characters. I.e. it dosent matter if\r\n\t // you call it with a domain that already is in ASCII.\r\n\t var domainArray = this.hostname.split('.');\r\n\t var newOut = [];\r\n\t for (var i = 0; i < domainArray.length; ++i) {\r\n\t var s = domainArray[i];\r\n\t newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\r\n\t 'xn--' + punycode.encode(s) : s);\r\n\t }\r\n\t this.hostname = newOut.join('.');\r\n\t }\r\n\r\n\t var p = this.port ? ':' + this.port : '';\r\n\t var h = this.hostname || '';\r\n\t this.host = h + p;\r\n\t this.href += this.host;\r\n\r\n\t // strip [ and ] from the hostname\r\n\t // the host field still retains them, though\r\n\t if (ipv6Hostname) {\r\n\t this.hostname = this.hostname.substr(1, this.hostname.length - 2);\r\n\t if (rest[0] !== '/') {\r\n\t rest = '/' + rest;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // now rest is set to the post-host stuff.\r\n\t // chop off any delim chars.\r\n\t if (!unsafeProtocol[lowerProto]) {\r\n\r\n\t // First, make 100% sure that any \"autoEscape\" chars get\r\n\t // escaped, even if encodeURIComponent doesn't think they\r\n\t // need to be.\r\n\t for (var i = 0, l = autoEscape.length; i < l; i++) {\r\n\t var ae = autoEscape[i];\r\n\t var esc = encodeURIComponent(ae);\r\n\t if (esc === ae) {\r\n\t esc = escape(ae);\r\n\t }\r\n\t rest = rest.split(ae).join(esc);\r\n\t }\r\n\t }\r\n\r\n\r\n\t // chop off from the tail first.\r\n\t var hash = rest.indexOf('#');\r\n\t if (hash !== -1) {\r\n\t // got a fragment string.\r\n\t this.hash = rest.substr(hash);\r\n\t rest = rest.slice(0, hash);\r\n\t }\r\n\t var qm = rest.indexOf('?');\r\n\t if (qm !== -1) {\r\n\t this.search = rest.substr(qm);\r\n\t this.query = rest.substr(qm + 1);\r\n\t if (parseQueryString) {\r\n\t this.query = querystring.parse(this.query);\r\n\t }\r\n\t rest = rest.slice(0, qm);\r\n\t } else if (parseQueryString) {\r\n\t // no query string, but parseQueryString still requested\r\n\t this.search = '';\r\n\t this.query = {};\r\n\t }\r\n\t if (rest) this.pathname = rest;\r\n\t if (slashedProtocol[lowerProto] &&\r\n\t this.hostname && !this.pathname) {\r\n\t this.pathname = '/';\r\n\t }\r\n\r\n\t //to support http.request\r\n\t if (this.pathname || this.search) {\r\n\t var p = this.pathname || '';\r\n\t var s = this.search || '';\r\n\t this.path = p + s;\r\n\t }\r\n\r\n\t // finally, reconstruct the href based on what has been validated.\r\n\t this.href = this.format();\r\n\t return this;\r\n\t};\r\n\r\n\t// format a parsed object into a url string\r\n\tfunction urlFormat(obj) {\r\n\t // ensure it's an object, and not a string url.\r\n\t // If it's an obj, this is a no-op.\r\n\t // this way, you can call url_format() on strings\r\n\t // to clean up potentially wonky urls.\r\n\t if (isString(obj)) obj = urlParse(obj);\r\n\t if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\r\n\t return obj.format();\r\n\t}\r\n\r\n\tUrl.prototype.format = function() {\r\n\t var auth = this.auth || '';\r\n\t if (auth) {\r\n\t auth = encodeURIComponent(auth);\r\n\t auth = auth.replace(/%3A/i, ':');\r\n\t auth += '@';\r\n\t }\r\n\r\n\t var protocol = this.protocol || '',\r\n\t pathname = this.pathname || '',\r\n\t hash = this.hash || '',\r\n\t host = false,\r\n\t query = '';\r\n\r\n\t if (this.host) {\r\n\t host = auth + this.host;\r\n\t } else if (this.hostname) {\r\n\t host = auth + (this.hostname.indexOf(':') === -1 ?\r\n\t this.hostname :\r\n\t '[' + this.hostname + ']');\r\n\t if (this.port) {\r\n\t host += ':' + this.port;\r\n\t }\r\n\t }\r\n\r\n\t if (this.query &&\r\n\t isObject(this.query) &&\r\n\t Object.keys(this.query).length) {\r\n\t query = querystring.stringify(this.query);\r\n\t }\r\n\r\n\t var search = this.search || (query && ('?' + query)) || '';\r\n\r\n\t if (protocol && protocol.substr(-1) !== ':') protocol += ':';\r\n\r\n\t // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\r\n\t // unless they had them to begin with.\r\n\t if (this.slashes ||\r\n\t (!protocol || slashedProtocol[protocol]) && host !== false) {\r\n\t host = '//' + (host || '');\r\n\t if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\r\n\t } else if (!host) {\r\n\t host = '';\r\n\t }\r\n\r\n\t if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\r\n\t if (search && search.charAt(0) !== '?') search = '?' + search;\r\n\r\n\t pathname = pathname.replace(/[?#]/g, function(match) {\r\n\t return encodeURIComponent(match);\r\n\t });\r\n\t search = search.replace('#', '%23');\r\n\r\n\t return protocol + host + pathname + search + hash;\r\n\t};\r\n\r\n\tfunction urlResolve(source, relative) {\r\n\t return urlParse(source, false, true).resolve(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolve = function(relative) {\r\n\t return this.resolveObject(urlParse(relative, false, true)).format();\r\n\t};\r\n\r\n\tfunction urlResolveObject(source, relative) {\r\n\t if (!source) return relative;\r\n\t return urlParse(source, false, true).resolveObject(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolveObject = function(relative) {\r\n\t if (isString(relative)) {\r\n\t var rel = new Url();\r\n\t rel.parse(relative, false, true);\r\n\t relative = rel;\r\n\t }\r\n\r\n\t var result = new Url();\r\n\t Object.keys(this).forEach(function(k) {\r\n\t result[k] = this[k];\r\n\t }, this);\r\n\r\n\t // hash is always overridden, no matter what.\r\n\t // even href=\"\" will remove it.\r\n\t result.hash = relative.hash;\r\n\r\n\t // if the relative url is empty, then there's nothing left to do here.\r\n\t if (relative.href === '') {\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // hrefs like //foo/bar always cut to the protocol.\r\n\t if (relative.slashes && !relative.protocol) {\r\n\t // take everything except the protocol from relative\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t if (k !== 'protocol')\r\n\t result[k] = relative[k];\r\n\t });\r\n\r\n\t //urlParse appends trailing / to urls like http://www.example.com\r\n\t if (slashedProtocol[result.protocol] &&\r\n\t result.hostname && !result.pathname) {\r\n\t result.path = result.pathname = '/';\r\n\t }\r\n\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (relative.protocol && relative.protocol !== result.protocol) {\r\n\t // if it's a known url protocol, then changing\r\n\t // the protocol does weird things\r\n\t // first, if it's not file:, then we MUST have a host,\r\n\t // and if there was a path\r\n\t // to begin with, then we MUST have a path.\r\n\t // if it is file:, then the host is dropped,\r\n\t // because that's known to be hostless.\r\n\t // anything else is assumed to be absolute.\r\n\t if (!slashedProtocol[relative.protocol]) {\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t result[k] = relative[k];\r\n\t });\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t result.protocol = relative.protocol;\r\n\t if (!relative.host && !hostlessProtocol[relative.protocol]) {\r\n\t var relPath = (relative.pathname || '').split('/');\r\n\t while (relPath.length && !(relative.host = relPath.shift()));\r\n\t if (!relative.host) relative.host = '';\r\n\t if (!relative.hostname) relative.hostname = '';\r\n\t if (relPath[0] !== '') relPath.unshift('');\r\n\t if (relPath.length < 2) relPath.unshift('');\r\n\t result.pathname = relPath.join('/');\r\n\t } else {\r\n\t result.pathname = relative.pathname;\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t result.host = relative.host || '';\r\n\t result.auth = relative.auth;\r\n\t result.hostname = relative.hostname || relative.host;\r\n\t result.port = relative.port;\r\n\t // to support http.request\r\n\t if (result.pathname || result.search) {\r\n\t var p = result.pathname || '';\r\n\t var s = result.search || '';\r\n\t result.path = p + s;\r\n\t }\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\r\n\t isRelAbs = (\r\n\t relative.host ||\r\n\t relative.pathname && relative.pathname.charAt(0) === '/'\r\n\t ),\r\n\t mustEndAbs = (isRelAbs || isSourceAbs ||\r\n\t (result.host && relative.pathname)),\r\n\t removeAllDots = mustEndAbs,\r\n\t srcPath = result.pathname && result.pathname.split('/') || [],\r\n\t relPath = relative.pathname && relative.pathname.split('/') || [],\r\n\t psychotic = result.protocol && !slashedProtocol[result.protocol];\r\n\r\n\t // if the url is a non-slashed url, then relative\r\n\t // links like ../.. should be able\r\n\t // to crawl up to the hostname, as well. This is strange.\r\n\t // result.protocol has already been set by now.\r\n\t // Later on, put the first path part into the host field.\r\n\t if (psychotic) {\r\n\t result.hostname = '';\r\n\t result.port = null;\r\n\t if (result.host) {\r\n\t if (srcPath[0] === '') srcPath[0] = result.host;\r\n\t else srcPath.unshift(result.host);\r\n\t }\r\n\t result.host = '';\r\n\t if (relative.protocol) {\r\n\t relative.hostname = null;\r\n\t relative.port = null;\r\n\t if (relative.host) {\r\n\t if (relPath[0] === '') relPath[0] = relative.host;\r\n\t else relPath.unshift(relative.host);\r\n\t }\r\n\t relative.host = null;\r\n\t }\r\n\t mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\r\n\t }\r\n\r\n\t if (isRelAbs) {\r\n\t // it's absolute.\r\n\t result.host = (relative.host || relative.host === '') ?\r\n\t relative.host : result.host;\r\n\t result.hostname = (relative.hostname || relative.hostname === '') ?\r\n\t relative.hostname : result.hostname;\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t srcPath = relPath;\r\n\t // fall through to the dot-handling below.\r\n\t } else if (relPath.length) {\r\n\t // it's relative\r\n\t // throw away the existing file, and take the new path instead.\r\n\t if (!srcPath) srcPath = [];\r\n\t srcPath.pop();\r\n\t srcPath = srcPath.concat(relPath);\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t } else if (!isNullOrUndefined(relative.search)) {\r\n\t // just pull out the search.\r\n\t // like href='?foo'.\r\n\t // Put this after the other two cases because it simplifies the booleans\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = srcPath.shift();\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t //to support http.request\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t // no path at all. easy.\r\n\t // we've already handled the other stuff above.\r\n\t result.pathname = null;\r\n\t //to support http.request\r\n\t if (result.search) {\r\n\t result.path = '/' + result.search;\r\n\t } else {\r\n\t result.path = null;\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // if a url ENDs in . or .., then it must get a trailing slash.\r\n\t // however, if it ends in anything else non-slashy,\r\n\t // then it must NOT get a trailing slash.\r\n\t var last = srcPath.slice(-1)[0];\r\n\t var hasTrailingSlash = (\r\n\t (result.host || relative.host) && (last === '.' || last === '..') ||\r\n\t last === '');\r\n\r\n\t // strip single dots, resolve double dots to parent dir\r\n\t // if the path tries to go above the root, `up` ends up > 0\r\n\t var up = 0;\r\n\t for (var i = srcPath.length; i >= 0; i--) {\r\n\t last = srcPath[i];\r\n\t if (last == '.') {\r\n\t srcPath.splice(i, 1);\r\n\t } else if (last === '..') {\r\n\t srcPath.splice(i, 1);\r\n\t up++;\r\n\t } else if (up) {\r\n\t srcPath.splice(i, 1);\r\n\t up--;\r\n\t }\r\n\t }\r\n\r\n\t // if the path is allowed to go above the root, restore leading ..s\r\n\t if (!mustEndAbs && !removeAllDots) {\r\n\t for (; up--; up) {\r\n\t srcPath.unshift('..');\r\n\t }\r\n\t }\r\n\r\n\t if (mustEndAbs && srcPath[0] !== '' &&\r\n\t (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\r\n\t srcPath.push('');\r\n\t }\r\n\r\n\t var isAbsolute = srcPath[0] === '' ||\r\n\t (srcPath[0] && srcPath[0].charAt(0) === '/');\r\n\r\n\t // put the host back\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = isAbsolute ? '' :\r\n\t srcPath.length ? srcPath.shift() : '';\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\r\n\t mustEndAbs = mustEndAbs || (result.host && srcPath.length);\r\n\r\n\t if (mustEndAbs && !isAbsolute) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t result.pathname = null;\r\n\t result.path = null;\r\n\t } else {\r\n\t result.pathname = srcPath.join('/');\r\n\t }\r\n\r\n\t //to support request.http\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.auth = relative.auth || result.auth;\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t};\r\n\r\n\tUrl.prototype.parseHost = function() {\r\n\t var host = this.host;\r\n\t var port = portPattern.exec(host);\r\n\t if (port) {\r\n\t port = port[0];\r\n\t if (port !== ':') {\r\n\t this.port = port.substr(1);\r\n\t }\r\n\t host = host.substr(0, host.length - port.length);\r\n\t }\r\n\t if (host) this.hostname = host;\r\n\t};\r\n\r\n\tfunction isString(arg) {\r\n\t return typeof arg === \"string\";\r\n\t}\r\n\r\n\tfunction isObject(arg) {\r\n\t return typeof arg === 'object' && arg !== null;\r\n\t}\r\n\r\n\tfunction isNull(arg) {\r\n\t return arg === null;\r\n\t}\r\n\tfunction isNullOrUndefined(arg) {\r\n\t return arg == null;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 5 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */\r\n\t;(function(root) {\r\n\r\n\t\t/** Detect free variables */\r\n\t\tvar freeExports = typeof exports == 'object' && exports &&\r\n\t\t\t!exports.nodeType && exports;\r\n\t\tvar freeModule = typeof module == 'object' && module &&\r\n\t\t\t!module.nodeType && module;\r\n\t\tvar freeGlobal = typeof global == 'object' && global;\r\n\t\tif (\r\n\t\t\tfreeGlobal.global === freeGlobal ||\r\n\t\t\tfreeGlobal.window === freeGlobal ||\r\n\t\t\tfreeGlobal.self === freeGlobal\r\n\t\t) {\r\n\t\t\troot = freeGlobal;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * The `punycode` object.\r\n\t\t * @name punycode\r\n\t\t * @type Object\r\n\t\t */\r\n\t\tvar punycode,\r\n\r\n\t\t/** Highest positive signed 32-bit float value */\r\n\t\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\r\n\r\n\t\t/** Bootstring parameters */\r\n\t\tbase = 36,\r\n\t\ttMin = 1,\r\n\t\ttMax = 26,\r\n\t\tskew = 38,\r\n\t\tdamp = 700,\r\n\t\tinitialBias = 72,\r\n\t\tinitialN = 128, // 0x80\r\n\t\tdelimiter = '-', // '\\x2D'\r\n\r\n\t\t/** Regular expressions */\r\n\t\tregexPunycode = /^xn--/,\r\n\t\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\r\n\t\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\r\n\r\n\t\t/** Error messages */\r\n\t\terrors = {\r\n\t\t\t'overflow': 'Overflow: input needs wider integers to process',\r\n\t\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\r\n\t\t\t'invalid-input': 'Invalid input'\r\n\t\t},\r\n\r\n\t\t/** Convenience shortcuts */\r\n\t\tbaseMinusTMin = base - tMin,\r\n\t\tfloor = Math.floor,\r\n\t\tstringFromCharCode = String.fromCharCode,\r\n\r\n\t\t/** Temporary variable */\r\n\t\tkey;\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/**\r\n\t\t * A generic error utility function.\r\n\t\t * @private\r\n\t\t * @param {String} type The error type.\r\n\t\t * @returns {Error} Throws a `RangeError` with the applicable error message.\r\n\t\t */\r\n\t\tfunction error(type) {\r\n\t\t\tthrow RangeError(errors[type]);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A generic `Array#map` utility function.\r\n\t\t * @private\r\n\t\t * @param {Array} array The array to iterate over.\r\n\t\t * @param {Function} callback The function that gets called for every array\r\n\t\t * item.\r\n\t\t * @returns {Array} A new array of values returned by the callback function.\r\n\t\t */\r\n\t\tfunction map(array, fn) {\r\n\t\t\tvar length = array.length;\r\n\t\t\tvar result = [];\r\n\t\t\twhile (length--) {\r\n\t\t\t\tresult[length] = fn(array[length]);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A simple `Array#map`-like wrapper to work with domain name strings or email\r\n\t\t * addresses.\r\n\t\t * @private\r\n\t\t * @param {String} domain The domain name or email address.\r\n\t\t * @param {Function} callback The function that gets called for every\r\n\t\t * character.\r\n\t\t * @returns {Array} A new string of characters returned by the callback\r\n\t\t * function.\r\n\t\t */\r\n\t\tfunction mapDomain(string, fn) {\r\n\t\t\tvar parts = string.split('@');\r\n\t\t\tvar result = '';\r\n\t\t\tif (parts.length > 1) {\r\n\t\t\t\t// In email addresses, only the domain name should be punycoded. Leave\r\n\t\t\t\t// the local part (i.e. everything up to `@`) intact.\r\n\t\t\t\tresult = parts[0] + '@';\r\n\t\t\t\tstring = parts[1];\r\n\t\t\t}\r\n\t\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\r\n\t\t\tstring = string.replace(regexSeparators, '\\x2E');\r\n\t\t\tvar labels = string.split('.');\r\n\t\t\tvar encoded = map(labels, fn).join('.');\r\n\t\t\treturn result + encoded;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates an array containing the numeric code points of each Unicode\r\n\t\t * character in the string. While JavaScript uses UCS-2 internally,\r\n\t\t * this function will convert a pair of surrogate halves (each of which\r\n\t\t * UCS-2 exposes as separate characters) into a single code point,\r\n\t\t * matching UTF-16.\r\n\t\t * @see `punycode.ucs2.encode`\r\n\t\t * @see \r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name decode\r\n\t\t * @param {String} string The Unicode input string (UCS-2).\r\n\t\t * @returns {Array} The new array of code points.\r\n\t\t */\r\n\t\tfunction ucs2decode(string) {\r\n\t\t\tvar output = [],\r\n\t\t\t counter = 0,\r\n\t\t\t length = string.length,\r\n\t\t\t value,\r\n\t\t\t extra;\r\n\t\t\twhile (counter < length) {\r\n\t\t\t\tvalue = string.charCodeAt(counter++);\r\n\t\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n\t\t\t\t\t// high surrogate, and there is a next character\r\n\t\t\t\t\textra = string.charCodeAt(counter++);\r\n\t\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\r\n\t\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\r\n\t\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\r\n\t\t\t\t\t\toutput.push(value);\r\n\t\t\t\t\t\tcounter--;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\toutput.push(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn output;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates a string based on an array of numeric code points.\r\n\t\t * @see `punycode.ucs2.decode`\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name encode\r\n\t\t * @param {Array} codePoints The array of numeric code points.\r\n\t\t * @returns {String} The new Unicode string (UCS-2).\r\n\t\t */\r\n\t\tfunction ucs2encode(array) {\r\n\t\t\treturn map(array, function(value) {\r\n\t\t\t\tvar output = '';\r\n\t\t\t\tif (value > 0xFFFF) {\r\n\t\t\t\t\tvalue -= 0x10000;\r\n\t\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\r\n\t\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\r\n\t\t\t\t}\r\n\t\t\t\toutput += stringFromCharCode(value);\r\n\t\t\t\treturn output;\r\n\t\t\t}).join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a basic code point into a digit/integer.\r\n\t\t * @see `digitToBasic()`\r\n\t\t * @private\r\n\t\t * @param {Number} codePoint The basic numeric code point value.\r\n\t\t * @returns {Number} The numeric value of a basic code point (for use in\r\n\t\t * representing integers) in the range `0` to `base - 1`, or `base` if\r\n\t\t * the code point does not represent a value.\r\n\t\t */\r\n\t\tfunction basicToDigit(codePoint) {\r\n\t\t\tif (codePoint - 48 < 10) {\r\n\t\t\t\treturn codePoint - 22;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 65 < 26) {\r\n\t\t\t\treturn codePoint - 65;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 97 < 26) {\r\n\t\t\t\treturn codePoint - 97;\r\n\t\t\t}\r\n\t\t\treturn base;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a digit/integer into a basic code point.\r\n\t\t * @see `basicToDigit()`\r\n\t\t * @private\r\n\t\t * @param {Number} digit The numeric value of a basic code point.\r\n\t\t * @returns {Number} The basic code point whose value (when used for\r\n\t\t * representing integers) is `digit`, which needs to be in the range\r\n\t\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\r\n\t\t * used; else, the lowercase form is used. The behavior is undefined\r\n\t\t * if `flag` is non-zero and `digit` has no uppercase form.\r\n\t\t */\r\n\t\tfunction digitToBasic(digit, flag) {\r\n\t\t\t// 0..25 map to ASCII a..z or A..Z\r\n\t\t\t// 26..35 map to ASCII 0..9\r\n\t\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Bias adaptation function as per section 3.4 of RFC 3492.\r\n\t\t * http://tools.ietf.org/html/rfc3492#section-3.4\r\n\t\t * @private\r\n\t\t */\r\n\t\tfunction adapt(delta, numPoints, firstTime) {\r\n\t\t\tvar k = 0;\r\n\t\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\r\n\t\t\tdelta += floor(delta / numPoints);\r\n\t\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n\t\t\t\tdelta = floor(delta / baseMinusTMin);\r\n\t\t\t}\r\n\t\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\r\n\t\t * symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycode string of ASCII-only symbols.\r\n\t\t * @returns {String} The resulting string of Unicode symbols.\r\n\t\t */\r\n\t\tfunction decode(input) {\r\n\t\t\t// Don't use UCS-2\r\n\t\t\tvar output = [],\r\n\t\t\t inputLength = input.length,\r\n\t\t\t out,\r\n\t\t\t i = 0,\r\n\t\t\t n = initialN,\r\n\t\t\t bias = initialBias,\r\n\t\t\t basic,\r\n\t\t\t j,\r\n\t\t\t index,\r\n\t\t\t oldi,\r\n\t\t\t w,\r\n\t\t\t k,\r\n\t\t\t digit,\r\n\t\t\t t,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t baseMinusT;\r\n\r\n\t\t\t// Handle the basic code points: let `basic` be the number of input code\r\n\t\t\t// points before the last delimiter, or `0` if there is none, then copy\r\n\t\t\t// the first basic code points to the output.\r\n\r\n\t\t\tbasic = input.lastIndexOf(delimiter);\r\n\t\t\tif (basic < 0) {\r\n\t\t\t\tbasic = 0;\r\n\t\t\t}\r\n\r\n\t\t\tfor (j = 0; j < basic; ++j) {\r\n\t\t\t\t// if it's not a basic code point\r\n\t\t\t\tif (input.charCodeAt(j) >= 0x80) {\r\n\t\t\t\t\terror('not-basic');\r\n\t\t\t\t}\r\n\t\t\t\toutput.push(input.charCodeAt(j));\r\n\t\t\t}\r\n\r\n\t\t\t// Main decoding loop: start just after the last delimiter if any basic code\r\n\t\t\t// points were copied; start at the beginning otherwise.\r\n\r\n\t\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\r\n\r\n\t\t\t\t// `index` is the index of the next character to be consumed.\r\n\t\t\t\t// Decode a generalized variable-length integer into `delta`,\r\n\t\t\t\t// which gets added to `i`. The overflow checking is easier\r\n\t\t\t\t// if we increase `i` as we go, then subtract off its starting\r\n\t\t\t\t// value at the end to obtain `delta`.\r\n\t\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\r\n\r\n\t\t\t\t\tif (index >= inputLength) {\r\n\t\t\t\t\t\terror('invalid-input');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\r\n\r\n\t\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ti += digit * w;\r\n\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\r\n\t\t\t\t\tif (digit < t) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tw *= baseMinusT;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tout = output.length + 1;\r\n\t\t\t\tbias = adapt(i - oldi, out, oldi == 0);\r\n\r\n\t\t\t\t// `i` was supposed to wrap around from `out` to `0`,\r\n\t\t\t\t// incrementing `n` each time, so we'll fix that now:\r\n\t\t\t\tif (floor(i / out) > maxInt - n) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tn += floor(i / out);\r\n\t\t\t\ti %= out;\r\n\r\n\t\t\t\t// Insert `n` at position `i` of the output\r\n\t\t\t\toutput.splice(i++, 0, n);\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn ucs2encode(output);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\r\n\t\t * Punycode string of ASCII-only symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The string of Unicode symbols.\r\n\t\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\r\n\t\t */\r\n\t\tfunction encode(input) {\r\n\t\t\tvar n,\r\n\t\t\t delta,\r\n\t\t\t handledCPCount,\r\n\t\t\t basicLength,\r\n\t\t\t bias,\r\n\t\t\t j,\r\n\t\t\t m,\r\n\t\t\t q,\r\n\t\t\t k,\r\n\t\t\t t,\r\n\t\t\t currentValue,\r\n\t\t\t output = [],\r\n\t\t\t /** `inputLength` will hold the number of code points in `input`. */\r\n\t\t\t inputLength,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t handledCPCountPlusOne,\r\n\t\t\t baseMinusT,\r\n\t\t\t qMinusT;\r\n\r\n\t\t\t// Convert the input in UCS-2 to Unicode\r\n\t\t\tinput = ucs2decode(input);\r\n\r\n\t\t\t// Cache the length\r\n\t\t\tinputLength = input.length;\r\n\r\n\t\t\t// Initialize the state\r\n\t\t\tn = initialN;\r\n\t\t\tdelta = 0;\r\n\t\t\tbias = initialBias;\r\n\r\n\t\t\t// Handle the basic code points\r\n\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\tif (currentValue < 0x80) {\r\n\t\t\t\t\toutput.push(stringFromCharCode(currentValue));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thandledCPCount = basicLength = output.length;\r\n\r\n\t\t\t// `handledCPCount` is the number of code points that have been handled;\r\n\t\t\t// `basicLength` is the number of basic code points.\r\n\r\n\t\t\t// Finish the basic string - if it is not empty - with a delimiter\r\n\t\t\tif (basicLength) {\r\n\t\t\t\toutput.push(delimiter);\r\n\t\t\t}\r\n\r\n\t\t\t// Main encoding loop:\r\n\t\t\twhile (handledCPCount < inputLength) {\r\n\r\n\t\t\t\t// All non-basic code points < n have been handled already. Find the next\r\n\t\t\t\t// larger one:\r\n\t\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\t\tif (currentValue >= n && currentValue < m) {\r\n\t\t\t\t\t\tm = currentValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increase `delta` enough to advance the decoder's state to ,\r\n\t\t\t\t// but guard against overflow\r\n\t\t\t\thandledCPCountPlusOne = handledCPCount + 1;\r\n\t\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelta += (m - n) * handledCPCountPlusOne;\r\n\t\t\t\tn = m;\r\n\r\n\t\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\r\n\t\t\t\t\tif (currentValue < n && ++delta > maxInt) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (currentValue == n) {\r\n\t\t\t\t\t\t// Represent delta as a generalized variable-length integer\r\n\t\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\r\n\t\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\t\t\t\t\t\t\tif (q < t) {\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tqMinusT = q - t;\r\n\t\t\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\t\t\toutput.push(\r\n\t\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\r\n\t\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n\t\t\t\t\t\tdelta = 0;\r\n\t\t\t\t\t\t++handledCPCount;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t++delta;\r\n\t\t\t\t++n;\r\n\r\n\t\t\t}\r\n\t\t\treturn output.join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string representing a domain name or an email address\r\n\t\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\r\n\t\t * it doesn't matter if you call it on a string that has already been\r\n\t\t * converted to Unicode.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycoded domain name or email address to\r\n\t\t * convert to Unicode.\r\n\t\t * @returns {String} The Unicode representation of the given Punycode\r\n\t\t * string.\r\n\t\t */\r\n\t\tfunction toUnicode(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexPunycode.test(string)\r\n\t\t\t\t\t? decode(string.slice(4).toLowerCase())\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Unicode string representing a domain name or an email address to\r\n\t\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\r\n\t\t * i.e. it doesn't matter if you call it with a domain that's already in\r\n\t\t * ASCII.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The domain name or email address to convert, as a\r\n\t\t * Unicode string.\r\n\t\t * @returns {String} The Punycode representation of the given domain name or\r\n\t\t * email address.\r\n\t\t */\r\n\t\tfunction toASCII(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexNonASCII.test(string)\r\n\t\t\t\t\t? 'xn--' + encode(string)\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/** Define the public API */\r\n\t\tpunycode = {\r\n\t\t\t/**\r\n\t\t\t * A string representing the current Punycode.js version number.\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type String\r\n\t\t\t */\r\n\t\t\t'version': '1.3.2',\r\n\t\t\t/**\r\n\t\t\t * An object of methods to convert from JavaScript's internal character\r\n\t\t\t * representation (UCS-2) to Unicode code points, and back.\r\n\t\t\t * @see \r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type Object\r\n\t\t\t */\r\n\t\t\t'ucs2': {\r\n\t\t\t\t'decode': ucs2decode,\r\n\t\t\t\t'encode': ucs2encode\r\n\t\t\t},\r\n\t\t\t'decode': decode,\r\n\t\t\t'encode': encode,\r\n\t\t\t'toASCII': toASCII,\r\n\t\t\t'toUnicode': toUnicode\r\n\t\t};\r\n\r\n\t\t/** Expose `punycode` */\r\n\t\t// Some AMD build optimizers, like r.js, check for specific condition patterns\r\n\t\t// like the following:\r\n\t\tif (\r\n\t\t\ttrue\r\n\t\t) {\r\n\t\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\r\n\t\t\t\treturn punycode;\r\n\t\t\t}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t\t} else if (freeExports && freeModule) {\r\n\t\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\r\n\t\t\t\tfreeModule.exports = punycode;\r\n\t\t\t} else { // in Narwhal or RingoJS v0.7.0-\r\n\t\t\t\tfor (key in punycode) {\r\n\t\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else { // in Rhino or a web browser\r\n\t\t\troot.punycode = punycode;\r\n\t\t}\r\n\r\n\t}(this));\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)(module), (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 6 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 7 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\texports.decode = exports.parse = __webpack_require__(8);\r\n\texports.encode = exports.stringify = __webpack_require__(9);\r\n\r\n\r\n/***/ },\r\n/* 8 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\t// If obj.hasOwnProperty has been overridden, then calling\r\n\t// obj.hasOwnProperty(prop) will break.\r\n\t// See: https://github.com/joyent/node/issues/1707\r\n\tfunction hasOwnProperty(obj, prop) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\r\n\t}\r\n\r\n\tmodule.exports = function(qs, sep, eq, options) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t var obj = {};\r\n\r\n\t if (typeof qs !== 'string' || qs.length === 0) {\r\n\t return obj;\r\n\t }\r\n\r\n\t var regexp = /\\+/g;\r\n\t qs = qs.split(sep);\r\n\r\n\t var maxKeys = 1000;\r\n\t if (options && typeof options.maxKeys === 'number') {\r\n\t maxKeys = options.maxKeys;\r\n\t }\r\n\r\n\t var len = qs.length;\r\n\t // maxKeys <= 0 means that we should not limit keys count\r\n\t if (maxKeys > 0 && len > maxKeys) {\r\n\t len = maxKeys;\r\n\t }\r\n\r\n\t for (var i = 0; i < len; ++i) {\r\n\t var x = qs[i].replace(regexp, '%20'),\r\n\t idx = x.indexOf(eq),\r\n\t kstr, vstr, k, v;\r\n\r\n\t if (idx >= 0) {\r\n\t kstr = x.substr(0, idx);\r\n\t vstr = x.substr(idx + 1);\r\n\t } else {\r\n\t kstr = x;\r\n\t vstr = '';\r\n\t }\r\n\r\n\t k = decodeURIComponent(kstr);\r\n\t v = decodeURIComponent(vstr);\r\n\r\n\t if (!hasOwnProperty(obj, k)) {\r\n\t obj[k] = v;\r\n\t } else if (Array.isArray(obj[k])) {\r\n\t obj[k].push(v);\r\n\t } else {\r\n\t obj[k] = [obj[k], v];\r\n\t }\r\n\t }\r\n\r\n\t return obj;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 9 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\tvar stringifyPrimitive = function(v) {\r\n\t switch (typeof v) {\r\n\t case 'string':\r\n\t return v;\r\n\r\n\t case 'boolean':\r\n\t return v ? 'true' : 'false';\r\n\r\n\t case 'number':\r\n\t return isFinite(v) ? v : '';\r\n\r\n\t default:\r\n\t return '';\r\n\t }\r\n\t};\r\n\r\n\tmodule.exports = function(obj, sep, eq, name) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t if (obj === null) {\r\n\t obj = undefined;\r\n\t }\r\n\r\n\t if (typeof obj === 'object') {\r\n\t return Object.keys(obj).map(function(k) {\r\n\t var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\r\n\t if (Array.isArray(obj[k])) {\r\n\t return obj[k].map(function(v) {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(v));\r\n\t }).join(sep);\r\n\t } else {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\r\n\t }\r\n\t }).join(sep);\r\n\r\n\t }\r\n\r\n\t if (!name) return '';\r\n\t return encodeURIComponent(stringifyPrimitive(name)) + eq +\r\n\t encodeURIComponent(stringifyPrimitive(obj));\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 10 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = function equal(a, b) {\r\n\t if (a === b) return true;\r\n\r\n\t var arrA = Array.isArray(a)\r\n\t , arrB = Array.isArray(b)\r\n\t , i;\r\n\r\n\t if (arrA && arrB) {\r\n\t if (a.length != b.length) return false;\r\n\t for (i = 0; i < a.length; i++)\r\n\t if (!equal(a[i], b[i])) return false;\r\n\t return true;\r\n\t }\r\n\r\n\t if (arrA != arrB) return false;\r\n\r\n\t if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n\t var keys = Object.keys(a);\r\n\r\n\t if (keys.length !== Object.keys(b).length) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if (b[keys[i]] === undefined) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if(!equal(a[keys[i]], b[keys[i]])) return false;\r\n\r\n\t return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 11 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tmodule.exports = {\r\n\t copy: copy,\r\n\t checkDataType: checkDataType,\r\n\t checkDataTypes: checkDataTypes,\r\n\t coerceToTypes: coerceToTypes,\r\n\t toHash: toHash,\r\n\t getProperty: getProperty,\r\n\t escapeQuotes: escapeQuotes,\r\n\t ucs2length: ucs2length,\r\n\t varOccurences: varOccurences,\r\n\t varReplace: varReplace,\r\n\t cleanUpCode: cleanUpCode,\r\n\t cleanUpVarErrors: cleanUpVarErrors,\r\n\t schemaHasRules: schemaHasRules,\r\n\t stableStringify: __webpack_require__(12),\r\n\t toQuotedString: toQuotedString,\r\n\t getPathExpr: getPathExpr,\r\n\t getPath: getPath,\r\n\t getData: getData,\r\n\t unescapeFragment: unescapeFragment,\r\n\t escapeFragment: escapeFragment,\r\n\t escapeJsonPointer: escapeJsonPointer\r\n\t};\r\n\r\n\r\n\tfunction copy(o, to) {\r\n\t to = to || {};\r\n\t for (var key in o) to[key] = o[key];\r\n\t return to;\r\n\t}\r\n\r\n\r\n\tfunction checkDataType(dataType, data, negate) {\r\n\t var EQUAL = negate ? ' !== ' : ' === '\r\n\t , AND = negate ? ' || ' : ' && '\r\n\t , OK = negate ? '!' : ''\r\n\t , NOT = negate ? '' : '!';\r\n\t switch (dataType) {\r\n\t case 'null': return data + EQUAL + 'null';\r\n\t case 'array': return OK + 'Array.isArray(' + data + ')';\r\n\t case 'object': return '(' + OK + data + AND +\r\n\t 'typeof ' + data + EQUAL + '\"object\"' + AND +\r\n\t NOT + 'Array.isArray(' + data + '))';\r\n\t case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\r\n\t NOT + '(' + data + ' % 1))';\r\n\t default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction checkDataTypes(dataTypes, data) {\r\n\t switch (dataTypes.length) {\r\n\t case 1: return checkDataType(dataTypes[0], data, true);\r\n\t default:\r\n\t var code = '';\r\n\t var types = toHash(dataTypes);\r\n\t if (types.array && types.object) {\r\n\t code = types.null ? '(': '(!' + data + ' || ';\r\n\t code += 'typeof ' + data + ' !== \"object\")';\r\n\t delete types.null;\r\n\t delete types.array;\r\n\t delete types.object;\r\n\t }\r\n\t if (types.number) delete types.integer;\r\n\t for (var t in types)\r\n\t code += (code ? ' && ' : '' ) + checkDataType(t, data, true);\r\n\r\n\t return code;\r\n\t }\r\n\t}\r\n\r\n\r\n\tvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\r\n\tfunction coerceToTypes(dataTypes) {\r\n\t if (Array.isArray(dataTypes)) {\r\n\t var types = [];\r\n\t for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) {\r\n\t // high surrogate, and there is a next character\r\n\t value = str.charCodeAt(pos);\r\n\t if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\r\n\t }\r\n\t }\r\n\t return length;\r\n\t}\r\n\r\n\r\n\tfunction varOccurences(str, dataVar) {\r\n\t dataVar += '[^0-9]';\r\n\t var matches = str.match(new RegExp(dataVar, 'g'));\r\n\t return matches ? matches.length : 0;\r\n\t}\r\n\r\n\r\n\tfunction varReplace(str, dataVar, expr) {\r\n\t dataVar += '([^0-9])';\r\n\t expr = expr.replace(/\\$/g, '$$$$');\r\n\t return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\r\n\t}\r\n\r\n\r\n\tvar EMPTY_ELSE = /else\\s*{\\s*}/g\r\n\t , EMPTY_IF_NO_ELSE = /if\\s*\\([^)]+\\)\\s*\\{\\s*\\}(?!\\s*else)/g\r\n\t , EMPTY_IF_WITH_ELSE = /if\\s*\\(([^)]+)\\)\\s*\\{\\s*\\}\\s*else(?!\\s*if)/g;\r\n\tfunction cleanUpCode(out) {\r\n\t return out.replace(EMPTY_ELSE, '')\r\n\t .replace(EMPTY_IF_NO_ELSE, '')\r\n\t .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');\r\n\t}\r\n\r\n\r\n\tvar ERRORS_REGEXP = /[^v\\.]errors/g\r\n\t , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g\r\n\t , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g\r\n\t , RETURN_VALID = 'return errors === 0;'\r\n\t , RETURN_TRUE = 'validate.errors = null; return true;'\r\n\t , RETURN_ASYNC = /if \\(errors === 0\\) return true;\\s*else throw new ValidationError\\(vErrors\\);/\r\n\t , RETURN_TRUE_ASYNC = 'return true;';\r\n\r\n\tfunction cleanUpVarErrors(out, async) {\r\n\t var matches = out.match(ERRORS_REGEXP);\r\n\t if (!matches || matches.length !== 2) return out;\r\n\t return async\r\n\t ? out.replace(REMOVE_ERRORS_ASYNC, '')\r\n\t .replace(RETURN_ASYNC, RETURN_TRUE_ASYNC)\r\n\t : out.replace(REMOVE_ERRORS, '')\r\n\t .replace(RETURN_VALID, RETURN_TRUE);\r\n\t}\r\n\r\n\r\n\tfunction schemaHasRules(schema, rules) {\r\n\t for (var key in schema) if (rules[key]) return true;\r\n\t}\r\n\r\n\r\n\tfunction toQuotedString(str) {\r\n\t return '\\'' + escapeQuotes(str) + '\\'';\r\n\t}\r\n\r\n\r\n\tfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\r\n\t var path = jsonPointers // false by default\r\n\t ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\r\n\t : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tfunction getPath(currentPath, prop, jsonPointers) {\r\n\t var path = jsonPointers // false by default\r\n\t ? toQuotedString('/' + escapeJsonPointer(prop))\r\n\t : toQuotedString(getProperty(prop));\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\r\n\tfunction getData($data, lvl, paths) {\r\n\t var matches = $data.match(RELATIVE_JSON_POINTER);\r\n\t if (!matches) throw new Error('Invalid relative JSON-pointer: ' + $data);\r\n\t var up = +matches[1];\r\n\t var jsonPointer = matches[2];\r\n\t if (jsonPointer == '#') {\r\n\t if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\r\n\t return paths[lvl - up];\r\n\t }\r\n\r\n\t if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\r\n\t var data = 'data' + ((lvl - up) || '');\r\n\t if (!jsonPointer) return data;\r\n\r\n\t var expr = data;\r\n\t var segments = jsonPointer.split('/');\r\n\t for (var i=0; i= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t if (ch === '.') {\r\n\t string += '.';\r\n\t while (next() && ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t if (ch === 'e' || ch === 'E') {\r\n\t string += ch;\r\n\t next();\r\n\t if (ch === '-' || ch === '+') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t while (ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t }\r\n\t number = +string;\r\n\t if (!isFinite(number)) {\r\n\t error(\"Bad number\");\r\n\t } else {\r\n\t return number;\r\n\t }\r\n\t },\r\n\t \r\n\t string = function () {\r\n\t // Parse a string value.\r\n\t var hex,\r\n\t i,\r\n\t string = '',\r\n\t uffff;\r\n\t \r\n\t // When parsing for string values, we must look for \" and \\ characters.\r\n\t if (ch === '\"') {\r\n\t while (next()) {\r\n\t if (ch === '\"') {\r\n\t next();\r\n\t return string;\r\n\t } else if (ch === '\\\\') {\r\n\t next();\r\n\t if (ch === 'u') {\r\n\t uffff = 0;\r\n\t for (i = 0; i < 4; i += 1) {\r\n\t hex = parseInt(next(), 16);\r\n\t if (!isFinite(hex)) {\r\n\t break;\r\n\t }\r\n\t uffff = uffff * 16 + hex;\r\n\t }\r\n\t string += String.fromCharCode(uffff);\r\n\t } else if (typeof escapee[ch] === 'string') {\r\n\t string += escapee[ch];\r\n\t } else {\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t }\r\n\t error(\"Bad string\");\r\n\t },\r\n\r\n\t white = function () {\r\n\r\n\t// Skip whitespace.\r\n\r\n\t while (ch && ch <= ' ') {\r\n\t next();\r\n\t }\r\n\t },\r\n\r\n\t word = function () {\r\n\r\n\t// true, false, or null.\r\n\r\n\t switch (ch) {\r\n\t case 't':\r\n\t next('t');\r\n\t next('r');\r\n\t next('u');\r\n\t next('e');\r\n\t return true;\r\n\t case 'f':\r\n\t next('f');\r\n\t next('a');\r\n\t next('l');\r\n\t next('s');\r\n\t next('e');\r\n\t return false;\r\n\t case 'n':\r\n\t next('n');\r\n\t next('u');\r\n\t next('l');\r\n\t next('l');\r\n\t return null;\r\n\t }\r\n\t error(\"Unexpected '\" + ch + \"'\");\r\n\t },\r\n\r\n\t value, // Place holder for the value function.\r\n\r\n\t array = function () {\r\n\r\n\t// Parse an array value.\r\n\r\n\t var array = [];\r\n\r\n\t if (ch === '[') {\r\n\t next('[');\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array; // empty array\r\n\t }\r\n\t while (ch) {\r\n\t array.push(value());\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad array\");\r\n\t },\r\n\r\n\t object = function () {\r\n\r\n\t// Parse an object value.\r\n\r\n\t var key,\r\n\t object = {};\r\n\r\n\t if (ch === '{') {\r\n\t next('{');\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object; // empty object\r\n\t }\r\n\t while (ch) {\r\n\t key = string();\r\n\t white();\r\n\t next(':');\r\n\t if (Object.hasOwnProperty.call(object, key)) {\r\n\t error('Duplicate key \"' + key + '\"');\r\n\t }\r\n\t object[key] = value();\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad object\");\r\n\t };\r\n\r\n\tvalue = function () {\r\n\r\n\t// Parse a JSON value. It could be an object, an array, a string, a number,\r\n\t// or a word.\r\n\r\n\t white();\r\n\t switch (ch) {\r\n\t case '{':\r\n\t return object();\r\n\t case '[':\r\n\t return array();\r\n\t case '\"':\r\n\t return string();\r\n\t case '-':\r\n\t return number();\r\n\t default:\r\n\t return ch >= '0' && ch <= '9' ? number() : word();\r\n\t }\r\n\t};\r\n\r\n\t// Return the json_parse function. It will have access to all of the above\r\n\t// functions and variables.\r\n\r\n\tmodule.exports = function (source, reviver) {\r\n\t var result;\r\n\t \r\n\t text = source;\r\n\t at = 0;\r\n\t ch = ' ';\r\n\t result = value();\r\n\t white();\r\n\t if (ch) {\r\n\t error(\"Syntax error\");\r\n\t }\r\n\r\n\t // If there is a reviver function, we recursively walk the new structure,\r\n\t // passing each name/value pair to the reviver function for possible\r\n\t // transformation, starting with a temporary root object that holds the result\r\n\t // in an empty key. If there is not a reviver function, we simply return the\r\n\t // result.\r\n\r\n\t return typeof reviver === 'function' ? (function walk(holder, key) {\r\n\t var k, v, value = holder[key];\r\n\t if (value && typeof value === 'object') {\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = walk(value, k);\r\n\t if (v !== undefined) {\r\n\t value[k] = v;\r\n\t } else {\r\n\t delete value[k];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return reviver.call(holder, key, value);\r\n\t }({'': result}, '')) : result;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 15 */\r\n/***/ function(module, exports) {\r\n\r\n\tvar cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t gap,\r\n\t indent,\r\n\t meta = { // table of character substitutions\r\n\t '\\b': '\\\\b',\r\n\t '\\t': '\\\\t',\r\n\t '\\n': '\\\\n',\r\n\t '\\f': '\\\\f',\r\n\t '\\r': '\\\\r',\r\n\t '\"' : '\\\\\"',\r\n\t '\\\\': '\\\\\\\\'\r\n\t },\r\n\t rep;\r\n\r\n\tfunction quote(string) {\r\n\t // If the string contains no control characters, no quote characters, and no\r\n\t // backslash characters, then we can safely slap some quotes around it.\r\n\t // Otherwise we must also replace the offending characters with safe escape\r\n\t // sequences.\r\n\t \r\n\t escapable.lastIndex = 0;\r\n\t return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\r\n\t var c = meta[a];\r\n\t return typeof c === 'string' ? c :\r\n\t '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n\t }) + '\"' : '\"' + string + '\"';\r\n\t}\r\n\r\n\tfunction str(key, holder) {\r\n\t // Produce a string from holder[key].\r\n\t var i, // The loop counter.\r\n\t k, // The member key.\r\n\t v, // The member value.\r\n\t length,\r\n\t mind = gap,\r\n\t partial,\r\n\t value = holder[key];\r\n\t \r\n\t // If the value has a toJSON method, call it to obtain a replacement value.\r\n\t if (value && typeof value === 'object' &&\r\n\t typeof value.toJSON === 'function') {\r\n\t value = value.toJSON(key);\r\n\t }\r\n\t \r\n\t // If we were called with a replacer function, then call the replacer to\r\n\t // obtain a replacement value.\r\n\t if (typeof rep === 'function') {\r\n\t value = rep.call(holder, key, value);\r\n\t }\r\n\t \r\n\t // What happens next depends on the value's type.\r\n\t switch (typeof value) {\r\n\t case 'string':\r\n\t return quote(value);\r\n\t \r\n\t case 'number':\r\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\r\n\t return isFinite(value) ? String(value) : 'null';\r\n\t \r\n\t case 'boolean':\r\n\t case 'null':\r\n\t // If the value is a boolean or null, convert it to a string. Note:\r\n\t // typeof null does not produce 'null'. The case is included here in\r\n\t // the remote chance that this gets fixed someday.\r\n\t return String(value);\r\n\t \r\n\t case 'object':\r\n\t if (!value) return 'null';\r\n\t gap += indent;\r\n\t partial = [];\r\n\t \r\n\t // Array.isArray\r\n\t if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n\t length = value.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t partial[i] = str(i, value) || 'null';\r\n\t }\r\n\t \r\n\t // Join all of the elements together, separated with commas, and\r\n\t // wrap them in brackets.\r\n\t v = partial.length === 0 ? '[]' : gap ?\r\n\t '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\r\n\t '[' + partial.join(',') + ']';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t \r\n\t // If the replacer is an array, use it to select the members to be\r\n\t // stringified.\r\n\t if (rep && typeof rep === 'object') {\r\n\t length = rep.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t k = rep[i];\r\n\t if (typeof k === 'string') {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // Otherwise, iterate through all of the keys in the object.\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t // Join all of the member texts together, separated with commas,\r\n\t // and wrap them in braces.\r\n\r\n\t v = partial.length === 0 ? '{}' : gap ?\r\n\t '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\r\n\t '{' + partial.join(',') + '}';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t}\r\n\r\n\tmodule.exports = function (value, replacer, space) {\r\n\t var i;\r\n\t gap = '';\r\n\t indent = '';\r\n\t \r\n\t // If the space parameter is a number, make an indent string containing that\r\n\t // many spaces.\r\n\t if (typeof space === 'number') {\r\n\t for (i = 0; i < space; i += 1) {\r\n\t indent += ' ';\r\n\t }\r\n\t }\r\n\t // If the space parameter is a string, it will be used as the indent string.\r\n\t else if (typeof space === 'string') {\r\n\t indent = space;\r\n\t }\r\n\r\n\t // If there is a replacer, it must be a function or an array.\r\n\t // Otherwise, throw an error.\r\n\t rep = replacer;\r\n\t if (replacer && typeof replacer !== 'function'\r\n\t && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {\r\n\t throw new Error('JSON.stringify');\r\n\t }\r\n\t \r\n\t // Make a fake root object containing our value under the key of ''.\r\n\t // Return the result of stringifying the value.\r\n\t return str('', {'': value});\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 16 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tmodule.exports = SchemaObject;\r\n\r\n\tfunction SchemaObject(obj) {\r\n\t util.copy(obj, this);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 17 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = {\r\n\t setup: setupAsync,\r\n\t compile: compileAsync\r\n\t};\r\n\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar ASYNC = {\r\n\t '*': checkGenerators,\r\n\t 'co*': checkGenerators,\r\n\t 'es7': checkAsyncFunction\r\n\t};\r\n\r\n\tvar TRANSPILE = {\r\n\t 'nodent': getNodent,\r\n\t 'regenerator': getRegenerator\r\n\t};\r\n\r\n\tvar MODES = [\r\n\t { async: 'co*' },\r\n\t { async: 'es7', transpile: 'nodent' },\r\n\t { async: 'co*', transpile: 'regenerator' }\r\n\t];\r\n\r\n\r\n\tvar regenerator, nodent;\r\n\r\n\r\n\tfunction setupAsync(opts, required) {\r\n\t if (required !== false) required = true;\r\n\t var async = opts.async\r\n\t , transpile = opts.transpile\r\n\t , check;\r\n\r\n\t switch (typeof transpile) {\r\n\t case 'string':\r\n\t var get = TRANSPILE[transpile];\r\n\t if (!get) throw new Error('bad transpiler: ' + transpile);\r\n\t return (opts._transpileFunc = get(opts, required));\r\n\t case 'undefined':\r\n\t case 'boolean':\r\n\t if (typeof async == 'string') {\r\n\t check = ASYNC[async];\r\n\t if (!check) throw new Error('bad async mode: ' + async);\r\n\t return (opts.transpile = check(opts, required));\r\n\t }\r\n\r\n\t for (var i=0; i 2) res = slice.call(arguments, 1);\r\n\t resolve(res);\r\n\t });\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an array of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Array} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction arrayToPromise(obj) {\r\n\t return Promise.all(obj.map(toPromise, this));\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an object of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction objectToPromise(obj){\r\n\t var results = new obj.constructor();\r\n\t var keys = Object.keys(obj);\r\n\t var promises = [];\r\n\t for (var i = 0; i < keys.length; i++) {\r\n\t var key = keys[i];\r\n\t var promise = toPromise.call(this, obj[key]);\r\n\t if (promise && isPromise(promise)) defer(promise, key);\r\n\t else results[key] = obj[key];\r\n\t }\r\n\t return Promise.all(promises).then(function () {\r\n\t return results;\r\n\t });\r\n\r\n\t function defer(promise, key) {\r\n\t // predefine the key in the result\r\n\t results[key] = undefined;\r\n\t promises.push(promise.then(function (res) {\r\n\t results[key] = res;\r\n\t }));\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a promise.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isPromise(obj) {\r\n\t return 'function' == typeof obj.then;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isGenerator(obj) {\r\n\t return 'function' == typeof obj.next && 'function' == typeof obj.throw;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator function.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\tfunction isGeneratorFunction(obj) {\r\n\t var constructor = obj.constructor;\r\n\t if (!constructor) return false;\r\n\t if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;\r\n\t return isGenerator(constructor.prototype);\r\n\t}\r\n\r\n\t/**\r\n\t * Check for plain object.\r\n\t *\r\n\t * @param {Mixed} val\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isObject(val) {\r\n\t return Object == val.constructor;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 20 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = ValidationError;\r\n\r\n\r\n\tfunction ValidationError(errors) {\r\n\t this.message = 'validation failed';\r\n\t this.errors = errors;\r\n\t this.ajv = this.validation = true;\r\n\t}\r\n\r\n\r\n\tValidationError.prototype = Object.create(Error.prototype);\r\n\tValidationError.prototype.constructor = ValidationError;\r\n\r\n\r\n/***/ },\r\n/* 21 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tvar Cache = module.exports = function Cache() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n\tCache.prototype.put = function Cache_put(key, value) {\r\n\t this._cache[key] = value;\r\n\t};\r\n\r\n\r\n\tCache.prototype.get = function Cache_get(key) {\r\n\t return this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.del = function Cache_del(key) {\r\n\t delete this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.clear = function Cache_clear() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 22 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar DATE = /^\\d\\d\\d\\d-(\\d\\d)-(\\d\\d)$/;\r\n\tvar DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31];\r\n\tvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d:\\d\\d)?$/i;\r\n\tvar HOSTNAME = /^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i;\r\n\tvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?(?:\\#(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?$/i;\r\n\tvar UUID = /^(?:urn\\:uuid\\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\r\n\tvar JSON_POINTER = /^(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?$|^\\#(?:\\/(?:[a-z0-9_\\-\\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\\/)?$/i;\r\n\tvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:\\#|(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?)$/;\r\n\r\n\r\n\tmodule.exports = formats;\r\n\r\n\tfunction formats(mode) {\r\n\t mode = mode == 'full' ? 'full' : 'fast';\r\n\t var formatDefs = util.copy(formats[mode]);\r\n\t for (var fName in formats.compare) {\r\n\t formatDefs[fName] = {\r\n\t validate: formatDefs[fName],\r\n\t compare: formats.compare[fName]\r\n\t };\r\n\t }\r\n\t return formatDefs;\r\n\t}\r\n\r\n\r\n\tformats.fast = {\r\n\t // date: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\r\n\t // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t time: /^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\r\n\t 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)$/i,\r\n\t // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\r\n\t uri: /^(?:[a-z][a-z0-9+-.]*)?(?:\\:|\\/)\\/?[^\\s]*$/i,\r\n\t // email (sources from jsen validator):\r\n\t // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\r\n\t // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\r\n\t email: /^[a-z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\r\n\t hostname: HOSTNAME,\r\n\t // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-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-f]{1,4}:){5}(?:(?:(?::[0-9a-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-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-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-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-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-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-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-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-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-f]{1,4}){1,7})|(?:(?::[0-9a-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}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t // uuid: http://tools.ietf.org/html/rfc4122\r\n\t uuid: UUID,\r\n\t // JSON-pointer: https://tools.ietf.org/html/rfc6901\r\n\t // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\r\n\t 'json-pointer': JSON_POINTER,\r\n\t // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.full = {\r\n\t date: date,\r\n\t time: time,\r\n\t 'date-time': date_time,\r\n\t uri: uri,\r\n\t email: /^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&''*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\r\n\t hostname: hostname,\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-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-f]{1,4}:){5}(?:(?:(?::[0-9a-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-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-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-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-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-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-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-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-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-f]{1,4}){1,7})|(?:(?::[0-9a-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}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t uuid: UUID,\r\n\t 'json-pointer': JSON_POINTER,\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.compare = {\r\n\t date: compareDate,\r\n\t time: compareTime,\r\n\t 'date-time': compareDateTime\r\n\t};\r\n\r\n\r\n\tfunction date(str) {\r\n\t // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var matches = str.match(DATE);\r\n\t if (!matches) return false;\r\n\r\n\t var month = +matches[1];\r\n\t var day = +matches[2];\r\n\t return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month];\r\n\t}\r\n\r\n\r\n\tfunction time(str, full) {\r\n\t var matches = str.match(TIME);\r\n\t if (!matches) return false;\r\n\r\n\t var hour = matches[1];\r\n\t var minute = matches[2];\r\n\t var second = matches[3];\r\n\t var timeZone = matches[5];\r\n\t return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone);\r\n\t}\r\n\r\n\r\n\tvar DATE_TIME_SEPARATOR = /t|\\s/i;\r\n\tfunction date_time(str) {\r\n\t // http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var dateTime = str.split(DATE_TIME_SEPARATOR);\r\n\t return date(dateTime[0]) && time(dateTime[1], true);\r\n\t}\r\n\r\n\r\n\tfunction hostname(str) {\r\n\t // http://tools.ietf.org/html/rfc1034#section-3.5\r\n\t return str.length <= 255 && HOSTNAME.test(str);\r\n\t}\r\n\r\n\r\n\tvar NOT_URI_FRAGMENT = /\\/|\\:/;\r\n\tfunction uri(str) {\r\n\t // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\r\n\t return NOT_URI_FRAGMENT.test(str) && URI.test(str);\r\n\t}\r\n\r\n\r\n\tfunction regex(str) {\r\n\t try {\r\n\t new RegExp(str);\r\n\t return true;\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction compareDate(d1, d2) {\r\n\t if (!(d1 && d2)) return;\r\n\t if (d1 > d2) return 1;\r\n\t if (d1 < d2) return -1;\r\n\t if (d1 === d2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareTime(t1, t2) {\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1.match(TIME);\r\n\t t2 = t2.match(TIME);\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1[1] + t1[2] + t1[3] + (t1[4]||'');\r\n\t t2 = t2[1] + t2[2] + t2[3] + (t2[4]||'');\r\n\t if (t1 > t2) return 1;\r\n\t if (t1 < t2) return -1;\r\n\t if (t1 === t2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareDateTime(dt1, dt2) {\r\n\t if (!(dt1 && dt2)) return;\r\n\t dt1 = dt1.split(DATE_TIME_SEPARATOR);\r\n\t dt2 = dt2.split(DATE_TIME_SEPARATOR);\r\n\t var res = compareDate(dt1[0], dt2[0]);\r\n\t if (res === undefined) return;\r\n\t return res || compareTime(dt1[1], dt2[1]);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 23 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ruleModules = __webpack_require__(24)\r\n\t , util = __webpack_require__(11);\r\n\r\n\tmodule.exports = function rules() {\r\n\t var RULES = [\r\n\t { type: 'number',\r\n\t rules: [ 'maximum', 'minimum', 'multipleOf'] },\r\n\t { type: 'string',\r\n\t rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\r\n\t { type: 'array',\r\n\t rules: [ 'maxItems', 'minItems', 'uniqueItems', 'items' ] },\r\n\t { type: 'object',\r\n\t rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'properties' ] },\r\n\t { rules: [ '$ref', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] }\r\n\t ];\r\n\r\n\t RULES.all = [ 'type', 'additionalProperties', 'patternProperties' ];\r\n\t RULES.keywords = [ 'additionalItems', '$schema', 'id', 'title', 'description', 'default' ];\r\n\t RULES.types = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\r\n\r\n\t RULES.forEach(function (group) {\r\n\t group.rules = group.rules.map(function (keyword) {\r\n\t RULES.all.push(keyword);\r\n\t return {\r\n\t keyword: keyword,\r\n\t code: ruleModules[keyword]\r\n\t };\r\n\t });\r\n\t });\r\n\r\n\t RULES.keywords = util.toHash(RULES.all.concat(RULES.keywords));\r\n\t RULES.all = util.toHash(RULES.all);\r\n\t RULES.types = util.toHash(RULES.types);\r\n\r\n\t return RULES;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 24 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\t//all requires must be explicit because browserify won't work with dynamic requires\r\n\tmodule.exports = {\r\n\t '$ref': __webpack_require__(25),\r\n\t allOf: __webpack_require__(26),\r\n\t anyOf: __webpack_require__(27),\r\n\t dependencies: __webpack_require__(28),\r\n\t enum: __webpack_require__(29),\r\n\t format: __webpack_require__(30),\r\n\t items: __webpack_require__(31),\r\n\t maximum: __webpack_require__(32),\r\n\t minimum: __webpack_require__(32),\r\n\t maxItems: __webpack_require__(33),\r\n\t minItems: __webpack_require__(33),\r\n\t maxLength: __webpack_require__(34),\r\n\t minLength: __webpack_require__(34),\r\n\t maxProperties: __webpack_require__(35),\r\n\t minProperties: __webpack_require__(35),\r\n\t multipleOf: __webpack_require__(36),\r\n\t not: __webpack_require__(37),\r\n\t oneOf: __webpack_require__(38),\r\n\t pattern: __webpack_require__(39),\r\n\t properties: __webpack_require__(40),\r\n\t required: __webpack_require__(41),\r\n\t uniqueItems: __webpack_require__(42),\r\n\t validate: __webpack_require__(18)\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 25 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_ref(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $async, $refCode;\r\n\t if ($schema == '#' || $schema == '#/') {\r\n\t if (it.isRoot) {\r\n\t $async = it.async;\r\n\t $refCode = 'validate';\r\n\t } else {\r\n\t $async = it.root.schema.$async === true;\r\n\t $refCode = 'root.refVal[0]';\r\n\t }\r\n\t } else {\r\n\t var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\r\n\t if ($refVal === undefined) {\r\n\t var $message = 'can\\'t resolve reference ' + $schema + ' from id ' + it.baseId;\r\n\t if (it.opts.missingRefs == 'fail') {\r\n\t console.log($message);\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t } else if (it.opts.missingRefs == 'ignore') {\r\n\t console.log($message);\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t } else {\r\n\t var $error = new Error($message);\r\n\t $error.missingRef = it.resolve.url(it.baseId, $schema);\r\n\t $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef));\r\n\t throw $error;\r\n\t }\r\n\t } else if ($refVal.inline) {\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t $it.schema = $refVal.schema;\r\n\t $it.schemaPath = '';\r\n\t $it.errSchemaPath = $schema;\r\n\t var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\r\n\t out += ' ' + ($code) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t }\r\n\t } else {\r\n\t $async = $refVal.async;\r\n\t $refCode = $refVal.code;\r\n\t }\r\n\t }\r\n\t if ($refCode) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = '';\r\n\t if (it.opts.passContext) {\r\n\t out += ' ' + ($refCode) + '.call(this, ';\r\n\t } else {\r\n\t out += ' ' + ($refCode) + '( ';\r\n\t }\r\n\t out += ' ' + ($data) + ', (dataPath || \\'\\')';\r\n\t if (it.errorPath != '\"\"') {\r\n\t out += ' + ' + (it.errorPath);\r\n\t }\r\n\t if ($dataLvl) {\r\n\t out += ' , data' + (($dataLvl - 1) || '') + ' , ' + (it.dataPathArr[$dataLvl]) + ' ';\r\n\t } else {\r\n\t out += ' , parentData , parentDataProperty ';\r\n\t }\r\n\t out += ') ';\r\n\t var __callValidate = out;\r\n\t out = $$outStack.pop();\r\n\t if ($async) {\r\n\t if (!it.async) throw new Error('async schema referenced by sync schema');\r\n\t out += ' try { ';\r\n\t if ($breakOnError) {\r\n\t out += 'var ' + ($valid) + ' =';\r\n\t }\r\n\t out += ' ' + (it.yieldAwait) + ' ' + (__callValidate) + '; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t }\r\n\t } else {\r\n\t out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 26 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_allOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces.slice(0, -1));\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 27 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_anyOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $noEmptySchema = $schema.every(function($sch) {\r\n\t return it.util.schemaHasRules($sch, it.RULES.all);\r\n\t });\r\n\t if ($noEmptySchema) {\r\n\t out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ' + ($valid) + ' = ' + ($valid) + ' || valid' + ($it.level) + '; if (!' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match some schema in anyOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 28 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_dependencies(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $schemaDeps = {},\r\n\t $propertyDeps = {};\r\n\t for ($property in $schema) {\r\n\t var $sch = $schema[$property];\r\n\t var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\r\n\t $deps[$property] = $sch;\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;';\r\n\t var $currentErrorPath = it.errorPath;\r\n\t out += 'var missing' + ($lvl) + ';';\r\n\t for (var $property in $propertyDeps) {\r\n\t $deps = $propertyDeps[$property];\r\n\t out += ' if (' + ($data) + (it.util.getProperty($property)) + ' !== undefined && ( ';\r\n\t var arr1 = $deps;\r\n\t if (arr1) {\r\n\t var _$property, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t _$property = arr1[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ')) { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have ';\r\n\t if ($deps.length == 1) {\r\n\t out += 'property ' + (it.util.escapeQuotes($deps[0]));\r\n\t } else {\r\n\t out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\r\n\t }\r\n\t out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t for (var $property in $schemaDeps) {\r\n\t var $sch = $schemaDeps[$property];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '[\\'' + ($property) + '\\'] !== undefined) { ';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + it.util.getProperty($property);\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\r\n\t out += ' ' + (it.validate($it)) + ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 29 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_enum(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $i = 'i' + $lvl;\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ';';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + ' ' + ($i) + ') { ';\r\n\t var $passData = $data + '[' + $i + ']';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\r\n\t $it.dataPathArr[$dataNxt] = $i;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) {\r\n\t $it.schema = $additionalItems;\r\n\t $it.schemaPath = it.schemaPath + '.additionalItems';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var i' + ($lvl) + ' = ' + ($schema.length) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t } else if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' for (var i' + ($lvl) + ' = ' + (0) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 32 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $isMax = $keyword == 'maximum',\r\n\t $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $notOp = $isMax ? '>' : '<';\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' var exclusive' + ($lvl) + '; if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && typeof ' + ($schemaValueExcl) + ' != \\'undefined\\') { ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else if( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ((exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ')) { var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t out += ' if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + ' ' + ($notOp);\r\n\t if ($exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' ' + ($schemaValue) + ') {';\r\n\t }\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 33 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxItems' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxItems') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' items\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 34 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitLength(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxLength' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t if (it.opts.unicode === false) {\r\n\t out += ' ' + ($data) + '.length ';\r\n\t } else {\r\n\t out += ' ucs2length(' + ($data) + ') ';\r\n\t }\r\n\t out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be ';\r\n\t if ($keyword == 'maxLength') {\r\n\t out += 'longer';\r\n\t } else {\r\n\t out += 'shorter';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' characters\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 35 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitProperties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxProperties' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxProperties') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 36 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_multipleOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t out += 'var division' + ($lvl) + ';if (';\r\n\t if ($isData) {\r\n\t out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\r\n\t }\r\n\t out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\r\n\t if (it.opts.multipleOfPrecision) {\r\n\t out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\r\n\t } else {\r\n\t out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\r\n\t }\r\n\t out += ' ) ';\r\n\t if ($isData) {\r\n\t out += ' ) ';\r\n\t }\r\n\t out += ' ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { multipleOf: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be multiple of ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 37 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_not(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t var $allErrorsOption;\r\n\t if ($it.opts.allErrors) {\r\n\t $allErrorsOption = $it.opts.allErrors;\r\n\t $it.opts.allErrors = false;\r\n\t }\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 38 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_oneOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t } else {\r\n\t out += ' var valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t if ($i) {\r\n\t out += ' if (valid' + ($it.level) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' if (valid' + ($it.level) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match exactly one schema in oneOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 39 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_pattern(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\r\n\t }\r\n\t out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { pattern: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match pattern \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 40 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_properties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $dataNxt = $it.dataLevel = it.dataLevel + 1,\r\n\t $nextData = 'data' + $dataNxt;\r\n\t var $schemaKeys = Object.keys($schema || {}),\r\n\t $pProperties = it.schema.patternProperties || {},\r\n\t $pPropertyKeys = Object.keys($pProperties),\r\n\t $aProperties = it.schema.additionalProperties,\r\n\t $someProperties = $schemaKeys.length || $pPropertyKeys.length,\r\n\t $noAdditional = $aProperties === false,\r\n\t $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\r\n\t $removeAdditional = it.opts.removeAdditional,\r\n\t $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional;\r\n\t var $required = it.schema.required;\r\n\t if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);\r\n\t if (it.opts.v5) {\r\n\t var $pgProperties = it.schema.patternGroups || {},\r\n\t $pgPropertyKeys = Object.keys($pgProperties);\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;var valid' + ($it.level) + ' = true;';\r\n\t if ($checkAdditional) {\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { ';\r\n\t if ($someProperties) {\r\n\t out += ' var isAdditional' + ($lvl) + ' = !(false ';\r\n\t if ($schemaKeys.length) {\r\n\t if ($schemaKeys.length > 5) {\r\n\t out += ' || validate.schema' + ($schemaPath) + '[key' + ($lvl) + '] ';\r\n\t } else {\r\n\t var arr1 = $schemaKeys;\r\n\t if (arr1) {\r\n\t var $propertyKey, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $propertyKey = arr1[i1 += 1];\r\n\t out += ' || key' + ($lvl) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($pPropertyKeys.length) {\r\n\t var arr2 = $pPropertyKeys;\r\n\t if (arr2) {\r\n\t var $pProperty, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t $pProperty = arr2[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length) {\r\n\t var arr3 = $pgPropertyKeys;\r\n\t if (arr3) {\r\n\t var $pgProperty, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $pgProperty = arr3[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += ' ); if (isAdditional' + ($lvl) + ') { ';\r\n\t }\r\n\t if ($removeAdditional == 'all') {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t var $currentErrorPath = it.errorPath;\r\n\t var $additionalProperty = '\\' + key' + $lvl + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t }\r\n\t if ($noAdditional) {\r\n\t if ($removeAdditional) {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t out += ' valid' + ($it.level) + ' = false; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t $errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have additional properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' break; ';\r\n\t }\r\n\t }\r\n\t } else if ($additionalIsSchema) {\r\n\t if ($removeAdditional == 'failing') {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' if (!valid' + ($it.level) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[key' + ($lvl) + ']; } ';\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t } else {\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t }\r\n\t if ($someProperties) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t var $useDefaults = it.opts.useDefaults && !it.compositeRule;\r\n\t if ($schemaKeys.length) {\r\n\t var arr4 = $schemaKeys;\r\n\t if (arr4) {\r\n\t var $propertyKey, i4 = -1,\r\n\t l4 = arr4.length - 1;\r\n\t while (i4 < l4) {\r\n\t $propertyKey = arr4[i4 += 1];\r\n\t var $sch = $schema[$propertyKey];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t var $prop = it.util.getProperty($propertyKey),\r\n\t $passData = $data + $prop,\r\n\t $hasDefault = $useDefaults && $sch.default !== undefined;\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + $prop;\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\r\n\t $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\r\n\t $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t $code = it.util.varReplace($code, $nextData, $passData);\r\n\t var $useData = $passData;\r\n\t } else {\r\n\t var $useData = $nextData;\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\r\n\t }\r\n\t if ($hasDefault) {\r\n\t out += ' ' + ($code) + ' ';\r\n\t } else {\r\n\t if ($requiredHash && $requiredHash[$propertyKey]) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = false; ';\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $currErrSchemaPath = $errSchemaPath,\r\n\t $missingProperty = it.util.escapeQuotes($propertyKey);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\r\n\t }\r\n\t $errSchemaPath = it.errSchemaPath + '/required';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t it.errorPath = $currentErrorPath;\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = true; } else { ';\r\n\t } else {\r\n\t out += ' if (' + ($useData) + ' !== undefined) { ';\r\n\t }\r\n\t }\r\n\t out += ' ' + ($code) + ' } ';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t var arr5 = $pPropertyKeys;\r\n\t if (arr5) {\r\n\t var $pProperty, i5 = -1,\r\n\t l5 = arr5.length - 1;\r\n\t while (i5 < l5) {\r\n\t $pProperty = arr5[i5 += 1];\r\n\t var $sch = $pProperties[$pProperty];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ')) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5) {\r\n\t var arr6 = $pgPropertyKeys;\r\n\t if (arr6) {\r\n\t var $pgProperty, i6 = -1,\r\n\t l6 = arr6.length - 1;\r\n\t while (i6 < l6) {\r\n\t $pgProperty = arr6[i6 += 1];\r\n\t var $pgSchema = $pgProperties[$pgProperty],\r\n\t $sch = $pgSchema.schema;\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema';\r\n\t out += ' var pgPropCount' + ($lvl) + ' = 0; for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ')) { pgPropCount' + ($lvl) + '++; ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t var $pgMin = $pgSchema.minimum,\r\n\t $pgMax = $pgSchema.maximum;\r\n\t if ($pgMin !== undefined || $pgMax !== undefined) {\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t if ($pgMin !== undefined) {\r\n\t var $limit = $pgMin,\r\n\t $reason = 'minimum',\r\n\t $moreOrLess = 'less';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($pgMax !== undefined) {\r\n\t out += ' else ';\r\n\t }\r\n\t }\r\n\t if ($pgMax !== undefined) {\r\n\t var $limit = $pgMax,\r\n\t $reason = 'maximum',\r\n\t $moreOrLess = 'more';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 41 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_required(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\r\n\t var $required = [];\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $property, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $property = arr1[i1 += 1];\r\n\t var $propertySch = it.schema.properties[$property];\r\n\t if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) {\r\n\t $required[$required.length] = $property;\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t var $required = $schema;\r\n\t }\r\n\t }\r\n\t if ($isData || $required.length) {\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $loopRequired = $isData || $required.length >= it.opts.loopRequired;\r\n\t if ($breakOnError) {\r\n\t out += ' var missing' + ($lvl) + '; ';\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] !== undefined; if (!' + ($valid) + ') break; } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t out += ' if ( ';\r\n\t var arr2 = $required;\r\n\t if (arr2) {\r\n\t var _$property, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t _$property = arr2[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ') { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t }\r\n\t } else {\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' && !Array.isArray(schema' + ($lvl) + ')) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema' + ($lvl) + ' !== undefined) { ';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { if (' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t var arr3 = $required;\r\n\t if (arr3) {\r\n\t var $property, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $property = arr3[$i += 1];\r\n\t var $prop = it.util.getProperty($property),\r\n\t $missingProperty = it.util.escapeQuotes($property);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $property, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' if (' + ($data) + ($prop) + ' === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t } else if ($breakOnError) {\r\n\t out += ' if (true) {';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 42 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_uniqueItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (($schema || $isData) && it.opts.uniqueItems !== false) {\r\n\t if ($isData) {\r\n\t out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { i: i, j: j } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 43 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar META_SCHEMA_ID = 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json';\r\n\r\n\tmodule.exports = {\r\n\t enable: enableV5,\r\n\t META_SCHEMA_ID: META_SCHEMA_ID\r\n\t};\r\n\r\n\r\n\tfunction enableV5(ajv) {\r\n\t var inlineFunctions = {\r\n\t 'switch': __webpack_require__(44),\r\n\t 'constant': __webpack_require__(45),\r\n\t '_formatLimit': __webpack_require__(46),\r\n\t 'patternRequired': __webpack_require__(47)\r\n\t };\r\n\r\n\t if (ajv._opts.meta !== false) {\r\n\t var metaSchema = __webpack_require__(48);\r\n\t ajv.addMetaSchema(metaSchema, META_SCHEMA_ID);\r\n\t }\r\n\t _addKeyword('constant');\r\n\t ajv.addKeyword('contains', { type: 'array', macro: containsMacro });\r\n\r\n\t _addKeyword('formatMaximum', 'string', inlineFunctions._formatLimit);\r\n\t _addKeyword('formatMinimum', 'string', inlineFunctions._formatLimit);\r\n\t ajv.addKeyword('exclusiveFormatMaximum');\r\n\t ajv.addKeyword('exclusiveFormatMinimum');\r\n\r\n\t ajv.addKeyword('patternGroups'); // implemented in properties.jst\r\n\t _addKeyword('patternRequired', 'object');\r\n\t _addKeyword('switch');\r\n\r\n\r\n\t function _addKeyword(keyword, types, inlineFunc) {\r\n\t var definition = {\r\n\t inline: inlineFunc || inlineFunctions[keyword],\r\n\t statements: true,\r\n\t errors: 'full'\r\n\t };\r\n\t if (types) definition.type = types;\r\n\t ajv.addKeyword(keyword, definition);\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction containsMacro(schema) {\r\n\t return {\r\n\t not: { items: { not: schema } }\r\n\t };\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 44 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_switch(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $ifPassed = 'ifPassed' + it.level,\r\n\t $shouldContinue;\r\n\t out += 'var ' + ($ifPassed) + ';';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $caseIndex = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($caseIndex < l1) {\r\n\t $sch = arr1[$caseIndex += 1];\r\n\t if ($caseIndex && !$shouldContinue) {\r\n\t out += ' if (!' + ($ifPassed) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t $it.schema = $sch.if;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($ifPassed) + ' = valid' + ($it.level) + '; if (' + ($ifPassed) + ') { ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } ';\r\n\t } else {\r\n\t out += ' ' + ($ifPassed) + ' = true; ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t }\r\n\t $shouldContinue = $sch.continue\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces) + 'var ' + ($valid) + ' = valid' + ($it.level) + '; ';\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 45 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_constant(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'constant') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be equal to constant\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' }';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 46 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__formatLimit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t out += 'var ' + ($valid) + ' = undefined;';\r\n\t if (it.opts.format === false) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $schemaFormat = it.schema.format,\r\n\t $isDataFormat = it.opts.v5 && $schemaFormat.$data,\r\n\t $closingBraces = '';\r\n\t if ($isDataFormat) {\r\n\t var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr),\r\n\t $format = 'format' + $lvl,\r\n\t $compare = 'compare' + $lvl;\r\n\t out += ' var ' + ($format) + ' = formats[' + ($schemaValueFormat) + '] , ' + ($compare) + ' = ' + ($format) + ' && ' + ($format) + '.compare;';\r\n\t } else {\r\n\t var $format = it.formats[$schemaFormat];\r\n\t if (!($format && $format.compare)) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare';\r\n\t }\r\n\t var $isMax = $keyword == 'formatMaximum',\r\n\t $exclusiveKeyword = 'exclusiveFormat' + ($isMax ? 'Maximum' : 'Minimum'),\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $result = 'result' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveFormatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = exclusive' + ($lvl) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op);\r\n\t if (!$exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' 0;';\r\n\t }\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_formatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '}';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 47 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_patternRequired(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $key = 'key' + $lvl,\r\n\t $matched = 'patternMatched' + $lvl,\r\n\t $closingBraces = '';\r\n\t out += 'var ' + ($valid) + ' = true;';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $pProperty, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $pProperty = arr1[i1 += 1];\r\n\t out += ' var ' + ($matched) + ' = false; for (var ' + ($key) + ' in ' + ($data) + ') { ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } ';\r\n\t var $missingPattern = it.util.escapeQuotes($pProperty);\r\n\t out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternRequired') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingPattern: \\'' + ($missingPattern) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have property matching pattern \\\\\\'' + ($missingPattern) + '\\\\\\'\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 48 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = {\r\n\t\t\"id\": \"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#\",\r\n\t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n\t\t\"description\": \"Core schema meta-schema (v5 proposals)\",\r\n\t\t\"definitions\": {\r\n\t\t\t\"schemaArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"positiveInteger\": {\r\n\t\t\t\t\"type\": \"integer\",\r\n\t\t\t\t\"minimum\": 0\r\n\t\t\t},\r\n\t\t\t\"positiveIntegerDefault0\": {\r\n\t\t\t\t\"allOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"default\": 0\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"simpleTypes\": {\r\n\t\t\t\t\"enum\": [\r\n\t\t\t\t\t\"array\",\r\n\t\t\t\t\t\"boolean\",\r\n\t\t\t\t\t\"integer\",\r\n\t\t\t\t\t\"null\",\r\n\t\t\t\t\t\"number\",\r\n\t\t\t\t\t\"object\",\r\n\t\t\t\t\t\"string\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"stringArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t},\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"uniqueItems\": true\r\n\t\t\t},\r\n\t\t\t\"$data\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"required\": [\r\n\t\t\t\t\t\"$data\"\r\n\t\t\t\t],\r\n\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\"$data\": {\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"relative-json-pointer\"\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"additionalProperties\": false\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"type\": \"object\",\r\n\t\t\"properties\": {\r\n\t\t\t\"id\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"$schema\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"title\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"description\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"default\": {},\r\n\t\t\t\"multipleOf\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\",\r\n\t\t\t\t\t\t\"minimum\": 0,\r\n\t\t\t\t\t\t\"exclusiveMinimum\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"pattern\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"regex\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"items\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"maxItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"uniqueItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"required\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"definitions\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"properties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"patternProperties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"dependencies\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"enum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"type\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"items\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"allOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"anyOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"oneOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"not\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"format\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"constant\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"contains\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"patternGroups\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"schema\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"maximum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minimum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"schema\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"switch\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"then\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"if\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"then\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"continue\": {\r\n\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false,\r\n\t\t\t\t\t\"dependencies\": {\r\n\t\t\t\t\t\t\"continue\": [\r\n\t\t\t\t\t\t\t\"if\"\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"dependencies\": {\r\n\t\t\t\"exclusiveMaximum\": [\r\n\t\t\t\t\"maximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveMinimum\": [\r\n\t\t\t\t\"minimum\"\r\n\t\t\t],\r\n\t\t\t\"formatMaximum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"formatMinimum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMaximum\": [\r\n\t\t\t\t\"formatMaximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMinimum\": [\r\n\t\t\t\t\"formatMinimum\"\r\n\t\t\t]\r\n\t\t},\r\n\t\t\"default\": {}\r\n\t};\r\n\r\n/***/ },\r\n/* 49 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tvar IDENTIFIER = /^[a-z_$][a-z0-9_$]*$/i;\r\n\r\n\t/**\r\n\t * Define custom keyword\r\n\t * @this Ajv\r\n\t * @param {String} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords.\r\n\t * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\r\n\t */\r\n\tmodule.exports = function addKeyword(keyword, definition) {\r\n\t /* eslint no-shadow: 0 */\r\n\t var self = this;\r\n\t if (this.RULES.keywords[keyword])\r\n\t throw new Error('Keyword ' + keyword + ' is already defined');\r\n\r\n\t if (!IDENTIFIER.test(keyword))\r\n\t throw new Error('Keyword ' + keyword + ' is not a valid identifier');\r\n\r\n\t if (definition) {\r\n\t var dataType = definition.type;\r\n\t if (Array.isArray(dataType)) {\r\n\t var i, len = dataType.length;\r\n\t for (i=0; i 0) {\r\n\t this.autoScrollStep = ((top + margin) - mouseY) / 3;\r\n\t }\r\n\t else if (mouseY > bottom - margin &&\r\n\t height + content.scrollTop < content.scrollHeight) {\r\n\t this.autoScrollStep = ((bottom - margin) - mouseY) / 3;\r\n\t }\r\n\t else {\r\n\t this.autoScrollStep = undefined;\r\n\t }\r\n\r\n\t if (this.autoScrollStep) {\r\n\t if (!this.autoScrollTimer) {\r\n\t this.autoScrollTimer = setInterval(function () {\r\n\t if (me.autoScrollStep) {\r\n\t content.scrollTop -= me.autoScrollStep;\r\n\t }\r\n\t else {\r\n\t me.stopAutoScroll();\r\n\t }\r\n\t }, interval);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.stopAutoScroll();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Stop auto scrolling. Only applicable when scrolling\r\n\t */\r\n\ttreemode.stopAutoScroll = function () {\r\n\t if (this.autoScrollTimer) {\r\n\t clearTimeout(this.autoScrollTimer);\r\n\t delete this.autoScrollTimer;\r\n\t }\r\n\t if (this.autoScrollStep) {\r\n\t delete this.autoScrollStep;\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Set the focus to an element in the editor, set text selection, and\r\n\t * set scroll position.\r\n\t * @param {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.setSelection = function (selection) {\r\n\t if (!selection) {\r\n\t return;\r\n\t }\r\n\r\n\t if ('scrollTop' in selection && this.content) {\r\n\t // TODO: animated scroll\r\n\t this.content.scrollTop = selection.scrollTop;\r\n\t }\r\n\t if (selection.nodes) {\r\n\t // multi-select\r\n\t this.select(selection.nodes);\r\n\t }\r\n\t if (selection.range) {\r\n\t util.setSelectionOffset(selection.range);\r\n\t }\r\n\t if (selection.dom) {\r\n\t selection.dom.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current focus\r\n\t * @return {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.getSelection = function () {\r\n\t var range = util.getSelectionOffset();\r\n\t if (range && range.container.nodeName !== 'DIV') { // filter on (editable) divs)\r\n\t range = null;\r\n\t }\r\n\r\n\t return {\r\n\t dom: this.focusTarget,\r\n\t range: range,\r\n\t nodes: this.multiselection.nodes.slice(0),\r\n\t scrollTop: this.content ? this.content.scrollTop : 0\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Adjust the scroll position such that given top position is shown at 1/4\r\n\t * of the window height.\r\n\t * @param {Number} top\r\n\t * @param {function(boolean)} [callback] Callback, executed when animation is\r\n\t * finished. The callback returns true\r\n\t * when animation is finished, or false\r\n\t * when not.\r\n\t */\r\n\ttreemode.scrollTo = function (top, callback) {\r\n\t var content = this.content;\r\n\t if (content) {\r\n\t var editor = this;\r\n\t // cancel any running animation\r\n\t if (editor.animateTimeout) {\r\n\t clearTimeout(editor.animateTimeout);\r\n\t delete editor.animateTimeout;\r\n\t }\r\n\t if (editor.animateCallback) {\r\n\t editor.animateCallback(false);\r\n\t delete editor.animateCallback;\r\n\t }\r\n\r\n\t // calculate final scroll position\r\n\t var height = content.clientHeight;\r\n\t var bottom = content.scrollHeight - height;\r\n\t var finalScrollTop = Math.min(Math.max(top - height / 4, 0), bottom);\r\n\r\n\t // animate towards the new scroll position\r\n\t var animate = function () {\r\n\t var scrollTop = content.scrollTop;\r\n\t var diff = (finalScrollTop - scrollTop);\r\n\t if (Math.abs(diff) > 3) {\r\n\t content.scrollTop += diff / 3;\r\n\t editor.animateCallback = callback;\r\n\t editor.animateTimeout = setTimeout(animate, 50);\r\n\t }\r\n\t else {\r\n\t // finished\r\n\t if (callback) {\r\n\t callback(true);\r\n\t }\r\n\t content.scrollTop = finalScrollTop;\r\n\t delete editor.animateTimeout;\r\n\t delete editor.animateCallback;\r\n\t }\r\n\t };\r\n\t animate();\r\n\t }\r\n\t else {\r\n\t if (callback) {\r\n\t callback(false);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main frame\r\n\t * @private\r\n\t */\r\n\ttreemode._createFrame = function () {\r\n\t // create the frame\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t // create one global event listener to handle all events from all nodes\r\n\t var editor = this;\r\n\t function onEvent(event) {\r\n\t // when switching to mode \"code\" or \"text\" via the menu, some events\r\n\t // are still fired whilst the _onEvent methods is already removed.\r\n\t if (editor._onEvent) {\r\n\t editor._onEvent(event);\r\n\t }\r\n\t }\r\n\t this.frame.onclick = function (event) {\r\n\t var target = event.target;// || event.srcElement;\r\n\r\n\t onEvent(event);\r\n\r\n\t // prevent default submit action of buttons when editor is located\r\n\t // inside a form\r\n\t if (target.nodeName == 'BUTTON') {\r\n\t event.preventDefault();\r\n\t }\r\n\t };\r\n\t this.frame.oninput = onEvent;\r\n\t this.frame.onchange = onEvent;\r\n\t this.frame.onkeydown = onEvent;\r\n\t this.frame.onkeyup = onEvent;\r\n\t this.frame.oncut = onEvent;\r\n\t this.frame.onpaste = onEvent;\r\n\t this.frame.onmousedown = onEvent;\r\n\t this.frame.onmouseup = onEvent;\r\n\t this.frame.onmouseover = onEvent;\r\n\t this.frame.onmouseout = onEvent;\r\n\t // Note: focus and blur events do not propagate, therefore they defined\r\n\t // using an eventListener with useCapture=true\r\n\t // see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\r\n\t util.addEventListener(this.frame, 'focus', onEvent, true);\r\n\t util.addEventListener(this.frame, 'blur', onEvent, true);\r\n\t this.frame.onfocusin = onEvent; // for IE\r\n\t this.frame.onfocusout = onEvent; // for IE\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create expand all button\r\n\t var expandAll = document.createElement('button');\r\n\t expandAll.type = 'button';\r\n\t expandAll.className = 'jsoneditor-expand-all';\r\n\t expandAll.title = 'Expand all fields';\r\n\t expandAll.onclick = function () {\r\n\t editor.expandAll();\r\n\t };\r\n\t this.menu.appendChild(expandAll);\r\n\r\n\t // create expand all button\r\n\t var collapseAll = document.createElement('button');\r\n\t collapseAll.type = 'button';\r\n\t collapseAll.title = 'Collapse all fields';\r\n\t collapseAll.className = 'jsoneditor-collapse-all';\r\n\t collapseAll.onclick = function () {\r\n\t editor.collapseAll();\r\n\t };\r\n\t this.menu.appendChild(collapseAll);\r\n\r\n\t // create undo/redo buttons\r\n\t if (this.history) {\r\n\t // create undo button\r\n\t var undo = document.createElement('button');\r\n\t undo.type = 'button';\r\n\t undo.className = 'jsoneditor-undo jsoneditor-separator';\r\n\t undo.title = 'Undo last action (Ctrl+Z)';\r\n\t undo.onclick = function () {\r\n\t editor._onUndo();\r\n\t };\r\n\t this.menu.appendChild(undo);\r\n\t this.dom.undo = undo;\r\n\r\n\t // create redo button\r\n\t var redo = document.createElement('button');\r\n\t redo.type = 'button';\r\n\t redo.className = 'jsoneditor-redo';\r\n\t redo.title = 'Redo (Ctrl+Shift+Z)';\r\n\t redo.onclick = function () {\r\n\t editor._onRedo();\r\n\t };\r\n\t this.menu.appendChild(redo);\r\n\t this.dom.redo = redo;\r\n\r\n\t // register handler for onchange of history\r\n\t this.history.onChange = function () {\r\n\t undo.disabled = !editor.history.canUndo();\r\n\t redo.disabled = !editor.history.canRedo();\r\n\t };\r\n\t this.history.onChange();\r\n\t }\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t var me = this;\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t me.modeSwitcher.destroy();\r\n\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t // create search box\r\n\t if (this.options.search) {\r\n\t this.searchBox = new SearchBox(this, this.menu);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform an undo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onUndo = function () {\r\n\t if (this.history) {\r\n\t // undo last action\r\n\t this.history.undo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform a redo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onRedo = function () {\r\n\t if (this.history) {\r\n\t // redo last action\r\n\t this.history.redo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onEvent = function (event) {\r\n\t if (event.type == 'keydown') {\r\n\t this._onKeyDown(event);\r\n\t }\r\n\r\n\t if (event.type == 'focus') {\r\n\t this.focusTarget = event.target;\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\t if (event.type == 'mousemove' || event.type == 'mouseup' || event.type == 'click') {\r\n\t this._updateDragDistance(event);\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node && node.selected) {\r\n\t if (event.type == 'click') {\r\n\t if (event.target == node.dom.menu) {\r\n\t this.showContextMenu(event.target);\r\n\r\n\t // stop propagation (else we will open the context menu of a single node)\r\n\t return;\r\n\t }\r\n\r\n\t // deselect a multi selection\r\n\t if (!event.hasMoved) {\r\n\t this.deselect();\r\n\t }\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t // drag multiple nodes\r\n\t Node.onDragStart(this.multiselection.nodes, event);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (event.type == 'mousedown') {\r\n\t this.deselect();\r\n\r\n\t if (node && event.target == node.dom.drag) {\r\n\t // drag a singe node\r\n\t Node.onDragStart(node, event);\r\n\t }\r\n\t else if (!node || (event.target != node.dom.field && event.target != node.dom.value && event.target != node.dom.select)) {\r\n\t // select multiple nodes\r\n\t this._onMultiSelectStart(event);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (node) {\r\n\t node.onEvent(event);\r\n\t }\r\n\t};\r\n\r\n\ttreemode._startDragDistance = function (event) {\r\n\t this.dragDistanceEvent = {\r\n\t initialTarget: event.target,\r\n\t initialPageX: event.pageX,\r\n\t initialPageY: event.pageY,\r\n\t dragDistance: 0,\r\n\t hasMoved: false\r\n\t };\r\n\t};\r\n\r\n\ttreemode._updateDragDistance = function (event) {\r\n\t if (!this.dragDistanceEvent) {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\r\n\t var diffX = event.pageX - this.dragDistanceEvent.initialPageX;\r\n\t var diffY = event.pageY - this.dragDistanceEvent.initialPageY;\r\n\r\n\t this.dragDistanceEvent.dragDistance = Math.sqrt(diffX * diffX + diffY * diffY);\r\n\t this.dragDistanceEvent.hasMoved =\r\n\t this.dragDistanceEvent.hasMoved || this.dragDistanceEvent.dragDistance > 10;\r\n\r\n\t event.dragDistance = this.dragDistanceEvent.dragDistance;\r\n\t event.hasMoved = this.dragDistanceEvent.hasMoved;\r\n\r\n\t return event.dragDistance;\r\n\t};\r\n\r\n\t/**\r\n\t * Start multi selection of nodes by dragging the mouse\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectStart = function (event) {\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (this.options.mode !== 'tree' || this.options.onEditable !== undefined) {\r\n\t // dragging not allowed in modes 'view' and 'form'\r\n\t // TODO: allow multiselection of items when option onEditable is specified\r\n\t return;\r\n\t }\r\n\r\n\t this.multiselection = {\r\n\t start: node || null,\r\n\t end: null,\r\n\t nodes: []\r\n\t };\r\n\r\n\t this._startDragDistance(event);\r\n\r\n\t var editor = this;\r\n\t if (!this.mousemove) {\r\n\t this.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t editor._onMultiSelect(event);\r\n\t });\r\n\t }\r\n\t if (!this.mouseup) {\r\n\t this.mouseup = util.addEventListener(window, 'mouseup', function (event ) {\r\n\t editor._onMultiSelectEnd(event);\r\n\t });\r\n\t }\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelect = function (event) {\r\n\t event.preventDefault();\r\n\r\n\t this._updateDragDistance(event);\r\n\t if (!event.hasMoved) {\r\n\t return;\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node) {\r\n\t if (this.multiselection.start == null) {\r\n\t this.multiselection.start = node;\r\n\t }\r\n\t this.multiselection.end = node;\r\n\t }\r\n\r\n\t // deselect previous selection\r\n\t this.deselect();\r\n\r\n\t // find the selected nodes in the range from first to last\r\n\t var start = this.multiselection.start;\r\n\t var end = this.multiselection.end || this.multiselection.start;\r\n\t if (start && end) {\r\n\t // find the top level childs, all having the same parent\r\n\t this.multiselection.nodes = this._findTopLevelNodes(start, end);\r\n\t this.select(this.multiselection.nodes);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * End of multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectEnd = function (event) {\r\n\t // set focus to the context menu button of the first node\r\n\t if (this.multiselection.nodes[0]) {\r\n\t this.multiselection.nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\r\n\t // cleanup global event listeners\r\n\t if (this.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', this.mousemove);\r\n\t delete this.mousemove;\r\n\t }\r\n\t if (this.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', this.mouseup);\r\n\t delete this.mouseup;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * deselect currently selected nodes\r\n\t * @param {boolean} [clearStartAndEnd=false] If true, the `start` and `end`\r\n\t * state is cleared too.\r\n\t */\r\n\ttreemode.deselect = function (clearStartAndEnd) {\r\n\t this.multiselection.nodes.forEach(function (node) {\r\n\t node.setSelected(false);\r\n\t });\r\n\t this.multiselection.nodes = [];\r\n\r\n\t if (clearStartAndEnd) {\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * select nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\ttreemode.select = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return this.select([nodes]);\r\n\t }\r\n\r\n\t if (nodes) {\r\n\t this.deselect();\r\n\r\n\t this.multiselection.nodes = nodes.slice(0);\r\n\r\n\t var first = nodes[0];\r\n\t nodes.forEach(function (node) {\r\n\t node.setSelected(true, node === first);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * From two arbitrary selected nodes, find their shared parent node.\r\n\t * From that parent node, select the two child nodes in the brances going to\r\n\t * nodes `start` and `end`, and select all childs in between.\r\n\t * @param {Node} start\r\n\t * @param {Node} end\r\n\t * @return {Array.} Returns an ordered list with child nodes\r\n\t * @private\r\n\t */\r\n\ttreemode._findTopLevelNodes = function (start, end) {\r\n\t var startPath = start.getNodePath();\r\n\t var endPath = end.getNodePath();\r\n\t var i = 0;\r\n\t while (i < startPath.length && startPath[i] === endPath[i]) {\r\n\t i++;\r\n\t }\r\n\t var root = startPath[i - 1];\r\n\t var startChild = startPath[i];\r\n\t var endChild = endPath[i];\r\n\r\n\t if (!startChild || !endChild) {\r\n\t if (root.parent) {\r\n\t // startChild is a parent of endChild or vice versa\r\n\t startChild = root;\r\n\t endChild = root;\r\n\t root = root.parent\r\n\t }\r\n\t else {\r\n\t // we have selected the root node (which doesn't have a parent)\r\n\t startChild = root.childs[0];\r\n\t endChild = root.childs[root.childs.length - 1];\r\n\t }\r\n\t }\r\n\r\n\t if (root && startChild && endChild) {\r\n\t var startIndex = root.childs.indexOf(startChild);\r\n\t var endIndex = root.childs.indexOf(endChild);\r\n\t var firstIndex = Math.min(startIndex, endIndex);\r\n\t var lastIndex = Math.max(startIndex, endIndex);\r\n\r\n\t return root.childs.slice(firstIndex, lastIndex + 1);\r\n\t }\r\n\t else {\r\n\t return [];\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttreemode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 9) { // Tab or Shift+Tab\r\n\t var me = this;\r\n\t setTimeout(function () {\r\n\t // select all text when moving focus to an editable div\r\n\t util.selectContentEditable(me.focusTarget);\r\n\t }, 0);\r\n\t }\r\n\r\n\t if (this.searchBox) {\r\n\t if (ctrlKey && keynum == 70) { // Ctrl+F\r\n\t this.searchBox.dom.search.focus();\r\n\t this.searchBox.dom.search.select();\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 114 || (ctrlKey && keynum == 71)) { // F3 or Ctrl+G\r\n\t var focus = true;\r\n\t if (!shiftKey) {\r\n\t // select next search result (F3 or Ctrl+G)\r\n\t this.searchBox.next(focus);\r\n\t }\r\n\t else {\r\n\t // select previous search result (Shift+F3 or Ctrl+Shift+G)\r\n\t this.searchBox.previous(focus);\r\n\t }\r\n\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (this.history) {\r\n\t if (ctrlKey && !shiftKey && keynum == 90) { // Ctrl+Z\r\n\t // undo\r\n\t this._onUndo();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey && keynum == 90) { // Ctrl+Shift+Z\r\n\t // redo\r\n\t this._onRedo();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main table\r\n\t * @private\r\n\t */\r\n\ttreemode._createTable = function () {\r\n\t var contentOuter = document.createElement('div');\r\n\t contentOuter.className = 'jsoneditor-outer';\r\n\t this.contentOuter = contentOuter;\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-tree';\r\n\t contentOuter.appendChild(this.content);\r\n\r\n\t this.table = document.createElement('table');\r\n\t this.table.className = 'jsoneditor-tree';\r\n\t this.content.appendChild(this.table);\r\n\r\n\t // create colgroup where the first two columns don't have a fixed\r\n\t // width, and the edit columns do have a fixed width\r\n\t var col;\r\n\t this.colgroupContent = document.createElement('colgroup');\r\n\t if (this.options.mode === 'tree') {\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t }\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t col = document.createElement('col');\r\n\t this.colgroupContent.appendChild(col);\r\n\t this.table.appendChild(this.colgroupContent);\r\n\r\n\t this.tbody = document.createElement('tbody');\r\n\t this.table.appendChild(this.tbody);\r\n\r\n\t this.frame.appendChild(contentOuter);\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node.\r\n\t * Used for multiselection\r\n\t * @param {HTMLElement} anchor Anchor element to attache the context menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\ttreemode.showContextMenu = function (anchor, onClose) {\r\n\t var items = [];\r\n\t var editor = this;\r\n\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate selected fields (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove selected fields (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.content);\r\n\t};\r\n\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'tree',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'view',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'form',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 52 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * The highlighter can highlight/unhighlight a node, and\r\n\t * animate the visibility of a context menu.\r\n\t * @constructor Highlighter\r\n\t */\r\n\tfunction Highlighter () {\r\n\t this.locked = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Hightlight given node and its childs\r\n\t * @param {Node} node\r\n\t */\r\n\tHighlighter.prototype.highlight = function (node) {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t if (this.node != node) {\r\n\t // unhighlight current node\r\n\t if (this.node) {\r\n\t this.node.setHighlight(false);\r\n\t }\r\n\r\n\t // highlight new node\r\n\t this.node = node;\r\n\t this.node.setHighlight(true);\r\n\t }\r\n\r\n\t // cancel any current timeout\r\n\t this._cancelUnhighlight();\r\n\t};\r\n\r\n\t/**\r\n\t * Unhighlight currently highlighted node.\r\n\t * Will be done after a delay\r\n\t */\r\n\tHighlighter.prototype.unhighlight = function () {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t var me = this;\r\n\t if (this.node) {\r\n\t this._cancelUnhighlight();\r\n\r\n\t // do the unhighlighting after a small delay, to prevent re-highlighting\r\n\t // the same node when moving from the drag-icon to the contextmenu-icon\r\n\t // or vice versa.\r\n\t this.unhighlightTimer = setTimeout(function () {\r\n\t me.node.setHighlight(false);\r\n\t me.node = undefined;\r\n\t me.unhighlightTimer = undefined;\r\n\t }, 0);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel an unhighlight action (if before the timeout of the unhighlight action)\r\n\t * @private\r\n\t */\r\n\tHighlighter.prototype._cancelUnhighlight = function () {\r\n\t if (this.unhighlightTimer) {\r\n\t clearTimeout(this.unhighlightTimer);\r\n\t this.unhighlightTimer = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Lock highlighting or unhighlighting nodes.\r\n\t * methods highlight and unhighlight do not work while locked.\r\n\t */\r\n\tHighlighter.prototype.lock = function () {\r\n\t this.locked = true;\r\n\t};\r\n\r\n\t/**\r\n\t * Unlock highlighting or unhighlighting nodes\r\n\t */\r\n\tHighlighter.prototype.unlock = function () {\r\n\t this.locked = false;\r\n\t};\r\n\r\n\tmodule.exports = Highlighter;\r\n\r\n\r\n/***/ },\r\n/* 53 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor History\r\n\t * Store action history, enables undo and redo\r\n\t * @param {JSONEditor} editor\r\n\t */\r\n\tfunction History (editor) {\r\n\t this.editor = editor;\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t this.clear();\r\n\r\n\t // map with all supported actions\r\n\t this.actions = {\r\n\t 'editField': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateField(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateField(params.newValue);\r\n\t }\r\n\t },\r\n\t 'editValue': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateValue(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateValue(params.newValue);\r\n\t }\r\n\t },\r\n\t 'changeType': {\r\n\t 'undo': function (params) {\r\n\t params.node.changeType(params.oldType);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.changeType(params.newType);\r\n\t }\r\n\t },\r\n\r\n\t 'appendNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.appendChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertBeforeNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertBefore(node, params.beforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertAfterNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(params.node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'removeNodes': {\r\n\t 'undo': function (params) {\r\n\t var parent = params.parent;\r\n\t var beforeNode = parent.childs[params.index] || parent.append;\r\n\t params.nodes.forEach(function (node) {\r\n\t parent.insertBefore(node, beforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'duplicateNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'moveNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.oldBeforeNode.parent.moveBefore(node, params.oldBeforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.newBeforeNode.parent.moveBefore(node, params.newBeforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\r\n\t 'sort': {\r\n\t 'undo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.oldSort;\r\n\t node.childs = params.oldChilds;\r\n\t node.showChilds();\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.newSort;\r\n\t node.childs = params.newChilds;\r\n\t node.showChilds();\r\n\t }\r\n\t }\r\n\r\n\t // TODO: restore the original caret position and selection with each undo\r\n\t // TODO: implement history for actions \"expand\", \"collapse\", \"scroll\", \"setDocument\"\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * The method onChange is executed when the History is changed, and can\r\n\t * be overloaded.\r\n\t */\r\n\tHistory.prototype.onChange = function () {};\r\n\r\n\t/**\r\n\t * Add a new action to the history\r\n\t * @param {String} action The executed action. Available actions: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\"\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t */\r\n\tHistory.prototype.add = function (action, params) {\r\n\t this.index++;\r\n\t this.history[this.index] = {\r\n\t 'action': action,\r\n\t 'params': params,\r\n\t 'timestamp': new Date()\r\n\t };\r\n\r\n\t // remove redo actions which are invalid now\r\n\t if (this.index < this.history.length - 1) {\r\n\t this.history.splice(this.index + 1, this.history.length - this.index - 1);\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Clear history\r\n\t */\r\n\tHistory.prototype.clear = function () {\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for undo\r\n\t * @return {Boolean} canUndo\r\n\t */\r\n\tHistory.prototype.canUndo = function () {\r\n\t return (this.index >= 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for redo\r\n\t * @return {Boolean} canRedo\r\n\t */\r\n\tHistory.prototype.canRedo = function () {\r\n\t return (this.index < this.history.length - 1);\r\n\t};\r\n\r\n\t/**\r\n\t * Undo the last action\r\n\t */\r\n\tHistory.prototype.undo = function () {\r\n\t if (this.canUndo()) {\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.undo) {\r\n\t action.undo(obj.params);\r\n\t if (obj.params.oldSelection) {\r\n\t this.editor.setSelection(obj.params.oldSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\t this.index--;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Redo the last action\r\n\t */\r\n\tHistory.prototype.redo = function () {\r\n\t if (this.canRedo()) {\r\n\t this.index++;\r\n\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.redo) {\r\n\t action.redo(obj.params);\r\n\t if (obj.params.newSelection) {\r\n\t this.editor.setSelection(obj.params.newSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy history\r\n\t */\r\n\tHistory.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\t};\r\n\r\n\tmodule.exports = History;\r\n\r\n\r\n/***/ },\r\n/* 54 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar jsonlint = __webpack_require__(55);\r\n\r\n\t/**\r\n\t * Parse JSON using the parser built-in in the browser.\r\n\t * On exception, the jsonString is validated and a detailed error is thrown.\r\n\t * @param {String} jsonString\r\n\t * @return {JSON} json\r\n\t */\r\n\texports.parse = function parse(jsonString) {\r\n\t try {\r\n\t return JSON.parse(jsonString);\r\n\t }\r\n\t catch (err) {\r\n\t // try to throw a more detailed error message using validate\r\n\t exports.validate(jsonString);\r\n\r\n\t // rethrow the original error\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sanitize a JSON-like string containing. For example changes JavaScript\r\n\t * notation into JSON notation.\r\n\t * This function for example changes a string like \"{a: 2, 'b': {c: 'd'}\"\r\n\t * into '{\"a\": 2, \"b\": {\"c\": \"d\"}'\r\n\t * @param {string} jsString\r\n\t * @returns {string} json\r\n\t */\r\n\texports.sanitize = function (jsString) {\r\n\t // escape all single and double quotes inside strings\r\n\t var chars = [];\r\n\t var i = 0;\r\n\r\n\t //If JSON starts with a function (characters/digits/\"_-\"), remove this function.\r\n\t //This is useful for \"stripping\" JSONP objects to become JSON\r\n\t //For example: /* some comment */ function_12321321 ( [{\"a\":\"b\"}] ); => [{\"a\":\"b\"}]\r\n\t var match = jsString.match(/^\\s*(\\/\\*(.|[\\r\\n])*?\\*\\/)?\\s*[\\da-zA-Z_$]+\\s*\\(([\\s\\S]*)\\)\\s*;?\\s*$/);\r\n\t if (match) {\r\n\t jsString = match[3];\r\n\t }\r\n\r\n\t // helper functions to get the current/prev/next character\r\n\t function curr () { return jsString.charAt(i); }\r\n\t function next() { return jsString.charAt(i + 1); }\r\n\t function prev() { return jsString.charAt(i - 1); }\r\n\r\n\t // get the last parsed non-whitespace character\r\n\t function lastNonWhitespace () {\r\n\t var p = chars.length - 1;\r\n\r\n\t while (p >= 0) {\r\n\t var pp = chars[p];\r\n\t if (pp !== ' ' && pp !== '\\n' && pp !== '\\r' && pp !== '\\t') { // non whitespace\r\n\t return pp;\r\n\t }\r\n\t p--;\r\n\t }\r\n\r\n\t return '';\r\n\t }\r\n\r\n\t // skip a block comment '/* ... */'\r\n\t function skipBlockComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '*' || next() !== '/')) {\r\n\t i++;\r\n\t }\r\n\t i += 2;\r\n\t }\r\n\r\n\t // skip a comment '// ...'\r\n\t function skipComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '\\n')) {\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse single or double quoted string\r\n\t function parseString(quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t var c = curr();\r\n\t while (i < jsString.length && c !== quote) {\r\n\t if (c === '\"' && prev() !== '\\\\') {\r\n\t // unescaped double quote, escape it\r\n\t chars.push('\\\\');\r\n\t }\r\n\r\n\t // handle escape character\r\n\t if (c === '\\\\') {\r\n\t i++;\r\n\t c = curr();\r\n\r\n\t // remove the escape character when followed by a single quote ', not needed\r\n\t if (c !== '\\'') {\r\n\t chars.push('\\\\');\r\n\t }\r\n\t }\r\n\t chars.push(c);\r\n\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\t if (c === quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse an unquoted key\r\n\t function parseKey() {\r\n\t var specialValues = ['null', 'true', 'false'];\r\n\t var key = '';\r\n\t var c = curr();\r\n\r\n\t var regexp = /[a-zA-Z_$\\d]/; // letter, number, underscore, dollar character\r\n\t while (regexp.test(c)) {\r\n\t key += c;\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\r\n\t if (specialValues.indexOf(key) === -1) {\r\n\t chars.push('\"' + key + '\"');\r\n\t }\r\n\t else {\r\n\t chars.push(key);\r\n\t }\r\n\t }\r\n\r\n\t while(i < jsString.length) {\r\n\t var c = curr();\r\n\r\n\t if (c === '/' && next() === '*') {\r\n\t skipBlockComment();\r\n\t }\r\n\t else if (c === '/' && next() === '/') {\r\n\t skipComment();\r\n\t }\r\n\t else if (c === '\\'' || c === '\"') {\r\n\t parseString(c);\r\n\t }\r\n\t else if (/[a-zA-Z_$]/.test(c) && ['{', ','].indexOf(lastNonWhitespace()) !== -1) {\r\n\t // an unquoted object key (like a in '{a:2}')\r\n\t parseKey();\r\n\t }\r\n\t else {\r\n\t chars.push(c);\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t return chars.join('');\r\n\t};\r\n\r\n\t/**\r\n\t * Escape unicode characters.\r\n\t * For example input '\\u2661' (length 1) will output '\\\\u2661' (length 5).\r\n\t * @param {string} text\r\n\t * @return {string}\r\n\t */\r\n\texports.escapeUnicodeChars = function (text) {\r\n\t // see https://www.wikiwand.com/en/UTF-16\r\n\t // note: we leave surrogate pairs as two individual chars,\r\n\t // as JSON doesn't interpret them as a single unicode char.\r\n\t return text.replace(/[\\u007F-\\uFFFF]/g, function(c) {\r\n\t return '\\\\u'+('0000' + c.charCodeAt(0).toString(16)).slice(-4);\r\n\t })\r\n\t};\r\n\r\n\t/**\r\n\t * Validate a string containing a JSON object\r\n\t * This method uses JSONLint to validate the String. If JSONLint is not\r\n\t * available, the built-in JSON parser of the browser is used.\r\n\t * @param {String} jsonString String with an (invalid) JSON object\r\n\t * @throws Error\r\n\t */\r\n\texports.validate = function validate(jsonString) {\r\n\t if (typeof(jsonlint) != 'undefined') {\r\n\t jsonlint.parse(jsonString);\r\n\t }\r\n\t else {\r\n\t JSON.parse(jsonString);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Extend object a with the properties of object b\r\n\t * @param {Object} a\r\n\t * @param {Object} b\r\n\t * @return {Object} a\r\n\t */\r\n\texports.extend = function extend(a, b) {\r\n\t for (var prop in b) {\r\n\t if (b.hasOwnProperty(prop)) {\r\n\t a[prop] = b[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove all properties from object a\r\n\t * @param {Object} a\r\n\t * @return {Object} a\r\n\t */\r\n\texports.clear = function clear (a) {\r\n\t for (var prop in a) {\r\n\t if (a.hasOwnProperty(prop)) {\r\n\t delete a[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the type of an object\r\n\t * @param {*} object\r\n\t * @return {String} type\r\n\t */\r\n\texports.type = function type (object) {\r\n\t if (object === null) {\r\n\t return 'null';\r\n\t }\r\n\t if (object === undefined) {\r\n\t return 'undefined';\r\n\t }\r\n\t if ((object instanceof Number) || (typeof object === 'number')) {\r\n\t return 'number';\r\n\t }\r\n\t if ((object instanceof String) || (typeof object === 'string')) {\r\n\t return 'string';\r\n\t }\r\n\t if ((object instanceof Boolean) || (typeof object === 'boolean')) {\r\n\t return 'boolean';\r\n\t }\r\n\t if ((object instanceof RegExp) || (typeof object === 'regexp')) {\r\n\t return 'regexp';\r\n\t }\r\n\t if (exports.isArray(object)) {\r\n\t return 'array';\r\n\t }\r\n\r\n\t return 'object';\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether a text contains a url (matches when a string starts\r\n\t * with 'http://*' or 'https://*' and has no whitespace characters)\r\n\t * @param {String} text\r\n\t */\r\n\tvar isUrlRegex = /^https?:\\/\\/\\S+$/;\r\n\texports.isUrl = function isUrl (text) {\r\n\t return (typeof text == 'string' || text instanceof String) &&\r\n\t isUrlRegex.test(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Tes whether given object is an Array\r\n\t * @param {*} obj\r\n\t * @returns {boolean} returns true when obj is an array\r\n\t */\r\n\texports.isArray = function (obj) {\r\n\t return Object.prototype.toString.call(obj) === '[object Array]';\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute left value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} left The absolute left position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteLeft = function getAbsoluteLeft(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.left + window.pageXOffset || document.scrollLeft || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute top value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} top The absolute top position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteTop = function getAbsoluteTop(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.top + window.pageYOffset || document.scrollTop || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.addClassName = function addClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t if (classes.indexOf(className) == -1) {\r\n\t classes.push(className); // add the class to the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.removeClassName = function removeClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t var index = classes.indexOf(className);\r\n\t if (index != -1) {\r\n\t classes.splice(index, 1); // remove the class from the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Strip the formatting from the contents of a div\r\n\t * the formatting from the div itself is not stripped, only from its childs.\r\n\t * @param {Element} divElement\r\n\t */\r\n\texports.stripFormatting = function stripFormatting(divElement) {\r\n\t var childs = divElement.childNodes;\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t var child = childs[i];\r\n\r\n\t // remove the style\r\n\t if (child.style) {\r\n\t // TODO: test if child.attributes does contain style\r\n\t child.removeAttribute('style');\r\n\t }\r\n\r\n\t // remove all attributes\r\n\t var attributes = child.attributes;\r\n\t if (attributes) {\r\n\t for (var j = attributes.length - 1; j >= 0; j--) {\r\n\t var attribute = attributes[j];\r\n\t if (attribute.specified === true) {\r\n\t child.removeAttribute(attribute.name);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // recursively strip childs\r\n\t exports.stripFormatting(child);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the end of an editable div\r\n\t * code from Nico Burns\r\n\t * http://stackoverflow.com/users/140293/nico-burns\r\n\t * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.setEndOfContentEditable = function setEndOfContentEditable(contentEditableElement) {\r\n\t var range, selection;\r\n\t if(document.createRange) {\r\n\t range = document.createRange();//Create a range (a range is a like the selection but invisible)\r\n\t range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range\r\n\t range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start\r\n\t selection = window.getSelection();//get the selection object (allows you to change selection)\r\n\t selection.removeAllRanges();//remove any selections already made\r\n\t selection.addRange(range);//make the range you have just created the visible selection\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text of a content editable div.\r\n\t * http://stackoverflow.com/a/3806004/1262753\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.selectContentEditable = function selectContentEditable(contentEditableElement) {\r\n\t if (!contentEditableElement || contentEditableElement.nodeName != 'DIV') {\r\n\t return;\r\n\t }\r\n\r\n\t var sel, range;\r\n\t if (window.getSelection && document.createRange) {\r\n\t range = document.createRange();\r\n\t range.selectNodeContents(contentEditableElement);\r\n\t sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @return {Range | TextRange | null} range\r\n\t */\r\n\texports.getSelection = function getSelection() {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t if (sel.getRangeAt && sel.rangeCount) {\r\n\t return sel.getRangeAt(0);\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @param {Range | TextRange | null} range\r\n\t */\r\n\texports.setSelection = function setSelection(range) {\r\n\t if (range) {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get selected text range\r\n\t * @return {Object} params object containing parameters:\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t * {Element} container HTML element holding the\r\n\t * selected text element\r\n\t * Returns null if no text selection is found\r\n\t */\r\n\texports.getSelectionOffset = function getSelectionOffset() {\r\n\t var range = exports.getSelection();\r\n\r\n\t if (range && 'startOffset' in range && 'endOffset' in range &&\r\n\t range.startContainer && (range.startContainer == range.endContainer)) {\r\n\t return {\r\n\t startOffset: range.startOffset,\r\n\t endOffset: range.endOffset,\r\n\t container: range.startContainer.parentNode\r\n\t };\r\n\t }\r\n\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set selected text range in given element\r\n\t * @param {Object} params An object containing:\r\n\t * {Element} container\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t */\r\n\texports.setSelectionOffset = function setSelectionOffset(params) {\r\n\t if (document.createRange && window.getSelection) {\r\n\t var selection = window.getSelection();\r\n\t if(selection) {\r\n\t var range = document.createRange();\r\n\r\n\t if (!params.container.firstChild) {\r\n\t params.container.appendChild(document.createTextNode(''));\r\n\t }\r\n\r\n\t // TODO: do not suppose that the first child of the container is a textnode,\r\n\t // but recursively find the textnodes\r\n\t range.setStart(params.container.firstChild, params.startOffset);\r\n\t range.setEnd(params.container.firstChild, params.endOffset);\r\n\r\n\t exports.setSelection(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the inner text of an HTML element (for example a div element)\r\n\t * @param {Element} element\r\n\t * @param {Object} [buffer]\r\n\t * @return {String} innerText\r\n\t */\r\n\texports.getInnerText = function getInnerText(element, buffer) {\r\n\t var first = (buffer == undefined);\r\n\t if (first) {\r\n\t buffer = {\r\n\t 'text': '',\r\n\t 'flush': function () {\r\n\t var text = this.text;\r\n\t this.text = '';\r\n\t return text;\r\n\t },\r\n\t 'set': function (text) {\r\n\t this.text = text;\r\n\t }\r\n\t };\r\n\t }\r\n\r\n\t // text node\r\n\t if (element.nodeValue) {\r\n\t return buffer.flush() + element.nodeValue;\r\n\t }\r\n\r\n\t // divs or other HTML elements\r\n\t if (element.hasChildNodes()) {\r\n\t var childNodes = element.childNodes;\r\n\t var innerText = '';\r\n\r\n\t for (var i = 0, iMax = childNodes.length; i < iMax; i++) {\r\n\t var child = childNodes[i];\r\n\r\n\t if (child.nodeName == 'DIV' || child.nodeName == 'P') {\r\n\t var prevChild = childNodes[i - 1];\r\n\t var prevName = prevChild ? prevChild.nodeName : undefined;\r\n\t if (prevName && prevName != 'DIV' && prevName != 'P' && prevName != 'BR') {\r\n\t innerText += '\\n';\r\n\t buffer.flush();\r\n\t }\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else if (child.nodeName == 'BR') {\r\n\t innerText += buffer.flush();\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else {\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t }\r\n\t }\r\n\r\n\t return innerText;\r\n\t }\r\n\t else {\r\n\t if (element.nodeName == 'P' && exports.getInternetExplorerVersion() != -1) {\r\n\t // On Internet Explorer, a

with hasChildNodes()==false is\r\n\t // rendered with a new line. Note that a

with\r\n\t // hasChildNodes()==true is rendered without a new line\r\n\t // Other browsers always ensure there is a
inside the

,\r\n\t // and if not, the

does not render a new line\r\n\t return buffer.flush();\r\n\t }\r\n\t }\r\n\r\n\t // br or unknown\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the version of Internet Explorer or a -1\r\n\t * (indicating the use of another browser).\r\n\t * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx\r\n\t * @return {Number} Internet Explorer version, or -1 in case of an other browser\r\n\t */\r\n\texports.getInternetExplorerVersion = function getInternetExplorerVersion() {\r\n\t if (_ieVersion == -1) {\r\n\t var rv = -1; // Return value assumes failure.\r\n\t if (navigator.appName == 'Microsoft Internet Explorer')\r\n\t {\r\n\t var ua = navigator.userAgent;\r\n\t var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\r\n\t if (re.exec(ua) != null) {\r\n\t rv = parseFloat( RegExp.$1 );\r\n\t }\r\n\t }\r\n\r\n\t _ieVersion = rv;\r\n\t }\r\n\r\n\t return _ieVersion;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the current browser is Firefox\r\n\t * @returns {boolean} isFirefox\r\n\t */\r\n\texports.isFirefox = function isFirefox () {\r\n\t return (navigator.userAgent.indexOf(\"Firefox\") != -1);\r\n\t};\r\n\r\n\t/**\r\n\t * cached internet explorer version\r\n\t * @type {Number}\r\n\t * @private\r\n\t */\r\n\tvar _ieVersion = -1;\r\n\r\n\t/**\r\n\t * Add and event listener. Works for all browsers\r\n\t * @param {Element} element An html element\r\n\t * @param {string} action The action, for example \"click\",\r\n\t * without the prefix \"on\"\r\n\t * @param {function} listener The callback function to be executed\r\n\t * @param {boolean} [useCapture] false by default\r\n\t * @return {function} the created event listener\r\n\t */\r\n\texports.addEventListener = function addEventListener(element, action, listener, useCapture) {\r\n\t if (element.addEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.addEventListener(action, listener, useCapture);\r\n\t return listener;\r\n\t } else if (element.attachEvent) {\r\n\t // Old IE browsers\r\n\t var f = function () {\r\n\t return listener.call(element, window.event);\r\n\t };\r\n\t element.attachEvent(\"on\" + action, f);\r\n\t return f;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove an event listener from an element\r\n\t * @param {Element} element An html dom element\r\n\t * @param {string} action The name of the event, for example \"mousedown\"\r\n\t * @param {function} listener The listener function\r\n\t * @param {boolean} [useCapture] false by default\r\n\t */\r\n\texports.removeEventListener = function removeEventListener(element, action, listener, useCapture) {\r\n\t if (element.removeEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.removeEventListener(action, listener, useCapture);\r\n\t } else if (element.detachEvent) {\r\n\t // Old IE browsers\r\n\t element.detachEvent(\"on\" + action, listener);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Parse a JSON path like '.items[3].name' into an array\r\n\t * @param {string} jsonPath\r\n\t * @return {Array}\r\n\t */\r\n\texports.parsePath = function parsePath(jsonPath) {\r\n\t var prop, remainder;\r\n\r\n\t if (jsonPath.length === 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t // find a match like '.prop'\r\n\t var match = jsonPath.match(/^\\.(\\w+)/);\r\n\t if (match) {\r\n\t prop = match[1];\r\n\t remainder = jsonPath.substr(prop.length + 1);\r\n\t }\r\n\t else if (jsonPath[0] === '[') {\r\n\t // find a match like\r\n\t var end = jsonPath.indexOf(']');\r\n\t if (end === -1) {\r\n\t throw new SyntaxError('Character ] expected in path');\r\n\t }\r\n\t if (end === 1) {\r\n\t throw new SyntaxError('Index expected after [');\r\n\t }\r\n\r\n\t var value = jsonPath.substring(1, end);\r\n\t if (value[0] === '\\'') {\r\n\t // ajv produces string prop names with single quotes, so we need\r\n\t // to reformat them into valid double-quoted JSON strings\r\n\t value = '\\\"' + value.substring(1, value.length - 1) + '\\\"';\r\n\t }\r\n\r\n\t prop = value === '*' ? value : JSON.parse(value); // parse string and number\r\n\t remainder = jsonPath.substr(end + 1);\r\n\t }\r\n\t else {\r\n\t throw new SyntaxError('Failed to parse path');\r\n\t }\r\n\r\n\t return [prop].concat(parsePath(remainder))\r\n\t};\r\n\r\n\t/**\r\n\t * Improve the error message of a JSON schema error\r\n\t * @param {Object} error\r\n\t * @return {Object} The error\r\n\t */\r\n\texports.improveSchemaError = function (error) {\r\n\t if (error.keyword === 'enum' && Array.isArray(error.schema)) {\r\n\t var enums = error.schema;\r\n\t if (enums) {\r\n\t enums = enums.map(function (value) {\r\n\t return JSON.stringify(value);\r\n\t });\r\n\r\n\t if (enums.length > 5) {\r\n\t var more = ['(' + (enums.length - 5) + ' more...)'];\r\n\t enums = enums.slice(0, 5);\r\n\t enums.push(more);\r\n\t }\r\n\t error.message = 'should be equal to one of: ' + enums.join(', ');\r\n\t }\r\n\t }\r\n\r\n\t if (error.keyword === 'additionalProperties') {\r\n\t error.message = 'should NOT have additional property: ' + error.params.additionalProperty;\r\n\t }\r\n\r\n\t return error;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the child rect fits completely inside the parent rect.\r\n\t * @param {ClientRect} parent\r\n\t * @param {ClientRect} child\r\n\t * @param {number} margin\r\n\t */\r\n\texports.insideRect = function (parent, child, margin) {\r\n\t var _margin = margin !== undefined ? margin : 0;\r\n\t return child.left - _margin >= parent.left\r\n\t && child.right + _margin <= parent.right\r\n\t && child.top - _margin >= parent.top\r\n\t && child.bottom + _margin <= parent.bottom;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns a function, that, as long as it continues to be invoked, will not\r\n\t * be triggered. The function will be called after it stops being called for\r\n\t * N milliseconds.\r\n\t *\r\n\t * Source: https://davidwalsh.name/javascript-debounce-function\r\n\t *\r\n\t * @param {function} func\r\n\t * @param {number} wait Number in milliseconds\r\n\t * @param {boolean} [immediate=false] If `immediate` is passed, trigger the\r\n\t * function on the leading edge, instead\r\n\t * of the trailing.\r\n\t * @return {function} Return the debounced function\r\n\t */\r\n\texports.debounce = function debounce(func, wait, immediate) {\r\n\t var timeout;\r\n\t return function() {\r\n\t var context = this, args = arguments;\r\n\t var later = function() {\r\n\t timeout = null;\r\n\t if (!immediate) func.apply(context, args);\r\n\t };\r\n\t var callNow = immediate && !timeout;\r\n\t clearTimeout(timeout);\r\n\t timeout = setTimeout(later, wait);\r\n\t if (callNow) func.apply(context, args);\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Determines the difference between two texts.\r\n\t * Can only detect one removed or inserted block of characters.\r\n\t * @param {string} oldText\r\n\t * @param {string} newText\r\n\t * @return {{start: number, end: number}} Returns the start and end\r\n\t * of the changed part in newText.\r\n\t */\r\n\texports.textDiff = function textDiff(oldText, newText) {\r\n\t var len = newText.length;\r\n\t var start = 0;\r\n\t var oldEnd = oldText.length;\r\n\t var newEnd = newText.length;\r\n\r\n\t while (newText.charAt(start) === oldText.charAt(start)\r\n\t && start < len) {\r\n\t start++;\r\n\t }\r\n\r\n\t while (newText.charAt(newEnd - 1) === oldText.charAt(oldEnd - 1)\r\n\t && newEnd > start && oldEnd > 0) {\r\n\t newEnd--;\r\n\t oldEnd--;\r\n\t }\r\n\r\n\t return {start: start, end: newEnd};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 55 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* Jison generated parser */\r\n\tvar jsonlint = (function(){\r\n\tvar parser = {trace: function trace() { },\r\n\tyy: {},\r\n\tsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\r\n\tterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\r\n\tproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\r\n\tperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\r\n\r\n\tvar $0 = $$.length - 1;\r\n\tswitch (yystate) {\r\n\tcase 1: // replace escaped characters with actual character\r\n\t this.$ = yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\r\n\t .replace(/\\\\n/g,'\\n')\r\n\t .replace(/\\\\r/g,'\\r')\r\n\t .replace(/\\\\t/g,'\\t')\r\n\t .replace(/\\\\v/g,'\\v')\r\n\t .replace(/\\\\f/g,'\\f')\r\n\t .replace(/\\\\b/g,'\\b');\r\n\t \r\n\tbreak;\r\n\tcase 2:this.$ = Number(yytext);\r\n\tbreak;\r\n\tcase 3:this.$ = null;\r\n\tbreak;\r\n\tcase 4:this.$ = true;\r\n\tbreak;\r\n\tcase 5:this.$ = false;\r\n\tbreak;\r\n\tcase 6:return this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 13:this.$ = {};\r\n\tbreak;\r\n\tcase 14:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 15:this.$ = [$$[$0-2], $$[$0]];\r\n\tbreak;\r\n\tcase 16:this.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 17:this.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 18:this.$ = [];\r\n\tbreak;\r\n\tcase 19:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 20:this.$ = [$$[$0]];\r\n\tbreak;\r\n\tcase 21:this.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\r\n\tbreak;\r\n\t}\r\n\t},\r\n\ttable: [{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],\r\n\tdefaultActions: {16:[2,6]},\r\n\tparseError: function parseError(str, hash) {\r\n\t throw new Error(str);\r\n\t},\r\n\tparse: function parse(input) {\r\n\t var self = this,\r\n\t stack = [0],\r\n\t vstack = [null], // semantic value stack\r\n\t lstack = [], // location stack\r\n\t table = this.table,\r\n\t yytext = '',\r\n\t yylineno = 0,\r\n\t yyleng = 0,\r\n\t recovering = 0,\r\n\t TERROR = 2,\r\n\t EOF = 1;\r\n\r\n\t //this.reductionCount = this.shiftCount = 0;\r\n\r\n\t this.lexer.setInput(input);\r\n\t this.lexer.yy = this.yy;\r\n\t this.yy.lexer = this.lexer;\r\n\t if (typeof this.lexer.yylloc == 'undefined')\r\n\t this.lexer.yylloc = {};\r\n\t var yyloc = this.lexer.yylloc;\r\n\t lstack.push(yyloc);\r\n\r\n\t if (typeof this.yy.parseError === 'function')\r\n\t this.parseError = this.yy.parseError;\r\n\r\n\t function popStack (n) {\r\n\t stack.length = stack.length - 2*n;\r\n\t vstack.length = vstack.length - n;\r\n\t lstack.length = lstack.length - n;\r\n\t }\r\n\r\n\t function lex() {\r\n\t var token;\r\n\t token = self.lexer.lex() || 1; // $end = 1\r\n\t // if token isn't its numeric value, convert\r\n\t if (typeof token !== 'number') {\r\n\t token = self.symbols_[token] || token;\r\n\t }\r\n\t return token;\r\n\t }\r\n\r\n\t var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\r\n\t while (true) {\r\n\t // retreive state number from top of stack\r\n\t state = stack[stack.length-1];\r\n\r\n\t // use default actions if available\r\n\t if (this.defaultActions[state]) {\r\n\t action = this.defaultActions[state];\r\n\t } else {\r\n\t if (symbol == null)\r\n\t symbol = lex();\r\n\t // read action for current state and first input\r\n\t action = table[state] && table[state][symbol];\r\n\t }\r\n\r\n\t // handle parse error\r\n\t _handle_error:\r\n\t if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n\r\n\t if (!recovering) {\r\n\t // Report error\r\n\t expected = [];\r\n\t for (p in table[state]) if (this.terminals_[p] && p > 2) {\r\n\t expected.push(\"'\"+this.terminals_[p]+\"'\");\r\n\t }\r\n\t var errStr = '';\r\n\t if (this.lexer.showPosition) {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\r\n\t } else {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\r\n\t (symbol == 1 /*EOF*/ ? \"end of input\" :\r\n\t (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\r\n\t }\r\n\t this.parseError(errStr,\r\n\t {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\r\n\t }\r\n\r\n\t // just recovered from another error\r\n\t if (recovering == 3) {\r\n\t if (symbol == EOF) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\r\n\t // discard current lookahead and grab another\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t symbol = lex();\r\n\t }\r\n\r\n\t // try to recover from error\r\n\t while (1) {\r\n\t // check for error recovery rule in this state\r\n\t if ((TERROR.toString()) in table[state]) {\r\n\t break;\r\n\t }\r\n\t if (state == 0) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\t popStack(1);\r\n\t state = stack[stack.length-1];\r\n\t }\r\n\r\n\t preErrorSymbol = symbol; // save the lookahead token\r\n\t symbol = TERROR; // insert generic error symbol as new lookahead\r\n\t state = stack[stack.length-1];\r\n\t action = table[state] && table[state][TERROR];\r\n\t recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\r\n\t }\r\n\r\n\t // this shouldn't happen, unless resolve defaults are off\r\n\t if (action[0] instanceof Array && action.length > 1) {\r\n\t throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\r\n\t }\r\n\r\n\t switch (action[0]) {\r\n\r\n\t case 1: // shift\r\n\t //this.shiftCount++;\r\n\r\n\t stack.push(symbol);\r\n\t vstack.push(this.lexer.yytext);\r\n\t lstack.push(this.lexer.yylloc);\r\n\t stack.push(action[1]); // push state\r\n\t symbol = null;\r\n\t if (!preErrorSymbol) { // normal execution/no error\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t if (recovering > 0)\r\n\t recovering--;\r\n\t } else { // error just occurred, resume old lookahead f/ before error\r\n\t symbol = preErrorSymbol;\r\n\t preErrorSymbol = null;\r\n\t }\r\n\t break;\r\n\r\n\t case 2: // reduce\r\n\t //this.reductionCount++;\r\n\r\n\t len = this.productions_[action[1]][1];\r\n\r\n\t // perform semantic action\r\n\t yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\r\n\t // default location, uses first token for firsts, last for lasts\r\n\t yyval._$ = {\r\n\t first_line: lstack[lstack.length-(len||1)].first_line,\r\n\t last_line: lstack[lstack.length-1].last_line,\r\n\t first_column: lstack[lstack.length-(len||1)].first_column,\r\n\t last_column: lstack[lstack.length-1].last_column\r\n\t };\r\n\t r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\r\n\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t }\r\n\r\n\t // pop off stack\r\n\t if (len) {\r\n\t stack = stack.slice(0,-1*len*2);\r\n\t vstack = vstack.slice(0, -1*len);\r\n\t lstack = lstack.slice(0, -1*len);\r\n\t }\r\n\r\n\t stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\r\n\t vstack.push(yyval.$);\r\n\t lstack.push(yyval._$);\r\n\t // goto new state = table[STATE][NONTERMINAL]\r\n\t newState = table[stack[stack.length-2]][stack[stack.length-1]];\r\n\t stack.push(newState);\r\n\t break;\r\n\r\n\t case 3: // accept\r\n\t return true;\r\n\t }\r\n\r\n\t }\r\n\r\n\t return true;\r\n\t}};\r\n\t/* Jison generated lexer */\r\n\tvar lexer = (function(){\r\n\tvar lexer = ({EOF:1,\r\n\tparseError:function parseError(str, hash) {\r\n\t if (this.yy.parseError) {\r\n\t this.yy.parseError(str, hash);\r\n\t } else {\r\n\t throw new Error(str);\r\n\t }\r\n\t },\r\n\tsetInput:function (input) {\r\n\t this._input = input;\r\n\t this._more = this._less = this.done = false;\r\n\t this.yylineno = this.yyleng = 0;\r\n\t this.yytext = this.matched = this.match = '';\r\n\t this.conditionStack = ['INITIAL'];\r\n\t this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\r\n\t return this;\r\n\t },\r\n\tinput:function () {\r\n\t var ch = this._input[0];\r\n\t this.yytext+=ch;\r\n\t this.yyleng++;\r\n\t this.match+=ch;\r\n\t this.matched+=ch;\r\n\t var lines = ch.match(/\\n/);\r\n\t if (lines) this.yylineno++;\r\n\t this._input = this._input.slice(1);\r\n\t return ch;\r\n\t },\r\n\tunput:function (ch) {\r\n\t this._input = ch + this._input;\r\n\t return this;\r\n\t },\r\n\tmore:function () {\r\n\t this._more = true;\r\n\t return this;\r\n\t },\r\n\tless:function (n) {\r\n\t this._input = this.match.slice(n) + this._input;\r\n\t },\r\n\tpastInput:function () {\r\n\t var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n\t return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n\t },\r\n\tupcomingInput:function () {\r\n\t var next = this.match;\r\n\t if (next.length < 20) {\r\n\t next += this._input.substr(0, 20-next.length);\r\n\t }\r\n\t return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\r\n\t },\r\n\tshowPosition:function () {\r\n\t var pre = this.pastInput();\r\n\t var c = new Array(pre.length + 1).join(\"-\");\r\n\t return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\r\n\t },\r\n\tnext:function () {\r\n\t if (this.done) {\r\n\t return this.EOF;\r\n\t }\r\n\t if (!this._input) this.done = true;\r\n\r\n\t var token,\r\n\t match,\r\n\t tempMatch,\r\n\t index,\r\n\t col,\r\n\t lines;\r\n\t if (!this._more) {\r\n\t this.yytext = '';\r\n\t this.match = '';\r\n\t }\r\n\t var rules = this._currentRules();\r\n\t for (var i=0;i < rules.length; i++) {\r\n\t tempMatch = this._input.match(this.rules[rules[i]]);\r\n\t if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n\t match = tempMatch;\r\n\t index = i;\r\n\t if (!this.options.flex) break;\r\n\t }\r\n\t }\r\n\t if (match) {\r\n\t lines = match[0].match(/\\n.*/g);\r\n\t if (lines) this.yylineno += lines.length;\r\n\t this.yylloc = {first_line: this.yylloc.last_line,\r\n\t last_line: this.yylineno+1,\r\n\t first_column: this.yylloc.last_column,\r\n\t last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\r\n\t this.yytext += match[0];\r\n\t this.match += match[0];\r\n\t this.yyleng = this.yytext.length;\r\n\t this._more = false;\r\n\t this._input = this._input.slice(match[0].length);\r\n\t this.matched += match[0];\r\n\t token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\r\n\t if (this.done && this._input) this.done = false;\r\n\t if (token) return token;\r\n\t else return;\r\n\t }\r\n\t if (this._input === \"\") {\r\n\t return this.EOF;\r\n\t } else {\r\n\t this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(), \r\n\t {text: \"\", token: null, line: this.yylineno});\r\n\t }\r\n\t },\r\n\tlex:function lex() {\r\n\t var r = this.next();\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t } else {\r\n\t return this.lex();\r\n\t }\r\n\t },\r\n\tbegin:function begin(condition) {\r\n\t this.conditionStack.push(condition);\r\n\t },\r\n\tpopState:function popState() {\r\n\t return this.conditionStack.pop();\r\n\t },\r\n\t_currentRules:function _currentRules() {\r\n\t return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\r\n\t },\r\n\ttopState:function () {\r\n\t return this.conditionStack[this.conditionStack.length-2];\r\n\t },\r\n\tpushState:function begin(condition) {\r\n\t this.begin(condition);\r\n\t }});\r\n\tlexer.options = {};\r\n\tlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\n\r\n\tvar YYSTATE=YY_START\r\n\tswitch($avoiding_name_collisions) {\r\n\tcase 0:/* skip whitespace */\r\n\tbreak;\r\n\tcase 1:return 6\r\n\tbreak;\r\n\tcase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\r\n\tbreak;\r\n\tcase 3:return 17\r\n\tbreak;\r\n\tcase 4:return 18\r\n\tbreak;\r\n\tcase 5:return 23\r\n\tbreak;\r\n\tcase 6:return 24\r\n\tbreak;\r\n\tcase 7:return 22\r\n\tbreak;\r\n\tcase 8:return 21\r\n\tbreak;\r\n\tcase 9:return 10\r\n\tbreak;\r\n\tcase 10:return 11\r\n\tbreak;\r\n\tcase 11:return 8\r\n\tbreak;\r\n\tcase 12:return 14\r\n\tbreak;\r\n\tcase 13:return 'INVALID'\r\n\tbreak;\r\n\t}\r\n\t};\r\n\tlexer.rules = [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/];\r\n\tlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}};\r\n\r\n\r\n\t;\r\n\treturn lexer;})()\r\n\tparser.lexer = lexer;\r\n\treturn parser;\r\n\t})();\r\n\tif (true) {\r\n\t exports.parser = jsonlint;\r\n\t exports.parse = jsonlint.parse.bind(jsonlint);\r\n\t}\r\n\r\n/***/ },\r\n/* 56 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * @constructor SearchBox\r\n\t * Create a search box in given HTML container\r\n\t * @param {JSONEditor} editor The JSON Editor to attach to\r\n\t * @param {Element} container HTML container element of where to\r\n\t * create the search box\r\n\t */\r\n\tfunction SearchBox (editor, container) {\r\n\t var searchBox = this;\r\n\r\n\t this.editor = editor;\r\n\t this.timeout = undefined;\r\n\t this.delay = 200; // ms\r\n\t this.lastText = undefined;\r\n\r\n\t this.dom = {};\r\n\t this.dom.container = container;\r\n\r\n\t var table = document.createElement('table');\r\n\t this.dom.table = table;\r\n\t table.className = 'jsoneditor-search';\r\n\t container.appendChild(table);\r\n\t var tbody = document.createElement('tbody');\r\n\t this.dom.tbody = tbody;\r\n\t table.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t var td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var results = document.createElement('div');\r\n\t this.dom.results = results;\r\n\t results.className = 'jsoneditor-results';\r\n\t td.appendChild(results);\r\n\r\n\t td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var divInput = document.createElement('div');\r\n\t this.dom.input = divInput;\r\n\t divInput.className = 'jsoneditor-frame';\r\n\t divInput.title = 'Search fields and values';\r\n\t td.appendChild(divInput);\r\n\r\n\t // table to contain the text input and search button\r\n\t var tableInput = document.createElement('table');\r\n\t divInput.appendChild(tableInput);\r\n\t var tbodySearch = document.createElement('tbody');\r\n\t tableInput.appendChild(tbodySearch);\r\n\t tr = document.createElement('tr');\r\n\t tbodySearch.appendChild(tr);\r\n\r\n\t var refreshSearch = document.createElement('button');\r\n\t refreshSearch.type = 'button';\r\n\t refreshSearch.className = 'jsoneditor-refresh';\r\n\t td = document.createElement('td');\r\n\t td.appendChild(refreshSearch);\r\n\t tr.appendChild(td);\r\n\r\n\t var search = document.createElement('input');\r\n\t // search.type = 'button';\r\n\t this.dom.search = search;\r\n\t search.oninput = function (event) {\r\n\t searchBox._onDelayedSearch(event);\r\n\t };\r\n\t search.onchange = function (event) { // For IE 9\r\n\t searchBox._onSearch();\r\n\t };\r\n\t search.onkeydown = function (event) {\r\n\t searchBox._onKeyDown(event);\r\n\t };\r\n\t search.onkeyup = function (event) {\r\n\t searchBox._onKeyUp(event);\r\n\t };\r\n\t refreshSearch.onclick = function (event) {\r\n\t search.select();\r\n\t };\r\n\r\n\t // TODO: ESC in FF restores the last input, is a FF bug, https://bugzilla.mozilla.org/show_bug.cgi?id=598819\r\n\t td = document.createElement('td');\r\n\t td.appendChild(search);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchNext = document.createElement('button');\r\n\t searchNext.type = 'button';\r\n\t searchNext.title = 'Next result (Enter)';\r\n\t searchNext.className = 'jsoneditor-next';\r\n\t searchNext.onclick = function () {\r\n\t searchBox.next();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchNext);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchPrevious = document.createElement('button');\r\n\t searchPrevious.type = 'button';\r\n\t searchPrevious.title = 'Previous result (Shift+Enter)';\r\n\t searchPrevious.className = 'jsoneditor-previous';\r\n\t searchPrevious.onclick = function () {\r\n\t searchBox.previous();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchPrevious);\r\n\t tr.appendChild(td);\r\n\t}\r\n\r\n\t/**\r\n\t * Go to the next search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.next = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex + 1 : 0;\r\n\t if (index > this.results.length - 1) {\r\n\t index = 0;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Go to the prevous search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.previous = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var max = this.results.length - 1;\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex - 1 : max;\r\n\t if (index < 0) {\r\n\t index = max;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set new value for the current active result\r\n\t * @param {Number} index\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result.\r\n\t * focus is false by default.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._setActiveResult = function(index, focus) {\r\n\t // de-activate current active result\r\n\t if (this.activeResult) {\r\n\t var prevNode = this.activeResult.node;\r\n\t var prevElem = this.activeResult.elem;\r\n\t if (prevElem == 'field') {\r\n\t delete prevNode.searchFieldActive;\r\n\t }\r\n\t else {\r\n\t delete prevNode.searchValueActive;\r\n\t }\r\n\t prevNode.updateDom();\r\n\t }\r\n\r\n\t if (!this.results || !this.results[index]) {\r\n\t // out of range, set to undefined\r\n\t this.resultIndex = undefined;\r\n\t this.activeResult = undefined;\r\n\t return;\r\n\t }\r\n\r\n\t this.resultIndex = index;\r\n\r\n\t // set new node active\r\n\t var node = this.results[this.resultIndex].node;\r\n\t var elem = this.results[this.resultIndex].elem;\r\n\t if (elem == 'field') {\r\n\t node.searchFieldActive = true;\r\n\t }\r\n\t else {\r\n\t node.searchValueActive = true;\r\n\t }\r\n\t this.activeResult = this.results[this.resultIndex];\r\n\t node.updateDom();\r\n\r\n\t // TODO: not so nice that the focus is only set after the animation is finished\r\n\t node.scrollTo(function () {\r\n\t if (focus) {\r\n\t node.focus(elem);\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel any running onDelayedSearch.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._clearDelay = function() {\r\n\t if (this.timeout != undefined) {\r\n\t clearTimeout(this.timeout);\r\n\t delete this.timeout;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Start a timer to execute a search after a short delay.\r\n\t * Used for reducing the number of searches while typing.\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onDelayedSearch = function (event) {\r\n\t // execute the search after a short delay (reduces the number of\r\n\t // search actions while typing in the search text box)\r\n\t this._clearDelay();\r\n\t var searchBox = this;\r\n\t this.timeout = setTimeout(function (event) {\r\n\t searchBox._onSearch();\r\n\t },\r\n\t this.delay);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onSearch event\r\n\t * @param {boolean} [forceSearch] If true, search will be executed again even\r\n\t * when the search text is not changed.\r\n\t * Default is false.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onSearch = function (forceSearch) {\r\n\t this._clearDelay();\r\n\r\n\t var value = this.dom.search.value;\r\n\t var text = (value.length > 0) ? value : undefined;\r\n\t if (text != this.lastText || forceSearch) {\r\n\t // only search again when changed\r\n\t this.lastText = text;\r\n\t this.results = this.editor.search(text);\r\n\t this._setActiveResult(undefined);\r\n\r\n\t // display search results\r\n\t if (text != undefined) {\r\n\t var resultCount = this.results.length;\r\n\t switch (resultCount) {\r\n\t case 0: this.dom.results.innerHTML = 'no results'; break;\r\n\t case 1: this.dom.results.innerHTML = '1 result'; break;\r\n\t default: this.dom.results.innerHTML = resultCount + ' results'; break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.dom.results.innerHTML = '';\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyDown event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyDown = function (event) {\r\n\t var keynum = event.which;\r\n\t if (keynum == 27) { // ESC\r\n\t this.dom.search.value = ''; // clear search\r\n\t this._onSearch();\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t else if (keynum == 13) { // Enter\r\n\t if (event.ctrlKey) {\r\n\t // force to search again\r\n\t this._onSearch(true);\r\n\t }\r\n\t else if (event.shiftKey) {\r\n\t // move to the previous search result\r\n\t this.previous();\r\n\t }\r\n\t else {\r\n\t // move to the next search result\r\n\t this.next();\r\n\t }\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyUp event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyUp = function (event) {\r\n\t var keynum = event.keyCode;\r\n\t if (keynum != 27 && keynum != 13) { // !show and !Enter\r\n\t this._onDelayedSearch(event); // For IE 9\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the search results\r\n\t */\r\n\tSearchBox.prototype.clear = function () {\r\n\t this.dom.search.value = '';\r\n\t this._onSearch();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the search box\r\n\t */\r\n\tSearchBox.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\t this.dom.container.removeChild(this.dom.table);\r\n\t this.dom = null;\r\n\r\n\t this.results = null;\r\n\t this.activeResult = null;\r\n\r\n\t this._clearDelay();\r\n\r\n\t};\r\n\r\n\tmodule.exports = SearchBox;\r\n\r\n\r\n/***/ },\r\n/* 57 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * A context menu\r\n\t * @param {Object[]} items Array containing the menu structure\r\n\t * TODO: describe structure\r\n\t * @param {Object} [options] Object with options. Available options:\r\n\t * {function} close Callback called when the\r\n\t * context menu is being closed.\r\n\t * @constructor\r\n\t */\r\n\tfunction ContextMenu (items, options) {\r\n\t this.dom = {};\r\n\r\n\t var me = this;\r\n\t var dom = this.dom;\r\n\t this.anchor = undefined;\r\n\t this.items = items;\r\n\t this.eventListeners = {};\r\n\t this.selection = undefined; // holds the selection before the menu was opened\r\n\t this.onClose = options ? options.close : undefined;\r\n\r\n\t // create root element\r\n\t var root = document.createElement('div');\r\n\t root.className = 'jsoneditor-contextmenu-root';\r\n\t dom.root = root;\r\n\r\n\t // create a container element\r\n\t var menu = document.createElement('div');\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t dom.menu = menu;\r\n\t root.appendChild(menu);\r\n\r\n\t // create a list to hold the menu items\r\n\t var list = document.createElement('ul');\r\n\t list.className = 'jsoneditor-menu';\r\n\t menu.appendChild(list);\r\n\t dom.list = list;\r\n\t dom.items = []; // list with all buttons\r\n\r\n\t // create a (non-visible) button to set the focus to the menu\r\n\t var focusButton = document.createElement('button');\r\n\t focusButton.type = 'button';\r\n\t dom.focusButton = focusButton;\r\n\t var li = document.createElement('li');\r\n\t li.style.overflow = 'hidden';\r\n\t li.style.height = '0';\r\n\t li.appendChild(focusButton);\r\n\t list.appendChild(li);\r\n\r\n\t function createMenuItems (list, domItems, items) {\r\n\t items.forEach(function (item) {\r\n\t if (item.type == 'separator') {\r\n\t // create a separator\r\n\t var separator = document.createElement('div');\r\n\t separator.className = 'jsoneditor-separator';\r\n\t li = document.createElement('li');\r\n\t li.appendChild(separator);\r\n\t list.appendChild(li);\r\n\t }\r\n\t else {\r\n\t var domItem = {};\r\n\r\n\t // create a menu item\r\n\t var li = document.createElement('li');\r\n\t list.appendChild(li);\r\n\r\n\t // create a button in the menu item\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = item.className;\r\n\t domItem.button = button;\r\n\t if (item.title) {\r\n\t button.title = item.title;\r\n\t }\r\n\t if (item.click) {\r\n\t button.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me.hide();\r\n\t item.click();\r\n\t };\r\n\t }\r\n\t li.appendChild(button);\r\n\r\n\t // create the contents of the button\r\n\t if (item.submenu) {\r\n\t // add the icon to the button\r\n\t var divIcon = document.createElement('div');\r\n\t divIcon.className = 'jsoneditor-icon';\r\n\t button.appendChild(divIcon);\r\n\t button.appendChild(document.createTextNode(item.text));\r\n\r\n\t var buttonSubmenu;\r\n\t if (item.click) {\r\n\t // submenu and a button with a click handler\r\n\t button.className += ' jsoneditor-default';\r\n\r\n\t var buttonExpand = document.createElement('button');\r\n\t buttonExpand.type = 'button';\r\n\t domItem.buttonExpand = buttonExpand;\r\n\t buttonExpand.className = 'jsoneditor-expand';\r\n\t buttonExpand.innerHTML = '

';\r\n\t li.appendChild(buttonExpand);\r\n\t if (item.submenuTitle) {\r\n\t buttonExpand.title = item.submenuTitle;\r\n\t }\r\n\r\n\t buttonSubmenu = buttonExpand;\r\n\t }\r\n\t else {\r\n\t // submenu and a button without a click handler\r\n\t var divExpand = document.createElement('div');\r\n\t divExpand.className = 'jsoneditor-expand';\r\n\t button.appendChild(divExpand);\r\n\r\n\t buttonSubmenu = button;\r\n\t }\r\n\r\n\t // attach a handler to expand/collapse the submenu\r\n\t buttonSubmenu.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me._onExpandItem(domItem);\r\n\t buttonSubmenu.focus();\r\n\t };\r\n\r\n\t // create the submenu\r\n\t var domSubItems = [];\r\n\t domItem.subItems = domSubItems;\r\n\t var ul = document.createElement('ul');\r\n\t domItem.ul = ul;\r\n\t ul.className = 'jsoneditor-menu';\r\n\t ul.style.height = '0';\r\n\t li.appendChild(ul);\r\n\t createMenuItems(ul, domSubItems, item.submenu);\r\n\t }\r\n\t else {\r\n\t // no submenu, just a button with clickhandler\r\n\t button.innerHTML = '
' + item.text;\r\n\t }\r\n\r\n\t domItems.push(domItem);\r\n\t }\r\n\t });\r\n\t }\r\n\t createMenuItems(list, this.dom.items, items);\r\n\r\n\t // TODO: when the editor is small, show the submenu on the right instead of inline?\r\n\r\n\t // calculate the max height of the menu with one submenu expanded\r\n\t this.maxHeight = 0; // height in pixels\r\n\t items.forEach(function (item) {\r\n\t var height = (items.length + (item.submenu ? item.submenu.length : 0)) * 24;\r\n\t me.maxHeight = Math.max(me.maxHeight, height);\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Get the currently visible buttons\r\n\t * @return {Array.} buttons\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._getVisibleButtons = function () {\r\n\t var buttons = [];\r\n\t var me = this;\r\n\t this.dom.items.forEach(function (item) {\r\n\t buttons.push(item.button);\r\n\t if (item.buttonExpand) {\r\n\t buttons.push(item.buttonExpand);\r\n\t }\r\n\t if (item.subItems && item == me.expandedItem) {\r\n\t item.subItems.forEach(function (subItem) {\r\n\t buttons.push(subItem.button);\r\n\t if (subItem.buttonExpand) {\r\n\t buttons.push(subItem.buttonExpand);\r\n\t }\r\n\t // TODO: change to fully recursive method\r\n\t });\r\n\t }\r\n\t });\r\n\r\n\t return buttons;\r\n\t};\r\n\r\n\t// currently displayed context menu, a singleton. We may only have one visible context menu\r\n\tContextMenu.visibleMenu = undefined;\r\n\r\n\t/**\r\n\t * Attach the menu to an anchor\r\n\t * @param {HTMLElement} anchor Anchor where the menu will be attached\r\n\t * as sibling.\r\n\t * @param {HTMLElement} [contentWindow] The DIV with with the (scrollable) contents\r\n\t */\r\n\tContextMenu.prototype.show = function (anchor, contentWindow) {\r\n\t this.hide();\r\n\r\n\t // determine whether to display the menu below or above the anchor\r\n\t var showBelow = true;\r\n\t if (contentWindow) {\r\n\t var anchorRect = anchor.getBoundingClientRect();\r\n\t var contentRect = contentWindow.getBoundingClientRect();\r\n\r\n\t if (anchorRect.bottom + this.maxHeight < contentRect.bottom) {\r\n\t // fits below -> show below\r\n\t }\r\n\t else if (anchorRect.top - this.maxHeight > contentRect.top) {\r\n\t // fits above -> show above\r\n\t showBelow = false;\r\n\t }\r\n\t else {\r\n\t // doesn't fit above nor below -> show below\r\n\t }\r\n\t }\r\n\r\n\t // position the menu\r\n\t if (showBelow) {\r\n\t // display the menu below the anchor\r\n\t var anchorHeight = anchor.offsetHeight;\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = anchorHeight + 'px';\r\n\t this.dom.menu.style.bottom = '';\r\n\t }\r\n\t else {\r\n\t // display the menu above the anchor\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = '';\r\n\t this.dom.menu.style.bottom = '0px';\r\n\t }\r\n\r\n\t // attach the menu to the parent of the anchor\r\n\t var parent = anchor.parentNode;\r\n\t parent.insertBefore(this.dom.root, parent.firstChild);\r\n\r\n\t // create and attach event listeners\r\n\t var me = this;\r\n\t var list = this.dom.list;\r\n\t this.eventListeners.mousedown = util.addEventListener(window, 'mousedown', function (event) {\r\n\t // hide menu on click outside of the menu\r\n\t var target = event.target;\r\n\t if ((target != list) && !me._isChildOf(target, list)) {\r\n\t me.hide();\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t });\r\n\t this.eventListeners.keydown = util.addEventListener(window, 'keydown', function (event) {\r\n\t me._onKeyDown(event);\r\n\t });\r\n\r\n\t // move focus to the first button in the context menu\r\n\t this.selection = util.getSelection();\r\n\t this.anchor = anchor;\r\n\t setTimeout(function () {\r\n\t me.dom.focusButton.focus();\r\n\t }, 0);\r\n\r\n\t if (ContextMenu.visibleMenu) {\r\n\t ContextMenu.visibleMenu.hide();\r\n\t }\r\n\t ContextMenu.visibleMenu = this;\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the context menu if visible\r\n\t */\r\n\tContextMenu.prototype.hide = function () {\r\n\t // remove the menu from the DOM\r\n\t if (this.dom.root.parentNode) {\r\n\t this.dom.root.parentNode.removeChild(this.dom.root);\r\n\t if (this.onClose) {\r\n\t this.onClose();\r\n\t }\r\n\t }\r\n\r\n\t // remove all event listeners\r\n\t // all event listeners are supposed to be attached to document.\r\n\t for (var name in this.eventListeners) {\r\n\t if (this.eventListeners.hasOwnProperty(name)) {\r\n\t var fn = this.eventListeners[name];\r\n\t if (fn) {\r\n\t util.removeEventListener(window, name, fn);\r\n\t }\r\n\t delete this.eventListeners[name];\r\n\t }\r\n\t }\r\n\r\n\t if (ContextMenu.visibleMenu == this) {\r\n\t ContextMenu.visibleMenu = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Expand a submenu\r\n\t * Any currently expanded submenu will be hided.\r\n\t * @param {Object} domItem\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onExpandItem = function (domItem) {\r\n\t var me = this;\r\n\t var alreadyVisible = (domItem == this.expandedItem);\r\n\r\n\t // hide the currently visible submenu\r\n\t var expandedItem = this.expandedItem;\r\n\t if (expandedItem) {\r\n\t //var ul = expandedItem.ul;\r\n\t expandedItem.ul.style.height = '0';\r\n\t expandedItem.ul.style.padding = '';\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem != expandedItem) {\r\n\t expandedItem.ul.style.display = '';\r\n\t util.removeClassName(expandedItem.ul.parentNode, 'jsoneditor-selected');\r\n\t }\r\n\t }, 300); // timeout duration must match the css transition duration\r\n\t this.expandedItem = undefined;\r\n\t }\r\n\r\n\t if (!alreadyVisible) {\r\n\t var ul = domItem.ul;\r\n\t ul.style.display = 'block';\r\n\t var height = ul.clientHeight; // force a reflow in Firefox\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem == domItem) {\r\n\t ul.style.height = (ul.childNodes.length * 24) + 'px';\r\n\t ul.style.padding = '5px 10px';\r\n\t }\r\n\t }, 0);\r\n\t util.addClassName(ul.parentNode, 'jsoneditor-selected');\r\n\t this.expandedItem = domItem;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onkeydown event\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onKeyDown = function (event) {\r\n\t var target = event.target;\r\n\t var keynum = event.which;\r\n\t var handled = false;\r\n\t var buttons, targetIndex, prevButton, nextButton;\r\n\r\n\t if (keynum == 27) { // ESC\r\n\t // hide the menu on ESC key\r\n\r\n\t // restore previous selection and focus\r\n\t if (this.selection) {\r\n\t util.setSelection(this.selection);\r\n\t }\r\n\t if (this.anchor) {\r\n\t this.anchor.focus();\r\n\t }\r\n\r\n\t this.hide();\r\n\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 9) { // Tab\r\n\t if (!event.shiftKey) { // Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == buttons.length - 1) {\r\n\t // move to first button\r\n\t buttons[0].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else { // Shift+Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == 0) {\r\n\t // move to last button\r\n\t buttons[buttons.length - 1].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (target.className == 'jsoneditor-expand') {\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton && prevButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t prevButton = buttons[targetIndex - 2];\r\n\t }\r\n\t if (!prevButton) {\r\n\t // move to last button\r\n\t prevButton = buttons[buttons.length - 1];\r\n\t }\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t nextButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t nextButton = buttons[targetIndex + 2];\r\n\t }\r\n\t if (!nextButton) {\r\n\t // move to first button\r\n\t nextButton = buttons[0];\r\n\t }\r\n\t if (nextButton) {\r\n\t nextButton.focus();\r\n\t handled = true;\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t // TODO: arrow left and right\r\n\r\n\t if (handled) {\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Test if an element is a child of a parent element.\r\n\t * @param {Element} child\r\n\t * @param {Element} parent\r\n\t * @return {boolean} isChild\r\n\t */\r\n\tContextMenu.prototype._isChildOf = function (child, parent) {\r\n\t var e = child.parentNode;\r\n\t while (e) {\r\n\t if (e == parent) {\r\n\t return true;\r\n\t }\r\n\t e = e.parentNode;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\tmodule.exports = ContextMenu;\r\n\r\n\r\n/***/ },\r\n/* 58 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar naturalSort = __webpack_require__(59);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\tvar appendNodeFactory = __webpack_require__(60);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor Node\r\n\t * Create a new Node\r\n\t * @param {./treemode} editor\r\n\t * @param {Object} [params] Can contain parameters:\r\n\t * {string} field\r\n\t * {boolean} fieldEditable\r\n\t * {*} value\r\n\t * {String} type Can have values 'auto', 'array',\r\n\t * 'object', or 'string'.\r\n\t */\r\n\tfunction Node (editor, params) {\r\n\t /** @type {./treemode} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t this.expanded = false;\r\n\r\n\t if(params && (params instanceof Object)) {\r\n\t this.setField(params.field, params.fieldEditable);\r\n\t this.setValue(params.value, params.type);\r\n\t }\r\n\t else {\r\n\t this.setField('');\r\n\t this.setValue(null);\r\n\t }\r\n\r\n\t this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t}\r\n\r\n\t// debounce interval for keyboard input in milliseconds\r\n\tNode.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Determine whether the field and/or value of this node are editable\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateEditability = function () {\r\n\t this.editable = {\r\n\t field: true,\r\n\t value: true\r\n\t };\r\n\r\n\t if (this.editor) {\r\n\t this.editable.field = this.editor.options.mode === 'tree';\r\n\t this.editable.value = this.editor.options.mode !== 'view';\r\n\r\n\t if ((this.editor.options.mode === 'tree' || this.editor.options.mode === 'form') &&\r\n\t (typeof this.editor.options.onEditable === 'function')) {\r\n\t var editable = this.editor.options.onEditable({\r\n\t field: this.field,\r\n\t value: this.value,\r\n\t path: this.getPath()\r\n\t });\r\n\r\n\t if (typeof editable === 'boolean') {\r\n\t this.editable.field = editable;\r\n\t this.editable.value = editable;\r\n\t }\r\n\t else {\r\n\t if (typeof editable.field === 'boolean') this.editable.field = editable.field;\r\n\t if (typeof editable.value === 'boolean') this.editable.value = editable.value;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the path of this node\r\n\t * @return {String[]} Array containing the path to this node\r\n\t */\r\n\tNode.prototype.getPath = function () {\r\n\t var node = this;\r\n\t var path = [];\r\n\t while (node) {\r\n\t var field = !node.parent\r\n\t ? undefined // do not add an (optional) field name of the root node\r\n\t : (node.parent.type != 'array')\r\n\t ? node.field\r\n\t : node.index;\r\n\r\n\t if (field !== undefined) {\r\n\t path.unshift(field);\r\n\t }\r\n\t node = node.parent;\r\n\t }\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Find a Node from a JSON path like '.items[3].name'\r\n\t * @param {string} jsonPath\r\n\t * @return {Node | null} Returns the Node when found, returns null if not found\r\n\t */\r\n\tNode.prototype.findNode = function (jsonPath) {\r\n\t var path = util.parsePath(jsonPath);\r\n\t var node = this;\r\n\t while (node && path.length > 0) {\r\n\t var prop = path.shift();\r\n\t if (typeof prop === 'number') {\r\n\t if (node.type !== 'array') {\r\n\t throw new Error('Cannot get child node at index ' + prop + ': node is no array');\r\n\t }\r\n\t node = node.childs[prop];\r\n\t }\r\n\t else { // string\r\n\t if (node.type !== 'object') {\r\n\t throw new Error('Cannot get child node ' + prop + ': node is no object');\r\n\t }\r\n\t node = node.childs.filter(function (child) {\r\n\t return child.field === prop;\r\n\t })[0];\r\n\t }\r\n\t }\r\n\r\n\t return node;\r\n\t};\r\n\r\n\t/**\r\n\t * Find all parents of this node. The parents are ordered from root node towards\r\n\t * the original node.\r\n\t * @return {Array.}\r\n\t */\r\n\tNode.prototype.findParents = function () {\r\n\t var parents = [];\r\n\t var parent = this.parent;\r\n\t while (parent) {\r\n\t parents.unshift(parent);\r\n\t parent = parent.parent;\r\n\t }\r\n\t return parents;\r\n\t};\r\n\r\n\t/**\r\n\t *\r\n\t * @param {{dataPath: string, keyword: string, message: string, params: Object, schemaPath: string} | null} error\r\n\t * @param {Node} [child] When this is the error of a parent node, pointing\r\n\t * to an invalid child node, the child node itself\r\n\t * can be provided. If provided, clicking the error\r\n\t * icon will set focus to the invalid child node.\r\n\t */\r\n\tNode.prototype.setError = function (error, child) {\r\n\t // ensure the dom exists\r\n\t this.getDom();\r\n\r\n\t this.error = error;\r\n\t var tdError = this.dom.tdError;\r\n\t if (error) {\r\n\t if (!tdError) {\r\n\t tdError = document.createElement('td');\r\n\t this.dom.tdError = tdError;\r\n\t this.dom.tdValue.parentNode.appendChild(tdError);\r\n\t }\r\n\r\n\t var popover = document.createElement('div');\r\n\t popover.className = 'jsoneditor-popover jsoneditor-right';\r\n\t popover.appendChild(document.createTextNode(error.message));\r\n\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = 'jsoneditor-schema-error';\r\n\t button.appendChild(popover);\r\n\r\n\t // update the direction of the popover\r\n\t button.onmouseover = button.onfocus = function updateDirection() {\r\n\t var directions = ['right', 'above', 'below', 'left'];\r\n\t for (var i = 0; i < directions.length; i++) {\r\n\t var direction = directions[i];\r\n\t popover.className = 'jsoneditor-popover jsoneditor-' + direction;\r\n\r\n\t var contentRect = this.editor.content.getBoundingClientRect();\r\n\t var popoverRect = popover.getBoundingClientRect();\r\n\t var margin = 20; // account for a scroll bar\r\n\t var fit = util.insideRect(contentRect, popoverRect, margin);\r\n\r\n\t if (fit) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t }.bind(this);\r\n\r\n\t // when clicking the error icon, expand all nodes towards the invalid\r\n\t // child node, and set focus to the child node\r\n\t if (child) {\r\n\t button.onclick = function showInvalidNode() {\r\n\t child.findParents().forEach(function (parent) {\r\n\t parent.expand(false);\r\n\t });\r\n\r\n\t child.scrollTo(function () {\r\n\t child.focus();\r\n\t });\r\n\t };\r\n\t }\r\n\r\n\t // apply the error message to the node\r\n\t while (tdError.firstChild) {\r\n\t tdError.removeChild(tdError.firstChild);\r\n\t }\r\n\t tdError.appendChild(button);\r\n\t }\r\n\t else {\r\n\t if (tdError) {\r\n\t this.dom.tdError.parentNode.removeChild(this.dom.tdError);\r\n\t delete this.dom.tdError;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the index of this node: the index in the list of childs where this\r\n\t * node is part of\r\n\t * @return {number} Returns the index, or -1 if this is the root node\r\n\t */\r\n\tNode.prototype.getIndex = function () {\r\n\t return this.parent ? this.parent.childs.indexOf(this) : -1;\r\n\t};\r\n\r\n\t/**\r\n\t * Set parent node\r\n\t * @param {Node} parent\r\n\t */\r\n\tNode.prototype.setParent = function(parent) {\r\n\t this.parent = parent;\r\n\t};\r\n\r\n\t/**\r\n\t * Set field\r\n\t * @param {String} field\r\n\t * @param {boolean} [fieldEditable]\r\n\t */\r\n\tNode.prototype.setField = function(field, fieldEditable) {\r\n\t this.field = field;\r\n\t this.previousField = field;\r\n\t this.fieldEditable = (fieldEditable === true);\r\n\t};\r\n\r\n\t/**\r\n\t * Get field\r\n\t * @return {String}\r\n\t */\r\n\tNode.prototype.getField = function() {\r\n\t if (this.field === undefined) {\r\n\t this._getDomField();\r\n\t }\r\n\r\n\t return this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Set value. Value is a JSON structure or an element String, Boolean, etc.\r\n\t * @param {*} value\r\n\t * @param {String} [type] Specify the type of the value. Can be 'auto',\r\n\t * 'array', 'object', or 'string'\r\n\t */\r\n\tNode.prototype.setValue = function(value, type) {\r\n\t var childValue, child;\r\n\r\n\t // first clear all current childs (if any)\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t while (childs.length) {\r\n\t this.removeChild(childs[0]);\r\n\t }\r\n\t }\r\n\r\n\t // TODO: remove the DOM of this Node\r\n\r\n\t this.type = this._getType(value);\r\n\r\n\t // check if type corresponds with the provided type\r\n\t if (type && type != this.type) {\r\n\t if (type == 'string' && this.type == 'auto') {\r\n\t this.type = type;\r\n\t }\r\n\t else {\r\n\t throw new Error('Type mismatch: ' +\r\n\t 'cannot cast value of type \"' + this.type +\r\n\t ' to the specified type \"' + type + '\"');\r\n\t }\r\n\t }\r\n\r\n\t if (this.type == 'array') {\r\n\t // array\r\n\t this.childs = [];\r\n\t for (var i = 0, iMax = value.length; i < iMax; i++) {\r\n\t childValue = value[i];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t // object\r\n\t this.childs = [];\r\n\t for (var childField in value) {\r\n\t if (value.hasOwnProperty(childField)) {\r\n\t childValue = value[childField];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t field: childField,\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\r\n\t // sort object keys\r\n\t if (this.editor.options.sortObjectKeys === true) {\r\n\t this.sort('asc');\r\n\t }\r\n\t }\r\n\t else {\r\n\t // value\r\n\t this.childs = undefined;\r\n\t this.value = value;\r\n\t }\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Get value. Value is a JSON structure\r\n\t * @return {*} value\r\n\t */\r\n\tNode.prototype.getValue = function() {\r\n\t //var childs, i, iMax;\r\n\r\n\t if (this.type == 'array') {\r\n\t var arr = [];\r\n\t this.childs.forEach (function (child) {\r\n\t arr.push(child.getValue());\r\n\t });\r\n\t return arr;\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t var obj = {};\r\n\t this.childs.forEach (function (child) {\r\n\t obj[child.getField()] = child.getValue();\r\n\t });\r\n\t return obj;\r\n\t }\r\n\t else {\r\n\t if (this.value === undefined) {\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t return this.value;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the nesting level of this node\r\n\t * @return {Number} level\r\n\t */\r\n\tNode.prototype.getLevel = function() {\r\n\t return (this.parent ? this.parent.getLevel() + 1 : 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Get path of the root node till the current node\r\n\t * @return {Node[]} Returns an array with nodes\r\n\t */\r\n\tNode.prototype.getNodePath = function() {\r\n\t var path = this.parent ? this.parent.getNodePath() : [];\r\n\t path.push(this);\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Create a clone of a node\r\n\t * The complete state of a clone is copied, including whether it is expanded or\r\n\t * not. The DOM elements are not cloned.\r\n\t * @return {Node} clone\r\n\t */\r\n\tNode.prototype.clone = function() {\r\n\t var clone = new Node(this.editor);\r\n\t clone.type = this.type;\r\n\t clone.field = this.field;\r\n\t clone.fieldInnerText = this.fieldInnerText;\r\n\t clone.fieldEditable = this.fieldEditable;\r\n\t clone.value = this.value;\r\n\t clone.valueInnerText = this.valueInnerText;\r\n\t clone.expanded = this.expanded;\r\n\r\n\t if (this.childs) {\r\n\t // an object or array\r\n\t var cloneChilds = [];\r\n\t this.childs.forEach(function (child) {\r\n\t var childClone = child.clone();\r\n\t childClone.setParent(clone);\r\n\t cloneChilds.push(childClone);\r\n\t });\r\n\t clone.childs = cloneChilds;\r\n\t }\r\n\t else {\r\n\t // a value\r\n\t clone.childs = undefined;\r\n\t }\r\n\r\n\t return clone;\r\n\t};\r\n\r\n\t/**\r\n\t * Expand this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be expanded recursively\r\n\t */\r\n\tNode.prototype.expand = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t // set this node expanded\r\n\t this.expanded = true;\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-expanded';\r\n\t }\r\n\r\n\t this.showChilds();\r\n\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.expand(recurse);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Collapse this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be collapsed recursively\r\n\t */\r\n\tNode.prototype.collapse = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t this.hideChilds();\r\n\r\n\t // collapse childs in case of recurse\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.collapse(recurse);\r\n\t });\r\n\r\n\t }\r\n\r\n\t // make this node collapsed\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-collapsed';\r\n\t }\r\n\t this.expanded = false;\r\n\t};\r\n\r\n\t/**\r\n\t * Recursively show all childs when they are expanded\r\n\t */\r\n\tNode.prototype.showChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t // show row with append button\r\n\t var append = this.getAppend();\r\n\t var nextTr = tr.nextSibling;\r\n\t if (nextTr) {\r\n\t table.insertBefore(append, nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(append);\r\n\t }\r\n\r\n\t // show childs\r\n\t this.childs.forEach(function (child) {\r\n\t table.insertBefore(child.getDom(), append);\r\n\t child.showChilds();\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the node with all its childs\r\n\t */\r\n\tNode.prototype.hide = function() {\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t table.removeChild(tr);\r\n\t }\r\n\t this.hideChilds();\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Recursively hide all childs\r\n\t */\r\n\tNode.prototype.hideChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t // hide append row\r\n\t var append = this.getAppend();\r\n\t if (append.parentNode) {\r\n\t append.parentNode.removeChild(append);\r\n\t }\r\n\r\n\t // hide childs\r\n\t this.childs.forEach(function (child) {\r\n\t child.hide();\r\n\t });\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Add a new child to the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t */\r\n\tNode.prototype.appendChild = function(node) {\r\n\t if (this._hasChilds()) {\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t if (this.type == 'array') {\r\n\t node.index = this.childs.length;\r\n\t }\r\n\t this.childs.push(node);\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM, before the appendRow\r\n\t var newTr = node.getDom();\r\n\t var appendTr = this.getAppend();\r\n\t var table = appendTr ? appendTr.parentNode : undefined;\r\n\t if (appendTr && table) {\r\n\t table.insertBefore(newTr, appendTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.moveBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t // create a temporary row, to prevent the scroll position from jumping\r\n\t // when removing the node\r\n\t var tbody = (this.dom.tr) ? this.dom.tr.parentNode : undefined;\r\n\t if (tbody) {\r\n\t var trTemp = document.createElement('tr');\r\n\t trTemp.style.height = tbody.clientHeight + 'px';\r\n\t tbody.appendChild(trTemp);\r\n\t }\r\n\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t if (beforeNode instanceof AppendNode) {\r\n\t this.appendChild(node);\r\n\t }\r\n\t else {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\r\n\t if (tbody) {\r\n\t tbody.removeChild(trTemp);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object.\r\n\t * If index is out of range, the node will be appended to the end\r\n\t * @param {Node} node\r\n\t * @param {Number} index\r\n\t */\r\n\tNode.prototype.moveTo = function (node, index) {\r\n\t if (node.parent == this) {\r\n\t // same parent\r\n\t var currentIndex = this.childs.indexOf(node);\r\n\t if (currentIndex < index) {\r\n\t // compensate the index for removal of the node itself\r\n\t index++;\r\n\t }\r\n\t }\r\n\r\n\t var beforeNode = this.childs[index] || this.append;\r\n\t this.moveBefore(node, beforeNode);\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.insertBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t if (beforeNode == this.append) {\r\n\t // append to the child nodes\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.push(node);\r\n\t }\r\n\t else {\r\n\t // insert before a child node\r\n\t var index = this.childs.indexOf(beforeNode);\r\n\t if (index == -1) {\r\n\t throw new Error('Node not found');\r\n\t }\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.splice(index, 0, node);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM\r\n\t var newTr = node.getDom();\r\n\t var nextTr = beforeNode.getDom();\r\n\t var table = nextTr ? nextTr.parentNode : undefined;\r\n\t if (nextTr && table) {\r\n\t table.insertBefore(newTr, nextTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} afterNode\r\n\t */\r\n\tNode.prototype.insertAfter = function(node, afterNode) {\r\n\t if (this._hasChilds()) {\r\n\t var index = this.childs.indexOf(afterNode);\r\n\t var beforeNode = this.childs[index + 1];\r\n\t if (beforeNode) {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(node);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Search in this node\r\n\t * The node will be expanded when the text is found one of its childs, else\r\n\t * it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Node[]} results Array with nodes containing the search text\r\n\t */\r\n\tNode.prototype.search = function(text) {\r\n\t var results = [];\r\n\t var index;\r\n\t var search = text ? text.toLowerCase() : undefined;\r\n\r\n\t // delete old search data\r\n\t delete this.searchField;\r\n\t delete this.searchValue;\r\n\r\n\t // search in field\r\n\t if (this.field != undefined) {\r\n\t var field = String(this.field).toLowerCase();\r\n\t index = field.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchField = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'field'\r\n\t });\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomField();\r\n\t }\r\n\r\n\t // search in value\r\n\t if (this._hasChilds()) {\r\n\t // array, object\r\n\r\n\t // search the nodes childs\r\n\t if (this.childs) {\r\n\t var childResults = [];\r\n\t this.childs.forEach(function (child) {\r\n\t childResults = childResults.concat(child.search(text));\r\n\t });\r\n\t results = results.concat(childResults);\r\n\t }\r\n\r\n\t // update dom\r\n\t if (search != undefined) {\r\n\t var recurse = false;\r\n\t if (childResults.length == 0) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // string, auto\r\n\t if (this.value != undefined ) {\r\n\t var value = String(this.value).toLowerCase();\r\n\t index = value.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchValue = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'value'\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t return results;\r\n\t};\r\n\r\n\t/**\r\n\t * Move the scroll position such that this node is in the visible area.\r\n\t * The node will not get the focus\r\n\t * @param {function(boolean)} [callback]\r\n\t */\r\n\tNode.prototype.scrollTo = function(callback) {\r\n\t if (!this.dom.tr || !this.dom.tr.parentNode) {\r\n\t // if the node is not visible, expand its parents\r\n\t var parent = this.parent;\r\n\t var recurse = false;\r\n\t while (parent) {\r\n\t parent.expand(recurse);\r\n\t parent = parent.parent;\r\n\t }\r\n\t }\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t this.editor.scrollTo(this.dom.tr.offsetTop, callback);\r\n\t }\r\n\t};\r\n\r\n\r\n\t// stores the element name currently having the focus\r\n\tNode.focusElement = undefined;\r\n\r\n\t/**\r\n\t * Set focus to this node\r\n\t * @param {String} [elementName] The field name of the element to get the\r\n\t * focus available values: 'drag', 'menu',\r\n\t * 'expand', 'field', 'value' (default)\r\n\t */\r\n\tNode.prototype.focus = function(elementName) {\r\n\t Node.focusElement = elementName;\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t var dom = this.dom;\r\n\r\n\t switch (elementName) {\r\n\t case 'drag':\r\n\t if (dom.drag) {\r\n\t dom.drag.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'menu':\r\n\t dom.menu.focus();\r\n\t break;\r\n\r\n\t case 'expand':\r\n\t if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'field':\r\n\t if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'value':\r\n\t default:\r\n\t if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text in an editable div after a delay of 0 ms\r\n\t * @param {Element} editableDiv\r\n\t */\r\n\tNode.select = function(editableDiv) {\r\n\t setTimeout(function () {\r\n\t util.selectContentEditable(editableDiv);\r\n\t }, 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Update the values from the DOM field and value of this node\r\n\t */\r\n\tNode.prototype.blur = function() {\r\n\t // retrieve the actual field and value from the DOM.\r\n\t this._getDomValue(false);\r\n\t this._getDomField(false);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if given node is a child. The method will check recursively to find\r\n\t * this node.\r\n\t * @param {Node} node\r\n\t * @return {boolean} containsNode\r\n\t */\r\n\tNode.prototype.containsNode = function(node) {\r\n\t if (this == node) {\r\n\t return true;\r\n\t }\r\n\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t // TODO: use the js5 Array.some() here?\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t if (childs[i].containsNode(node)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Move given node into this node\r\n\t * @param {Node} node the childNode to be moved\r\n\t * @param {Node} beforeNode node will be inserted before given\r\n\t * node. If no beforeNode is given,\r\n\t * the node is appended at the end\r\n\t * @private\r\n\t */\r\n\tNode.prototype._move = function(node, beforeNode) {\r\n\t if (node == beforeNode) {\r\n\t // nothing to do...\r\n\t return;\r\n\t }\r\n\r\n\t // check if this node is not a child of the node to be moved here\r\n\t if (node.containsNode(this)) {\r\n\t throw new Error('Cannot move a field into a child of itself');\r\n\t }\r\n\r\n\t // remove the original node\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t // create a clone of the node\r\n\t var clone = node.clone();\r\n\t node.clearDom();\r\n\r\n\t // insert or append the node\r\n\t if (beforeNode) {\r\n\t this.insertBefore(clone, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(clone);\r\n\t }\r\n\r\n\t /* TODO: adjust the field name (to prevent equal field names)\r\n\t if (this.type == 'object') {\r\n\t }\r\n\t */\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child from the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node The child node to be removed;\r\n\t * @return {Node | undefined} node The removed node on success,\r\n\t * else undefined\r\n\t */\r\n\tNode.prototype.removeChild = function(node) {\r\n\t if (this.childs) {\r\n\t var index = this.childs.indexOf(node);\r\n\r\n\t if (index != -1) {\r\n\t node.hide();\r\n\r\n\t // delete old search results\r\n\t delete node.searchField;\r\n\t delete node.searchValue;\r\n\r\n\t var removedNode = this.childs.splice(index, 1)[0];\r\n\t removedNode.parent = null;\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return removedNode;\r\n\t }\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child node node from this node\r\n\t * This method is equal to Node.removeChild, except that _remove fire an\r\n\t * onChange event.\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */\r\n\tNode.prototype._remove = function (node) {\r\n\t this.removeChild(node);\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the value of this Node\r\n\t * @param {String} newType\r\n\t */\r\n\tNode.prototype.changeType = function (newType) {\r\n\t var oldType = this.type;\r\n\r\n\t if (oldType == newType) {\r\n\t // type is not changed\r\n\t return;\r\n\t }\r\n\r\n\t if ((newType == 'string' || newType == 'auto') &&\r\n\t (oldType == 'string' || oldType == 'auto')) {\r\n\t // this is an easy change\r\n\t this.type = newType;\r\n\t }\r\n\t else {\r\n\t // change from array to object, or from string/auto to object/array\r\n\t var table = this.dom.tr ? this.dom.tr.parentNode : undefined;\r\n\t var lastTr;\r\n\t if (this.expanded) {\r\n\t lastTr = this.getAppend();\r\n\t }\r\n\t else {\r\n\t lastTr = this.getDom();\r\n\t }\r\n\t var nextTr = (lastTr && lastTr.parentNode) ? lastTr.nextSibling : undefined;\r\n\r\n\t // hide current field and all its childs\r\n\t this.hide();\r\n\t this.clearDom();\r\n\r\n\t // adjust the field and the value\r\n\t this.type = newType;\r\n\r\n\t // adjust childs\r\n\t if (newType == 'object') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t delete child.index;\r\n\t child.fieldEditable = true;\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else if (newType == 'array') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t child.fieldEditable = false;\r\n\t child.index = index;\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.expanded = false;\r\n\t }\r\n\r\n\t // create new DOM\r\n\t if (table) {\r\n\t if (nextTr) {\r\n\t table.insertBefore(this.getDom(), nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(this.getDom());\r\n\t }\r\n\t }\r\n\t this.showChilds();\r\n\t }\r\n\r\n\t if (newType == 'auto' || newType == 'string') {\r\n\t // cast value to the correct type\r\n\t if (newType == 'string') {\r\n\t this.value = String(this.value);\r\n\t }\r\n\t else {\r\n\t this.value = this._stringCast(String(this.value));\r\n\t }\r\n\r\n\t this.focus();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve value from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomValue = function(silent) {\r\n\t if (this.dom.value && this.type != 'array' && this.type != 'object') {\r\n\t this.valueInnerText = util.getInnerText(this.dom.value);\r\n\t }\r\n\r\n\t if (this.valueInnerText != undefined) {\r\n\t try {\r\n\t // retrieve the value\r\n\t var value;\r\n\t if (this.type == 'string') {\r\n\t value = this._unescapeHTML(this.valueInnerText);\r\n\t }\r\n\t else {\r\n\t var str = this._unescapeHTML(this.valueInnerText);\r\n\t value = this._stringCast(str);\r\n\t }\r\n\t if (value !== this.value) {\r\n\t this.value = value;\r\n\t this._debouncedOnChangeValue();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.value = undefined;\r\n\t // TODO: sent an action with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeValue = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(String(this.value), String(this.previousValue));\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(String(this.previousValue), String(this.value));\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editValue', {\r\n\t node: this,\r\n\t oldValue: this.previousValue,\r\n\t newValue: this.value,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed field\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeField = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(this.field, this.previousField);\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(this.previousField, this.field);\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editField', {\r\n\t node: this,\r\n\t oldValue: this.previousField,\r\n\t newValue: this.field,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousField = this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom value:\r\n\t * - the text color of the value, depending on the type of the value\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomValue = function () {\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var classNames = ['jsoneditor-value'];\r\n\r\n\r\n\t // set text color depending on value type\r\n\t var value = this.value;\r\n\t var type = (this.type == 'auto') ? util.type(value) : this.type;\r\n\t var isUrl = type == 'string' && util.isUrl(value);\r\n\t classNames.push('jsoneditor-' + type);\r\n\t if (isUrl) {\r\n\t classNames.push('jsoneditor-url');\r\n\t }\r\n\r\n\t // visual styling when empty\r\n\t var isEmpty = (String(this.value) == '' && this.type != 'array' && this.type != 'object');\r\n\t if (isEmpty) {\r\n\t classNames.push('jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchValueActive) {\r\n\t classNames.push('jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchValue) {\r\n\t classNames.push('jsoneditor-highlight');\r\n\t }\r\n\r\n\t domValue.className = classNames.join(' ');\r\n\r\n\t // update title\r\n\t if (type == 'array' || type == 'object') {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t domValue.title = this.type + ' containing ' + count + ' items';\r\n\t }\r\n\t else if (isUrl && this.editable.value) {\r\n\t domValue.title = 'Ctrl+Click or Ctrl+Enter to open url in new window';\r\n\t }\r\n\t else {\r\n\t domValue.title = '';\r\n\t }\r\n\r\n\t // show checkbox when the value is a boolean\r\n\t if (type === 'boolean' && this.editable.value) {\r\n\t if (!this.dom.checkbox) {\r\n\t this.dom.checkbox = document.createElement('input');\r\n\t this.dom.checkbox.type = 'checkbox';\r\n\t this.dom.tdCheckbox = document.createElement('td');\r\n\t this.dom.tdCheckbox.className = 'jsoneditor-tree';\r\n\t this.dom.tdCheckbox.appendChild(this.dom.checkbox);\r\n\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox, this.dom.tdValue);\r\n\t }\r\n\r\n\t this.dom.checkbox.checked = this.value;\r\n\t }\r\n\t else {\r\n\t // cleanup checkbox when displayed\r\n\t if (this.dom.tdCheckbox) {\r\n\t this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox);\r\n\t delete this.dom.tdCheckbox;\r\n\t delete this.dom.checkbox;\r\n\t }\r\n\t }\r\n\r\n\t if (this.enum && this.editable.value) {\r\n\t // create select box when this node has an enum object\r\n\t if (!this.dom.select) {\r\n\t this.dom.select = document.createElement('select');\r\n\t this.id = this.field + \"_\" + new Date().getUTCMilliseconds();\r\n\t this.dom.select.id = this.id;\r\n\t this.dom.select.name = this.dom.select.id;\r\n\r\n\t //Create the default empty option\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = '';\r\n\t this.dom.select.option.innerHTML = '--';\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\r\n\t //Iterate all enum values and add them as options\r\n\t for(var i = 0; i < this.enum.length; i++) {\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = this.enum[i];\r\n\t this.dom.select.option.innerHTML = this.enum[i];\r\n\t if(this.dom.select.option.value == this.value){\r\n\t this.dom.select.option.selected = true;\r\n\t }\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\t }\r\n\r\n\t this.dom.tdSelect = document.createElement('td');\r\n\t this.dom.tdSelect.className = 'jsoneditor-tree';\r\n\t this.dom.tdSelect.appendChild(this.dom.select);\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect, this.dom.tdValue);\r\n\t }\r\n\r\n\t // If the enum is inside a composite type display\r\n\t // both the simple input and the dropdown field\r\n\t if(this.schema && (\r\n\t !this.schema.hasOwnProperty(\"oneOf\") &&\r\n\t !this.schema.hasOwnProperty(\"anyOf\") &&\r\n\t !this.schema.hasOwnProperty(\"allOf\"))\r\n\t ) {\r\n\t this.valueFieldHTML = this.dom.tdValue.innerHTML;\r\n\t this.dom.tdValue.style.visibility = 'hidden';\r\n\t this.dom.tdValue.innerHTML = '';\r\n\t } else {\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // cleanup select box when displayed\r\n\t if (this.dom.tdSelect) {\r\n\t this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect);\r\n\t delete this.dom.tdSelect;\r\n\t delete this.dom.select;\r\n\t this.dom.tdValue.innerHTML = this.valueFieldHTML;\r\n\t this.dom.tdValue.style.visibility = '';\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domValue);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom field:\r\n\t * - the text color of the field, depending on the text\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomField = function () {\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t // make backgound color lightgray when empty\r\n\t var isEmpty = (String(this.field) == '' && this.parent.type != 'array');\r\n\t if (isEmpty) {\r\n\t util.addClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchFieldActive) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchField) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domField);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve field from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomField = function(silent) {\r\n\t if (this.dom.field && this.fieldEditable) {\r\n\t this.fieldInnerText = util.getInnerText(this.dom.field);\r\n\t }\r\n\r\n\t if (this.fieldInnerText != undefined) {\r\n\t try {\r\n\t var field = this._unescapeHTML(this.fieldInnerText);\r\n\r\n\t if (field !== this.field) {\r\n\t this.field = field;\r\n\t this._debouncedOnChangeField();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.field = undefined;\r\n\t // TODO: sent an action here, with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate this node and all it's childs\r\n\t * @return {Array.<{node: Node, error: {message: string}}>} Returns a list with duplicates\r\n\t */\r\n\tNode.prototype.validate = function () {\r\n\t var errors = [];\r\n\r\n\t // find duplicate keys\r\n\t if (this.type === 'object') {\r\n\t var keys = {};\r\n\t var duplicateKeys = [];\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var child = this.childs[i];\r\n\t if (keys.hasOwnProperty(child.field)) {\r\n\t duplicateKeys.push(child.field);\r\n\t }\r\n\t keys[child.field] = true;\r\n\t }\r\n\r\n\t if (duplicateKeys.length > 0) {\r\n\t errors = this.childs\r\n\t .filter(function (node) {\r\n\t return duplicateKeys.indexOf(node.field) !== -1;\r\n\t })\r\n\t .map(function (node) {\r\n\t return {\r\n\t node: node,\r\n\t error: {\r\n\t message: 'duplicate key \"' + node.field + '\"'\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // recurse over the childs\r\n\t if (this.childs) {\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var e = this.childs[i].validate();\r\n\t if (e.length > 0) {\r\n\t errors = errors.concat(e);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return errors;\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the dom of the node\r\n\t */\r\n\tNode.prototype.clearDom = function() {\r\n\t // TODO: hide the node first?\r\n\t //this.hide();\r\n\t // TODO: recursively clear dom?\r\n\r\n\t this.dom = {};\r\n\t};\r\n\r\n\t/**\r\n\t * Get the HTML DOM TR element of the node.\r\n\t * The dom will be generated when not yet created\r\n\t * @return {Element} tr HTML DOM TR Element\r\n\t */\r\n\tNode.prototype.getDom = function() {\r\n\t var dom = this.dom;\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // create row\r\n\t dom.tr = document.createElement('tr');\r\n\t dom.tr.node = this;\r\n\r\n\t if (this.editor.options.mode === 'tree') { // note: we take here the global setting\r\n\t var tdDrag = document.createElement('td');\r\n\t if (this.editable.field) {\r\n\t // create draggable area\r\n\t if (this.parent) {\r\n\t var domDrag = document.createElement('button');\r\n\t domDrag.type = 'button';\r\n\t dom.drag = domDrag;\r\n\t domDrag.className = 'jsoneditor-dragarea';\r\n\t domDrag.title = 'Drag to move this field (Alt+Shift+Arrows)';\r\n\t tdDrag.appendChild(domDrag);\r\n\t }\r\n\t }\r\n\t dom.tr.appendChild(tdDrag);\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t dom.menu = menu;\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t tdMenu.appendChild(dom.menu);\r\n\t dom.tr.appendChild(tdMenu);\r\n\t }\r\n\r\n\t // create tree and field\r\n\t var tdField = document.createElement('td');\r\n\t dom.tr.appendChild(tdField);\r\n\t dom.tree = this._createDomTree();\r\n\t tdField.appendChild(dom.tree);\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return dom.tr;\r\n\t};\r\n\r\n\t/**\r\n\t * DragStart event, fired on mousedown on the dragarea at the left side of a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragStart = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDragStart([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var draggedNode = Node.getNodeFromTarget(event.target);\r\n\t var beforeNode = lastNode._nextSibling();\r\n\t var editor = firstNode.editor;\r\n\r\n\t // in case of multiple selected nodes, offsetY prevents the selection from\r\n\t // jumping when you start dragging one of the lower down nodes in the selection\r\n\t var offsetY = util.getAbsoluteTop(draggedNode.dom.tr) - util.getAbsoluteTop(firstNode.dom.tr);\r\n\r\n\t if (!editor.mousemove) {\r\n\t editor.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t Node.onDrag(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t if (!editor.mouseup) {\r\n\t editor.mouseup = util.addEventListener(window, 'mouseup',function (event ) {\r\n\t Node.onDragEnd(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t editor.highlighter.lock();\r\n\t editor.drag = {\r\n\t oldCursor: document.body.style.cursor,\r\n\t oldSelection: editor.getSelection(),\r\n\t oldBeforeNode: beforeNode,\r\n\t mouseX: event.pageX,\r\n\t offsetY: offsetY,\r\n\t level: firstNode.getLevel()\r\n\t };\r\n\t document.body.style.cursor = 'move';\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired when moving the mouse while dragging a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDrag = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t // TODO: this method has grown too large. Split it in a number of methods\r\n\t var editor = nodes[0].editor;\r\n\t var mouseY = event.pageY - editor.drag.offsetY;\r\n\t var mouseX = event.pageX;\r\n\t var trThis, trPrev, trNext, trFirst, trLast, trRoot;\r\n\t var nodePrev, nodeNext;\r\n\t var topThis, topPrev, topFirst, heightThis, bottomNext, heightNext;\r\n\t var moved = false;\r\n\r\n\t // TODO: add an ESC option, which resets to the original position\r\n\r\n\t // move up/down\r\n\t var firstNode = nodes[0];\r\n\t trThis = firstNode.dom.tr;\r\n\t topThis = util.getAbsoluteTop(trThis);\r\n\t heightThis = trThis.offsetHeight;\r\n\t if (mouseY < topThis) {\r\n\t // move up\r\n\t trPrev = trThis;\r\n\t do {\r\n\t trPrev = trPrev.previousSibling;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t }\r\n\t while (trPrev && mouseY < topPrev);\r\n\r\n\t if (nodePrev && !nodePrev.parent) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\r\n\t if (!nodePrev) {\r\n\t // move to the first node\r\n\t trRoot = trThis.parentNode.firstChild;\r\n\t trPrev = trRoot ? trRoot.nextSibling : undefined;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t if (nodePrev == firstNode) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t // check if mouseY is really inside the found node\r\n\t trPrev = nodePrev.dom.tr;\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t if (mouseY > topPrev + heightThis) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t nodes.forEach(function (node) {\r\n\t nodePrev.parent.moveBefore(node, nodePrev);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // move down\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t trLast = (lastNode.expanded && lastNode.append) ? lastNode.append.getDom() : lastNode.dom.tr;\r\n\t trFirst = trLast ? trLast.nextSibling : undefined;\r\n\t if (trFirst) {\r\n\t topFirst = util.getAbsoluteTop(trFirst);\r\n\t trNext = trFirst;\r\n\t do {\r\n\t nodeNext = Node.getNodeFromTarget(trNext);\r\n\t if (trNext) {\r\n\t bottomNext = trNext.nextSibling ?\r\n\t util.getAbsoluteTop(trNext.nextSibling) : 0;\r\n\t heightNext = trNext ? (bottomNext - topFirst) : 0;\r\n\r\n\t if (nodeNext.parent.childs.length == nodes.length &&\r\n\t nodeNext.parent.childs[nodes.length - 1] == lastNode) {\r\n\t // We are about to remove the last child of this parent,\r\n\t // which will make the parents appendNode visible.\r\n\t topThis += 27;\r\n\t // TODO: dangerous to suppose the height of the appendNode a constant of 27 px.\r\n\t }\r\n\t }\r\n\r\n\t trNext = trNext.nextSibling;\r\n\t }\r\n\t while (trNext && mouseY > topThis + heightNext);\r\n\r\n\t if (nodeNext && nodeNext.parent) {\r\n\t // calculate the desired level\r\n\t var diffX = (mouseX - editor.drag.mouseX);\r\n\t var diffLevel = Math.round(diffX / 24 / 2);\r\n\t var level = editor.drag.level + diffLevel; // desired level\r\n\t var levelNext = nodeNext.getLevel(); // level to be\r\n\r\n\t // find the best fitting level (move upwards over the append nodes)\r\n\t trPrev = nodeNext.dom.tr.previousSibling;\r\n\t while (levelNext < level && trPrev) {\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\r\n\t var isDraggedNode = nodes.some(function (node) {\r\n\t return node === nodePrev || nodePrev._isChildOf(node);\r\n\t });\r\n\r\n\t if (isDraggedNode) {\r\n\t // neglect the dragged nodes themselves and their childs\r\n\t }\r\n\t else if (nodePrev instanceof AppendNode) {\r\n\t var childs = nodePrev.parent.childs;\r\n\t if (childs.length != nodes.length || childs[nodes.length - 1] != lastNode) {\r\n\t // non-visible append node of a list of childs\r\n\t // consisting of not only this node (else the\r\n\t // append node will change into a visible \"empty\"\r\n\t // text when removing this node).\r\n\t nodeNext = Node.getNodeFromTarget(trPrev);\r\n\t levelNext = nodeNext.getLevel();\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\r\n\t trPrev = trPrev.previousSibling;\r\n\t }\r\n\r\n\t // move the node when its position is changed\r\n\t if (trLast.nextSibling != nodeNext.dom.tr) {\r\n\t nodes.forEach(function (node) {\r\n\t nodeNext.parent.moveBefore(node, nodeNext);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (moved) {\r\n\t // update the dragging parameters when moved\r\n\t editor.drag.mouseX = mouseX;\r\n\t editor.drag.level = firstNode.getLevel();\r\n\t }\r\n\r\n\t // auto scroll when hovering around the top of the editor\r\n\t editor.startAutoScroll(mouseY);\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired on mouseup after having dragged a node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragEnd = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var editor = firstNode.editor;\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = parent.childs.indexOf(firstNode);\r\n\t var beforeNode = parent.childs[firstIndex + nodes.length] || parent.append;\r\n\r\n\t // set focus to the context menu button of the first node\r\n\t if (nodes[0]) {\r\n\t nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t var params = {\r\n\t nodes: nodes,\r\n\t oldSelection: editor.drag.oldSelection,\r\n\t newSelection: editor.getSelection(),\r\n\t oldBeforeNode: editor.drag.oldBeforeNode,\r\n\t newBeforeNode: beforeNode\r\n\t };\r\n\r\n\t if (params.oldBeforeNode != params.newBeforeNode) {\r\n\t // only register this action if the node is actually moved to another place\r\n\t editor._onAction('moveNodes', params);\r\n\t }\r\n\r\n\t document.body.style.cursor = editor.drag.oldCursor;\r\n\t editor.highlighter.unlock();\r\n\t nodes.forEach(function (node) {\r\n\t if (event.target !== node.dom.drag && event.target !== node.dom.menu) {\r\n\t editor.highlighter.unhighlight();\r\n\t }\r\n\t });\r\n\t delete editor.drag;\r\n\r\n\t if (editor.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', editor.mousemove);\r\n\t delete editor.mousemove;\r\n\t }\r\n\t if (editor.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', editor.mouseup);\r\n\t delete editor.mouseup;\r\n\t }\r\n\r\n\t // Stop any running auto scroll\r\n\t editor.stopAutoScroll();\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node is a child of an other node\r\n\t * @param {Node} node\r\n\t * @return {boolean} isChild\r\n\t * @private\r\n\t */\r\n\tNode.prototype._isChildOf = function (node) {\r\n\t var n = this.parent;\r\n\t while (n) {\r\n\t if (n == node) {\r\n\t return true;\r\n\t }\r\n\t n = n.parent;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable field\r\n\t * @return {Element} domField\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomField = function () {\r\n\t return document.createElement('div');\r\n\t};\r\n\r\n\t/**\r\n\t * Set highlighting for this node and all its childs.\r\n\t * Only applied to the currently visible (expanded childs)\r\n\t * @param {boolean} highlight\r\n\t */\r\n\tNode.prototype.setHighlight = function (highlight) {\r\n\t if (this.dom.tr) {\r\n\t if (highlight) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setHighlight(highlight);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setHighlight(highlight);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select or deselect a node\r\n\t * @param {boolean} selected\r\n\t * @param {boolean} [isFirst]\r\n\t */\r\n\tNode.prototype.setSelected = function (selected, isFirst) {\r\n\t this.selected = selected;\r\n\r\n\t if (this.dom.tr) {\r\n\t if (selected) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\r\n\t if (isFirst) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setSelected(selected);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setSelected(selected);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update the value of the node. Only primitive types are allowed, no Object\r\n\t * or Array is allowed.\r\n\t * @param {String | Number | Boolean | null} value\r\n\t */\r\n\tNode.prototype.updateValue = function (value) {\r\n\t this.value = value;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the field of the node.\r\n\t * @param {String} field\r\n\t */\r\n\tNode.prototype.updateField = function (field) {\r\n\t this.field = field;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the HTML DOM, optionally recursing through the childs\r\n\t * @param {Object} [options] Available parameters:\r\n\t * {boolean} [recurse] If true, the\r\n\t * DOM of the childs will be updated recursively.\r\n\t * False by default.\r\n\t * {boolean} [updateIndexes] If true, the childs\r\n\t * indexes of the node will be updated too. False by\r\n\t * default.\r\n\t */\r\n\tNode.prototype.updateDom = function (options) {\r\n\t // update level indentation\r\n\t var domTree = this.dom.tree;\r\n\t if (domTree) {\r\n\t domTree.style.marginLeft = this.getLevel() * 24 + 'px';\r\n\t }\r\n\r\n\t // apply field to DOM\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t if (this.fieldEditable) {\r\n\t // parent is an object\r\n\t domField.contentEditable = this.editable.field;\r\n\t domField.spellcheck = false;\r\n\t domField.className = 'jsoneditor-field';\r\n\t }\r\n\t else {\r\n\t // parent is an array this is the root node\r\n\t domField.className = 'jsoneditor-readonly';\r\n\t }\r\n\r\n\t var fieldText;\r\n\t if (this.index != undefined) {\r\n\t fieldText = this.index;\r\n\t }\r\n\t else if (this.field != undefined) {\r\n\t fieldText = this.field;\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t fieldText = this.type;\r\n\t }\r\n\t else {\r\n\t fieldText = '';\r\n\t }\r\n\t domField.innerHTML = this._escapeHTML(fieldText);\r\n\r\n\t this._updateSchema();\r\n\t }\r\n\r\n\t // apply value to DOM\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t if (this.type == 'array') {\r\n\t domValue.innerHTML = '[' + count + ']';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue.innerHTML = '{' + count + '}';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t }\r\n\r\n\t // update field and value\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\r\n\t // update childs indexes\r\n\t if (options && options.updateIndexes === true) {\r\n\t // updateIndexes is true or undefined\r\n\t this._updateDomIndexes();\r\n\t }\r\n\r\n\t if (options && options.recurse === true) {\r\n\t // recurse is true or undefined. update childs recursively\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.updateDom(options);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update row with append button\r\n\t if (this.append) {\r\n\t this.append.updateDom();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Locate the JSON schema of the node and check for any enum type\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateSchema = function () {\r\n\t //Locating the schema of the node and checking for any enum type\r\n\t if(this.editor && this.editor.options) {\r\n\t // find the part of the json schema matching this nodes path\r\n\t this.schema = Node._findSchema(this.editor.options.schema, this.getPath());\r\n\t if (this.schema) {\r\n\t this.enum = Node._findEnum(this.schema);\r\n\t }\r\n\t else {\r\n\t delete this.enum;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * find an enum definition in a JSON schema, as property `enum` or inside\r\n\t * one of the schemas composites (`oneOf`, `anyOf`, `allOf`)\r\n\t * @param {Object} schema\r\n\t * @return {Array | null} Returns the enum when found, null otherwise.\r\n\t * @private\r\n\t */\r\n\tNode._findEnum = function (schema) {\r\n\t if (schema.enum) {\r\n\t return schema.enum;\r\n\t }\r\n\r\n\t var composite = schema.oneOf || schema.anyOf || schema.allOf;\r\n\t if (composite) {\r\n\t var match = composite.filter(function (entry) {return entry.enum});\r\n\t if (match.length > 0) {\r\n\t return match[0].enum;\r\n\t }\r\n\t }\r\n\r\n\t return null\r\n\t};\r\n\r\n\t/**\r\n\t * Return the part of a JSON schema matching given path.\r\n\t * @param {Object} schema\r\n\t * @param {Array.} path\r\n\t * @return {Object | null}\r\n\t * @private\r\n\t */\r\n\tNode._findSchema = function (schema, path) {\r\n\t var childSchema = schema;\r\n\r\n\t for (var i = 0; i < path.length && childSchema; i++) {\r\n\t var key = path[i];\r\n\t if (typeof key === 'string' && childSchema.properties) {\r\n\t childSchema = childSchema.properties[key] || null\r\n\t }\r\n\t else if (typeof key === 'number' && childSchema.items) {\r\n\t childSchema = childSchema.items\r\n\t }\r\n\t }\r\n\r\n\t return childSchema\r\n\t};\r\n\r\n\t/**\r\n\t * Update the DOM of the childs of a node: update indexes and undefined field\r\n\t * names.\r\n\t * Only applicable when structure is an array or object\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomIndexes = function () {\r\n\t var domValue = this.dom.value;\r\n\t var childs = this.childs;\r\n\t if (domValue && childs) {\r\n\t if (this.type == 'array') {\r\n\t childs.forEach(function (child, index) {\r\n\t child.index = index;\r\n\t var childField = child.dom.field;\r\n\t if (childField) {\r\n\t childField.innerHTML = index;\r\n\t }\r\n\t });\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t childs.forEach(function (child) {\r\n\t if (child.index != undefined) {\r\n\t delete child.index;\r\n\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomValue = function () {\r\n\t var domValue;\r\n\r\n\t if (this.type == 'array') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '[...]';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '{...}';\r\n\t }\r\n\t else {\r\n\t if (!this.editable.value && util.isUrl(this.value)) {\r\n\t // create a link in case of read-only editor and value containing an url\r\n\t domValue = document.createElement('a');\r\n\t domValue.href = this.value;\r\n\t domValue.target = '_blank';\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t else {\r\n\t // create an editable or read-only div\r\n\t domValue = document.createElement('div');\r\n\t domValue.contentEditable = this.editable.value;\r\n\t domValue.spellcheck = false;\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t }\r\n\r\n\t return domValue;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an expand/collapse button\r\n\t * @return {Element} expand\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomExpandButton = function () {\r\n\t // create expand button\r\n\t var expand = document.createElement('button');\r\n\t expand.type = 'button';\r\n\t if (this._hasChilds()) {\r\n\t expand.className = this.expanded ? 'jsoneditor-expanded' : 'jsoneditor-collapsed';\r\n\t expand.title =\r\n\t 'Click to expand/collapse this field (Ctrl+E). \\n' +\r\n\t 'Ctrl+Click to expand/collapse including all childs.';\r\n\t }\r\n\t else {\r\n\t expand.className = 'jsoneditor-invisible';\r\n\t expand.title = '';\r\n\t }\r\n\r\n\t return expand;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Create a DOM tree element, containing the expand/collapse button\r\n\t * @return {Element} domTree\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomTree = function () {\r\n\t var dom = this.dom;\r\n\t var domTree = document.createElement('table');\r\n\t var tbody = document.createElement('tbody');\r\n\t domTree.style.borderCollapse = 'collapse'; // TODO: put in css\r\n\t domTree.className = 'jsoneditor-values';\r\n\t domTree.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t // create expand button\r\n\t var tdExpand = document.createElement('td');\r\n\t tdExpand.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdExpand);\r\n\t dom.expand = this._createDomExpandButton();\r\n\t tdExpand.appendChild(dom.expand);\r\n\t dom.tdExpand = tdExpand;\r\n\r\n\t // create the field\r\n\t var tdField = document.createElement('td');\r\n\t tdField.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdField);\r\n\t dom.field = this._createDomField();\r\n\t tdField.appendChild(dom.field);\r\n\t dom.tdField = tdField;\r\n\r\n\t // create a separator\r\n\t var tdSeparator = document.createElement('td');\r\n\t tdSeparator.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdSeparator);\r\n\t if (this.type != 'object' && this.type != 'array') {\r\n\t tdSeparator.appendChild(document.createTextNode(':'));\r\n\t tdSeparator.className = 'jsoneditor-separator';\r\n\t }\r\n\t dom.tdSeparator = tdSeparator;\r\n\r\n\t // create the value\r\n\t var tdValue = document.createElement('td');\r\n\t tdValue.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdValue);\r\n\t dom.value = this._createDomValue();\r\n\t tdValue.appendChild(dom.value);\r\n\t dom.tdValue = tdValue;\r\n\r\n\t return domTree;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle an event. The event is caught centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onEvent = function (event) {\r\n\t var type = event.type,\r\n\t target = event.target || event.srcElement,\r\n\t dom = this.dom,\r\n\t node = this,\r\n\t expandable = this._hasChilds();\r\n\r\n\t // check if mouse is on menu or on dragarea.\r\n\t // If so, highlight current row and its childs\r\n\t if (target == dom.drag || target == dom.menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = node.editor.highlighter;\r\n\t highlighter.highlight(node);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t // expand events\r\n\t if (type == 'click') {\r\n\t if (target == dom.expand ||\r\n\t ((node.editor.options.mode === 'view' || node.editor.options.mode === 'form') && target.nodeName === 'DIV')) {\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // swap the value of a boolean when the checkbox displayed left is clicked\r\n\t if (type == 'change' && target == dom.checkbox) {\r\n\t this.dom.value.innerHTML = !this.value;\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t // update the value of the node based on the selected option\r\n\t if (type == 'change' && target == dom.select) {\r\n\t this.dom.value.innerHTML = dom.select.value;\r\n\t this._getDomValue();\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t // value events\r\n\t var domValue = dom.value;\r\n\t if (target == domValue) {\r\n\t //noinspection FallthroughInSwitchStatementJS\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t if (this.value) {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t // TODO: cleanup\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'click':\r\n\t if (event.ctrlKey || !this.editable.value) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t }\r\n\t }\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomValue(true);\r\n\t node._updateDomValue();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // field events\r\n\t var domField = dom.field;\r\n\t if (target == domField) {\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t if (this.field) {\r\n\t domField.innerHTML = this._escapeHTML(this.field);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t this._getDomField(true);\r\n\t this._updateSchema();\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomField(true);\r\n\t node._updateDomField();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // focus\r\n\t // when clicked in whitespace left or right from the field or value, set focus\r\n\t var domTree = dom.tree;\r\n\t if (target == domTree.parentNode && type == 'click' && !event.hasMoved) {\r\n\t var left = (event.offsetX != undefined) ?\r\n\t (event.offsetX < (this.getLevel() + 1) * 24) :\r\n\t (event.pageX < util.getAbsoluteLeft(dom.tdSeparator));// for FF\r\n\t if (left || expandable) {\r\n\t // node is expandable when it is an object or array\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (domValue && !this.enum) {\r\n\t util.setEndOfContentEditable(domValue);\r\n\t domValue.focus();\r\n\t }\r\n\t }\r\n\t }\r\n\t if (((target == dom.tdExpand && !expandable) || target == dom.tdField || target == dom.tdSeparator) &&\r\n\t (type == 'click' && !event.hasMoved)) {\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Key down event handler\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var target = event.target || event.srcElement;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var altKey = event.altKey;\r\n\t var handled = false;\r\n\t var prevNode, nextNode, nextDom, nextDom2;\r\n\t var editable = this.editor.options.mode === 'tree';\r\n\t var oldSelection;\r\n\t var oldBeforeNode;\r\n\t var nodes;\r\n\t var multiselection;\r\n\t var selectedNodes = this.editor.multiselection.nodes.length > 0\r\n\t ? this.editor.multiselection.nodes\r\n\t : [this];\r\n\t var firstNode = selectedNodes[0];\r\n\t var lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n\t // console.log(ctrlKey, keynum, event.charCode); // TODO: cleanup\r\n\t if (keynum == 13) { // Enter\r\n\t if (target == this.dom.value) {\r\n\t if (!this.editable.value || event.ctrlKey) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (target == this.dom.expand) {\r\n\t var expandable = this._hasChilds();\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t target.focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 68) { // D\r\n\t if (ctrlKey && editable) { // Ctrl+D\r\n\t Node.onDuplicate(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 69) { // E\r\n\t if (ctrlKey) { // Ctrl+E and Ctrl+Shift+E\r\n\t this._onExpand(shiftKey); // recurse = shiftKey\r\n\t target.focus(); // TODO: should restore focus in case of recursing expand (which takes DOM offline)\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 77 && editable) { // M\r\n\t if (ctrlKey) { // Ctrl+M\r\n\t this.showContextMenu(target);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 46 && editable) { // Del\r\n\t if (ctrlKey) { // Ctrl+Del\r\n\t Node.onRemove(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 45 && editable) { // Ins\r\n\t if (ctrlKey && !shiftKey) { // Ctrl+Ins\r\n\t this._onInsertBefore();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey) { // Ctrl+Shift+Ins\r\n\t this._onInsertAfter();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 35) { // End\r\n\t if (altKey) { // Alt+End\r\n\t // find the last node\r\n\t var endNode = this._lastNode();\r\n\t if (endNode) {\r\n\t endNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 36) { // Home\r\n\t if (altKey) { // Alt+Home\r\n\t // find the first node\r\n\t var homeNode = this._firstNode();\r\n\t if (homeNode) {\r\n\t homeNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Left\r\n\t // move to left element\r\n\t var prevElement = this._previousElement(target);\r\n\t if (prevElement) {\r\n\t this.focus(this._getElementName(prevElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow left\r\n\t if (lastNode.expanded) {\r\n\t var appendDom = lastNode.getAppend();\r\n\t nextDom = appendDom ? appendDom.nextSibling : undefined;\r\n\t }\r\n\t else {\r\n\t var dom = lastNode.getDom();\r\n\t nextDom = dom.nextSibling;\r\n\t }\r\n\t if (nextDom) {\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t nextDom2 = nextDom.nextSibling;\r\n\t nextNode2 = Node.getNodeFromTarget(nextDom2);\r\n\t if (nextNode && nextNode instanceof AppendNode &&\r\n\t !(lastNode.parent.childs.length == 1) &&\r\n\t nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t this.editor.deselect(true);\r\n\t prevNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Up\r\n\t // select multiple nodes\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = prevNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t prevNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = firstNode._previousNode();\r\n\t if (prevNode && prevNode.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Right\r\n\t // move to right element\r\n\t var nextElement = this._nextElement(target);\r\n\t if (nextElement) {\r\n\t this.focus(this._getElementName(nextElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Right\r\n\t dom = firstNode.getDom();\r\n\t var prevDom = dom.previousSibling;\r\n\t if (prevDom) {\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t if (prevNode && prevNode.parent &&\r\n\t (prevNode instanceof AppendNode)\r\n\t && !prevNode.isVisible()) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Down\r\n\t // find the next node\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t this.editor.deselect(true);\r\n\t nextNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Down\r\n\t // select multiple nodes\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = nextNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t nextNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Down\r\n\t // find the 2nd next node and move before that one\r\n\t if (lastNode.expanded) {\r\n\t nextNode = lastNode.append ? lastNode.append._nextNode() : undefined;\r\n\t }\r\n\t else {\r\n\t nextNode = lastNode._nextNode();\r\n\t }\r\n\t var nextNode2 = nextNode && (nextNode._nextNode() || nextNode.parent.append);\r\n\t if (nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle the expand event, when clicked on the expand button\r\n\t * @param {boolean} recurse If true, child nodes will be expanded too\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onExpand = function (recurse) {\r\n\t if (recurse) {\r\n\t // Take the table offline\r\n\t var table = this.dom.tr.parentNode; // TODO: not nice to access the main table like this\r\n\t var frame = table.parentNode;\r\n\t var scrollTop = frame.scrollTop;\r\n\t frame.removeChild(table);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\r\n\t if (recurse) {\r\n\t // Put the table online again\r\n\t frame.appendChild(table);\r\n\t frame.scrollTop = scrollTop;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onRemove = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onRemove([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var editor = firstNode.editor;\r\n\t var firstIndex = firstNode.getIndex();\r\n\t editor.highlighter.unhighlight();\r\n\r\n\t // adjust the focus\r\n\t var oldSelection = editor.getSelection();\r\n\t Node.blurNodes(nodes);\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t // remove the nodes\r\n\t nodes.forEach(function (node) {\r\n\t node.parent._remove(node);\r\n\t });\r\n\r\n\t // store history action\r\n\t editor._onAction('removeNodes', {\r\n\t nodes: nodes.slice(0), // store a copy of the array!\r\n\t parent: parent,\r\n\t index: firstIndex,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Duplicate nodes\r\n\t * duplicated nodes will be added right after the original nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onDuplicate = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDuplicate([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var parent = lastNode.parent;\r\n\t var editor = lastNode.editor;\r\n\r\n\t editor.deselect(editor.multiselection.nodes);\r\n\r\n\t // duplicate the nodes\r\n\t var oldSelection = editor.getSelection();\r\n\t var afterNode = lastNode;\r\n\t var clones = nodes.map(function (node) {\r\n\t var clone = node.clone();\r\n\t parent.insertAfter(clone, afterNode);\r\n\t afterNode = clone;\r\n\t return clone;\r\n\t });\r\n\r\n\t // set selection to the duplicated nodes\r\n\t if (nodes.length === 1) {\r\n\t clones[0].focus();\r\n\t }\r\n\t else {\r\n\t editor.select(clones);\r\n\t }\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t editor._onAction('duplicateNodes', {\r\n\t afterNode: lastNode,\r\n\t nodes: clones,\r\n\t parent: parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert before event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertBefore = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertBefore(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertBeforeNodes', {\r\n\t nodes: [newNode],\r\n\t beforeNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert after event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertAfter = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertAfter(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertAfterNodes', {\r\n\t nodes: [newNode],\r\n\t afterNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle append event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onAppend = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.appendChild(newNode);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('appendNodes', {\r\n\t nodes: [newNode],\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the node's value\r\n\t * @param {String} newType\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeType = function (newType) {\r\n\t var oldType = this.type;\r\n\t if (newType != oldType) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\t this.changeType(newType);\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('changeType', {\r\n\t node: this,\r\n\t oldType: oldType,\r\n\t newType: newType,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sort the child's of the node. Only applicable when the node has type 'object'\r\n\t * or 'array'.\r\n\t * @param {String} direction Sorting direction. Available values: \"asc\", \"desc\"\r\n\t * @private\r\n\t */\r\n\tNode.prototype.sort = function (direction) {\r\n\t if (!this._hasChilds()) {\r\n\t return;\r\n\t }\r\n\r\n\t var order = (direction == 'desc') ? -1 : 1;\r\n\t var prop = (this.type == 'array') ? 'value': 'field';\r\n\t this.hideChilds();\r\n\r\n\t var oldChilds = this.childs;\r\n\t var oldSortOrder = this.sortOrder;\r\n\r\n\t // copy the array (the old one will be kept for an undo action\r\n\t this.childs = this.childs.concat();\r\n\r\n\t // sort the arrays\r\n\t this.childs.sort(function (a, b) {\r\n\t return order * naturalSort(a[prop], b[prop]);\r\n\t });\r\n\t this.sortOrder = (order == 1) ? 'asc' : 'desc';\r\n\r\n\t this.editor._onAction('sort', {\r\n\t node: this,\r\n\t oldChilds: oldChilds,\r\n\t oldSort: oldSortOrder,\r\n\t newChilds: this.childs,\r\n\t newSort: this.sortOrder\r\n\t });\r\n\r\n\t this.showChilds();\r\n\t};\r\n\r\n\t/**\r\n\t * Create a table row with an append button.\r\n\t * @return {HTMLElement | undefined} buttonAppend or undefined when inapplicable\r\n\t */\r\n\tNode.prototype.getAppend = function () {\r\n\t if (!this.append) {\r\n\t this.append = new AppendNode(this.editor);\r\n\t this.append.setParent(this);\r\n\t }\r\n\t return this.append.getDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Find the node from an event target\r\n\t * @param {Node} target\r\n\t * @return {Node | undefined} node or undefined when not found\r\n\t * @static\r\n\t */\r\n\tNode.getNodeFromTarget = function (target) {\r\n\t while (target) {\r\n\t if (target.node) {\r\n\t return target.node;\r\n\t }\r\n\t target = target.parentNode;\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove the focus of given nodes, and move the focus to the (a) node before,\r\n\t * (b) the node after, or (c) the parent node.\r\n\t * @param {Array. | Node} nodes\r\n\t */\r\n\tNode.blurNodes = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t Node.blurNodes([nodes]);\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = firstNode.getIndex();\r\n\r\n\t if (parent.childs[firstIndex + nodes.length]) {\r\n\t parent.childs[firstIndex + nodes.length].focus();\r\n\t }\r\n\t else if (parent.childs[firstIndex - 1]) {\r\n\t parent.childs[firstIndex - 1].focus();\r\n\t }\r\n\t else {\r\n\t parent.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next sibling of current node\r\n\t * @return {Node} nextSibling\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextSibling = function () {\r\n\t var index = this.parent.childs.indexOf(this);\r\n\t return this.parent.childs[index + 1] || this.parent.append;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the previously rendered node\r\n\t * @return {Node | null} previousNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousNode = function () {\r\n\t var prevNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var prevDom = dom;\r\n\t do {\r\n\t prevDom = prevDom.previousSibling;\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t }\r\n\t while (prevDom && (prevNode instanceof AppendNode && !prevNode.isVisible()));\r\n\t }\r\n\t return prevNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next rendered node\r\n\t * @return {Node | null} nextNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextNode = function () {\r\n\t var nextNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var nextDom = dom;\r\n\t do {\r\n\t nextDom = nextDom.nextSibling;\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t }\r\n\t while (nextDom && (nextNode instanceof AppendNode && !nextNode.isVisible()));\r\n\t }\r\n\r\n\t return nextNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the first rendered node\r\n\t * @return {Node | null} firstNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._firstNode = function () {\r\n\t var firstNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var firstDom = dom.parentNode.firstChild;\r\n\t firstNode = Node.getNodeFromTarget(firstDom);\r\n\t }\r\n\r\n\t return firstNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the last rendered node\r\n\t * @return {Node | null} lastNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._lastNode = function () {\r\n\t var lastNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var lastDom = dom.parentNode.lastChild;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t while (lastDom && (lastNode instanceof AppendNode && !lastNode.isVisible())) {\r\n\t lastDom = lastDom.previousSibling;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t }\r\n\t }\r\n\t return lastNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.value:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (dom.drag) {\r\n\t return dom.drag;\r\n\t }\r\n\t // intentional fall through\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.drag:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (!this._hasChilds()) {\r\n\t return dom.value;\r\n\t }\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the dom name of given element. returns null if not found.\r\n\t * For example when element == dom.field, \"field\" is returned.\r\n\t * @param {Element} element\r\n\t * @return {String | null} elementName Available elements with name: 'drag',\r\n\t * 'menu', 'expand', 'field', 'value'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getElementName = function (element) {\r\n\t var dom = this.dom;\r\n\t for (var name in dom) {\r\n\t if (dom.hasOwnProperty(name)) {\r\n\t if (dom[name] == element) {\r\n\t return name;\r\n\t }\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node has childs. This is the case when the node is an object\r\n\t * or array.\r\n\t * @return {boolean} hasChilds\r\n\t * @private\r\n\t */\r\n\tNode.prototype._hasChilds = function () {\r\n\t return this.type == 'array' || this.type == 'object';\r\n\t};\r\n\r\n\t// titles with explanation for the different types\r\n\tNode.TYPE_TITLES = {\r\n\t 'auto': 'Field type \"auto\". ' +\r\n\t 'The field type is automatically determined from the value ' +\r\n\t 'and can be a string, number, boolean, or null.',\r\n\t 'object': 'Field type \"object\". ' +\r\n\t 'An object contains an unordered set of key/value pairs.',\r\n\t 'array': 'Field type \"array\". ' +\r\n\t 'An array contains an ordered collection of values.',\r\n\t 'string': 'Field type \"string\". ' +\r\n\t 'Field type is not determined from the value, ' +\r\n\t 'but always returned as string.'\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor Anchor element to attach the context menu to\r\n\t * as sibling.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\tNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [];\r\n\r\n\t if (this.editable.value) {\r\n\t items.push({\r\n\t text: 'Type',\r\n\t title: 'Change the type of this field',\r\n\t className: 'jsoneditor-type-' + this.type,\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto' +\r\n\t (this.type == 'auto' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onChangeType('auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array' +\r\n\t (this.type == 'array' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onChangeType('array');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object' +\r\n\t (this.type == 'object' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onChangeType('object');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string' +\r\n\t (this.type == 'string' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onChangeType('string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this._hasChilds()) {\r\n\t var direction = ((this.sortOrder == 'asc') ? 'desc': 'asc');\r\n\t items.push({\r\n\t text: 'Sort',\r\n\t title: 'Sort the childs of this ' + this.type,\r\n\t className: 'jsoneditor-sort-' + direction,\r\n\t click: function () {\r\n\t node.sort(direction);\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Ascending',\r\n\t className: 'jsoneditor-sort-asc',\r\n\t title: 'Sort the childs of this ' + this.type + ' in ascending order',\r\n\t click: function () {\r\n\t node.sort('asc');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Descending',\r\n\t className: 'jsoneditor-sort-desc',\r\n\t title: 'Sort the childs of this ' + this.type +' in descending order',\r\n\t click: function () {\r\n\t node.sort('desc');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this.parent && this.parent._hasChilds()) {\r\n\t if (items.length) {\r\n\t // create a separator\r\n\t items.push({\r\n\t 'type': 'separator'\r\n\t });\r\n\t }\r\n\r\n\t // create append button (for last child node only)\r\n\t var childs = node.parent.childs;\r\n\t if (node == childs[childs.length - 1]) {\r\n\t items.push({\r\n\t text: 'Append',\r\n\t title: 'Append a new field with type \\'auto\\' after this field (Ctrl+Shift+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be appended',\r\n\t className: 'jsoneditor-append',\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t // create insert button\r\n\t items.push({\r\n\t text: 'Insert',\r\n\t title: 'Insert a new field with type \\'auto\\' before this field (Ctrl+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be inserted',\r\n\t className: 'jsoneditor-insert',\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onInsertBefore('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onInsertBefore('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\r\n\t if (this.editable.field) {\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate this field (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(node);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove this field (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(node);\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t};\r\n\r\n\t/**\r\n\t * get the type of a value\r\n\t * @param {*} value\r\n\t * @return {String} type Can be 'object', 'array', 'string', 'auto'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getType = function(value) {\r\n\t if (value instanceof Array) {\r\n\t return 'array';\r\n\t }\r\n\t if (value instanceof Object) {\r\n\t return 'object';\r\n\t }\r\n\t if (typeof(value) == 'string' && typeof(this._stringCast(value)) != 'string') {\r\n\t return 'string';\r\n\t }\r\n\r\n\t return 'auto';\r\n\t};\r\n\r\n\t/**\r\n\t * cast contents of a string to the correct type. This can be a string,\r\n\t * a number, a boolean, etc\r\n\t * @param {String} str\r\n\t * @return {*} castedStr\r\n\t * @private\r\n\t */\r\n\tNode.prototype._stringCast = function(str) {\r\n\t var lower = str.toLowerCase(),\r\n\t num = Number(str), // will nicely fail with '123ab'\r\n\t numFloat = parseFloat(str); // will nicely fail with ' '\r\n\r\n\t if (str == '') {\r\n\t return '';\r\n\t }\r\n\t else if (lower == 'null') {\r\n\t return null;\r\n\t }\r\n\t else if (lower == 'true') {\r\n\t return true;\r\n\t }\r\n\t else if (lower == 'false') {\r\n\t return false;\r\n\t }\r\n\t else if (!isNaN(num) && !isNaN(numFloat)) {\r\n\t return num;\r\n\t }\r\n\t else {\r\n\t return str;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text, such that it can be displayed safely in an HTML element\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeHTML = function (text) {\r\n\t if (typeof text !== 'string') {\r\n\t return String(text);\r\n\t }\r\n\t else {\r\n\t var htmlEscaped = String(text)\r\n\t .replace(/&/g, '&') // must be replaced first!\r\n\t .replace(//g, '>')\r\n\t .replace(/ /g, '  ') // replace double space with an nbsp and space\r\n\t .replace(/^ /, ' ') // space at start\r\n\t .replace(/ $/, ' '); // space at end\r\n\r\n\t var json = JSON.stringify(htmlEscaped);\r\n\t var html = json.substring(1, json.length - 1);\r\n\t if (this.editor.options.escapeUnicode === true) {\r\n\t html = util.escapeUnicodeChars(html);\r\n\t }\r\n\t return html;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * unescape a string.\r\n\t * @param {String} escapedText\r\n\t * @return {String} text\r\n\t * @private\r\n\t */\r\n\tNode.prototype._unescapeHTML = function (escapedText) {\r\n\t var json = '\"' + this._escapeJSON(escapedText) + '\"';\r\n\t var htmlEscaped = util.parse(json);\r\n\r\n\t return htmlEscaped\r\n\t .replace(/</g, '<')\r\n\t .replace(/>/g, '>')\r\n\t .replace(/ |\\u00A0/g, ' ')\r\n\t .replace(/&/g, '&'); // must be replaced last\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text to make it a valid JSON string. The method will:\r\n\t * - replace unescaped double quotes with '\\\"'\r\n\t * - replace unescaped backslash with '\\\\'\r\n\t * - replace returns with '\\n'\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeJSON = function (text) {\r\n\t // TODO: replace with some smart regex (only when a new solution is faster!)\r\n\t var escaped = '';\r\n\t var i = 0;\r\n\t while (i < text.length) {\r\n\t var c = text.charAt(i);\r\n\t if (c == '\\n') {\r\n\t escaped += '\\\\n';\r\n\t }\r\n\t else if (c == '\\\\') {\r\n\t escaped += c;\r\n\t i++;\r\n\r\n\t c = text.charAt(i);\r\n\t if (c === '' || '\"\\\\/bfnrtu'.indexOf(c) == -1) {\r\n\t escaped += '\\\\'; // no valid escape character\r\n\t }\r\n\t escaped += c;\r\n\t }\r\n\t else if (c == '\"') {\r\n\t escaped += '\\\\\"';\r\n\t }\r\n\t else {\r\n\t escaped += c;\r\n\t }\r\n\t i++;\r\n\t }\r\n\r\n\t return escaped;\r\n\t};\r\n\r\n\t// TODO: find a nicer solution to resolve this circular dependency between Node and AppendNode\r\n\tvar AppendNode = appendNodeFactory(Node);\r\n\r\n\tmodule.exports = Node;\r\n\r\n\r\n/***/ },\r\n/* 59 */\r\n/***/ function(module, exports) {\r\n\r\n\t/*\r\n\t * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n\t * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n\t */\r\n\t/*jshint unused:false */\r\n\tmodule.exports = function naturalSort (a, b) {\r\n\t\t\"use strict\";\r\n\t\tvar re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\r\n\t\t\tsre = /(^[ ]*|[ ]*$)/g,\r\n\t\t\tdre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\r\n\t\t\thre = /^0x[0-9a-f]+$/i,\r\n\t\t\tore = /^0/,\r\n\t\t\ti = function(s) { return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s; },\r\n\t\t\t// convert all to strings strip whitespace\r\n\t\t\tx = i(a).replace(sre, '') || '',\r\n\t\t\ty = i(b).replace(sre, '') || '',\r\n\t\t\t// chunk/tokenize\r\n\t\t\txN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\tyN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\t// numeric, hex or date detection\r\n\t\t\txD = parseInt(x.match(hre), 16) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),\r\n\t\t\tyD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null,\r\n\t\t\toFxNcL, oFyNcL;\r\n\t\t// first try and sort Hex codes or Dates\r\n\t\tif (yD) {\r\n\t\t\tif ( xD < yD ) { return -1; }\r\n\t\t\telse if ( xD > yD ) { return 1; }\r\n\t\t}\r\n\t\t// natural sorting through split numeric strings and default strings\r\n\t\tfor(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n\t\t\t// find floats not starting with '0', string or 0 if not defined (Clint Priest)\r\n\t\t\toFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n\t\t\toFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\t\tif (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }\r\n\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\t\telse if (typeof oFxNcL !== typeof oFyNcL) {\r\n\t\t\t\toFxNcL += '';\r\n\t\t\t\toFyNcL += '';\r\n\t\t\t}\r\n\t\t\tif (oFxNcL < oFyNcL) { return -1; }\r\n\t\t\tif (oFxNcL > oFyNcL) { return 1; }\r\n\t\t}\r\n\t\treturn 0;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 60 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * A factory function to create an AppendNode, which depends on a Node\r\n\t * @param {Node} Node\r\n\t */\r\n\tfunction appendNodeFactory(Node) {\r\n\t /**\r\n\t * @constructor AppendNode\r\n\t * @extends Node\r\n\t * @param {TreeEditor} editor\r\n\t * Create a new AppendNode. This is a special node which is created at the\r\n\t * end of the list with childs for an object or array\r\n\t */\r\n\t function AppendNode (editor) {\r\n\t /** @type {TreeEditor} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t }\r\n\r\n\t AppendNode.prototype = new Node();\r\n\r\n\t /**\r\n\t * Return a table row with an append button.\r\n\t * @return {Element} dom TR element\r\n\t */\r\n\t AppendNode.prototype.getDom = function () {\r\n\t // TODO: implement a new solution for the append node\r\n\t var dom = this.dom;\r\n\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // a row for the append button\r\n\t var trAppend = document.createElement('tr');\r\n\t trAppend.node = this;\r\n\t dom.tr = trAppend;\r\n\r\n\t // TODO: consistent naming\r\n\r\n\t if (this.editor.options.mode === 'tree') {\r\n\t // a cell for the dragarea column\r\n\t dom.tdDrag = document.createElement('td');\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t dom.tdMenu = tdMenu;\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t dom.menu = menu;\r\n\t tdMenu.appendChild(dom.menu);\r\n\t }\r\n\r\n\t // a cell for the contents (showing text 'empty')\r\n\t var tdAppend = document.createElement('td');\r\n\t var domText = document.createElement('div');\r\n\t domText.innerHTML = '(empty)';\r\n\t domText.className = 'jsoneditor-readonly';\r\n\t tdAppend.appendChild(domText);\r\n\t dom.td = tdAppend;\r\n\t dom.text = domText;\r\n\r\n\t this.updateDom();\r\n\r\n\t return trAppend;\r\n\t };\r\n\r\n\t /**\r\n\t * Update the HTML dom of the Node\r\n\t */\r\n\t AppendNode.prototype.updateDom = function () {\r\n\t var dom = this.dom;\r\n\t var tdAppend = dom.td;\r\n\t if (tdAppend) {\r\n\t tdAppend.style.paddingLeft = (this.getLevel() * 24 + 26) + 'px';\r\n\t // TODO: not so nice hard coded offset\r\n\t }\r\n\r\n\t var domText = dom.text;\r\n\t if (domText) {\r\n\t domText.innerHTML = '(empty ' + this.parent.type + ')';\r\n\t }\r\n\r\n\t // attach or detach the contents of the append node:\r\n\t // hide when the parent has childs, show when the parent has no childs\r\n\t var trAppend = dom.tr;\r\n\t if (!this.isVisible()) {\r\n\t if (dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.removeChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.removeChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.removeChild(tdAppend);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (!dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.appendChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.appendChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.appendChild(tdAppend);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t /**\r\n\t * Check whether the AppendNode is currently visible.\r\n\t * the AppendNode is visible when its parent has no childs (i.e. is empty).\r\n\t * @return {boolean} isVisible\r\n\t */\r\n\t AppendNode.prototype.isVisible = function () {\r\n\t return (this.parent.childs.length == 0);\r\n\t };\r\n\r\n\t /**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor The element to attach the menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\t AppendNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [\r\n\t // create append button\r\n\t {\r\n\t 'text': 'Append',\r\n\t 'title': 'Append a new field with type \\'auto\\' (Ctrl+Shift+Ins)',\r\n\t 'submenuTitle': 'Select the type of the field to be appended',\r\n\t 'className': 'jsoneditor-insert',\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t 'submenu': [\r\n\t {\r\n\t 'text': 'Auto',\r\n\t 'className': 'jsoneditor-type-auto',\r\n\t 'title': titles.auto,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Array',\r\n\t 'className': 'jsoneditor-type-array',\r\n\t 'title': titles.array,\r\n\t 'click': function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Object',\r\n\t 'className': 'jsoneditor-type-object',\r\n\t 'title': titles.object,\r\n\t 'click': function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'String',\r\n\t 'className': 'jsoneditor-type-string',\r\n\t 'title': titles.string,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t }\r\n\t ];\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t };\r\n\r\n\t /**\r\n\t * Handle an event. The event is catched centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\t AppendNode.prototype.onEvent = function (event) {\r\n\t var type = event.type;\r\n\t var target = event.target || event.srcElement;\r\n\t var dom = this.dom;\r\n\r\n\t // highlight the append nodes parent\r\n\t var menu = dom.menu;\r\n\t if (target == menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this.parent);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = this.editor.highlighter;\r\n\t highlighter.highlight(this.parent);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t };\r\n\r\n\t return AppendNode;\r\n\t}\r\n\r\n\tmodule.exports = appendNodeFactory;\r\n\r\n\r\n/***/ },\r\n/* 61 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * Create a select box to be used in the editor menu's, which allows to switch mode\r\n\t * @param {HTMLElement} container\r\n\t * @param {String[]} modes Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {String} current Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {function(mode: string)} onSwitch Callback invoked on switch\r\n\t * @constructor\r\n\t */\r\n\tfunction ModeSwitcher(container, modes, current, onSwitch) {\r\n\t // available modes\r\n\t var availableModes = {\r\n\t code: {\r\n\t 'text': 'Code',\r\n\t 'title': 'Switch to code highlighter',\r\n\t 'click': function () {\r\n\t onSwitch('code')\r\n\t }\r\n\t },\r\n\t form: {\r\n\t 'text': 'Form',\r\n\t 'title': 'Switch to form editor',\r\n\t 'click': function () {\r\n\t onSwitch('form');\r\n\t }\r\n\t },\r\n\t text: {\r\n\t 'text': 'Text',\r\n\t 'title': 'Switch to plain text editor',\r\n\t 'click': function () {\r\n\t onSwitch('text');\r\n\t }\r\n\t },\r\n\t tree: {\r\n\t 'text': 'Tree',\r\n\t 'title': 'Switch to tree editor',\r\n\t 'click': function () {\r\n\t onSwitch('tree');\r\n\t }\r\n\t },\r\n\t view: {\r\n\t 'text': 'View',\r\n\t 'title': 'Switch to tree view',\r\n\t 'click': function () {\r\n\t onSwitch('view');\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t // list the selected modes\r\n\t var items = [];\r\n\t for (var i = 0; i < modes.length; i++) {\r\n\t var mode = modes[i];\r\n\t var item = availableModes[mode];\r\n\t if (!item) {\r\n\t throw new Error('Unknown mode \"' + mode + '\"');\r\n\t }\r\n\r\n\t item.className = 'jsoneditor-type-modes' + ((current == mode) ? ' jsoneditor-selected' : '');\r\n\t items.push(item);\r\n\t }\r\n\r\n\t // retrieve the title of current mode\r\n\t var currentMode = availableModes[current];\r\n\t if (!currentMode) {\r\n\t throw new Error('Unknown mode \"' + current + '\"');\r\n\t }\r\n\t var currentTitle = currentMode.text;\r\n\r\n\t // create the html element\r\n\t var box = document.createElement('button');\r\n\t box.type = 'button';\r\n\t box.className = 'jsoneditor-modes jsoneditor-separator';\r\n\t box.innerHTML = currentTitle + ' ▾';\r\n\t box.title = 'Switch editor mode';\r\n\t box.onclick = function () {\r\n\t var menu = new ContextMenu(items);\r\n\t menu.show(box);\r\n\t };\r\n\r\n\t var frame = document.createElement('div');\r\n\t frame.className = 'jsoneditor-modes';\r\n\t frame.style.position = 'relative';\r\n\t frame.appendChild(box);\r\n\r\n\t container.appendChild(frame);\r\n\r\n\t this.dom = {\r\n\t container: container,\r\n\t box: box,\r\n\t frame: frame\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * Set focus to switcher\r\n\t */\r\n\tModeSwitcher.prototype.focus = function () {\r\n\t this.dom.box.focus();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the ModeSwitcher, remove from DOM\r\n\t */\r\n\tModeSwitcher.prototype.destroy = function () {\r\n\t if (this.dom && this.dom.frame && this.dom.frame.parentNode) {\r\n\t this.dom.frame.parentNode.removeChild(this.dom.frame);\r\n\t }\r\n\t this.dom = null;\r\n\t};\r\n\r\n\tmodule.exports = ModeSwitcher;\r\n\r\n\r\n/***/ },\r\n/* 62 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ace;\r\n\ttry {\r\n\t ace = __webpack_require__(63);\r\n\t}\r\n\tcatch (err) {\r\n\t // failed to load ace, no problem, we will fall back to plain text\r\n\t}\r\n\r\n\tvar ModeSwitcher = __webpack_require__(61);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t// create a mixin with the functions for text mode\r\n\tvar textmode = {};\r\n\r\n\tvar MAX_ERRORS = 3; // maximum number of displayed errors at the bottom\r\n\r\n\tvar DEFAULT_THEME = 'ace/theme/jsoneditor';\r\n\r\n\t/**\r\n\t * Create a text editor\r\n\t * @param {Element} container\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Available values:\r\n\t * \"text\" (default)\r\n\t * or \"code\".\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 2 by default.\r\n\t * {function} onChange Callback method\r\n\t * triggered on change\r\n\t * {function} onModeChange Callback method\r\n\t * triggered after setMode\r\n\t * {Object} ace A custom instance of\r\n\t * Ace editor.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * @private\r\n\t */\r\n\ttextmode.create = function (container, options) {\r\n\t // read options\r\n\t options = options || {};\r\n\t this.options = options;\r\n\r\n\t // indentation\r\n\t if (options.indentation) {\r\n\t this.indentation = Number(options.indentation);\r\n\t }\r\n\t else {\r\n\t this.indentation = 2; // number of spaces\r\n\t }\r\n\r\n\t // grab ace from options if provided\r\n\t var _ace = options.ace ? options.ace : ace;\r\n\r\n\t // determine mode\r\n\t this.mode = (options.mode == 'code') ? 'code' : 'text';\r\n\t if (this.mode == 'code') {\r\n\t // verify whether Ace editor is available and supported\r\n\t if (typeof _ace === 'undefined') {\r\n\t this.mode = 'text';\r\n\t console.warn('Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.');\r\n\t }\r\n\t }\r\n\r\n\t // determine theme\r\n\t this.theme = options.theme || DEFAULT_THEME;\r\n\t if (this.theme === DEFAULT_THEME && window.ace) {\r\n\t __webpack_require__(70);\r\n\t }\r\n\r\n\t var me = this;\r\n\t this.container = container;\r\n\t this.dom = {};\r\n\t this.aceEditor = undefined; // ace code editor\r\n\t this.textarea = undefined; // plain text editor (fallback when Ace is not available)\r\n\t this.validateSchema = null;\r\n\r\n\t // create a debounced validate function\r\n\t this._debouncedValidate = util.debounce(this.validate.bind(this), this.DEBOUNCE_INTERVAL);\r\n\r\n\t this.width = container.clientWidth;\r\n\t this.height = container.clientHeight;\r\n\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.frame.onclick = function (event) {\r\n\t // prevent default submit action when the editor is located inside a form\r\n\t event.preventDefault();\r\n\t };\r\n\t this.frame.onkeydown = function (event) {\r\n\t me._onKeyDown(event);\r\n\t };\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create format button\r\n\t var buttonFormat = document.createElement('button');\r\n\t buttonFormat.type = 'button';\r\n\t buttonFormat.className = 'jsoneditor-format';\r\n\t buttonFormat.title = 'Format JSON data, with proper indentation and line feeds (Ctrl+\\\\)';\r\n\t this.menu.appendChild(buttonFormat);\r\n\t buttonFormat.onclick = function () {\r\n\t try {\r\n\t me.format();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create compact button\r\n\t var buttonCompact = document.createElement('button');\r\n\t buttonCompact.type = 'button';\r\n\t buttonCompact.className = 'jsoneditor-compact';\r\n\t buttonCompact.title = 'Compact JSON data, remove all whitespaces (Ctrl+Shift+\\\\)';\r\n\t this.menu.appendChild(buttonCompact);\r\n\t buttonCompact.onclick = function () {\r\n\t try {\r\n\t me.compact();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-outer';\r\n\t this.frame.appendChild(this.content);\r\n\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t if (this.mode == 'code') {\r\n\t this.editorDom = document.createElement('div');\r\n\t this.editorDom.style.height = '100%'; // TODO: move to css\r\n\t this.editorDom.style.width = '100%'; // TODO: move to css\r\n\t this.content.appendChild(this.editorDom);\r\n\r\n\t var aceEditor = _ace.edit(this.editorDom);\r\n\t aceEditor.$blockScrolling = Infinity;\r\n\t aceEditor.setTheme(this.theme);\r\n\t aceEditor.setShowPrintMargin(false);\r\n\t aceEditor.setFontSize(13);\r\n\t aceEditor.getSession().setMode('ace/mode/json');\r\n\t aceEditor.getSession().setTabSize(this.indentation);\r\n\t aceEditor.getSession().setUseSoftTabs(true);\r\n\t aceEditor.getSession().setUseWrapMode(true);\r\n\t aceEditor.commands.bindKey('Ctrl-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t aceEditor.commands.bindKey('Command-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t this.aceEditor = aceEditor;\r\n\r\n\t // TODO: deprecated since v5.0.0. Cleanup backward compatibility some day\r\n\t if (!this.hasOwnProperty('editor')) {\r\n\t Object.defineProperty(this, 'editor', {\r\n\t get: function () {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t return me.aceEditor;\r\n\t },\r\n\t set: function (aceEditor) {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t me.aceEditor = aceEditor;\r\n\t }\r\n\t });\r\n\t }\r\n\r\n\t var poweredBy = document.createElement('a');\r\n\t poweredBy.appendChild(document.createTextNode('powered by ace'));\r\n\t poweredBy.href = 'http://ace.ajax.org';\r\n\t poweredBy.target = '_blank';\r\n\t poweredBy.className = 'jsoneditor-poweredBy';\r\n\t poweredBy.onclick = function () {\r\n\t // TODO: this anchor falls below the margin of the content,\r\n\t // therefore the normal a.href does not work. We use a click event\r\n\t // for now, but this should be fixed.\r\n\t window.open(poweredBy.href, poweredBy.target);\r\n\t };\r\n\t this.menu.appendChild(poweredBy);\r\n\r\n\t // register onchange event\r\n\t aceEditor.on('change', this._onChange.bind(this));\r\n\t }\r\n\t else {\r\n\t // load a plain text textarea\r\n\t var textarea = document.createElement('textarea');\r\n\t textarea.className = 'jsoneditor-text';\r\n\t textarea.spellcheck = false;\r\n\t this.content.appendChild(textarea);\r\n\t this.textarea = textarea;\r\n\r\n\t // register onchange event\r\n\t if (this.textarea.oninput === null) {\r\n\t this.textarea.oninput = this._onChange.bind(this);\r\n\t }\r\n\t else {\r\n\t // oninput is undefined. For IE8-\r\n\t this.textarea.onchange = this._onChange.bind(this);\r\n\t }\r\n\t }\r\n\r\n\t this.setSchema(this.options.schema);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */\r\n\ttextmode._onChange = function () {\r\n\t // validate JSON schema (if configured)\r\n\t this._debouncedValidate();\r\n\r\n\t // trigger the onChange callback\r\n\t if (this.options.onChange) {\r\n\t try {\r\n\t this.options.onChange();\r\n\t }\r\n\t catch (err) {\r\n\t console.error('Error in onChange callback: ', err);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttextmode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 220 && event.ctrlKey) {\r\n\t if (event.shiftKey) { // Ctrl+Shift+\\\r\n\t this.compact();\r\n\t this._onChange();\r\n\t }\r\n\t else { // Ctrl+\\\r\n\t this.format();\r\n\t this._onChange();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\ttextmode.destroy = function () {\r\n\t // remove old ace editor\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.destroy();\r\n\t this.aceEditor = null;\r\n\t }\r\n\r\n\t if (this.frame && this.container && this.frame.parentNode == this.container) {\r\n\t this.container.removeChild(this.frame);\r\n\t }\r\n\r\n\t if (this.modeSwitcher) {\r\n\t this.modeSwitcher.destroy();\r\n\t this.modeSwitcher = null;\r\n\t }\r\n\r\n\t this.textarea = null;\r\n\t \r\n\t this._debouncedValidate = null;\r\n\t};\r\n\r\n\t/**\r\n\t * Compact the code in the formatter\r\n\t */\r\n\ttextmode.compact = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Format the code in the formatter\r\n\t */\r\n\ttextmode.format = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json, null, this.indentation);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the formatter\r\n\t */\r\n\ttextmode.focus = function () {\r\n\t if (this.textarea) {\r\n\t this.textarea.focus();\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Resize the formatter\r\n\t */\r\n\ttextmode.resize = function () {\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set json data in the formatter\r\n\t * @param {Object} json\r\n\t */\r\n\ttextmode.set = function(json) {\r\n\t this.setText(JSON.stringify(json, null, this.indentation));\r\n\t};\r\n\r\n\t/**\r\n\t * Get json data from the formatter\r\n\t * @return {Object} json\r\n\t */\r\n\ttextmode.get = function() {\r\n\t var text = this.getText();\r\n\t var json;\r\n\r\n\t try {\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\t catch (err) {\r\n\t // try to sanitize json, replace JavaScript notation with JSON notation\r\n\t text = util.sanitize(text);\r\n\r\n\t // try to parse again\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\r\n\t return json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */\r\n\ttextmode.getText = function() {\r\n\t if (this.textarea) {\r\n\t return this.textarea.value;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t return this.aceEditor.getValue();\r\n\t }\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */\r\n\ttextmode.setText = function(jsonText) {\r\n\t var text;\r\n\r\n\t if (this.options.escapeUnicode === true) {\r\n\t text = util.escapeUnicodeChars(jsonText);\r\n\t }\r\n\t else {\r\n\t text = jsonText;\r\n\t }\r\n\r\n\t if (this.textarea) {\r\n\t this.textarea.value = text;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t // prevent emitting onChange events while setting new text\r\n\t var originalOnChange = this.options.onChange;\r\n\t this.options.onChange = null;\r\n\r\n\t this.aceEditor.setValue(text, -1);\r\n\r\n\t this.options.onChange = originalOnChange;\r\n\t }\r\n\r\n\t // validate JSON schema\r\n\t this.validate();\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\ttextmode.validate = function () {\r\n\t // clear all current errors\r\n\t if (this.dom.validationErrors) {\r\n\t this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);\r\n\t this.dom.validationErrors = null;\r\n\r\n\t this.content.style.marginBottom = '';\r\n\t this.content.style.paddingBottom = '';\r\n\t }\r\n\r\n\t var doValidate = false;\r\n\t var errors = [];\r\n\t var json;\r\n\t try {\r\n\t json = this.get(); // this can fail when there is no valid json\r\n\t doValidate = true;\r\n\t }\r\n\t catch (err) {\r\n\t // no valid JSON, don't validate\r\n\t }\r\n\r\n\t // only validate the JSON when parsing the JSON succeeded\r\n\t if (doValidate && this.validateSchema) {\r\n\t var valid = this.validateSchema(json);\r\n\t if (!valid) {\r\n\t errors = this.validateSchema.errors.map(function (error) {\r\n\t return util.improveSchemaError(error);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (errors.length > 0) {\r\n\t // limit the number of displayed errors\r\n\t var limit = errors.length > MAX_ERRORS;\r\n\t if (limit) {\r\n\t errors = errors.slice(0, MAX_ERRORS);\r\n\t var hidden = this.validateSchema.errors.length - MAX_ERRORS;\r\n\t errors.push('(' + hidden + ' more errors...)')\r\n\t }\r\n\r\n\t var validationErrors = document.createElement('div');\r\n\t validationErrors.innerHTML = '' +\r\n\t '' +\r\n\t errors.map(function (error) {\r\n\t var message;\r\n\t if (typeof error === 'string') {\r\n\t message = '';\r\n\t }\r\n\t else {\r\n\t message = '' +\r\n\t '';\r\n\t }\r\n\r\n\t return '' + message + ''\r\n\t }).join('') +\r\n\t '' +\r\n\t '
' + error + '
' + error.dataPath + '' + error.message + '
';\r\n\r\n\t this.dom.validationErrors = validationErrors;\r\n\t this.frame.appendChild(validationErrors);\r\n\r\n\t var height = validationErrors.clientHeight;\r\n\t this.content.style.marginBottom = (-height) + 'px';\r\n\t this.content.style.paddingBottom = height + 'px';\r\n\t }\r\n\r\n\t // update the height of the ace editor\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'text',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t },\r\n\t {\r\n\t mode: 'code',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 63 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t// load brace\r\n\tvar ace = __webpack_require__(64);\r\n\r\n\t// load required ace modules\r\n\t__webpack_require__(67);\r\n\t__webpack_require__(69);\r\n\r\n\tmodule.exports = ace;\r\n\r\n\r\n/***/ },\r\n/* 64 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\t/**\r\n\t * Define a module along with a payload\r\n\t * @param module a name for the payload\r\n\t * @param payload a function to call with (acequire, exports, module) params\r\n\t */\r\n\r\n\t(function() {\r\n\r\n\tvar ACE_NAMESPACE = \"ace\";\r\n\r\n\tvar global = (function() { return this; })();\r\n\tif (!global && typeof window != \"undefined\") global = window; // strict mode\r\n\r\n\r\n\tif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\r\n\t return;\r\n\r\n\r\n\tvar define = function(module, deps, payload) {\r\n\t if (typeof module !== \"string\") {\r\n\t if (define.original)\r\n\t define.original.apply(this, arguments);\r\n\t else {\r\n\t console.error(\"dropping module because define wasn\\'t a string.\");\r\n\t console.trace();\r\n\t }\r\n\t return;\r\n\t }\r\n\t if (arguments.length == 2)\r\n\t payload = deps;\r\n\t if (!define.modules[module]) {\r\n\t define.payloads[module] = payload;\r\n\t define.modules[module] = null;\r\n\t }\r\n\t};\r\n\r\n\tdefine.modules = {};\r\n\tdefine.payloads = {};\r\n\r\n\t/**\r\n\t * Get at functionality define()ed using the function above\r\n\t */\r\n\tvar _acequire = function(parentId, module, callback) {\r\n\t if (typeof module === \"string\") {\r\n\t var payload = lookup(parentId, module);\r\n\t if (payload != undefined) {\r\n\t callback && callback();\r\n\t return payload;\r\n\t }\r\n\t } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\r\n\t var params = [];\r\n\t for (var i = 0, l = module.length; i < l; ++i) {\r\n\t var dep = lookup(parentId, module[i]);\r\n\t if (dep == undefined && acequire.original)\r\n\t return;\r\n\t params.push(dep);\r\n\t }\r\n\t return callback && callback.apply(null, params) || true;\r\n\t }\r\n\t};\r\n\r\n\tvar acequire = function(module, callback) {\r\n\t var packagedModule = _acequire(\"\", module, callback);\r\n\t if (packagedModule == undefined && acequire.original)\r\n\t return acequire.original.apply(this, arguments);\r\n\t return packagedModule;\r\n\t};\r\n\r\n\tvar normalizeModule = function(parentId, moduleName) {\r\n\t // normalize plugin acequires\r\n\t if (moduleName.indexOf(\"!\") !== -1) {\r\n\t var chunks = moduleName.split(\"!\");\r\n\t return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\r\n\t }\r\n\t // normalize relative acequires\r\n\t if (moduleName.charAt(0) == \".\") {\r\n\t var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\r\n\t moduleName = base + \"/\" + moduleName;\r\n\r\n\t while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\r\n\t var previous = moduleName;\r\n\t moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\r\n\t }\r\n\t }\r\n\t return moduleName;\r\n\t};\r\n\r\n\t/**\r\n\t * Internal function to lookup moduleNames and resolve them by calling the\r\n\t * definition function if needed.\r\n\t */\r\n\tvar lookup = function(parentId, moduleName) {\r\n\t moduleName = normalizeModule(parentId, moduleName);\r\n\r\n\t var module = define.modules[moduleName];\r\n\t if (!module) {\r\n\t module = define.payloads[moduleName];\r\n\t if (typeof module === 'function') {\r\n\t var exports = {};\r\n\t var mod = {\r\n\t id: moduleName,\r\n\t uri: '',\r\n\t exports: exports,\r\n\t packaged: true\r\n\t };\r\n\r\n\t var req = function(module, callback) {\r\n\t return _acequire(moduleName, module, callback);\r\n\t };\r\n\r\n\t var returnValue = module(req, exports, mod);\r\n\t exports = returnValue || mod.exports;\r\n\t define.modules[moduleName] = exports;\r\n\t delete define.payloads[moduleName];\r\n\t }\r\n\t module = define.modules[moduleName] = exports || module;\r\n\t }\r\n\t return module;\r\n\t};\r\n\r\n\tfunction exportAce(ns) {\r\n\t var root = global;\r\n\t if (ns) {\r\n\t if (!global[ns])\r\n\t global[ns] = {};\r\n\t root = global[ns];\r\n\t }\r\n\r\n\t if (!root.define || !root.define.packaged) {\r\n\t define.original = root.define;\r\n\t root.define = define;\r\n\t root.define.packaged = true;\r\n\t }\r\n\r\n\t if (!root.acequire || !root.acequire.packaged) {\r\n\t acequire.original = root.acequire;\r\n\t root.acequire = acequire;\r\n\t root.acequire.packaged = true;\r\n\t }\r\n\t}\r\n\r\n\texportAce(ACE_NAMESPACE);\r\n\r\n\t})();\r\n\r\n\tace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\t var real = {\r\n\t exec: RegExp.prototype.exec,\r\n\t test: RegExp.prototype.test,\r\n\t match: String.prototype.match,\r\n\t replace: String.prototype.replace,\r\n\t split: String.prototype.split\r\n\t },\r\n\t compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\r\n\t compliantLastIndexIncrement = function () {\r\n\t var x = /^/g;\r\n\t real.test.call(x, \"\");\r\n\t return !x.lastIndex;\r\n\t }();\r\n\r\n\t if (compliantLastIndexIncrement && compliantExecNpcg)\r\n\t return;\r\n\t RegExp.prototype.exec = function (str) {\r\n\t var match = real.exec.apply(this, arguments),\r\n\t name, r2;\r\n\t if ( typeof(str) == 'string' && match) {\r\n\t if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\r\n\t r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\r\n\t real.replace.call(str.slice(match.index), r2, function () {\r\n\t for (var i = 1; i < arguments.length - 2; i++) {\r\n\t if (arguments[i] === undefined)\r\n\t match[i] = undefined;\r\n\t }\r\n\t });\r\n\t }\r\n\t if (this._xregexp && this._xregexp.captureNames) {\r\n\t for (var i = 1; i < match.length; i++) {\r\n\t name = this._xregexp.captureNames[i - 1];\r\n\t if (name)\r\n\t match[name] = match[i];\r\n\t }\r\n\t }\r\n\t if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t }\r\n\t return match;\r\n\t };\r\n\t if (!compliantLastIndexIncrement) {\r\n\t RegExp.prototype.test = function (str) {\r\n\t var match = real.exec.call(this, str);\r\n\t if (match && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t return !!match;\r\n\t };\r\n\t }\r\n\r\n\t function getNativeFlags (regex) {\r\n\t return (regex.global ? \"g\" : \"\") +\r\n\t (regex.ignoreCase ? \"i\" : \"\") +\r\n\t (regex.multiline ? \"m\" : \"\") +\r\n\t (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\r\n\t (regex.sticky ? \"y\" : \"\");\r\n\t }\r\n\r\n\t function indexOf (array, item, from) {\r\n\t if (Array.prototype.indexOf) // Use the native array method if available\r\n\t return array.indexOf(item, from);\r\n\t for (var i = from || 0; i < array.length; i++) {\r\n\t if (array[i] === item)\r\n\t return i;\r\n\t }\r\n\t return -1;\r\n\t }\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\r\n\tfunction Empty() {}\r\n\r\n\tif (!Function.prototype.bind) {\r\n\t Function.prototype.bind = function bind(that) { // .length is 1\r\n\t var target = this;\r\n\t if (typeof target != \"function\") {\r\n\t throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\r\n\t }\r\n\t var args = slice.call(arguments, 1); // for normal call\r\n\t var bound = function () {\r\n\r\n\t if (this instanceof bound) {\r\n\r\n\t var result = target.apply(\r\n\t this,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\t if (Object(result) === result) {\r\n\t return result;\r\n\t }\r\n\t return this;\r\n\r\n\t } else {\r\n\t return target.apply(\r\n\t that,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\r\n\t }\r\n\r\n\t };\r\n\t if(target.prototype) {\r\n\t Empty.prototype = target.prototype;\r\n\t bound.prototype = new Empty();\r\n\t Empty.prototype = null;\r\n\t }\r\n\t return bound;\r\n\t };\r\n\t}\r\n\tvar call = Function.prototype.call;\r\n\tvar prototypeOfArray = Array.prototype;\r\n\tvar prototypeOfObject = Object.prototype;\r\n\tvar slice = prototypeOfArray.slice;\r\n\tvar _toString = call.bind(prototypeOfObject.toString);\r\n\tvar owns = call.bind(prototypeOfObject.hasOwnProperty);\r\n\tvar defineGetter;\r\n\tvar defineSetter;\r\n\tvar lookupGetter;\r\n\tvar lookupSetter;\r\n\tvar supportsAccessors;\r\n\tif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\r\n\t defineGetter = call.bind(prototypeOfObject.__defineGetter__);\r\n\t defineSetter = call.bind(prototypeOfObject.__defineSetter__);\r\n\t lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\r\n\t lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\r\n\t}\r\n\tif ([1,2].splice(0).length != 2) {\r\n\t if(function() { // test IE < 9 to splice bug - see issue #138\r\n\t function makeArray(l) {\r\n\t var a = new Array(l+2);\r\n\t a[0] = a[1] = 0;\r\n\t return a;\r\n\t }\r\n\t var array = [], lengthBefore;\r\n\t \r\n\t array.splice.apply(array, makeArray(20));\r\n\t array.splice.apply(array, makeArray(26));\r\n\r\n\t lengthBefore = array.length; //46\r\n\t array.splice(5, 0, \"XXX\"); // add one element\r\n\r\n\t lengthBefore + 1 == array.length\r\n\r\n\t if (lengthBefore + 1 == array.length) {\r\n\t return true;// has right splice implementation without bugs\r\n\t }\r\n\t }()) {//IE 6/7\r\n\t var array_splice = Array.prototype.splice;\r\n\t Array.prototype.splice = function(start, deleteCount) {\r\n\t if (!arguments.length) {\r\n\t return [];\r\n\t } else {\r\n\t return array_splice.apply(this, [\r\n\t start === void 0 ? 0 : start,\r\n\t deleteCount === void 0 ? (this.length - start) : deleteCount\r\n\t ].concat(slice.call(arguments, 2)))\r\n\t }\r\n\t };\r\n\t } else {//IE8\r\n\t Array.prototype.splice = function(pos, removeCount){\r\n\t var length = this.length;\r\n\t if (pos > 0) {\r\n\t if (pos > length)\r\n\t pos = length;\r\n\t } else if (pos == void 0) {\r\n\t pos = 0;\r\n\t } else if (pos < 0) {\r\n\t pos = Math.max(length + pos, 0);\r\n\t }\r\n\r\n\t if (!(pos+removeCount < length))\r\n\t removeCount = length - pos;\r\n\r\n\t var removed = this.slice(pos, pos+removeCount);\r\n\t var insert = slice.call(arguments, 2);\r\n\t var add = insert.length; \r\n\t if (pos === length) {\r\n\t if (add) {\r\n\t this.push.apply(this, insert);\r\n\t }\r\n\t } else {\r\n\t var remove = Math.min(removeCount, length - pos);\r\n\t var tailOldPos = pos + remove;\r\n\t var tailNewPos = tailOldPos + add - remove;\r\n\t var tailCount = length - tailOldPos;\r\n\t var lengthAfterRemove = length - remove;\r\n\r\n\t if (tailNewPos < tailOldPos) { // case A\r\n\t for (var i = 0; i < tailCount; ++i) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } else if (tailNewPos > tailOldPos) { // case B\r\n\t for (i = tailCount; i--; ) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } // else, add == remove (nothing to do)\r\n\r\n\t if (add && pos === lengthAfterRemove) {\r\n\t this.length = lengthAfterRemove; // truncate array\r\n\t this.push.apply(this, insert);\r\n\t } else {\r\n\t this.length = lengthAfterRemove + add; // reserves space\r\n\t for (i = 0; i < add; ++i) {\r\n\t this[pos+i] = insert[i];\r\n\t }\r\n\t }\r\n\t }\r\n\t return removed;\r\n\t };\r\n\t }\r\n\t}\r\n\tif (!Array.isArray) {\r\n\t Array.isArray = function isArray(obj) {\r\n\t return _toString(obj) == \"[object Array]\";\r\n\t };\r\n\t}\r\n\tvar boxedString = Object(\"a\"),\r\n\t splitString = boxedString[0] != \"a\" || !(0 in boxedString);\r\n\r\n\tif (!Array.prototype.forEach) {\r\n\t Array.prototype.forEach = function forEach(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t thisp = arguments[1],\r\n\t i = -1,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\r\n\t while (++i < length) {\r\n\t if (i in self) {\r\n\t fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t }\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.map) {\r\n\t Array.prototype.map = function map(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = Array(length),\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self)\r\n\t result[i] = fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.filter) {\r\n\t Array.prototype.filter = function filter(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = [],\r\n\t value,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self) {\r\n\t value = self[i];\r\n\t if (fun.call(thisp, value, i, object)) {\r\n\t result.push(value);\r\n\t }\r\n\t }\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.every) {\r\n\t Array.prototype.every = function every(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && !fun.call(thisp, self[i], i, object)) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.some) {\r\n\t Array.prototype.some = function some(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && fun.call(thisp, self[i], i, object)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduce) {\r\n\t Array.prototype.reduce = function reduce(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\r\n\t var i = 0;\r\n\t var result;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i++];\r\n\t break;\r\n\t }\r\n\t if (++i >= length) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t for (; i < length; i++) {\r\n\t if (i in self) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t }\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduceRight) {\r\n\t Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\r\n\t var result, i = length - 1;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i--];\r\n\t break;\r\n\t }\r\n\t if (--i < 0) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t do {\r\n\t if (i in this) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t } while (i--);\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\r\n\t Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\r\n\t var i = 0;\r\n\t if (arguments.length > 1) {\r\n\t i = toInteger(arguments[1]);\r\n\t }\r\n\t i = i >= 0 ? i : Math.max(0, length + i);\r\n\t for (; i < length; i++) {\r\n\t if (i in self && self[i] === sought) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\r\n\t Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\t var i = length - 1;\r\n\t if (arguments.length > 1) {\r\n\t i = Math.min(i, toInteger(arguments[1]));\r\n\t }\r\n\t i = i >= 0 ? i : length - Math.abs(i);\r\n\t for (; i >= 0; i--) {\r\n\t if (i in self && sought === self[i]) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Object.getPrototypeOf) {\r\n\t Object.getPrototypeOf = function getPrototypeOf(object) {\r\n\t return object.__proto__ || (\r\n\t object.constructor ?\r\n\t object.constructor.prototype :\r\n\t prototypeOfObject\r\n\t );\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyDescriptor) {\r\n\t var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\r\n\t \"non-object: \";\r\n\t Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT + object);\r\n\t if (!owns(object, property))\r\n\t return;\r\n\r\n\t var descriptor, getter, setter;\r\n\t descriptor = { enumerable: true, configurable: true };\r\n\t if (supportsAccessors) {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\r\n\t var getter = lookupGetter(object, property);\r\n\t var setter = lookupSetter(object, property);\r\n\t object.__proto__ = prototype;\r\n\r\n\t if (getter || setter) {\r\n\t if (getter) descriptor.get = getter;\r\n\t if (setter) descriptor.set = setter;\r\n\t return descriptor;\r\n\t }\r\n\t }\r\n\t descriptor.value = object[property];\r\n\t return descriptor;\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyNames) {\r\n\t Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\r\n\t return Object.keys(object);\r\n\t };\r\n\t}\r\n\tif (!Object.create) {\r\n\t var createEmpty;\r\n\t if (Object.prototype.__proto__ === null) {\r\n\t createEmpty = function () {\r\n\t return { \"__proto__\": null };\r\n\t };\r\n\t } else {\r\n\t createEmpty = function () {\r\n\t var empty = {};\r\n\t for (var i in empty)\r\n\t empty[i] = null;\r\n\t empty.constructor =\r\n\t empty.hasOwnProperty =\r\n\t empty.propertyIsEnumerable =\r\n\t empty.isPrototypeOf =\r\n\t empty.toLocaleString =\r\n\t empty.toString =\r\n\t empty.valueOf =\r\n\t empty.__proto__ = null;\r\n\t return empty;\r\n\t }\r\n\t }\r\n\r\n\t Object.create = function create(prototype, properties) {\r\n\t var object;\r\n\t if (prototype === null) {\r\n\t object = createEmpty();\r\n\t } else {\r\n\t if (typeof prototype != \"object\")\r\n\t throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\r\n\t var Type = function () {};\r\n\t Type.prototype = prototype;\r\n\t object = new Type();\r\n\t object.__proto__ = prototype;\r\n\t }\r\n\t if (properties !== void 0)\r\n\t Object.defineProperties(object, properties);\r\n\t return object;\r\n\t };\r\n\t}\r\n\r\n\tfunction doesDefinePropertyWork(object) {\r\n\t try {\r\n\t Object.defineProperty(object, \"sentinel\", {});\r\n\t return \"sentinel\" in object;\r\n\t } catch (exception) {\r\n\t }\r\n\t}\r\n\tif (Object.defineProperty) {\r\n\t var definePropertyWorksOnObject = doesDefinePropertyWork({});\r\n\t var definePropertyWorksOnDom = typeof document == \"undefined\" ||\r\n\t doesDefinePropertyWork(document.createElement(\"div\"));\r\n\t if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\r\n\t var definePropertyFallback = Object.defineProperty;\r\n\t }\r\n\t}\r\n\r\n\tif (!Object.defineProperty || definePropertyFallback) {\r\n\t var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\r\n\t var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\r\n\t var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\r\n\t \"on this javascript engine\";\r\n\r\n\t Object.defineProperty = function defineProperty(object, property, descriptor) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_TARGET + object);\r\n\t if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\r\n\t if (definePropertyFallback) {\r\n\t try {\r\n\t return definePropertyFallback.call(Object, object, property, descriptor);\r\n\t } catch (exception) {\r\n\t }\r\n\t }\r\n\t if (owns(descriptor, \"value\")) {\r\n\r\n\t if (supportsAccessors && (lookupGetter(object, property) ||\r\n\t lookupSetter(object, property)))\r\n\t {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\t delete object[property];\r\n\t object[property] = descriptor.value;\r\n\t object.__proto__ = prototype;\r\n\t } else {\r\n\t object[property] = descriptor.value;\r\n\t }\r\n\t } else {\r\n\t if (!supportsAccessors)\r\n\t throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\r\n\t if (owns(descriptor, \"get\"))\r\n\t defineGetter(object, property, descriptor.get);\r\n\t if (owns(descriptor, \"set\"))\r\n\t defineSetter(object, property, descriptor.set);\r\n\t }\r\n\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.defineProperties) {\r\n\t Object.defineProperties = function defineProperties(object, properties) {\r\n\t for (var property in properties) {\r\n\t if (owns(properties, property))\r\n\t Object.defineProperty(object, property, properties[property]);\r\n\t }\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.seal) {\r\n\t Object.seal = function seal(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.freeze) {\r\n\t Object.freeze = function freeze(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\ttry {\r\n\t Object.freeze(function () {});\r\n\t} catch (exception) {\r\n\t Object.freeze = (function freeze(freezeObject) {\r\n\t return function freeze(object) {\r\n\t if (typeof object == \"function\") {\r\n\t return object;\r\n\t } else {\r\n\t return freezeObject(object);\r\n\t }\r\n\t };\r\n\t })(Object.freeze);\r\n\t}\r\n\tif (!Object.preventExtensions) {\r\n\t Object.preventExtensions = function preventExtensions(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.isSealed) {\r\n\t Object.isSealed = function isSealed(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isFrozen) {\r\n\t Object.isFrozen = function isFrozen(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isExtensible) {\r\n\t Object.isExtensible = function isExtensible(object) {\r\n\t if (Object(object) === object) {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\t var name = '';\r\n\t while (owns(object, name)) {\r\n\t name += '?';\r\n\t }\r\n\t object[name] = true;\r\n\t var returnValue = owns(object, name);\r\n\t delete object[name];\r\n\t return returnValue;\r\n\t };\r\n\t}\r\n\tif (!Object.keys) {\r\n\t var hasDontEnumBug = true,\r\n\t dontEnums = [\r\n\t \"toString\",\r\n\t \"toLocaleString\",\r\n\t \"valueOf\",\r\n\t \"hasOwnProperty\",\r\n\t \"isPrototypeOf\",\r\n\t \"propertyIsEnumerable\",\r\n\t \"constructor\"\r\n\t ],\r\n\t dontEnumsLength = dontEnums.length;\r\n\r\n\t for (var key in {\"toString\": null}) {\r\n\t hasDontEnumBug = false;\r\n\t }\r\n\r\n\t Object.keys = function keys(object) {\r\n\r\n\t if (\r\n\t (typeof object != \"object\" && typeof object != \"function\") ||\r\n\t object === null\r\n\t ) {\r\n\t throw new TypeError(\"Object.keys called on a non-object\");\r\n\t }\r\n\r\n\t var keys = [];\r\n\t for (var name in object) {\r\n\t if (owns(object, name)) {\r\n\t keys.push(name);\r\n\t }\r\n\t }\r\n\r\n\t if (hasDontEnumBug) {\r\n\t for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\r\n\t var dontEnum = dontEnums[i];\r\n\t if (owns(object, dontEnum)) {\r\n\t keys.push(dontEnum);\r\n\t }\r\n\t }\r\n\t }\r\n\t return keys;\r\n\t };\r\n\r\n\t}\r\n\tif (!Date.now) {\r\n\t Date.now = function now() {\r\n\t return new Date().getTime();\r\n\t };\r\n\t}\r\n\tvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\r\n\t \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\r\n\t \"\\u2029\\uFEFF\";\r\n\tif (!String.prototype.trim || ws.trim()) {\r\n\t ws = \"[\" + ws + \"]\";\r\n\t var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\r\n\t trimEndRegexp = new RegExp(ws + ws + \"*$\");\r\n\t String.prototype.trim = function trim() {\r\n\t return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\r\n\t };\r\n\t}\r\n\r\n\tfunction toInteger(n) {\r\n\t n = +n;\r\n\t if (n !== n) { // isNaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t return n;\r\n\t}\r\n\r\n\tfunction isPrimitive(input) {\r\n\t var type = typeof input;\r\n\t return (\r\n\t input === null ||\r\n\t type === \"undefined\" ||\r\n\t type === \"boolean\" ||\r\n\t type === \"number\" ||\r\n\t type === \"string\"\r\n\t );\r\n\t}\r\n\r\n\tfunction toPrimitive(input) {\r\n\t var val, valueOf, toString;\r\n\t if (isPrimitive(input)) {\r\n\t return input;\r\n\t }\r\n\t valueOf = input.valueOf;\r\n\t if (typeof valueOf === \"function\") {\r\n\t val = valueOf.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t toString = input.toString;\r\n\t if (typeof toString === \"function\") {\r\n\t val = toString.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t throw new TypeError();\r\n\t}\r\n\tvar toObject = function (o) {\r\n\t if (o == null) { // this matches both null and undefined\r\n\t throw new TypeError(\"can't convert \"+o+\" to object\");\r\n\t }\r\n\t return Object(o);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./regexp\");\r\n\tacequire(\"./es5-shim\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\r\n\r\n\texports.getDocumentHead = function(doc) {\r\n\t if (!doc)\r\n\t doc = document;\r\n\t return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\r\n\t};\r\n\r\n\texports.createElement = function(tag, ns) {\r\n\t return document.createElementNS ?\r\n\t document.createElementNS(ns || XHTML_NS, tag) :\r\n\t document.createElement(tag);\r\n\t};\r\n\r\n\texports.hasCssClass = function(el, name) {\r\n\t var classes = (el.className || \"\").split(/\\s+/g);\r\n\t return classes.indexOf(name) !== -1;\r\n\t};\r\n\texports.addCssClass = function(el, name) {\r\n\t if (!exports.hasCssClass(el, name)) {\r\n\t el.className += \" \" + name;\r\n\t }\r\n\t};\r\n\texports.removeCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g);\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t el.className = classes.join(\" \");\r\n\t};\r\n\r\n\texports.toggleCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g), add = true;\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t add = false;\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t if (add)\r\n\t classes.push(name);\r\n\r\n\t el.className = classes.join(\" \");\r\n\t return add;\r\n\t};\r\n\texports.setCssClass = function(node, className, include) {\r\n\t if (include) {\r\n\t exports.addCssClass(node, className);\r\n\t } else {\r\n\t exports.removeCssClass(node, className);\r\n\t }\r\n\t};\r\n\r\n\texports.hasCssString = function(id, doc) {\r\n\t var index = 0, sheets;\r\n\t doc = doc || document;\r\n\r\n\t if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].owningElement.id === id) return true;\r\n\t } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].id === id) return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\texports.importCssString = function importCssString(cssText, id, doc) {\r\n\t doc = doc || document;\r\n\t if (id && exports.hasCssString(id, doc))\r\n\t return null;\r\n\t \r\n\t var style;\r\n\t \r\n\t if (id)\r\n\t cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\r\n\t \r\n\t if (doc.createStyleSheet) {\r\n\t style = doc.createStyleSheet();\r\n\t style.cssText = cssText;\r\n\t if (id)\r\n\t style.owningElement.id = id;\r\n\t } else {\r\n\t style = exports.createElement(\"style\");\r\n\t style.appendChild(doc.createTextNode(cssText));\r\n\t if (id)\r\n\t style.id = id;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(style);\r\n\t }\r\n\t};\r\n\r\n\texports.importCssStylsheet = function(uri, doc) {\r\n\t if (doc.createStyleSheet) {\r\n\t doc.createStyleSheet(uri);\r\n\t } else {\r\n\t var link = exports.createElement('link');\r\n\t link.rel = 'stylesheet';\r\n\t link.href = uri;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(link);\r\n\t }\r\n\t};\r\n\r\n\texports.getInnerWidth = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \r\n\t element.clientWidth\r\n\t );\r\n\t};\r\n\r\n\texports.getInnerHeight = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\r\n\t element.clientHeight\r\n\t );\r\n\t};\r\n\r\n\texports.scrollbarWidth = function(document) {\r\n\t var inner = exports.createElement(\"ace_inner\");\r\n\t inner.style.width = \"100%\";\r\n\t inner.style.minWidth = \"0px\";\r\n\t inner.style.height = \"200px\";\r\n\t inner.style.display = \"block\";\r\n\r\n\t var outer = exports.createElement(\"ace_outer\");\r\n\t var style = outer.style;\r\n\r\n\t style.position = \"absolute\";\r\n\t style.left = \"-10000px\";\r\n\t style.overflow = \"hidden\";\r\n\t style.width = \"200px\";\r\n\t style.minWidth = \"0px\";\r\n\t style.height = \"150px\";\r\n\t style.display = \"block\";\r\n\r\n\t outer.appendChild(inner);\r\n\r\n\t var body = document.documentElement;\r\n\t body.appendChild(outer);\r\n\r\n\t var noScrollbar = inner.offsetWidth;\r\n\r\n\t style.overflow = \"scroll\";\r\n\t var withScrollbar = inner.offsetWidth;\r\n\r\n\t if (noScrollbar == withScrollbar) {\r\n\t withScrollbar = outer.clientWidth;\r\n\t }\r\n\r\n\t body.removeChild(outer);\r\n\r\n\t return noScrollbar-withScrollbar;\r\n\t};\r\n\r\n\tif (typeof document == \"undefined\") {\r\n\t exports.importCssString = function() {};\r\n\t return;\r\n\t}\r\n\r\n\tif (window.pageYOffset !== undefined) {\r\n\t exports.getPageScrollTop = function() {\r\n\t return window.pageYOffset;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return window.pageXOffset;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.getPageScrollTop = function() {\r\n\t return document.body.scrollTop;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return document.body.scrollLeft;\r\n\t };\r\n\t}\r\n\r\n\tif (window.getComputedStyle)\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\r\n\t return window.getComputedStyle(element, \"\") || {};\r\n\t };\r\n\telse\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return element.currentStyle[style];\r\n\t return element.currentStyle;\r\n\t };\r\n\texports.setInnerHtml = function(el, innerHtml) {\r\n\t var element = el.cloneNode(false);//document.createElement(\"div\");\r\n\t element.innerHTML = innerHtml;\r\n\t el.parentNode.replaceChild(element, el);\r\n\t return element;\r\n\t};\r\n\r\n\tif (\"textContent\" in document.documentElement) {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.textContent = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.textContent;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.innerText = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.innerText;\r\n\t };\r\n\t}\r\n\r\n\texports.getParentWindow = function(document) {\r\n\t return document.defaultView || document.parentWindow;\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.inherits = function(ctor, superCtor) {\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\texports.mixin = function(obj, mixin) {\r\n\t for (var key in mixin) {\r\n\t obj[key] = mixin[key];\r\n\t }\r\n\t return obj;\r\n\t};\r\n\r\n\texports.implement = function(proto, mixin) {\r\n\t exports.mixin(proto, mixin);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./oop\");\r\n\tvar Keys = (function() {\r\n\t var ret = {\r\n\t MODIFIER_KEYS: {\r\n\t 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\r\n\t },\r\n\r\n\t KEY_MODS: {\r\n\t \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\r\n\t \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\r\n\t },\r\n\r\n\t FUNCTION_KEYS : {\r\n\t 8 : \"Backspace\",\r\n\t 9 : \"Tab\",\r\n\t 13 : \"Return\",\r\n\t 19 : \"Pause\",\r\n\t 27 : \"Esc\",\r\n\t 32 : \"Space\",\r\n\t 33 : \"PageUp\",\r\n\t 34 : \"PageDown\",\r\n\t 35 : \"End\",\r\n\t 36 : \"Home\",\r\n\t 37 : \"Left\",\r\n\t 38 : \"Up\",\r\n\t 39 : \"Right\",\r\n\t 40 : \"Down\",\r\n\t 44 : \"Print\",\r\n\t 45 : \"Insert\",\r\n\t 46 : \"Delete\",\r\n\t 96 : \"Numpad0\",\r\n\t 97 : \"Numpad1\",\r\n\t 98 : \"Numpad2\",\r\n\t 99 : \"Numpad3\",\r\n\t 100: \"Numpad4\",\r\n\t 101: \"Numpad5\",\r\n\t 102: \"Numpad6\",\r\n\t 103: \"Numpad7\",\r\n\t 104: \"Numpad8\",\r\n\t 105: \"Numpad9\",\r\n\t '-13': \"NumpadEnter\",\r\n\t 112: \"F1\",\r\n\t 113: \"F2\",\r\n\t 114: \"F3\",\r\n\t 115: \"F4\",\r\n\t 116: \"F5\",\r\n\t 117: \"F6\",\r\n\t 118: \"F7\",\r\n\t 119: \"F8\",\r\n\t 120: \"F9\",\r\n\t 121: \"F10\",\r\n\t 122: \"F11\",\r\n\t 123: \"F12\",\r\n\t 144: \"Numlock\",\r\n\t 145: \"Scrolllock\"\r\n\t },\r\n\r\n\t PRINTABLE_KEYS: {\r\n\t 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\r\n\t 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\r\n\t 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\r\n\t 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\r\n\t 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\r\n\t 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\r\n\t 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\r\n\t 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\r\n\t }\r\n\t };\r\n\t var name, i;\r\n\t for (i in ret.FUNCTION_KEYS) {\r\n\t name = ret.FUNCTION_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t for (i in ret.PRINTABLE_KEYS) {\r\n\t name = ret.PRINTABLE_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t oop.mixin(ret, ret.MODIFIER_KEYS);\r\n\t oop.mixin(ret, ret.PRINTABLE_KEYS);\r\n\t oop.mixin(ret, ret.FUNCTION_KEYS);\r\n\t ret.enter = ret[\"return\"];\r\n\t ret.escape = ret.esc;\r\n\t ret.del = ret[\"delete\"];\r\n\t ret[173] = '-';\r\n\t \r\n\t (function() {\r\n\t var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\r\n\t for (var i = Math.pow(2, mods.length); i--;) { \r\n\t ret.KEY_MODS[i] = mods.filter(function(x) {\r\n\t return i & ret.KEY_MODS[x];\r\n\t }).join(\"-\") + \"-\";\r\n\t }\r\n\t })();\r\n\r\n\t ret.KEY_MODS[0] = \"\";\r\n\t ret.KEY_MODS[-1] = \"input-\";\r\n\r\n\t return ret;\r\n\t})();\r\n\toop.mixin(exports, Keys);\r\n\r\n\texports.keyCodeToString = function(keyCode) {\r\n\t var keyString = Keys[keyCode];\r\n\t if (typeof keyString != \"string\")\r\n\t keyString = String.fromCharCode(keyCode);\r\n\t return keyString.toLowerCase();\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.OS = {\r\n\t LINUX: \"LINUX\",\r\n\t MAC: \"MAC\",\r\n\t WINDOWS: \"WINDOWS\"\r\n\t};\r\n\texports.getOS = function() {\r\n\t if (exports.isMac) {\r\n\t return exports.OS.MAC;\r\n\t } else if (exports.isLinux) {\r\n\t return exports.OS.LINUX;\r\n\t } else {\r\n\t return exports.OS.WINDOWS;\r\n\t }\r\n\t};\r\n\tif (typeof navigator != \"object\")\r\n\t return;\r\n\r\n\tvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\r\n\tvar ua = navigator.userAgent;\r\n\texports.isWin = (os == \"win\");\r\n\texports.isMac = (os == \"mac\");\r\n\texports.isLinux = (os == \"linux\");\r\n\texports.isIE = \r\n\t (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\r\n\t ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\r\n\t : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\r\n\t \r\n\texports.isOldIE = exports.isIE && exports.isIE < 9;\r\n\texports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\r\n\texports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\\:(\\d+)/)||[])[1], 10) < 4;\r\n\texports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\r\n\texports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\r\n\r\n\texports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\r\n\r\n\texports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\r\n\r\n\texports.isIPad = ua.indexOf(\"iPad\") >= 0;\r\n\r\n\texports.isTouchPad = ua.indexOf(\"TouchPad\") >= 0;\r\n\r\n\texports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keys = acequire(\"./keys\");\r\n\tvar useragent = acequire(\"./useragent\");\r\n\r\n\tvar pressedKeys = null;\r\n\tvar ts = 0;\r\n\r\n\texports.addListener = function(elem, type, callback) {\r\n\t if (elem.addEventListener) {\r\n\t return elem.addEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.attachEvent) {\r\n\t var wrapper = function() {\r\n\t callback.call(elem, window.event);\r\n\t };\r\n\t callback._wrapper = wrapper;\r\n\t elem.attachEvent(\"on\" + type, wrapper);\r\n\t }\r\n\t};\r\n\r\n\texports.removeListener = function(elem, type, callback) {\r\n\t if (elem.removeEventListener) {\r\n\t return elem.removeEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.detachEvent) {\r\n\t elem.detachEvent(\"on\" + type, callback._wrapper || callback);\r\n\t }\r\n\t};\r\n\texports.stopEvent = function(e) {\r\n\t exports.stopPropagation(e);\r\n\t exports.preventDefault(e);\r\n\t return false;\r\n\t};\r\n\r\n\texports.stopPropagation = function(e) {\r\n\t if (e.stopPropagation)\r\n\t e.stopPropagation();\r\n\t else\r\n\t e.cancelBubble = true;\r\n\t};\r\n\r\n\texports.preventDefault = function(e) {\r\n\t if (e.preventDefault)\r\n\t e.preventDefault();\r\n\t else\r\n\t e.returnValue = false;\r\n\t};\r\n\texports.getButton = function(e) {\r\n\t if (e.type == \"dblclick\")\r\n\t return 0;\r\n\t if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\r\n\t return 2;\r\n\t if (e.preventDefault) {\r\n\t return e.button;\r\n\t }\r\n\t else {\r\n\t return {1:0, 2:2, 4:1}[e.button];\r\n\t }\r\n\t};\r\n\r\n\texports.capture = function(el, eventHandler, releaseCaptureHandler) {\r\n\t function onMouseUp(e) {\r\n\t eventHandler && eventHandler(e);\r\n\t releaseCaptureHandler && releaseCaptureHandler(e);\r\n\r\n\t exports.removeListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.removeListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.removeListener(document, \"dragstart\", onMouseUp, true);\r\n\t }\r\n\r\n\t exports.addListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.addListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.addListener(document, \"dragstart\", onMouseUp, true);\r\n\t \r\n\t return onMouseUp;\r\n\t};\r\n\r\n\texports.addTouchMoveListener = function (el, callback) {\r\n\t if (\"ontouchmove\" in el) {\r\n\t var startx, starty;\r\n\t exports.addListener(el, \"touchstart\", function (e) {\r\n\t var touchObj = e.changedTouches[0];\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\t });\r\n\t exports.addListener(el, \"touchmove\", function (e) {\r\n\t var factor = 1,\r\n\t touchObj = e.changedTouches[0];\r\n\r\n\t e.wheelX = -(touchObj.clientX - startx) / factor;\r\n\t e.wheelY = -(touchObj.clientY - starty) / factor;\r\n\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\r\n\t callback(e);\r\n\t });\r\n\t } \r\n\t};\r\n\r\n\texports.addMouseWheelListener = function(el, callback) {\r\n\t if (\"onmousewheel\" in el) {\r\n\t exports.addListener(el, \"mousewheel\", function(e) {\r\n\t var factor = 8;\r\n\t if (e.wheelDeltaX !== undefined) {\r\n\t e.wheelX = -e.wheelDeltaX / factor;\r\n\t e.wheelY = -e.wheelDeltaY / factor;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = -e.wheelDelta / factor;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t } else if (\"onwheel\" in el) {\r\n\t exports.addListener(el, \"wheel\", function(e) {\r\n\t var factor = 0.35;\r\n\t switch (e.deltaMode) {\r\n\t case e.DOM_DELTA_PIXEL:\r\n\t e.wheelX = e.deltaX * factor || 0;\r\n\t e.wheelY = e.deltaY * factor || 0;\r\n\t break;\r\n\t case e.DOM_DELTA_LINE:\r\n\t case e.DOM_DELTA_PAGE:\r\n\t e.wheelX = (e.deltaX || 0) * 5;\r\n\t e.wheelY = (e.deltaY || 0) * 5;\r\n\t break;\r\n\t }\r\n\t \r\n\t callback(e);\r\n\t });\r\n\t } else {\r\n\t exports.addListener(el, \"DOMMouseScroll\", function(e) {\r\n\t if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\r\n\t e.wheelX = (e.detail || 0) * 5;\r\n\t e.wheelY = 0;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = (e.detail || 0) * 5;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\texports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\r\n\t var clicks = 0;\r\n\t var startX, startY, timer; \r\n\t var eventNames = {\r\n\t 2: \"dblclick\",\r\n\t 3: \"tripleclick\",\r\n\t 4: \"quadclick\"\r\n\t };\r\n\r\n\t function onMousedown(e) {\r\n\t if (exports.getButton(e) !== 0) {\r\n\t clicks = 0;\r\n\t } else if (e.detail > 1) {\r\n\t clicks++;\r\n\t if (clicks > 4)\r\n\t clicks = 1;\r\n\t } else {\r\n\t clicks = 1;\r\n\t }\r\n\t if (useragent.isIE) {\r\n\t var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\r\n\t if (!timer || isNewClick)\r\n\t clicks = 1;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\r\n\t if (clicks == 1) {\r\n\t startX = e.clientX;\r\n\t startY = e.clientY;\r\n\t }\r\n\t }\r\n\t \r\n\t e._clicks = clicks;\r\n\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\r\n\t if (clicks > 4)\r\n\t clicks = 0;\r\n\t else if (clicks > 1)\r\n\t return eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t function onDblclick(e) {\r\n\t clicks = 2;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\t eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t if (!Array.isArray(elements))\r\n\t elements = [elements];\r\n\t elements.forEach(function(el) {\r\n\t exports.addListener(el, \"mousedown\", onMousedown);\r\n\t if (useragent.isOldIE)\r\n\t exports.addListener(el, \"dblclick\", onDblclick);\r\n\t });\r\n\t};\r\n\r\n\tvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\r\n\t ? function(e) {\r\n\t return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\r\n\t }\r\n\t : function(e) {\r\n\t return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\r\n\t };\r\n\r\n\texports.getModifierString = function(e) {\r\n\t return keys.KEY_MODS[getModifierHash(e)];\r\n\t};\r\n\r\n\tfunction normalizeCommandKeys(callback, e, keyCode) {\r\n\t var hashId = getModifierHash(e);\r\n\r\n\t if (!useragent.isMac && pressedKeys) {\r\n\t if (pressedKeys.OSKey)\r\n\t hashId |= 8;\r\n\t if (pressedKeys.altGr) {\r\n\t if ((3 & hashId) != 3)\r\n\t pressedKeys.altGr = 0;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (keyCode === 18 || keyCode === 17) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (keyCode === 17 && location === 1) {\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t ts = e.timeStamp;\r\n\t } else if (keyCode === 18 && hashId === 3 && location === 2) {\r\n\t var dt = e.timeStamp - ts;\r\n\t if (dt < 50)\r\n\t pressedKeys.altGr = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t if (keyCode in keys.MODIFIER_KEYS) {\r\n\t keyCode = -1;\r\n\t }\r\n\t if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\r\n\t keyCode = -1;\r\n\t }\r\n\t \r\n\t if (!hashId && keyCode === 13) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (location === 3) {\r\n\t callback(e, hashId, -keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (useragent.isChromeOS && hashId & 8) {\r\n\t callback(e, hashId, keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t else\r\n\t hashId &= ~8;\r\n\t }\r\n\t if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\r\n\t return false;\r\n\t }\r\n\t \r\n\t return callback(e, hashId, keyCode);\r\n\t}\r\n\r\n\r\n\texports.addCommandKeyListener = function(el, callback) {\r\n\t var addListener = exports.addListener;\r\n\t if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\r\n\t var lastKeyDownKeyCode = null;\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t lastKeyDownKeyCode = e.keyCode;\r\n\t });\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\r\n\t });\r\n\t } else {\r\n\t var lastDefaultPrevented = null;\r\n\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1;\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = true;\r\n\t } else if (pressedKeys.OSKey) {\r\n\t if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1)\r\n\t resetPressedKeys();\r\n\t }\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t pressedKeys.count++;\r\n\t pressedKeys.lastT = e.timeStamp;\r\n\t var result = normalizeCommandKeys(callback, e, keyCode);\r\n\t lastDefaultPrevented = e.defaultPrevented;\r\n\t return result;\r\n\t });\r\n\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\r\n\t exports.stopEvent(e);\r\n\t lastDefaultPrevented = null;\r\n\t }\r\n\t });\r\n\r\n\t addListener(el, \"keyup\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t if (!pressedKeys[keyCode]) {\r\n\t resetPressedKeys();\r\n\t } else {\r\n\t pressedKeys.count = Math.max(pressedKeys.count - 1, 0);\r\n\t }\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = false;\r\n\t }\r\n\t pressedKeys[keyCode] = null;\r\n\t });\r\n\r\n\t if (!pressedKeys) {\r\n\t resetPressedKeys();\r\n\t addListener(window, \"focus\", resetPressedKeys);\r\n\t }\r\n\t }\r\n\t};\r\n\tfunction resetPressedKeys() {\r\n\t pressedKeys = Object.create(null);\r\n\t pressedKeys.count = 0;\r\n\t pressedKeys.lastT = 0;\r\n\t}\r\n\r\n\tif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\r\n\t var postMessageId = 1;\r\n\t exports.nextTick = function(callback, win) {\r\n\t win = win || window;\r\n\t var messageName = \"zero-timeout-message-\" + postMessageId;\r\n\t exports.addListener(win, \"message\", function listener(e) {\r\n\t if (e.data == messageName) {\r\n\t exports.stopPropagation(e);\r\n\t exports.removeListener(win, \"message\", listener);\r\n\t callback();\r\n\t }\r\n\t });\r\n\t win.postMessage(messageName, \"*\");\r\n\t };\r\n\t}\r\n\r\n\r\n\texports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\r\n\t || window.mozRequestAnimationFrame\r\n\t || window.webkitRequestAnimationFrame\r\n\t || window.msRequestAnimationFrame\r\n\t || window.oRequestAnimationFrame);\r\n\r\n\tif (exports.nextFrame)\r\n\t exports.nextFrame = exports.nextFrame.bind(window);\r\n\telse\r\n\t exports.nextFrame = function(callback) {\r\n\t setTimeout(callback, 17);\r\n\t };\r\n\t});\r\n\r\n\tace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.last = function(a) {\r\n\t return a[a.length - 1];\r\n\t};\r\n\r\n\texports.stringReverse = function(string) {\r\n\t return string.split(\"\").reverse().join(\"\");\r\n\t};\r\n\r\n\texports.stringRepeat = function (string, count) {\r\n\t var result = '';\r\n\t while (count > 0) {\r\n\t if (count & 1)\r\n\t result += string;\r\n\r\n\t if (count >>= 1)\r\n\t string += string;\r\n\t }\r\n\t return result;\r\n\t};\r\n\r\n\tvar trimBeginRegexp = /^\\s\\s*/;\r\n\tvar trimEndRegexp = /\\s\\s*$/;\r\n\r\n\texports.stringTrimLeft = function (string) {\r\n\t return string.replace(trimBeginRegexp, '');\r\n\t};\r\n\r\n\texports.stringTrimRight = function (string) {\r\n\t return string.replace(trimEndRegexp, '');\r\n\t};\r\n\r\n\texports.copyObject = function(obj) {\r\n\t var copy = {};\r\n\t for (var key in obj) {\r\n\t copy[key] = obj[key];\r\n\t }\r\n\t return copy;\r\n\t};\r\n\r\n\texports.copyArray = function(array){\r\n\t var copy = [];\r\n\t for (var i=0, l=array.length; i 1);\r\n\t return ev.preventDefault();\r\n\t };\r\n\r\n\t this.startSelect = function(pos, waitForClickSelection) {\r\n\t pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var editor = this.editor;\r\n\t editor.$blockScrolling++;\r\n\t if (this.mousedownEvent.getShiftKey())\r\n\t editor.selection.selectToPosition(pos);\r\n\t else if (!waitForClickSelection)\r\n\t editor.selection.moveToPosition(pos);\r\n\t if (!waitForClickSelection)\r\n\t this.select();\r\n\t if (editor.renderer.scroller.setCapture) {\r\n\t editor.renderer.scroller.setCapture();\r\n\t }\r\n\t editor.setStyle(\"ace_selecting\");\r\n\t this.setState(\"select\");\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t this.select = function() {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmp = this.$clickSelection.comparePoint(cursor);\r\n\r\n\t if (cmp == -1) {\r\n\t anchor = this.$clickSelection.end;\r\n\t } else if (cmp == 1) {\r\n\t anchor = this.$clickSelection.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.extendSelectionBy = function(unitName) {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var range = editor.selection[unitName](cursor.row, cursor.column);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmpStart = this.$clickSelection.comparePoint(range.start);\r\n\t var cmpEnd = this.$clickSelection.comparePoint(range.end);\r\n\r\n\t if (cmpStart == -1 && cmpEnd <= 0) {\r\n\t anchor = this.$clickSelection.end;\r\n\t if (range.end.row != cursor.row || range.end.column != cursor.column)\r\n\t cursor = range.start;\r\n\t } else if (cmpEnd == 1 && cmpStart >= 0) {\r\n\t anchor = this.$clickSelection.start;\r\n\t if (range.start.row != cursor.row || range.start.column != cursor.column)\r\n\t cursor = range.end;\r\n\t } else if (cmpStart == -1 && cmpEnd == 1) {\r\n\t cursor = range.end;\r\n\t anchor = range.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.selectEnd =\r\n\t this.selectAllEnd =\r\n\t this.selectByWordsEnd =\r\n\t this.selectByLinesEnd = function() {\r\n\t this.$clickSelection = null;\r\n\t this.editor.unsetStyle(\"ace_selecting\");\r\n\t if (this.editor.renderer.scroller.releaseCapture) {\r\n\t this.editor.renderer.scroller.releaseCapture();\r\n\t }\r\n\t };\r\n\r\n\t this.focusWait = function() {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t var time = Date.now();\r\n\r\n\t if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t };\r\n\r\n\t this.onDoubleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\t var session = editor.session;\r\n\r\n\t var range = session.getBracketRange(pos);\r\n\t if (range) {\r\n\t if (range.isEmpty()) {\r\n\t range.start.column--;\r\n\t range.end.column++;\r\n\t }\r\n\t this.setState(\"select\");\r\n\t } else {\r\n\t range = editor.selection.getWordRange(pos.row, pos.column);\r\n\t this.setState(\"selectByWords\");\r\n\t }\r\n\t this.$clickSelection = range;\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onTripleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\r\n\t this.setState(\"selectByLines\");\r\n\t var range = editor.getSelectionRange();\r\n\t if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\r\n\t this.$clickSelection = editor.selection.getLineRange(range.start.row);\r\n\t this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\r\n\t } else {\r\n\t this.$clickSelection = editor.selection.getLineRange(pos.row);\r\n\t }\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onQuadClick = function(ev) {\r\n\t var editor = this.editor;\r\n\r\n\t editor.selectAll();\r\n\t this.$clickSelection = editor.getSelectionRange();\r\n\t this.setState(\"selectAll\");\r\n\t };\r\n\r\n\t this.onMouseWheel = function(ev) {\r\n\t if (ev.getAccelKey())\r\n\t return;\r\n\t if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\r\n\t ev.wheelX = ev.wheelY;\r\n\t ev.wheelY = 0;\r\n\t }\r\n\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime||0);\r\n\t \r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\t \r\n\t this.onTouchMove = function (ev) {\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime || 0);\r\n\r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\r\n\t}).call(DefaultHandlers.prototype);\r\n\r\n\texports.DefaultHandlers = DefaultHandlers;\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\tfunction calcRangeOrientation(range, cursor) {\r\n\t if (range.start.row == range.end.row)\r\n\t var cmp = 2 * cursor.column - range.start.column - range.end.column;\r\n\t else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\r\n\t var cmp = cursor.column - 4;\r\n\t else\r\n\t var cmp = 2 * cursor.row - range.start.row - range.end.row;\r\n\r\n\t if (cmp < 0)\r\n\t return {cursor: range.start, anchor: range.end};\r\n\t else\r\n\t return {cursor: range.end, anchor: range.start};\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tfunction Tooltip (parentNode) {\r\n\t this.isOpen = false;\r\n\t this.$element = null;\r\n\t this.$parentNode = parentNode;\r\n\t}\r\n\r\n\t(function() {\r\n\t this.$init = function() {\r\n\t this.$element = dom.createElement(\"div\");\r\n\t this.$element.className = \"ace_tooltip\";\r\n\t this.$element.style.display = \"none\";\r\n\t this.$parentNode.appendChild(this.$element);\r\n\t return this.$element;\r\n\t };\r\n\t this.getElement = function() {\r\n\t return this.$element || this.$init();\r\n\t };\r\n\t this.setText = function(text) {\r\n\t dom.setInnerText(this.getElement(), text);\r\n\t };\r\n\t this.setHtml = function(html) {\r\n\t this.getElement().innerHTML = html;\r\n\t };\r\n\t this.setPosition = function(x, y) {\r\n\t this.getElement().style.left = x + \"px\";\r\n\t this.getElement().style.top = y + \"px\";\r\n\t };\r\n\t this.setClassName = function(className) {\r\n\t dom.addCssClass(this.getElement(), className);\r\n\t };\r\n\t this.show = function(text, x, y) {\r\n\t if (text != null)\r\n\t this.setText(text);\r\n\t if (x != null && y != null)\r\n\t this.setPosition(x, y);\r\n\t if (!this.isOpen) {\r\n\t this.getElement().style.display = \"block\";\r\n\t this.isOpen = true;\r\n\t }\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t if (this.isOpen) {\r\n\t this.getElement().style.display = \"none\";\r\n\t this.isOpen = false;\r\n\t }\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.getElement().offsetHeight;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.getElement().offsetWidth;\r\n\t };\r\n\r\n\t}).call(Tooltip.prototype);\r\n\r\n\texports.Tooltip = Tooltip;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar Tooltip = acequire(\"../tooltip\").Tooltip;\r\n\r\n\tfunction GutterHandler(mouseHandler) {\r\n\t var editor = mouseHandler.editor;\r\n\t var gutter = editor.renderer.$gutterLayer;\r\n\t var tooltip = new GutterTooltip(editor.container);\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\r\n\t if (!editor.isFocused() || e.getButton() != 0)\r\n\t return;\r\n\t var gutterRegion = gutter.getRegion(e);\r\n\r\n\t if (gutterRegion == \"foldWidgets\")\r\n\t return;\r\n\r\n\t var row = e.getDocumentPosition().row;\r\n\t var selection = editor.session.selection;\r\n\r\n\t if (e.getShiftKey())\r\n\t selection.selectTo(row, 0);\r\n\t else {\r\n\t if (e.domEvent.detail == 2) {\r\n\t editor.selectAll();\r\n\t return e.preventDefault();\r\n\t }\r\n\t mouseHandler.$clickSelection = editor.selection.getLineRange(row);\r\n\t }\r\n\t mouseHandler.setState(\"selectByLines\");\r\n\t mouseHandler.captureMouse(e);\r\n\t return e.preventDefault();\r\n\t });\r\n\r\n\r\n\t var tooltipTimeout, mouseEvent, tooltipAnnotation;\r\n\r\n\t function showTooltip() {\r\n\t var row = mouseEvent.getDocumentPosition().row;\r\n\t var annotation = gutter.$annotations[row];\r\n\t if (!annotation)\r\n\t return hideTooltip();\r\n\r\n\t var maxRow = editor.session.getLength();\r\n\t if (row == maxRow) {\r\n\t var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\r\n\t var pos = mouseEvent.$pos;\r\n\t if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\r\n\t return hideTooltip();\r\n\t }\r\n\r\n\t if (tooltipAnnotation == annotation)\r\n\t return;\r\n\t tooltipAnnotation = annotation.text.join(\"
\");\r\n\r\n\t tooltip.setHtml(tooltipAnnotation);\r\n\t tooltip.show();\r\n\t editor.on(\"mousewheel\", hideTooltip);\r\n\r\n\t if (mouseHandler.$tooltipFollowsMouse) {\r\n\t moveTooltip(mouseEvent);\r\n\t } else {\r\n\t var gutterElement = mouseEvent.domEvent.target;\r\n\t var rect = gutterElement.getBoundingClientRect();\r\n\t var style = tooltip.getElement().style;\r\n\t style.left = rect.right + \"px\";\r\n\t style.top = rect.bottom + \"px\";\r\n\t }\r\n\t }\r\n\r\n\t function hideTooltip() {\r\n\t if (tooltipTimeout)\r\n\t tooltipTimeout = clearTimeout(tooltipTimeout);\r\n\t if (tooltipAnnotation) {\r\n\t tooltip.hide();\r\n\t tooltipAnnotation = null;\r\n\t editor.removeEventListener(\"mousewheel\", hideTooltip);\r\n\t }\r\n\t }\r\n\r\n\t function moveTooltip(e) {\r\n\t tooltip.setPosition(e.x, e.y);\r\n\t }\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\r\n\t var target = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (dom.hasCssClass(target, \"ace_fold-widget\"))\r\n\t return hideTooltip();\r\n\r\n\t if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\r\n\t moveTooltip(e);\r\n\r\n\t mouseEvent = e;\r\n\t if (tooltipTimeout)\r\n\t return;\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t if (mouseEvent && !mouseHandler.isMousePressed)\r\n\t showTooltip();\r\n\t else\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\r\n\t event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\r\n\t mouseEvent = null;\r\n\t if (!tooltipAnnotation || tooltipTimeout)\r\n\t return;\r\n\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\t \r\n\t editor.on(\"changeSession\", hideTooltip);\r\n\t}\r\n\r\n\tfunction GutterTooltip(parentNode) {\r\n\t Tooltip.call(this, parentNode);\r\n\t}\r\n\r\n\toop.inherits(GutterTooltip, Tooltip);\r\n\r\n\t(function(){\r\n\t this.setPosition = function(x, y) {\r\n\t var windowWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\t var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n\t var width = this.getWidth();\r\n\t var height = this.getHeight();\r\n\t x += 15;\r\n\t y += 15;\r\n\t if (x + width > windowWidth) {\r\n\t x -= (x + width) - windowWidth;\r\n\t }\r\n\t if (y + height > windowHeight) {\r\n\t y -= 20 + height;\r\n\t }\r\n\t Tooltip.prototype.setPosition.call(this, x, y);\r\n\t };\r\n\r\n\t}).call(GutterTooltip.prototype);\r\n\r\n\r\n\r\n\texports.GutterHandler = GutterHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\r\n\t this.domEvent = domEvent;\r\n\t this.editor = editor;\r\n\t \r\n\t this.x = this.clientX = domEvent.clientX;\r\n\t this.y = this.clientY = domEvent.clientY;\r\n\r\n\t this.$pos = null;\r\n\t this.$inSelection = null;\r\n\t \r\n\t this.propagationStopped = false;\r\n\t this.defaultPrevented = false;\r\n\t};\r\n\r\n\t(function() { \r\n\t \r\n\t this.stopPropagation = function() {\r\n\t event.stopPropagation(this.domEvent);\r\n\t this.propagationStopped = true;\r\n\t };\r\n\t \r\n\t this.preventDefault = function() {\r\n\t event.preventDefault(this.domEvent);\r\n\t this.defaultPrevented = true;\r\n\t };\r\n\t \r\n\t this.stop = function() {\r\n\t this.stopPropagation();\r\n\t this.preventDefault();\r\n\t };\r\n\t this.getDocumentPosition = function() {\r\n\t if (this.$pos)\r\n\t return this.$pos;\r\n\t \r\n\t this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\r\n\t return this.$pos;\r\n\t };\r\n\t this.inSelection = function() {\r\n\t if (this.$inSelection !== null)\r\n\t return this.$inSelection;\r\n\t \r\n\t var editor = this.editor;\r\n\t \r\n\r\n\t var selectionRange = editor.getSelectionRange();\r\n\t if (selectionRange.isEmpty())\r\n\t this.$inSelection = false;\r\n\t else {\r\n\t var pos = this.getDocumentPosition();\r\n\t this.$inSelection = selectionRange.contains(pos.row, pos.column);\r\n\t }\r\n\r\n\t return this.$inSelection;\r\n\t };\r\n\t this.getButton = function() {\r\n\t return event.getButton(this.domEvent);\r\n\t };\r\n\t this.getShiftKey = function() {\r\n\t return this.domEvent.shiftKey;\r\n\t };\r\n\t \r\n\t this.getAccelKey = useragent.isMac\r\n\t ? function() { return this.domEvent.metaKey; }\r\n\t : function() { return this.domEvent.ctrlKey; };\r\n\t \r\n\t}).call(MouseEvent.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\r\n\tvar AUTOSCROLL_DELAY = 200;\r\n\tvar SCROLL_CURSOR_DELAY = 200;\r\n\tvar SCROLL_CURSOR_HYSTERESIS = 5;\r\n\r\n\tfunction DragdropHandler(mouseHandler) {\r\n\r\n\t var editor = mouseHandler.editor;\r\n\r\n\t var blankImage = dom.createElement(\"img\");\r\n\t blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\r\n\t if (useragent.isOpera)\r\n\t blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\r\n\r\n\t var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\r\n\r\n\t exports.forEach(function(x) {\r\n\t mouseHandler[x] = this[x];\r\n\t }, this);\r\n\t editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\r\n\r\n\r\n\t var mouseTarget = editor.container;\r\n\t var dragSelectionMarker, x, y;\r\n\t var timerId, range;\r\n\t var dragCursor, counter = 0;\r\n\t var dragOperation;\r\n\t var isInternal;\r\n\t var autoScrollStartTime;\r\n\t var cursorMovedTime;\r\n\t var cursorPointOnCaretMoved;\r\n\r\n\t this.onDragStart = function(e) {\r\n\t if (this.cancelDrag || !mouseTarget.draggable) {\r\n\t var self = this;\r\n\t setTimeout(function(){\r\n\t self.startSelect();\r\n\t self.captureMouse(e);\r\n\t }, 0);\r\n\t return e.preventDefault();\r\n\t }\r\n\t range = editor.getSelectionRange();\r\n\r\n\t var dataTransfer = e.dataTransfer;\r\n\t dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\r\n\t if (useragent.isOpera) {\r\n\t editor.container.appendChild(blankImage);\r\n\t blankImage.scrollTop = 0;\r\n\t }\r\n\t dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\r\n\t if (useragent.isOpera) {\r\n\t editor.container.removeChild(blankImage);\r\n\t }\r\n\t dataTransfer.clearData();\r\n\t dataTransfer.setData(\"Text\", editor.session.getTextRange());\r\n\r\n\t isInternal = true;\r\n\t this.setState(\"drag\");\r\n\t };\r\n\r\n\t this.onDragEnd = function(e) {\r\n\t mouseTarget.draggable = false;\r\n\t isInternal = false;\r\n\t this.setState(null);\r\n\t if (!editor.getReadOnly()) {\r\n\t var dropEffect = e.dataTransfer.dropEffect;\r\n\t if (!dragOperation && dropEffect == \"move\")\r\n\t editor.session.remove(editor.getSelectionRange());\r\n\t editor.renderer.$cursorLayer.setBlinking(true);\r\n\t }\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t };\r\n\r\n\t this.onDragEnter = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker)\r\n\t addDragMarker();\r\n\t counter++;\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragOver = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker) {\r\n\t addDragMarker();\r\n\t counter++;\r\n\t }\r\n\t if (onMouseMoveTimer !== null)\r\n\t onMouseMoveTimer = null;\r\n\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragLeave = function(e) {\r\n\t counter--;\r\n\t if (counter <= 0 && dragSelectionMarker) {\r\n\t clearDragMarker();\r\n\t dragOperation = null;\r\n\t return event.preventDefault(e);\r\n\t }\r\n\t };\r\n\r\n\t this.onDrop = function(e) {\r\n\t if (!dragCursor)\r\n\t return;\r\n\t var dataTransfer = e.dataTransfer;\r\n\t if (isInternal) {\r\n\t switch (dragOperation) {\r\n\t case \"move\":\r\n\t if (range.contains(dragCursor.row, dragCursor.column)) {\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: dragCursor\r\n\t };\r\n\t } else {\r\n\t range = editor.moveText(range, dragCursor);\r\n\t }\r\n\t break;\r\n\t case \"copy\":\r\n\t range = editor.moveText(range, dragCursor, true);\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t var dropData = dataTransfer.getData('Text');\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: editor.session.insert(dragCursor, dropData)\r\n\t };\r\n\t editor.focus();\r\n\t dragOperation = null;\r\n\t }\r\n\t clearDragMarker();\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\r\n\r\n\t function scrollCursorIntoView(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t var hMovement = !prevCursor || cursor.column != prevCursor.column;\r\n\t if (!cursorMovedTime || vMovement || hMovement) {\r\n\t editor.$blockScrolling += 1;\r\n\t editor.moveCursorToPosition(cursor);\r\n\t editor.$blockScrolling -= 1;\r\n\t cursorMovedTime = now;\r\n\t cursorPointOnCaretMoved = {x: x, y: y};\r\n\t } else {\r\n\t var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\r\n\t if (distance > SCROLL_CURSOR_HYSTERESIS) {\r\n\t cursorMovedTime = null;\r\n\t } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t cursorMovedTime = null;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t function autoScroll(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var lineHeight = editor.renderer.layerConfig.lineHeight;\r\n\t var characterWidth = editor.renderer.layerConfig.characterWidth;\r\n\t var editorRect = editor.renderer.scroller.getBoundingClientRect();\r\n\t var offsets = {\r\n\t x: {\r\n\t left: x - editorRect.left,\r\n\t right: editorRect.right - x\r\n\t },\r\n\t y: {\r\n\t top: y - editorRect.top,\r\n\t bottom: editorRect.bottom - y\r\n\t }\r\n\t };\r\n\t var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\r\n\t var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\r\n\t var scrollCursor = {row: cursor.row, column: cursor.column};\r\n\t if (nearestXOffset / characterWidth <= 2) {\r\n\t scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\r\n\t }\r\n\t if (nearestYOffset / lineHeight <= 1) {\r\n\t scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\r\n\t }\r\n\t var vScroll = cursor.row != scrollCursor.row;\r\n\t var hScroll = cursor.column != scrollCursor.column;\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t if (vScroll || (hScroll && !vMovement)) {\r\n\t if (!autoScrollStartTime)\r\n\t autoScrollStartTime = now;\r\n\t else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\r\n\t editor.renderer.scrollCursorIntoView(scrollCursor);\r\n\t } else {\r\n\t autoScrollStartTime = null;\r\n\t }\r\n\t }\r\n\r\n\t function onDragInterval() {\r\n\t var prevCursor = dragCursor;\r\n\t dragCursor = editor.renderer.screenToTextCoordinates(x, y);\r\n\t scrollCursorIntoView(dragCursor, prevCursor);\r\n\t autoScroll(dragCursor, prevCursor);\r\n\t }\r\n\r\n\t function addDragMarker() {\r\n\t range = editor.selection.toOrientedRange();\r\n\t dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\r\n\t editor.clearSelection();\r\n\t if (editor.isFocused())\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t clearInterval(timerId);\r\n\t onDragInterval();\r\n\t timerId = setInterval(onDragInterval, 20);\r\n\t counter = 0;\r\n\t event.addListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\r\n\t function clearDragMarker() {\r\n\t clearInterval(timerId);\r\n\t editor.session.removeMarker(dragSelectionMarker);\r\n\t dragSelectionMarker = null;\r\n\t editor.$blockScrolling += 1;\r\n\t editor.selection.fromOrientedRange(range);\r\n\t editor.$blockScrolling -= 1;\r\n\t if (editor.isFocused() && !isInternal)\r\n\t editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\r\n\t range = null;\r\n\t dragCursor = null;\r\n\t counter = 0;\r\n\t autoScrollStartTime = null;\r\n\t cursorMovedTime = null;\r\n\t event.removeListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\t var onMouseMoveTimer = null;\r\n\t function onMouseMove() {\r\n\t if (onMouseMoveTimer == null) {\r\n\t onMouseMoveTimer = setTimeout(function() {\r\n\t if (onMouseMoveTimer != null && dragSelectionMarker)\r\n\t clearDragMarker();\r\n\t }, 20);\r\n\t }\r\n\t }\r\n\r\n\t function canAccept(dataTransfer) {\r\n\t var types = dataTransfer.types;\r\n\t return !types || Array.prototype.some.call(types, function(type) {\r\n\t return type == 'text/plain' || type == 'Text';\r\n\t });\r\n\t }\r\n\r\n\t function getDropEffect(e) {\r\n\t var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\r\n\t var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\r\n\r\n\t var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\r\n\t var effectAllowed = \"uninitialized\";\r\n\t try {\r\n\t effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\r\n\t } catch (e) {}\r\n\t var dropEffect = \"none\";\r\n\r\n\t if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\t else if (moveAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"move\";\r\n\t else if (copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\r\n\t return dropEffect;\r\n\t }\r\n\t}\r\n\r\n\t(function() {\r\n\r\n\t this.dragWait = function() {\r\n\t var interval = Date.now() - this.mousedownEvent.time;\r\n\t if (interval > this.editor.getDragDelay())\r\n\t this.startDrag();\r\n\t };\r\n\r\n\t this.dragWaitEnd = function() {\r\n\t var target = this.editor.container;\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t this.selectEnd();\r\n\t };\r\n\r\n\t this.dragReadyEnd = function(e) {\r\n\t this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t this.dragWaitEnd();\r\n\t };\r\n\r\n\t this.startDrag = function(){\r\n\t this.cancelDrag = false;\r\n\t var editor = this.editor;\r\n\t var target = editor.container;\r\n\t target.draggable = true;\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t editor.setStyle(\"ace_dragging\");\r\n\t var cursorStyle = useragent.isWin ? \"default\" : \"move\";\r\n\t editor.renderer.setCursorStyle(cursorStyle);\r\n\t this.setState(\"dragReady\");\r\n\t };\r\n\r\n\t this.onMouseDrag = function(e) {\r\n\t var target = this.editor.container;\r\n\t if (useragent.isIE && this.state == \"dragReady\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 3)\r\n\t target.dragDrop();\r\n\t }\r\n\t if (this.state === \"dragWait\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 0) {\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.onMouseDown = function(e) {\r\n\t if (!this.$dragEnabled)\r\n\t return;\r\n\t this.mousedownEvent = e;\r\n\t var editor = this.editor;\r\n\r\n\t var inSelection = e.inSelection();\r\n\t var button = e.getButton();\r\n\t var clickCount = e.domEvent.detail || 1;\r\n\t if (clickCount === 1 && button === 0 && inSelection) {\r\n\t if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\r\n\t return;\r\n\t this.mousedownEvent.time = Date.now();\r\n\t var eventTarget = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (\"unselectable\" in eventTarget)\r\n\t eventTarget.unselectable = \"on\";\r\n\t if (editor.getDragDelay()) {\r\n\t if (useragent.isWebKit) {\r\n\t this.cancelDrag = true;\r\n\t var mouseTarget = editor.container;\r\n\t mouseTarget.draggable = true;\r\n\t }\r\n\t this.setState(\"dragWait\");\r\n\t } else {\r\n\t this.startDrag();\r\n\t }\r\n\t this.captureMouse(e, this.onMouseDrag.bind(this));\r\n\t e.defaultPrevented = true;\r\n\t }\r\n\t };\r\n\r\n\t}).call(DragdropHandler.prototype);\r\n\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\texports.DragdropHandler = DragdropHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"./dom\");\r\n\r\n\texports.get = function (url, callback) {\r\n\t var xhr = new XMLHttpRequest();\r\n\t xhr.open('GET', url, true);\r\n\t xhr.onreadystatechange = function () {\r\n\t if (xhr.readyState === 4) {\r\n\t callback(xhr.responseText);\r\n\t }\r\n\t };\r\n\t xhr.send(null);\r\n\t};\r\n\r\n\texports.loadScript = function(path, callback) {\r\n\t var head = dom.getDocumentHead();\r\n\t var s = document.createElement('script');\r\n\r\n\t s.src = path;\r\n\t head.appendChild(s);\r\n\r\n\t s.onload = s.onreadystatechange = function(_, isAbort) {\r\n\t if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\r\n\t s = s.onload = s.onreadystatechange = null;\r\n\t if (!isAbort)\r\n\t callback();\r\n\t }\r\n\t };\r\n\t};\r\n\texports.qualifyURL = function(url) {\r\n\t var a = document.createElement('a');\r\n\t a.href = url;\r\n\t return a.href;\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar EventEmitter = {};\r\n\tvar stopPropagation = function() { this.propagationStopped = true; };\r\n\tvar preventDefault = function() { this.defaultPrevented = true; };\r\n\r\n\tEventEmitter._emit =\r\n\tEventEmitter._dispatchEvent = function(eventName, e) {\r\n\t this._eventRegistry || (this._eventRegistry = {});\r\n\t this._defaultHandlers || (this._defaultHandlers = {});\r\n\r\n\t var listeners = this._eventRegistry[eventName] || [];\r\n\t var defaultHandler = this._defaultHandlers[eventName];\r\n\t if (!listeners.length && !defaultHandler)\r\n\t return;\r\n\r\n\t if (typeof e != \"object\" || !e)\r\n\t e = {};\r\n\r\n\t if (!e.type)\r\n\t e.type = eventName;\r\n\t if (!e.stopPropagation)\r\n\t e.stopPropagation = stopPropagation;\r\n\t if (!e.preventDefault)\r\n\t e.preventDefault = preventDefault;\r\n\r\n\t listeners = listeners.slice();\r\n\t for (var i=0; i 1)\r\n\t base = parts[parts.length - 2];\r\n\t var path = options[component + \"Path\"];\r\n\t if (path == null) {\r\n\t path = options.basePath;\r\n\t } else if (sep == \"/\") {\r\n\t component = sep = \"\";\r\n\t }\r\n\t if (path && path.slice(-1) != \"/\")\r\n\t path += \"/\";\r\n\t return path + component + sep + base + this.get(\"suffix\");\r\n\t};\r\n\r\n\texports.setModuleUrl = function(name, subst) {\r\n\t return options.$moduleUrls[name] = subst;\r\n\t};\r\n\r\n\texports.$loading = {};\r\n\texports.loadModule = function(moduleName, onLoad) {\r\n\t var module, moduleType;\r\n\t if (Array.isArray(moduleName)) {\r\n\t moduleType = moduleName[0];\r\n\t moduleName = moduleName[1];\r\n\t }\r\n\r\n\t try {\r\n\t module = acequire(moduleName);\r\n\t } catch (e) {}\r\n\t if (module && !exports.$loading[moduleName])\r\n\t return onLoad && onLoad(module);\r\n\r\n\t if (!exports.$loading[moduleName])\r\n\t exports.$loading[moduleName] = [];\r\n\r\n\t exports.$loading[moduleName].push(onLoad);\r\n\r\n\t if (exports.$loading[moduleName].length > 1)\r\n\t return;\r\n\r\n\t var afterLoad = function() {\r\n\t acequire([moduleName], function(module) {\r\n\t exports._emit(\"load.module\", {name: moduleName, module: module});\r\n\t var listeners = exports.$loading[moduleName];\r\n\t exports.$loading[moduleName] = null;\r\n\t listeners.forEach(function(onLoad) {\r\n\t onLoad && onLoad(module);\r\n\t });\r\n\t });\r\n\t };\r\n\r\n\t if (!exports.get(\"packaged\"))\r\n\t return afterLoad();\r\n\t net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\r\n\t};\r\n\tinit(true);function init(packaged) {\r\n\r\n\t if (!global || !global.document)\r\n\t return;\r\n\t \r\n\t options.packaged = packaged || acequire.packaged || module.packaged || (global.define && __webpack_require__(65).packaged);\r\n\r\n\t var scriptOptions = {};\r\n\t var scriptUrl = \"\";\r\n\t var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\r\n\t var currentDocument = currentScript && currentScript.ownerDocument || document;\r\n\t \r\n\t var scripts = currentDocument.getElementsByTagName(\"script\");\r\n\t for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.compare(row, column) == 0;\r\n\t };\r\n\t this.compareRange = function(range) {\r\n\t var cmp,\r\n\t end = range.end,\r\n\t start = range.start;\r\n\r\n\t cmp = this.compare(end.row, end.column);\r\n\t if (cmp == 1) {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == 1) {\r\n\t return 2;\r\n\t } else if (cmp == 0) {\r\n\t return 1;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t } else if (cmp == -1) {\r\n\t return -2;\r\n\t } else {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == -1) {\r\n\t return -1;\r\n\t } else if (cmp == 1) {\r\n\t return 42;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.comparePoint = function(p) {\r\n\t return this.compare(p.row, p.column);\r\n\t };\r\n\t this.containsRange = function(range) {\r\n\t return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\r\n\t };\r\n\t this.intersects = function(range) {\r\n\t var cmp = this.compareRange(range);\r\n\t return (cmp == -1 || cmp == 0 || cmp == 1);\r\n\t };\r\n\t this.isEnd = function(row, column) {\r\n\t return this.end.row == row && this.end.column == column;\r\n\t };\r\n\t this.isStart = function(row, column) {\r\n\t return this.start.row == row && this.start.column == column;\r\n\t };\r\n\t this.setStart = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.start.column = row.column;\r\n\t this.start.row = row.row;\r\n\t } else {\r\n\t this.start.row = row;\r\n\t this.start.column = column;\r\n\t }\r\n\t };\r\n\t this.setEnd = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.end.column = row.column;\r\n\t this.end.row = row.row;\r\n\t } else {\r\n\t this.end.row = row;\r\n\t this.end.column = column;\r\n\t }\r\n\t };\r\n\t this.inside = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column) || this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideStart = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideEnd = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.compare = function(row, column) {\r\n\t if (!this.isMultiLine()) {\r\n\t if (row === this.start.row) {\r\n\t return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\r\n\t }\r\n\t }\r\n\r\n\t if (row < this.start.row)\r\n\t return -1;\r\n\r\n\t if (row > this.end.row)\r\n\t return 1;\r\n\r\n\t if (this.start.row === row)\r\n\t return column >= this.start.column ? 0 : -1;\r\n\r\n\t if (this.end.row === row)\r\n\t return column <= this.end.column ? 0 : 1;\r\n\r\n\t return 0;\r\n\t };\r\n\t this.compareStart = function(row, column) {\r\n\t if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareEnd = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareInside = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.clipRows = function(firstRow, lastRow) {\r\n\t if (this.end.row > lastRow)\r\n\t var end = {row: lastRow + 1, column: 0};\r\n\t else if (this.end.row < firstRow)\r\n\t var end = {row: firstRow, column: 0};\r\n\r\n\t if (this.start.row > lastRow)\r\n\t var start = {row: lastRow + 1, column: 0};\r\n\t else if (this.start.row < firstRow)\r\n\t var start = {row: firstRow, column: 0};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\t this.extend = function(row, column) {\r\n\t var cmp = this.compare(row, column);\r\n\r\n\t if (cmp == 0)\r\n\t return this;\r\n\t else if (cmp == -1)\r\n\t var start = {row: row, column: column};\r\n\t else\r\n\t var end = {row: row, column: column};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\r\n\t this.isEmpty = function() {\r\n\t return (this.start.row === this.end.row && this.start.column === this.end.column);\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t return (this.start.row !== this.end.row);\r\n\t };\r\n\t this.clone = function() {\r\n\t return Range.fromPoints(this.start, this.end);\r\n\t };\r\n\t this.collapseRows = function() {\r\n\t if (this.end.column == 0)\r\n\t return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\r\n\t else\r\n\t return new Range(this.start.row, 0, this.end.row, 0)\r\n\t };\r\n\t this.toScreenRange = function(session) {\r\n\t var screenPosStart = session.documentToScreenPosition(this.start);\r\n\t var screenPosEnd = session.documentToScreenPosition(this.end);\r\n\r\n\t return new Range(\r\n\t screenPosStart.row, screenPosStart.column,\r\n\t screenPosEnd.row, screenPosEnd.column\r\n\t );\r\n\t };\r\n\t this.moveBy = function(row, column) {\r\n\t this.start.row += row;\r\n\t this.start.column += column;\r\n\t this.end.row += row;\r\n\t this.end.column += column;\r\n\t };\r\n\r\n\t}).call(Range.prototype);\r\n\tRange.fromPoints = function(start, end) {\r\n\t return new Range(start.row, start.column, end.row, end.column);\r\n\t};\r\n\tRange.comparePoints = comparePoints;\r\n\r\n\tRange.comparePoints = function(p1, p2) {\r\n\t return p1.row - p2.row || p1.column - p2.column;\r\n\t};\r\n\r\n\r\n\texports.Range = Range;\r\n\t});\r\n\r\n\tace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = function(session) {\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\r\n\t this.clearSelection();\r\n\t this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\r\n\t this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\r\n\r\n\t var self = this;\r\n\t this.lead.on(\"change\", function(e) {\r\n\t self._emit(\"changeCursor\");\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\r\n\t self.$desiredColumn = null;\r\n\t });\r\n\r\n\t this.selectionAnchor.on(\"change\", function() {\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t });\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.isEmpty = function() {\r\n\t return (this.$isEmpty || (\r\n\t this.anchor.row == this.lead.row &&\r\n\t this.anchor.column == this.lead.column\r\n\t ));\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t if (this.isEmpty()) {\r\n\t return false;\r\n\t }\r\n\r\n\t return this.getRange().isMultiLine();\r\n\t };\r\n\t this.getCursor = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.setSelectionAnchor = function(row, column) {\r\n\t this.anchor.setPosition(row, column);\r\n\r\n\t if (this.$isEmpty) {\r\n\t this.$isEmpty = false;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.getSelectionAnchor = function() {\r\n\t if (this.$isEmpty)\r\n\t return this.getSelectionLead();\r\n\t else\r\n\t return this.anchor.getPosition();\r\n\t };\r\n\t this.getSelectionLead = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.shiftSelection = function(columns) {\r\n\t if (this.$isEmpty) {\r\n\t this.moveCursorTo(this.lead.row, this.lead.column + columns);\r\n\t return;\r\n\t }\r\n\r\n\t var anchor = this.getSelectionAnchor();\r\n\t var lead = this.getSelectionLead();\r\n\r\n\t var isBackwards = this.isBackwards();\r\n\r\n\t if (!isBackwards || anchor.column !== 0)\r\n\t this.setSelectionAnchor(anchor.row, anchor.column + columns);\r\n\r\n\t if (isBackwards || lead.column !== 0) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(lead.row, lead.column + columns);\r\n\t });\r\n\t }\r\n\t };\r\n\t this.isBackwards = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\t return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\r\n\t };\r\n\t this.getRange = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\r\n\t if (this.isEmpty())\r\n\t return Range.fromPoints(lead, lead);\r\n\r\n\t if (this.isBackwards()) {\r\n\t return Range.fromPoints(lead, anchor);\r\n\t }\r\n\t else {\r\n\t return Range.fromPoints(anchor, lead);\r\n\t }\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t if (!this.$isEmpty) {\r\n\t this.$isEmpty = true;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.selectAll = function() {\r\n\t var lastRow = this.doc.getLength() - 1;\r\n\t this.setSelectionAnchor(0, 0);\r\n\t this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\r\n\t };\r\n\t this.setRange =\r\n\t this.setSelectionRange = function(range, reverse) {\r\n\t if (reverse) {\r\n\t this.setSelectionAnchor(range.end.row, range.end.column);\r\n\t this.selectTo(range.start.row, range.start.column);\r\n\t } else {\r\n\t this.setSelectionAnchor(range.start.row, range.start.column);\r\n\t this.selectTo(range.end.row, range.end.column);\r\n\t }\r\n\t if (this.getRange().isEmpty())\r\n\t this.$isEmpty = true;\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\r\n\t this.$moveSelection = function(mover) {\r\n\t var lead = this.lead;\r\n\t if (this.$isEmpty)\r\n\t this.setSelectionAnchor(lead.row, lead.column);\r\n\r\n\t mover.call(this);\r\n\t };\r\n\t this.selectTo = function(row, column) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(row, column);\r\n\t });\r\n\t };\r\n\t this.selectToPosition = function(pos) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorToPosition(pos);\r\n\t });\r\n\t };\r\n\t this.moveTo = function(row, column) {\r\n\t this.clearSelection();\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveToPosition = function(pos) {\r\n\t this.clearSelection();\r\n\t this.moveCursorToPosition(pos);\r\n\t };\r\n\t this.selectUp = function() {\r\n\t this.$moveSelection(this.moveCursorUp);\r\n\t };\r\n\t this.selectDown = function() {\r\n\t this.$moveSelection(this.moveCursorDown);\r\n\t };\r\n\t this.selectRight = function() {\r\n\t this.$moveSelection(this.moveCursorRight);\r\n\t };\r\n\t this.selectLeft = function() {\r\n\t this.$moveSelection(this.moveCursorLeft);\r\n\t };\r\n\t this.selectLineStart = function() {\r\n\t this.$moveSelection(this.moveCursorLineStart);\r\n\t };\r\n\t this.selectLineEnd = function() {\r\n\t this.$moveSelection(this.moveCursorLineEnd);\r\n\t };\r\n\t this.selectFileEnd = function() {\r\n\t this.$moveSelection(this.moveCursorFileEnd);\r\n\t };\r\n\t this.selectFileStart = function() {\r\n\t this.$moveSelection(this.moveCursorFileStart);\r\n\t };\r\n\t this.selectWordRight = function() {\r\n\t this.$moveSelection(this.moveCursorWordRight);\r\n\t };\r\n\t this.selectWordLeft = function() {\r\n\t this.$moveSelection(this.moveCursorWordLeft);\r\n\t };\r\n\t this.getWordRange = function(row, column) {\r\n\t if (typeof column == \"undefined\") {\r\n\t var cursor = row || this.lead;\r\n\t row = cursor.row;\r\n\t column = cursor.column;\r\n\t }\r\n\t return this.session.getWordRange(row, column);\r\n\t };\r\n\t this.selectWord = function() {\r\n\t this.setSelectionRange(this.getWordRange());\r\n\t };\r\n\t this.selectAWord = function() {\r\n\t var cursor = this.getCursor();\r\n\t var range = this.session.getAWordRange(cursor.row, cursor.column);\r\n\t this.setSelectionRange(range);\r\n\t };\r\n\r\n\t this.getLineRange = function(row, excludeLastChar) {\r\n\t var rowStart = typeof row == \"number\" ? row : this.lead.row;\r\n\t var rowEnd;\r\n\r\n\t var foldLine = this.session.getFoldLine(rowStart);\r\n\t if (foldLine) {\r\n\t rowStart = foldLine.start.row;\r\n\t rowEnd = foldLine.end.row;\r\n\t } else {\r\n\t rowEnd = rowStart;\r\n\t }\r\n\t if (excludeLastChar === true)\r\n\t return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\r\n\t else\r\n\t return new Range(rowStart, 0, rowEnd + 1, 0);\r\n\t };\r\n\t this.selectLine = function() {\r\n\t this.setSelectionRange(this.getLineRange());\r\n\t };\r\n\t this.moveCursorUp = function() {\r\n\t this.moveCursorBy(-1, 0);\r\n\t };\r\n\t this.moveCursorDown = function() {\r\n\t this.moveCursorBy(1, 0);\r\n\t };\r\n\t this.moveCursorLeft = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t } else if (cursor.column === 0) {\r\n\t if (cursor.row > 0) {\r\n\t this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, -tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, -1);\r\n\t }\r\n\t };\r\n\t this.moveCursorRight = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t }\r\n\t else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\r\n\t if (this.lead.row < this.doc.getLength() - 1) {\r\n\t this.moveCursorTo(this.lead.row + 1, 0);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t var cursor = this.lead;\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, 1);\r\n\t }\r\n\t };\r\n\t this.moveCursorLineStart = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var screenRow = this.session.documentToScreenRow(row, column);\r\n\t var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\r\n\t var beforeCursor = this.session.getDisplayLine(\r\n\t row, null, firstColumnPosition.row,\r\n\t firstColumnPosition.column\r\n\t );\r\n\r\n\t var leadingSpace = beforeCursor.match(/^\\s*/);\r\n\t if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\r\n\t firstColumnPosition.column += leadingSpace[0].length;\r\n\t this.moveCursorToPosition(firstColumnPosition);\r\n\t };\r\n\t this.moveCursorLineEnd = function() {\r\n\t var lead = this.lead;\r\n\t var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\r\n\t if (this.lead.column == lineEnd.column) {\r\n\t var line = this.session.getLine(lineEnd.row);\r\n\t if (lineEnd.column == line.length) {\r\n\t var textEnd = line.search(/\\s+$/);\r\n\t if (textEnd > 0)\r\n\t lineEnd.column = textEnd;\r\n\t }\r\n\t }\r\n\r\n\t this.moveCursorTo(lineEnd.row, lineEnd.column);\r\n\t };\r\n\t this.moveCursorFileEnd = function() {\r\n\t var row = this.doc.getLength() - 1;\r\n\t var column = this.doc.getLine(row).length;\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorFileStart = function() {\r\n\t this.moveCursorTo(0, 0);\r\n\t };\r\n\t this.moveCursorLongWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t return;\r\n\t }\r\n\t if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.nonTokenRe.lastIndex;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t rightOfCursor = line.substring(column);\r\n\t }\r\n\t if (column >= line.length) {\r\n\t this.moveCursorTo(row, line.length);\r\n\t this.moveCursorRight();\r\n\t if (row < this.doc.getLength() - 1)\r\n\t this.moveCursorWordRight();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorLongWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t return;\r\n\t }\r\n\r\n\t var str = this.session.getFoldStringAt(row, column, -1);\r\n\t if (str == null) {\r\n\t str = this.doc.getLine(row).substring(0, column);\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(str);\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.nonTokenRe.lastIndex;\r\n\t leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t }\r\n\t if (column <= 0) {\r\n\t this.moveCursorTo(row, 0);\r\n\t this.moveCursorLeft();\r\n\t if (row > 0)\r\n\t this.moveCursorWordLeft();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\r\n\t this.$shortWordEndIndex = function(rightOfCursor) {\r\n\t var match, index = 0, ch;\r\n\t var whitespaceRe = /\\s/;\r\n\t var tokenRe = this.session.tokenRe;\r\n\r\n\t tokenRe.lastIndex = 0;\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t index = this.session.tokenRe.lastIndex;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\r\n\t if (index < 1) {\r\n\t tokenRe.lastIndex = 0;\r\n\t while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\r\n\t tokenRe.lastIndex = 0;\r\n\t index ++;\r\n\t if (whitespaceRe.test(ch)) {\r\n\t if (index > 2) {\r\n\t index--;\r\n\t break;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\t if (index > 2)\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t tokenRe.lastIndex = 0;\r\n\r\n\t return index;\r\n\t };\r\n\r\n\t this.moveCursorShortWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold)\r\n\t return this.moveCursorTo(fold.end.row, fold.end.column);\r\n\r\n\t if (column == line.length) {\r\n\t var l = this.doc.getLength();\r\n\t do {\r\n\t row++;\r\n\t rightOfCursor = this.doc.getLine(row);\r\n\t } while (row < l && /^\\s*$/.test(rightOfCursor));\r\n\r\n\t if (!/^\\s+/.test(rightOfCursor))\r\n\t rightOfCursor = \"\";\r\n\t column = 0;\r\n\t }\r\n\r\n\t var index = this.$shortWordEndIndex(rightOfCursor);\r\n\r\n\t this.moveCursorTo(row, column + index);\r\n\t };\r\n\r\n\t this.moveCursorShortWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1))\r\n\t return this.moveCursorTo(fold.start.row, fold.start.column);\r\n\r\n\t var line = this.session.getLine(row).substring(0, column);\r\n\t if (column === 0) {\r\n\t do {\r\n\t row--;\r\n\t line = this.doc.getLine(row);\r\n\t } while (row > 0 && /^\\s*$/.test(line));\r\n\r\n\t column = line.length;\r\n\t if (!/\\s+$/.test(line))\r\n\t line = \"\";\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(line);\r\n\t var index = this.$shortWordEndIndex(leftOfCursor);\r\n\r\n\t return this.moveCursorTo(row, column - index);\r\n\t };\r\n\r\n\t this.moveCursorWordRight = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordRight();\r\n\t else\r\n\t this.moveCursorShortWordRight();\r\n\t };\r\n\r\n\t this.moveCursorWordLeft = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordLeft();\r\n\t else\r\n\t this.moveCursorShortWordLeft();\r\n\t };\r\n\t this.moveCursorBy = function(rows, chars) {\r\n\t var screenPos = this.session.documentToScreenPosition(\r\n\t this.lead.row,\r\n\t this.lead.column\r\n\t );\r\n\r\n\t if (chars === 0) {\r\n\t if (this.$desiredColumn)\r\n\t screenPos.column = this.$desiredColumn;\r\n\t else\r\n\t this.$desiredColumn = screenPos.column;\r\n\t }\r\n\r\n\t var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);\r\n\t \r\n\t if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\r\n\t if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\r\n\t if (docPos.row > 0 || rows > 0)\r\n\t docPos.row++;\r\n\t }\r\n\t }\r\n\t this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\r\n\t };\r\n\t this.moveCursorToPosition = function(position) {\r\n\t this.moveCursorTo(position.row, position.column);\r\n\t };\r\n\t this.moveCursorTo = function(row, column, keepDesiredColumn) {\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t row = fold.start.row;\r\n\t column = fold.start.column;\r\n\t }\r\n\r\n\t this.$keepDesiredColumnOnChange = true;\r\n\t this.lead.setPosition(row, column);\r\n\t this.$keepDesiredColumnOnChange = false;\r\n\r\n\t if (!keepDesiredColumn)\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\t this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\r\n\t var pos = this.session.screenToDocumentPosition(row, column);\r\n\t this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\r\n\t };\r\n\t this.detach = function() {\r\n\t this.lead.detach();\r\n\t this.anchor.detach();\r\n\t this.session = this.doc = null;\r\n\t };\r\n\r\n\t this.fromOrientedRange = function(range) {\r\n\t this.setSelectionRange(range, range.cursor == range.start);\r\n\t this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\r\n\t };\r\n\r\n\t this.toOrientedRange = function(range) {\r\n\t var r = this.getRange();\r\n\t if (range) {\r\n\t range.start.column = r.start.column;\r\n\t range.start.row = r.start.row;\r\n\t range.end.column = r.end.column;\r\n\t range.end.row = r.end.row;\r\n\t } else {\r\n\t range = r;\r\n\t }\r\n\r\n\t range.cursor = this.isBackwards() ? range.start : range.end;\r\n\t range.desiredColumn = this.$desiredColumn;\r\n\t return range;\r\n\t };\r\n\t this.getRangeOfMovements = function(func) {\r\n\t var start = this.getCursor();\r\n\t try {\r\n\t func(this);\r\n\t var end = this.getCursor();\r\n\t return Range.fromPoints(start,end);\r\n\t } catch(e) {\r\n\t return Range.fromPoints(start,start);\r\n\t } finally {\r\n\t this.moveCursorToPosition(start);\r\n\t }\r\n\t };\r\n\r\n\t this.toJSON = function() {\r\n\t if (this.rangeCount) {\r\n\t var data = this.ranges.map(function(r) {\r\n\t var r1 = r.clone();\r\n\t r1.isBackwards = r.cursor == r.start;\r\n\t return r1;\r\n\t });\r\n\t } else {\r\n\t var data = this.getRange();\r\n\t data.isBackwards = this.isBackwards();\r\n\t }\r\n\t return data;\r\n\t };\r\n\r\n\t this.fromJSON = function(data) {\r\n\t if (data.start == undefined) {\r\n\t if (this.rangeList) {\r\n\t this.toSingleRange(data[0]);\r\n\t for (var i = data.length; i--; ) {\r\n\t var r = Range.fromPoints(data[i].start, data[i].end);\r\n\t if (data[i].isBackwards)\r\n\t r.cursor = r.start;\r\n\t this.addRange(r, true);\r\n\t }\r\n\t return;\r\n\t } else\r\n\t data = data[0];\r\n\t }\r\n\t if (this.rangeList)\r\n\t this.toSingleRange(data);\r\n\t this.setSelectionRange(data, data.isBackwards);\r\n\t };\r\n\r\n\t this.isEqual = function(data) {\r\n\t if ((data.length || this.rangeCount) && data.length != this.rangeCount)\r\n\t return false;\r\n\t if (!data.length || !this.ranges)\r\n\t return this.getRange().isEqual(data);\r\n\r\n\t for (var i = this.ranges.length; i--; ) {\r\n\t if (!this.ranges[i].isEqual(data[i]))\r\n\t return false;\r\n\t }\r\n\t return true;\r\n\t };\r\n\r\n\t}).call(Selection.prototype);\r\n\r\n\texports.Selection = Selection;\r\n\t});\r\n\r\n\tace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar config = acequire(\"./config\");\r\n\tvar MAX_TOKEN_COUNT = 2000;\r\n\tvar Tokenizer = function(rules) {\r\n\t this.states = rules;\r\n\r\n\t this.regExps = {};\r\n\t this.matchMappings = {};\r\n\t for (var key in this.states) {\r\n\t var state = this.states[key];\r\n\t var ruleRegExps = [];\r\n\t var matchTotal = 0;\r\n\t var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\r\n\t var flag = \"g\";\r\n\r\n\t var splitterRurles = [];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.defaultToken)\r\n\t mapping.defaultToken = rule.defaultToken;\r\n\t if (rule.caseInsensitive)\r\n\t flag = \"gi\";\r\n\t if (rule.regex == null)\r\n\t continue;\r\n\r\n\t if (rule.regex instanceof RegExp)\r\n\t rule.regex = rule.regex.toString().slice(1, -1);\r\n\t var adjustedregex = rule.regex;\r\n\t var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\r\n\t if (Array.isArray(rule.token)) {\r\n\t if (rule.token.length == 1 || matchcount == 1) {\r\n\t rule.token = rule.token[0];\r\n\t } else if (matchcount - 1 != rule.token.length) {\r\n\t this.reportError(\"number of classes and regexp groups doesn't match\", { \r\n\t rule: rule,\r\n\t groupCount: matchcount - 1\r\n\t });\r\n\t rule.token = rule.token[0];\r\n\t } else {\r\n\t rule.tokenArray = rule.token;\r\n\t rule.token = null;\r\n\t rule.onMatch = this.$arrayTokens;\r\n\t }\r\n\t } else if (typeof rule.token == \"function\" && !rule.onMatch) {\r\n\t if (matchcount > 1)\r\n\t rule.onMatch = this.$applyToken;\r\n\t else\r\n\t rule.onMatch = rule.token;\r\n\t }\r\n\r\n\t if (matchcount > 1) {\r\n\t if (/\\\\\\d/.test(rule.regex)) {\r\n\t adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\r\n\t return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\r\n\t });\r\n\t } else {\r\n\t matchcount = 1;\r\n\t adjustedregex = this.removeCapturingGroups(rule.regex);\r\n\t }\r\n\t if (!rule.splitRegex && typeof rule.token != \"string\")\r\n\t splitterRurles.push(rule); // flag will be known only at the very end\r\n\t }\r\n\r\n\t mapping[matchTotal] = i;\r\n\t matchTotal += matchcount;\r\n\r\n\t ruleRegExps.push(adjustedregex);\r\n\t if (!rule.onMatch)\r\n\t rule.onMatch = null;\r\n\t }\r\n\t \r\n\t if (!ruleRegExps.length) {\r\n\t mapping[0] = 0;\r\n\t ruleRegExps.push(\"$\");\r\n\t }\r\n\t \r\n\t splitterRurles.forEach(function(rule) {\r\n\t rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\r\n\t }, this);\r\n\r\n\t this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\t this.$setMaxTokenCount = function(m) {\r\n\t MAX_TOKEN_COUNT = m | 0;\r\n\t };\r\n\t \r\n\t this.$applyToken = function(str) {\r\n\t var values = this.splitRegex.exec(str).slice(1);\r\n\t var types = this.token.apply(this, values);\r\n\t if (typeof types === \"string\")\r\n\t return [{type: types, value: str}];\r\n\r\n\t var tokens = [];\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.$arrayTokens = function(str) {\r\n\t if (!str)\r\n\t return [];\r\n\t var values = this.splitRegex.exec(str);\r\n\t if (!values)\r\n\t return \"text\";\r\n\t var tokens = [];\r\n\t var types = this.tokenArray;\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i + 1])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i + 1]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.removeCapturingGroups = function(src) {\r\n\t var r = src.replace(\r\n\t /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\r\n\t function(x, y) {return y ? \"(?:\" : x;}\r\n\t );\r\n\t return r;\r\n\t };\r\n\r\n\t this.createSplitterRegexp = function(src, flag) {\r\n\t if (src.indexOf(\"(?=\") != -1) {\r\n\t var stack = 0;\r\n\t var inChClass = false;\r\n\t var lastCapture = {};\r\n\t src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\r\n\t m, esc, parenOpen, parenClose, square, index\r\n\t ) {\r\n\t if (inChClass) {\r\n\t inChClass = square != \"]\";\r\n\t } else if (square) {\r\n\t inChClass = true;\r\n\t } else if (parenClose) {\r\n\t if (stack == lastCapture.stack) {\r\n\t lastCapture.end = index+1;\r\n\t lastCapture.stack = -1;\r\n\t }\r\n\t stack--;\r\n\t } else if (parenOpen) {\r\n\t stack++;\r\n\t if (parenOpen.length != 1) {\r\n\t lastCapture.stack = stack\r\n\t lastCapture.start = index;\r\n\t }\r\n\t }\r\n\t return m;\r\n\t });\r\n\r\n\t if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\r\n\t src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\r\n\t }\r\n\t if (src.charAt(0) != \"^\") src = \"^\" + src;\r\n\t if (src.charAt(src.length - 1) != \"$\") src += \"$\";\r\n\t \r\n\t return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\r\n\t };\r\n\t this.getLineTokens = function(line, startState) {\r\n\t if (startState && typeof startState != \"string\") {\r\n\t var stack = startState.slice(0);\r\n\t startState = stack[0];\r\n\t if (startState === \"#tmp\") {\r\n\t stack.shift()\r\n\t startState = stack.shift()\r\n\t }\r\n\t } else\r\n\t var stack = [];\r\n\r\n\t var currentState = startState || \"start\";\r\n\t var state = this.states[currentState];\r\n\t if (!state) {\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t var mapping = this.matchMappings[currentState];\r\n\t var re = this.regExps[currentState];\r\n\t re.lastIndex = 0;\r\n\r\n\t var match, tokens = [];\r\n\t var lastIndex = 0;\r\n\t var matchAttempts = 0;\r\n\r\n\t var token = {type: null, value: \"\"};\r\n\r\n\t while (match = re.exec(line)) {\r\n\t var type = mapping.defaultToken;\r\n\t var rule = null;\r\n\t var value = match[0];\r\n\t var index = re.lastIndex;\r\n\r\n\t if (index - value.length > lastIndex) {\r\n\t var skipped = line.substring(lastIndex, index - value.length);\r\n\t if (token.type == type) {\r\n\t token.value += skipped;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: skipped};\r\n\t }\r\n\t }\r\n\r\n\t for (var i = 0; i < match.length-2; i++) {\r\n\t if (match[i + 1] === undefined)\r\n\t continue;\r\n\r\n\t rule = state[mapping[i]];\r\n\r\n\t if (rule.onMatch)\r\n\t type = rule.onMatch(value, currentState, stack);\r\n\t else\r\n\t type = rule.token;\r\n\r\n\t if (rule.next) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t currentState = rule.next;\r\n\t } else {\r\n\t currentState = rule.next(currentState, stack);\r\n\t }\r\n\t \r\n\t state = this.states[currentState];\r\n\t if (!state) {\r\n\t this.reportError(\"state doesn't exist\", currentState);\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t mapping = this.matchMappings[currentState];\r\n\t lastIndex = index;\r\n\t re = this.regExps[currentState];\r\n\t re.lastIndex = index;\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t if (value) {\r\n\t if (typeof type === \"string\") {\r\n\t if ((!rule || rule.merge !== false) && token.type === type) {\r\n\t token.value += value;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: value};\r\n\t }\r\n\t } else if (type) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: null, value: \"\"};\r\n\t for (var i = 0; i < type.length; i++)\r\n\t tokens.push(type[i]);\r\n\t }\r\n\t }\r\n\r\n\t if (lastIndex == line.length)\r\n\t break;\r\n\r\n\t lastIndex = index;\r\n\r\n\t if (matchAttempts++ > MAX_TOKEN_COUNT) {\r\n\t if (matchAttempts > 2 * line.length) {\r\n\t this.reportError(\"infinite loop with in ace tokenizer\", {\r\n\t startState: startState,\r\n\t line: line\r\n\t });\r\n\t }\r\n\t while (lastIndex < line.length) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {\r\n\t value: line.substring(lastIndex, lastIndex += 2000),\r\n\t type: \"overflow\"\r\n\t };\r\n\t }\r\n\t currentState = \"start\";\r\n\t stack = [];\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t \r\n\t if (stack.length > 1) {\r\n\t if (stack[0] !== currentState)\r\n\t stack.unshift(\"#tmp\", currentState);\r\n\t }\r\n\t return {\r\n\t tokens : tokens,\r\n\t state : stack.length ? stack : currentState\r\n\t };\r\n\t };\r\n\t \r\n\t this.reportError = config.reportError;\r\n\t \r\n\t}).call(Tokenizer.prototype);\r\n\r\n\texports.Tokenizer = Tokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\r\n\tvar TextHighlightRules = function() {\r\n\r\n\t this.$rules = {\r\n\t \"start\" : [{\r\n\t token : \"empty_line\",\r\n\t regex : '^$'\r\n\t }, {\r\n\t defaultToken : \"text\"\r\n\t }]\r\n\t };\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.addRules = function(rules, prefix) {\r\n\t if (!prefix) {\r\n\t for (var key in rules)\r\n\t this.$rules[key] = rules[key];\r\n\t return;\r\n\t }\r\n\t for (var key in rules) {\r\n\t var state = rules[key];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.next || rule.onMatch) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t if (rule.next.indexOf(prefix) !== 0)\r\n\t rule.next = prefix + rule.next;\r\n\t }\r\n\t if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\r\n\t rule.nextState = prefix + rule.nextState;\r\n\t }\r\n\t }\r\n\t this.$rules[prefix + key] = state;\r\n\t }\r\n\t };\r\n\r\n\t this.getRules = function() {\r\n\t return this.$rules;\r\n\t };\r\n\r\n\t this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\r\n\t var embedRules = typeof HighlightRules == \"function\"\r\n\t ? new HighlightRules().getRules()\r\n\t : HighlightRules;\r\n\t if (states) {\r\n\t for (var i = 0; i < states.length; i++)\r\n\t states[i] = prefix + states[i];\r\n\t } else {\r\n\t states = [];\r\n\t for (var key in embedRules)\r\n\t states.push(prefix + key);\r\n\t }\r\n\r\n\t this.addRules(embedRules, prefix);\r\n\r\n\t if (escapeRules) {\r\n\t var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\r\n\t for (var i = 0; i < states.length; i++)\r\n\t addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\r\n\t }\r\n\r\n\t if (!this.$embeds)\r\n\t this.$embeds = [];\r\n\t this.$embeds.push(prefix);\r\n\t };\r\n\r\n\t this.getEmbeds = function() {\r\n\t return this.$embeds;\r\n\t };\r\n\r\n\t var pushState = function(currentState, stack) {\r\n\t if (currentState != \"start\" || stack.length)\r\n\t stack.unshift(this.nextState, currentState);\r\n\t return this.nextState;\r\n\t };\r\n\t var popState = function(currentState, stack) {\r\n\t stack.shift();\r\n\t return stack.shift() || \"start\";\r\n\t };\r\n\r\n\t this.normalizeRules = function() {\r\n\t var id = 0;\r\n\t var rules = this.$rules;\r\n\t function processState(key) {\r\n\t var state = rules[key];\r\n\t state.processed = true;\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (!rule.regex && rule.start) {\r\n\t rule.regex = rule.start;\r\n\t if (!rule.next)\r\n\t rule.next = [];\r\n\t rule.next.push({\r\n\t defaultToken: rule.token\r\n\t }, {\r\n\t token: rule.token + \".end\",\r\n\t regex: rule.end || rule.start,\r\n\t next: \"pop\"\r\n\t });\r\n\t rule.token = rule.token + \".start\";\r\n\t rule.push = true;\r\n\t }\r\n\t var next = rule.next || rule.push;\r\n\t if (next && Array.isArray(next)) {\r\n\t var stateName = rule.stateName;\r\n\t if (!stateName) {\r\n\t stateName = rule.token;\r\n\t if (typeof stateName != \"string\")\r\n\t stateName = stateName[0] || \"\";\r\n\t if (rules[stateName])\r\n\t stateName += id++;\r\n\t }\r\n\t rules[stateName] = next;\r\n\t rule.next = stateName;\r\n\t processState(stateName);\r\n\t } else if (next == \"pop\") {\r\n\t rule.next = popState;\r\n\t }\r\n\r\n\t if (rule.push) {\r\n\t rule.nextState = rule.next || rule.push;\r\n\t rule.next = pushState;\r\n\t delete rule.push;\r\n\t }\r\n\r\n\t if (rule.rules) {\r\n\t for (var r in rule.rules) {\r\n\t if (rules[r]) {\r\n\t if (rules[r].push)\r\n\t rules[r].push.apply(rules[r], rule.rules[r]);\r\n\t } else {\r\n\t rules[r] = rule.rules[r];\r\n\t }\r\n\t }\r\n\t }\r\n\t if (rule.include || typeof rule == \"string\") {\r\n\t var includeName = rule.include || rule;\r\n\t var toInsert = rules[includeName];\r\n\t } else if (Array.isArray(rule))\r\n\t toInsert = rule;\r\n\r\n\t if (toInsert) {\r\n\t var args = [i, 1].concat(toInsert);\r\n\t if (rule.noEscape)\r\n\t args = args.filter(function(x) {return !x.next;});\r\n\t state.splice.apply(state, args);\r\n\t i--;\r\n\t toInsert = null;\r\n\t }\r\n\t \r\n\t if (rule.keywordMap) {\r\n\t rule.token = this.createKeywordMapper(\r\n\t rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\r\n\t );\r\n\t delete rule.defaultToken;\r\n\t }\r\n\t }\r\n\t }\r\n\t Object.keys(rules).forEach(processState, this);\r\n\t };\r\n\r\n\t this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\r\n\t var keywords = Object.create(null);\r\n\t Object.keys(map).forEach(function(className) {\r\n\t var a = map[className];\r\n\t if (ignoreCase)\r\n\t a = a.toLowerCase();\r\n\t var list = a.split(splitChar || \"|\");\r\n\t for (var i = list.length; i--; )\r\n\t keywords[list[i]] = className;\r\n\t });\r\n\t if (Object.getPrototypeOf(keywords)) {\r\n\t keywords.__proto__ = null;\r\n\t }\r\n\t this.$keywordList = Object.keys(keywords);\r\n\t map = null;\r\n\t return ignoreCase\r\n\t ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\r\n\t : function(value) {return keywords[value] || defaultToken };\r\n\t };\r\n\r\n\t this.getKeywords = function() {\r\n\t return this.$keywords;\r\n\t };\r\n\r\n\t}).call(TextHighlightRules.prototype);\r\n\r\n\texports.TextHighlightRules = TextHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Behaviour = function() {\r\n\t this.$behaviours = {};\r\n\t};\r\n\r\n\t(function () {\r\n\r\n\t this.add = function (name, action, callback) {\r\n\t switch (undefined) {\r\n\t case this.$behaviours:\r\n\t this.$behaviours = {};\r\n\t case this.$behaviours[name]:\r\n\t this.$behaviours[name] = {};\r\n\t }\r\n\t this.$behaviours[name][action] = callback;\r\n\t }\r\n\t \r\n\t this.addBehaviours = function (behaviours) {\r\n\t for (var key in behaviours) {\r\n\t for (var action in behaviours[key]) {\r\n\t this.add(key, action, behaviours[key][action]);\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.remove = function (name) {\r\n\t if (this.$behaviours && this.$behaviours[name]) {\r\n\t delete this.$behaviours[name];\r\n\t }\r\n\t }\r\n\t \r\n\t this.inherit = function (mode, filter) {\r\n\t if (typeof mode === \"function\") {\r\n\t var behaviours = new mode().getBehaviours(filter);\r\n\t } else {\r\n\t var behaviours = mode.getBehaviours(filter);\r\n\t }\r\n\t this.addBehaviours(behaviours);\r\n\t }\r\n\t \r\n\t this.getBehaviours = function (filter) {\r\n\t if (!filter) {\r\n\t return this.$behaviours;\r\n\t } else {\r\n\t var ret = {}\r\n\t for (var i = 0; i < filter.length; i++) {\r\n\t if (this.$behaviours[filter[i]]) {\r\n\t ret[filter[i]] = this.$behaviours[filter[i]];\r\n\t }\r\n\t }\r\n\t return ret;\r\n\t }\r\n\t }\r\n\r\n\t}).call(Behaviour.prototype);\r\n\r\n\texports.Behaviour = Behaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.packages = {};\r\n\r\n\taddUnicodePackage({\r\n\t L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\r\n\t Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\r\n\t Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\r\n\t Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\r\n\t Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\r\n\t Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\r\n\t N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\r\n\t No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\r\n\t P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\r\n\t Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\r\n\t Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\r\n\t Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\r\n\t Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\r\n\t Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\r\n\t Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\r\n\t Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\r\n\t S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\r\n\t Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\r\n\t Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\r\n\t Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\r\n\t So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\r\n\t Z: \"002000A01680180E2000-200A20282029202F205F3000\",\r\n\t Zs: \"002000A01680180E2000-200A202F205F3000\",\r\n\t Zl: \"2028\",\r\n\t Zp: \"2029\",\r\n\t C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\r\n\t Cc: \"0000-001F007F-009F\",\r\n\t Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\r\n\t Co: \"E000-F8FF\",\r\n\t Cs: \"D800-DFFF\",\r\n\t Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\r\n\t});\r\n\r\n\tfunction addUnicodePackage (pack) {\r\n\t var codePoint = /\\w{4}/g;\r\n\t for (var name in pack)\r\n\t exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar TokenIterator = function(session, initialRow, initialColumn) {\r\n\t this.$session = session;\r\n\t this.$row = initialRow;\r\n\t this.$rowTokens = session.getTokens(initialRow);\r\n\r\n\t var token = session.getTokenAt(initialRow, initialColumn);\r\n\t this.$tokenIndex = token ? token.index : -1;\r\n\t};\r\n\r\n\t(function() { \r\n\t this.stepBackward = function() {\r\n\t this.$tokenIndex -= 1;\r\n\t \r\n\t while (this.$tokenIndex < 0) {\r\n\t this.$row -= 1;\r\n\t if (this.$row < 0) {\r\n\t this.$row = 0;\r\n\t return null;\r\n\t }\r\n\t \r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = this.$rowTokens.length - 1;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.stepForward = function() {\r\n\t this.$tokenIndex += 1;\r\n\t var rowCount;\r\n\t while (this.$tokenIndex >= this.$rowTokens.length) {\r\n\t this.$row += 1;\r\n\t if (!rowCount)\r\n\t rowCount = this.$session.getLength();\r\n\t if (this.$row >= rowCount) {\r\n\t this.$row = rowCount - 1;\r\n\t return null;\r\n\t }\r\n\r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = 0;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentToken = function () {\r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentTokenRow = function () {\r\n\t return this.$row;\r\n\t }; \r\n\t this.getCurrentTokenColumn = function() {\r\n\t var rowTokens = this.$rowTokens;\r\n\t var tokenIndex = this.$tokenIndex;\r\n\t var column = rowTokens[tokenIndex].start;\r\n\t if (column !== undefined)\r\n\t return column;\r\n\t \r\n\t column = 0;\r\n\t while (tokenIndex > 0) {\r\n\t tokenIndex -= 1;\r\n\t column += rowTokens[tokenIndex].value.length;\r\n\t }\r\n\t \r\n\t return column; \r\n\t };\r\n\t this.getCurrentTokenPosition = function() {\r\n\t return {row: this.$row, column: this.getCurrentTokenColumn()};\r\n\t };\r\n\t \r\n\t}).call(TokenIterator.prototype);\r\n\r\n\texports.TokenIterator = TokenIterator;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\tvar Behaviour = acequire(\"./behaviour\").Behaviour;\r\n\tvar unicode = acequire(\"../unicode\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = TextHighlightRules;\r\n\t this.$behaviour = new Behaviour();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.tokenRe = new RegExp(\"^[\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\r\n\t );\r\n\r\n\t this.nonTokenRe = new RegExp(\"^(?:[^\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\r\n\t );\r\n\r\n\t this.getTokenizer = function() {\r\n\t if (!this.$tokenizer) {\r\n\t this.$highlightRules = this.$highlightRules || new this.HighlightRules();\r\n\t this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\r\n\t }\r\n\t return this.$tokenizer;\r\n\t };\r\n\r\n\t this.lineCommentStart = \"\";\r\n\t this.blockComment = \"\";\r\n\r\n\t this.toggleCommentLines = function(state, session, startRow, endRow) {\r\n\t var doc = session.doc;\r\n\r\n\t var ignoreBlankLines = true;\r\n\t var shouldRemove = true;\r\n\t var minIndent = Infinity;\r\n\t var tabSize = session.getTabSize();\r\n\t var insertAtTabStop = false;\r\n\r\n\t if (!this.lineCommentStart) {\r\n\t if (!this.blockComment)\r\n\t return false;\r\n\t var lineCommentStart = this.blockComment.start;\r\n\t var lineCommentEnd = this.blockComment.end;\r\n\t var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\r\n\t var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\r\n\r\n\t var comment = function(line, i) {\r\n\t if (testRemove(line, i))\r\n\t return;\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m;\r\n\t if (m = line.match(regexpEnd))\r\n\t doc.removeInLine(i, line.length - m[0].length, line.length);\r\n\t if (m = line.match(regexpStart))\r\n\t doc.removeInLine(i, m[1].length, m[0].length);\r\n\t };\r\n\r\n\t var testRemove = function(line, row) {\r\n\t if (regexpStart.test(line))\r\n\t return true;\r\n\t var tokens = session.getTokens(row);\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t if (tokens[i].type === \"comment\")\r\n\t return true;\r\n\t }\r\n\t };\r\n\t } else {\r\n\t if (Array.isArray(this.lineCommentStart)) {\r\n\t var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\r\n\t var lineCommentStart = this.lineCommentStart[0];\r\n\t } else {\r\n\t var regexpStart = lang.escapeRegExp(this.lineCommentStart);\r\n\t var lineCommentStart = this.lineCommentStart;\r\n\t }\r\n\t regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\r\n\t \r\n\t insertAtTabStop = session.getUseSoftTabs();\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m = line.match(regexpStart);\r\n\t if (!m) return;\r\n\t var start = m[1].length, end = m[0].length;\r\n\t if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\r\n\t end--;\r\n\t doc.removeInLine(i, start, end);\r\n\t };\r\n\t var commentWithSpace = lineCommentStart + \" \";\r\n\t var comment = function(line, i) {\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t if (shouldInsertSpace(line, minIndent, minIndent))\r\n\t doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\r\n\t else\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\t var testRemove = function(line, i) {\r\n\t return regexpStart.test(line);\r\n\t };\r\n\t \r\n\t var shouldInsertSpace = function(line, before, after) {\r\n\t var spaces = 0;\r\n\t while (before-- && line.charAt(before) == \" \")\r\n\t spaces++;\r\n\t if (spaces % tabSize != 0)\r\n\t return false;\r\n\t var spaces = 0;\r\n\t while (line.charAt(after++) == \" \")\r\n\t spaces++;\r\n\t if (tabSize > 2)\r\n\t return spaces % tabSize != tabSize - 1;\r\n\t else\r\n\t return spaces % tabSize == 0;\r\n\t return true;\r\n\t };\r\n\t }\r\n\r\n\t function iter(fun) {\r\n\t for (var i = startRow; i <= endRow; i++)\r\n\t fun(doc.getLine(i), i);\r\n\t }\r\n\r\n\r\n\t var minEmptyLength = Infinity;\r\n\t iter(function(line, i) {\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent !== -1) {\r\n\t if (indent < minIndent)\r\n\t minIndent = indent;\r\n\t if (shouldRemove && !testRemove(line, i))\r\n\t shouldRemove = false;\r\n\t } else if (minEmptyLength > line.length) {\r\n\t minEmptyLength = line.length;\r\n\t }\r\n\t });\r\n\r\n\t if (minIndent == Infinity) {\r\n\t minIndent = minEmptyLength;\r\n\t ignoreBlankLines = false;\r\n\t shouldRemove = false;\r\n\t }\r\n\r\n\t if (insertAtTabStop && minIndent % tabSize != 0)\r\n\t minIndent = Math.floor(minIndent / tabSize) * tabSize;\r\n\r\n\t iter(shouldRemove ? uncomment : comment);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function(state, session, range, cursor) {\r\n\t var comment = this.blockComment;\r\n\t if (!comment)\r\n\t return;\r\n\t if (!comment.start && comment[0])\r\n\t comment = comment[0];\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\r\n\t var sel = session.selection;\r\n\t var initialRange = session.selection.toOrientedRange();\r\n\t var startRow, colDiff;\r\n\r\n\t if (token && /comment/.test(token.type)) {\r\n\t var startRange, endRange;\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.start);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t startRange = new Range(row, column, row, column + comment.start.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepBackward();\r\n\t }\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.end);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t endRange = new Range(row, column, row, column + comment.end.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepForward();\r\n\t }\r\n\t if (endRange)\r\n\t session.remove(endRange);\r\n\t if (startRange) {\r\n\t session.remove(startRange);\r\n\t startRow = startRange.start.row;\r\n\t colDiff = -comment.start.length;\r\n\t }\r\n\t } else {\r\n\t colDiff = comment.start.length;\r\n\t startRow = range.start.row;\r\n\t session.insert(range.end, comment.end);\r\n\t session.insert(range.start, comment.start);\r\n\t }\r\n\t if (initialRange.start.row == startRow)\r\n\t initialRange.start.column += colDiff;\r\n\t if (initialRange.end.row == startRow)\r\n\t initialRange.end.column += colDiff;\r\n\t session.selection.fromOrientedRange(initialRange);\r\n\t };\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t return this.$getIndent(line);\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return false;\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.createModeDelegates = function (mapping) {\r\n\t this.$embeds = [];\r\n\t this.$modes = {};\r\n\t for (var i in mapping) {\r\n\t if (mapping[i]) {\r\n\t this.$embeds.push(i);\r\n\t this.$modes[i] = new mapping[i]();\r\n\t }\r\n\t }\r\n\r\n\t var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \r\n\t \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\r\n\r\n\t for (var i = 0; i < delegations.length; i++) {\r\n\t (function(scope) {\r\n\t var functionName = delegations[i];\r\n\t var defaultHandler = scope[functionName];\r\n\t scope[delegations[i]] = function() {\r\n\t return this.$delegator(functionName, arguments, defaultHandler);\r\n\t };\r\n\t }(this));\r\n\t }\r\n\t };\r\n\r\n\t this.$delegator = function(method, args, defaultHandler) {\r\n\t var state = args[0];\r\n\t if (typeof state != \"string\")\r\n\t state = state[0];\r\n\t for (var i = 0; i < this.$embeds.length; i++) {\r\n\t if (!this.$modes[this.$embeds[i]]) continue;\r\n\r\n\t var split = state.split(this.$embeds[i]);\r\n\t if (!split[0] && split[1]) {\r\n\t args[0] = split[1];\r\n\t var mode = this.$modes[this.$embeds[i]];\r\n\t return mode[method].apply(mode, args);\r\n\t }\r\n\t }\r\n\t var ret = defaultHandler.apply(this, args);\r\n\t return defaultHandler ? ret : undefined;\r\n\t };\r\n\r\n\t this.transformAction = function(state, action, editor, session, param) {\r\n\t if (this.$behaviour) {\r\n\t var behaviours = this.$behaviour.getBehaviours();\r\n\t for (var key in behaviours) {\r\n\t if (behaviours[key][action]) {\r\n\t var ret = behaviours[key][action].apply(this, arguments);\r\n\t if (ret) {\r\n\t return ret;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.getKeywords = function(append) {\r\n\t if (!this.completionKeywords) {\r\n\t var rules = this.$tokenizer.rules;\r\n\t var completionKeywords = [];\r\n\t for (var rule in rules) {\r\n\t var ruleItr = rules[rule];\r\n\t for (var r = 0, l = ruleItr.length; r < l; r++) {\r\n\t if (typeof ruleItr[r].token === \"string\") {\r\n\t if (/keyword|support|storage/.test(ruleItr[r].token))\r\n\t completionKeywords.push(ruleItr[r].regex);\r\n\t }\r\n\t else if (typeof ruleItr[r].token === \"object\") {\r\n\t for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \r\n\t if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\r\n\t var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\r\n\t completionKeywords.push(rule.substr(1, rule.length - 2));\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t this.completionKeywords = completionKeywords;\r\n\t }\r\n\t if (!append)\r\n\t return this.$keywordList;\r\n\t return completionKeywords.concat(this.$keywordList || []);\r\n\t };\r\n\t \r\n\t this.$createKeywordList = function() {\r\n\t if (!this.$highlightRules)\r\n\t this.getTokenizer();\r\n\t return this.$keywordList = this.$highlightRules.$keywordList || [];\r\n\t };\r\n\r\n\t this.getCompletions = function(state, session, pos, prefix) {\r\n\t var keywords = this.$keywordList || this.$createKeywordList();\r\n\t return keywords.map(function(word) {\r\n\t return {\r\n\t name: word,\r\n\t value: word,\r\n\t score: 0,\r\n\t meta: \"keyword\"\r\n\t };\r\n\t });\r\n\t };\r\n\r\n\t this.$id = \"ace/mode/text\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\tace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tfunction throwDeltaError(delta, errorText){\r\n\t console.log(\"Invalid Delta:\", delta);\r\n\t throw \"Invalid Delta: \" + errorText;\r\n\t}\r\n\r\n\tfunction positionInDocument(docLines, position) {\r\n\t return position.row >= 0 && position.row < docLines.length &&\r\n\t position.column >= 0 && position.column <= docLines[position.row].length;\r\n\t}\r\n\r\n\tfunction validateDelta(docLines, delta) {\r\n\t if (delta.action != \"insert\" && delta.action != \"remove\")\r\n\t throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\r\n\t if (!(delta.lines instanceof Array))\r\n\t throwDeltaError(delta, \"delta.lines must be an Array\");\r\n\t if (!delta.start || !delta.end)\r\n\t throwDeltaError(delta, \"delta.start/end must be an present\");\r\n\t var start = delta.start;\r\n\t if (!positionInDocument(docLines, delta.start))\r\n\t throwDeltaError(delta, \"delta.start must be contained in document\");\r\n\t var end = delta.end;\r\n\t if (delta.action == \"remove\" && !positionInDocument(docLines, end))\r\n\t throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\r\n\t var numRangeRows = end.row - start.row;\r\n\t var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\r\n\t if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\r\n\t throwDeltaError(delta, \"delta.range must match delta lines\");\r\n\t}\r\n\r\n\texports.applyDelta = function(docLines, delta, doNotValidate) {\r\n\t \r\n\t var row = delta.start.row;\r\n\t var startColumn = delta.start.column;\r\n\t var line = docLines[row] || \"\";\r\n\t switch (delta.action) {\r\n\t case \"insert\":\r\n\t var lines = delta.lines;\r\n\t if (lines.length === 1) {\r\n\t docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\r\n\t } else {\r\n\t var args = [row, 1].concat(delta.lines);\r\n\t docLines.splice.apply(docLines, args);\r\n\t docLines[row] = line.substring(0, startColumn) + docLines[row];\r\n\t docLines[row + delta.lines.length - 1] += line.substring(startColumn);\r\n\t }\r\n\t break;\r\n\t case \"remove\":\r\n\t var endColumn = delta.end.column;\r\n\t var endRow = delta.end.row;\r\n\t if (row === endRow) {\r\n\t docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\r\n\t } else {\r\n\t docLines.splice(\r\n\t row, endRow - row + 1,\r\n\t line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\r\n\t );\r\n\t }\r\n\t break;\r\n\t }\r\n\t}\r\n\t});\r\n\r\n\tace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Anchor = exports.Anchor = function(doc, row, column) {\r\n\t this.$onChange = this.onChange.bind(this);\r\n\t this.attach(doc);\r\n\t \r\n\t if (typeof column == \"undefined\")\r\n\t this.setPosition(row.row, row.column);\r\n\t else\r\n\t this.setPosition(row, column);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.getPosition = function() {\r\n\t return this.$clipPositionToDocument(this.row, this.column);\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.document;\r\n\t };\r\n\t this.$insertRight = false;\r\n\t this.onChange = function(delta) {\r\n\t if (delta.start.row == delta.end.row && delta.start.row != this.row)\r\n\t return;\r\n\r\n\t if (delta.start.row > this.row)\r\n\t return;\r\n\t \r\n\t var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\r\n\t this.setPosition(point.row, point.column, true);\r\n\t };\r\n\t \r\n\t function $pointsInOrder(point1, point2, equalPointsInOrder) {\r\n\t var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\r\n\t return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\r\n\t }\r\n\t \r\n\t function $getTransformedPoint(delta, point, moveIfEqual) {\r\n\t var deltaIsInsert = delta.action == \"insert\";\r\n\t var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\r\n\t var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\r\n\t var deltaStart = delta.start;\r\n\t var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\r\n\t if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\r\n\t return {\r\n\t row: point.row,\r\n\t column: point.column\r\n\t };\r\n\t }\r\n\t if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\r\n\t return {\r\n\t row: point.row + deltaRowShift,\r\n\t column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\r\n\t };\r\n\t }\r\n\t \r\n\t return {\r\n\t row: deltaStart.row,\r\n\t column: deltaStart.column\r\n\t };\r\n\t }\r\n\t this.setPosition = function(row, column, noClip) {\r\n\t var pos;\r\n\t if (noClip) {\r\n\t pos = {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t } else {\r\n\t pos = this.$clipPositionToDocument(row, column);\r\n\t }\r\n\r\n\t if (this.row == pos.row && this.column == pos.column)\r\n\t return;\r\n\r\n\t var old = {\r\n\t row: this.row,\r\n\t column: this.column\r\n\t };\r\n\r\n\t this.row = pos.row;\r\n\t this.column = pos.column;\r\n\t this._signal(\"change\", {\r\n\t old: old,\r\n\t value: pos\r\n\t });\r\n\t };\r\n\t this.detach = function() {\r\n\t this.document.removeEventListener(\"change\", this.$onChange);\r\n\t };\r\n\t this.attach = function(doc) {\r\n\t this.document = doc || this.document;\r\n\t this.document.on(\"change\", this.$onChange);\r\n\t };\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t var pos = {};\r\n\r\n\t if (row >= this.document.getLength()) {\r\n\t pos.row = Math.max(0, this.document.getLength() - 1);\r\n\t pos.column = this.document.getLine(pos.row).length;\r\n\t }\r\n\t else if (row < 0) {\r\n\t pos.row = 0;\r\n\t pos.column = 0;\r\n\t }\r\n\t else {\r\n\t pos.row = row;\r\n\t pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\r\n\t }\r\n\r\n\t if (column < 0)\r\n\t pos.column = 0;\r\n\r\n\t return pos;\r\n\t };\r\n\r\n\t}).call(Anchor.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar applyDelta = acequire(\"./apply_delta\").applyDelta;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Anchor = acequire(\"./anchor\").Anchor;\r\n\r\n\tvar Document = function(textOrLines) {\r\n\t this.$lines = [\"\"];\r\n\t if (textOrLines.length === 0) {\r\n\t this.$lines = [\"\"];\r\n\t } else if (Array.isArray(textOrLines)) {\r\n\t this.insertMergedLines({row: 0, column: 0}, textOrLines);\r\n\t } else {\r\n\t this.insert({row: 0, column:0}, textOrLines);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setValue = function(text) {\r\n\t var len = this.getLength() - 1;\r\n\t this.remove(new Range(0, 0, len, this.getLine(len).length));\r\n\t this.insert({row: 0, column: 0}, text);\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.getAllLines().join(this.getNewLineCharacter());\r\n\t };\r\n\t this.createAnchor = function(row, column) {\r\n\t return new Anchor(this, row, column);\r\n\t };\r\n\t if (\"aaa\".split(/a/).length === 0) {\r\n\t this.$split = function(text) {\r\n\t return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\r\n\t };\r\n\t } else {\r\n\t this.$split = function(text) {\r\n\t return text.split(/\\r\\n|\\r|\\n/);\r\n\t };\r\n\t }\r\n\r\n\r\n\t this.$detectNewLine = function(text) {\r\n\t var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\r\n\t this.$autoNewLine = match ? match[1] : \"\\n\";\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineCharacter = function() {\r\n\t switch (this.$newLineMode) {\r\n\t case \"windows\":\r\n\t return \"\\r\\n\";\r\n\t case \"unix\":\r\n\t return \"\\n\";\r\n\t default:\r\n\t return this.$autoNewLine || \"\\n\";\r\n\t }\r\n\t };\r\n\r\n\t this.$autoNewLine = \"\";\r\n\t this.$newLineMode = \"auto\";\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t if (this.$newLineMode === newLineMode)\r\n\t return;\r\n\r\n\t this.$newLineMode = newLineMode;\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.$newLineMode;\r\n\t };\r\n\t this.isNewLine = function(text) {\r\n\t return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.$lines[row] || \"\";\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.$lines.slice(firstRow, lastRow + 1);\r\n\t };\r\n\t this.getAllLines = function() {\r\n\t return this.getLines(0, this.getLength());\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.$lines.length;\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.getLinesForRange(range).join(this.getNewLineCharacter());\r\n\t };\r\n\t this.getLinesForRange = function(range) {\r\n\t var lines;\r\n\t if (range.start.row === range.end.row) {\r\n\t lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\r\n\t } else {\r\n\t lines = this.getLines(range.start.row, range.end.row);\r\n\t lines[0] = (lines[0] || \"\").substring(range.start.column);\r\n\t var l = lines.length - 1;\r\n\t if (range.end.row - range.start.row == l)\r\n\t lines[l] = lines[l].substring(0, range.end.column);\r\n\t }\r\n\t return lines;\r\n\t };\r\n\t this.insertLines = function(row, lines) {\r\n\t console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\r\n\t return this.insertFullLines(row, lines);\r\n\t };\r\n\t this.removeLines = function(firstRow, lastRow) {\r\n\t console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\r\n\t return this.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.insertNewLine = function(position) {\r\n\t console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\r\n\t return this.insertMergedLines(position, [\"\", \"\"]);\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t if (this.getLength() <= 1)\r\n\t this.$detectNewLine(text);\r\n\t \r\n\t return this.insertMergedLines(position, this.$split(text));\r\n\t };\r\n\t this.insertInLine = function(position, text) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = this.pos(position.row, position.column + text.length);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: [text]\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t \r\n\t this.clippedPos = function(row, column) {\r\n\t var length = this.getLength();\r\n\t if (row === undefined) {\r\n\t row = length;\r\n\t } else if (row < 0) {\r\n\t row = 0;\r\n\t } else if (row >= length) {\r\n\t row = length - 1;\r\n\t column = undefined;\r\n\t }\r\n\t var line = this.getLine(row);\r\n\t if (column == undefined)\r\n\t column = line.length;\r\n\t column = Math.min(Math.max(column, 0), line.length);\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.clonePos = function(pos) {\r\n\t return {row: pos.row, column: pos.column};\r\n\t };\r\n\t \r\n\t this.pos = function(row, column) {\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.$clipPosition = function(position) {\r\n\t var length = this.getLength();\r\n\t if (position.row >= length) {\r\n\t position.row = Math.max(0, length - 1);\r\n\t position.column = this.getLine(length - 1).length;\r\n\t } else {\r\n\t position.row = Math.max(0, position.row);\r\n\t position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\r\n\t }\r\n\t return position;\r\n\t };\r\n\t this.insertFullLines = function(row, lines) {\r\n\t row = Math.min(Math.max(row, 0), this.getLength());\r\n\t var column = 0;\r\n\t if (row < this.getLength()) {\r\n\t lines = lines.concat([\"\"]);\r\n\t column = 0;\r\n\t } else {\r\n\t lines = [\"\"].concat(lines);\r\n\t row--;\r\n\t column = this.$lines[row].length;\r\n\t }\r\n\t this.insertMergedLines({row: row, column: column}, lines);\r\n\t }; \r\n\t this.insertMergedLines = function(position, lines) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = {\r\n\t row: start.row + lines.length - 1,\r\n\t column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\r\n\t };\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: lines\r\n\t });\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t var start = this.clippedPos(range.start.row, range.start.column);\r\n\t var end = this.clippedPos(range.end.row, range.end.column);\r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t });\r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeInLine = function(row, startColumn, endColumn) {\r\n\t var start = this.clippedPos(row, startColumn);\r\n\t var end = this.clippedPos(row, endColumn);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow) {\r\n\t firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\r\n\t lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\r\n\t var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\r\n\t var deleteLastNewLine = lastRow < this.getLength() - 1;\r\n\t var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\r\n\t var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\r\n\t var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\r\n\t var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \r\n\t var range = new Range(startRow, startCol, endRow, endCol);\r\n\t var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\r\n\t \r\n\t this.applyDelta({\r\n\t start: range.start,\r\n\t end: range.end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange(range)\r\n\t });\r\n\t return deletedLines;\r\n\t };\r\n\t this.removeNewLine = function(row) {\r\n\t if (row < this.getLength() - 1 && row >= 0) {\r\n\t this.applyDelta({\r\n\t start: this.pos(row, this.getLine(row).length),\r\n\t end: this.pos(row + 1, 0),\r\n\t action: \"remove\",\r\n\t lines: [\"\", \"\"]\r\n\t });\r\n\t }\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t if (!(range instanceof Range))\r\n\t range = Range.fromPoints(range.start, range.end);\r\n\t if (text.length === 0 && range.isEmpty())\r\n\t return range.start;\r\n\t if (text == this.getTextRange(range))\r\n\t return range.end;\r\n\r\n\t this.remove(range);\r\n\t var end;\r\n\t if (text) {\r\n\t end = this.insert(range.start, text);\r\n\t }\r\n\t else {\r\n\t end = range.start;\r\n\t }\r\n\t \r\n\t return end;\r\n\t };\r\n\t this.applyDeltas = function(deltas) {\r\n\t for (var i=0; i=0; i--) {\r\n\t this.revertDelta(deltas[i]);\r\n\t }\r\n\t };\r\n\t this.applyDelta = function(delta, doNotValidate) {\r\n\t var isInsert = delta.action == \"insert\";\r\n\t if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\r\n\t : !Range.comparePoints(delta.start, delta.end)) {\r\n\t return;\r\n\t }\r\n\t \r\n\t if (isInsert && delta.lines.length > 20000)\r\n\t this.$splitAndapplyLargeDelta(delta, 20000);\r\n\t applyDelta(this.$lines, delta, doNotValidate);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t \r\n\t this.$splitAndapplyLargeDelta = function(delta, MAX) {\r\n\t var lines = delta.lines;\r\n\t var l = lines.length;\r\n\t var row = delta.start.row; \r\n\t var column = delta.start.column;\r\n\t var from = 0, to = 0;\r\n\t do {\r\n\t from = to;\r\n\t to += MAX - 1;\r\n\t var chunk = lines.slice(from, to);\r\n\t if (to > l) {\r\n\t delta.lines = chunk;\r\n\t delta.start.row = row + from;\r\n\t delta.start.column = column;\r\n\t break;\r\n\t }\r\n\t chunk.push(\"\");\r\n\t this.applyDelta({\r\n\t start: this.pos(row + from, column),\r\n\t end: this.pos(row + to, column = 0),\r\n\t action: delta.action,\r\n\t lines: chunk\r\n\t }, true);\r\n\t } while(true);\r\n\t };\r\n\t this.revertDelta = function(delta) {\r\n\t this.applyDelta({\r\n\t start: this.clonePos(delta.start),\r\n\t end: this.clonePos(delta.end),\r\n\t action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\r\n\t lines: delta.lines.slice()\r\n\t });\r\n\t };\r\n\t this.indexToPosition = function(index, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t for (var i = startRow || 0, l = lines.length; i < l; i++) {\r\n\t index -= lines[i].length + newlineLength;\r\n\t if (index < 0)\r\n\t return {row: i, column: index + lines[i].length + newlineLength};\r\n\t }\r\n\t return {row: l-1, column: lines[l-1].length};\r\n\t };\r\n\t this.positionToIndex = function(pos, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t var index = 0;\r\n\t var row = Math.min(pos.row, lines.length);\r\n\t for (var i = startRow || 0; i < row; ++i)\r\n\t index += lines[i].length + newlineLength;\r\n\r\n\t return index + pos.column;\r\n\t };\r\n\r\n\t}).call(Document.prototype);\r\n\r\n\texports.Document = Document;\r\n\t});\r\n\r\n\tace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar BackgroundTokenizer = function(tokenizer, editor) {\r\n\t this.running = false;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\t this.currentLine = 0;\r\n\t this.tokenizer = tokenizer;\r\n\r\n\t var self = this;\r\n\r\n\t this.$worker = function() {\r\n\t if (!self.running) { return; }\r\n\r\n\t var workerStart = new Date();\r\n\t var currentLine = self.currentLine;\r\n\t var endLine = -1;\r\n\t var doc = self.doc;\r\n\r\n\t var startLine = currentLine;\r\n\t while (self.lines[currentLine])\r\n\t currentLine++;\r\n\t \r\n\t var len = doc.getLength();\r\n\t var processedLines = 0;\r\n\t self.running = false;\r\n\t while (currentLine < len) {\r\n\t self.$tokenizeRow(currentLine);\r\n\t endLine = currentLine;\r\n\t do {\r\n\t currentLine++;\r\n\t } while (self.lines[currentLine]);\r\n\t processedLines ++;\r\n\t if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \r\n\t self.running = setTimeout(self.$worker, 20);\r\n\t break;\r\n\t }\r\n\t }\r\n\t self.currentLine = currentLine;\r\n\t \r\n\t if (startLine <= endLine)\r\n\t self.fireUpdateEvent(startLine, endLine);\r\n\t };\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setTokenizer = function(tokenizer) {\r\n\t this.tokenizer = tokenizer;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.start(0);\r\n\t };\r\n\t this.setDocument = function(doc) {\r\n\t this.doc = doc;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.fireUpdateEvent = function(firstRow, lastRow) {\r\n\t var data = {\r\n\t first: firstRow,\r\n\t last: lastRow\r\n\t };\r\n\t this._signal(\"update\", {data: data});\r\n\t };\r\n\t this.start = function(startRow) {\r\n\t this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\r\n\t this.lines.splice(this.currentLine, this.lines.length);\r\n\t this.states.splice(this.currentLine, this.states.length);\r\n\r\n\t this.stop();\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t };\r\n\t \r\n\t this.scheduleStart = function() {\r\n\t if (!this.running)\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t }\r\n\r\n\t this.$updateOnChange = function(delta) {\r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t this.lines[startRow] = null;\r\n\t } else if (delta.action == \"remove\") {\r\n\t this.lines.splice(startRow, len + 1, null);\r\n\t this.states.splice(startRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(startRow, 1);\r\n\t this.lines.splice.apply(this.lines, args);\r\n\t this.states.splice.apply(this.states, args);\r\n\t }\r\n\r\n\t this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.stop = function() {\r\n\t if (this.running)\r\n\t clearTimeout(this.running);\r\n\t this.running = false;\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.lines[row] || this.$tokenizeRow(row);\r\n\t };\r\n\t this.getState = function(row) {\r\n\t if (this.currentLine == row)\r\n\t this.$tokenizeRow(row);\r\n\t return this.states[row] || \"start\";\r\n\t };\r\n\r\n\t this.$tokenizeRow = function(row) {\r\n\t var line = this.doc.getLine(row);\r\n\t var state = this.states[row - 1];\r\n\r\n\t var data = this.tokenizer.getLineTokens(line, state, row);\r\n\r\n\t if (this.states[row] + \"\" !== data.state + \"\") {\r\n\t this.states[row] = data.state;\r\n\t this.lines[row + 1] = null;\r\n\t if (this.currentLine > row + 1)\r\n\t this.currentLine = row + 1;\r\n\t } else if (this.currentLine == row) {\r\n\t this.currentLine = row + 1;\r\n\t }\r\n\r\n\t return this.lines[row] = data.tokens;\r\n\t };\r\n\r\n\t}).call(BackgroundTokenizer.prototype);\r\n\r\n\texports.BackgroundTokenizer = BackgroundTokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar SearchHighlight = function(regExp, clazz, type) {\r\n\t this.setRegexp(regExp);\r\n\t this.clazz = clazz;\r\n\t this.type = type || \"text\";\r\n\t};\r\n\r\n\t(function() {\r\n\t this.MAX_RANGES = 500;\r\n\t \r\n\t this.setRegexp = function(regExp) {\r\n\t if (this.regExp+\"\" == regExp+\"\")\r\n\t return;\r\n\t this.regExp = regExp;\r\n\t this.cache = [];\r\n\t };\r\n\r\n\t this.update = function(html, markerLayer, session, config) {\r\n\t if (!this.regExp)\r\n\t return;\r\n\t var start = config.firstRow, end = config.lastRow;\r\n\r\n\t for (var i = start; i <= end; i++) {\r\n\t var ranges = this.cache[i];\r\n\t if (ranges == null) {\r\n\t ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\r\n\t if (ranges.length > this.MAX_RANGES)\r\n\t ranges = ranges.slice(0, this.MAX_RANGES);\r\n\t ranges = ranges.map(function(match) {\r\n\t return new Range(i, match.offset, i, match.offset + match.length);\r\n\t });\r\n\t this.cache[i] = ranges.length ? ranges : \"\";\r\n\t }\r\n\r\n\t for (var j = ranges.length; j --; ) {\r\n\t markerLayer.drawSingleLineMarker(\r\n\t html, ranges[j].toScreenRange(session), this.clazz, config);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(SearchHighlight.prototype);\r\n\r\n\texports.SearchHighlight = SearchHighlight;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tfunction FoldLine(foldData, folds) {\r\n\t this.foldData = foldData;\r\n\t if (Array.isArray(folds)) {\r\n\t this.folds = folds;\r\n\t } else {\r\n\t folds = this.folds = [ folds ];\r\n\t }\r\n\r\n\t var last = folds[folds.length - 1];\r\n\t this.range = new Range(folds[0].start.row, folds[0].start.column,\r\n\t last.end.row, last.end.column);\r\n\t this.start = this.range.start;\r\n\t this.end = this.range.end;\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.setFoldLine(this);\r\n\t }, this);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.shiftRow = function(shift) {\r\n\t this.start.row += shift;\r\n\t this.end.row += shift;\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.start.row += shift;\r\n\t fold.end.row += shift;\r\n\t });\r\n\t };\r\n\r\n\t this.addFold = function(fold) {\r\n\t if (fold.sameRow) {\r\n\t if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\r\n\t throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\r\n\t }\r\n\t this.folds.push(fold);\r\n\t this.folds.sort(function(a, b) {\r\n\t return -a.range.compareEnd(b.start.row, b.start.column);\r\n\t });\r\n\t if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t }\r\n\t } else if (fold.start.row == this.end.row) {\r\n\t this.folds.push(fold);\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (fold.end.row == this.start.row) {\r\n\t this.folds.unshift(fold);\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t } else {\r\n\t throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\r\n\t }\r\n\t fold.foldLine = this;\r\n\t };\r\n\r\n\t this.containsRow = function(row) {\r\n\t return row >= this.start.row && row <= this.end.row;\r\n\t };\r\n\r\n\t this.walk = function(callback, endRow, endColumn) {\r\n\t var lastEnd = 0,\r\n\t folds = this.folds,\r\n\t fold,\r\n\t cmp, stop, isNewRow = true;\r\n\r\n\t if (endRow == null) {\r\n\t endRow = this.end.row;\r\n\t endColumn = this.end.column;\r\n\t }\r\n\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\r\n\t cmp = fold.range.compareStart(endRow, endColumn);\r\n\t if (cmp == -1) {\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t return;\r\n\t }\r\n\r\n\t stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\r\n\t stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\r\n\t if (stop || cmp === 0) {\r\n\t return;\r\n\t }\r\n\t isNewRow = !fold.sameRow;\r\n\t lastEnd = fold.end.column;\r\n\t }\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t };\r\n\r\n\t this.getNextFoldTo = function(row, column) {\r\n\t var fold, cmp;\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t fold = this.folds[i];\r\n\t cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"after\"\r\n\t };\r\n\t } else if (cmp === 0) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"inside\"\r\n\t };\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.addRemoveChars = function(row, column, len) {\r\n\t var ret = this.getNextFoldTo(row, column),\r\n\t fold, folds;\r\n\t if (ret) {\r\n\t fold = ret.fold;\r\n\t if (ret.kind == \"inside\"\r\n\t && fold.start.column != column\r\n\t && fold.start.row != row)\r\n\t {\r\n\t window.console && window.console.log(row, column, fold);\r\n\t } else if (fold.start.row == row) {\r\n\t folds = this.folds;\r\n\t var i = folds.indexOf(fold);\r\n\t if (i === 0) {\r\n\t this.start.column += len;\r\n\t }\r\n\t for (i; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\t fold.start.column += len;\r\n\t if (!fold.sameRow) {\r\n\t return;\r\n\t }\r\n\t fold.end.column += len;\r\n\t }\r\n\t this.end.column += len;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.split = function(row, column) {\r\n\t var pos = this.getNextFoldTo(row, column);\r\n\t \r\n\t if (!pos || pos.kind == \"inside\")\r\n\t return null;\r\n\t \r\n\t var fold = pos.fold;\r\n\t var folds = this.folds;\r\n\t var foldData = this.foldData;\r\n\t \r\n\t var i = folds.indexOf(fold);\r\n\t var foldBefore = folds[i - 1];\r\n\t this.end.row = foldBefore.end.row;\r\n\t this.end.column = foldBefore.end.column;\r\n\t folds = folds.splice(i, folds.length - i);\r\n\r\n\t var newFoldLine = new FoldLine(foldData, folds);\r\n\t foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\r\n\t return newFoldLine;\r\n\t };\r\n\r\n\t this.merge = function(foldLineNext) {\r\n\t var folds = foldLineNext.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t this.addFold(folds[i]);\r\n\t }\r\n\t var foldData = this.foldData;\r\n\t foldData.splice(foldData.indexOf(foldLineNext), 1);\r\n\t };\r\n\r\n\t this.toString = function() {\r\n\t var ret = [this.range.toString() + \": [\" ];\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t ret.push(\" \" + fold.toString());\r\n\t });\r\n\t ret.push(\"]\");\r\n\t return ret.join(\"\\n\");\r\n\t };\r\n\r\n\t this.idxToPosition = function(idx) {\r\n\t var lastFoldEndColumn = 0;\r\n\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t var fold = this.folds[i];\r\n\r\n\t idx -= fold.start.column - lastFoldEndColumn;\r\n\t if (idx < 0) {\r\n\t return {\r\n\t row: fold.start.row,\r\n\t column: fold.start.column + idx\r\n\t };\r\n\t }\r\n\r\n\t idx -= fold.placeholder.length;\r\n\t if (idx < 0) {\r\n\t return fold.start;\r\n\t }\r\n\r\n\t lastFoldEndColumn = fold.end.column;\r\n\t }\r\n\r\n\t return {\r\n\t row: this.end.row,\r\n\t column: this.end.column + idx\r\n\t };\r\n\t };\r\n\t}).call(FoldLine.prototype);\r\n\r\n\texports.FoldLine = FoldLine;\r\n\t});\r\n\r\n\tace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar comparePoints = Range.comparePoints;\r\n\r\n\tvar RangeList = function() {\r\n\t this.ranges = [];\r\n\t};\r\n\r\n\t(function() {\r\n\t this.comparePoints = comparePoints;\r\n\r\n\t this.pointIndex = function(pos, excludeEdges, startIndex) {\r\n\t var list = this.ranges;\r\n\r\n\t for (var i = startIndex || 0; i < list.length; i++) {\r\n\t var range = list[i];\r\n\t var cmpEnd = comparePoints(pos, range.end);\r\n\t if (cmpEnd > 0)\r\n\t continue;\r\n\t var cmpStart = comparePoints(pos, range.start);\r\n\t if (cmpEnd === 0)\r\n\t return excludeEdges && cmpStart !== 0 ? -i-2 : i;\r\n\t if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\r\n\t return i;\r\n\r\n\t return -i-1;\r\n\t }\r\n\t return -i - 1;\r\n\t };\r\n\r\n\t this.add = function(range) {\r\n\t var excludeEdges = !range.isEmpty();\r\n\t var startIndex = this.pointIndex(range.start, excludeEdges);\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\r\n\t var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\r\n\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\t else\r\n\t endIndex++;\r\n\t return this.ranges.splice(startIndex, endIndex - startIndex, range);\r\n\t };\r\n\r\n\t this.addList = function(list) {\r\n\t var removed = [];\r\n\t for (var i = list.length; i--; ) {\r\n\t removed.push.apply(removed, this.add(list[i]));\r\n\t }\r\n\t return removed;\r\n\t };\r\n\r\n\t this.substractPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\r\n\t if (i >= 0)\r\n\t return this.ranges.splice(i, 1);\r\n\t };\r\n\t this.merge = function() {\r\n\t var removed = [];\r\n\t var list = this.ranges;\r\n\t \r\n\t list = list.sort(function(a, b) {\r\n\t return comparePoints(a.start, b.start);\r\n\t });\r\n\t \r\n\t var next = list[0], range;\r\n\t for (var i = 1; i < list.length; i++) {\r\n\t range = next;\r\n\t next = list[i];\r\n\t var cmp = comparePoints(range.end, next.start);\r\n\t if (cmp < 0)\r\n\t continue;\r\n\r\n\t if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\r\n\t continue;\r\n\r\n\t if (comparePoints(range.end, next.end) < 0) {\r\n\t range.end.row = next.end.row;\r\n\t range.end.column = next.end.column;\r\n\t }\r\n\r\n\t list.splice(i, 1);\r\n\t removed.push(next);\r\n\t next = range;\r\n\t i--;\r\n\t }\r\n\t \r\n\t this.ranges = list;\r\n\r\n\t return removed;\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.pointIndex({row: row, column: column}) >= 0;\r\n\t };\r\n\r\n\t this.containsPoint = function(pos) {\r\n\t return this.pointIndex(pos) >= 0;\r\n\t };\r\n\r\n\t this.rangeAtPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\t if (i >= 0)\r\n\t return this.ranges[i];\r\n\t };\r\n\r\n\r\n\t this.clipRows = function(startRow, endRow) {\r\n\t var list = this.ranges;\r\n\t if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\r\n\t return [];\r\n\r\n\t var startIndex = this.pointIndex({row: startRow, column: 0});\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\t var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\r\n\t var clipped = [];\r\n\t for (var i = startIndex; i < endIndex; i++) {\r\n\t clipped.push(list[i]);\r\n\t }\r\n\t return clipped;\r\n\t };\r\n\r\n\t this.removeAll = function() {\r\n\t return this.ranges.splice(0, this.ranges.length);\r\n\t };\r\n\r\n\t this.attach = function(session) {\r\n\t if (this.session)\r\n\t this.detach();\r\n\r\n\t this.session = session;\r\n\t this.onChange = this.$onChange.bind(this);\r\n\r\n\t this.session.on('change', this.onChange);\r\n\t };\r\n\r\n\t this.detach = function() {\r\n\t if (!this.session)\r\n\t return;\r\n\t this.session.removeListener('change', this.onChange);\r\n\t this.session = null;\r\n\t };\r\n\r\n\t this.$onChange = function(delta) {\r\n\t if (delta.action == \"insert\"){\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t } else {\r\n\t var end = delta.start;\r\n\t var start = delta.end;\r\n\t }\r\n\t var startRow = start.row;\r\n\t var endRow = end.row;\r\n\t var lineDif = endRow - startRow;\r\n\r\n\t var colDiff = -start.column + end.column;\r\n\t var ranges = this.ranges;\r\n\r\n\t for (var i = 0, n = ranges.length; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t if (r.end.row < startRow)\r\n\t continue;\r\n\t if (r.start.row > startRow)\r\n\t break;\r\n\r\n\t if (r.start.row == startRow && r.start.column >= start.column ) {\r\n\t if (r.start.column == start.column && this.$insertRight) {\r\n\t } else {\r\n\t r.start.column += colDiff;\r\n\t r.start.row += lineDif;\r\n\t }\r\n\t }\r\n\t if (r.end.row == startRow && r.end.column >= start.column) {\r\n\t if (r.end.column == start.column && this.$insertRight) {\r\n\t continue;\r\n\t }\r\n\t if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \r\n\t if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\r\n\t r.end.column -= colDiff;\r\n\t }\r\n\t r.end.column += colDiff;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\r\n\t if (lineDif != 0 && i < n) {\r\n\t for (; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t r.start.row += lineDif;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(RangeList.prototype);\r\n\r\n\texports.RangeList = RangeList;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar RangeList = acequire(\"../range_list\").RangeList;\r\n\tvar oop = acequire(\"../lib/oop\")\r\n\tvar Fold = exports.Fold = function(range, placeholder) {\r\n\t this.foldLine = null;\r\n\t this.placeholder = placeholder;\r\n\t this.range = range;\r\n\t this.start = range.start;\r\n\t this.end = range.end;\r\n\r\n\t this.sameRow = range.start.row == range.end.row;\r\n\t this.subFolds = this.ranges = [];\r\n\t};\r\n\r\n\toop.inherits(Fold, RangeList);\r\n\r\n\t(function() {\r\n\r\n\t this.toString = function() {\r\n\t return '\"' + this.placeholder + '\" ' + this.range.toString();\r\n\t };\r\n\r\n\t this.setFoldLine = function(foldLine) {\r\n\t this.foldLine = foldLine;\r\n\t this.subFolds.forEach(function(fold) {\r\n\t fold.setFoldLine(foldLine);\r\n\t });\r\n\t };\r\n\r\n\t this.clone = function() {\r\n\t var range = this.range.clone();\r\n\t var fold = new Fold(range, this.placeholder);\r\n\t this.subFolds.forEach(function(subFold) {\r\n\t fold.subFolds.push(subFold.clone());\r\n\t });\r\n\t fold.collapseChildren = this.collapseChildren;\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addSubFold = function(fold) {\r\n\t if (this.range.isEqual(fold))\r\n\t return;\r\n\r\n\t if (!this.range.containsRange(fold))\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\t consumeRange(fold, this.start);\r\n\r\n\t var row = fold.start.row, column = fold.start.column;\r\n\t for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\r\n\t cmp = this.subFolds[i].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterStart = this.subFolds[i];\r\n\r\n\t if (cmp == 0)\r\n\t return afterStart.addSubFold(fold);\r\n\t var row = fold.range.end.row, column = fold.range.end.column;\r\n\t for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\r\n\t cmp = this.subFolds[j].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterEnd = this.subFolds[j];\r\n\r\n\t if (cmp == 0)\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\r\n\t var consumedFolds = this.subFolds.splice(i, j - i, fold);\r\n\t fold.setFoldLine(this.foldLine);\r\n\r\n\t return fold;\r\n\t };\r\n\t \r\n\t this.restoreRange = function(range) {\r\n\t return restoreRange(range, this.start);\r\n\t };\r\n\r\n\t}).call(Fold.prototype);\r\n\r\n\tfunction consumePoint(point, anchor) {\r\n\t point.row -= anchor.row;\r\n\t if (point.row == 0)\r\n\t point.column -= anchor.column;\r\n\t}\r\n\tfunction consumeRange(range, anchor) {\r\n\t consumePoint(range.start, anchor);\r\n\t consumePoint(range.end, anchor);\r\n\t}\r\n\tfunction restorePoint(point, anchor) {\r\n\t if (point.row == 0)\r\n\t point.column += anchor.column;\r\n\t point.row += anchor.row;\r\n\t}\r\n\tfunction restoreRange(range, anchor) {\r\n\t restorePoint(range.start, anchor);\r\n\t restorePoint(range.end, anchor);\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar FoldLine = acequire(\"./fold_line\").FoldLine;\r\n\tvar Fold = acequire(\"./fold\").Fold;\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\r\n\tfunction Folding() {\r\n\t this.getFoldAt = function(row, column, side) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var folds = foldLine.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t var fold = folds[i];\r\n\t if (fold.range.contains(row, column)) {\r\n\t if (side == 1 && fold.range.isEnd(row, column)) {\r\n\t continue;\r\n\t } else if (side == -1 && fold.range.isStart(row, column)) {\r\n\t continue;\r\n\t }\r\n\t return fold;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.getFoldsInRange = function(range) {\r\n\t var start = range.start;\r\n\t var end = range.end;\r\n\t var foldLines = this.$foldData;\r\n\t var foundFolds = [];\r\n\r\n\t start.column += 1;\r\n\t end.column -= 1;\r\n\r\n\t for (var i = 0; i < foldLines.length; i++) {\r\n\t var cmp = foldLines[i].range.compareRange(range);\r\n\t if (cmp == 2) {\r\n\t continue;\r\n\t }\r\n\t else if (cmp == -2) {\r\n\t break;\r\n\t }\r\n\r\n\t var folds = foldLines[i].folds;\r\n\t for (var j = 0; j < folds.length; j++) {\r\n\t var fold = folds[j];\r\n\t cmp = fold.range.compareRange(range);\r\n\t if (cmp == -2) {\r\n\t break;\r\n\t } else if (cmp == 2) {\r\n\t continue;\r\n\t } else\r\n\t if (cmp == 42) {\r\n\t break;\r\n\t }\r\n\t foundFolds.push(fold);\r\n\t }\r\n\t }\r\n\t start.column -= 1;\r\n\t end.column += 1;\r\n\r\n\t return foundFolds;\r\n\t };\r\n\r\n\t this.getFoldsInRangeList = function(ranges) {\r\n\t if (Array.isArray(ranges)) {\r\n\t var folds = [];\r\n\t ranges.forEach(function(range) {\r\n\t folds = folds.concat(this.getFoldsInRange(range));\r\n\t }, this);\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(ranges);\r\n\t }\r\n\t return folds;\r\n\t };\r\n\t this.getAllFolds = function() {\r\n\t var folds = [];\r\n\t var foldLines = this.$foldData;\r\n\t \r\n\t for (var i = 0; i < foldLines.length; i++)\r\n\t for (var j = 0; j < foldLines[i].folds.length; j++)\r\n\t folds.push(foldLines[i].folds[j]);\r\n\r\n\t return folds;\r\n\t };\r\n\t this.getFoldStringAt = function(row, column, trim, foldLine) {\r\n\t foldLine = foldLine || this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var lastFold = {\r\n\t end: { column: 0 }\r\n\t };\r\n\t var str, fold;\r\n\t for (var i = 0; i < foldLine.folds.length; i++) {\r\n\t fold = foldLine.folds[i];\r\n\t var cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t str = this\r\n\t .getLine(fold.start.row)\r\n\t .substring(lastFold.end.column, fold.start.column);\r\n\t break;\r\n\t }\r\n\t else if (cmp === 0) {\r\n\t return null;\r\n\t }\r\n\t lastFold = fold;\r\n\t }\r\n\t if (!str)\r\n\t str = this.getLine(fold.start.row).substring(lastFold.end.column);\r\n\r\n\t if (trim == -1)\r\n\t return str.substring(0, column - lastFold.end.column);\r\n\t else if (trim == 1)\r\n\t return str.substring(column - lastFold.end.column);\r\n\t else\r\n\t return str;\r\n\t };\r\n\r\n\t this.getFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t } else if (foldLine.end.row > docRow) {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.getNextFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.getFoldedRowCount = function(first, last) {\r\n\t var foldData = this.$foldData, rowCount = last-first+1;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i],\r\n\t end = foldLine.end.row,\r\n\t start = foldLine.start.row;\r\n\t if (end >= last) {\r\n\t if (start < last) {\r\n\t if (start >= first)\r\n\t rowCount -= last-start;\r\n\t else\r\n\t rowCount = 0; // in one fold\r\n\t }\r\n\t break;\r\n\t } else if (end >= first){\r\n\t if (start >= first) // fold inside range\r\n\t rowCount -= end-start;\r\n\t else\r\n\t rowCount -= end-first+1;\r\n\t }\r\n\t }\r\n\t return rowCount;\r\n\t };\r\n\r\n\t this.$addFoldLine = function(foldLine) {\r\n\t this.$foldData.push(foldLine);\r\n\t this.$foldData.sort(function(a, b) {\r\n\t return a.start.row - b.start.row;\r\n\t });\r\n\t return foldLine;\r\n\t };\r\n\t this.addFold = function(placeholder, range) {\r\n\t var foldData = this.$foldData;\r\n\t var added = false;\r\n\t var fold;\r\n\t \r\n\t if (placeholder instanceof Fold)\r\n\t fold = placeholder;\r\n\t else {\r\n\t fold = new Fold(range, placeholder);\r\n\t fold.collapseChildren = range.collapseChildren;\r\n\t }\r\n\t this.$clipRangeToDocument(fold.range);\r\n\r\n\t var startRow = fold.start.row;\r\n\t var startColumn = fold.start.column;\r\n\t var endRow = fold.end.row;\r\n\t var endColumn = fold.end.column;\r\n\t if (!(startRow < endRow || \r\n\t startRow == endRow && startColumn <= endColumn - 2))\r\n\t throw new Error(\"The range has to be at least 2 characters width\");\r\n\r\n\t var startFold = this.getFoldAt(startRow, startColumn, 1);\r\n\t var endFold = this.getFoldAt(endRow, endColumn, -1);\r\n\t if (startFold && endFold == startFold)\r\n\t return startFold.addSubFold(fold);\r\n\r\n\t if (startFold && !startFold.range.isStart(startRow, startColumn))\r\n\t this.removeFold(startFold);\r\n\t \r\n\t if (endFold && !endFold.range.isEnd(endRow, endColumn))\r\n\t this.removeFold(endFold);\r\n\t var folds = this.getFoldsInRange(fold.range);\r\n\t if (folds.length > 0) {\r\n\t this.removeFolds(folds);\r\n\t folds.forEach(function(subFold) {\r\n\t fold.addSubFold(subFold);\r\n\t });\r\n\t }\r\n\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (endRow == foldLine.start.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t break;\r\n\t } else if (startRow == foldLine.end.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t if (!fold.sameRow) {\r\n\t var foldLineNext = foldData[i + 1];\r\n\t if (foldLineNext && foldLineNext.start.row == endRow) {\r\n\t foldLine.merge(foldLineNext);\r\n\t break;\r\n\t }\r\n\t }\r\n\t break;\r\n\t } else if (endRow <= foldLine.start.row) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (!added)\r\n\t foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\r\n\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(foldLine.start.row, foldLine.start.row);\r\n\t else\r\n\t this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"add\" });\r\n\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.addFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeFold = function(fold) {\r\n\t var foldLine = fold.foldLine;\r\n\t var startRow = foldLine.start.row;\r\n\t var endRow = foldLine.end.row;\r\n\r\n\t var foldLines = this.$foldData;\r\n\t var folds = foldLine.folds;\r\n\t if (folds.length == 1) {\r\n\t foldLines.splice(foldLines.indexOf(foldLine), 1);\r\n\t } else\r\n\t if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\r\n\t folds.pop();\r\n\t foldLine.end.row = folds[folds.length - 1].end.row;\r\n\t foldLine.end.column = folds[folds.length - 1].end.column;\r\n\t } else\r\n\t if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\r\n\t folds.shift();\r\n\t foldLine.start.row = folds[0].start.row;\r\n\t foldLine.start.column = folds[0].start.column;\r\n\t } else\r\n\t if (fold.sameRow) {\r\n\t folds.splice(folds.indexOf(fold), 1);\r\n\t } else\r\n\t {\r\n\t var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\r\n\t folds = newFoldLine.folds;\r\n\t folds.shift();\r\n\t newFoldLine.start.row = folds[0].start.row;\r\n\t newFoldLine.start.column = folds[0].start.column;\r\n\t }\r\n\r\n\t if (!this.$updating) {\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(startRow, endRow);\r\n\t else\r\n\t this.$updateRowLengthCache(startRow, endRow);\r\n\t }\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"remove\" });\r\n\t };\r\n\r\n\t this.removeFolds = function(folds) {\r\n\t var cloneFolds = [];\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t cloneFolds.push(folds[i]);\r\n\t }\r\n\r\n\t cloneFolds.forEach(function(fold) {\r\n\t this.removeFold(fold);\r\n\t }, this);\r\n\t this.$modified = true;\r\n\t };\r\n\r\n\t this.expandFold = function(fold) {\r\n\t this.removeFold(fold);\r\n\t fold.subFolds.forEach(function(subFold) {\r\n\t fold.restoreRange(subFold);\r\n\t this.addFold(subFold);\r\n\t }, this);\r\n\t if (fold.collapseChildren > 0) {\r\n\t this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\r\n\t }\r\n\t fold.subFolds = [];\r\n\t };\r\n\r\n\t this.expandFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.expandFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.unfold = function(location, expandInner) {\r\n\t var range, folds;\r\n\t if (location == null) {\r\n\t range = new Range(0, 0, this.getLength(), 0);\r\n\t expandInner = true;\r\n\t } else if (typeof location == \"number\")\r\n\t range = new Range(location, 0, location, this.getLine(location).length);\r\n\t else if (\"row\" in location)\r\n\t range = Range.fromPoints(location, location);\r\n\t else\r\n\t range = location;\r\n\t \r\n\t folds = this.getFoldsInRangeList(range);\r\n\t if (expandInner) {\r\n\t this.removeFolds(folds);\r\n\t } else {\r\n\t var subFolds = folds;\r\n\t while (subFolds.length) {\r\n\t this.expandFolds(subFolds);\r\n\t subFolds = this.getFoldsInRangeList(range);\r\n\t }\r\n\t }\r\n\t if (folds.length)\r\n\t return folds;\r\n\t };\r\n\t this.isRowFolded = function(docRow, startFoldRow) {\r\n\t return !!this.getFoldLine(docRow, startFoldRow);\r\n\t };\r\n\r\n\t this.getRowFoldEnd = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.end.row : docRow;\r\n\t };\r\n\r\n\t this.getRowFoldStart = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.start.row : docRow;\r\n\t };\r\n\r\n\t this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\r\n\t if (startRow == null)\r\n\t startRow = foldLine.start.row;\r\n\t if (startColumn == null)\r\n\t startColumn = 0;\r\n\t if (endRow == null)\r\n\t endRow = foldLine.end.row;\r\n\t if (endColumn == null)\r\n\t endColumn = this.getLine(endRow).length;\r\n\t var doc = this.doc;\r\n\t var textLine = \"\";\r\n\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t if (row < startRow)\r\n\t return;\r\n\t if (row == startRow) {\r\n\t if (column < startColumn)\r\n\t return;\r\n\t lastColumn = Math.max(startColumn, lastColumn);\r\n\t }\r\n\r\n\t if (placeholder != null) {\r\n\t textLine += placeholder;\r\n\t } else {\r\n\t textLine += doc.getLine(row).substring(lastColumn, column);\r\n\t }\r\n\t }, endRow, endColumn);\r\n\t return textLine;\r\n\t };\r\n\r\n\t this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\r\n\t if (!foldLine) {\r\n\t var line;\r\n\t line = this.doc.getLine(row);\r\n\t return line.substring(startColumn || 0, endColumn || line.length);\r\n\t } else {\r\n\t return this.getFoldDisplayLine(\r\n\t foldLine, row, endColumn, startRow, startColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.$cloneFoldData = function() {\r\n\t var fd = [];\r\n\t fd = this.$foldData.map(function(foldLine) {\r\n\t var folds = foldLine.folds.map(function(fold) {\r\n\t return fold.clone();\r\n\t });\r\n\t return new FoldLine(fd, folds);\r\n\t });\r\n\r\n\t return fd;\r\n\t };\r\n\r\n\t this.toggleFold = function(tryToUnfold) {\r\n\t var selection = this.selection;\r\n\t var range = selection.getRange();\r\n\t var fold;\r\n\t var bracketPos;\r\n\r\n\t if (range.isEmpty()) {\r\n\t var cursor = range.start;\r\n\t fold = this.getFoldAt(cursor.row, cursor.column);\r\n\r\n\t if (fold) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t } else if (bracketPos = this.findMatchingBracket(cursor)) {\r\n\t if (range.comparePoint(bracketPos) == 1) {\r\n\t range.end = bracketPos;\r\n\t } else {\r\n\t range.start = bracketPos;\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\r\n\t if (range.comparePoint(bracketPos) == 1)\r\n\t range.end = bracketPos;\r\n\t else\r\n\t range.start = bracketPos;\r\n\r\n\t range.start.column++;\r\n\t } else {\r\n\t range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\r\n\t }\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(range);\r\n\t if (tryToUnfold && folds.length) {\r\n\t this.expandFolds(folds);\r\n\t return;\r\n\t } else if (folds.length == 1 ) {\r\n\t fold = folds[0];\r\n\t }\r\n\t }\r\n\r\n\t if (!fold)\r\n\t fold = this.getFoldAt(range.start.row, range.start.column);\r\n\r\n\t if (fold && fold.range.toString() == range.toString()) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var placeholder = \"...\";\r\n\t if (!range.isMultiLine()) {\r\n\t placeholder = this.getTextRange(range);\r\n\t if (placeholder.length < 4)\r\n\t return;\r\n\t placeholder = placeholder.trim().substring(0, 2) + \"..\";\r\n\t }\r\n\r\n\t this.addFold(placeholder, range);\r\n\t };\r\n\r\n\t this.getCommentFoldRange = function(row, column, dir) {\r\n\t var iterator = new TokenIterator(this, row, column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (token && /^comment|string/.test(token.type)) {\r\n\t var range = new Range();\r\n\t var re = new RegExp(token.type.replace(/\\..*/, \"\\\\.\"));\r\n\t if (dir != 1) {\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && re.test(token.type));\r\n\t iterator.stepForward();\r\n\t }\r\n\t \r\n\t range.start.row = iterator.getCurrentTokenRow();\r\n\t range.start.column = iterator.getCurrentTokenColumn() + 2;\r\n\r\n\t iterator = new TokenIterator(this, row, column);\r\n\t \r\n\t if (dir != -1) {\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && re.test(token.type));\r\n\t token = iterator.stepBackward();\r\n\t } else\r\n\t token = iterator.getCurrentToken();\r\n\r\n\t range.end.row = iterator.getCurrentTokenRow();\r\n\t range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\r\n\t return range;\r\n\t }\r\n\t };\r\n\r\n\t this.foldAll = function(startRow, endRow, depth) {\r\n\t if (depth == undefined)\r\n\t depth = 100000; // JSON.stringify doesn't hanle Infinity\r\n\t var foldWidgets = this.foldWidgets;\r\n\t if (!foldWidgets)\r\n\t return; // mode doesn't support folding\r\n\t endRow = endRow || this.getLength();\r\n\t startRow = startRow || 0;\r\n\t for (var row = startRow; row < endRow; row++) {\r\n\t if (foldWidgets[row] == null)\r\n\t foldWidgets[row] = this.getFoldWidget(row);\r\n\t if (foldWidgets[row] != \"start\")\r\n\t continue;\r\n\r\n\t var range = this.getFoldWidgetRange(row);\r\n\t if (range && range.isMultiLine()\r\n\t && range.end.row <= endRow\r\n\t && range.start.row >= startRow\r\n\t ) {\r\n\t row = range.end.row;\r\n\t try {\r\n\t var fold = this.addFold(\"...\", range);\r\n\t if (fold)\r\n\t fold.collapseChildren = depth;\r\n\t } catch(e) {}\r\n\t }\r\n\t }\r\n\t };\r\n\t this.$foldStyles = {\r\n\t \"manual\": 1,\r\n\t \"markbegin\": 1,\r\n\t \"markbeginend\": 1\r\n\t };\r\n\t this.$foldStyle = \"markbegin\";\r\n\t this.setFoldStyle = function(style) {\r\n\t if (!this.$foldStyles[style])\r\n\t throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\r\n\t \r\n\t if (this.$foldStyle == style)\r\n\t return;\r\n\r\n\t this.$foldStyle = style;\r\n\t \r\n\t if (style == \"manual\")\r\n\t this.unfold();\r\n\t var mode = this.$foldMode;\r\n\t this.$setFolding(null);\r\n\t this.$setFolding(mode);\r\n\t };\r\n\r\n\t this.$setFolding = function(foldMode) {\r\n\t if (this.$foldMode == foldMode)\r\n\t return;\r\n\t \r\n\t this.$foldMode = foldMode;\r\n\t \r\n\t this.off('change', this.$updateFoldWidgets);\r\n\t this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t this._signal(\"changeAnnotation\");\r\n\t \r\n\t if (!foldMode || this.$foldStyle == \"manual\") {\r\n\t this.foldWidgets = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t this.foldWidgets = [];\r\n\t this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\r\n\t this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\r\n\t \r\n\t this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\r\n\t this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\r\n\t this.on('change', this.$updateFoldWidgets);\r\n\t this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t };\r\n\r\n\t this.getParentFoldRangeData = function (row, ignoreCurrent) {\r\n\t var fw = this.foldWidgets;\r\n\t if (!fw || (ignoreCurrent && fw[row]))\r\n\t return {};\r\n\r\n\t var i = row - 1, firstRange;\r\n\t while (i >= 0) {\r\n\t var c = fw[i];\r\n\t if (c == null)\r\n\t c = fw[i] = this.getFoldWidget(i);\r\n\r\n\t if (c == \"start\") {\r\n\t var range = this.getFoldWidgetRange(i);\r\n\t if (!firstRange)\r\n\t firstRange = range;\r\n\t if (range && range.end.row >= row)\r\n\t break;\r\n\t }\r\n\t i--;\r\n\t }\r\n\r\n\t return {\r\n\t range: i !== -1 && range,\r\n\t firstRange: firstRange\r\n\t };\r\n\t };\r\n\r\n\t this.onFoldWidgetClick = function(row, e) {\r\n\t e = e.domEvent;\r\n\t var options = {\r\n\t children: e.shiftKey,\r\n\t all: e.ctrlKey || e.metaKey,\r\n\t siblings: e.altKey\r\n\t };\r\n\t \r\n\t var range = this.$toggleFoldWidget(row, options);\r\n\t if (!range) {\r\n\t var el = (e.target || e.srcElement);\r\n\t if (el && /ace_fold-widget/.test(el.className))\r\n\t el.className += \" ace_invalid\";\r\n\t }\r\n\t };\r\n\t \r\n\t this.$toggleFoldWidget = function(row, options) {\r\n\t if (!this.getFoldWidget)\r\n\t return;\r\n\t var type = this.getFoldWidget(row);\r\n\t var line = this.getLine(row);\r\n\r\n\t var dir = type === \"end\" ? -1 : 1;\r\n\t var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\r\n\r\n\t if (fold) {\r\n\t if (options.children || options.all)\r\n\t this.removeFold(fold);\r\n\t else\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var range = this.getFoldWidgetRange(row, true);\r\n\t if (range && !range.isMultiLine()) {\r\n\t fold = this.getFoldAt(range.start.row, range.start.column, 1);\r\n\t if (fold && range.isEqual(fold.range)) {\r\n\t this.removeFold(fold);\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (options.siblings) {\r\n\t var data = this.getParentFoldRangeData(row);\r\n\t if (data.range) {\r\n\t var startRow = data.range.start.row + 1;\r\n\t var endRow = data.range.end.row;\r\n\t }\r\n\t this.foldAll(startRow, endRow, options.all ? 10000 : 0);\r\n\t } else if (options.children) {\r\n\t endRow = range ? range.end.row : this.getLength();\r\n\t this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\r\n\t } else if (range) {\r\n\t if (options.all) \r\n\t range.collapseChildren = 10000;\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\t \r\n\t \r\n\t \r\n\t this.toggleFoldWidget = function(toggleParent) {\r\n\t var row = this.selection.getCursor().row;\r\n\t row = this.getRowFoldStart(row);\r\n\t var range = this.$toggleFoldWidget(row, {});\r\n\t \r\n\t if (range)\r\n\t return;\r\n\t var data = this.getParentFoldRangeData(row, true);\r\n\t range = data.range || data.firstRange;\r\n\t \r\n\t if (range) {\r\n\t row = range.start.row;\r\n\t var fold = this.getFoldAt(row, this.getLine(row).length, 1);\r\n\r\n\t if (fold) {\r\n\t this.removeFold(fold);\r\n\t } else {\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.updateFoldWidgets = function(delta) {\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\r\n\t if (len === 0) {\r\n\t this.foldWidgets[firstRow] = null;\r\n\t } else if (delta.action == 'remove') {\r\n\t this.foldWidgets.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.foldWidgets.splice.apply(this.foldWidgets, args);\r\n\t }\r\n\t };\r\n\t this.tokenizerUpdateFoldWidgets = function(e) {\r\n\t var rows = e.data;\r\n\t if (rows.first != rows.last) {\r\n\t if (this.foldWidgets.length > rows.first)\r\n\t this.foldWidgets.splice(rows.first, this.foldWidgets.length);\r\n\t }\r\n\t };\r\n\t}\r\n\r\n\texports.Folding = Folding;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\r\n\tfunction BracketMatch() {\r\n\r\n\t this.findMatchingBracket = function(position, chr) {\r\n\t if (position.column == 0) return null;\r\n\r\n\t var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\r\n\t if (charBeforeCursor == \"\") return null;\r\n\r\n\t var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1])\r\n\t return this.$findClosingBracket(match[1], position);\r\n\t else\r\n\t return this.$findOpeningBracket(match[2], position);\r\n\t };\r\n\t \r\n\t this.getBracketRange = function(pos) {\r\n\t var line = this.getLine(pos.row);\r\n\t var before = true, range;\r\n\r\n\t var chr = line.charAt(pos.column-1);\r\n\t var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match) {\r\n\t chr = line.charAt(pos.column);\r\n\t pos = {row: pos.row, column: pos.column + 1};\r\n\t match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t before = false;\r\n\t }\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1]) {\r\n\t var bracketPos = this.$findClosingBracket(match[1], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(pos, bracketPos);\r\n\t if (!before) {\r\n\t range.end.column++;\r\n\t range.start.column--;\r\n\t }\r\n\t range.cursor = range.end;\r\n\t } else {\r\n\t var bracketPos = this.$findOpeningBracket(match[2], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(bracketPos, pos);\r\n\t if (!before) {\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t range.cursor = range.start;\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\r\n\t this.$brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \")\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"]\",\r\n\t \"{\": \"}\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\r\n\t this.$findOpeningBracket = function(bracket, position, typeRe) {\r\n\t var openBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t \r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\r\n\t .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\r\n\t var value = token.value;\r\n\t \r\n\t while (true) {\r\n\t \r\n\t while (valueIndex >= 0) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == openBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex -= 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\t \r\n\t value = token.value;\r\n\t valueIndex = value.length - 1;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\r\n\t this.$findClosingBracket = function(bracket, position, typeRe) {\r\n\t var closingBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\r\n\t .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn();\r\n\r\n\t while (true) {\r\n\r\n\t var value = token.value;\r\n\t var valueLength = value.length;\r\n\t while (valueIndex < valueLength) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == closingBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex += 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\r\n\t valueIndex = 0;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\t}\r\n\texports.BracketMatch = BracketMatch;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar TextMode = acequire(\"./mode/text\").Mode;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Document = acequire(\"./document\").Document;\r\n\tvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\r\n\tvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\r\n\r\n\tvar EditSession = function(text, mode) {\r\n\t this.$breakpoints = [];\r\n\t this.$decorations = [];\r\n\t this.$frontMarkers = {};\r\n\t this.$backMarkers = {};\r\n\t this.$markerId = 1;\r\n\t this.$undoSelect = true;\r\n\r\n\t this.$foldData = [];\r\n\t this.$foldData.toString = function() {\r\n\t return this.join(\"\\n\");\r\n\t };\r\n\t this.on(\"changeFold\", this.onChangeFold.bind(this));\r\n\t this.$onChange = this.onChange.bind(this);\r\n\r\n\t if (typeof text != \"object\" || !text.getLine)\r\n\t text = new Document(text);\r\n\r\n\t this.setDocument(text);\r\n\t this.selection = new Selection(this);\r\n\r\n\t config.resetOptions(this);\r\n\t this.setMode(mode);\r\n\t config._signal(\"session\", this);\r\n\t};\r\n\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setDocument = function(doc) {\r\n\t if (this.doc)\r\n\t this.doc.removeListener(\"change\", this.$onChange);\r\n\r\n\t this.doc = doc;\r\n\t doc.on(\"change\", this.$onChange);\r\n\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.resetCaches();\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.doc;\r\n\t };\r\n\t this.$resetRowCache = function(docRow) {\r\n\t if (!docRow) {\r\n\t this.$docRowCache = [];\r\n\t this.$screenRowCache = [];\r\n\t return;\r\n\t }\r\n\t var l = this.$docRowCache.length;\r\n\t var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\r\n\t if (l > i) {\r\n\t this.$docRowCache.splice(i, l);\r\n\t this.$screenRowCache.splice(i, l);\r\n\t }\r\n\t };\r\n\r\n\t this.$getRowCacheIndex = function(cacheArray, val) {\r\n\t var low = 0;\r\n\t var hi = cacheArray.length - 1;\r\n\r\n\t while (low <= hi) {\r\n\t var mid = (low + hi) >> 1;\r\n\t var c = cacheArray[mid];\r\n\r\n\t if (val > c)\r\n\t low = mid + 1;\r\n\t else if (val < c)\r\n\t hi = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\r\n\t return low -1;\r\n\t };\r\n\r\n\t this.resetCaches = function() {\r\n\t this.$modified = true;\r\n\t this.$wrapData = [];\r\n\t this.$rowLengthCache = [];\r\n\t this.$resetRowCache(0);\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.start(0);\r\n\t };\r\n\r\n\t this.onChangeFold = function(e) {\r\n\t var fold = e.data;\r\n\t this.$resetRowCache(fold.start.row);\r\n\t };\r\n\r\n\t this.onChange = function(delta) {\r\n\t this.$modified = true;\r\n\r\n\t this.$resetRowCache(delta.start.row);\r\n\r\n\t var removedFolds = this.$updateInternalDataOnChange(delta);\r\n\t if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\r\n\t this.$deltasDoc.push(delta);\r\n\t if (removedFolds && removedFolds.length != 0) {\r\n\t this.$deltasFold.push({\r\n\t action: \"removeFolds\",\r\n\t folds: removedFolds\r\n\t });\r\n\t }\r\n\r\n\t this.$informUndoManager.schedule();\r\n\t }\r\n\r\n\t this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t this.setValue = function(text) {\r\n\t this.doc.setValue(text);\r\n\t this.selection.moveTo(0, 0);\r\n\r\n\t this.$resetRowCache(0);\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\t this.setUndoManager(this.$undoManager);\r\n\t this.getUndoManager().reset();\r\n\t };\r\n\t this.getValue =\r\n\t this.toString = function() {\r\n\t return this.doc.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.getState = function(row) {\r\n\t return this.bgTokenizer.getState(row);\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.bgTokenizer.getTokens(row);\r\n\t };\r\n\t this.getTokenAt = function(row, column) {\r\n\t var tokens = this.bgTokenizer.getTokens(row);\r\n\t var token, c = 0;\r\n\t if (column == null) {\r\n\t i = tokens.length - 1;\r\n\t c = this.getLine(row).length;\r\n\t } else {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t c += tokens[i].value.length;\r\n\t if (c >= column)\r\n\t break;\r\n\t }\r\n\t }\r\n\t token = tokens[i];\r\n\t if (!token)\r\n\t return null;\r\n\t token.index = i;\r\n\t token.start = c - token.value.length;\r\n\t return token;\r\n\t };\r\n\t this.setUndoManager = function(undoManager) {\r\n\t this.$undoManager = undoManager;\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\r\n\t if (this.$informUndoManager)\r\n\t this.$informUndoManager.cancel();\r\n\r\n\t if (undoManager) {\r\n\t var self = this;\r\n\r\n\t this.$syncInformUndoManager = function() {\r\n\t self.$informUndoManager.cancel();\r\n\r\n\t if (self.$deltasFold.length) {\r\n\t self.$deltas.push({\r\n\t group: \"fold\",\r\n\t deltas: self.$deltasFold\r\n\t });\r\n\t self.$deltasFold = [];\r\n\t }\r\n\r\n\t if (self.$deltasDoc.length) {\r\n\t self.$deltas.push({\r\n\t group: \"doc\",\r\n\t deltas: self.$deltasDoc\r\n\t });\r\n\t self.$deltasDoc = [];\r\n\t }\r\n\r\n\t if (self.$deltas.length > 0) {\r\n\t undoManager.execute({\r\n\t action: \"aceupdate\",\r\n\t args: [self.$deltas, self],\r\n\t merge: self.mergeUndoDeltas\r\n\t });\r\n\t }\r\n\t self.mergeUndoDeltas = false;\r\n\t self.$deltas = [];\r\n\t };\r\n\t this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\r\n\t }\r\n\t };\r\n\t this.markUndoGroup = function() {\r\n\t if (this.$syncInformUndoManager)\r\n\t this.$syncInformUndoManager();\r\n\t };\r\n\t \r\n\t this.$defaultUndoManager = {\r\n\t undo: function() {},\r\n\t redo: function() {},\r\n\t reset: function() {}\r\n\t };\r\n\t this.getUndoManager = function() {\r\n\t return this.$undoManager || this.$defaultUndoManager;\r\n\t };\r\n\t this.getTabString = function() {\r\n\t if (this.getUseSoftTabs()) {\r\n\t return lang.stringRepeat(\" \", this.getTabSize());\r\n\t } else {\r\n\t return \"\\t\";\r\n\t }\r\n\t };\r\n\t this.setUseSoftTabs = function(val) {\r\n\t this.setOption(\"useSoftTabs\", val);\r\n\t };\r\n\t this.getUseSoftTabs = function() {\r\n\t return this.$useSoftTabs && !this.$mode.$indentWithTabs;\r\n\t };\r\n\t this.setTabSize = function(tabSize) {\r\n\t this.setOption(\"tabSize\", tabSize);\r\n\t };\r\n\t this.getTabSize = function() {\r\n\t return this.$tabSize;\r\n\t };\r\n\t this.isTabStop = function(position) {\r\n\t return this.$useSoftTabs && (position.column % this.$tabSize === 0);\r\n\t };\r\n\r\n\t this.$overwrite = false;\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.setOption(\"overwrite\", overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.$overwrite;\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.setOverwrite(!this.$overwrite);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className) {\r\n\t if (!this.$decorations[row])\r\n\t this.$decorations[row] = \"\";\r\n\t this.$decorations[row] += \" \" + className;\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className) {\r\n\t this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.getBreakpoints = function() {\r\n\t return this.$breakpoints;\r\n\t };\r\n\t this.setBreakpoints = function(rows) {\r\n\t this.$breakpoints = [];\r\n\t for (var i=0; i 0)\r\n\t inToken = !!line.charAt(column - 1).match(this.tokenRe);\r\n\r\n\t if (!inToken)\r\n\t inToken = !!line.charAt(column).match(this.tokenRe);\r\n\r\n\t if (inToken)\r\n\t var re = this.tokenRe;\r\n\t else if (/^\\s+$/.test(line.slice(column-1, column+1)))\r\n\t var re = /\\s/;\r\n\t else\r\n\t var re = this.nonTokenRe;\r\n\r\n\t var start = column;\r\n\t if (start > 0) {\r\n\t do {\r\n\t start--;\r\n\t }\r\n\t while (start >= 0 && line.charAt(start).match(re));\r\n\t start++;\r\n\t }\r\n\r\n\t var end = column;\r\n\t while (end < line.length && line.charAt(end).match(re)) {\r\n\t end++;\r\n\t }\r\n\r\n\t return new Range(row, start, row, end);\r\n\t };\r\n\t this.getAWordRange = function(row, column) {\r\n\t var wordRange = this.getWordRange(row, column);\r\n\t var line = this.getLine(wordRange.end.row);\r\n\r\n\t while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\r\n\t wordRange.end.column += 1;\r\n\t }\r\n\t return wordRange;\r\n\t };\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t this.doc.setNewLineMode(newLineMode);\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.doc.getNewLineMode();\r\n\t };\r\n\t this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\r\n\t this.getUseWorker = function() { return this.$useWorker; };\r\n\t this.onReloadTokenizer = function(e) {\r\n\t var rows = e.data;\r\n\t this.bgTokenizer.start(rows.first);\r\n\t this._signal(\"tokenizerUpdate\", e);\r\n\t };\r\n\r\n\t this.$modes = {};\r\n\t this.$mode = null;\r\n\t this.$modeId = null;\r\n\t this.setMode = function(mode, cb) {\r\n\t if (mode && typeof mode === \"object\") {\r\n\t if (mode.getTokenizer)\r\n\t return this.$onChangeMode(mode);\r\n\t var options = mode;\r\n\t var path = options.path;\r\n\t } else {\r\n\t path = mode || \"ace/mode/text\";\r\n\t }\r\n\t if (!this.$modes[\"ace/mode/text\"])\r\n\t this.$modes[\"ace/mode/text\"] = new TextMode();\r\n\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t cb && cb();\r\n\t return;\r\n\t }\r\n\t this.$modeId = path;\r\n\t config.loadModule([\"mode\", path], function(m) {\r\n\t if (this.$modeId !== path)\r\n\t return cb && cb();\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t } else if (m && m.Mode) {\r\n\t m = new m.Mode(options);\r\n\t if (!options) {\r\n\t this.$modes[path] = m;\r\n\t m.$id = path;\r\n\t }\r\n\t this.$onChangeMode(m);\r\n\t }\r\n\t cb && cb();\r\n\t }.bind(this));\r\n\t if (!this.$mode)\r\n\t this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\r\n\t };\r\n\r\n\t this.$onChangeMode = function(mode, $isPlaceholder) {\r\n\t if (!$isPlaceholder)\r\n\t this.$modeId = mode.$id;\r\n\t if (this.$mode === mode) \r\n\t return;\r\n\r\n\t this.$mode = mode;\r\n\r\n\t this.$stopWorker();\r\n\r\n\t if (this.$useWorker)\r\n\t this.$startWorker();\r\n\r\n\t var tokenizer = mode.getTokenizer();\r\n\r\n\t if(tokenizer.addEventListener !== undefined) {\r\n\t var onReloadTokenizer = this.onReloadTokenizer.bind(this);\r\n\t tokenizer.addEventListener(\"update\", onReloadTokenizer);\r\n\t }\r\n\r\n\t if (!this.bgTokenizer) {\r\n\t this.bgTokenizer = new BackgroundTokenizer(tokenizer);\r\n\t var _self = this;\r\n\t this.bgTokenizer.addEventListener(\"update\", function(e) {\r\n\t _self._signal(\"tokenizerUpdate\", e);\r\n\t });\r\n\t } else {\r\n\t this.bgTokenizer.setTokenizer(tokenizer);\r\n\t }\r\n\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.tokenRe = mode.tokenRe;\r\n\t this.nonTokenRe = mode.nonTokenRe;\r\n\r\n\t \r\n\t if (!$isPlaceholder) {\r\n\t if (mode.attachToSession)\r\n\t mode.attachToSession(this);\r\n\t this.$options.wrapMethod.set.call(this, this.$wrapMethod);\r\n\t this.$setFolding(mode.foldingRules);\r\n\t this.bgTokenizer.start(0);\r\n\t this._emit(\"changeMode\");\r\n\t }\r\n\t };\r\n\r\n\t this.$stopWorker = function() {\r\n\t if (this.$worker) {\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\r\n\t this.$startWorker = function() {\r\n\t try {\r\n\t this.$worker = this.$mode.createWorker(this);\r\n\t } catch (e) {\r\n\t config.warn(\"Could not load worker\", e);\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\t this.getMode = function() {\r\n\t return this.$mode;\r\n\t };\r\n\r\n\t this.$scrollTop = 0;\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.$scrollTop === scrollTop || isNaN(scrollTop))\r\n\t return;\r\n\r\n\t this.$scrollTop = scrollTop;\r\n\t this._signal(\"changeScrollTop\", scrollTop);\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.$scrollTop;\r\n\t };\r\n\r\n\t this.$scrollLeft = 0;\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\r\n\t return;\r\n\r\n\t this.$scrollLeft = scrollLeft;\r\n\t this._signal(\"changeScrollLeft\", scrollLeft);\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.$scrollLeft;\r\n\t };\r\n\t this.getScreenWidth = function() {\r\n\t this.$computeWidth();\r\n\t if (this.lineWidgets) \r\n\t return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\r\n\t return this.screenWidth;\r\n\t };\r\n\t \r\n\t this.getLineWidgetMaxWidth = function() {\r\n\t if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\r\n\t var width = 0;\r\n\t this.lineWidgets.forEach(function(w) {\r\n\t if (w && w.screenWidth > width)\r\n\t width = w.screenWidth;\r\n\t });\r\n\t return this.lineWidgetWidth = width;\r\n\t };\r\n\r\n\t this.$computeWidth = function(force) {\r\n\t if (this.$modified || force) {\r\n\t this.$modified = false;\r\n\r\n\t if (this.$useWrapMode)\r\n\t return this.screenWidth = this.$wrapLimit;\r\n\r\n\t var lines = this.doc.getAllLines();\r\n\t var cache = this.$rowLengthCache;\r\n\t var longestScreenLine = 0;\r\n\t var foldIndex = 0;\r\n\t var foldLine = this.$foldData[foldIndex];\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t var len = lines.length;\r\n\r\n\t for (var i = 0; i < len; i++) {\r\n\t if (i > foldStart) {\r\n\t i = foldLine.end.row + 1;\r\n\t if (i >= len)\r\n\t break;\r\n\t foldLine = this.$foldData[foldIndex++];\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\r\n\t if (cache[i] == null)\r\n\t cache[i] = this.$getStringScreenWidth(lines[i])[0];\r\n\r\n\t if (cache[i] > longestScreenLine)\r\n\t longestScreenLine = cache[i];\r\n\t }\r\n\t this.screenWidth = longestScreenLine;\r\n\t }\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.doc.getLine(row);\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.doc.getLines(firstRow, lastRow);\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.doc.getLength();\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.doc.getTextRange(range || this.selection.getRange());\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t return this.doc.insert(position, text);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t return this.doc.remove(range);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow){\r\n\t return this.doc.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.undoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = deltas.length - 1; i != -1; i--) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.revertDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, true, lastUndoRange);\r\n\t } else {\r\n\t delta.deltas.forEach(function(foldDelta) {\r\n\t this.addFolds(foldDelta.folds);\r\n\t }, this);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.redoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = 0; i < deltas.length; i++) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.applyDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, false, lastUndoRange);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.setUndoSelect = function(enable) {\r\n\t this.$undoSelect = enable;\r\n\t };\r\n\r\n\t this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\r\n\t function isInsert(delta) {\r\n\t return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\r\n\t }\r\n\r\n\t var delta = deltas[0];\r\n\t var range, point;\r\n\t var lastDeltaIsInsert = false;\r\n\t if (isInsert(delta)) {\r\n\t range = Range.fromPoints(delta.start, delta.end);\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\r\n\t for (var i = 1; i < deltas.length; i++) {\r\n\t delta = deltas[i];\r\n\t if (isInsert(delta)) {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range.setStart(point);\r\n\t }\r\n\t point = delta.end;\r\n\t if (range.compare(point.row, point.column) == 1) {\r\n\t range.setEnd(point);\r\n\t }\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t }\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\t }\r\n\t if (lastUndoRange != null) {\r\n\t if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\r\n\t lastUndoRange.start.column += range.end.column - range.start.column;\r\n\t lastUndoRange.end.column += range.end.column - range.start.column;\r\n\t }\r\n\r\n\t var cmp = lastUndoRange.compareRange(range);\r\n\t if (cmp == 1) {\r\n\t range.setStart(lastUndoRange.start);\r\n\t } else if (cmp == -1) {\r\n\t range.setEnd(lastUndoRange.end);\r\n\t }\r\n\t }\r\n\r\n\t return range;\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t return this.doc.replace(range, text);\r\n\t };\r\n\t this.moveText = function(fromRange, toPosition, copy) {\r\n\t var text = this.getTextRange(fromRange);\r\n\t var folds = this.getFoldsInRange(fromRange);\r\n\r\n\t var toRange = Range.fromPoints(toPosition, toPosition);\r\n\t if (!copy) {\r\n\t this.remove(fromRange);\r\n\t var rowDiff = fromRange.start.row - fromRange.end.row;\r\n\t var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\r\n\t if (collDiff) {\r\n\t if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\r\n\t toRange.start.column += collDiff;\r\n\t if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\r\n\t toRange.end.column += collDiff;\r\n\t }\r\n\t if (rowDiff && toRange.start.row >= fromRange.end.row) {\r\n\t toRange.start.row += rowDiff;\r\n\t toRange.end.row += rowDiff;\r\n\t }\r\n\t }\r\n\r\n\t toRange.end = this.insert(toRange.start, text);\r\n\t if (folds.length) {\r\n\t var oldStart = fromRange.start;\r\n\t var newStart = toRange.start;\r\n\t var rowDiff = newStart.row - oldStart.row;\r\n\t var collDiff = newStart.column - oldStart.column;\r\n\t this.addFolds(folds.map(function(x) {\r\n\t x = x.clone();\r\n\t if (x.start.row == oldStart.row)\r\n\t x.start.column += collDiff;\r\n\t if (x.end.row == oldStart.row)\r\n\t x.end.column += collDiff;\r\n\t x.start.row += rowDiff;\r\n\t x.end.row += rowDiff;\r\n\t return x;\r\n\t }));\r\n\t }\r\n\r\n\t return toRange;\r\n\t };\r\n\t this.indentRows = function(startRow, endRow, indentString) {\r\n\t indentString = indentString.replace(/\\t/g, this.getTabString());\r\n\t for (var row=startRow; row<=endRow; row++)\r\n\t this.doc.insertInLine({row: row, column: 0}, indentString);\r\n\t };\r\n\t this.outdentRows = function (range) {\r\n\t var rowRange = range.collapseRows();\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t var size = this.getTabSize();\r\n\r\n\t for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\r\n\t var line = this.getLine(i);\r\n\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t for (var j = 0; j < size; ++j)\r\n\t if (line.charAt(j) != ' ')\r\n\t break;\r\n\t if (j < size && line.charAt(j) == '\\t') {\r\n\t deleteRange.start.column = j;\r\n\t deleteRange.end.column = j + 1;\r\n\t } else {\r\n\t deleteRange.start.column = 0;\r\n\t deleteRange.end.column = j;\r\n\t }\r\n\t this.remove(deleteRange);\r\n\t }\r\n\t };\r\n\r\n\t this.$moveLines = function(firstRow, lastRow, dir) {\r\n\t firstRow = this.getRowFoldStart(firstRow);\r\n\t lastRow = this.getRowFoldEnd(lastRow);\r\n\t if (dir < 0) {\r\n\t var row = this.getRowFoldStart(firstRow + dir);\r\n\t if (row < 0) return 0;\r\n\t var diff = row-firstRow;\r\n\t } else if (dir > 0) {\r\n\t var row = this.getRowFoldEnd(lastRow + dir);\r\n\t if (row > this.doc.getLength()-1) return 0;\r\n\t var diff = row-lastRow;\r\n\t } else {\r\n\t firstRow = this.$clipRowToDocument(firstRow);\r\n\t lastRow = this.$clipRowToDocument(lastRow);\r\n\t var diff = lastRow - firstRow + 1;\r\n\t }\r\n\r\n\t var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\r\n\t var folds = this.getFoldsInRange(range).map(function(x){\r\n\t x = x.clone();\r\n\t x.start.row += diff;\r\n\t x.end.row += diff;\r\n\t return x;\r\n\t });\r\n\t \r\n\t var lines = dir == 0\r\n\t ? this.doc.getLines(firstRow, lastRow)\r\n\t : this.doc.removeFullLines(firstRow, lastRow);\r\n\t this.doc.insertFullLines(firstRow+diff, lines);\r\n\t folds.length && this.addFolds(folds);\r\n\t return diff;\r\n\t };\r\n\t this.moveLinesUp = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, -1);\r\n\t };\r\n\t this.moveLinesDown = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 1);\r\n\t };\r\n\t this.duplicateLines = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 0);\r\n\t };\r\n\r\n\r\n\t this.$clipRowToDocument = function(row) {\r\n\t return Math.max(0, Math.min(row, this.doc.getLength()-1));\r\n\t };\r\n\r\n\t this.$clipColumnToRow = function(row, column) {\r\n\t if (column < 0)\r\n\t return 0;\r\n\t return Math.min(this.doc.getLine(row).length, column);\r\n\t };\r\n\r\n\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t column = Math.max(0, column);\r\n\r\n\t if (row < 0) {\r\n\t row = 0;\r\n\t column = 0;\r\n\t } else {\r\n\t var len = this.doc.getLength();\r\n\t if (row >= len) {\r\n\t row = len - 1;\r\n\t column = this.doc.getLine(len-1).length;\r\n\t } else {\r\n\t column = Math.min(this.doc.getLine(row).length, column);\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t };\r\n\r\n\t this.$clipRangeToDocument = function(range) {\r\n\t if (range.start.row < 0) {\r\n\t range.start.row = 0;\r\n\t range.start.column = 0;\r\n\t } else {\r\n\t range.start.column = this.$clipColumnToRow(\r\n\t range.start.row,\r\n\t range.start.column\r\n\t );\r\n\t }\r\n\r\n\t var len = this.doc.getLength() - 1;\r\n\t if (range.end.row > len) {\r\n\t range.end.row = len;\r\n\t range.end.column = this.doc.getLine(len).length;\r\n\t } else {\r\n\t range.end.column = this.$clipColumnToRow(\r\n\t range.end.row,\r\n\t range.end.column\r\n\t );\r\n\t }\r\n\t return range;\r\n\t };\r\n\t this.$wrapLimit = 80;\r\n\t this.$useWrapMode = false;\r\n\t this.$wrapLimitRange = {\r\n\t min : null,\r\n\t max : null\r\n\t };\r\n\t this.setUseWrapMode = function(useWrapMode) {\r\n\t if (useWrapMode != this.$useWrapMode) {\r\n\t this.$useWrapMode = useWrapMode;\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t if (useWrapMode) {\r\n\t var len = this.getLength();\r\n\t this.$wrapData = Array(len);\r\n\t this.$updateWrapData(0, len - 1);\r\n\t }\r\n\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.getUseWrapMode = function() {\r\n\t return this.$useWrapMode;\r\n\t };\r\n\t this.setWrapLimitRange = function(min, max) {\r\n\t if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\r\n\t this.$wrapLimitRange = { min: min, max: max };\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode)\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function(desiredLimit, $printMargin) {\r\n\t var limits = this.$wrapLimitRange;\r\n\t if (limits.max < 0)\r\n\t limits = {min: $printMargin, max: $printMargin};\r\n\t var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\r\n\t if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\r\n\t this.$wrapLimit = wrapLimit;\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode) {\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t this.$resetRowCache(0);\r\n\t this._signal(\"changeWrapLimit\");\r\n\t }\r\n\t return true;\r\n\t }\r\n\t return false;\r\n\t };\r\n\r\n\t this.$constrainWrapLimit = function(wrapLimit, min, max) {\r\n\t if (min)\r\n\t wrapLimit = Math.max(min, wrapLimit);\r\n\r\n\t if (max)\r\n\t wrapLimit = Math.min(max, wrapLimit);\r\n\r\n\t return wrapLimit;\r\n\t };\r\n\t this.getWrapLimit = function() {\r\n\t return this.$wrapLimit;\r\n\t };\r\n\t this.setWrapLimit = function (limit) {\r\n\t this.setWrapLimitRange(limit, limit);\r\n\t };\r\n\t this.getWrapLimitRange = function() {\r\n\t return {\r\n\t min : this.$wrapLimitRange.min,\r\n\t max : this.$wrapLimitRange.max\r\n\t };\r\n\t };\r\n\r\n\t this.$updateInternalDataOnChange = function(delta) {\r\n\t var useWrapMode = this.$useWrapMode;\r\n\t var action = delta.action;\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t var firstRow = start.row;\r\n\t var lastRow = end.row;\r\n\t var len = lastRow - firstRow;\r\n\t var removedFolds = null;\r\n\t \r\n\t this.$updating = true;\r\n\t if (len != 0) {\r\n\t if (action === \"remove\") {\r\n\t this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\r\n\r\n\t var foldLines = this.$foldData;\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t var foldLine = this.getFoldLine(end.row);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\r\n\t foldLine.shiftRow(-len);\r\n\r\n\t var foldLineBefore = this.getFoldLine(firstRow);\r\n\t if (foldLineBefore && foldLineBefore !== foldLine) {\r\n\t foldLineBefore.merge(foldLine);\r\n\t foldLine = foldLineBefore;\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= end.row) {\r\n\t foldLine.shiftRow(-len);\r\n\t }\r\n\t }\r\n\r\n\t lastRow = firstRow;\r\n\t } else {\r\n\t var args = Array(len);\r\n\t args.unshift(firstRow, 0);\r\n\t var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache\r\n\t arr.splice.apply(arr, args);\r\n\t var foldLines = this.$foldData;\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t var cmp = foldLine.range.compareInside(start.row, start.column);\r\n\t if (cmp == 0) {\r\n\t foldLine = foldLine.split(start.row, start.column);\r\n\t if (foldLine) {\r\n\t foldLine.shiftRow(len);\r\n\t foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\r\n\t }\r\n\t } else\r\n\t if (cmp == -1) {\r\n\t foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= firstRow) {\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t len = Math.abs(delta.start.column - delta.end.column);\r\n\t if (action === \"remove\") {\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t len = -len;\r\n\t }\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(firstRow, start.column, len);\r\n\t }\r\n\t }\r\n\r\n\t if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\r\n\t console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\r\n\t }\r\n\t this.$updating = false;\r\n\r\n\t if (useWrapMode)\r\n\t this.$updateWrapData(firstRow, lastRow);\r\n\t else\r\n\t this.$updateRowLengthCache(firstRow, lastRow);\r\n\r\n\t return removedFolds;\r\n\t };\r\n\r\n\t this.$updateRowLengthCache = function(firstRow, lastRow, b) {\r\n\t this.$rowLengthCache[firstRow] = null;\r\n\t this.$rowLengthCache[lastRow] = null;\r\n\t };\r\n\r\n\t this.$updateWrapData = function(firstRow, lastRow) {\r\n\t var lines = this.doc.getAllLines();\r\n\t var tabSize = this.getTabSize();\r\n\t var wrapData = this.$wrapData;\r\n\t var wrapLimit = this.$wrapLimit;\r\n\t var tokens;\r\n\t var foldLine;\r\n\r\n\t var row = firstRow;\r\n\t lastRow = Math.min(lastRow, lines.length - 1);\r\n\t while (row <= lastRow) {\r\n\t foldLine = this.getFoldLine(row, foldLine);\r\n\t if (!foldLine) {\r\n\t tokens = this.$getDisplayTokens(lines[row]);\r\n\t wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row ++;\r\n\t } else {\r\n\t tokens = [];\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t var walkTokens;\r\n\t if (placeholder != null) {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t placeholder, tokens.length);\r\n\t walkTokens[0] = PLACEHOLDER_START;\r\n\t for (var i = 1; i < walkTokens.length; i++) {\r\n\t walkTokens[i] = PLACEHOLDER_BODY;\r\n\t }\r\n\t } else {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t lines[row].substring(lastColumn, column),\r\n\t tokens.length);\r\n\t }\r\n\t tokens = tokens.concat(walkTokens);\r\n\t }.bind(this),\r\n\t foldLine.end.row,\r\n\t lines[foldLine.end.row].length + 1\r\n\t );\r\n\r\n\t wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row = foldLine.end.row + 1;\r\n\t }\r\n\t }\r\n\t };\r\n\t var CHAR = 1,\r\n\t CHAR_EXT = 2,\r\n\t PLACEHOLDER_START = 3,\r\n\t PLACEHOLDER_BODY = 4,\r\n\t PUNCTUATION = 9,\r\n\t SPACE = 10,\r\n\t TAB = 11,\r\n\t TAB_SPACE = 12;\r\n\r\n\r\n\t this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\r\n\t if (tokens.length == 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t var splits = [];\r\n\t var displayLength = tokens.length;\r\n\t var lastSplit = 0, lastDocSplit = 0;\r\n\r\n\t var isCode = this.$wrapAsCode;\r\n\r\n\t var indentedSoftWrap = this.$indentedSoftWrap;\r\n\t var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\r\n\t || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\r\n\r\n\t function getWrapIndent() {\r\n\t var indentation = 0;\r\n\t if (maxIndent === 0)\r\n\t return indentation;\r\n\t if (indentedSoftWrap) {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t if (token == SPACE)\r\n\t indentation += 1;\r\n\t else if (token == TAB)\r\n\t indentation += tabSize;\r\n\t else if (token == TAB_SPACE)\r\n\t continue;\r\n\t else\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (isCode && indentedSoftWrap !== false)\r\n\t indentation += tabSize;\r\n\t return Math.min(indentation, maxIndent);\r\n\t }\r\n\t function addSplit(screenPos) {\r\n\t var displayed = tokens.slice(lastSplit, screenPos);\r\n\t var len = displayed.length;\r\n\t displayed.join(\"\")\r\n\t .replace(/12/g, function() {\r\n\t len -= 1;\r\n\t })\r\n\t .replace(/2/g, function() {\r\n\t len -= 1;\r\n\t });\r\n\r\n\t if (!splits.length) {\r\n\t indent = getWrapIndent();\r\n\t splits.indent = indent;\r\n\t }\r\n\t lastDocSplit += len;\r\n\t splits.push(lastDocSplit);\r\n\t lastSplit = screenPos;\r\n\t }\r\n\t var indent = 0;\r\n\t while (displayLength - lastSplit > wrapLimit - indent) {\r\n\t var split = lastSplit + wrapLimit - indent;\r\n\t if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\r\n\t for (split; split != lastSplit - 1; split--) {\r\n\t if (tokens[split] == PLACEHOLDER_START) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split > lastSplit) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t for (split; split < tokens.length; split++) {\r\n\t if (tokens[split] != PLACEHOLDER_BODY) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split == tokens.length) {\r\n\t break; // Breaks the while-loop.\r\n\t }\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t if (isCode) {\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t while (split > minSplit && tokens[split] == PUNCTUATION) {\r\n\t split --;\r\n\t }\r\n\t } else {\r\n\t while (split > minSplit && tokens[split] < SPACE) {\r\n\t split --;\r\n\t }\r\n\t }\r\n\t if (split > minSplit) {\r\n\t addSplit(++split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t if (tokens[split] == CHAR_EXT)\r\n\t split--;\r\n\t addSplit(split - indent);\r\n\t }\r\n\t return splits;\r\n\t };\r\n\t this.$getDisplayTokens = function(str, offset) {\r\n\t var arr = [];\r\n\t var tabSize;\r\n\t offset = offset || 0;\r\n\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t if (c == 9) {\r\n\t tabSize = this.getScreenTabSize(arr.length + offset);\r\n\t arr.push(TAB);\r\n\t for (var n = 1; n < tabSize; n++) {\r\n\t arr.push(TAB_SPACE);\r\n\t }\r\n\t }\r\n\t else if (c == 32) {\r\n\t arr.push(SPACE);\r\n\t } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\r\n\t arr.push(PUNCTUATION);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t arr.push(CHAR, CHAR_EXT);\r\n\t } else {\r\n\t arr.push(CHAR);\r\n\t }\r\n\t }\r\n\t return arr;\r\n\t };\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn == 0)\r\n\t return [0, 0];\r\n\t if (maxScreenColumn == null)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charCodeAt(column);\r\n\t if (c == 9) {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t screenColumn += 2;\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t return [screenColumn, column];\r\n\t };\r\n\r\n\t this.lineWidgets = null;\r\n\t this.getRowLength = function(row) {\r\n\t if (this.lineWidgets)\r\n\t var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\t this.getRowLineCount = function(row) {\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1;\r\n\t }\r\n\t };\r\n\r\n\t this.getRowWrapIndent = function(screenRow) {\r\n\t if (this.$useWrapMode) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t var splits = this.$wrapData[pos.row];\r\n\t return splits.length && splits[0] < pos.column ? splits.indent : 0;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t this.getScreenLastRowColumn = function(screenRow) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t return this.documentToScreenColumn(pos.row, pos.column);\r\n\t };\r\n\t this.getDocumentLastRowColumn = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.getScreenLastRowColumn(screenRow);\r\n\t };\r\n\t this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\r\n\t };\r\n\t this.getRowSplitData = function(row) {\r\n\t if (!this.$useWrapMode) {\r\n\t return undefined;\r\n\t } else {\r\n\t return this.$wrapData[row];\r\n\t }\r\n\t };\r\n\t this.getScreenTabSize = function(screenColumn) {\r\n\t return this.$tabSize - screenColumn % this.$tabSize;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentRow = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).row;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentColumn = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).column;\r\n\t };\r\n\t this.screenToDocumentPosition = function(screenRow, screenColumn) {\r\n\t if (screenRow < 0)\r\n\t return {row: 0, column: 0};\r\n\r\n\t var line;\r\n\t var docRow = 0;\r\n\t var docColumn = 0;\r\n\t var column;\r\n\t var row = 0;\r\n\t var rowLength = 0;\r\n\r\n\t var rowCache = this.$screenRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, screenRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var docRow = this.$docRowCache[i];\r\n\t var doCache = screenRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var maxRow = this.getLength() - 1;\r\n\t var foldLine = this.getNextFoldLine(docRow);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (row <= screenRow) {\r\n\t rowLength = this.getRowLength(docRow);\r\n\t if (row + rowLength > screenRow || docRow >= maxRow) {\r\n\t break;\r\n\t } else {\r\n\t row += rowLength;\r\n\t docRow++;\r\n\t if (docRow > foldStart) {\r\n\t docRow = foldLine.end.row+1;\r\n\t foldLine = this.getNextFoldLine(docRow, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t }\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(docRow);\r\n\t this.$screenRowCache.push(row);\r\n\t }\r\n\t }\r\n\r\n\t if (foldLine && foldLine.start.row <= docRow) {\r\n\t line = this.getFoldDisplayLine(foldLine);\r\n\t docRow = foldLine.start.row;\r\n\t } else if (row + rowLength <= screenRow || docRow > maxRow) {\r\n\t return {\r\n\t row: maxRow,\r\n\t column: this.getLine(maxRow).length\r\n\t };\r\n\t } else {\r\n\t line = this.getLine(docRow);\r\n\t foldLine = null;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var splits = this.$wrapData[docRow];\r\n\t if (splits) {\r\n\t var splitIndex = Math.floor(screenRow - row);\r\n\t column = splits[splitIndex];\r\n\t if(splitIndex > 0 && splits.length) {\r\n\t wrapIndent = splits.indent;\r\n\t docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\r\n\t line = line.substring(docColumn);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\r\n\t if (this.$useWrapMode && docColumn >= column)\r\n\t docColumn = column - 1;\r\n\r\n\t if (foldLine)\r\n\t return foldLine.idxToPosition(docColumn);\r\n\r\n\t return {row: docRow, column: docColumn};\r\n\t };\r\n\t this.documentToScreenPosition = function(docRow, docColumn) {\r\n\t if (typeof docColumn === \"undefined\")\r\n\t var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\r\n\t else\r\n\t pos = this.$clipPositionToDocument(docRow, docColumn);\r\n\r\n\t docRow = pos.row;\r\n\t docColumn = pos.column;\r\n\r\n\t var screenRow = 0;\r\n\t var foldStartRow = null;\r\n\t var fold = null;\r\n\t fold = this.getFoldAt(docRow, docColumn, 1);\r\n\t if (fold) {\r\n\t docRow = fold.start.row;\r\n\t docColumn = fold.start.column;\r\n\t }\r\n\r\n\t var rowEnd, row = 0;\r\n\r\n\r\n\t var rowCache = this.$docRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, docRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var screenRow = this.$screenRowCache[i];\r\n\t var doCache = docRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var foldLine = this.getNextFoldLine(row);\r\n\t var foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\r\n\t while (row < docRow) {\r\n\t if (row >= foldStart) {\r\n\t rowEnd = foldLine.end.row + 1;\r\n\t if (rowEnd > docRow)\r\n\t break;\r\n\t foldLine = this.getNextFoldLine(rowEnd, foldLine);\r\n\t foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\t }\r\n\t else {\r\n\t rowEnd = row + 1;\r\n\t }\r\n\r\n\t screenRow += this.getRowLength(row);\r\n\t row = rowEnd;\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(row);\r\n\t this.$screenRowCache.push(screenRow);\r\n\t }\r\n\t }\r\n\t var textLine = \"\";\r\n\t if (foldLine && row >= foldStart) {\r\n\t textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\r\n\t foldStartRow = foldLine.start.row;\r\n\t } else {\r\n\t textLine = this.getLine(docRow).substring(0, docColumn);\r\n\t foldStartRow = docRow;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var wrapRow = this.$wrapData[foldStartRow];\r\n\t if (wrapRow) {\r\n\t var screenRowOffset = 0;\r\n\t while (textLine.length >= wrapRow[screenRowOffset]) {\r\n\t screenRow ++;\r\n\t screenRowOffset++;\r\n\t }\r\n\t textLine = textLine.substring(\r\n\t wrapRow[screenRowOffset - 1] || 0, textLine.length\r\n\t );\r\n\t wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: screenRow,\r\n\t column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\r\n\t };\r\n\t };\r\n\t this.documentToScreenColumn = function(row, docColumn) {\r\n\t return this.documentToScreenPosition(row, docColumn).column;\r\n\t };\r\n\t this.documentToScreenRow = function(docRow, docColumn) {\r\n\t return this.documentToScreenPosition(docRow, docColumn).row;\r\n\t };\r\n\t this.getScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t var fold = null;\r\n\t if (!this.$useWrapMode) {\r\n\t screenRows = this.getLength();\r\n\t var foldData = this.$foldData;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t fold = foldData[i];\r\n\t screenRows -= fold.end.row - fold.start.row;\r\n\t }\r\n\t } else {\r\n\t var lastRow = this.$wrapData.length;\r\n\t var row = 0, i = 0;\r\n\t var fold = this.$foldData[i++];\r\n\t var foldStart = fold ? fold.start.row :Infinity;\r\n\r\n\t while (row < lastRow) {\r\n\t var splits = this.$wrapData[row];\r\n\t screenRows += splits ? splits.length + 1 : 1;\r\n\t row ++;\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row+1;\r\n\t fold = this.$foldData[i++];\r\n\t foldStart = fold ?fold.start.row :Infinity;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (this.lineWidgets)\r\n\t screenRows += this.$getWidgetScreenLength();\r\n\r\n\t return screenRows;\r\n\t };\r\n\t this.$setFontMetrics = function(fm) {\r\n\t if (!this.$enableVarChar) return;\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn === 0)\r\n\t return [0, 0];\r\n\t if (!maxScreenColumn)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\t \r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charAt(column);\r\n\t if (c === \"\\t\") {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t } else {\r\n\t screenColumn += fm.getCharacterWidth(c);\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t \r\n\t return [screenColumn, column];\r\n\t };\r\n\t };\r\n\t \r\n\t this.destroy = function() {\r\n\t if (this.bgTokenizer) {\r\n\t this.bgTokenizer.setDocument(null);\r\n\t this.bgTokenizer = null;\r\n\t }\r\n\t this.$stopWorker();\r\n\t };\r\n\t function isFullWidth(c) {\r\n\t if (c < 0x1100)\r\n\t return false;\r\n\t return c >= 0x1100 && c <= 0x115F ||\r\n\t c >= 0x11A3 && c <= 0x11A7 ||\r\n\t c >= 0x11FA && c <= 0x11FF ||\r\n\t c >= 0x2329 && c <= 0x232A ||\r\n\t c >= 0x2E80 && c <= 0x2E99 ||\r\n\t c >= 0x2E9B && c <= 0x2EF3 ||\r\n\t c >= 0x2F00 && c <= 0x2FD5 ||\r\n\t c >= 0x2FF0 && c <= 0x2FFB ||\r\n\t c >= 0x3000 && c <= 0x303E ||\r\n\t c >= 0x3041 && c <= 0x3096 ||\r\n\t c >= 0x3099 && c <= 0x30FF ||\r\n\t c >= 0x3105 && c <= 0x312D ||\r\n\t c >= 0x3131 && c <= 0x318E ||\r\n\t c >= 0x3190 && c <= 0x31BA ||\r\n\t c >= 0x31C0 && c <= 0x31E3 ||\r\n\t c >= 0x31F0 && c <= 0x321E ||\r\n\t c >= 0x3220 && c <= 0x3247 ||\r\n\t c >= 0x3250 && c <= 0x32FE ||\r\n\t c >= 0x3300 && c <= 0x4DBF ||\r\n\t c >= 0x4E00 && c <= 0xA48C ||\r\n\t c >= 0xA490 && c <= 0xA4C6 ||\r\n\t c >= 0xA960 && c <= 0xA97C ||\r\n\t c >= 0xAC00 && c <= 0xD7A3 ||\r\n\t c >= 0xD7B0 && c <= 0xD7C6 ||\r\n\t c >= 0xD7CB && c <= 0xD7FB ||\r\n\t c >= 0xF900 && c <= 0xFAFF ||\r\n\t c >= 0xFE10 && c <= 0xFE19 ||\r\n\t c >= 0xFE30 && c <= 0xFE52 ||\r\n\t c >= 0xFE54 && c <= 0xFE66 ||\r\n\t c >= 0xFE68 && c <= 0xFE6B ||\r\n\t c >= 0xFF01 && c <= 0xFF60 ||\r\n\t c >= 0xFFE0 && c <= 0xFFE6;\r\n\t }\r\n\r\n\t}).call(EditSession.prototype);\r\n\r\n\tacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\r\n\tacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\r\n\r\n\r\n\tconfig.defineOptions(EditSession.prototype, \"session\", {\r\n\t wrap: {\r\n\t set: function(value) {\r\n\t if (!value || value == \"off\")\r\n\t value = false;\r\n\t else if (value == \"free\")\r\n\t value = true;\r\n\t else if (value == \"printMargin\")\r\n\t value = -1;\r\n\t else if (typeof value == \"string\")\r\n\t value = parseInt(value, 10) || false;\r\n\r\n\t if (this.$wrap == value)\r\n\t return;\r\n\t this.$wrap = value;\r\n\t if (!value) {\r\n\t this.setUseWrapMode(false);\r\n\t } else {\r\n\t var col = typeof value == \"number\" ? value : null;\r\n\t this.setWrapLimitRange(col, col);\r\n\t this.setUseWrapMode(true);\r\n\t }\r\n\t },\r\n\t get: function() {\r\n\t if (this.getUseWrapMode()) {\r\n\t if (this.$wrap == -1)\r\n\t return \"printMargin\";\r\n\t if (!this.getWrapLimitRange().min)\r\n\t return \"free\";\r\n\t return this.$wrap;\r\n\t }\r\n\t return \"off\";\r\n\t },\r\n\t handlesSet: true\r\n\t }, \r\n\t wrapMethod: {\r\n\t set: function(val) {\r\n\t val = val == \"auto\"\r\n\t ? this.$mode.type != \"text\"\r\n\t : val != \"text\";\r\n\t if (val != this.$wrapAsCode) {\r\n\t this.$wrapAsCode = val;\r\n\t if (this.$useWrapMode) {\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t }\r\n\t }\r\n\t },\r\n\t initialValue: \"auto\"\r\n\t },\r\n\t indentedSoftWrap: { initialValue: true },\r\n\t firstLineNumber: {\r\n\t set: function() {this._signal(\"changeBreakpoint\");},\r\n\t initialValue: 1\r\n\t },\r\n\t useWorker: {\r\n\t set: function(useWorker) {\r\n\t this.$useWorker = useWorker;\r\n\r\n\t this.$stopWorker();\r\n\t if (useWorker)\r\n\t this.$startWorker();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t useSoftTabs: {initialValue: true},\r\n\t tabSize: {\r\n\t set: function(tabSize) {\r\n\t if (isNaN(tabSize) || this.$tabSize === tabSize) return;\r\n\r\n\t this.$modified = true;\r\n\t this.$rowLengthCache = [];\r\n\t this.$tabSize = tabSize;\r\n\t this._signal(\"changeTabSize\");\r\n\t },\r\n\t initialValue: 4,\r\n\t handlesSet: true\r\n\t },\r\n\t overwrite: {\r\n\t set: function(val) {this._signal(\"changeOverwrite\");},\r\n\t initialValue: false\r\n\t },\r\n\t newLineMode: {\r\n\t set: function(val) {this.doc.setNewLineMode(val)},\r\n\t get: function() {return this.doc.getNewLineMode()},\r\n\t handlesSet: true\r\n\t },\r\n\t mode: {\r\n\t set: function(val) { this.setMode(val) },\r\n\t get: function() { return this.$modeId }\r\n\t }\r\n\t});\r\n\r\n\texports.EditSession = EditSession;\r\n\t});\r\n\r\n\tace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar Search = function() {\r\n\t this.$options = {};\r\n\t};\r\n\r\n\t(function() {\r\n\t this.set = function(options) {\r\n\t oop.mixin(this.$options, options);\r\n\t return this;\r\n\t };\r\n\t this.getOptions = function() {\r\n\t return lang.copyObject(this.$options);\r\n\t };\r\n\t this.setOptions = function(options) {\r\n\t this.$options = options;\r\n\t };\r\n\t this.find = function(session) {\r\n\t var options = this.$options;\r\n\t var iterator = this.$matchIterator(session, options);\r\n\t if (!iterator)\r\n\t return false;\r\n\r\n\t var firstRange = null;\r\n\t iterator.forEach(function(range, row, offset) {\r\n\t if (!range.start) {\r\n\t var column = range.offset + (offset || 0);\r\n\t firstRange = new Range(row, column, row, column + range.length);\r\n\t if (!range.length && options.start && options.start.start\r\n\t && options.skipCurrent != false && firstRange.isEqual(options.start)\r\n\t ) {\r\n\t firstRange = null;\r\n\t return false;\r\n\t }\r\n\t } else\r\n\t firstRange = range;\r\n\t return true;\r\n\t });\r\n\r\n\t return firstRange;\r\n\t };\r\n\t this.findAll = function(session) {\r\n\t var options = this.$options;\r\n\t if (!options.needle)\r\n\t return [];\r\n\t this.$assembleRegExp(options);\r\n\r\n\t var range = options.range;\r\n\t var lines = range\r\n\t ? session.getLines(range.start.row, range.end.row)\r\n\t : session.doc.getAllLines();\r\n\r\n\t var ranges = [];\r\n\t var re = options.re;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var maxRow = lines.length - len;\r\n\t var prevRange;\r\n\t outer: for (var row = re.offset || 0; row <= maxRow; row++) {\r\n\t for (var j = 0; j < len; j++)\r\n\t if (lines[row + j].search(re[j]) == -1)\r\n\t continue outer;\r\n\t \r\n\t var startLine = lines[row];\r\n\t var line = lines[row + len - 1];\r\n\t var startIndex = startLine.length - startLine.match(re[0])[0].length;\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\t \r\n\t if (prevRange && prevRange.end.row === row &&\r\n\t prevRange.end.column > startIndex\r\n\t ) {\r\n\t continue;\r\n\t }\r\n\t ranges.push(prevRange = new Range(\r\n\t row, startIndex, row + len - 1, endIndex\r\n\t ));\r\n\t if (len > 2)\r\n\t row = row + len - 2;\r\n\t }\r\n\t } else {\r\n\t for (var i = 0; i < lines.length; i++) {\r\n\t var matches = lang.getMatchOffsets(lines[i], re);\r\n\t for (var j = 0; j < matches.length; j++) {\r\n\t var match = matches[j];\r\n\t ranges.push(new Range(i, match.offset, i, match.offset + match.length));\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (range) {\r\n\t var startColumn = range.start.column;\r\n\t var endColumn = range.start.column;\r\n\t var i = 0, j = ranges.length - 1;\r\n\t while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\r\n\t i++;\r\n\r\n\t while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\r\n\t j--;\r\n\t \r\n\t ranges = ranges.slice(i, j + 1);\r\n\t for (i = 0, j = ranges.length; i < j; i++) {\r\n\t ranges[i].start.row += range.start.row;\r\n\t ranges[i].end.row += range.start.row;\r\n\t }\r\n\t }\r\n\r\n\t return ranges;\r\n\t };\r\n\t this.replace = function(input, replacement) {\r\n\t var options = this.$options;\r\n\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (options.$isMultiLine)\r\n\t return replacement;\r\n\r\n\t if (!re)\r\n\t return;\r\n\r\n\t var match = re.exec(input);\r\n\t if (!match || match[0].length != input.length)\r\n\t return null;\r\n\t \r\n\t replacement = input.replace(re, replacement);\r\n\t if (options.preserveCase) {\r\n\t replacement = replacement.split(\"\");\r\n\t for (var i = Math.min(input.length, input.length); i--; ) {\r\n\t var ch = input[i];\r\n\t if (ch && ch.toLowerCase() != ch)\r\n\t replacement[i] = replacement[i].toUpperCase();\r\n\t else\r\n\t replacement[i] = replacement[i].toLowerCase();\r\n\t }\r\n\t replacement = replacement.join(\"\");\r\n\t }\r\n\t \r\n\t return replacement;\r\n\t };\r\n\r\n\t this.$matchIterator = function(session, options) {\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (!re)\r\n\t return false;\r\n\r\n\t var callback;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var matchIterator = function(line, row, offset) {\r\n\t var startIndex = line.search(re[0]);\r\n\t if (startIndex == -1)\r\n\t return;\r\n\t for (var i = 1; i < len; i++) {\r\n\t line = session.getLine(row + i);\r\n\t if (line.search(re[i]) == -1)\r\n\t return;\r\n\t }\r\n\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\r\n\t var range = new Range(row, startIndex, row + len - 1, endIndex);\r\n\t if (re.offset == 1) {\r\n\t range.start.row--;\r\n\t range.start.column = Number.MAX_VALUE;\r\n\t } else if (offset)\r\n\t range.start.column += offset;\r\n\r\n\t if (callback(range))\r\n\t return true;\r\n\t };\r\n\t } else if (options.backwards) {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = matches.length-1; i >= 0; i--)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t } else {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = 0; i < matches.length; i++)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t }\r\n\t \r\n\t var lineIterator = this.$lineIterator(session, options);\r\n\r\n\t return {\r\n\t forEach: function(_callback) {\r\n\t callback = _callback;\r\n\t lineIterator.forEach(matchIterator);\r\n\t }\r\n\t };\r\n\t };\r\n\r\n\t this.$assembleRegExp = function(options, $disableFakeMultiline) {\r\n\t if (options.needle instanceof RegExp)\r\n\t return options.re = options.needle;\r\n\r\n\t var needle = options.needle;\r\n\r\n\t if (!options.needle)\r\n\t return options.re = false;\r\n\r\n\t if (!options.regExp)\r\n\t needle = lang.escapeRegExp(needle);\r\n\r\n\t if (options.wholeWord)\r\n\t needle = \"\\\\b\" + needle + \"\\\\b\";\r\n\r\n\t var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\r\n\r\n\t options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\r\n\t if (options.$isMultiLine)\r\n\t return options.re = this.$assembleMultilineRegExp(needle, modifier);\r\n\r\n\t try {\r\n\t var re = new RegExp(needle, modifier);\r\n\t } catch(e) {\r\n\t re = false;\r\n\t }\r\n\t return options.re = re;\r\n\t };\r\n\r\n\t this.$assembleMultilineRegExp = function(needle, modifier) {\r\n\t var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\r\n\t var re = [];\r\n\t for (var i = 0; i < parts.length; i++) try {\r\n\t re.push(new RegExp(parts[i], modifier));\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t if (parts[0] == \"\") {\r\n\t re.shift();\r\n\t re.offset = 1;\r\n\t } else {\r\n\t re.offset = 0;\r\n\t }\r\n\t return re;\r\n\t };\r\n\r\n\t this.$lineIterator = function(session, options) {\r\n\t var backwards = options.backwards == true;\r\n\t var skipCurrent = options.skipCurrent != false;\r\n\r\n\t var range = options.range;\r\n\t var start = options.start;\r\n\t if (!start)\r\n\t start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\r\n\t \r\n\t if (start.start)\r\n\t start = start[skipCurrent != backwards ? \"end\" : \"start\"];\r\n\r\n\t var firstRow = range ? range.start.row : 0;\r\n\t var lastRow = range ? range.end.row : session.getLength() - 1;\r\n\r\n\t var forEach = backwards ? function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substring(0, start.column);\r\n\t if (callback(line, row))\r\n\t return;\r\n\r\n\t for (row--; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t } : function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substr(start.column);\r\n\t if (callback(line, row, start.column))\r\n\t return;\r\n\r\n\t for (row = row+1; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t };\r\n\t \r\n\t return {forEach: forEach};\r\n\t };\r\n\r\n\t}).call(Search.prototype);\r\n\r\n\texports.Search = Search;\r\n\t});\r\n\r\n\tace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar KEY_MODS = keyUtil.KEY_MODS;\r\n\r\n\tfunction HashHandler(config, platform) {\r\n\t this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\r\n\t this.commands = {};\r\n\t this.commandKeyBinding = {};\r\n\t this.addCommands(config);\r\n\t this.$singleCommand = true;\r\n\t}\r\n\r\n\tfunction MultiHashHandler(config, platform) {\r\n\t HashHandler.call(this, config, platform);\r\n\t this.$singleCommand = false;\r\n\t}\r\n\r\n\tMultiHashHandler.prototype = HashHandler.prototype;\r\n\r\n\t(function() {\r\n\t \r\n\r\n\t this.addCommand = function(command) {\r\n\t if (this.commands[command.name])\r\n\t this.removeCommand(command);\r\n\r\n\t this.commands[command.name] = command;\r\n\r\n\t if (command.bindKey)\r\n\t this._buildKeyHash(command);\r\n\t };\r\n\r\n\t this.removeCommand = function(command, keepCommand) {\r\n\t var name = command && (typeof command === 'string' ? command : command.name);\r\n\t command = this.commands[name];\r\n\t if (!keepCommand)\r\n\t delete this.commands[name];\r\n\t var ckb = this.commandKeyBinding;\r\n\t for (var keyId in ckb) {\r\n\t var cmdGroup = ckb[keyId];\r\n\t if (cmdGroup == command) {\r\n\t delete ckb[keyId];\r\n\t } else if (Array.isArray(cmdGroup)) {\r\n\t var i = cmdGroup.indexOf(command);\r\n\t if (i != -1) {\r\n\t cmdGroup.splice(i, 1);\r\n\t if (cmdGroup.length == 1)\r\n\t ckb[keyId] = cmdGroup[0];\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.bindKey = function(key, command, position) {\r\n\t if (typeof key == \"object\" && key) {\r\n\t if (position == undefined)\r\n\t position = key.position;\r\n\t key = key[this.platform];\r\n\t }\r\n\t if (!key)\r\n\t return;\r\n\t if (typeof command == \"function\")\r\n\t return this.addCommand({exec: command, bindKey: key, name: command.name || key});\r\n\t \r\n\t key.split(\"|\").forEach(function(keyPart) {\r\n\t var chain = \"\";\r\n\t if (keyPart.indexOf(\" \") != -1) {\r\n\t var parts = keyPart.split(/\\s+/);\r\n\t keyPart = parts.pop();\r\n\t parts.forEach(function(keyPart) {\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t chain += (chain ? \" \" : \"\") + id;\r\n\t this._addCommandToBinding(chain, \"chainKeys\");\r\n\t }, this);\r\n\t chain += \" \";\r\n\t }\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t this._addCommandToBinding(chain + id, command, position);\r\n\t }, this);\r\n\t };\r\n\t \r\n\t function getPosition(command) {\r\n\t return typeof command == \"object\" && command.bindKey\r\n\t && command.bindKey.position || 0;\r\n\t }\r\n\t this._addCommandToBinding = function(keyId, command, position) {\r\n\t var ckb = this.commandKeyBinding, i;\r\n\t if (!command) {\r\n\t delete ckb[keyId];\r\n\t } else if (!ckb[keyId] || this.$singleCommand) {\r\n\t ckb[keyId] = command;\r\n\t } else {\r\n\t if (!Array.isArray(ckb[keyId])) {\r\n\t ckb[keyId] = [ckb[keyId]];\r\n\t } else if ((i = ckb[keyId].indexOf(command)) != -1) {\r\n\t ckb[keyId].splice(i, 1);\r\n\t }\r\n\r\n\t if (typeof position != \"number\") {\r\n\t if (position || command.isDefault)\r\n\t position = -100;\r\n\t else\r\n\t position = getPosition(command);\r\n\t }\r\n\t var commands = ckb[keyId];\r\n\t for (i = 0; i < commands.length; i++) {\r\n\t var other = commands[i];\r\n\t var otherPos = getPosition(other);\r\n\t if (otherPos > position)\r\n\t break;\r\n\t }\r\n\t commands.splice(i, 0, command);\r\n\t }\r\n\t };\r\n\r\n\t this.addCommands = function(commands) {\r\n\t commands && Object.keys(commands).forEach(function(name) {\r\n\t var command = commands[name];\r\n\t if (!command)\r\n\t return;\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t return this.bindKey(command, name);\r\n\r\n\t if (typeof command === \"function\")\r\n\t command = { exec: command };\r\n\r\n\t if (typeof command !== \"object\")\r\n\t return;\r\n\r\n\t if (!command.name)\r\n\t command.name = name;\r\n\r\n\t this.addCommand(command);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeCommands = function(commands) {\r\n\t Object.keys(commands).forEach(function(name) {\r\n\t this.removeCommand(commands[name]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.bindKeys = function(keyList) {\r\n\t Object.keys(keyList).forEach(function(key) {\r\n\t this.bindKey(key, keyList[key]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this._buildKeyHash = function(command) {\r\n\t this.bindKey(command.bindKey, command);\r\n\t };\r\n\t this.parseKeys = function(keys) {\r\n\t var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x});\r\n\t var key = parts.pop();\r\n\r\n\t var keyCode = keyUtil[key];\r\n\t if (keyUtil.FUNCTION_KEYS[keyCode])\r\n\t key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\r\n\t else if (!parts.length)\r\n\t return {key: key, hashId: -1};\r\n\t else if (parts.length == 1 && parts[0] == \"shift\")\r\n\t return {key: key.toUpperCase(), hashId: -1};\r\n\r\n\t var hashId = 0;\r\n\t for (var i = parts.length; i--;) {\r\n\t var modifier = keyUtil.KEY_MODS[parts[i]];\r\n\t if (modifier == null) {\r\n\t if (typeof console != \"undefined\")\r\n\t console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\r\n\t return false;\r\n\t }\r\n\t hashId |= modifier;\r\n\t }\r\n\t return {key: key, hashId: hashId};\r\n\t };\r\n\r\n\t this.findKeyCommand = function findKeyCommand(hashId, keyString) {\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t return this.commandKeyBinding[key];\r\n\t };\r\n\r\n\t this.handleKeyboard = function(data, hashId, keyString, keyCode) {\r\n\t if (keyCode < 0) return;\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t var command = this.commandKeyBinding[key];\r\n\t if (data.$keyChain) {\r\n\t data.$keyChain += \" \" + key;\r\n\t command = this.commandKeyBinding[data.$keyChain] || command;\r\n\t }\r\n\t \r\n\t if (command) {\r\n\t if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\r\n\t data.$keyChain = data.$keyChain || key;\r\n\t return {command: \"null\"};\r\n\t }\r\n\t }\r\n\t \r\n\t if (data.$keyChain) {\r\n\t if ((!hashId || hashId == 4) && keyString.length == 1)\r\n\t data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\r\n\t else if (hashId == -1 || keyCode > 0)\r\n\t data.$keyChain = \"\"; // reset keyChain\r\n\t }\r\n\t return {command: command};\r\n\t };\r\n\t \r\n\t this.getStatusText = function(editor, data) {\r\n\t return data.$keyChain || \"\";\r\n\t };\r\n\r\n\t}).call(HashHandler.prototype);\r\n\r\n\texports.HashHandler = HashHandler;\r\n\texports.MultiHashHandler = MultiHashHandler;\r\n\t});\r\n\r\n\tace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CommandManager = function(platform, commands) {\r\n\t MultiHashHandler.call(this, commands, platform);\r\n\t this.byName = this.commands;\r\n\t this.setDefaultHandler(\"exec\", function(e) {\r\n\t return e.command.exec(e.editor, e.args || {});\r\n\t });\r\n\t};\r\n\r\n\toop.inherits(CommandManager, MultiHashHandler);\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.exec = function(command, editor, args) {\r\n\t if (Array.isArray(command)) {\r\n\t for (var i = command.length; i--; ) {\r\n\t if (this.exec(command[i], editor, args)) return true;\r\n\t }\r\n\t return false;\r\n\t }\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t command = this.commands[command];\r\n\r\n\t if (!command)\r\n\t return false;\r\n\r\n\t if (editor && editor.$readOnly && !command.readOnly)\r\n\t return false;\r\n\r\n\t var e = {editor: editor, command: command, args: args};\r\n\t e.returnValue = this._emit(\"exec\", e);\r\n\t this._signal(\"afterExec\", e);\r\n\r\n\t return e.returnValue === false ? false : true;\r\n\t };\r\n\r\n\t this.toggleRecording = function(editor) {\r\n\t if (this.$inReplay)\r\n\t return;\r\n\r\n\t editor && editor._emit(\"changeStatus\");\r\n\t if (this.recording) {\r\n\t this.macro.pop();\r\n\t this.removeEventListener(\"exec\", this.$addCommandToMacro);\r\n\r\n\t if (!this.macro.length)\r\n\t this.macro = this.oldMacro;\r\n\r\n\t return this.recording = false;\r\n\t }\r\n\t if (!this.$addCommandToMacro) {\r\n\t this.$addCommandToMacro = function(e) {\r\n\t this.macro.push([e.command, e.args]);\r\n\t }.bind(this);\r\n\t }\r\n\r\n\t this.oldMacro = this.macro;\r\n\t this.macro = [];\r\n\t this.on(\"exec\", this.$addCommandToMacro);\r\n\t return this.recording = true;\r\n\t };\r\n\r\n\t this.replay = function(editor) {\r\n\t if (this.$inReplay || !this.macro)\r\n\t return;\r\n\r\n\t if (this.recording)\r\n\t return this.toggleRecording(editor);\r\n\r\n\t try {\r\n\t this.$inReplay = true;\r\n\t this.macro.forEach(function(x) {\r\n\t if (typeof x == \"string\")\r\n\t this.exec(x, editor);\r\n\t else\r\n\t this.exec(x[0], editor, x[1]);\r\n\t }, this);\r\n\t } finally {\r\n\t this.$inReplay = false;\r\n\t }\r\n\t };\r\n\r\n\t this.trimMacro = function(m) {\r\n\t return m.map(function(x){\r\n\t if (typeof x[0] != \"string\")\r\n\t x[0] = x[0].name;\r\n\t if (!x[1])\r\n\t x = x[0];\r\n\t return x;\r\n\t });\r\n\t };\r\n\r\n\t}).call(CommandManager.prototype);\r\n\r\n\texports.CommandManager = CommandManager;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar config = acequire(\"../config\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction bindKey(win, mac) {\r\n\t return {win: win, mac: mac};\r\n\t}\r\n\texports.commands = [{\r\n\t name: \"showSettingsMenu\",\r\n\t bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/settings_menu\", function(module) {\r\n\t module.init(editor);\r\n\t editor.showSettingsMenu();\r\n\t });\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToNextError\",\r\n\t bindKey: bindKey(\"Alt-E\", \"Ctrl-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, 1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToPreviousError\",\r\n\t bindKey: bindKey(\"Alt-Shift-E\", \"Ctrl-Shift-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, -1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectall\",\r\n\t bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\r\n\t exec: function(editor) { editor.selectAll(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"centerselection\",\r\n\t bindKey: bindKey(null, \"Ctrl-L\"),\r\n\t exec: function(editor) { editor.centerSelection(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoline\",\r\n\t bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\r\n\t exec: function(editor) {\r\n\t var line = parseInt(prompt(\"Enter line number:\"), 10);\r\n\t if (!isNaN(line)) {\r\n\t editor.gotoLine(line);\r\n\t }\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"fold\",\r\n\t bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(false); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfold\",\r\n\t bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleFoldWidget\",\r\n\t bindKey: bindKey(\"F2\", \"F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleParentFoldWidget\",\r\n\t bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldall\",\r\n\t bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\r\n\t exec: function(editor) { editor.session.foldAll(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldOther\",\r\n\t bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\r\n\t exec: function(editor) { \r\n\t editor.session.foldAll();\r\n\t editor.session.unfold(editor.selection.getAllRanges());\r\n\t },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfoldall\",\r\n\t bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\r\n\t exec: function(editor) { editor.session.unfold(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findnext\",\r\n\t bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\r\n\t exec: function(editor) { editor.findNext(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findprevious\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\r\n\t exec: function(editor) { editor.findPrevious(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindNext\",\r\n\t bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\r\n\t exec: function(editor) {\r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findNext(); \r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindPrevious\",\r\n\t bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findPrevious();\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"find\",\r\n\t bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor)});\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"overwrite\",\r\n\t bindKey: \"Insert\",\r\n\t exec: function(editor) { editor.toggleOverwrite(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttostart\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotostart\",\r\n\t bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\r\n\t exec: function(editor) { editor.navigateFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectup\",\r\n\t bindKey: bindKey(\"Shift-Up\", \"Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectUp(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golineup\",\r\n\t bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\r\n\t exec: function(editor, args) { editor.navigateUp(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttoend\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotoend\",\r\n\t bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\r\n\t exec: function(editor) { editor.navigateFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectdown\",\r\n\t bindKey: bindKey(\"Shift-Down\", \"Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectDown(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golinedown\",\r\n\t bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\r\n\t exec: function(editor, args) { editor.navigateDown(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\r\n\t exec: function(editor) { editor.navigateWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolinestart\",\r\n\t bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolinestart\",\r\n\t bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\r\n\t exec: function(editor) { editor.navigateLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectleft\",\r\n\t bindKey: bindKey(\"Shift-Left\", \"Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoleft\",\r\n\t bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\r\n\t exec: function(editor, args) { editor.navigateLeft(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordright\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordright\",\r\n\t bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\r\n\t exec: function(editor) { editor.navigateWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolineend\",\r\n\t bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolineend\",\r\n\t bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\r\n\t exec: function(editor) { editor.navigateLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectright\",\r\n\t bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoright\",\r\n\t bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\r\n\t exec: function(editor, args) { editor.navigateRight(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpagedown\",\r\n\t bindKey: \"Shift-PageDown\",\r\n\t exec: function(editor) { editor.selectPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pagedown\",\r\n\t bindKey: bindKey(null, \"Option-PageDown\"),\r\n\t exec: function(editor) { editor.scrollPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopagedown\",\r\n\t bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\r\n\t exec: function(editor) { editor.gotoPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpageup\",\r\n\t bindKey: \"Shift-PageUp\",\r\n\t exec: function(editor) { editor.selectPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pageup\",\r\n\t bindKey: bindKey(null, \"Option-PageUp\"),\r\n\t exec: function(editor) { editor.scrollPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopageup\",\r\n\t bindKey: \"PageUp\",\r\n\t exec: function(editor) { editor.gotoPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrollup\",\r\n\t bindKey: bindKey(\"Ctrl-Up\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrolldown\",\r\n\t bindKey: bindKey(\"Ctrl-Down\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlinestart\",\r\n\t bindKey: \"Shift-Home\",\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlineend\",\r\n\t bindKey: \"Shift-End\",\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"togglerecording\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\r\n\t exec: function(editor) { editor.commands.toggleRecording(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"replaymacro\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\r\n\t exec: function(editor) { editor.commands.replay(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"jumptomatching\",\r\n\t bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttomatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"expandToMatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true, true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"passKeysToBrowser\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function() {},\r\n\t passEvent: true,\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"copy\",\r\n\t exec: function(editor) {\r\n\t },\r\n\t readOnly: true\r\n\t},\r\n\t{\r\n\t name: \"cut\",\r\n\t exec: function(editor) {\r\n\t var range = editor.getSelectionRange();\r\n\t editor._emit(\"cut\", range);\r\n\r\n\t if (!editor.selection.isEmpty()) {\r\n\t editor.session.remove(range);\r\n\t editor.clearSelection();\r\n\t }\r\n\t },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"paste\",\r\n\t exec: function(editor, args) {\r\n\t editor.$handlePaste(args);\r\n\t },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removeline\",\r\n\t bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\r\n\t exec: function(editor) { editor.removeLines(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"duplicateSelection\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\r\n\t exec: function(editor) { editor.duplicateSelection(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"sortlines\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\r\n\t exec: function(editor) { editor.sortLines(); },\r\n\t scrollIntoView: \"selection\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"togglecomment\",\r\n\t bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\r\n\t exec: function(editor) { editor.toggleCommentLines(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"toggleBlockComment\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\r\n\t exec: function(editor) { editor.toggleBlockComment(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"modifyNumberUp\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\r\n\t exec: function(editor) { editor.modifyNumber(1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"modifyNumberDown\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\r\n\t exec: function(editor) { editor.modifyNumber(-1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"replace\",\r\n\t bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true)});\r\n\t }\r\n\t}, {\r\n\t name: \"undo\",\r\n\t bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\r\n\t exec: function(editor) { editor.undo(); }\r\n\t}, {\r\n\t name: \"redo\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\r\n\t exec: function(editor) { editor.redo(); }\r\n\t}, {\r\n\t name: \"copylinesup\",\r\n\t bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\r\n\t exec: function(editor) { editor.copyLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesup\",\r\n\t bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\r\n\t exec: function(editor) { editor.moveLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"copylinesdown\",\r\n\t bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\r\n\t exec: function(editor) { editor.copyLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesdown\",\r\n\t bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\r\n\t exec: function(editor) { editor.moveLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"del\",\r\n\t bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\r\n\t exec: function(editor) { editor.remove(\"right\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"backspace\",\r\n\t bindKey: bindKey(\r\n\t \"Shift-Backspace|Backspace\",\r\n\t \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\r\n\t ),\r\n\t exec: function(editor) { editor.remove(\"left\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"cut_or_delete\",\r\n\t bindKey: bindKey(\"Shift-Delete\", null),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty()) {\r\n\t editor.remove(\"left\");\r\n\t } else {\r\n\t return false;\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolinestart\",\r\n\t bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\r\n\t exec: function(editor) { editor.removeToLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolineend\",\r\n\t bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K\"),\r\n\t exec: function(editor) { editor.removeToLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\r\n\t exec: function(editor) { editor.removeWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordright\",\r\n\t bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\r\n\t exec: function(editor) { editor.removeWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"outdent\",\r\n\t bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"indent\",\r\n\t bindKey: bindKey(\"Tab\", \"Tab\"),\r\n\t exec: function(editor) { editor.indent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockoutdent\",\r\n\t bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockindent\",\r\n\t bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\r\n\t exec: function(editor) { editor.blockIndent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"insertstring\",\r\n\t exec: function(editor, str) { editor.insert(str); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"inserttext\",\r\n\t exec: function(editor, args) {\r\n\t editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"splitline\",\r\n\t bindKey: bindKey(null, \"Ctrl-O\"),\r\n\t exec: function(editor) { editor.splitLine(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"transposeletters\",\r\n\t bindKey: bindKey(\"Ctrl-T\", \"Ctrl-T\"),\r\n\t exec: function(editor) { editor.transposeLetters(); },\r\n\t multiSelectAction: function(editor) {editor.transposeSelections(1); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"touppercase\",\r\n\t bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\r\n\t exec: function(editor) { editor.toUpperCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"tolowercase\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\r\n\t exec: function(editor) { editor.toLowerCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"expandtoline\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\r\n\t exec: function(editor) {\r\n\t var range = editor.selection.getRange();\r\n\r\n\t range.start.column = range.end.column = 0;\r\n\t range.end.row++;\r\n\t editor.selection.setRange(range, false);\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"joinlines\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var isBackwards = editor.selection.isBackwards();\r\n\t var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\r\n\t var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\r\n\t var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\r\n\t var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\r\n\t var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\r\n\t var insertLine = editor.session.doc.getLine(selectionStart.row);\r\n\r\n\t for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\r\n\t var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\r\n\t if (curLine.length !== 0) {\r\n\t curLine = \" \" + curLine;\r\n\t }\r\n\t insertLine += curLine;\r\n\t }\r\n\r\n\t if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\r\n\t insertLine += editor.session.doc.getNewLineCharacter();\r\n\t }\r\n\r\n\t editor.clearSelection();\r\n\t editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\r\n\r\n\t if (selectedCount > 0) {\r\n\t editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\r\n\t editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\r\n\t } else {\r\n\t firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\r\n\t editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"invertSelection\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var endRow = editor.session.doc.getLength() - 1;\r\n\t var endCol = editor.session.doc.getLine(endRow).length;\r\n\t var ranges = editor.selection.rangeList.ranges;\r\n\t var newRanges = [];\r\n\t if (ranges.length < 1) {\r\n\t ranges = [editor.selection.getRange()];\r\n\t }\r\n\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t if (i == (ranges.length - 1)) {\r\n\t if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\r\n\t newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\r\n\t }\r\n\t }\r\n\r\n\t if (i === 0) {\r\n\t if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\r\n\t newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t } else {\r\n\t newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t }\r\n\r\n\t editor.exitMultiSelectMode();\r\n\t editor.clearSelection();\r\n\r\n\t for(var i = 0; i < newRanges.length; i++) {\r\n\t editor.selection.addRange(newRanges[i], false);\r\n\t }\r\n\t },\r\n\t readOnly: true,\r\n\t scrollIntoView: \"none\"\r\n\t}];\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\r\n\tvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\r\n\tvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\r\n\tvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\r\n\tvar defaultCommands = acequire(\"./commands/default_commands\").commands;\r\n\tvar config = acequire(\"./config\");\r\n\tvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\r\n\tvar Editor = function(renderer, session) {\r\n\t var container = renderer.getContainerElement();\r\n\t this.container = container;\r\n\t this.renderer = renderer;\r\n\r\n\t this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\r\n\t this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\r\n\t this.renderer.textarea = this.textInput.getElement();\r\n\t this.keyBinding = new KeyBinding(this);\r\n\t this.$mouseHandler = new MouseHandler(this);\r\n\t new FoldHandler(this);\r\n\r\n\t this.$blockScrolling = 0;\r\n\t this.$search = new Search().set({\r\n\t wrap: true\r\n\t });\r\n\r\n\t this.$historyTracker = this.$historyTracker.bind(this);\r\n\t this.commands.on(\"exec\", this.$historyTracker);\r\n\r\n\t this.$initOperationListeners();\r\n\t \r\n\t this._$emitInputEvent = lang.delayedCall(function() {\r\n\t this._signal(\"input\", {});\r\n\t if (this.session && this.session.bgTokenizer)\r\n\t this.session.bgTokenizer.scheduleStart();\r\n\t }.bind(this));\r\n\t \r\n\t this.on(\"change\", function(_, _self) {\r\n\t _self._$emitInputEvent.schedule(31);\r\n\t });\r\n\r\n\t this.setSession(session || new EditSession(\"\"));\r\n\t config.resetOptions(this);\r\n\t config._signal(\"editor\", this);\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.$initOperationListeners = function() {\r\n\t function last(a) {return a[a.length - 1]}\r\n\r\n\t this.selections = [];\r\n\t this.commands.on(\"exec\", this.startOperation.bind(this), true);\r\n\t this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\r\n\r\n\t this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\r\n\r\n\t this.on(\"change\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.docChanged = true;\r\n\t }.bind(this), true);\r\n\r\n\t this.on(\"changeSelection\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.selectionChanged = true;\r\n\t }.bind(this), true);\r\n\t };\r\n\r\n\t this.curOp = null;\r\n\t this.prevOp = {};\r\n\t this.startOperation = function(commadEvent) {\r\n\t if (this.curOp) {\r\n\t if (!commadEvent || this.curOp.command)\r\n\t return;\r\n\t this.prevOp = this.curOp;\r\n\t }\r\n\t if (!commadEvent) {\r\n\t this.previousCommand = null;\r\n\t commadEvent = {};\r\n\t }\r\n\r\n\t this.$opResetTimer.schedule();\r\n\t this.curOp = {\r\n\t command: commadEvent.command || {},\r\n\t args: commadEvent.args,\r\n\t scrollTop: this.renderer.scrollTop\r\n\t };\r\n\t if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\r\n\t this.$blockScrolling++;\r\n\t };\r\n\r\n\t this.endOperation = function(e) {\r\n\t if (this.curOp) {\r\n\t if (e && e.returnValue === false)\r\n\t return this.curOp = null;\r\n\t this._signal(\"beforeEndOperation\");\r\n\t var command = this.curOp.command;\r\n\t if (command.name && this.$blockScrolling > 0)\r\n\t this.$blockScrolling--;\r\n\t var scrollIntoView = command && command.scrollIntoView;\r\n\t if (scrollIntoView) {\r\n\t switch (scrollIntoView) {\r\n\t case \"center-animate\":\r\n\t scrollIntoView = \"animate\";\r\n\t case \"center\":\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t break;\r\n\t case \"animate\":\r\n\t case \"cursor\":\r\n\t this.renderer.scrollCursorIntoView();\r\n\t break;\r\n\t case \"selectionPart\":\r\n\t var range = this.selection.getRange();\r\n\t var config = this.renderer.layerConfig;\r\n\t if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\r\n\t this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\r\n\t }\r\n\t break;\r\n\t default:\r\n\t break;\r\n\t }\r\n\t if (scrollIntoView == \"animate\")\r\n\t this.renderer.animateScrolling(this.curOp.scrollTop);\r\n\t }\r\n\t \r\n\t this.prevOp = this.curOp;\r\n\t this.curOp = null;\r\n\t }\r\n\t };\r\n\t this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\r\n\t this.$historyTracker = function(e) {\r\n\t if (!this.$mergeUndoDeltas)\r\n\t return;\r\n\r\n\t var prev = this.prevOp;\r\n\t var mergeableCommands = this.$mergeableCommands;\r\n\t var shouldMerge = prev.command && (e.command.name == prev.command.name);\r\n\t if (e.command.name == \"insertstring\") {\r\n\t var text = e.args;\r\n\t if (this.mergeNextCommand === undefined)\r\n\t this.mergeNextCommand = true;\r\n\r\n\t shouldMerge = shouldMerge\r\n\t && this.mergeNextCommand // previous command allows to coalesce with\r\n\t && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\r\n\r\n\t this.mergeNextCommand = true;\r\n\t } else {\r\n\t shouldMerge = shouldMerge\r\n\t && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\r\n\t }\r\n\r\n\t if (\r\n\t this.$mergeUndoDeltas != \"always\"\r\n\t && Date.now() - this.sequenceStartTime > 2000\r\n\t ) {\r\n\t shouldMerge = false; // the sequence is too long\r\n\t }\r\n\r\n\t if (shouldMerge)\r\n\t this.session.mergeUndoDeltas = true;\r\n\t else if (mergeableCommands.indexOf(e.command.name) !== -1)\r\n\t this.sequenceStartTime = Date.now();\r\n\t };\r\n\t this.setKeyboardHandler = function(keyboardHandler, cb) {\r\n\t if (keyboardHandler && typeof keyboardHandler === \"string\") {\r\n\t this.$keybindingId = keyboardHandler;\r\n\t var _self = this;\r\n\t config.loadModule([\"keybinding\", keyboardHandler], function(module) {\r\n\t if (_self.$keybindingId == keyboardHandler)\r\n\t _self.keyBinding.setKeyboardHandler(module && module.handler);\r\n\t cb && cb();\r\n\t });\r\n\t } else {\r\n\t this.$keybindingId = null;\r\n\t this.keyBinding.setKeyboardHandler(keyboardHandler);\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getKeyboardHandler = function() {\r\n\t return this.keyBinding.getKeyboardHandler();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session == session)\r\n\t return;\r\n\t if (this.curOp) this.endOperation();\r\n\t this.curOp = {};\r\n\r\n\t var oldSession = this.session;\r\n\t if (oldSession) {\r\n\t this.session.off(\"change\", this.$onDocumentChange);\r\n\t this.session.off(\"changeMode\", this.$onChangeMode);\r\n\t this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t this.session.off(\"changeTabSize\", this.$onChangeTabSize);\r\n\t this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t this.session.off(\"changeFold\", this.$onChangeFold);\r\n\t this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t this.session.off(\"changeOverwrite\", this.$onCursorChange);\r\n\t this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\r\n\t var selection = this.session.getSelection();\r\n\t selection.off(\"changeCursor\", this.$onCursorChange);\r\n\t selection.off(\"changeSelection\", this.$onSelectionChange);\r\n\t }\r\n\r\n\t this.session = session;\r\n\t if (session) {\r\n\t this.$onDocumentChange = this.onDocumentChange.bind(this);\r\n\t session.on(\"change\", this.$onDocumentChange);\r\n\t this.renderer.setSession(session);\r\n\t \r\n\t this.$onChangeMode = this.onChangeMode.bind(this);\r\n\t session.on(\"changeMode\", this.$onChangeMode);\r\n\t \r\n\t this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\r\n\t session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t \r\n\t this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\r\n\t session.on(\"changeTabSize\", this.$onChangeTabSize);\r\n\t \r\n\t this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\r\n\t session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t \r\n\t this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\r\n\t session.on(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t \r\n\t this.$onChangeFold = this.onChangeFold.bind(this);\r\n\t session.on(\"changeFold\", this.$onChangeFold);\r\n\t \r\n\t this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\r\n\t this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t \r\n\t this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\r\n\t this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t \r\n\t this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\r\n\t this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t \r\n\t this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\r\n\t this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t \r\n\t this.$onCursorChange = this.onCursorChange.bind(this);\r\n\t this.session.on(\"changeOverwrite\", this.$onCursorChange);\r\n\t \r\n\t this.$onScrollTopChange = this.onScrollTopChange.bind(this);\r\n\t this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t \r\n\t this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\r\n\t this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\t \r\n\t this.selection = session.getSelection();\r\n\t this.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t \r\n\t this.$onSelectionChange = this.onSelectionChange.bind(this);\r\n\t this.selection.on(\"changeSelection\", this.$onSelectionChange);\r\n\t \r\n\t this.onChangeMode();\r\n\t \r\n\t this.$blockScrolling += 1;\r\n\t this.onCursorChange();\r\n\t this.$blockScrolling -= 1;\r\n\t \r\n\t this.onScrollTopChange();\r\n\t this.onScrollLeftChange();\r\n\t this.onSelectionChange();\r\n\t this.onChangeFrontMarker();\r\n\t this.onChangeBackMarker();\r\n\t this.onChangeBreakpoint();\r\n\t this.onChangeAnnotation();\r\n\t this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\r\n\t this.renderer.updateFull();\r\n\t } else {\r\n\t this.selection = null;\r\n\t this.renderer.setSession(session);\r\n\t }\r\n\r\n\t this._signal(\"changeSession\", {\r\n\t session: session,\r\n\t oldSession: oldSession\r\n\t });\r\n\t \r\n\t this.curOp = null;\r\n\t \r\n\t oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\r\n\t session && session._signal(\"changeEditor\", {editor: this});\r\n\t };\r\n\t this.getSession = function() {\r\n\t return this.session;\r\n\t };\r\n\t this.setValue = function(val, cursorPos) {\r\n\t this.session.doc.setValue(val);\r\n\r\n\t if (!cursorPos)\r\n\t this.selectAll();\r\n\t else if (cursorPos == 1)\r\n\t this.navigateFileEnd();\r\n\t else if (cursorPos == -1)\r\n\t this.navigateFileStart();\r\n\r\n\t return val;\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.session.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.resize = function(force) {\r\n\t this.renderer.onResize(force);\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t this.renderer.setTheme(theme, cb);\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.renderer.getTheme();\r\n\t };\r\n\t this.setStyle = function(style) {\r\n\t this.renderer.setStyle(style);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t this.renderer.unsetStyle(style);\r\n\t };\r\n\t this.getFontSize = function () {\r\n\t return this.getOption(\"fontSize\") ||\r\n\t dom.computedStyle(this.container, \"fontSize\");\r\n\t };\r\n\t this.setFontSize = function(size) {\r\n\t this.setOption(\"fontSize\", size);\r\n\t };\r\n\r\n\t this.$highlightBrackets = function() {\r\n\t if (this.session.$bracketHighlight) {\r\n\t this.session.removeMarker(this.session.$bracketHighlight);\r\n\t this.session.$bracketHighlight = null;\r\n\t }\r\n\r\n\t if (this.$highlightPending) {\r\n\t return;\r\n\t }\r\n\t var self = this;\r\n\t this.$highlightPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightPending = false;\r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t var pos = session.findMatchingBracket(self.getCursorPosition());\r\n\t if (pos) {\r\n\t var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\r\n\t } else if (session.$mode.getMatching) {\r\n\t var range = session.$mode.getMatching(self.session);\r\n\t }\r\n\t if (range)\r\n\t session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\r\n\t }, 50);\r\n\t };\r\n\t this.$highlightTags = function() {\r\n\t if (this.$highlightTagPending)\r\n\t return;\r\n\t var self = this;\r\n\t this.$highlightTagPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightTagPending = false;\r\n\t \r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t \r\n\t var pos = self.getCursorPosition();\r\n\t var iterator = new TokenIterator(self.session, pos.row, pos.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t \r\n\t if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\r\n\t session.removeMarker(session.$tagHighlight);\r\n\t session.$tagHighlight = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t if (token.type.indexOf(\"tag-open\") != -1) {\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t }\r\n\t \r\n\t var tag = token.value;\r\n\t var depth = 0;\r\n\t var prevToken = iterator.stepBackward();\r\n\t \r\n\t if (prevToken.value == '<'){\r\n\t do {\r\n\t prevToken = token;\r\n\t token = iterator.stepForward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<'){\r\n\t depth++;\r\n\t } else if (prevToken.value === '= 0);\r\n\t } else {\r\n\t do {\r\n\t token = prevToken;\r\n\t prevToken = iterator.stepBackward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<') {\r\n\t depth++;\r\n\t } else if (prevToken.value === ' 1))\r\n\t highlight = false;\r\n\t }\r\n\r\n\t if (session.$highlightLineMarker && !highlight) {\r\n\t session.removeMarker(session.$highlightLineMarker.id);\r\n\t session.$highlightLineMarker = null;\r\n\t } else if (!session.$highlightLineMarker && highlight) {\r\n\t var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\r\n\t range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\r\n\t session.$highlightLineMarker = range;\r\n\t } else if (highlight) {\r\n\t session.$highlightLineMarker.start.row = highlight.row;\r\n\t session.$highlightLineMarker.end.row = highlight.row;\r\n\t session.$highlightLineMarker.start.column = highlight.column;\r\n\t session._signal(\"changeBackMarker\");\r\n\t }\r\n\t };\r\n\r\n\t this.onSelectionChange = function(e) {\r\n\t var session = this.session;\r\n\r\n\t if (session.$selectionMarker) {\r\n\t session.removeMarker(session.$selectionMarker);\r\n\t }\r\n\t session.$selectionMarker = null;\r\n\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.selection.getRange();\r\n\t var style = this.getSelectionStyle();\r\n\t session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\r\n\t } else {\r\n\t this.$updateHighlightActiveLine();\r\n\t }\r\n\r\n\t var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\r\n\t this.session.highlight(re);\r\n\r\n\t this._signal(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$getSelectionHighLightRegexp = function() {\r\n\t var session = this.session;\r\n\r\n\t var selection = this.getSelectionRange();\r\n\t if (selection.isEmpty() || selection.isMultiLine())\r\n\t return;\r\n\r\n\t var startOuter = selection.start.column - 1;\r\n\t var endOuter = selection.end.column + 1;\r\n\t var line = session.getLine(selection.start.row);\r\n\t var lineCols = line.length;\r\n\t var needle = line.substring(Math.max(startOuter, 0),\r\n\t Math.min(endOuter, lineCols));\r\n\t if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\r\n\t (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\r\n\t return;\r\n\r\n\t needle = line.substring(selection.start.column, selection.end.column);\r\n\t if (!/^[\\w\\d]+$/.test(needle))\r\n\t return;\r\n\r\n\t var re = this.$search.$assembleRegExp({\r\n\t wholeWord: true,\r\n\t caseSensitive: true,\r\n\t needle: needle\r\n\t });\r\n\r\n\t return re;\r\n\t };\r\n\r\n\r\n\t this.onChangeFrontMarker = function() {\r\n\t this.renderer.updateFrontMarkers();\r\n\t };\r\n\r\n\t this.onChangeBackMarker = function() {\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\r\n\t this.onChangeBreakpoint = function() {\r\n\t this.renderer.updateBreakpoints();\r\n\t };\r\n\r\n\t this.onChangeAnnotation = function() {\r\n\t this.renderer.setAnnotations(this.session.getAnnotations());\r\n\t };\r\n\r\n\r\n\t this.onChangeMode = function(e) {\r\n\t this.renderer.updateText();\r\n\t this._emit(\"changeMode\", e);\r\n\t };\r\n\r\n\r\n\t this.onChangeWrapLimit = function() {\r\n\t this.renderer.updateFull();\r\n\t };\r\n\r\n\t this.onChangeWrapMode = function() {\r\n\t this.renderer.onResize(true);\r\n\t };\r\n\r\n\r\n\t this.onChangeFold = function() {\r\n\t this.$updateHighlightActiveLine();\r\n\t this.renderer.updateFull();\r\n\t };\r\n\t this.getSelectedText = function() {\r\n\t return this.session.getTextRange(this.getSelectionRange());\r\n\t };\r\n\t this.getCopyText = function() {\r\n\t var text = this.getSelectedText();\r\n\t this._signal(\"copy\", text);\r\n\t return text;\r\n\t };\r\n\t this.onCopy = function() {\r\n\t this.commands.exec(\"copy\", this);\r\n\t };\r\n\t this.onCut = function() {\r\n\t this.commands.exec(\"cut\", this);\r\n\t };\r\n\t this.onPaste = function(text, event) {\r\n\t var e = {text: text, event: event};\r\n\t this.commands.exec(\"paste\", this, e);\r\n\t };\r\n\t \r\n\t this.$handlePaste = function(e) {\r\n\t if (typeof e == \"string\") \r\n\t e = {text: e};\r\n\t this._signal(\"paste\", e);\r\n\t var text = e.text;\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t this.insert(text);\r\n\t } else {\r\n\t var lines = text.split(/\\r\\n|\\r|\\n/);\r\n\t var ranges = this.selection.rangeList.ranges;\r\n\t \r\n\t if (lines.length > ranges.length || lines.length < 2 || !lines[1])\r\n\t return this.commands.exec(\"insertstring\", this, text);\r\n\t \r\n\t for (var i = ranges.length; i--;) {\r\n\t var range = ranges[i];\r\n\t if (!range.isEmpty())\r\n\t this.session.remove(range);\r\n\t \r\n\t this.session.insert(range.start, lines[i]);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.execCommand = function(command, args) {\r\n\t return this.commands.exec(command, this, args);\r\n\t };\r\n\t this.insert = function(text, pasted) {\r\n\t var session = this.session;\r\n\t var mode = session.getMode();\r\n\t var cursor = this.getCursorPosition();\r\n\r\n\t if (this.getBehavioursEnabled() && !pasted) {\r\n\t var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\r\n\t if (transform) {\r\n\t if (text !== transform.text) {\r\n\t this.session.mergeUndoDeltas = false;\r\n\t this.$mergeNextCommand = false;\r\n\t }\r\n\t text = transform.text;\r\n\r\n\t }\r\n\t }\r\n\t \r\n\t if (text == \"\\t\")\r\n\t text = this.session.getTabString();\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.getSelectionRange();\r\n\t cursor = this.session.remove(range);\r\n\t this.clearSelection();\r\n\t }\r\n\t else if (this.session.getOverwrite()) {\r\n\t var range = new Range.fromPoints(cursor, cursor);\r\n\t range.end.column += text.length;\r\n\t this.session.remove(range);\r\n\t }\r\n\r\n\t if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t var line = session.getLine(cursor.row);\r\n\t if (cursor.column > line.search(/\\S|$/)) {\r\n\t var d = line.substr(cursor.column).search(/\\S|$/);\r\n\t session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\r\n\t }\r\n\t }\r\n\t this.clearSelection();\r\n\r\n\t var start = cursor.column;\r\n\t var lineState = session.getState(cursor.row);\r\n\t var line = session.getLine(cursor.row);\r\n\t var shouldOutdent = mode.checkOutdent(lineState, line, text);\r\n\t var end = session.insert(cursor, text);\r\n\r\n\t if (transform && transform.selection) {\r\n\t if (transform.selection.length == 2) { // Transform relative to the current column\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row, start + transform.selection[0],\r\n\t cursor.row, start + transform.selection[1]));\r\n\t } else { // Transform relative to the current row.\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row + transform.selection[0],\r\n\t transform.selection[1],\r\n\t cursor.row + transform.selection[2],\r\n\t transform.selection[3]));\r\n\t }\r\n\t }\r\n\r\n\t if (session.getDocument().isNewLine(text)) {\r\n\t var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\r\n\r\n\t session.insert({row: cursor.row+1, column: 0}, lineIndent);\r\n\t }\r\n\t if (shouldOutdent)\r\n\t mode.autoOutdent(lineState, session, cursor.row);\r\n\t };\r\n\r\n\t this.onTextInput = function(text) {\r\n\t this.keyBinding.onTextInput(text);\r\n\t };\r\n\r\n\t this.onCommandKey = function(e, hashId, keyCode) {\r\n\t this.keyBinding.onCommandKey(e, hashId, keyCode);\r\n\t };\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.session.setOverwrite(overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.session.getOverwrite();\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.session.toggleOverwrite();\r\n\t };\r\n\t this.setScrollSpeed = function(speed) {\r\n\t this.setOption(\"scrollSpeed\", speed);\r\n\t };\r\n\t this.getScrollSpeed = function() {\r\n\t return this.getOption(\"scrollSpeed\");\r\n\t };\r\n\t this.setDragDelay = function(dragDelay) {\r\n\t this.setOption(\"dragDelay\", dragDelay);\r\n\t };\r\n\t this.getDragDelay = function() {\r\n\t return this.getOption(\"dragDelay\");\r\n\t };\r\n\t this.setSelectionStyle = function(val) {\r\n\t this.setOption(\"selectionStyle\", val);\r\n\t };\r\n\t this.getSelectionStyle = function() {\r\n\t return this.getOption(\"selectionStyle\");\r\n\t };\r\n\t this.setHighlightActiveLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightActiveLine\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightActiveLine = function() {\r\n\t return this.getOption(\"highlightActiveLine\");\r\n\t };\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\t this.setHighlightSelectedWord = function(shouldHighlight) {\r\n\t this.setOption(\"highlightSelectedWord\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightSelectedWord = function() {\r\n\t return this.$highlightSelectedWord;\r\n\t };\r\n\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.renderer.setAnimatedScroll(shouldAnimate);\r\n\t };\r\n\r\n\t this.getAnimatedScroll = function(){\r\n\t return this.renderer.getAnimatedScroll();\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.renderer.setShowInvisibles(showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.renderer.getShowInvisibles();\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.renderer.setDisplayIndentGuides(display);\r\n\t };\r\n\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.renderer.getDisplayIndentGuides();\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.renderer.setShowPrintMargin(showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.renderer.getShowPrintMargin();\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.renderer.setPrintMarginColumn(showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.renderer.getPrintMarginColumn();\r\n\t };\r\n\t this.setReadOnly = function(readOnly) {\r\n\t this.setOption(\"readOnly\", readOnly);\r\n\t };\r\n\t this.getReadOnly = function() {\r\n\t return this.getOption(\"readOnly\");\r\n\t };\r\n\t this.setBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"behavioursEnabled\", enabled);\r\n\t };\r\n\t this.getBehavioursEnabled = function () {\r\n\t return this.getOption(\"behavioursEnabled\");\r\n\t };\r\n\t this.setWrapBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"wrapBehavioursEnabled\", enabled);\r\n\t };\r\n\t this.getWrapBehavioursEnabled = function () {\r\n\t return this.getOption(\"wrapBehavioursEnabled\");\r\n\t };\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t this.setOption(\"showFoldWidgets\", show);\r\n\r\n\t };\r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.getOption(\"showFoldWidgets\");\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(fade) {\r\n\t this.setOption(\"fadeFoldWidgets\", fade);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function() {\r\n\t return this.getOption(\"fadeFoldWidgets\");\r\n\t };\r\n\t this.remove = function(dir) {\r\n\t if (this.selection.isEmpty()){\r\n\t if (dir == \"left\")\r\n\t this.selection.selectLeft();\r\n\t else\r\n\t this.selection.selectRight();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (this.getBehavioursEnabled()) {\r\n\t var session = this.session;\r\n\t var state = session.getState(range.start.row);\r\n\t var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\r\n\r\n\t if (range.end.column === 0) {\r\n\t var text = session.getTextRange(range);\r\n\t if (text[text.length - 1] == \"\\n\") {\r\n\t var line = session.getLine(range.end.row);\r\n\t if (/^\\s+$/.test(line)) {\r\n\t range.end.column = line.length;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (new_range)\r\n\t range = new_range;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordRight = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordRight();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordLeft = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordLeft();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineStart = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineStart();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineEnd = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineEnd();\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (range.start.column == range.end.column && range.start.row == range.end.row) {\r\n\t range.end.column = 0;\r\n\t range.end.row++;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.splitLine = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t this.insert(\"\\n\");\r\n\t this.moveCursorToPosition(cursor);\r\n\t };\r\n\t this.transposeLetters = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t return;\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t var column = cursor.column;\r\n\t if (column === 0)\r\n\t return;\r\n\r\n\t var line = this.session.getLine(cursor.row);\r\n\t var swap, range;\r\n\t if (column < line.length) {\r\n\t swap = line.charAt(column) + line.charAt(column-1);\r\n\t range = new Range(cursor.row, column-1, cursor.row, column+1);\r\n\t }\r\n\t else {\r\n\t swap = line.charAt(column-1) + line.charAt(column-2);\r\n\t range = new Range(cursor.row, column-2, cursor.row, column);\r\n\t }\r\n\t this.session.replace(range, swap);\r\n\t };\r\n\t this.toLowerCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toLowerCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.toUpperCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toUpperCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.indent = function() {\r\n\t var session = this.session;\r\n\t var range = this.getSelectionRange();\r\n\r\n\t if (range.start.row < range.end.row) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t } else if (range.start.column < range.end.column) {\r\n\t var text = session.getTextRange(range);\r\n\t if (!/^\\s+$/.test(text)) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var line = session.getLine(range.start.row);\r\n\t var position = range.start;\r\n\t var size = session.getTabSize();\r\n\t var column = session.documentToScreenColumn(position.row, position.column);\r\n\r\n\t if (this.session.getUseSoftTabs()) {\r\n\t var count = (size - column % size);\r\n\t var indentString = lang.stringRepeat(\" \", count);\r\n\t } else {\r\n\t var count = column % size;\r\n\t while (line[range.start.column] == \" \" && count) {\r\n\t range.start.column--;\r\n\t count--;\r\n\t }\r\n\t this.selection.setSelectionRange(range);\r\n\t indentString = \"\\t\";\r\n\t }\r\n\t return this.insert(indentString);\r\n\t };\r\n\t this.blockIndent = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t };\r\n\t this.blockOutdent = function() {\r\n\t var selection = this.session.getSelection();\r\n\t this.session.outdentRows(selection.getRange());\r\n\t };\r\n\t this.sortLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t var session = this.session;\r\n\r\n\t var lines = [];\r\n\t for (i = rows.first; i <= rows.last; i++)\r\n\t lines.push(session.getLine(i));\r\n\r\n\t lines.sort(function(a, b) {\r\n\t if (a.toLowerCase() < b.toLowerCase()) return -1;\r\n\t if (a.toLowerCase() > b.toLowerCase()) return 1;\r\n\t return 0;\r\n\t });\r\n\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t for (var i = rows.first; i <= rows.last; i++) {\r\n\t var line = session.getLine(i);\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t deleteRange.end.column = line.length;\r\n\t session.replace(deleteRange, lines[i-rows.first]);\r\n\t }\r\n\t };\r\n\t this.toggleCommentLines = function() {\r\n\t var state = this.session.getState(this.getCursorPosition().row);\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function() {\r\n\t var cursor = this.getCursorPosition();\r\n\t var state = this.session.getState(cursor.row);\r\n\t var range = this.getSelectionRange();\r\n\t this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\r\n\t };\r\n\t this.getNumberAt = function(row, column) {\r\n\t var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\r\n\t _numberRx.lastIndex = 0;\r\n\r\n\t var s = this.session.getLine(row);\r\n\t while (_numberRx.lastIndex < column) {\r\n\t var m = _numberRx.exec(s);\r\n\t if(m.index <= column && m.index+m[0].length >= column){\r\n\t var number = {\r\n\t value: m[0],\r\n\t start: m.index,\r\n\t end: m.index+m[0].length\r\n\t };\r\n\t return number;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.modifyNumber = function(amount) {\r\n\t var row = this.selection.getCursor().row;\r\n\t var column = this.selection.getCursor().column;\r\n\t var charRange = new Range(row, column-1, row, column);\r\n\r\n\t var c = this.session.getTextRange(charRange);\r\n\t if (!isNaN(parseFloat(c)) && isFinite(c)) {\r\n\t var nr = this.getNumberAt(row, column);\r\n\t if (nr) {\r\n\t var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\r\n\t var decimals = nr.start + nr.value.length - fp;\r\n\r\n\t var t = parseFloat(nr.value);\r\n\t t *= Math.pow(10, decimals);\r\n\r\n\r\n\t if(fp !== nr.end && column < fp){\r\n\t amount *= Math.pow(10, nr.end - column - 1);\r\n\t } else {\r\n\t amount *= Math.pow(10, nr.end - column);\r\n\t }\r\n\r\n\t t += amount;\r\n\t t /= Math.pow(10, decimals);\r\n\t var nnr = t.toFixed(decimals);\r\n\t var replaceRange = new Range(row, nr.start, row, nr.end);\r\n\t this.session.replace(replaceRange, nnr);\r\n\t this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\r\n\r\n\t }\r\n\t }\r\n\t };\r\n\t this.removeLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.removeFullLines(rows.first, rows.last);\r\n\t this.clearSelection();\r\n\t };\r\n\r\n\t this.duplicateSelection = function() {\r\n\t var sel = this.selection;\r\n\t var doc = this.session;\r\n\t var range = sel.getRange();\r\n\t var reverse = sel.isBackwards();\r\n\t if (range.isEmpty()) {\r\n\t var row = range.start.row;\r\n\t doc.duplicateLines(row, row);\r\n\t } else {\r\n\t var point = reverse ? range.start : range.end;\r\n\t var endPoint = doc.insert(point, doc.getTextRange(range), false);\r\n\t range.start = point;\r\n\t range.end = endPoint;\r\n\r\n\t sel.setSelectionRange(range, reverse);\r\n\t }\r\n\t };\r\n\t this.moveLinesDown = function() {\r\n\t this.$moveLines(1, false);\r\n\t };\r\n\t this.moveLinesUp = function() {\r\n\t this.$moveLines(-1, false);\r\n\t };\r\n\t this.moveText = function(range, toPosition, copy) {\r\n\t return this.session.moveText(range, toPosition, copy);\r\n\t };\r\n\t this.copyLinesUp = function() {\r\n\t this.$moveLines(-1, true);\r\n\t };\r\n\t this.copyLinesDown = function() {\r\n\t this.$moveLines(1, true);\r\n\t };\r\n\t this.$moveLines = function(dir, copy) {\r\n\t var rows, moved;\r\n\t var selection = this.selection;\r\n\t if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t var range = selection.toOrientedRange();\r\n\t rows = this.$getSelectedRows(range);\r\n\t moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) moved = 0;\r\n\t range.moveBy(moved, 0);\r\n\t selection.fromOrientedRange(range);\r\n\t } else {\r\n\t var ranges = selection.rangeList.ranges;\r\n\t selection.rangeList.detach(this.session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t \r\n\t var diff = 0;\r\n\t var totalDiff = 0;\r\n\t var l = ranges.length;\r\n\t for (var i = 0; i < l; i++) {\r\n\t var rangeIndex = i;\r\n\t ranges[i].moveBy(diff, 0);\r\n\t rows = this.$getSelectedRows(ranges[i]);\r\n\t var first = rows.first;\r\n\t var last = rows.last;\r\n\t while (++i < l) {\r\n\t if (totalDiff) ranges[i].moveBy(totalDiff, 0);\r\n\t var subRows = this.$getSelectedRows(ranges[i]);\r\n\t if (copy && subRows.first != last)\r\n\t break;\r\n\t else if (!copy && subRows.first > last + 1)\r\n\t break;\r\n\t last = subRows.last;\r\n\t }\r\n\t i--;\r\n\t diff = this.session.$moveLines(first, last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) rangeIndex = i + 1;\r\n\t while (rangeIndex <= i) {\r\n\t ranges[rangeIndex].moveBy(diff, 0);\r\n\t rangeIndex++;\r\n\t }\r\n\t if (!copy) diff = 0;\r\n\t totalDiff += diff;\r\n\t }\r\n\t \r\n\t selection.fromOrientedRange(selection.ranges[0]);\r\n\t selection.rangeList.attach(this.session);\r\n\t this.inVirtualSelectionMode = false;\r\n\t }\r\n\t };\r\n\t this.$getSelectedRows = function(range) {\r\n\t range = (range || this.getSelectionRange()).collapseRows();\r\n\r\n\t return {\r\n\t first: this.session.getRowFoldStart(range.start.row),\r\n\t last: this.session.getRowFoldEnd(range.end.row)\r\n\t };\r\n\t };\r\n\r\n\t this.onCompositionStart = function(text) {\r\n\t this.renderer.showComposition(this.getCursorPosition());\r\n\t };\r\n\r\n\t this.onCompositionUpdate = function(text) {\r\n\t this.renderer.setCompositionText(text);\r\n\t };\r\n\r\n\t this.onCompositionEnd = function() {\r\n\t this.renderer.hideComposition();\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.renderer.getFirstVisibleRow();\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.renderer.getLastVisibleRow();\r\n\t };\r\n\t this.isRowVisible = function(row) {\r\n\t return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\r\n\t };\r\n\t this.isRowFullyVisible = function(row) {\r\n\t return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\r\n\t };\r\n\t this.$getVisibleRowCount = function() {\r\n\t return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\r\n\t };\r\n\r\n\t this.$moveByPage = function(dir, select) {\r\n\t var renderer = this.renderer;\r\n\t var config = this.renderer.layerConfig;\r\n\t var rows = dir * Math.floor(config.height / config.lineHeight);\r\n\r\n\t this.$blockScrolling++;\r\n\t if (select === true) {\r\n\t this.selection.$moveSelection(function(){\r\n\t this.moveCursorBy(rows, 0);\r\n\t });\r\n\t } else if (select === false) {\r\n\t this.selection.moveCursorBy(rows, 0);\r\n\t this.selection.clearSelection();\r\n\t }\r\n\t this.$blockScrolling--;\r\n\r\n\t var scrollTop = renderer.scrollTop;\r\n\r\n\t renderer.scrollBy(0, rows * config.lineHeight);\r\n\t if (select != null)\r\n\t renderer.scrollCursorIntoView(null, 0.5);\r\n\r\n\t renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.selectPageDown = function() {\r\n\t this.$moveByPage(1, true);\r\n\t };\r\n\t this.selectPageUp = function() {\r\n\t this.$moveByPage(-1, true);\r\n\t };\r\n\t this.gotoPageDown = function() {\r\n\t this.$moveByPage(1, false);\r\n\t };\r\n\t this.gotoPageUp = function() {\r\n\t this.$moveByPage(-1, false);\r\n\t };\r\n\t this.scrollPageDown = function() {\r\n\t this.$moveByPage(1);\r\n\t };\r\n\t this.scrollPageUp = function() {\r\n\t this.$moveByPage(-1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.renderer.scrollToRow(row);\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t this.renderer.scrollToLine(line, center, animate, callback);\r\n\t };\r\n\t this.centerSelection = function() {\r\n\t var range = this.getSelectionRange();\r\n\t var pos = {\r\n\t row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\r\n\t column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\r\n\t };\r\n\t this.renderer.alignCursor(pos, 0.5);\r\n\t };\r\n\t this.getCursorPosition = function() {\r\n\t return this.selection.getCursor();\r\n\t };\r\n\t this.getCursorPositionScreen = function() {\r\n\t return this.session.documentToScreenPosition(this.getCursorPosition());\r\n\t };\r\n\t this.getSelectionRange = function() {\r\n\t return this.selection.getRange();\r\n\t };\r\n\t this.selectAll = function() {\r\n\t this.$blockScrolling += 1;\r\n\t this.selection.selectAll();\r\n\t this.$blockScrolling -= 1;\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t this.selection.clearSelection();\r\n\t };\r\n\t this.moveCursorTo = function(row, column) {\r\n\t this.selection.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorToPosition = function(pos) {\r\n\t this.selection.moveCursorToPosition(pos);\r\n\t };\r\n\t this.jumpToMatching = function(select, expand) {\r\n\t var cursor = this.getCursorPosition();\r\n\t var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\r\n\t var prevToken = iterator.getCurrentToken();\r\n\t var token = prevToken || iterator.stepForward();\r\n\r\n\t if (!token) return;\r\n\t var matchType;\r\n\t var found = false;\r\n\t var depth = {};\r\n\t var i = cursor.column - token.start;\r\n\t var bracketType;\r\n\t var brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \"(\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"[\",\r\n\t \"{\": \"{\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\t \r\n\t do {\r\n\t if (token.value.match(/[{}()\\[\\]]/g)) {\r\n\t for (; i < token.value.length && !found; i++) {\r\n\t if (!brackets[token.value[i]]) {\r\n\t continue;\r\n\t }\r\n\r\n\t bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\r\n\r\n\t if (isNaN(depth[bracketType])) {\r\n\t depth[bracketType] = 0;\r\n\t }\r\n\r\n\t switch (token.value[i]) {\r\n\t case '(':\r\n\t case '[':\r\n\t case '{':\r\n\t depth[bracketType]++;\r\n\t break;\r\n\t case ')':\r\n\t case ']':\r\n\t case '}':\r\n\t depth[bracketType]--;\r\n\r\n\t if (depth[bracketType] === -1) {\r\n\t matchType = 'bracket';\r\n\t found = true;\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (token && token.type.indexOf('tag-name') !== -1) {\r\n\t if (isNaN(depth[token.value])) {\r\n\t depth[token.value] = 0;\r\n\t }\r\n\t \r\n\t if (prevToken.value === '<') {\r\n\t depth[token.value]++;\r\n\t }\r\n\t else if (prevToken.value === '= 0; --i) {\r\n\t if(this.$tryReplace(ranges[i], replacement)) {\r\n\t replaced++;\r\n\t }\r\n\t }\r\n\r\n\t this.selection.setSelectionRange(selection);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return replaced;\r\n\t };\r\n\r\n\t this.$tryReplace = function(range, replacement) {\r\n\t var input = this.session.getTextRange(range);\r\n\t replacement = this.$search.replace(input, replacement);\r\n\t if (replacement !== null) {\r\n\t range.end = this.session.replace(range, replacement);\r\n\t return range;\r\n\t } else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t this.getLastSearchOptions = function() {\r\n\t return this.$search.getOptions();\r\n\t };\r\n\t this.find = function(needle, options, animate) {\r\n\t if (!options)\r\n\t options = {};\r\n\r\n\t if (typeof needle == \"string\" || needle instanceof RegExp)\r\n\t options.needle = needle;\r\n\t else if (typeof needle == \"object\")\r\n\t oop.mixin(options, needle);\r\n\r\n\t var range = this.selection.getRange();\r\n\t if (options.needle == null) {\r\n\t needle = this.session.getTextRange(range)\r\n\t || this.$search.$options.needle;\r\n\t if (!needle) {\r\n\t range = this.session.getWordRange(range.start.row, range.start.column);\r\n\t needle = this.session.getTextRange(range);\r\n\t }\r\n\t this.$search.set({needle: needle});\r\n\t }\r\n\r\n\t this.$search.set(options);\r\n\t if (!options.start)\r\n\t this.$search.set({start: range});\r\n\r\n\t var newRange = this.$search.find(this.session);\r\n\t if (options.preventScroll)\r\n\t return newRange;\r\n\t if (newRange) {\r\n\t this.revealRange(newRange, animate);\r\n\t return newRange;\r\n\t }\r\n\t if (options.backwards)\r\n\t range.start = range.end;\r\n\t else\r\n\t range.end = range.start;\r\n\t this.selection.setRange(range);\r\n\t };\r\n\t this.findNext = function(options, animate) {\r\n\t this.find({skipCurrent: true, backwards: false}, options, animate);\r\n\t };\r\n\t this.findPrevious = function(options, animate) {\r\n\t this.find(options, {skipCurrent: true, backwards: true}, animate);\r\n\t };\r\n\r\n\t this.revealRange = function(range, animate) {\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(range);\r\n\t this.selection.setSelectionRange(range);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t var scrollTop = this.renderer.scrollTop;\r\n\t this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\r\n\t if (animate !== false)\r\n\t this.renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.undo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().undo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.redo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().redo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.renderer.destroy();\r\n\t this._signal(\"destroy\", this);\r\n\t if (this.session) {\r\n\t this.session.destroy();\r\n\t }\r\n\t };\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (!enable)\r\n\t return;\r\n\t var rect;\r\n\t var self = this;\r\n\t var shouldScroll = false;\r\n\t if (!this.$scrollAnchor)\r\n\t this.$scrollAnchor = document.createElement(\"div\");\r\n\t var scrollAnchor = this.$scrollAnchor;\r\n\t scrollAnchor.style.cssText = \"position:absolute\";\r\n\t this.container.insertBefore(scrollAnchor, this.container.firstChild);\r\n\t var onChangeSelection = this.on(\"changeSelection\", function() {\r\n\t shouldScroll = true;\r\n\t });\r\n\t var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\r\n\t if (shouldScroll)\r\n\t rect = self.renderer.container.getBoundingClientRect();\r\n\t });\r\n\t var onAfterRender = this.renderer.on(\"afterRender\", function() {\r\n\t if (shouldScroll && rect && (self.isFocused()\r\n\t || self.searchBox && self.searchBox.isFocused())\r\n\t ) {\r\n\t var renderer = self.renderer;\r\n\t var pos = renderer.$cursorLayer.$pixelPos;\r\n\t var config = renderer.layerConfig;\r\n\t var top = pos.top - config.offset;\r\n\t if (pos.top >= 0 && top + rect.top < 0) {\r\n\t shouldScroll = true;\r\n\t } else if (pos.top < config.height &&\r\n\t pos.top + rect.top + config.lineHeight > window.innerHeight) {\r\n\t shouldScroll = false;\r\n\t } else {\r\n\t shouldScroll = null;\r\n\t }\r\n\t if (shouldScroll != null) {\r\n\t scrollAnchor.style.top = top + \"px\";\r\n\t scrollAnchor.style.left = pos.left + \"px\";\r\n\t scrollAnchor.style.height = config.lineHeight + \"px\";\r\n\t scrollAnchor.scrollIntoView(shouldScroll);\r\n\t }\r\n\t shouldScroll = rect = null;\r\n\t }\r\n\t });\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (enable)\r\n\t return;\r\n\t delete this.setAutoScrollEditorIntoView;\r\n\t this.off(\"changeSelection\", onChangeSelection);\r\n\t this.renderer.off(\"afterRender\", onAfterRender);\r\n\t this.renderer.off(\"beforeRender\", onBeforeRender);\r\n\t };\r\n\t };\r\n\r\n\r\n\t this.$resetCursorStyle = function() {\r\n\t var style = this.$cursorStyle || \"ace\";\r\n\t var cursorLayer = this.renderer.$cursorLayer;\r\n\t if (!cursorLayer)\r\n\t return;\r\n\t cursorLayer.setSmoothBlinking(/smooth/.test(style));\r\n\t cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\r\n\t dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\r\n\t };\r\n\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\r\n\tconfig.defineOptions(Editor.prototype, \"editor\", {\r\n\t selectionStyle: {\r\n\t set: function(style) {\r\n\t this.onSelectionChange();\r\n\t this._signal(\"changeSelectionStyle\", {data: style});\r\n\t },\r\n\t initialValue: \"line\"\r\n\t },\r\n\t highlightActiveLine: {\r\n\t set: function() {this.$updateHighlightActiveLine();},\r\n\t initialValue: true\r\n\t },\r\n\t highlightSelectedWord: {\r\n\t set: function(shouldHighlight) {this.$onSelectionChange();},\r\n\t initialValue: true\r\n\t },\r\n\t readOnly: {\r\n\t set: function(readOnly) {\r\n\t this.$resetCursorStyle(); \r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t cursorStyle: {\r\n\t set: function(val) { this.$resetCursorStyle(); },\r\n\t values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\r\n\t initialValue: \"ace\"\r\n\t },\r\n\t mergeUndoDeltas: {\r\n\t values: [false, true, \"always\"],\r\n\t initialValue: true\r\n\t },\r\n\t behavioursEnabled: {initialValue: true},\r\n\t wrapBehavioursEnabled: {initialValue: true},\r\n\t autoScrollEditorIntoView: {\r\n\t set: function(val) {this.setAutoScrollEditorIntoView(val)}\r\n\t },\r\n\t keyboardHandler: {\r\n\t set: function(val) { this.setKeyboardHandler(val); },\r\n\t get: function() { return this.keybindingId; },\r\n\t handlesSet: true\r\n\t },\r\n\r\n\t hScrollBarAlwaysVisible: \"renderer\",\r\n\t vScrollBarAlwaysVisible: \"renderer\",\r\n\t highlightGutterLine: \"renderer\",\r\n\t animatedScroll: \"renderer\",\r\n\t showInvisibles: \"renderer\",\r\n\t showPrintMargin: \"renderer\",\r\n\t printMarginColumn: \"renderer\",\r\n\t printMargin: \"renderer\",\r\n\t fadeFoldWidgets: \"renderer\",\r\n\t showFoldWidgets: \"renderer\",\r\n\t showLineNumbers: \"renderer\",\r\n\t showGutter: \"renderer\",\r\n\t displayIndentGuides: \"renderer\",\r\n\t fontSize: \"renderer\",\r\n\t fontFamily: \"renderer\",\r\n\t maxLines: \"renderer\",\r\n\t minLines: \"renderer\",\r\n\t scrollPastEnd: \"renderer\",\r\n\t fixedWidthGutter: \"renderer\",\r\n\t theme: \"renderer\",\r\n\r\n\t scrollSpeed: \"$mouseHandler\",\r\n\t dragDelay: \"$mouseHandler\",\r\n\t dragEnabled: \"$mouseHandler\",\r\n\t focusTimout: \"$mouseHandler\",\r\n\t tooltipFollowsMouse: \"$mouseHandler\",\r\n\r\n\t firstLineNumber: \"session\",\r\n\t overwrite: \"session\",\r\n\t newLineMode: \"session\",\r\n\t useWorker: \"session\",\r\n\t useSoftTabs: \"session\",\r\n\t tabSize: \"session\",\r\n\t wrap: \"session\",\r\n\t indentedSoftWrap: \"session\",\r\n\t foldStyle: \"session\",\r\n\t mode: \"session\"\r\n\t});\r\n\r\n\texports.Editor = Editor;\r\n\t});\r\n\r\n\tace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar UndoManager = function() {\r\n\t this.reset();\r\n\t};\r\n\r\n\t(function() {\r\n\t this.execute = function(options) {\r\n\t var deltaSets = options.args[0];\r\n\t this.$doc = options.args[1];\r\n\t if (options.merge && this.hasUndo()){\r\n\t this.dirtyCounter--;\r\n\t deltaSets = this.$undoStack.pop().concat(deltaSets);\r\n\t }\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.$redoStack = [];\r\n\t if (this.dirtyCounter < 0) {\r\n\t this.dirtyCounter = NaN;\r\n\t }\r\n\t this.dirtyCounter++;\r\n\t };\r\n\t this.undo = function(dontSelect) {\r\n\t var deltaSets = this.$undoStack.pop();\r\n\t var undoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\r\n\t this.$redoStack.push(deltaSets);\r\n\t this.dirtyCounter--;\r\n\t }\r\n\r\n\t return undoSelectionRange;\r\n\t };\r\n\t this.redo = function(dontSelect) {\r\n\t var deltaSets = this.$redoStack.pop();\r\n\t var redoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t redoSelectionRange =\r\n\t this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.dirtyCounter++;\r\n\t }\r\n\t return redoSelectionRange;\r\n\t };\r\n\t this.reset = function() {\r\n\t this.$undoStack = [];\r\n\t this.$redoStack = [];\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.hasUndo = function() {\r\n\t return this.$undoStack.length > 0;\r\n\t };\r\n\t this.hasRedo = function() {\r\n\t return this.$redoStack.length > 0;\r\n\t };\r\n\t this.markClean = function() {\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.isClean = function() {\r\n\t return this.dirtyCounter === 0;\r\n\t };\r\n\t this.$serializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $serializeDelta);\r\n\t };\r\n\t this.$deserializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\r\n\t };\r\n\t \r\n\t function $serializeDelta(delta){\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines.length == 1 ? null : delta.lines,\r\n\t text: delta.lines.length == 1 ? delta.lines[0] : null\r\n\t };\r\n\t }\r\n\t \r\n\t function $deserializeDelta(delta) {\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines || [delta.text]\r\n\t };\r\n\t }\r\n\t \r\n\t function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\r\n\t var deltaSets_new = new Array(deltaSets_old.length);\r\n\t for (var i = 0; i < deltaSets_old.length; i++) {\r\n\t var deltaSet_old = deltaSets_old[i];\r\n\t var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\r\n\t \r\n\t for (var j = 0; j < deltaSet_old.deltas.length; j++) {\r\n\t var delta_old = deltaSet_old.deltas[j];\r\n\t deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\r\n\t }\r\n\t \r\n\t deltaSets_new[i] = deltaSet_new;\r\n\t }\r\n\t return deltaSets_new;\r\n\t }\r\n\t \r\n\t}).call(UndoManager.prototype);\r\n\r\n\texports.UndoManager = UndoManager;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Gutter = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_gutter-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.setShowFoldWidgets(this.$showFoldWidgets);\r\n\t \r\n\t this.gutterWidth = 0;\r\n\r\n\t this.$annotations = [];\r\n\t this.$updateAnnotations = this.$updateAnnotations.bind(this);\r\n\r\n\t this.$cells = [];\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.removeEventListener(\"change\", this.$updateAnnotations);\r\n\t this.session = session;\r\n\t if (session)\r\n\t session.on(\"change\", this.$updateAnnotations);\r\n\t };\r\n\r\n\t this.addGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\r\n\t this.session.addGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\r\n\t this.session.removeGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$annotations = [];\r\n\t for (var i = 0; i < annotations.length; i++) {\r\n\t var annotation = annotations[i];\r\n\t var row = annotation.row;\r\n\t var rowInfo = this.$annotations[row];\r\n\t if (!rowInfo)\r\n\t rowInfo = this.$annotations[row] = {text: []};\r\n\t \r\n\t var annoText = annotation.text;\r\n\t annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\r\n\r\n\t if (rowInfo.text.indexOf(annoText) === -1)\r\n\t rowInfo.text.push(annoText);\r\n\r\n\t var type = annotation.type;\r\n\t if (type == \"error\")\r\n\t rowInfo.className = \" ace_error\";\r\n\t else if (type == \"warning\" && rowInfo.className != \" ace_error\")\r\n\t rowInfo.className = \" ace_warning\";\r\n\t else if (type == \"info\" && (!rowInfo.className))\r\n\t rowInfo.className = \" ace_info\";\r\n\t }\r\n\t };\r\n\r\n\t this.$updateAnnotations = function (delta) {\r\n\t if (!this.$annotations.length)\r\n\t return;\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t this.$annotations.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = new Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.$annotations.splice.apply(this.$annotations, args);\r\n\t }\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var session = this.session;\r\n\t var firstRow = config.firstRow;\r\n\t var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\r\n\t session.getLength() - 1);\r\n\t var fold = session.getNextFoldLine(firstRow);\r\n\t var foldStart = fold ? fold.start.row : Infinity;\r\n\t var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\r\n\t var breakpoints = session.$breakpoints;\r\n\t var decorations = session.$decorations;\r\n\t var firstLineNumber = session.$firstLineNumber;\r\n\t var lastLineNumber = 0;\r\n\t \r\n\t var gutterRenderer = session.gutterRenderer || this.$renderer;\r\n\r\n\t var cell = null;\r\n\t var index = -1;\r\n\t var row = firstRow;\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row + 1;\r\n\t fold = session.getNextFoldLine(row, fold);\r\n\t foldStart = fold ? fold.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow) {\r\n\t while (this.$cells.length > index + 1) {\r\n\t cell = this.$cells.pop();\r\n\t this.element.removeChild(cell.element);\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t cell = this.$cells[++index];\r\n\t if (!cell) {\r\n\t cell = {element: null, textNode: null, foldWidget: null};\r\n\t cell.element = dom.createElement(\"div\");\r\n\t cell.textNode = document.createTextNode('');\r\n\t cell.element.appendChild(cell.textNode);\r\n\t this.element.appendChild(cell.element);\r\n\t this.$cells[index] = cell;\r\n\t }\r\n\r\n\t var className = \"ace_gutter-cell \";\r\n\t if (breakpoints[row])\r\n\t className += breakpoints[row];\r\n\t if (decorations[row])\r\n\t className += decorations[row];\r\n\t if (this.$annotations[row])\r\n\t className += this.$annotations[row].className;\r\n\t if (cell.element.className != className)\r\n\t cell.element.className = className;\r\n\r\n\t var height = session.getRowLength(row) * config.lineHeight + \"px\";\r\n\t if (height != cell.element.style.height)\r\n\t cell.element.style.height = height;\r\n\r\n\t if (foldWidgets) {\r\n\t var c = foldWidgets[row];\r\n\t if (c == null)\r\n\t c = foldWidgets[row] = session.getFoldWidget(row);\r\n\t }\r\n\r\n\t if (c) {\r\n\t if (!cell.foldWidget) {\r\n\t cell.foldWidget = dom.createElement(\"span\");\r\n\t cell.element.appendChild(cell.foldWidget);\r\n\t }\r\n\t var className = \"ace_fold-widget ace_\" + c;\r\n\t if (c == \"start\" && row == foldStart && row < fold.end.row)\r\n\t className += \" ace_closed\";\r\n\t else\r\n\t className += \" ace_open\";\r\n\t if (cell.foldWidget.className != className)\r\n\t cell.foldWidget.className = className;\r\n\r\n\t var height = config.lineHeight + \"px\";\r\n\t if (cell.foldWidget.style.height != height)\r\n\t cell.foldWidget.style.height = height;\r\n\t } else {\r\n\t if (cell.foldWidget) {\r\n\t cell.element.removeChild(cell.foldWidget);\r\n\t cell.foldWidget = null;\r\n\t }\r\n\t }\r\n\t \r\n\t var text = lastLineNumber = gutterRenderer\r\n\t ? gutterRenderer.getText(session, row)\r\n\t : row + firstLineNumber;\r\n\t if (text != cell.textNode.data)\r\n\t cell.textNode.data = text;\r\n\r\n\t row++;\r\n\t }\r\n\r\n\t this.element.style.height = config.minHeight + \"px\";\r\n\r\n\t if (this.$fixedWidth || session.$useWrapMode)\r\n\t lastLineNumber = session.getLength() + firstLineNumber;\r\n\r\n\t var gutterWidth = gutterRenderer \r\n\t ? gutterRenderer.getWidth(session, lastLineNumber, config)\r\n\t : lastLineNumber.toString().length * config.characterWidth;\r\n\t \r\n\t var padding = this.$padding || this.$computePadding();\r\n\t gutterWidth += padding.left + padding.right;\r\n\t if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\r\n\t this.gutterWidth = gutterWidth;\r\n\t this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\r\n\t this._emit(\"changeGutterWidth\", gutterWidth);\r\n\t }\r\n\t };\r\n\r\n\t this.$fixedWidth = false;\r\n\t \r\n\t this.$showLineNumbers = true;\r\n\t this.$renderer = \"\";\r\n\t this.setShowLineNumbers = function(show) {\r\n\t this.$renderer = !show && {\r\n\t getWidth: function() {return \"\"},\r\n\t getText: function() {return \"\"}\r\n\t };\r\n\t };\r\n\t \r\n\t this.getShowLineNumbers = function() {\r\n\t return this.$showLineNumbers;\r\n\t };\r\n\t \r\n\t this.$showFoldWidgets = true;\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t if (show)\r\n\t dom.addCssClass(this.element, \"ace_folding-enabled\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_folding-enabled\");\r\n\r\n\t this.$showFoldWidgets = show;\r\n\t this.$padding = null;\r\n\t };\r\n\t \r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.$showFoldWidgets;\r\n\t };\r\n\r\n\t this.$computePadding = function() {\r\n\t if (!this.element.firstChild)\r\n\t return {left: 0, right: 0};\r\n\t var style = dom.computedStyle(this.element.firstChild);\r\n\t this.$padding = {};\r\n\t this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\r\n\t this.$padding.right = parseInt(style.paddingRight) || 0;\r\n\t return this.$padding;\r\n\t };\r\n\r\n\t this.getRegion = function(point) {\r\n\t var padding = this.$padding || this.$computePadding();\r\n\t var rect = this.element.getBoundingClientRect();\r\n\t if (point.x < padding.left + rect.left)\r\n\t return \"markers\";\r\n\t if (this.$showFoldWidgets && point.x > rect.right - padding.right)\r\n\t return \"foldWidgets\";\r\n\t };\r\n\r\n\t}).call(Gutter.prototype);\r\n\r\n\texports.Gutter = Gutter;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\r\n\tvar Marker = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_marker-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.$padding = 0;\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\t \r\n\t this.setMarkers = function(markers) {\r\n\t this.markers = markers;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var config = config || this.config;\r\n\t if (!config)\r\n\t return;\r\n\r\n\t this.config = config;\r\n\r\n\r\n\t var html = [];\r\n\t for (var key in this.markers) {\r\n\t var marker = this.markers[key];\r\n\r\n\t if (!marker.range) {\r\n\t marker.update(html, this, this.session, config);\r\n\t continue;\r\n\t }\r\n\r\n\t var range = marker.range.clipRows(config.firstRow, config.lastRow);\r\n\t if (range.isEmpty()) continue;\r\n\r\n\t range = range.toScreenRange(this.session);\r\n\t if (marker.renderer) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\t marker.renderer(html, range, left, top, config);\r\n\t } else if (marker.type == \"fullLine\") {\r\n\t this.drawFullLineMarker(html, range, marker.clazz, config);\r\n\t } else if (marker.type == \"screenLine\") {\r\n\t this.drawScreenLineMarker(html, range, marker.clazz, config);\r\n\t } else if (range.isMultiLine()) {\r\n\t if (marker.type == \"text\")\r\n\t this.drawTextMarker(html, range, marker.clazz, config);\r\n\t else\r\n\t this.drawMultiLineMarker(html, range, marker.clazz, config);\r\n\t } else {\r\n\t this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\r\n\t }\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$getTop = function(row, layerConfig) {\r\n\t return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\r\n\t };\r\n\r\n\t function getBorderClass(tl, tr, br, bl) {\r\n\t return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\r\n\t }\r\n\t this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\r\n\t var session = this.session;\r\n\t var start = range.start.row;\r\n\t var end = range.end.row;\r\n\t var row = start;\r\n\t var prev = 0; \r\n\t var curr = 0;\r\n\t var next = session.getScreenLastRowColumn(row);\r\n\t var lineRange = new Range(row, range.start.column, row, curr);\r\n\t for (; row <= end; row++) {\r\n\t lineRange.start.row = lineRange.end.row = row;\r\n\t lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\r\n\t lineRange.end.column = next;\r\n\t prev = curr;\r\n\t curr = next;\r\n\t next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\r\n\t this.drawSingleLineMarker(stringBuilder, lineRange, \r\n\t clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\r\n\t + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\r\n\t layerConfig, row == end ? 0 : 1, extraStyle);\r\n\t }\r\n\t };\r\n\t this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var padding = this.$padding;\r\n\t var height = config.lineHeight;\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = padding + range.start.column * config.characterWidth;\r\n\t extraStyle = extraStyle || \"\";\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t top = this.$getTop(range.end.row, config);\r\n\t var width = range.end.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t height = (range.end.row - range.start.row - 1) * config.lineHeight;\r\n\t if (height <= 0)\r\n\t return;\r\n\t top = this.$getTop(range.start.row + 1, config);\r\n\t \r\n\t var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\t this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\r\n\t var height = config.lineHeight;\r\n\t var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\r\n\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\r\n\t this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\t if (range.start.row != range.end.row)\r\n\t height += this.$getTop(range.end.row, config) - top;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\t \r\n\t this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t };\r\n\r\n\t}).call(Marker.prototype);\r\n\r\n\texports.Marker = Marker;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Text = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_text-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.$updateEolChar = this.$updateEolChar.bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.EOF_CHAR = \"\\xB6\";\r\n\t this.EOL_CHAR_LF = \"\\xAC\";\r\n\t this.EOL_CHAR_CRLF = \"\\xa4\";\r\n\t this.EOL_CHAR = this.EOL_CHAR_LF;\r\n\t this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\r\n\t this.SPACE_CHAR = \"\\xB7\";\r\n\t this.$padding = 0;\r\n\r\n\t this.$updateEolChar = function() {\r\n\t var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\r\n\t ? this.EOL_CHAR_LF\r\n\t : this.EOL_CHAR_CRLF;\r\n\t if (this.EOL_CHAR != EOL_CHAR) {\r\n\t this.EOL_CHAR = EOL_CHAR;\r\n\t return true;\r\n\t }\r\n\t }\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.element.style.padding = \"0 \" + padding + \"px\";\r\n\t };\r\n\r\n\t this.getLineHeight = function() {\r\n\t return this.$fontMetrics.$characterSize.height || 0;\r\n\t };\r\n\r\n\t this.getCharacterWidth = function() {\r\n\t return this.$fontMetrics.$characterSize.width || 0;\r\n\t };\r\n\t \r\n\t this.$setFontMetrics = function(measure) {\r\n\t this.$fontMetrics = measure;\r\n\t this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\r\n\t this._signal(\"changeCharacterSize\", e);\r\n\t }.bind(this));\r\n\t this.$pollSizeChanges();\r\n\t }\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t this.$fontMetrics.checkForSizeChanges();\r\n\t };\r\n\t this.$pollSizeChanges = function() {\r\n\t return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t if (session)\r\n\t this.$computeTabString();\r\n\t };\r\n\r\n\t this.showInvisibles = false;\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t if (this.showInvisibles == showInvisibles)\r\n\t return false;\r\n\r\n\t this.showInvisibles = showInvisibles;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.displayIndentGuides = true;\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t if (this.displayIndentGuides == display)\r\n\t return false;\r\n\r\n\t this.displayIndentGuides = display;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.$tabStrings = [];\r\n\t this.onChangeTabSize =\r\n\t this.$computeTabString = function() {\r\n\t var tabSize = this.session.getTabSize();\r\n\t this.tabSize = tabSize;\r\n\t var tabStr = this.$tabStrings = [0];\r\n\t for (var i = 1; i < tabSize + 1; i++) {\r\n\t if (this.showInvisibles) {\r\n\t tabStr.push(\"\"\r\n\t + lang.stringRepeat(this.TAB_CHAR, i)\r\n\t + \"\");\r\n\t } else {\r\n\t tabStr.push(lang.stringRepeat(\" \", i));\r\n\t }\r\n\t }\r\n\t if (this.displayIndentGuides) {\r\n\t this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\r\n\t var className = \"ace_indent-guide\";\r\n\t var spaceClass = \"\";\r\n\t var tabClass = \"\";\r\n\t if (this.showInvisibles) {\r\n\t className += \" ace_invisible\";\r\n\t spaceClass = \" ace_invisible_space\";\r\n\t tabClass = \" ace_invisible_tab\";\r\n\t var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\r\n\t var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\r\n\t } else{\r\n\t var spaceContent = lang.stringRepeat(\" \", this.tabSize);\r\n\t var tabContent = spaceContent;\r\n\t }\r\n\r\n\t this.$tabStrings[\" \"] = \"\" + spaceContent + \"\";\r\n\t this.$tabStrings[\"\\t\"] = \"\" + tabContent + \"\";\r\n\t }\r\n\t };\r\n\r\n\t this.updateLines = function(config, firstRow, lastRow) {\r\n\t if (this.config.lastRow != config.lastRow ||\r\n\t this.config.firstRow != config.firstRow) {\r\n\t this.scrollLines(config);\r\n\t }\r\n\t this.config = config;\r\n\r\n\t var first = Math.max(firstRow, config.firstRow);\r\n\t var last = Math.min(lastRow, config.lastRow);\r\n\r\n\t var lineElements = this.element.childNodes;\r\n\t var lineElementsIdx = 0;\r\n\r\n\t for (var row = config.firstRow; row < first; row++) {\r\n\t var foldLine = this.session.getFoldLine(row);\r\n\t if (foldLine) {\r\n\t if (foldLine.containsRow(first)) {\r\n\t first = foldLine.start.row;\r\n\t break;\r\n\t } else {\r\n\t row = foldLine.end.row;\r\n\t }\r\n\t }\r\n\t lineElementsIdx ++;\r\n\t }\r\n\r\n\t var row = first;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > last)\r\n\t break;\r\n\r\n\t var lineElement = lineElements[lineElementsIdx++];\r\n\t if (lineElement) {\r\n\t var html = [];\r\n\t this.$renderLine(\r\n\t html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\r\n\t );\r\n\t lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\t lineElement.innerHTML = html.join(\"\");\r\n\t }\r\n\t row++;\r\n\t }\r\n\t };\r\n\r\n\t this.scrollLines = function(config) {\r\n\t var oldConfig = this.config;\r\n\t this.config = config;\r\n\r\n\t if (!oldConfig || oldConfig.lastRow < config.firstRow)\r\n\t return this.update(config);\r\n\r\n\t if (config.lastRow < oldConfig.firstRow)\r\n\t return this.update(config);\r\n\r\n\t var el = this.element;\r\n\t if (oldConfig.firstRow < config.firstRow)\r\n\t for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\r\n\t el.removeChild(el.firstChild);\r\n\r\n\t if (oldConfig.lastRow > config.lastRow)\r\n\t for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\r\n\t el.removeChild(el.lastChild);\r\n\r\n\t if (config.firstRow < oldConfig.firstRow) {\r\n\t var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\r\n\t if (el.firstChild)\r\n\t el.insertBefore(fragment, el.firstChild);\r\n\t else\r\n\t el.appendChild(fragment);\r\n\t }\r\n\r\n\t if (config.lastRow > oldConfig.lastRow) {\r\n\t var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\r\n\t el.appendChild(fragment);\r\n\t }\r\n\t };\r\n\r\n\t this.$renderLinesFragment = function(config, firstRow, lastRow) {\r\n\t var fragment = this.element.ownerDocument.createDocumentFragment();\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t var container = dom.createElement(\"div\");\r\n\r\n\t var html = [];\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\t container.innerHTML = html.join(\"\");\r\n\t if (this.$useLineGroups()) {\r\n\t container.className = 'ace_line_group';\r\n\t fragment.appendChild(container);\r\n\t container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\r\n\t } else {\r\n\t while(container.firstChild)\r\n\t fragment.appendChild(container.firstChild);\r\n\t }\r\n\r\n\t row++;\r\n\t }\r\n\t return fragment;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var html = [];\r\n\t var firstRow = config.firstRow, lastRow = config.lastRow;\r\n\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"
\")\r\n\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"
\"); // end the line group\r\n\r\n\t row++;\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$textToken = {\r\n\t \"text\": true,\r\n\t \"rparen\": true,\r\n\t \"lparen\": true\r\n\t };\r\n\r\n\t this.$renderToken = function(stringBuilder, screenColumn, token, value) {\r\n\t var self = this;\r\n\t var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;\r\n\t var replaceFunc = function(c, a, b, tabIdx, idx4) {\r\n\t if (a) {\r\n\t return self.showInvisibles\r\n\t ? \"\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"\"\r\n\t : c;\r\n\t } else if (c == \"&\") {\r\n\t return \"&\";\r\n\t } else if (c == \"<\") {\r\n\t return \"<\";\r\n\t } else if (c == \">\") {\r\n\t return \">\";\r\n\t } else if (c == \"\\t\") {\r\n\t var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\r\n\t screenColumn += tabSize - 1;\r\n\t return self.$tabStrings[tabSize];\r\n\t } else if (c == \"\\u3000\") {\r\n\t var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\r\n\t var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\r\n\t screenColumn += 1;\r\n\t return \"\" + space + \"\";\r\n\t } else if (b) {\r\n\t return \"\" + self.SPACE_CHAR + \"\";\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t return \"\" + c + \"\";\r\n\t }\r\n\t };\r\n\r\n\t var output = value.replace(replaceReg, replaceFunc);\r\n\r\n\t if (!this.$textToken[token.type]) {\r\n\t var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\r\n\t var style = \"\";\r\n\t if (token.type == \"fold\")\r\n\t style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\r\n\t stringBuilder.push(\"\", output, \"\");\r\n\t }\r\n\t else {\r\n\t stringBuilder.push(output);\r\n\t }\r\n\t return screenColumn + value.length;\r\n\t };\r\n\r\n\t this.renderIndentGuide = function(stringBuilder, value, max) {\r\n\t var cols = value.search(this.$indentGuideRe);\r\n\t if (cols <= 0 || cols >= max)\r\n\t return value;\r\n\t if (value[0] == \" \") {\r\n\t cols -= cols % this.tabSize;\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\r\n\t return value.substr(cols);\r\n\t } else if (value[0] == \"\\t\") {\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\r\n\t return value.substr(cols);\r\n\t }\r\n\t return value;\r\n\t };\r\n\r\n\t this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\r\n\t var chars = 0;\r\n\t var split = 0;\r\n\t var splitChars = splits[0];\r\n\t var screenColumn = 0;\r\n\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t var value = token.value;\r\n\t if (i == 0 && this.displayIndentGuides) {\r\n\t chars = value.length;\r\n\t value = this.renderIndentGuide(stringBuilder, value, splitChars);\r\n\t if (!value)\r\n\t continue;\r\n\t chars -= value.length;\r\n\t }\r\n\r\n\t if (chars + value.length < splitChars) {\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t chars += value.length;\r\n\t } else {\r\n\t while (chars + value.length >= splitChars) {\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn,\r\n\t token, value.substring(0, splitChars - chars)\r\n\t );\r\n\t value = value.substring(splitChars - chars);\r\n\t chars = splitChars;\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\"\",\r\n\t \"
\"\r\n\t );\r\n\t }\r\n\r\n\t stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\r\n\r\n\t split ++;\r\n\t screenColumn = 0;\r\n\t splitChars = splits[split] || Number.MAX_VALUE;\r\n\t }\r\n\t if (value.length != 0) {\r\n\t chars += value.length;\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn, token, value\r\n\t );\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.$renderSimpleLine = function(stringBuilder, tokens) {\r\n\t var screenColumn = 0;\r\n\t var token = tokens[0];\r\n\t var value = token.value;\r\n\t if (this.displayIndentGuides)\r\n\t value = this.renderIndentGuide(stringBuilder, value);\r\n\t if (value)\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t for (var i = 1; i < tokens.length; i++) {\r\n\t token = tokens[i];\r\n\t value = token.value;\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t }\r\n\t };\r\n\t this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\r\n\t if (!foldLine && foldLine != false)\r\n\t foldLine = this.session.getFoldLine(row);\r\n\r\n\t if (foldLine)\r\n\t var tokens = this.$getFoldLineTokens(row, foldLine);\r\n\t else\r\n\t var tokens = this.session.getTokens(row);\r\n\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\r\n\t \"
\"\r\n\t );\r\n\t }\r\n\r\n\t if (tokens.length) {\r\n\t var splits = this.session.getRowSplitData(row);\r\n\t if (splits && splits.length)\r\n\t this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\r\n\t else\r\n\t this.$renderSimpleLine(stringBuilder, tokens);\r\n\t }\r\n\r\n\t if (this.showInvisibles) {\r\n\t if (foldLine)\r\n\t row = foldLine.end.row\r\n\r\n\t stringBuilder.push(\r\n\t \"\",\r\n\t row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\r\n\t \"\"\r\n\t );\r\n\t }\r\n\t if (!onlyContents)\r\n\t stringBuilder.push(\"
\");\r\n\t };\r\n\r\n\t this.$getFoldLineTokens = function(row, foldLine) {\r\n\t var session = this.session;\r\n\t var renderTokens = [];\r\n\r\n\t function addTokens(tokens, from, to) {\r\n\t var idx = 0, col = 0;\r\n\t while ((col + tokens[idx].value.length) < from) {\r\n\t col += tokens[idx].value.length;\r\n\t idx++;\r\n\r\n\t if (idx == tokens.length)\r\n\t return;\r\n\t }\r\n\t if (col != from) {\r\n\t var value = tokens[idx].value.substring(from - col);\r\n\t if (value.length > (to - from))\r\n\t value = value.substring(0, to - from);\r\n\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value\r\n\t });\r\n\r\n\t col = from + value.length;\r\n\t idx += 1;\r\n\t }\r\n\r\n\t while (col < to && idx < tokens.length) {\r\n\t var value = tokens[idx].value;\r\n\t if (value.length + col > to) {\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value.substring(0, to - col)\r\n\t });\r\n\t } else\r\n\t renderTokens.push(tokens[idx]);\r\n\t col += value.length;\r\n\t idx += 1;\r\n\t }\r\n\t }\r\n\r\n\t var tokens = session.getTokens(row);\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\r\n\t if (placeholder != null) {\r\n\t renderTokens.push({\r\n\t type: \"fold\",\r\n\t value: placeholder\r\n\t });\r\n\t } else {\r\n\t if (isNewRow)\r\n\t tokens = session.getTokens(row);\r\n\r\n\t if (tokens.length)\r\n\t addTokens(tokens, lastColumn, column);\r\n\t }\r\n\t }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\r\n\r\n\t return renderTokens;\r\n\t };\r\n\r\n\t this.$useLineGroups = function() {\r\n\t return this.session.getUseWrapMode();\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.$measureNode)\r\n\t this.$measureNode.parentNode.removeChild(this.$measureNode);\r\n\t delete this.$measureNode;\r\n\t };\r\n\r\n\t}).call(Text.prototype);\r\n\r\n\texports.Text = Text;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar isIE8;\r\n\r\n\tvar Cursor = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_cursor-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t \r\n\t if (isIE8 === undefined)\r\n\t isIE8 = !(\"opacity\" in this.element.style);\r\n\r\n\t this.isVisible = false;\r\n\t this.isBlinking = true;\r\n\t this.blinkInterval = 1000;\r\n\t this.smoothBlinking = false;\r\n\r\n\t this.cursors = [];\r\n\t this.cursor = this.addCursor();\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.$updateCursors = (isIE8\r\n\t ? this.$updateVisibility\r\n\t : this.$updateOpacity).bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\t \r\n\t this.$updateVisibility = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.visibility = val ? \"\" : \"hidden\";\r\n\t };\r\n\t this.$updateOpacity = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.opacity = val ? \"\" : \"0\";\r\n\t };\r\n\t \r\n\r\n\t this.$padding = 0;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\r\n\t this.setBlinking = function(blinking) {\r\n\t if (blinking != this.isBlinking){\r\n\t this.isBlinking = blinking;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setBlinkInterval = function(blinkInterval) {\r\n\t if (blinkInterval != this.blinkInterval){\r\n\t this.blinkInterval = blinkInterval;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setSmoothBlinking = function(smoothBlinking) {\r\n\t if (smoothBlinking != this.smoothBlinking && !isIE8) {\r\n\t this.smoothBlinking = smoothBlinking;\r\n\t dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\r\n\t this.$updateCursors(true);\r\n\t this.$updateCursors = (this.$updateOpacity).bind(this);\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.addCursor = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t el.className = \"ace_cursor\";\r\n\t this.element.appendChild(el);\r\n\t this.cursors.push(el);\r\n\t return el;\r\n\t };\r\n\r\n\t this.removeCursor = function() {\r\n\t if (this.cursors.length > 1) {\r\n\t var el = this.cursors.pop();\r\n\t el.parentNode.removeChild(el);\r\n\t return el;\r\n\t }\r\n\t };\r\n\r\n\t this.hideCursor = function() {\r\n\t this.isVisible = false;\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.showCursor = function() {\r\n\t this.isVisible = true;\r\n\t dom.removeCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.restartTimer = function() {\r\n\t var update = this.$updateCursors;\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t if (this.smoothBlinking) {\r\n\t dom.removeCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }\r\n\t \r\n\t update(true);\r\n\r\n\t if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\r\n\t return;\r\n\r\n\t if (this.smoothBlinking) {\r\n\t setTimeout(function(){\r\n\t dom.addCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }.bind(this));\r\n\t }\r\n\t \r\n\t var blink = function(){\r\n\t this.timeoutId = setTimeout(function() {\r\n\t update(false);\r\n\t }, 0.6 * this.blinkInterval);\r\n\t }.bind(this);\r\n\r\n\t this.intervalId = setInterval(function() {\r\n\t update(true);\r\n\t blink();\r\n\t }, this.blinkInterval);\r\n\r\n\t blink();\r\n\t };\r\n\r\n\t this.getPixelPosition = function(position, onScreen) {\r\n\t if (!this.config || !this.session)\r\n\t return {left : 0, top : 0};\r\n\r\n\t if (!position)\r\n\t position = this.session.selection.getCursor();\r\n\t var pos = this.session.documentToScreenPosition(position);\r\n\t var cursorLeft = this.$padding + pos.column * this.config.characterWidth;\r\n\t var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\r\n\t this.config.lineHeight;\r\n\r\n\t return {left : cursorLeft, top : cursorTop};\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var selections = this.session.$selectionMarkers;\r\n\t var i = 0, cursorIndex = 0;\r\n\r\n\t if (selections === undefined || selections.length === 0){\r\n\t selections = [{cursor: null}];\r\n\t }\r\n\r\n\t for (var i = 0, n = selections.length; i < n; i++) {\r\n\t var pixelPos = this.getPixelPosition(selections[i].cursor, true);\r\n\t if ((pixelPos.top > config.height + config.offset ||\r\n\t pixelPos.top < 0) && i > 1) {\r\n\t continue;\r\n\t }\r\n\r\n\t var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\r\n\t \r\n\t if (!this.drawCursor) {\r\n\t style.left = pixelPos.left + \"px\";\r\n\t style.top = pixelPos.top + \"px\";\r\n\t style.width = config.characterWidth + \"px\";\r\n\t style.height = config.lineHeight + \"px\";\r\n\t } else {\r\n\t this.drawCursor(style, pixelPos, config, selections[i], this.session);\r\n\t }\r\n\t }\r\n\t while (this.cursors.length > cursorIndex)\r\n\t this.removeCursor();\r\n\r\n\t var overwrite = this.session.getOverwrite();\r\n\t this.$setOverwrite(overwrite);\r\n\t this.$pixelPos = pixelPos;\r\n\t this.restartTimer();\r\n\t };\r\n\t \r\n\t this.drawCursor = null;\r\n\r\n\t this.$setOverwrite = function(overwrite) {\r\n\t if (overwrite != this.overwrite) {\r\n\t this.overwrite = overwrite;\r\n\t if (overwrite)\r\n\t dom.addCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t }\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t };\r\n\r\n\t}).call(Cursor.prototype);\r\n\r\n\texports.Cursor = Cursor;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar ScrollBar = function(parent) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\r\n\r\n\t this.inner = dom.createElement(\"div\");\r\n\t this.inner.className = \"ace_scrollbar-inner\";\r\n\t this.element.appendChild(this.inner);\r\n\r\n\t parent.appendChild(this.element);\r\n\r\n\t this.setVisible(false);\r\n\t this.skipEvent = false;\r\n\r\n\t event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\r\n\t event.addListener(this.element, \"mousedown\", event.preventDefault);\r\n\t};\r\n\r\n\t(function() {\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setVisible = function(isVisible) {\r\n\t this.element.style.display = isVisible ? \"\" : \"none\";\r\n\t this.isVisible = isVisible;\r\n\t };\r\n\t}).call(ScrollBar.prototype);\r\n\tvar VScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollTop = 0;\r\n\t renderer.$scrollbarWidth = \r\n\t this.width = dom.scrollbarWidth(parent.ownerDocument);\r\n\t this.inner.style.width =\r\n\t this.element.style.width = (this.width || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(VScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-v';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollTop = this.element.scrollTop;\r\n\t this._emit(\"scroll\", {data: this.scrollTop});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.isVisible ? this.width : 0;\r\n\t };\r\n\t this.setHeight = function(height) {\r\n\t this.element.style.height = height + \"px\";\r\n\t };\r\n\t this.setInnerHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.scrollTop != scrollTop) {\r\n\t this.skipEvent = true;\r\n\t this.scrollTop = this.element.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\r\n\t}).call(VScrollBar.prototype);\r\n\tvar HScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollLeft = 0;\r\n\t this.height = renderer.$scrollbarWidth;\r\n\t this.inner.style.height =\r\n\t this.element.style.height = (this.height || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(HScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-h';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollLeft = this.element.scrollLeft;\r\n\t this._emit(\"scroll\", {data: this.scrollLeft});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.isVisible ? this.height : 0;\r\n\t };\r\n\t this.setWidth = function(width) {\r\n\t this.element.style.width = width + \"px\";\r\n\t };\r\n\t this.setInnerWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.scrollLeft != scrollLeft) {\r\n\t this.skipEvent = true;\r\n\t this.scrollLeft = this.element.scrollLeft = scrollLeft;\r\n\t }\r\n\t };\r\n\r\n\t}).call(HScrollBar.prototype);\r\n\r\n\r\n\texports.ScrollBar = VScrollBar; // backward compatibility\r\n\texports.ScrollBarV = VScrollBar; // backward compatibility\r\n\texports.ScrollBarH = HScrollBar; // backward compatibility\r\n\r\n\texports.VScrollBar = VScrollBar;\r\n\texports.HScrollBar = HScrollBar;\r\n\t});\r\n\r\n\tace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\r\n\tvar RenderLoop = function(onRender, win) {\r\n\t this.onRender = onRender;\r\n\t this.pending = false;\r\n\t this.changes = 0;\r\n\t this.window = win || window;\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\r\n\t this.schedule = function(change) {\r\n\t this.changes = this.changes | change;\r\n\t if (!this.pending && this.changes) {\r\n\t this.pending = true;\r\n\t var _self = this;\r\n\t event.nextFrame(function() {\r\n\t _self.pending = false;\r\n\t var changes;\r\n\t while (changes = _self.changes) {\r\n\t _self.changes = 0;\r\n\t _self.onRender(changes);\r\n\t }\r\n\t }, this.window);\r\n\t }\r\n\t };\r\n\r\n\t}).call(RenderLoop.prototype);\r\n\r\n\texports.RenderLoop = RenderLoop;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CHAR_COUNT = 0;\r\n\r\n\tvar FontMetrics = exports.FontMetrics = function(parentEl) {\r\n\t this.el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.el.style, true);\r\n\t \r\n\t this.$main = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$main.style);\r\n\t \r\n\t this.$measureNode = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$measureNode.style);\r\n\t \r\n\t \r\n\t this.el.appendChild(this.$main);\r\n\t this.el.appendChild(this.$measureNode);\r\n\t parentEl.appendChild(this.el);\r\n\t \r\n\t if (!CHAR_COUNT)\r\n\t this.$testFractionalRect();\r\n\t this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t this.checkForSizeChanges();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t \r\n\t this.$testFractionalRect = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(el.style);\r\n\t el.style.width = \"0.2px\";\r\n\t document.documentElement.appendChild(el);\r\n\t var w = el.getBoundingClientRect().width;\r\n\t if (w > 0 && w < 1)\r\n\t CHAR_COUNT = 50;\r\n\t else\r\n\t CHAR_COUNT = 100;\r\n\t el.parentNode.removeChild(el);\r\n\t };\r\n\t \r\n\t this.$setMeasureNodeStyles = function(style, isRoot) {\r\n\t style.width = style.height = \"auto\";\r\n\t style.left = style.top = \"0px\";\r\n\t style.visibility = \"hidden\";\r\n\t style.position = \"absolute\";\r\n\t style.whiteSpace = \"pre\";\r\n\r\n\t if (useragent.isIE < 8) {\r\n\t style[\"font-family\"] = \"inherit\";\r\n\t } else {\r\n\t style.font = \"inherit\";\r\n\t }\r\n\t style.overflow = isRoot ? \"hidden\" : \"visible\";\r\n\t };\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t var size = this.$measureSizes();\r\n\t if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\r\n\t this.$measureNode.style.fontWeight = \"bold\";\r\n\t var boldSize = this.$measureSizes();\r\n\t this.$measureNode.style.fontWeight = \"\";\r\n\t this.$characterSize = size;\r\n\t this.charSizes = Object.create(null);\r\n\t this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\r\n\t this._emit(\"changeCharacterSize\", {data: size});\r\n\t }\r\n\t };\r\n\r\n\t this.$pollSizeChanges = function() {\r\n\t if (this.$pollSizeChangesTimer)\r\n\t return this.$pollSizeChangesTimer;\r\n\t var self = this;\r\n\t return this.$pollSizeChangesTimer = setInterval(function() {\r\n\t self.checkForSizeChanges();\r\n\t }, 500);\r\n\t };\r\n\t \r\n\t this.setPolling = function(val) {\r\n\t if (val) {\r\n\t this.$pollSizeChanges();\r\n\t } else if (this.$pollSizeChangesTimer) {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t this.$pollSizeChangesTimer = 0;\r\n\t }\r\n\t };\r\n\r\n\t this.$measureSizes = function() {\r\n\t if (CHAR_COUNT === 50) {\r\n\t var rect = null;\r\n\t try { \r\n\t rect = this.$measureNode.getBoundingClientRect();\r\n\t } catch(e) {\r\n\t rect = {width: 0, height:0 };\r\n\t }\r\n\t var size = {\r\n\t height: rect.height,\r\n\t width: rect.width / CHAR_COUNT\r\n\t };\r\n\t } else {\r\n\t var size = {\r\n\t height: this.$measureNode.clientHeight,\r\n\t width: this.$measureNode.clientWidth / CHAR_COUNT\r\n\t };\r\n\t }\r\n\t if (size.width === 0 || size.height === 0)\r\n\t return null;\r\n\t return size;\r\n\t };\r\n\r\n\t this.$measureCharWidth = function(ch) {\r\n\t this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\r\n\t var rect = this.$main.getBoundingClientRect();\r\n\t return rect.width / CHAR_COUNT;\r\n\t };\r\n\t \r\n\t this.getCharacterWidth = function(ch) {\r\n\t var w = this.charSizes[ch];\r\n\t if (w === undefined) {\r\n\t w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\r\n\t }\r\n\t return w;\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.el && this.el.parentNode)\r\n\t this.el.parentNode.removeChild(this.el);\r\n\t };\r\n\r\n\t}).call(FontMetrics.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\r\n\tvar MarkerLayer = acequire(\"./layer/marker\").Marker;\r\n\tvar TextLayer = acequire(\"./layer/text\").Text;\r\n\tvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\r\n\tvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\r\n\tvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\r\n\tvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\r\n\tvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar editorCss = \".ace_editor {\\\r\n\tposition: relative;\\\r\n\toverflow: hidden;\\\r\n\tfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\r\n\tdirection: ltr;\\\r\n\t}\\\r\n\t.ace_scroller {\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tbackground-color: inherit;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\tcursor: text;\\\r\n\t}\\\r\n\t.ace_content {\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmin-width: 100%;\\\r\n\t}\\\r\n\t.ace_dragging .ace_scroller:before{\\\r\n\tposition: absolute;\\\r\n\ttop: 0;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tcontent: '';\\\r\n\tbackground: rgba(250, 250, 250, 0.01);\\\r\n\tz-index: 1000;\\\r\n\t}\\\r\n\t.ace_dragging.ace_dark .ace_scroller:before{\\\r\n\tbackground: rgba(0, 0, 0, 0.01);\\\r\n\t}\\\r\n\t.ace_selecting, .ace_selecting * {\\\r\n\tcursor: text !important;\\\r\n\t}\\\r\n\t.ace_gutter {\\\r\n\tposition: absolute;\\\r\n\toverflow : hidden;\\\r\n\twidth: auto;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tleft: 0;\\\r\n\tcursor: default;\\\r\n\tz-index: 4;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\\\r\n\t.ace_gutter-active-line {\\\r\n\tposition: absolute;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_scroller.ace_scroll-left {\\\r\n\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\r\n\t}\\\r\n\t.ace_gutter-cell {\\\r\n\tpadding-left: 19px;\\\r\n\tpadding-right: 6px;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_error {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_warning {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_dark .ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_scrollbar {\\\r\n\tposition: absolute;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_scrollbar-inner {\\\r\n\tposition: absolute;\\\r\n\tcursor: text;\\\r\n\tleft: 0;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-v{\\\r\n\toverflow-x: hidden;\\\r\n\toverflow-y: scroll;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-h {\\\r\n\toverflow-x: scroll;\\\r\n\toverflow-y: hidden;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_print-margin {\\\r\n\tposition: absolute;\\\r\n\theight: 100%;\\\r\n\t}\\\r\n\t.ace_text-input {\\\r\n\tposition: absolute;\\\r\n\tz-index: 0;\\\r\n\twidth: 0.5em;\\\r\n\theight: 1em;\\\r\n\topacity: 0;\\\r\n\tbackground: transparent;\\\r\n\t-moz-appearance: none;\\\r\n\tappearance: none;\\\r\n\tborder: none;\\\r\n\tresize: none;\\\r\n\toutline: none;\\\r\n\toverflow: hidden;\\\r\n\tfont: inherit;\\\r\n\tpadding: 0 1px;\\\r\n\tmargin: 0 -1px;\\\r\n\ttext-indent: -1em;\\\r\n\t-ms-user-select: text;\\\r\n\t-moz-user-select: text;\\\r\n\t-webkit-user-select: text;\\\r\n\tuser-select: text;\\\r\n\twhite-space: pre!important;\\\r\n\t}\\\r\n\t.ace_text-input.ace_composition {\\\r\n\tbackground: inherit;\\\r\n\tcolor: inherit;\\\r\n\tz-index: 1000;\\\r\n\topacity: 1;\\\r\n\ttext-indent: 0;\\\r\n\t}\\\r\n\t.ace_layer {\\\r\n\tz-index: 1;\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\tword-wrap: normal;\\\r\n\twhite-space: pre;\\\r\n\theight: 100%;\\\r\n\twidth: 100%;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_gutter-layer {\\\r\n\tposition: relative;\\\r\n\twidth: auto;\\\r\n\ttext-align: right;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_text-layer {\\\r\n\tfont: inherit !important;\\\r\n\t}\\\r\n\t.ace_cjk {\\\r\n\tdisplay: inline-block;\\\r\n\ttext-align: center;\\\r\n\t}\\\r\n\t.ace_cursor-layer {\\\r\n\tz-index: 4;\\\r\n\t}\\\r\n\t.ace_cursor {\\\r\n\tz-index: 4;\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tborder-left: 2px solid;\\\r\n\ttransform: translatez(0);\\\r\n\t}\\\r\n\t.ace_slim-cursors .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left-width: 0;\\\r\n\tborder-bottom: 1px solid;\\\r\n\t}\\\r\n\t.ace_hidden-cursors .ace_cursor {\\\r\n\topacity: 0.2;\\\r\n\t}\\\r\n\t.ace_smooth-blinking .ace_cursor {\\\r\n\t-webkit-transition: opacity 0.18s;\\\r\n\ttransition: opacity 0.18s;\\\r\n\t}\\\r\n\t.ace_editor.ace_multiselect .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\r\n\tposition: absolute;\\\r\n\tz-index: 3;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selection {\\\r\n\tposition: absolute;\\\r\n\tz-index: 5;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_bracket {\\\r\n\tposition: absolute;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_active-line {\\\r\n\tposition: absolute;\\\r\n\tz-index: 2;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selected-word {\\\r\n\tposition: absolute;\\\r\n\tz-index: 4;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\t}\\\r\n\t.ace_line .ace_fold {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tdisplay: inline-block;\\\r\n\theight: 11px;\\\r\n\tmargin-top: -2px;\\\r\n\tvertical-align: middle;\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-repeat: no-repeat, repeat-x;\\\r\n\tbackground-position: center center, top left;\\\r\n\tcolor: transparent;\\\r\n\tborder: 1px solid black;\\\r\n\tborder-radius: 2px;\\\r\n\tcursor: pointer;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_dark .ace_fold {\\\r\n\t}\\\r\n\t.ace_fold:hover{\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_tooltip {\\\r\n\tbackground-color: #FFF;\\\r\n\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tborder: 1px solid gray;\\\r\n\tborder-radius: 1px;\\\r\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\r\n\tcolor: black;\\\r\n\tmax-width: 100%;\\\r\n\tpadding: 3px 4px;\\\r\n\tposition: fixed;\\\r\n\tz-index: 999999;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcursor: default;\\\r\n\twhite-space: pre;\\\r\n\tword-wrap: break-word;\\\r\n\tline-height: normal;\\\r\n\tfont-style: normal;\\\r\n\tfont-weight: normal;\\\r\n\tletter-spacing: normal;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_folding-enabled > .ace_gutter-cell {\\\r\n\tpadding-right: 13px;\\\r\n\t}\\\r\n\t.ace_fold-widget {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmargin: 0 -12px 0 1px;\\\r\n\tdisplay: none;\\\r\n\twidth: 11px;\\\r\n\tvertical-align: top;\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: center;\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid transparent;\\\r\n\tcursor: pointer;\\\r\n\t}\\\r\n\t.ace_folding-enabled .ace_fold-widget {\\\r\n\tdisplay: inline-block; \\\r\n\t}\\\r\n\t.ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget:hover {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.3);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\r\n\t}\\\r\n\t.ace_fold-widget:active {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.4);\\\r\n\tbackground-color: rgba(0, 0, 0, 0.05);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:hover {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.1);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:active {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_invalid {\\\r\n\tbackground-color: #FFB4B4;\\\r\n\tborder-color: #DE5555;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.4s ease 0.05s;\\\r\n\ttransition: opacity 0.4s ease 0.05s;\\\r\n\topacity: 0;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets:hover .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.05s ease 0.05s;\\\r\n\ttransition: opacity 0.05s ease 0.05s;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_underline {\\\r\n\ttext-decoration: underline;\\\r\n\t}\\\r\n\t.ace_bold {\\\r\n\tfont-weight: bold;\\\r\n\t}\\\r\n\t.ace_nobold .ace_bold {\\\r\n\tfont-weight: normal;\\\r\n\t}\\\r\n\t.ace_italic {\\\r\n\tfont-style: italic;\\\r\n\t}\\\r\n\t.ace_error-marker {\\\r\n\tbackground-color: rgba(255, 0, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 9;\\\r\n\t}\\\r\n\t.ace_highlight-marker {\\\r\n\tbackground-color: rgba(255, 255, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 8;\\\r\n\t}\\\r\n\t.ace_br1 {border-top-left-radius : 3px;}\\\r\n\t.ace_br2 {border-top-right-radius : 3px;}\\\r\n\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\r\n\t.ace_br4 {border-bottom-right-radius: 3px;}\\\r\n\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br8 {border-bottom-left-radius : 3px;}\\\r\n\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t\";\r\n\r\n\tdom.importCssString(editorCss, \"ace_editor.css\");\r\n\r\n\tvar VirtualRenderer = function(container, theme) {\r\n\t var _self = this;\r\n\r\n\t this.container = container || dom.createElement(\"div\");\r\n\t this.$keepTextAreaAtCursor = !useragent.isOldIE;\r\n\r\n\t dom.addCssClass(this.container, \"ace_editor\");\r\n\r\n\t this.setTheme(theme);\r\n\r\n\t this.$gutter = dom.createElement(\"div\");\r\n\t this.$gutter.className = \"ace_gutter\";\r\n\t this.container.appendChild(this.$gutter);\r\n\r\n\t this.scroller = dom.createElement(\"div\");\r\n\t this.scroller.className = \"ace_scroller\";\r\n\t this.container.appendChild(this.scroller);\r\n\r\n\t this.content = dom.createElement(\"div\");\r\n\t this.content.className = \"ace_content\";\r\n\t this.scroller.appendChild(this.content);\r\n\r\n\t this.$gutterLayer = new GutterLayer(this.$gutter);\r\n\t this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\r\n\r\n\t this.$markerBack = new MarkerLayer(this.content);\r\n\r\n\t var textLayer = this.$textLayer = new TextLayer(this.content);\r\n\t this.canvas = textLayer.element;\r\n\r\n\t this.$markerFront = new MarkerLayer(this.content);\r\n\r\n\t this.$cursorLayer = new CursorLayer(this.content);\r\n\t this.$horizScroll = false;\r\n\t this.$vScroll = false;\r\n\r\n\t this.scrollBar = \r\n\t this.scrollBarV = new VScrollBar(this.container, this);\r\n\t this.scrollBarH = new HScrollBar(this.container, this);\r\n\t this.scrollBarV.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollTop(e.data - _self.scrollMargin.top);\r\n\t });\r\n\t this.scrollBarH.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\r\n\t });\r\n\r\n\t this.scrollTop = 0;\r\n\t this.scrollLeft = 0;\r\n\r\n\t this.cursorPos = {\r\n\t row : 0,\r\n\t column : 0\r\n\t };\r\n\r\n\t this.$fontMetrics = new FontMetrics(this.container);\r\n\t this.$textLayer.$setFontMetrics(this.$fontMetrics);\r\n\t this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\r\n\t _self.updateCharacterSize();\r\n\t _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\r\n\t _self._signal(\"changeCharacterSize\", e);\r\n\t });\r\n\r\n\t this.$size = {\r\n\t width: 0,\r\n\t height: 0,\r\n\t scrollerHeight: 0,\r\n\t scrollerWidth: 0,\r\n\t $dirty: true\r\n\t };\r\n\r\n\t this.layerConfig = {\r\n\t width : 1,\r\n\t padding : 0,\r\n\t firstRow : 0,\r\n\t firstRowScreen: 0,\r\n\t lastRow : 0,\r\n\t lineHeight : 0,\r\n\t characterWidth : 0,\r\n\t minHeight : 1,\r\n\t maxHeight : 1,\r\n\t offset : 0,\r\n\t height : 1,\r\n\t gutterOffset: 1\r\n\t };\r\n\t \r\n\t this.scrollMargin = {\r\n\t left: 0,\r\n\t right: 0,\r\n\t top: 0,\r\n\t bottom: 0,\r\n\t v: 0,\r\n\t h: 0\r\n\t };\r\n\r\n\t this.$loop = new RenderLoop(\r\n\t this.$renderChanges.bind(this),\r\n\t this.container.ownerDocument.defaultView\r\n\t );\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\r\n\t this.updateCharacterSize();\r\n\t this.setPadding(4);\r\n\t config.resetOptions(this);\r\n\t config._emit(\"renderer\", this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.CHANGE_CURSOR = 1;\r\n\t this.CHANGE_MARKER = 2;\r\n\t this.CHANGE_GUTTER = 4;\r\n\t this.CHANGE_SCROLL = 8;\r\n\t this.CHANGE_LINES = 16;\r\n\t this.CHANGE_TEXT = 32;\r\n\t this.CHANGE_SIZE = 64;\r\n\t this.CHANGE_MARKER_BACK = 128;\r\n\t this.CHANGE_MARKER_FRONT = 256;\r\n\t this.CHANGE_FULL = 512;\r\n\t this.CHANGE_H_SCROLL = 1024;\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.updateCharacterSize = function() {\r\n\t if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\r\n\t this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\r\n\t this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\r\n\t }\r\n\r\n\t this.layerConfig.characterWidth =\r\n\t this.characterWidth = this.$textLayer.getCharacterWidth();\r\n\t this.layerConfig.lineHeight =\r\n\t this.lineHeight = this.$textLayer.getLineHeight();\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t \r\n\t this.session = session;\r\n\t if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\r\n\t session.setScrollTop(-this.scrollMargin.top);\r\n\r\n\t this.$cursorLayer.setSession(session);\r\n\t this.$markerBack.setSession(session);\r\n\t this.$markerFront.setSession(session);\r\n\t this.$gutterLayer.setSession(session);\r\n\t this.$textLayer.setSession(session);\r\n\t if (!session)\r\n\t return;\r\n\t \r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.session.$setFontMetrics(this.$fontMetrics);\r\n\t \r\n\t this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\r\n\t this.onChangeNewLineMode()\r\n\t this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t };\r\n\t this.updateLines = function(firstRow, lastRow, force) {\r\n\t if (lastRow === undefined)\r\n\t lastRow = Infinity;\r\n\r\n\t if (!this.$changedLines) {\r\n\t this.$changedLines = {\r\n\t firstRow: firstRow,\r\n\t lastRow: lastRow\r\n\t };\r\n\t }\r\n\t else {\r\n\t if (this.$changedLines.firstRow > firstRow)\r\n\t this.$changedLines.firstRow = firstRow;\r\n\r\n\t if (this.$changedLines.lastRow < lastRow)\r\n\t this.$changedLines.lastRow = lastRow;\r\n\t }\r\n\t if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\r\n\t if (force)\r\n\t this.$changedLines.lastRow = this.layerConfig.lastRow;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (this.$changedLines.firstRow > this.layerConfig.lastRow)\r\n\t return;\r\n\t this.$loop.schedule(this.CHANGE_LINES);\r\n\t };\r\n\r\n\t this.onChangeNewLineMode = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t this.$textLayer.$updateEolChar();\r\n\t };\r\n\t \r\n\t this.onChangeTabSize = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\r\n\t this.$textLayer.onChangeTabSize();\r\n\t };\r\n\t this.updateText = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t };\r\n\t this.updateFull = function(force) {\r\n\t if (force)\r\n\t this.$renderChanges(this.CHANGE_FULL, true);\r\n\t else\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t };\r\n\t this.updateFontSize = function() {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t };\r\n\r\n\t this.$changes = 0;\r\n\t this.$updateSizeAsync = function() {\r\n\t if (this.$loop.pending)\r\n\t this.$size.$dirty = true;\r\n\t else\r\n\t this.onResize();\r\n\t };\r\n\t this.onResize = function(force, gutterWidth, width, height) {\r\n\t if (this.resizing > 2)\r\n\t return;\r\n\t else if (this.resizing > 0)\r\n\t this.resizing++;\r\n\t else\r\n\t this.resizing = force ? 1 : 0;\r\n\t var el = this.container;\r\n\t if (!height)\r\n\t height = el.clientHeight || el.scrollHeight;\r\n\t if (!width)\r\n\t width = el.clientWidth || el.scrollWidth;\r\n\t var changes = this.$updateCachedSize(force, gutterWidth, width, height);\r\n\r\n\t \r\n\t if (!this.$size.scrollerHeight || (!width && !height))\r\n\t return this.resizing = 0;\r\n\r\n\t if (force)\r\n\t this.$gutterLayer.$padding = null;\r\n\r\n\t if (force)\r\n\t this.$renderChanges(changes | this.$changes, true);\r\n\t else\r\n\t this.$loop.schedule(changes | this.$changes);\r\n\r\n\t if (this.resizing)\r\n\t this.resizing = 0;\r\n\t this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\r\n\t };\r\n\t \r\n\t this.$updateCachedSize = function(force, gutterWidth, width, height) {\r\n\t height -= (this.$extraHeight || 0);\r\n\t var changes = 0;\r\n\t var size = this.$size;\r\n\t var oldSize = {\r\n\t width: size.width,\r\n\t height: size.height,\r\n\t scrollerHeight: size.scrollerHeight,\r\n\t scrollerWidth: size.scrollerWidth\r\n\t };\r\n\t if (height && (force || size.height != height)) {\r\n\t size.height = height;\r\n\t changes |= this.CHANGE_SIZE;\r\n\r\n\t size.scrollerHeight = size.height;\r\n\t if (this.$horizScroll)\r\n\t size.scrollerHeight -= this.scrollBarH.getHeight();\r\n\t this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t }\r\n\r\n\t if (width && (force || size.width != width)) {\r\n\t changes |= this.CHANGE_SIZE;\r\n\t size.width = width;\r\n\t \r\n\t if (gutterWidth == null)\r\n\t gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t \r\n\t this.gutterWidth = gutterWidth;\r\n\t \r\n\t this.scrollBarH.element.style.left = \r\n\t this.scroller.style.left = gutterWidth + \"px\";\r\n\t size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \r\n\t \r\n\t this.scrollBarH.element.style.right = \r\n\t this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\r\n\t this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\r\n\t changes |= this.CHANGE_FULL;\r\n\t }\r\n\t \r\n\t size.$dirty = !width || !height;\r\n\r\n\t if (changes)\r\n\t this._signal(\"resize\", oldSize);\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.onGutterResize = function() {\r\n\t var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t if (gutterWidth != this.gutterWidth)\r\n\t this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\r\n\r\n\t if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else if (this.$size.$dirty) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else {\r\n\t this.$computeLayerConfig();\r\n\t this.$loop.schedule(this.CHANGE_MARKER);\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function() {\r\n\t var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\r\n\t var limit = Math.floor(availableWidth / this.characterWidth);\r\n\t return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\r\n\t };\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.setOption(\"animatedScroll\", shouldAnimate);\r\n\t };\r\n\t this.getAnimatedScroll = function() {\r\n\t return this.$animatedScroll;\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.setOption(\"showInvisibles\", showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.getOption(\"showInvisibles\");\r\n\t };\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.getOption(\"displayIndentGuides\");\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.setOption(\"displayIndentGuides\", display);\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.setOption(\"showPrintMargin\", showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.getOption(\"showPrintMargin\");\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.setOption(\"printMarginColumn\", showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.getOption(\"printMarginColumn\");\r\n\t };\r\n\t this.getShowGutter = function(){\r\n\t return this.getOption(\"showGutter\");\r\n\t };\r\n\t this.setShowGutter = function(show){\r\n\t return this.setOption(\"showGutter\", show);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function(){\r\n\t return this.getOption(\"fadeFoldWidgets\")\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(show) {\r\n\t this.setOption(\"fadeFoldWidgets\", show);\r\n\t };\r\n\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\r\n\t this.$updateGutterLineHighlight = function() {\r\n\t var pos = this.$cursorLayer.$pixelPos;\r\n\t var height = this.layerConfig.lineHeight;\r\n\t if (this.session.getUseWrapMode()) {\r\n\t var cursor = this.session.selection.getCursor();\r\n\t cursor.column = 0;\r\n\t pos = this.$cursorLayer.getPixelPosition(cursor, true);\r\n\t height *= this.session.getRowLength(cursor.row);\r\n\t }\r\n\t this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\r\n\t this.$gutterLineHighlight.style.height = height + \"px\";\r\n\t };\r\n\r\n\t this.$updatePrintMargin = function() {\r\n\t if (!this.$showPrintMargin && !this.$printMarginEl)\r\n\t return;\r\n\r\n\t if (!this.$printMarginEl) {\r\n\t var containerEl = dom.createElement(\"div\");\r\n\t containerEl.className = \"ace_layer ace_print-margin-layer\";\r\n\t this.$printMarginEl = dom.createElement(\"div\");\r\n\t this.$printMarginEl.className = \"ace_print-margin\";\r\n\t containerEl.appendChild(this.$printMarginEl);\r\n\t this.content.insertBefore(containerEl, this.content.firstChild);\r\n\t }\r\n\r\n\t var style = this.$printMarginEl.style;\r\n\t style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\r\n\t style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\r\n\t \r\n\t if (this.session && this.session.$wrap == -1)\r\n\t this.adjustWrapLimit();\r\n\t };\r\n\t this.getContainerElement = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.getMouseEventTarget = function() {\r\n\t return this.scroller;\r\n\t };\r\n\t this.getTextAreaContainer = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.$moveTextAreaToCursor = function() {\r\n\t if (!this.$keepTextAreaAtCursor)\r\n\t return;\r\n\t var config = this.layerConfig;\r\n\t var posTop = this.$cursorLayer.$pixelPos.top;\r\n\t var posLeft = this.$cursorLayer.$pixelPos.left;\r\n\t posTop -= config.offset;\r\n\r\n\t var style = this.textarea.style;\r\n\t var h = this.lineHeight;\r\n\t if (posTop < 0 || posTop > config.height - h) {\r\n\t style.top = style.left = \"0\";\r\n\t return;\r\n\t }\r\n\r\n\t var w = this.characterWidth;\r\n\t if (this.$composition) {\r\n\t var val = this.textarea.value.replace(/^\\x01+/, \"\");\r\n\t w *= (this.session.$getStringScreenWidth(val)[0]+2);\r\n\t h += 2;\r\n\t }\r\n\t posLeft -= this.scrollLeft;\r\n\t if (posLeft > this.$size.scrollerWidth - w)\r\n\t posLeft = this.$size.scrollerWidth - w;\r\n\r\n\t posLeft += this.gutterWidth;\r\n\t style.height = h + \"px\";\r\n\t style.width = w + \"px\";\r\n\t style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\r\n\t style.top = Math.min(posTop, this.$size.height - h) + \"px\";\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.layerConfig.firstRow;\r\n\t };\r\n\t this.getFirstFullyVisibleRow = function() {\r\n\t return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\r\n\t };\r\n\t this.getLastFullyVisibleRow = function() {\r\n\t var config = this.layerConfig;\r\n\t var lastRow = config.lastRow\r\n\t var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\r\n\t if (top - this.session.getScrollTop() > config.height - config.lineHeight)\r\n\t return lastRow - 1;\r\n\t return lastRow;\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.layerConfig.lastRow;\r\n\t };\r\n\r\n\t this.$padding = null;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.$textLayer.setPadding(padding);\r\n\t this.$cursorLayer.setPadding(padding);\r\n\t this.$markerFront.setPadding(padding);\r\n\t this.$markerBack.setPadding(padding);\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t \r\n\t this.setScrollMargin = function(top, bottom, left, right) {\r\n\t var sm = this.scrollMargin;\r\n\t sm.top = top|0;\r\n\t sm.bottom = bottom|0;\r\n\t sm.right = right|0;\r\n\t sm.left = left|0;\r\n\t sm.v = sm.top + sm.bottom;\r\n\t sm.h = sm.left + sm.right;\r\n\t if (sm.top && this.scrollTop <= 0 && this.session)\r\n\t this.session.setScrollTop(-sm.top);\r\n\t this.updateFull();\r\n\t };\r\n\t this.getHScrollBarAlwaysVisible = function() {\r\n\t return this.$hScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\t this.getVScrollBarAlwaysVisible = function() {\r\n\t return this.$vScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\r\n\t this.$updateScrollBarV = function() {\r\n\t var scrollHeight = this.layerConfig.maxHeight;\r\n\t var scrollerHeight = this.$size.scrollerHeight;\r\n\t if (!this.$maxLines && this.$scrollPastEnd) {\r\n\t scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\r\n\t if (this.scrollTop > scrollHeight - scrollerHeight) {\r\n\t scrollHeight = this.scrollTop + scrollerHeight;\r\n\t this.scrollBarV.scrollTop = null;\r\n\t }\r\n\t }\r\n\t this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\r\n\t this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\r\n\t };\r\n\t this.$updateScrollBarH = function() {\r\n\t this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\r\n\t this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\r\n\t };\r\n\t \r\n\t this.$frozen = false;\r\n\t this.freeze = function() {\r\n\t this.$frozen = true;\r\n\t };\r\n\t \r\n\t this.unfreeze = function() {\r\n\t this.$frozen = false;\r\n\t };\r\n\r\n\t this.$renderChanges = function(changes, force) {\r\n\t if (this.$changes) {\r\n\t changes |= this.$changes;\r\n\t this.$changes = 0;\r\n\t }\r\n\t if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\r\n\t this.$changes |= changes;\r\n\t return; \r\n\t } \r\n\t if (this.$size.$dirty) {\r\n\t this.$changes |= changes;\r\n\t return this.onResize(true);\r\n\t }\r\n\t if (!this.lineHeight) {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t }\r\n\t \r\n\t this._signal(\"beforeRender\");\r\n\t var config = this.layerConfig;\r\n\t if (changes & this.CHANGE_FULL ||\r\n\t changes & this.CHANGE_SIZE ||\r\n\t changes & this.CHANGE_TEXT ||\r\n\t changes & this.CHANGE_LINES ||\r\n\t changes & this.CHANGE_SCROLL ||\r\n\t changes & this.CHANGE_H_SCROLL\r\n\t ) {\r\n\t changes |= this.$computeLayerConfig();\r\n\t if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\r\n\t var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\r\n\t if (st > 0) {\r\n\t this.scrollTop = st;\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t changes |= this.$computeLayerConfig();\r\n\t }\r\n\t }\r\n\t config = this.layerConfig;\r\n\t this.$updateScrollBarV();\r\n\t if (changes & this.CHANGE_H_SCROLL)\r\n\t this.$updateScrollBarH();\r\n\t this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.width = config.width + 2 * this.$padding + \"px\";\r\n\t this.content.style.height = config.minHeight + \"px\";\r\n\t }\r\n\t if (changes & this.CHANGE_H_SCROLL) {\r\n\t this.content.style.marginLeft = -this.scrollLeft + \"px\";\r\n\t this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\r\n\t }\r\n\t if (changes & this.CHANGE_FULL) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\t if (changes & this.CHANGE_SCROLL) {\r\n\t if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\r\n\t this.$textLayer.update(config);\r\n\t else\r\n\t this.$textLayer.scrollLines(config);\r\n\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this.$moveTextAreaToCursor();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_TEXT) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_LINES) {\r\n\t if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_CURSOR) {\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\r\n\t this.$markerFront.update(config);\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\r\n\t this.$markerBack.update(config);\r\n\t }\r\n\r\n\t this._signal(\"afterRender\");\r\n\t };\r\n\r\n\t \r\n\t this.$autosize = function() {\r\n\t var height = this.session.getScreenLength() * this.lineHeight;\r\n\t var maxHeight = this.$maxLines * this.lineHeight;\r\n\t var desiredHeight = Math.max(\r\n\t (this.$minLines||1) * this.lineHeight,\r\n\t Math.min(maxHeight, height)\r\n\t ) + this.scrollMargin.v + (this.$extraHeight || 0);\r\n\t if (this.$horizScroll)\r\n\t desiredHeight += this.scrollBarH.getHeight();\r\n\t var vScroll = height > maxHeight;\r\n\t \r\n\t if (desiredHeight != this.desiredHeight ||\r\n\t this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\r\n\t if (vScroll != this.$vScroll) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\t \r\n\t var w = this.container.clientWidth;\r\n\t this.container.style.height = desiredHeight + \"px\";\r\n\t this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\r\n\t this.desiredHeight = desiredHeight;\r\n\t \r\n\t this._signal(\"autosize\");\r\n\t }\r\n\t };\r\n\t \r\n\t this.$computeLayerConfig = function() {\r\n\t var session = this.session;\r\n\t var size = this.$size;\r\n\t \r\n\t var hideScrollbars = size.height <= 2 * this.lineHeight;\r\n\t var screenLines = this.session.getScreenLength();\r\n\t var maxHeight = screenLines * this.lineHeight;\r\n\r\n\t var longestLine = this.$getLongestLine();\r\n\t \r\n\t var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\r\n\t size.scrollerWidth - longestLine - 2 * this.$padding < 0);\r\n\r\n\t var hScrollChanged = this.$horizScroll !== horizScroll;\r\n\t if (hScrollChanged) {\r\n\t this.$horizScroll = horizScroll;\r\n\t this.scrollBarH.setVisible(horizScroll);\r\n\t }\r\n\t var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\r\n\t if (this.$maxLines && this.lineHeight > 1)\r\n\t this.$autosize();\r\n\r\n\t var offset = this.scrollTop % this.lineHeight;\r\n\t var minHeight = size.scrollerHeight + this.lineHeight;\r\n\t \r\n\t var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\r\n\t ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\r\n\t : 0;\r\n\t maxHeight += scrollPastEnd;\r\n\t \r\n\t var sm = this.scrollMargin;\r\n\t this.session.setScrollTop(Math.max(-sm.top,\r\n\t Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\r\n\r\n\t this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \r\n\t longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\r\n\t \r\n\t var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\r\n\t size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\r\n\t var vScrollChanged = vScrollBefore !== vScroll;\r\n\t if (vScrollChanged) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\r\n\t var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\r\n\t var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\r\n\t var lastRow = firstRow + lineCount;\r\n\t var firstRowScreen, firstRowHeight;\r\n\t var lineHeight = this.lineHeight;\r\n\t firstRow = session.screenToDocumentRow(firstRow, 0);\r\n\t var foldLine = session.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t firstRow = foldLine.start.row;\r\n\t }\r\n\r\n\t firstRowScreen = session.documentToScreenRow(firstRow, 0);\r\n\t firstRowHeight = session.getRowLength(firstRow) * lineHeight;\r\n\r\n\t lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\r\n\t minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\r\n\t firstRowHeight;\r\n\r\n\t offset = this.scrollTop - firstRowScreen * lineHeight;\r\n\r\n\t var changes = 0;\r\n\t if (this.layerConfig.width != longestLine) \r\n\t changes = this.CHANGE_H_SCROLL;\r\n\t if (hScrollChanged || vScrollChanged) {\r\n\t changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\r\n\t this._signal(\"scrollbarVisibilityChanged\");\r\n\t if (vScrollChanged)\r\n\t longestLine = this.$getLongestLine();\r\n\t }\r\n\t \r\n\t this.layerConfig = {\r\n\t width : longestLine,\r\n\t padding : this.$padding,\r\n\t firstRow : firstRow,\r\n\t firstRowScreen: firstRowScreen,\r\n\t lastRow : lastRow,\r\n\t lineHeight : lineHeight,\r\n\t characterWidth : this.characterWidth,\r\n\t minHeight : minHeight,\r\n\t maxHeight : maxHeight,\r\n\t offset : offset,\r\n\t gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)),\r\n\t height : this.$size.scrollerHeight\r\n\t };\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.$updateLines = function() {\r\n\t var firstRow = this.$changedLines.firstRow;\r\n\t var lastRow = this.$changedLines.lastRow;\r\n\t this.$changedLines = null;\r\n\r\n\t var layerConfig = this.layerConfig;\r\n\r\n\t if (firstRow > layerConfig.lastRow + 1) { return; }\r\n\t if (lastRow < layerConfig.firstRow) { return; }\r\n\t if (lastRow === Infinity) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(layerConfig);\r\n\t this.$textLayer.update(layerConfig);\r\n\t return;\r\n\t }\r\n\t this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\r\n\t return true;\r\n\t };\r\n\r\n\t this.$getLongestLine = function() {\r\n\t var charCount = this.session.getScreenWidth();\r\n\t if (this.showInvisibles && !this.session.$useWrapMode)\r\n\t charCount += 1;\r\n\r\n\t return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\r\n\t };\r\n\t this.updateFrontMarkers = function() {\r\n\t this.$markerFront.setMarkers(this.session.getMarkers(true));\r\n\t this.$loop.schedule(this.CHANGE_MARKER_FRONT);\r\n\t };\r\n\t this.updateBackMarkers = function() {\r\n\t this.$markerBack.setMarkers(this.session.getMarkers());\r\n\t this.$loop.schedule(this.CHANGE_MARKER_BACK);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.addGutterDecoration(row, className);\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.removeGutterDecoration(row, className);\r\n\t };\r\n\t this.updateBreakpoints = function(rows) {\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$gutterLayer.setAnnotations(annotations);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.updateCursor = function() {\r\n\t this.$loop.schedule(this.CHANGE_CURSOR);\r\n\t };\r\n\t this.hideCursor = function() {\r\n\t this.$cursorLayer.hideCursor();\r\n\t };\r\n\t this.showCursor = function() {\r\n\t this.$cursorLayer.showCursor();\r\n\t };\r\n\r\n\t this.scrollSelectionIntoView = function(anchor, lead, offset) {\r\n\t this.scrollCursorIntoView(anchor, offset);\r\n\t this.scrollCursorIntoView(lead, offset);\r\n\t };\r\n\t this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\r\n\t if (this.$size.scrollerHeight === 0)\r\n\t return;\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\r\n\t var left = pos.left;\r\n\t var top = pos.top;\r\n\t \r\n\t var topMargin = $viewMargin && $viewMargin.top || 0;\r\n\t var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\r\n\t \r\n\t var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\r\n\t \r\n\t if (scrollTop + topMargin > top) {\r\n\t if (offset && scrollTop + topMargin > top + this.lineHeight)\r\n\t top -= offset * this.$size.scrollerHeight;\r\n\t if (top === 0)\r\n\t top = -this.scrollMargin.top;\r\n\t this.session.setScrollTop(top);\r\n\t } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\r\n\t if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\r\n\t top += offset * this.$size.scrollerHeight;\r\n\t this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\r\n\t }\r\n\r\n\t var scrollLeft = this.scrollLeft;\r\n\r\n\t if (scrollLeft > left) {\r\n\t if (left < this.$padding + 2 * this.layerConfig.characterWidth)\r\n\t left = -this.scrollMargin.left;\r\n\t this.session.setScrollLeft(left);\r\n\t } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\r\n\t this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\r\n\t } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\r\n\t this.session.setScrollLeft(0);\r\n\t }\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.session.getScrollTop();\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.session.getScrollLeft();\r\n\t };\r\n\t this.getScrollTopRow = function() {\r\n\t return this.scrollTop / this.lineHeight;\r\n\t };\r\n\t this.getScrollBottomRow = function() {\r\n\t return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.session.setScrollTop(row * this.lineHeight);\r\n\t };\r\n\r\n\t this.alignCursor = function(cursor, alignment) {\r\n\t if (typeof cursor == \"number\")\r\n\t cursor = {row: cursor, column: 0};\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\t var h = this.$size.scrollerHeight - this.lineHeight;\r\n\t var offset = pos.top - h * (alignment || 0);\r\n\r\n\t this.session.setScrollTop(offset);\r\n\t return offset;\r\n\t };\r\n\r\n\t this.STEPS = 8;\r\n\t this.$calcSteps = function(fromValue, toValue){\r\n\t var i = 0;\r\n\t var l = this.STEPS;\r\n\t var steps = [];\r\n\r\n\t var func = function(t, x_min, dx) {\r\n\t return dx * (Math.pow(t - 1, 3) + 1) + x_min;\r\n\t };\r\n\r\n\t for (i = 0; i < l; ++i)\r\n\t steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\r\n\r\n\t return steps;\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\r\n\t var offset = pos.top;\r\n\t if (center)\r\n\t offset -= this.$size.scrollerHeight / 2;\r\n\r\n\t var initialScroll = this.scrollTop;\r\n\t this.session.setScrollTop(offset);\r\n\t if (animate !== false)\r\n\t this.animateScrolling(initialScroll, callback);\r\n\t };\r\n\r\n\t this.animateScrolling = function(fromValue, callback) {\r\n\t var toValue = this.scrollTop;\r\n\t if (!this.$animatedScroll)\r\n\t return;\r\n\t var _self = this;\r\n\t \r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t \r\n\t if (this.$scrollAnimation) {\r\n\t var oldSteps = this.$scrollAnimation.steps;\r\n\t if (oldSteps.length) {\r\n\t fromValue = oldSteps[0];\r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var steps = _self.$calcSteps(fromValue, toValue);\r\n\t this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\r\n\r\n\t clearInterval(this.$timer);\r\n\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t this.$timer = setInterval(function() {\r\n\t if (steps.length) {\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t } else if (toValue != null) {\r\n\t _self.session.$scrollTop = -1;\r\n\t _self.session.setScrollTop(toValue);\r\n\t toValue = null;\r\n\t } else {\r\n\t _self.$timer = clearInterval(_self.$timer);\r\n\t _self.$scrollAnimation = null;\r\n\t callback && callback();\r\n\t }\r\n\t }, 10);\r\n\t };\r\n\t this.scrollToY = function(scrollTop) {\r\n\t if (this.scrollTop !== scrollTop) {\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t this.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\t this.scrollToX = function(scrollLeft) {\r\n\t if (this.scrollLeft !== scrollLeft)\r\n\t this.scrollLeft = scrollLeft;\r\n\t this.$loop.schedule(this.CHANGE_H_SCROLL);\r\n\t };\r\n\t this.scrollTo = function(x, y) {\r\n\t this.session.setScrollTop(y);\r\n\t this.session.setScrollLeft(y);\r\n\t };\r\n\t this.scrollBy = function(deltaX, deltaY) {\r\n\t deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\r\n\t deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\r\n\t };\r\n\t this.isScrollableBy = function(deltaX, deltaY) {\r\n\t if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\r\n\t return true;\r\n\t if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\r\n\t - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\r\n\t return true;\r\n\t if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\r\n\t return true;\r\n\t if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\r\n\t - this.layerConfig.width < -1 + this.scrollMargin.right)\r\n\t return true;\r\n\t };\r\n\r\n\t this.pixelToScreenCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;\r\n\t var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\r\n\t var col = Math.round(offset);\r\n\r\n\t return {row: row, column: col, side: offset - col > 0 ? 1 : -1};\r\n\t };\r\n\r\n\t this.screenToTextCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var col = Math.round(\r\n\t (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth\r\n\t );\r\n\r\n\t var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\r\n\r\n\t return this.session.screenToDocumentPosition(row, Math.max(col, 0));\r\n\t };\r\n\t this.textToScreenCoordinates = function(row, column) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\t var pos = this.session.documentToScreenPosition(row, column);\r\n\r\n\t var x = this.$padding + Math.round(pos.column * this.characterWidth);\r\n\t var y = pos.row * this.lineHeight;\r\n\r\n\t return {\r\n\t pageX: canvasPos.left + x - this.scrollLeft,\r\n\t pageY: canvasPos.top + y - this.scrollTop\r\n\t };\r\n\t };\r\n\t this.visualizeFocus = function() {\r\n\t dom.addCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.visualizeBlur = function() {\r\n\t dom.removeCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.showComposition = function(position) {\r\n\t if (!this.$composition)\r\n\t this.$composition = {\r\n\t keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\r\n\t cssText: this.textarea.style.cssText\r\n\t };\r\n\r\n\t this.$keepTextAreaAtCursor = true;\r\n\t dom.addCssClass(this.textarea, \"ace_composition\");\r\n\t this.textarea.style.cssText = \"\";\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.setCompositionText = function(text) {\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.hideComposition = function() {\r\n\t if (!this.$composition)\r\n\t return;\r\n\r\n\t dom.removeCssClass(this.textarea, \"ace_composition\");\r\n\t this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\r\n\t this.textarea.style.cssText = this.$composition.cssText;\r\n\t this.$composition = null;\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t var _self = this;\r\n\t this.$themeId = theme;\r\n\t _self._dispatchEvent('themeChange',{theme:theme});\r\n\r\n\t if (!theme || typeof theme == \"string\") {\r\n\t var moduleName = theme || this.$options.theme.initialValue;\r\n\t config.loadModule([\"theme\", moduleName], afterLoad);\r\n\t } else {\r\n\t afterLoad(theme);\r\n\t }\r\n\r\n\t function afterLoad(module) {\r\n\t if (_self.$themeId != theme)\r\n\t return cb && cb();\r\n\t if (!module.cssClass)\r\n\t return;\r\n\t dom.importCssString(\r\n\t module.cssText,\r\n\t module.cssClass,\r\n\t _self.container.ownerDocument\r\n\t );\r\n\r\n\t if (_self.theme)\r\n\t dom.removeCssClass(_self.container, _self.theme.cssClass);\r\n\r\n\t var padding = \"padding\" in module ? module.padding \r\n\t : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\r\n\t if (_self.$padding && padding != _self.$padding)\r\n\t _self.setPadding(padding);\r\n\t _self.$theme = module.cssClass;\r\n\r\n\t _self.theme = module;\r\n\t dom.addCssClass(_self.container, module.cssClass);\r\n\t dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\r\n\t if (_self.$size) {\r\n\t _self.$size.width = 0;\r\n\t _self.$updateSizeAsync();\r\n\t }\r\n\r\n\t _self._dispatchEvent('themeLoaded', {theme:module});\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.$themeId;\r\n\t };\r\n\t this.setStyle = function(style, include) {\r\n\t dom.setCssClass(this.container, style, include !== false);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t dom.removeCssClass(this.container, style);\r\n\t };\r\n\t \r\n\t this.setCursorStyle = function(style) {\r\n\t if (this.scroller.style.cursor != style)\r\n\t this.scroller.style.cursor = style;\r\n\t };\r\n\t this.setMouseCursor = function(cursorStyle) {\r\n\t this.scroller.style.cursor = cursorStyle;\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.$textLayer.destroy();\r\n\t this.$cursorLayer.destroy();\r\n\t };\r\n\r\n\t}).call(VirtualRenderer.prototype);\r\n\r\n\r\n\tconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\r\n\t animatedScroll: {initialValue: false},\r\n\t showInvisibles: {\r\n\t set: function(value) {\r\n\t if (this.$textLayer.setShowInvisibles(value))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showPrintMargin: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: true\r\n\t },\r\n\t printMarginColumn: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: 80\r\n\t },\r\n\t printMargin: {\r\n\t set: function(val) {\r\n\t if (typeof val == \"number\")\r\n\t this.$printMarginColumn = val;\r\n\t this.$showPrintMargin = !!val;\r\n\t this.$updatePrintMargin();\r\n\t },\r\n\t get: function() {\r\n\t return this.$showPrintMargin && this.$printMarginColumn; \r\n\t }\r\n\t },\r\n\t showGutter: {\r\n\t set: function(show){\r\n\t this.$gutter.style.display = show ? \"block\" : \"none\";\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.onGutterResize();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t fadeFoldWidgets: {\r\n\t set: function(show) {\r\n\t dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showFoldWidgets: {\r\n\t set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},\r\n\t initialValue: true\r\n\t },\r\n\t showLineNumbers: {\r\n\t set: function(show) {\r\n\t this.$gutterLayer.setShowLineNumbers(show);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t displayIndentGuides: {\r\n\t set: function(show) {\r\n\t if (this.$textLayer.setDisplayIndentGuides(show))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t highlightGutterLine: {\r\n\t set: function(shouldHighlight) {\r\n\t if (!this.$gutterLineHighlight) {\r\n\t this.$gutterLineHighlight = dom.createElement(\"div\");\r\n\t this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\r\n\t this.$gutter.appendChild(this.$gutterLineHighlight);\r\n\t return;\r\n\t }\r\n\r\n\t this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\r\n\t if (this.$cursorLayer.$pixelPos)\r\n\t this.$updateGutterLineHighlight();\r\n\t },\r\n\t initialValue: false,\r\n\t value: true\r\n\t },\r\n\t hScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t vScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t fontSize: {\r\n\t set: function(size) {\r\n\t if (typeof size == \"number\")\r\n\t size = size + \"px\";\r\n\t this.container.style.fontSize = size;\r\n\t this.updateFontSize();\r\n\t },\r\n\t initialValue: 12\r\n\t },\r\n\t fontFamily: {\r\n\t set: function(name) {\r\n\t this.container.style.fontFamily = name;\r\n\t this.updateFontSize();\r\n\t }\r\n\t },\r\n\t maxLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t minLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t scrollPastEnd: {\r\n\t set: function(val) {\r\n\t val = +val || 0;\r\n\t if (this.$scrollPastEnd == val)\r\n\t return;\r\n\t this.$scrollPastEnd = val;\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: 0,\r\n\t handlesSet: true\r\n\t },\r\n\t fixedWidthGutter: {\r\n\t set: function(val) {\r\n\t this.$gutterLayer.$fixedWidth = !!val;\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t }\r\n\t },\r\n\t theme: {\r\n\t set: function(val) { this.setTheme(val) },\r\n\t get: function() { return this.$themeId || this.theme; },\r\n\t initialValue: \"./theme/textmate\",\r\n\t handlesSet: true\r\n\t }\r\n\t});\r\n\r\n\texports.VirtualRenderer = VirtualRenderer;\r\n\t});\r\n\r\n\tace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar net = acequire(\"../lib/net\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\tvar config = acequire(\"../config\");\r\n\r\n\tvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.onMessage = this.onMessage.bind(this);\r\n\t if (acequire.nameToUrl && !acequire.toUrl)\r\n\t acequire.toUrl = acequire.nameToUrl;\r\n\t \r\n\t if (config.get(\"packaged\") || !acequire.toUrl) {\r\n\t workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\")\r\n\t } else {\r\n\t var normalizePath = this.$normalizePath;\r\n\t workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\r\n\r\n\t var tlns = {};\r\n\t topLevelNamespaces.forEach(function(ns) {\r\n\t tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\r\n\t });\r\n\t }\r\n\r\n\t try {\r\n\t var workerSrc = mod.src;\r\n\t var Blob = __webpack_require__(66);\r\n\t var blob = new Blob([ workerSrc ], { type: 'application/javascript' });\r\n\t var blobUrl = (window.URL || window.webkitURL).createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobUrl);\r\n\r\n\t } catch(e) {\r\n\t if (e instanceof window.DOMException) {\r\n\t var blob = this.$workerBlob(workerUrl);\r\n\t var URL = window.URL || window.webkitURL;\r\n\t var blobURL = URL.createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobURL);\r\n\t URL.revokeObjectURL(blobURL);\r\n\t } else {\r\n\t throw e;\r\n\t }\r\n\t }\r\n\t this.$worker.postMessage({\r\n\t init : true,\r\n\t tlns : tlns,\r\n\t module : mod.id,\r\n\t classname : classname\r\n\t });\r\n\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\r\n\t this.$worker.onmessage = this.onMessage;\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.onMessage = function(e) {\r\n\t var msg = e.data;\r\n\t switch(msg.type) {\r\n\t case \"event\":\r\n\t this._signal(msg.name, {data: msg.data});\r\n\t break;\r\n\t case \"call\":\r\n\t var callback = this.callbacks[msg.id];\r\n\t if (callback) {\r\n\t callback(msg.data);\r\n\t delete this.callbacks[msg.id];\r\n\t }\r\n\t break;\r\n\t case \"error\":\r\n\t this.reportError(msg.data);\r\n\t break;\r\n\t case \"log\":\r\n\t window.console && console.log && console.log.apply(console, msg.data);\r\n\t break;\r\n\t }\r\n\t };\r\n\t \r\n\t this.reportError = function(err) {\r\n\t window.console && console.error && console.error(err);\r\n\t };\r\n\r\n\t this.$normalizePath = function(path) {\r\n\t return net.qualifyURL(path);\r\n\t };\r\n\r\n\t this.terminate = function() {\r\n\t this._signal(\"terminate\", {});\r\n\t this.deltaQueue = null;\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t if (this.$doc)\r\n\t this.$doc.off(\"change\", this.changeListener);\r\n\t this.$doc = null;\r\n\t };\r\n\r\n\t this.send = function(cmd, args) {\r\n\t this.$worker.postMessage({command: cmd, args: args});\r\n\t };\r\n\r\n\t this.call = function(cmd, args, callback) {\r\n\t if (callback) {\r\n\t var id = this.callbackId++;\r\n\t this.callbacks[id] = callback;\r\n\t args.push(id);\r\n\t }\r\n\t this.send(cmd, args);\r\n\t };\r\n\r\n\t this.emit = function(event, data) {\r\n\t try {\r\n\t this.$worker.postMessage({event: event, data: {data: data.data}});\r\n\t }\r\n\t catch(ex) {\r\n\t console.error(ex.stack);\r\n\t }\r\n\t };\r\n\r\n\t this.attachToDocument = function(doc) {\r\n\t if(this.$doc)\r\n\t this.terminate();\r\n\r\n\t this.$doc = doc;\r\n\t this.call(\"setValue\", [doc.getValue()]);\r\n\t doc.on(\"change\", this.changeListener);\r\n\t };\r\n\r\n\t this.changeListener = function(delta) {\r\n\t if (!this.deltaQueue) {\r\n\t this.deltaQueue = [];\r\n\t setTimeout(this.$sendDeltaQueue, 0);\r\n\t }\r\n\t if (delta.action == \"insert\")\r\n\t this.deltaQueue.push(delta.start, delta.lines);\r\n\t else\r\n\t this.deltaQueue.push(delta.start, delta.end);\r\n\t };\r\n\r\n\t this.$sendDeltaQueue = function() {\r\n\t var q = this.deltaQueue;\r\n\t if (!q) return;\r\n\t this.deltaQueue = null;\r\n\t if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\r\n\t this.call(\"setValue\", [this.$doc.getValue()]);\r\n\t } else\r\n\t this.emit(\"change\", {data: q});\r\n\t };\r\n\r\n\t this.$workerBlob = function(workerUrl) {\r\n\t var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\r\n\t try {\r\n\t return new Blob([script], {\"type\": \"application/javascript\"});\r\n\t } catch (e) { // Backwards-compatibility\r\n\t var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\r\n\t var blobBuilder = new BlobBuilder();\r\n\t blobBuilder.append(script);\r\n\t return blobBuilder.getBlob(\"application/javascript\");\r\n\t }\r\n\t };\r\n\r\n\t}).call(WorkerClient.prototype);\r\n\r\n\r\n\tvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\t this.messageBuffer = [];\r\n\r\n\t var main = null;\r\n\t var emitSync = false;\r\n\t var sender = Object.create(EventEmitter);\r\n\t var _self = this;\r\n\r\n\t this.$worker = {};\r\n\t this.$worker.terminate = function() {};\r\n\t this.$worker.postMessage = function(e) {\r\n\t _self.messageBuffer.push(e);\r\n\t if (main) {\r\n\t if (emitSync)\r\n\t setTimeout(processNext);\r\n\t else\r\n\t processNext();\r\n\t }\r\n\t };\r\n\t this.setEmitSync = function(val) { emitSync = val };\r\n\r\n\t var processNext = function() {\r\n\t var msg = _self.messageBuffer.shift();\r\n\t if (msg.command)\r\n\t main[msg.command].apply(main, msg.args);\r\n\t else if (msg.event)\r\n\t sender._signal(msg.event, msg.data);\r\n\t };\r\n\r\n\t sender.postMessage = function(msg) {\r\n\t _self.onMessage({data: msg});\r\n\t };\r\n\t sender.callback = function(data, callbackId) {\r\n\t this.postMessage({type: \"call\", id: callbackId, data: data});\r\n\t };\r\n\t sender.emit = function(name, data) {\r\n\t this.postMessage({type: \"event\", name: name, data: data});\r\n\t };\r\n\r\n\t config.loadModule([\"worker\", mod], function(Main) {\r\n\t main = new Main[classname](sender);\r\n\t while (_self.messageBuffer.length)\r\n\t processNext();\r\n\t });\r\n\t};\r\n\r\n\tUIWorkerClient.prototype = WorkerClient.prototype;\r\n\r\n\texports.UIWorkerClient = UIWorkerClient;\r\n\texports.WorkerClient = WorkerClient;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\r\n\tvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\r\n\t var _self = this;\r\n\t this.length = length;\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\t this.mainClass = mainClass;\r\n\t this.othersClass = othersClass;\r\n\t this.$onUpdate = this.onUpdate.bind(this);\r\n\t this.doc.on(\"change\", this.$onUpdate);\r\n\t this.$others = others;\r\n\t \r\n\t this.$onCursorChange = function() {\r\n\t setTimeout(function() {\r\n\t _self.onCursorChange();\r\n\t });\r\n\t };\r\n\t \r\n\t this.$pos = pos;\r\n\t var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\r\n\t this.$undoStackDepth = undoStack.length;\r\n\t this.setup();\r\n\r\n\t session.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setup = function() {\r\n\t var _self = this;\r\n\t var doc = this.doc;\r\n\t var session = this.session;\r\n\t \r\n\t this.selectionBefore = session.selection.toJSON();\r\n\t if (session.selection.inMultiSelectMode)\r\n\t session.selection.toSingleRange();\r\n\r\n\t this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\r\n\t var pos = this.pos;\r\n\t pos.$insertRight = true;\r\n\t pos.detach();\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\r\n\t this.others = [];\r\n\t this.$others.forEach(function(other) {\r\n\t var anchor = doc.createAnchor(other.row, other.column);\r\n\t anchor.$insertRight = true;\r\n\t anchor.detach();\r\n\t _self.others.push(anchor);\r\n\t });\r\n\t session.setUndoSelect(false);\r\n\t };\r\n\t this.showOtherMarkers = function() {\r\n\t if (this.othersActive) return;\r\n\t var session = this.session;\r\n\t var _self = this;\r\n\t this.othersActive = true;\r\n\t this.others.forEach(function(anchor) {\r\n\t anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\r\n\t });\r\n\t };\r\n\t this.hideOtherMarkers = function() {\r\n\t if (!this.othersActive) return;\r\n\t this.othersActive = false;\r\n\t for (var i = 0; i < this.others.length; i++) {\r\n\t this.session.removeMarker(this.others[i].markerId);\r\n\t }\r\n\t };\r\n\t this.onUpdate = function(delta) {\r\n\t if (this.$updating)\r\n\t return this.updateAnchors(delta);\r\n\t \r\n\t var range = delta;\r\n\t if (range.start.row !== range.end.row) return;\r\n\t if (range.start.row !== this.pos.row) return;\r\n\t this.$updating = true;\r\n\t var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\r\n\t var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\r\n\t var distanceFromStart = range.start.column - this.pos.column;\r\n\t \r\n\t this.updateAnchors(delta);\r\n\t \r\n\t if (inMainRange)\r\n\t this.length += lengthDiff;\r\n\r\n\t if (inMainRange && !this.session.$fromUndo) {\r\n\t if (delta.action === 'insert') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.insertMergedLines(newPos, delta.lines);\r\n\t }\r\n\t } else if (delta.action === 'remove') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.$updating = false;\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateAnchors = function(delta) {\r\n\t this.pos.onChange(delta);\r\n\t for (var i = this.others.length; i--;)\r\n\t this.others[i].onChange(delta);\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateMarkers = function() {\r\n\t if (this.$updating)\r\n\t return;\r\n\t var _self = this;\r\n\t var session = this.session;\r\n\t var updateMarker = function(pos, className) {\r\n\t session.removeMarker(pos.markerId);\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\r\n\t };\r\n\t updateMarker(this.pos, this.mainClass);\r\n\t for (var i = this.others.length; i--;)\r\n\t updateMarker(this.others[i], this.othersClass);\r\n\t };\r\n\r\n\t this.onCursorChange = function(event) {\r\n\t if (this.$updating || !this.session) return;\r\n\t var pos = this.session.selection.getCursor();\r\n\t if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\r\n\t this.showOtherMarkers();\r\n\t this._emit(\"cursorEnter\", event);\r\n\t } else {\r\n\t this.hideOtherMarkers();\r\n\t this._emit(\"cursorLeave\", event);\r\n\t }\r\n\t }; \r\n\t this.detach = function() {\r\n\t this.session.removeMarker(this.pos && this.pos.markerId);\r\n\t this.hideOtherMarkers();\r\n\t this.doc.removeEventListener(\"change\", this.$onUpdate);\r\n\t this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\r\n\t this.session.setUndoSelect(true);\r\n\t this.session = null;\r\n\t };\r\n\t this.cancel = function() {\r\n\t if (this.$undoStackDepth === -1)\r\n\t return;\r\n\t var undoManager = this.session.getUndoManager();\r\n\t var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\r\n\t for (var i = 0; i < undosRequired; i++) {\r\n\t undoManager.undo(true);\r\n\t }\r\n\t if (this.selectionBefore)\r\n\t this.session.selection.fromJSON(this.selectionBefore);\r\n\t };\r\n\t}).call(PlaceHolder.prototype);\r\n\r\n\r\n\texports.PlaceHolder = PlaceHolder;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\r\n\tfunction onMouseDown(e) {\r\n\t var ev = e.domEvent;\r\n\t var alt = ev.altKey;\r\n\t var shift = ev.shiftKey;\r\n\t var ctrl = ev.ctrlKey;\r\n\t var accel = e.getAccelKey();\r\n\t var button = e.getButton();\r\n\t \r\n\t if (ctrl && useragent.isMac)\r\n\t button = ev.button;\r\n\r\n\t if (e.editor.inMultiSelectMode && button == 2) {\r\n\t e.editor.textInput.onContextMenu(e.domEvent);\r\n\t return;\r\n\t }\r\n\t \r\n\t if (!ctrl && !alt && !accel) {\r\n\t if (button === 0 && e.editor.inMultiSelectMode)\r\n\t e.editor.exitMultiSelectMode();\r\n\t return;\r\n\t }\r\n\t \r\n\t if (button !== 0)\r\n\t return;\r\n\r\n\t var editor = e.editor;\r\n\t var selection = editor.selection;\r\n\t var isMultiSelect = editor.inMultiSelectMode;\r\n\t var pos = e.getDocumentPosition();\r\n\t var cursor = selection.getCursor();\r\n\t var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\r\n\r\n\t var mouseX = e.x, mouseY = e.y;\r\n\t var onMouseSelection = function(e) {\r\n\t mouseX = e.clientX;\r\n\t mouseY = e.clientY;\r\n\t };\r\n\t \r\n\t var session = editor.session;\r\n\t var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var screenCursor = screenAnchor;\r\n\t \r\n\t var selectionMode;\r\n\t if (editor.$mouseHandler.$enableJumpToDef) {\r\n\t if (ctrl && alt || accel && alt)\r\n\t selectionMode = shift ? \"block\" : \"add\";\r\n\t else if (alt && editor.$blockSelectEnabled)\r\n\t selectionMode = \"block\";\r\n\t } else {\r\n\t if (accel && !alt) {\r\n\t selectionMode = \"add\";\r\n\t if (!isMultiSelect && shift)\r\n\t return;\r\n\t } else if (alt && editor.$blockSelectEnabled) {\r\n\t selectionMode = \"block\";\r\n\t }\r\n\t }\r\n\t \r\n\t if (selectionMode && useragent.isMac && ev.ctrlKey) {\r\n\t editor.$mouseHandler.cancelContextMenu();\r\n\t }\r\n\r\n\t if (selectionMode == \"add\") {\r\n\t if (!isMultiSelect && inSelection)\r\n\t return; // dragging\r\n\r\n\t if (!isMultiSelect) {\r\n\t var range = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(range);\r\n\t }\r\n\r\n\t var oldRange = selection.rangeList.rangeAtPoint(pos);\r\n\t \r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.inVirtualSelectionMode = true;\r\n\t \r\n\t if (shift) {\r\n\t oldRange = null;\r\n\t range = selection.ranges[0] || range;\r\n\t editor.removeSelectionMarker(range);\r\n\t }\r\n\t editor.once(\"mouseup\", function() {\r\n\t var tmpSel = selection.toOrientedRange();\r\n\r\n\t if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\r\n\t selection.substractPoint(tmpSel.cursor);\r\n\t else {\r\n\t if (shift) {\r\n\t selection.substractPoint(range.cursor);\r\n\t } else if (range) {\r\n\t editor.removeSelectionMarker(range);\r\n\t selection.addRange(range);\r\n\t }\r\n\t selection.addRange(tmpSel);\r\n\t }\r\n\t editor.$blockScrolling--;\r\n\t editor.inVirtualSelectionMode = false;\r\n\t });\r\n\r\n\t } else if (selectionMode == \"block\") {\r\n\t e.stop();\r\n\t editor.inVirtualSelectionMode = true; \r\n\t var initialRange;\r\n\t var rectSel = [];\r\n\t var blockSelect = function() {\r\n\t var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);\r\n\r\n\t if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\r\n\t return;\r\n\t screenCursor = newCursor;\r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.selection.moveToPosition(cursor);\r\n\t editor.renderer.scrollCursorIntoView();\r\n\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\r\n\t if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\r\n\t rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\r\n\t rectSel.forEach(editor.addSelectionMarker, editor);\r\n\t editor.updateSelectionMarkers();\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\t editor.$blockScrolling++;\r\n\t if (isMultiSelect && !accel) {\r\n\t selection.toSingleRange();\r\n\t } else if (!isMultiSelect && accel) {\r\n\t initialRange = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(initialRange);\r\n\t }\r\n\t \r\n\t if (shift)\r\n\t screenAnchor = session.documentToScreenPosition(selection.lead); \r\n\t else\r\n\t selection.moveToPosition(pos);\r\n\t editor.$blockScrolling--;\r\n\t \r\n\t screenCursor = {row: -1, column: -1};\r\n\r\n\t var onMouseSelectionEnd = function(e) {\r\n\t clearInterval(timerId);\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t if (!rectSel.length)\r\n\t rectSel = [selection.toOrientedRange()];\r\n\t editor.$blockScrolling++;\r\n\t if (initialRange) {\r\n\t editor.removeSelectionMarker(initialRange);\r\n\t selection.toSingleRange(initialRange);\r\n\t }\r\n\t for (var i = 0; i < rectSel.length; i++)\r\n\t selection.addRange(rectSel[i]);\r\n\t editor.inVirtualSelectionMode = false;\r\n\t editor.$mouseHandler.$clickSelection = null;\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t var onSelectionInterval = blockSelect;\r\n\r\n\t event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\r\n\t var timerId = setInterval(function() {onSelectionInterval();}, 20);\r\n\r\n\t return e.preventDefault();\r\n\t }\r\n\t}\r\n\r\n\r\n\texports.onMouseDown = onMouseDown;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\r\n\texports.defaultCommands = [{\r\n\t name: \"addCursorAbove\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelow\",\r\n\t exec: function(editor) { editor.selectMoreLines(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorAboveSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelowSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreAfter\",\r\n\t exec: function(editor) { editor.selectMore(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextAfter\",\r\n\t exec: function(editor) { editor.selectMore(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"splitIntoLines\",\r\n\t exec: function(editor) { editor.multiSelect.splitIntoLines(); },\r\n\t bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"alignCursors\",\r\n\t exec: function(editor) { editor.alignCursors(); },\r\n\t bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"findAll\",\r\n\t exec: function(editor) { editor.findAll(); },\r\n\t bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}];\r\n\texports.multiSelectCommands = [{\r\n\t name: \"singleSelection\",\r\n\t bindKey: \"esc\",\r\n\t exec: function(editor) { editor.exitMultiSelectMode(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true,\r\n\t isAvailable: function(editor) {return editor && editor.inMultiSelectMode}\r\n\t}];\r\n\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\texports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\r\n\r\n\tvar RangeList = acequire(\"./range_list\").RangeList;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar commands = acequire(\"./commands/multi_select_commands\");\r\n\texports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar search = new Search();\r\n\r\n\tfunction find(session, needle, dir) {\r\n\t search.$options.wrap = true;\r\n\t search.$options.needle = needle;\r\n\t search.$options.backwards = dir == -1;\r\n\t return search.find(session);\r\n\t}\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\t(function() {\r\n\t this.getSelectionMarkers = function() {\r\n\t return this.$selectionMarkers;\r\n\t };\r\n\t}).call(EditSession.prototype);\r\n\t(function() {\r\n\t this.ranges = null;\r\n\t this.rangeList = null;\r\n\t this.addRange = function(range, $blockChangeEvents) {\r\n\t if (!range)\r\n\t return;\r\n\r\n\t if (!this.inMultiSelectMode && this.rangeCount === 0) {\r\n\t var oldRange = this.toOrientedRange();\r\n\t this.rangeList.add(oldRange);\r\n\t this.rangeList.add(range);\r\n\t if (this.rangeList.ranges.length != 2) {\r\n\t this.rangeList.removeAll();\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t }\r\n\t this.rangeList.removeAll();\r\n\t this.rangeList.add(oldRange);\r\n\t this.$onAddRange(oldRange);\r\n\t }\r\n\r\n\t if (!range.cursor)\r\n\t range.cursor = range.end;\r\n\r\n\t var removed = this.rangeList.add(range);\r\n\r\n\t this.$onAddRange(range);\r\n\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t if (this.rangeCount > 1 && !this.inMultiSelectMode) {\r\n\t this._signal(\"multiSelect\");\r\n\t this.inMultiSelectMode = true;\r\n\t this.session.$undoSelect = false;\r\n\t this.rangeList.attach(this.session);\r\n\t }\r\n\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t };\r\n\r\n\t this.toSingleRange = function(range) {\r\n\t range = range || this.ranges[0];\r\n\t var removed = this.rangeList.removeAll();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t range && this.fromOrientedRange(range);\r\n\t };\r\n\t this.substractPoint = function(pos) {\r\n\t var removed = this.rangeList.substractPoint(pos);\r\n\t if (removed) {\r\n\t this.$onRemoveRange(removed);\r\n\t return removed[0];\r\n\t }\r\n\t };\r\n\t this.mergeOverlappingRanges = function() {\r\n\t var removed = this.rangeList.merge();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\t else if(this.ranges[0])\r\n\t this.fromOrientedRange(this.ranges[0]);\r\n\t };\r\n\r\n\t this.$onAddRange = function(range) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t this.ranges.unshift(range);\r\n\t this._signal(\"addRange\", {range: range});\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(removed) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t if (this.rangeCount == 1 && this.inMultiSelectMode) {\r\n\t var lastRange = this.rangeList.ranges.pop();\r\n\t removed.push(lastRange);\r\n\t this.rangeCount = 0;\r\n\t }\r\n\r\n\t for (var i = removed.length; i--; ) {\r\n\t var index = this.ranges.indexOf(removed[i]);\r\n\t this.ranges.splice(index, 1);\r\n\t }\r\n\r\n\t this._signal(\"removeRange\", {ranges: removed});\r\n\r\n\t if (this.rangeCount === 0 && this.inMultiSelectMode) {\r\n\t this.inMultiSelectMode = false;\r\n\t this._signal(\"singleSelect\");\r\n\t this.session.$undoSelect = true;\r\n\t this.rangeList.detach(this.session);\r\n\t }\r\n\r\n\t lastRange = lastRange || this.ranges[0];\r\n\t if (lastRange && !lastRange.isEqual(this.getRange()))\r\n\t this.fromOrientedRange(lastRange);\r\n\t };\r\n\t this.$initRangeList = function() {\r\n\t if (this.rangeList)\r\n\t return;\r\n\r\n\t this.rangeList = new RangeList();\r\n\t this.ranges = [];\r\n\t this.rangeCount = 0;\r\n\t };\r\n\t this.getAllRanges = function() {\r\n\t return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\r\n\t };\r\n\r\n\t this.splitIntoLines = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var range = this.getRange();\r\n\t var isBackwards = this.isBackwards();\r\n\t var startRow = range.start.row;\r\n\t var endRow = range.end.row;\r\n\t if (startRow == endRow) {\r\n\t if (isBackwards)\r\n\t var start = range.end, end = range.start;\r\n\t else\r\n\t var start = range.start, end = range.end;\r\n\t \r\n\t this.addRange(Range.fromPoints(end, end));\r\n\t this.addRange(Range.fromPoints(start, start));\r\n\t return;\r\n\t }\r\n\r\n\t var rectSel = [];\r\n\t var r = this.getLineRange(startRow, true);\r\n\t r.start.column = range.start.column;\r\n\t rectSel.push(r);\r\n\r\n\t for (var i = startRow + 1; i < endRow; i++)\r\n\t rectSel.push(this.getLineRange(i, true));\r\n\r\n\t r = this.getLineRange(endRow, true);\r\n\t r.end.column = range.end.column;\r\n\t rectSel.push(r);\r\n\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.toggleBlockSelection = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var cursor = this.session.documentToScreenPosition(this.selectionLead);\r\n\t var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\r\n\r\n\t var rectSel = this.rectangularRangeBlock(cursor, anchor);\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\r\n\t var rectSel = [];\r\n\r\n\t var xBackwards = screenCursor.column < screenAnchor.column;\r\n\t if (xBackwards) {\r\n\t var startColumn = screenCursor.column;\r\n\t var endColumn = screenAnchor.column;\r\n\t } else {\r\n\t var startColumn = screenAnchor.column;\r\n\t var endColumn = screenCursor.column;\r\n\t }\r\n\r\n\t var yBackwards = screenCursor.row < screenAnchor.row;\r\n\t if (yBackwards) {\r\n\t var startRow = screenCursor.row;\r\n\t var endRow = screenAnchor.row;\r\n\t } else {\r\n\t var startRow = screenAnchor.row;\r\n\t var endRow = screenCursor.row;\r\n\t }\r\n\r\n\t if (startColumn < 0)\r\n\t startColumn = 0;\r\n\t if (startRow < 0)\r\n\t startRow = 0;\r\n\r\n\t if (startRow == endRow)\r\n\t includeEmptyLines = true;\r\n\r\n\t for (var row = startRow; row <= endRow; row++) {\r\n\t var range = Range.fromPoints(\r\n\t this.session.screenToDocumentPosition(row, startColumn),\r\n\t this.session.screenToDocumentPosition(row, endColumn)\r\n\t );\r\n\t if (range.isEmpty()) {\r\n\t if (docEnd && isSamePoint(range.end, docEnd))\r\n\t break;\r\n\t var docEnd = range.end;\r\n\t }\r\n\t range.cursor = xBackwards ? range.start : range.end;\r\n\t rectSel.push(range);\r\n\t }\r\n\r\n\t if (yBackwards)\r\n\t rectSel.reverse();\r\n\r\n\t if (!includeEmptyLines) {\r\n\t var end = rectSel.length - 1;\r\n\t while (rectSel[end].isEmpty() && end > 0)\r\n\t end--;\r\n\t if (end > 0) {\r\n\t var start = 0;\r\n\t while (rectSel[start].isEmpty())\r\n\t start++;\r\n\t }\r\n\t for (var i = end; i >= start; i--) {\r\n\t if (rectSel[i].isEmpty())\r\n\t rectSel.splice(i, 1);\r\n\t }\r\n\t }\r\n\r\n\t return rectSel;\r\n\t };\r\n\t}).call(Selection.prototype);\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\t(function() {\r\n\t this.updateSelectionMarkers = function() {\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\t this.addSelectionMarker = function(orientedRange) {\r\n\t if (!orientedRange.cursor)\r\n\t orientedRange.cursor = orientedRange.end;\r\n\r\n\t var style = this.getSelectionStyle();\r\n\t orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\r\n\r\n\t this.session.$selectionMarkers.push(orientedRange);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t return orientedRange;\r\n\t };\r\n\t this.removeSelectionMarker = function(range) {\r\n\t if (!range.marker)\r\n\t return;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = this.session.$selectionMarkers.indexOf(range);\r\n\t if (index != -1)\r\n\t this.session.$selectionMarkers.splice(index, 1);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t };\r\n\r\n\t this.removeSelectionMarkers = function(ranges) {\r\n\t var markerList = this.session.$selectionMarkers;\r\n\t for (var i = ranges.length; i--; ) {\r\n\t var range = ranges[i];\r\n\t if (!range.marker)\r\n\t continue;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = markerList.indexOf(range);\r\n\t if (index != -1)\r\n\t markerList.splice(index, 1);\r\n\t }\r\n\t this.session.selectionMarkerCount = markerList.length;\r\n\t };\r\n\r\n\t this.$onAddRange = function(e) {\r\n\t this.addSelectionMarker(e.range);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(e) {\r\n\t this.removeSelectionMarkers(e.ranges);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onMultiSelect = function(e) {\r\n\t if (this.inMultiSelectMode)\r\n\t return;\r\n\t this.inMultiSelectMode = true;\r\n\r\n\t this.setStyle(\"ace_multiselect\");\r\n\t this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\r\n\t this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onSingleSelect = function(e) {\r\n\t if (this.session.multiSelect.inVirtualMode)\r\n\t return;\r\n\t this.inMultiSelectMode = false;\r\n\r\n\t this.unsetStyle(\"ace_multiselect\");\r\n\t this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\r\n\r\n\t this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t this._emit(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$onMultiSelectExec = function(e) {\r\n\t var command = e.command;\r\n\t var editor = e.editor;\r\n\t if (!editor.multiSelect)\r\n\t return;\r\n\t if (!command.multiSelectAction) {\r\n\t var result = command.exec(editor, e.args || {});\r\n\t editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\r\n\t editor.multiSelect.mergeOverlappingRanges();\r\n\t } else if (command.multiSelectAction == \"forEach\") {\r\n\t result = editor.forEachSelection(command, e.args);\r\n\t } else if (command.multiSelectAction == \"forEachLine\") {\r\n\t result = editor.forEachSelection(command, e.args, true);\r\n\t } else if (command.multiSelectAction == \"single\") {\r\n\t editor.exitMultiSelectMode();\r\n\t result = command.exec(editor, e.args || {});\r\n\t } else {\r\n\t result = command.multiSelectAction(editor, e.args || {});\r\n\t }\r\n\t return result;\r\n\t }; \r\n\t this.forEachSelection = function(cmd, args, options) {\r\n\t if (this.inVirtualSelectionMode)\r\n\t return;\r\n\t var keepOrder = options && options.keepOrder;\r\n\t var $byLines = options == true || options && options.$byLines\r\n\t var session = this.session;\r\n\t var selection = this.selection;\r\n\t var rangeList = selection.rangeList;\r\n\t var ranges = (keepOrder ? selection : rangeList).ranges;\r\n\t var result;\r\n\t \r\n\t if (!ranges.length)\r\n\t return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t \r\n\t var reg = selection._eventRegistry;\r\n\t selection._eventRegistry = {};\r\n\r\n\t var tmpSel = new Selection(session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t for (var i = ranges.length; i--;) {\r\n\t if ($byLines) {\r\n\t while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\r\n\t i--;\r\n\t }\r\n\t tmpSel.fromOrientedRange(ranges[i]);\r\n\t tmpSel.index = i;\r\n\t this.selection = session.selection = tmpSel;\r\n\t var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t if (!result && cmdResult !== undefined)\r\n\t result = cmdResult;\r\n\t tmpSel.toOrientedRange(ranges[i]);\r\n\t }\r\n\t tmpSel.detach();\r\n\r\n\t this.selection = session.selection = selection;\r\n\t this.inVirtualSelectionMode = false;\r\n\t selection._eventRegistry = reg;\r\n\t selection.mergeOverlappingRanges();\r\n\t \r\n\t var anim = this.renderer.$scrollAnimation;\r\n\t this.onCursorChange();\r\n\t this.onSelectionChange();\r\n\t if (anim && anim.from == anim.to)\r\n\t this.renderer.animateScrolling(anim.from);\r\n\t \r\n\t return result;\r\n\t };\r\n\t this.exitMultiSelectMode = function() {\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\r\n\t return;\r\n\t this.multiSelect.toSingleRange();\r\n\t };\r\n\r\n\t this.getSelectedText = function() {\r\n\t var text = \"\";\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var ranges = this.multiSelect.rangeList.ranges;\r\n\t var buf = [];\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t buf.push(this.session.getTextRange(ranges[i]));\r\n\t }\r\n\t var nl = this.session.getDocument().getNewLineCharacter();\r\n\t text = buf.join(nl);\r\n\t if (text.length == (buf.length - 1) * nl.length)\r\n\t text = \"\";\r\n\t } else if (!this.selection.isEmpty()) {\r\n\t text = this.session.getTextRange(this.getSelectionRange());\r\n\t }\r\n\t return text;\r\n\t };\r\n\t \r\n\t this.$checkMultiselectChange = function(e, anchor) {\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var range = this.multiSelect.ranges[0];\r\n\t if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\r\n\t return;\r\n\t var pos = anchor == this.multiSelect.anchor\r\n\t ? range.cursor == range.start ? range.end : range.start\r\n\t : range.cursor;\r\n\t if (pos.row != anchor.row \r\n\t || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\r\n\t this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\r\n\t }\r\n\t };\r\n\t this.findAll = function(needle, options, additive) {\r\n\t options = options || {};\r\n\t options.needle = needle || options.needle;\r\n\t if (options.needle == undefined) {\r\n\t var range = this.selection.isEmpty()\r\n\t ? this.selection.getWordRange()\r\n\t : this.selection.getRange();\r\n\t options.needle = this.session.getTextRange(range);\r\n\t } \r\n\t this.$search.set(options);\r\n\t \r\n\t var ranges = this.$search.findAll(this.session);\r\n\t if (!ranges.length)\r\n\t return 0;\r\n\r\n\t this.$blockScrolling += 1;\r\n\t var selection = this.multiSelect;\r\n\r\n\t if (!additive)\r\n\t selection.toSingleRange(ranges[0]);\r\n\r\n\t for (var i = ranges.length; i--; )\r\n\t selection.addRange(ranges[i], true);\r\n\t if (range && selection.rangeList.rangeAtPoint(range.start))\r\n\t selection.addRange(range, true);\r\n\t \r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return ranges.length;\r\n\t };\r\n\t this.selectMoreLines = function(dir, skip) {\r\n\t var range = this.selection.toOrientedRange();\r\n\t var isBackwards = range.cursor == range.end;\r\n\r\n\t var screenLead = this.session.documentToScreenPosition(range.cursor);\r\n\t if (this.selection.$desiredColumn)\r\n\t screenLead.column = this.selection.$desiredColumn;\r\n\r\n\t var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\r\n\r\n\t if (!range.isEmpty()) {\r\n\t var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\r\n\t var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\r\n\t } else {\r\n\t var anchor = lead;\r\n\t }\r\n\r\n\t if (isBackwards) {\r\n\t var newRange = Range.fromPoints(lead, anchor);\r\n\t newRange.cursor = newRange.start;\r\n\t } else {\r\n\t var newRange = Range.fromPoints(anchor, lead);\r\n\t newRange.cursor = newRange.end;\r\n\t }\r\n\r\n\t newRange.desiredColumn = screenLead.column;\r\n\t if (!this.selection.inMultiSelectMode) {\r\n\t this.selection.addRange(range);\r\n\t } else {\r\n\t if (skip)\r\n\t var toRemove = range.cursor;\r\n\t }\r\n\r\n\t this.selection.addRange(newRange);\r\n\t if (toRemove)\r\n\t this.selection.substractPoint(toRemove);\r\n\t };\r\n\t this.transposeSelections = function(dir) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var all = sel.ranges;\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t if (range.isEmpty()) {\r\n\t var tmp = session.getWordRange(range.start.row, range.start.column);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t range.end.row = tmp.end.row;\r\n\t range.end.column = tmp.end.column;\r\n\t }\r\n\t }\r\n\t sel.mergeOverlappingRanges();\r\n\r\n\t var words = [];\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t words.unshift(session.getTextRange(range));\r\n\t }\r\n\r\n\t if (dir < 0)\r\n\t words.unshift(words.pop());\r\n\t else\r\n\t words.push(words.shift());\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t var tmp = range.clone();\r\n\t session.replace(range, words[i]);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t }\r\n\t };\r\n\t this.selectMore = function(dir, skip, stopAtFirst) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\r\n\t var range = sel.toOrientedRange();\r\n\t if (range.isEmpty()) {\r\n\t range = session.getWordRange(range.start.row, range.start.column);\r\n\t range.cursor = dir == -1 ? range.start : range.end;\r\n\t this.multiSelect.addRange(range);\r\n\t if (stopAtFirst)\r\n\t return;\r\n\t }\r\n\t var needle = session.getTextRange(range);\r\n\r\n\t var newRange = find(session, needle, dir);\r\n\t if (newRange) {\r\n\t newRange.cursor = dir == -1 ? newRange.start : newRange.end;\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(newRange);\r\n\t this.multiSelect.addRange(newRange);\r\n\t this.$blockScrolling -= 1;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t }\r\n\t if (skip)\r\n\t this.multiSelect.substractPoint(range.cursor);\r\n\t };\r\n\t this.alignCursors = function() {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var ranges = sel.ranges;\r\n\t var row = -1;\r\n\t var sameRowRanges = ranges.filter(function(r) {\r\n\t if (r.cursor.row == row)\r\n\t return true;\r\n\t row = r.cursor.row;\r\n\t });\r\n\t \r\n\t if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\r\n\t var range = this.selection.getRange();\r\n\t var fr = range.start.row, lr = range.end.row;\r\n\t var guessRange = fr == lr;\r\n\t if (guessRange) {\r\n\t var max = this.session.getLength();\r\n\t var line;\r\n\t do {\r\n\t line = this.session.getLine(lr);\r\n\t } while (/[=:]/.test(line) && ++lr < max);\r\n\t do {\r\n\t line = this.session.getLine(fr);\r\n\t } while (/[=:]/.test(line) && --fr > 0);\r\n\t \r\n\t if (fr < 0) fr = 0;\r\n\t if (lr >= max) lr = max - 1;\r\n\t }\r\n\t var lines = this.session.removeFullLines(fr, lr);\r\n\t lines = this.$reAlignText(lines, guessRange);\r\n\t this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\r\n\t if (!guessRange) {\r\n\t range.start.column = 0;\r\n\t range.end.column = lines[lines.length - 1].length;\r\n\t }\r\n\t this.selection.setRange(range);\r\n\t } else {\r\n\t sameRowRanges.forEach(function(r) {\r\n\t sel.substractPoint(r.cursor);\r\n\t });\r\n\r\n\t var maxCol = 0;\r\n\t var minSpace = Infinity;\r\n\t var spaceOffsets = ranges.map(function(r) {\r\n\t var p = r.cursor;\r\n\t var line = session.getLine(p.row);\r\n\t var spaceOffset = line.substr(p.column).search(/\\S/g);\r\n\t if (spaceOffset == -1)\r\n\t spaceOffset = 0;\r\n\r\n\t if (p.column > maxCol)\r\n\t maxCol = p.column;\r\n\t if (spaceOffset < minSpace)\r\n\t minSpace = spaceOffset;\r\n\t return spaceOffset;\r\n\t });\r\n\t ranges.forEach(function(r, i) {\r\n\t var p = r.cursor;\r\n\t var l = maxCol - p.column;\r\n\t var d = spaceOffsets[i] - minSpace;\r\n\t if (l > d)\r\n\t session.insert(p, lang.stringRepeat(\" \", l - d));\r\n\t else\r\n\t session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\r\n\r\n\t r.start.column = r.end.column = maxCol;\r\n\t r.start.row = r.end.row = p.row;\r\n\t r.cursor = r.end;\r\n\t });\r\n\t sel.fromOrientedRange(ranges[0]);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t }\r\n\t };\r\n\r\n\t this.$reAlignText = function(lines, forceLeft) {\r\n\t var isLeftAligned = true, isRightAligned = true;\r\n\t var startW, textW, endW;\r\n\r\n\t return lines.map(function(line) {\r\n\t var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\r\n\t if (!m)\r\n\t return [line];\r\n\r\n\t if (startW == null) {\r\n\t startW = m[1].length;\r\n\t textW = m[2].length;\r\n\t endW = m[3].length;\r\n\t return m;\r\n\t }\r\n\r\n\t if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\r\n\t isRightAligned = false;\r\n\t if (startW != m[1].length)\r\n\t isLeftAligned = false;\r\n\r\n\t if (startW > m[1].length)\r\n\t startW = m[1].length;\r\n\t if (textW < m[2].length)\r\n\t textW = m[2].length;\r\n\t if (endW > m[3].length)\r\n\t endW = m[3].length;\r\n\r\n\t return m;\r\n\t }).map(forceLeft ? alignLeft :\r\n\t isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\r\n\r\n\t function spaces(n) {\r\n\t return lang.stringRepeat(\" \", n);\r\n\t }\r\n\r\n\t function alignLeft(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(textW - m[2].length + endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function alignRight(m) {\r\n\t return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\r\n\t + spaces(endW, \" \")\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function unAlign(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t };\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\texports.onSessionChange = function(e) {\r\n\t var session = e.session;\r\n\t if (session && !session.multiSelect) {\r\n\t session.$selectionMarkers = [];\r\n\t session.selection.$initRangeList();\r\n\t session.multiSelect = session.selection;\r\n\t }\r\n\t this.multiSelect = session && session.multiSelect;\r\n\r\n\t var oldSession = e.oldSession;\r\n\t if (oldSession) {\r\n\t oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\r\n\t oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\r\n\t oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\r\n\t oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\r\n\t oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\r\n\t oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session) {\r\n\t session.multiSelect.on(\"addRange\", this.$onAddRange);\r\n\t session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\r\n\t session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\r\n\t session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\r\n\t session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\r\n\t session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\r\n\t if (session.selection.inMultiSelectMode)\r\n\t this.$onMultiSelect();\r\n\t else\r\n\t this.$onSingleSelect();\r\n\t }\r\n\t};\r\n\tfunction MultiSelect(editor) {\r\n\t if (editor.$multiselectOnSessionChange)\r\n\t return;\r\n\t editor.$onAddRange = editor.$onAddRange.bind(editor);\r\n\t editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\r\n\t editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\r\n\t editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\r\n\t editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\r\n\t editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\r\n\r\n\t editor.$multiselectOnSessionChange(editor);\r\n\t editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\r\n\r\n\t editor.on(\"mousedown\", onMouseDown);\r\n\t editor.commands.addCommands(commands.defaultCommands);\r\n\r\n\t addAltCursorListeners(editor);\r\n\t}\r\n\r\n\tfunction addAltCursorListeners(editor){\r\n\t var el = editor.textInput.getElement();\r\n\t var altCursor = false;\r\n\t event.addListener(el, \"keydown\", function(e) {\r\n\t var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\r\n\t if (editor.$blockSelectEnabled && altDown) {\r\n\t if (!altCursor) {\r\n\t editor.renderer.setMouseCursor(\"crosshair\");\r\n\t altCursor = true;\r\n\t }\r\n\t } else if (altCursor) {\r\n\t reset();\r\n\t }\r\n\t });\r\n\r\n\t event.addListener(el, \"keyup\", reset);\r\n\t event.addListener(el, \"blur\", reset);\r\n\t function reset(e) {\r\n\t if (altCursor) {\r\n\t editor.renderer.setMouseCursor(\"\");\r\n\t altCursor = false;\r\n\t }\r\n\t }\r\n\t}\r\n\r\n\texports.MultiSelect = MultiSelect;\r\n\r\n\r\n\tacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\r\n\t enableMultiselect: {\r\n\t set: function(val) {\r\n\t MultiSelect(this);\r\n\t if (val) {\r\n\t this.on(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.on(\"mousedown\", onMouseDown);\r\n\t } else {\r\n\t this.off(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.off(\"mousedown\", onMouseDown);\r\n\t }\r\n\t },\r\n\t value: true\r\n\t },\r\n\t enableBlockSelect: {\r\n\t set: function(val) {\r\n\t this.$blockSelectEnabled = val;\r\n\t },\r\n\t value: true\r\n\t }\r\n\t});\r\n\r\n\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\r\n\tvar FoldMode = exports.FoldMode = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.foldingStartMarker = null;\r\n\t this.foldingStopMarker = null;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t if (this.foldingStartMarker.test(line))\r\n\t return \"start\";\r\n\t if (foldStyle == \"markbeginend\"\r\n\t && this.foldingStopMarker\r\n\t && this.foldingStopMarker.test(line))\r\n\t return \"end\";\r\n\t return \"\";\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.indentationBlock = function(session, row, column) {\r\n\t var re = /\\S/;\r\n\t var line = session.getLine(row);\r\n\t var startLevel = line.search(re);\r\n\t if (startLevel == -1)\r\n\t return;\r\n\r\n\t var startColumn = column || line.length;\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t var endRow = row;\r\n\r\n\t while (++row < maxRow) {\r\n\t var level = session.getLine(row).search(re);\r\n\r\n\t if (level == -1)\r\n\t continue;\r\n\r\n\t if (level <= startLevel)\r\n\t break;\r\n\r\n\t endRow = row;\r\n\t }\r\n\r\n\t if (endRow > startRow) {\r\n\t var endColumn = session.getLine(endRow).length;\r\n\t return new Range(startRow, startColumn, endRow, endColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var start = {row: row, column: column + 1};\r\n\t var end = session.$findClosingBracket(bracket, start, typeRe);\r\n\t if (!end)\r\n\t return;\r\n\r\n\t var fw = session.foldWidgets[end.row];\r\n\t if (fw == null)\r\n\t fw = session.getFoldWidget(end.row);\r\n\r\n\t if (fw == \"start\" && end.row > start.row) {\r\n\t end.row --;\r\n\t end.column = session.getLine(end.row).length;\r\n\t }\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\r\n\t this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var end = {row: row, column: column};\r\n\t var start = session.$findOpeningBracket(bracket, end);\r\n\r\n\t if (!start)\r\n\t return;\r\n\r\n\t start.column++;\r\n\t end.column--;\r\n\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-tm\";\r\n\texports.cssText = \".ace-tm .ace_gutter {\\\r\n\tbackground: #f0f0f0;\\\r\n\tcolor: #333;\\\r\n\t}\\\r\n\t.ace-tm .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8;\\\r\n\t}\\\r\n\t.ace-tm .ace_fold {\\\r\n\tbackground-color: #6B72E6;\\\r\n\t}\\\r\n\t.ace-tm {\\\r\n\tbackground-color: #FFFFFF;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_cursor {\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_invisible {\\\r\n\tcolor: rgb(191, 191, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_storage,\\\r\n\t.ace-tm .ace_keyword {\\\r\n\tcolor: blue;\\\r\n\t}\\\r\n\t.ace-tm .ace_constant {\\\r\n\tcolor: rgb(197, 6, 11);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_buildin {\\\r\n\tcolor: rgb(88, 72, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_language {\\\r\n\tcolor: rgb(88, 92, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_library {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_invalid {\\\r\n\tbackground-color: rgba(255, 0, 0, 0.1);\\\r\n\tcolor: red;\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_function {\\\r\n\tcolor: rgb(60, 76, 114);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_constant {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_type,\\\r\n\t.ace-tm .ace_support.ace_class {\\\r\n\tcolor: rgb(109, 121, 222);\\\r\n\t}\\\r\n\t.ace-tm .ace_keyword.ace_operator {\\\r\n\tcolor: rgb(104, 118, 135);\\\r\n\t}\\\r\n\t.ace-tm .ace_string {\\\r\n\tcolor: rgb(3, 106, 7);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment {\\\r\n\tcolor: rgb(76, 136, 107);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc {\\\r\n\tcolor: rgb(0, 102, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc.ace_tag {\\\r\n\tcolor: rgb(128, 159, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_numeric {\\\r\n\tcolor: rgb(0, 0, 205);\\\r\n\t}\\\r\n\t.ace-tm .ace_variable {\\\r\n\tcolor: rgb(49, 132, 149);\\\r\n\t}\\\r\n\t.ace-tm .ace_xml-pe {\\\r\n\tcolor: rgb(104, 104, 91);\\\r\n\t}\\\r\n\t.ace-tm .ace_entity.ace_name.ace_function {\\\r\n\tcolor: #0000A2;\\\r\n\t}\\\r\n\t.ace-tm .ace_heading {\\\r\n\tcolor: rgb(12, 7, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_list {\\\r\n\tcolor:rgb(185, 6, 144);\\\r\n\t}\\\r\n\t.ace-tm .ace_meta.ace_tag {\\\r\n\tcolor:rgb(0, 22, 142);\\\r\n\t}\\\r\n\t.ace-tm .ace_string.ace_regex {\\\r\n\tcolor: rgb(255, 0, 0)\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selection {\\\r\n\tbackground: rgb(181, 213, 255);\\\r\n\t}\\\r\n\t.ace-tm.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px white;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(252, 255, 0);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_stack {\\\r\n\tbackground: rgb(164, 229, 101);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid rgb(192, 192, 192);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_active-line {\\\r\n\tbackground: rgba(0, 0, 0, 0.07);\\\r\n\t}\\\r\n\t.ace-tm .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selected-word {\\\r\n\tbackground: rgb(250, 250, 255);\\\r\n\tborder: 1px solid rgb(200, 200, 250);\\\r\n\t}\\\r\n\t.ace-tm .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\r\n\t}\\\r\n\t\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\tace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\r\n\tfunction LineWidgets(session) {\r\n\t this.session = session;\r\n\t this.session.widgetManager = this;\r\n\t this.session.getRowLength = this.getRowLength;\r\n\t this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\r\n\t this.updateOnChange = this.updateOnChange.bind(this);\r\n\t this.renderWidgets = this.renderWidgets.bind(this);\r\n\t this.measureWidgets = this.measureWidgets.bind(this);\r\n\t this.session._changedWidgets = [];\r\n\t this.$onChangeEditor = this.$onChangeEditor.bind(this);\r\n\t \r\n\t this.session.on(\"change\", this.updateOnChange);\r\n\t this.session.on(\"changeFold\", this.updateOnFold);\r\n\t this.session.on(\"changeEditor\", this.$onChangeEditor);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.getRowLength = function(row) {\r\n\t var h;\r\n\t if (this.lineWidgets)\r\n\t h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0;\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\r\n\t this.$getWidgetScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t this.lineWidgets.forEach(function(w){\r\n\t if (w && w.rowCount && !w.hidden)\r\n\t screenRows += w.rowCount;\r\n\t });\r\n\t return screenRows;\r\n\t }; \r\n\t \r\n\t this.$onChangeEditor = function(e) {\r\n\t this.attach(e.editor);\r\n\t };\r\n\t \r\n\t this.attach = function(editor) {\r\n\t if (editor && editor.widgetManager && editor.widgetManager != this)\r\n\t editor.widgetManager.detach();\r\n\r\n\t if (this.editor == editor)\r\n\t return;\r\n\r\n\t this.detach();\r\n\t this.editor = editor;\r\n\t \r\n\t if (editor) {\r\n\t editor.widgetManager = this;\r\n\t editor.renderer.on(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.on(\"afterRender\", this.renderWidgets);\r\n\t }\r\n\t };\r\n\t this.detach = function(e) {\r\n\t var editor = this.editor;\r\n\t if (!editor)\r\n\t return;\r\n\t \r\n\t this.editor = null;\r\n\t editor.widgetManager = null;\r\n\t \r\n\t editor.renderer.off(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.off(\"afterRender\", this.renderWidgets);\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t lineWidgets && lineWidgets.forEach(function(w) {\r\n\t if (w && w.el && w.el.parentNode) {\r\n\t w._inDocument = false;\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t }\r\n\t });\r\n\t };\r\n\r\n\t this.updateOnFold = function(e, session) {\r\n\t var lineWidgets = session.lineWidgets;\r\n\t if (!lineWidgets || !e.action)\r\n\t return;\r\n\t var fold = e.data;\r\n\t var start = fold.start.row;\r\n\t var end = fold.end.row;\r\n\t var hide = e.action == \"add\";\r\n\t for (var i = start + 1; i < end; i++) {\r\n\t if (lineWidgets[i])\r\n\t lineWidgets[i].hidden = hide;\r\n\t }\r\n\t if (lineWidgets[end]) {\r\n\t if (hide) {\r\n\t if (!lineWidgets[start])\r\n\t lineWidgets[start] = lineWidgets[end];\r\n\t else\r\n\t lineWidgets[end].hidden = hide;\r\n\t } else {\r\n\t if (lineWidgets[start] == lineWidgets[end])\r\n\t lineWidgets[start] = undefined;\r\n\t lineWidgets[end].hidden = hide;\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.updateOnChange = function(delta) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t \r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t var removed = lineWidgets.splice(startRow + 1, len);\r\n\t removed.forEach(function(w) {\r\n\t w && this.removeLineWidget(w);\r\n\t }, this);\r\n\t this.$updateRows();\r\n\t } else {\r\n\t var args = new Array(len);\r\n\t args.unshift(startRow, 0);\r\n\t lineWidgets.splice.apply(lineWidgets, args);\r\n\t this.$updateRows();\r\n\t }\r\n\t };\r\n\t \r\n\t this.$updateRows = function() {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t var noWidgets = true;\r\n\t lineWidgets.forEach(function(w, i) {\r\n\t if (w) {\r\n\t noWidgets = false;\r\n\t w.row = i;\r\n\t while (w.$oldWidget) {\r\n\t w.$oldWidget.row = i;\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t }\r\n\t });\r\n\t if (noWidgets)\r\n\t this.session.lineWidgets = null;\r\n\t };\r\n\r\n\t this.addLineWidget = function(w) {\r\n\t if (!this.session.lineWidgets)\r\n\t this.session.lineWidgets = new Array(this.session.getLength());\r\n\t \r\n\t var old = this.session.lineWidgets[w.row];\r\n\t if (old) {\r\n\t w.$oldWidget = old;\r\n\t if (old.el && old.el.parentNode) {\r\n\t old.el.parentNode.removeChild(old.el);\r\n\t old._inDocument = false;\r\n\t }\r\n\t }\r\n\t \r\n\t this.session.lineWidgets[w.row] = w;\r\n\t \r\n\t w.session = this.session;\r\n\t \r\n\t var renderer = this.editor.renderer;\r\n\t if (w.html && !w.el) {\r\n\t w.el = dom.createElement(\"div\");\r\n\t w.el.innerHTML = w.html;\r\n\t }\r\n\t if (w.el) {\r\n\t dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\r\n\t w.el.style.position = \"absolute\";\r\n\t w.el.style.zIndex = 5;\r\n\t renderer.container.appendChild(w.el);\r\n\t w._inDocument = true;\r\n\t }\r\n\t \r\n\t if (!w.coverGutter) {\r\n\t w.el.style.zIndex = 3;\r\n\t }\r\n\t if (!w.pixelHeight) {\r\n\t w.pixelHeight = w.el.offsetHeight;\r\n\t }\r\n\t if (w.rowCount == null) {\r\n\t w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\r\n\t }\r\n\t \r\n\t var fold = this.session.getFoldAt(w.row, 0);\r\n\t w.$fold = fold;\r\n\t if (fold) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (w.row == fold.end.row && !lineWidgets[fold.start.row])\r\n\t lineWidgets[fold.start.row] = w;\r\n\t else\r\n\t w.hidden = true;\r\n\t }\r\n\t \r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t \r\n\t this.$updateRows();\r\n\t this.renderWidgets(null, renderer);\r\n\t this.onWidgetChanged(w);\r\n\t return w;\r\n\t };\r\n\t \r\n\t this.removeLineWidget = function(w) {\r\n\t w._inDocument = false;\r\n\t w.session = null;\r\n\t if (w.el && w.el.parentNode)\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t if (w.editor && w.editor.destroy) try {\r\n\t w.editor.destroy();\r\n\t } catch(e){}\r\n\t if (this.session.lineWidgets) {\r\n\t var w1 = this.session.lineWidgets[w.row]\r\n\t if (w1 == w) {\r\n\t this.session.lineWidgets[w.row] = w.$oldWidget;\r\n\t if (w.$oldWidget)\r\n\t this.onWidgetChanged(w.$oldWidget);\r\n\t } else {\r\n\t while (w1) {\r\n\t if (w1.$oldWidget == w) {\r\n\t w1.$oldWidget = w.$oldWidget;\r\n\t break;\r\n\t }\r\n\t w1 = w1.$oldWidget;\r\n\t }\r\n\t }\r\n\t }\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t this.$updateRows();\r\n\t };\r\n\t \r\n\t this.getWidgetsAtRow = function(row) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t var w = lineWidgets && lineWidgets[row];\r\n\t var list = [];\r\n\t while (w) {\r\n\t list.push(w);\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t return list;\r\n\t };\r\n\t \r\n\t this.onWidgetChanged = function(w) {\r\n\t this.session._changedWidgets.push(w);\r\n\t this.editor && this.editor.renderer.updateFull();\r\n\t };\r\n\t \r\n\t this.measureWidgets = function(e, renderer) {\r\n\t var changedWidgets = this.session._changedWidgets;\r\n\t var config = renderer.layerConfig;\r\n\t \r\n\t if (!changedWidgets || !changedWidgets.length) return;\r\n\t var min = Infinity;\r\n\t for (var i = 0; i < changedWidgets.length; i++) {\r\n\t var w = changedWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.session != this.session) continue;\r\n\t if (!w._inDocument) {\r\n\t if (this.session.lineWidgets[w.row] != w)\r\n\t continue;\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t \r\n\t w.h = w.el.offsetHeight;\r\n\t \r\n\t if (!w.fixedWidth) {\r\n\t w.w = w.el.offsetWidth;\r\n\t w.screenWidth = Math.ceil(w.w / config.characterWidth);\r\n\t }\r\n\t \r\n\t var rowCount = w.h / config.lineHeight;\r\n\t if (w.coverLine) {\r\n\t rowCount -= this.session.getRowLineCount(w.row);\r\n\t if (rowCount < 0)\r\n\t rowCount = 0;\r\n\t }\r\n\t if (w.rowCount != rowCount) {\r\n\t w.rowCount = rowCount;\r\n\t if (w.row < min)\r\n\t min = w.row;\r\n\t }\r\n\t }\r\n\t if (min != Infinity) {\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: min}}});\r\n\t this.session.lineWidgetWidth = null;\r\n\t }\r\n\t this.session._changedWidgets = [];\r\n\t };\r\n\t \r\n\t this.renderWidgets = function(e, renderer) {\r\n\t var config = renderer.layerConfig;\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets)\r\n\t return;\r\n\t var first = Math.min(this.firstRow, config.firstRow);\r\n\t var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\r\n\t \r\n\t while (first > 0 && !lineWidgets[first])\r\n\t first--;\r\n\t \r\n\t this.firstRow = config.firstRow;\r\n\t this.lastRow = config.lastRow;\r\n\r\n\t renderer.$cursorLayer.config = config;\r\n\t for (var i = first; i <= last; i++) {\r\n\t var w = lineWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.hidden) {\r\n\t w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\r\n\t continue;\r\n\t }\r\n\t if (!w._inDocument) {\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\r\n\t if (!w.coverLine)\r\n\t top += config.lineHeight * this.session.getRowLineCount(w.row);\r\n\t w.el.style.top = top - config.offset + \"px\";\r\n\t \r\n\t var left = w.coverGutter ? 0 : renderer.gutterWidth;\r\n\t if (!w.fixedWidth)\r\n\t left -= renderer.scrollLeft;\r\n\t w.el.style.left = left + \"px\";\r\n\t \r\n\t if (w.fullWidth && w.screenWidth) {\r\n\t w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\r\n\t }\r\n\t \r\n\t if (w.fixedWidth) {\r\n\t w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\r\n\t } else {\r\n\t w.el.style.right = \"\";\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t}).call(LineWidgets.prototype);\r\n\r\n\r\n\texports.LineWidgets = LineWidgets;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction binarySearch(array, needle, comparator) {\r\n\t var first = 0;\r\n\t var last = array.length - 1;\r\n\r\n\t while (first <= last) {\r\n\t var mid = (first + last) >> 1;\r\n\t var c = comparator(needle, array[mid]);\r\n\t if (c > 0)\r\n\t first = mid + 1;\r\n\t else if (c < 0)\r\n\t last = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\t return -(first + 1);\r\n\t}\r\n\r\n\tfunction findAnnotations(session, row, dir) {\r\n\t var annotations = session.getAnnotations().sort(Range.comparePoints);\r\n\t if (!annotations.length)\r\n\t return;\r\n\t \r\n\t var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\r\n\t if (i < 0)\r\n\t i = -i - 1;\r\n\t \r\n\t if (i >= annotations.length)\r\n\t i = dir > 0 ? 0 : annotations.length - 1;\r\n\t else if (i === 0 && dir < 0)\r\n\t i = annotations.length - 1;\r\n\t \r\n\t var annotation = annotations[i];\r\n\t if (!annotation || !dir)\r\n\t return;\r\n\r\n\t if (annotation.row === row) {\r\n\t do {\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row === row);\r\n\t if (!annotation)\r\n\t return annotations.slice();\r\n\t }\r\n\t \r\n\t \r\n\t var matched = [];\r\n\t row = annotation.row;\r\n\t do {\r\n\t matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row == row);\r\n\t return matched.length && matched;\r\n\t}\r\n\r\n\texports.showErrorMarker = function(editor, dir) {\r\n\t var session = editor.session;\r\n\t if (!session.widgetManager) {\r\n\t session.widgetManager = new LineWidgets(session);\r\n\t session.widgetManager.attach(editor);\r\n\t }\r\n\t \r\n\t var pos = editor.getCursorPosition();\r\n\t var row = pos.row;\r\n\t var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\r\n\t return w.type == \"errorMarker\";\r\n\t })[0];\r\n\t if (oldWidget) {\r\n\t oldWidget.destroy();\r\n\t } else {\r\n\t row -= dir;\r\n\t }\r\n\t var annotations = findAnnotations(session, row, dir);\r\n\t var gutterAnno;\r\n\t if (annotations) {\r\n\t var annotation = annotations[0];\r\n\t pos.column = (annotation.pos && typeof annotation.column != \"number\"\r\n\t ? annotation.pos.sc\r\n\t : annotation.column) || 0;\r\n\t pos.row = annotation.row;\r\n\t gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\r\n\t } else if (oldWidget) {\r\n\t return;\r\n\t } else {\r\n\t gutterAnno = {\r\n\t text: [\"Looks good!\"],\r\n\t className: \"ace_ok\"\r\n\t };\r\n\t }\r\n\t editor.session.unfold(pos.row);\r\n\t editor.selection.moveToPosition(pos);\r\n\t \r\n\t var w = {\r\n\t row: pos.row, \r\n\t fixedWidth: true,\r\n\t coverGutter: true,\r\n\t el: dom.createElement(\"div\"),\r\n\t type: \"errorMarker\"\r\n\t };\r\n\t var el = w.el.appendChild(dom.createElement(\"div\"));\r\n\t var arrow = w.el.appendChild(dom.createElement(\"div\"));\r\n\t arrow.className = \"error_widget_arrow \" + gutterAnno.className;\r\n\t \r\n\t var left = editor.renderer.$cursorLayer\r\n\t .getPixelPosition(pos).left;\r\n\t arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\r\n\t \r\n\t w.el.className = \"error_widget_wrapper\";\r\n\t el.className = \"error_widget \" + gutterAnno.className;\r\n\t el.innerHTML = gutterAnno.text.join(\"
\");\r\n\t \r\n\t el.appendChild(dom.createElement(\"div\"));\r\n\t \r\n\t var kb = function(_, hashId, keyString) {\r\n\t if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\r\n\t w.destroy();\r\n\t return {command: \"null\"};\r\n\t }\r\n\t };\r\n\t \r\n\t w.destroy = function() {\r\n\t if (editor.$mouseHandler.isMousePressed)\r\n\t return;\r\n\t editor.keyBinding.removeKeyboardHandler(kb);\r\n\t session.widgetManager.removeLineWidget(w);\r\n\t editor.off(\"changeSelection\", w.destroy);\r\n\t editor.off(\"changeSession\", w.destroy);\r\n\t editor.off(\"mouseup\", w.destroy);\r\n\t editor.off(\"change\", w.destroy);\r\n\t };\r\n\t \r\n\t editor.keyBinding.addKeyboardHandler(kb);\r\n\t editor.on(\"changeSelection\", w.destroy);\r\n\t editor.on(\"changeSession\", w.destroy);\r\n\t editor.on(\"mouseup\", w.destroy);\r\n\t editor.on(\"change\", w.destroy);\r\n\t \r\n\t editor.session.widgetManager.addLineWidget(w);\r\n\t \r\n\t w.el.onmousedown = editor.focus.bind(editor);\r\n\t \r\n\t editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\r\n\t};\r\n\r\n\r\n\tdom.importCssString(\"\\\r\n\t .error_widget_wrapper {\\\r\n\t background: inherit;\\\r\n\t color: inherit;\\\r\n\t border:none\\\r\n\t }\\\r\n\t .error_widget {\\\r\n\t border-top: solid 2px;\\\r\n\t border-bottom: solid 2px;\\\r\n\t margin: 5px 0;\\\r\n\t padding: 10px 40px;\\\r\n\t white-space: pre-wrap;\\\r\n\t }\\\r\n\t .error_widget.ace_error, .error_widget_arrow.ace_error{\\\r\n\t border-color: #ff5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\r\n\t border-color: #F1D817\\\r\n\t }\\\r\n\t .error_widget.ace_info, .error_widget_arrow.ace_info{\\\r\n\t border-color: #5a5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\r\n\t border-color: #5aaa5a\\\r\n\t }\\\r\n\t .error_widget_arrow {\\\r\n\t position: absolute;\\\r\n\t border: solid 5px;\\\r\n\t border-top-color: transparent!important;\\\r\n\t border-right-color: transparent!important;\\\r\n\t border-left-color: transparent!important;\\\r\n\t top: -5px;\\\r\n\t }\\\r\n\t\", \"\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar UndoManager = acequire(\"./undomanager\").UndoManager;\r\n\tvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\r\n\tacequire(\"./worker/worker_client\");\r\n\tacequire(\"./keyboard/hash_handler\");\r\n\tacequire(\"./placeholder\");\r\n\tacequire(\"./multi_select\");\r\n\tacequire(\"./mode/folding/fold_mode\");\r\n\tacequire(\"./theme/textmate\");\r\n\tacequire(\"./ext/error_marker\");\r\n\r\n\texports.config = acequire(\"./config\");\r\n\texports.acequire = acequire;\r\n\texports.edit = function(el) {\r\n\t if (typeof el == \"string\") {\r\n\t var _id = el;\r\n\t el = document.getElementById(_id);\r\n\t if (!el)\r\n\t throw new Error(\"ace.edit can't find div #\" + _id);\r\n\t }\r\n\r\n\t if (el && el.env && el.env.editor instanceof Editor)\r\n\t return el.env.editor;\r\n\r\n\t var value = \"\";\r\n\t if (el && /input|textarea/i.test(el.tagName)) {\r\n\t var oldNode = el;\r\n\t value = oldNode.value;\r\n\t el = dom.createElement(\"pre\");\r\n\t oldNode.parentNode.replaceChild(el, oldNode);\r\n\t } else if (el) {\r\n\t value = dom.getInnerText(el);\r\n\t el.innerHTML = \"\";\r\n\t }\r\n\r\n\t var doc = exports.createEditSession(value);\r\n\r\n\t var editor = new Editor(new Renderer(el));\r\n\t editor.setSession(doc);\r\n\r\n\t var env = {\r\n\t document: doc,\r\n\t editor: editor,\r\n\t onResize: editor.resize.bind(editor, null)\r\n\t };\r\n\t if (oldNode) env.textarea = oldNode;\r\n\t event.addListener(window, \"resize\", env.onResize);\r\n\t editor.on(\"destroy\", function() {\r\n\t event.removeListener(window, \"resize\", env.onResize);\r\n\t env.editor.container.env = null; // prevent memory leak on old ie\r\n\t });\r\n\t editor.container.env = editor.env = env;\r\n\t return editor;\r\n\t};\r\n\texports.createEditSession = function(text, mode) {\r\n\t var doc = new EditSession(text, mode);\r\n\t doc.setUndoManager(new UndoManager());\r\n\t return doc;\r\n\t}\r\n\texports.EditSession = EditSession;\r\n\texports.UndoManager = UndoManager;\r\n\texports.version = \"1.2.3\";\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ace\"], function(a) {\r\n\t a && a.config.init(true);\r\n\t if (!window.ace)\r\n\t window.ace = a;\r\n\t for (var key in a) if (a.hasOwnProperty(key))\r\n\t window.ace[key] = a[key];\r\n\t });\r\n\t })();\r\n\t \r\n\tmodule.exports = window.ace.acequire(\"ace/ace\");\r\n\r\n/***/ },\r\n/* 65 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\r\n\r\n/***/ },\r\n/* 66 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = get_blob()\r\n\r\n\tfunction get_blob() {\r\n\t if(global.Blob) {\r\n\t try {\r\n\t new Blob(['asdf'], {type: 'text/plain'})\r\n\t return Blob\r\n\t } catch(err) {}\r\n\t }\r\n\r\n\t var Builder = global.WebKitBlobBuilder ||\r\n\t global.MozBlobBuilder ||\r\n\t global.MSBlobBuilder\r\n\r\n\t return function(parts, bag) {\r\n\t var builder = new Builder\r\n\t , endings = bag.endings\r\n\t , type = bag.type\r\n\r\n\t if(endings) for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i], endings)\r\n\t } else for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i])\r\n\t }\r\n\r\n\t return type ? builder.getBlob(type) : builder.getBlob()\r\n\t }\r\n\t}\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 67 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\r\n\tvar JsonHighlightRules = function() {\r\n\t this.$rules = {\r\n\t \"start\" : [\r\n\t {\r\n\t token : \"variable\", // single line\r\n\t regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\r\n\t }, {\r\n\t token : \"string\", // single line\r\n\t regex : '\"',\r\n\t next : \"string\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // hex\r\n\t regex : \"0[xX][0-9a-fA-F]+\\\\b\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // float\r\n\t regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\r\n\t }, {\r\n\t token : \"constant.language.boolean\",\r\n\t regex : \"(?:true|false)\\\\b\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // single quoted strings are not allowed\r\n\t regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // comments are not allowed\r\n\t regex : \"\\\\/\\\\/.*$\"\r\n\t }, {\r\n\t token : \"paren.lparen\",\r\n\t regex : \"[[({]\"\r\n\t }, {\r\n\t token : \"paren.rparen\",\r\n\t regex : \"[\\\\])}]\"\r\n\t }, {\r\n\t token : \"text\",\r\n\t regex : \"\\\\s+\"\r\n\t }\r\n\t ],\r\n\t \"string\" : [\r\n\t {\r\n\t token : \"constant.language.escape\",\r\n\t regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '[^\"\\\\\\\\]+'\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '\"',\r\n\t next : \"start\"\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : \"\",\r\n\t next : \"start\"\r\n\t }\r\n\t ]\r\n\t };\r\n\t \r\n\t};\r\n\r\n\toop.inherits(JsonHighlightRules, TextHighlightRules);\r\n\r\n\texports.JsonHighlightRules = JsonHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar MatchingBraceOutdent = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.checkOutdent = function(line, input) {\r\n\t if (! /^\\s+$/.test(line))\r\n\t return false;\r\n\r\n\t return /^\\s*\\}/.test(input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(doc, row) {\r\n\t var line = doc.getLine(row);\r\n\t var match = line.match(/^(\\s*\\})/);\r\n\r\n\t if (!match) return 0;\r\n\r\n\t var column = match[1].length;\r\n\t var openBracePos = doc.findMatchingBracket({row: row, column: column});\r\n\r\n\t if (!openBracePos || openBracePos.row == row) return 0;\r\n\r\n\t var indent = this.$getIndent(doc.getLine(openBracePos.row));\r\n\t doc.replace(new Range(row, 0, row, column-1), indent);\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t}).call(MatchingBraceOutdent.prototype);\r\n\r\n\texports.MatchingBraceOutdent = MatchingBraceOutdent;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Behaviour = acequire(\"../behaviour\").Behaviour;\r\n\tvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\r\n\tvar lang = acequire(\"../../lib/lang\");\r\n\r\n\tvar SAFE_INSERT_IN_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\"];\r\n\tvar SAFE_INSERT_BEFORE_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\r\n\r\n\tvar context;\r\n\tvar contextCache = {};\r\n\tvar initContext = function(editor) {\r\n\t var id = -1;\r\n\t if (editor.multiSelect) {\r\n\t id = editor.selection.index;\r\n\t if (contextCache.rangeCount != editor.multiSelect.rangeCount)\r\n\t contextCache = {rangeCount: editor.multiSelect.rangeCount};\r\n\t }\r\n\t if (contextCache[id])\r\n\t return context = contextCache[id];\r\n\t context = contextCache[id] = {\r\n\t autoInsertedBrackets: 0,\r\n\t autoInsertedRow: -1,\r\n\t autoInsertedLineEnd: \"\",\r\n\t maybeInsertedBrackets: 0,\r\n\t maybeInsertedRow: -1,\r\n\t maybeInsertedLineStart: \"\",\r\n\t maybeInsertedLineEnd: \"\"\r\n\t };\r\n\t};\r\n\r\n\tvar getWrapped = function(selection, selected, opening, closing) {\r\n\t var rowDiff = selection.end.row - selection.start.row;\r\n\t return {\r\n\t text: opening + selected + closing,\r\n\t selection: [\r\n\t 0,\r\n\t selection.start.column + 1,\r\n\t rowDiff,\r\n\t selection.end.column + (rowDiff ? 0 : 1)\r\n\t ]\r\n\t };\r\n\t};\r\n\r\n\tvar CstyleBehaviour = function() {\r\n\t this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (text == '{') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '{', '}');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\r\n\t return {\r\n\t text: '{}',\r\n\t selection: [1, 1]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\r\n\t return {\r\n\t text: '{',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == '}') {\r\n\t initContext(editor);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == '}') {\r\n\t var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t initContext(editor);\r\n\t var closing = \"\";\r\n\t if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\r\n\t closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar === '}') {\r\n\t var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\r\n\t if (!openBracePos)\r\n\t return null;\r\n\t var next_indent = this.$getIndent(session.getLine(openBracePos.row));\r\n\t } else if (closing) {\r\n\t var next_indent = this.$getIndent(line);\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t return;\r\n\t }\r\n\t var indent = next_indent + session.getTabString();\r\n\r\n\t return {\r\n\t text: '\\n' + indent + '\\n' + next_indent + closing,\r\n\t selection: [1, indent.length, 1, indent.length]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '{') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.end.column, range.end.column + 1);\r\n\t if (rightChar == '}') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t } else {\r\n\t context.maybeInsertedBrackets--;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '(') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '(', ')');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \")\");\r\n\t return {\r\n\t text: '()',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ')') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ')') {\r\n\t var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '(') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ')') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '[') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '[', ']');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\r\n\t return {\r\n\t text: '[]',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ']') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ']') {\r\n\t var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '[') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ']') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '\"' || text == \"'\") {\r\n\t initContext(editor);\r\n\t var quote = text;\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, quote, quote);\r\n\t } else if (!selected) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var leftChar = line.substring(cursor.column-1, cursor.column);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t \r\n\t var token = session.getTokenAt(cursor.row, cursor.column);\r\n\t var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\r\n\t if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\r\n\t return null;\r\n\t \r\n\t var stringBefore = token && /string|escape/.test(token.type);\r\n\t var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\r\n\t \r\n\t var pair;\r\n\t if (rightChar == quote) {\r\n\t pair = stringBefore !== stringAfter;\r\n\t } else {\r\n\t if (stringBefore && !stringAfter)\r\n\t return null; // wrap string with different quote\r\n\t if (stringBefore && stringAfter)\r\n\t return null; // do not pair quotes inside strings\r\n\t var wordRe = session.$mode.tokenRe;\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordBefore = wordRe.test(leftChar);\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordAfter = wordRe.test(leftChar);\r\n\t if (isWordBefore || isWordAfter)\r\n\t return null; // before or after alphanumeric\r\n\t if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\r\n\t return null; // there is rightChar and it isn't closing\r\n\t pair = true;\r\n\t }\r\n\t return {\r\n\t text: pair ? quote + quote : \"\",\r\n\t selection: [1,1]\r\n\t };\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == selected) {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t};\r\n\r\n\t \r\n\tCstyleBehaviour.isSaneInsertion = function(editor, session) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\r\n\t var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\r\n\t if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\r\n\t return false;\r\n\t }\r\n\t iterator.stepForward();\r\n\t return iterator.getCurrentTokenRow() !== cursor.row ||\r\n\t this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\r\n\t};\r\n\r\n\tCstyleBehaviour.$matchTokenType = function(token, types) {\r\n\t return types.indexOf(token.type || token) > -1;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\r\n\t context.autoInsertedBrackets = 0;\r\n\t context.autoInsertedRow = cursor.row;\r\n\t context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\r\n\t context.autoInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isMaybeInsertedClosing(cursor, line))\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = cursor.row;\r\n\t context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\r\n\t context.maybeInsertedLineEnd = line.substr(cursor.column);\r\n\t context.maybeInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\r\n\t return context.autoInsertedBrackets > 0 &&\r\n\t cursor.row === context.autoInsertedRow &&\r\n\t bracket === context.autoInsertedLineEnd[0] &&\r\n\t line.substr(cursor.column) === context.autoInsertedLineEnd;\r\n\t};\r\n\r\n\tCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\r\n\t return context.maybeInsertedBrackets > 0 &&\r\n\t cursor.row === context.maybeInsertedRow &&\r\n\t line.substr(cursor.column) === context.maybeInsertedLineEnd &&\r\n\t line.substr(0, cursor.column) == context.maybeInsertedLineStart;\r\n\t};\r\n\r\n\tCstyleBehaviour.popAutoInsertedClosing = function() {\r\n\t context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\r\n\t context.autoInsertedBrackets--;\r\n\t};\r\n\r\n\tCstyleBehaviour.clearMaybeInsertedClosing = function() {\r\n\t if (context) {\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = -1;\r\n\t }\r\n\t};\r\n\r\n\r\n\r\n\toop.inherits(CstyleBehaviour, Behaviour);\r\n\r\n\texports.CstyleBehaviour = CstyleBehaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\tvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\r\n\r\n\tvar FoldMode = exports.FoldMode = function(commentRegex) {\r\n\t if (commentRegex) {\r\n\t this.foldingStartMarker = new RegExp(\r\n\t this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\r\n\t );\r\n\t this.foldingStopMarker = new RegExp(\r\n\t this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\r\n\t );\r\n\t }\r\n\t};\r\n\toop.inherits(FoldMode, BaseFoldMode);\r\n\r\n\t(function() {\r\n\t \r\n\t this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\r\n\t this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\r\n\t this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\r\n\t this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\r\n\t this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\r\n\t this._getFoldWidgetBase = this.getFoldWidget;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.singleLineBlockCommentRe.test(line)) {\r\n\t if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\r\n\t return \"\";\r\n\t }\r\n\t \r\n\t var fw = this._getFoldWidgetBase(session, foldStyle, row);\r\n\t \r\n\t if (!fw && this.startRegionRe.test(line))\r\n\t return \"start\"; // lineCommentRegionStart\r\n\t \r\n\t return fw;\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.startRegionRe.test(line))\r\n\t return this.getCommentRegionBlock(session, line, row);\r\n\t \r\n\t var match = line.match(this.foldingStartMarker);\r\n\t if (match) {\r\n\t var i = match.index;\r\n\r\n\t if (match[1])\r\n\t return this.openingBracketBlock(session, match[1], row, i);\r\n\t \r\n\t var range = session.getCommentFoldRange(row, i + match[0].length, 1);\r\n\t \r\n\t if (range && !range.isMultiLine()) {\r\n\t if (forceMultiline) {\r\n\t range = this.getSectionRange(session, row);\r\n\t } else if (foldStyle != \"all\")\r\n\t range = null;\r\n\t }\r\n\t \r\n\t return range;\r\n\t }\r\n\r\n\t if (foldStyle === \"markbegin\")\r\n\t return;\r\n\r\n\t var match = line.match(this.foldingStopMarker);\r\n\t if (match) {\r\n\t var i = match.index + match[0].length;\r\n\r\n\t if (match[1])\r\n\t return this.closingBracketBlock(session, match[1], row, i);\r\n\r\n\t return session.getCommentFoldRange(row, i, -1);\r\n\t }\r\n\t };\r\n\t \r\n\t this.getSectionRange = function(session, row) {\r\n\t var line = session.getLine(row);\r\n\t var startIndent = line.search(/\\S/);\r\n\t var startRow = row;\r\n\t var startColumn = line.length;\r\n\t row = row + 1;\r\n\t var endRow = row;\r\n\t var maxRow = session.getLength();\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent === -1)\r\n\t continue;\r\n\t if (startIndent > indent)\r\n\t break;\r\n\t var subRange = this.getFoldWidgetRange(session, \"all\", row);\r\n\t \r\n\t if (subRange) {\r\n\t if (subRange.start.row <= startRow) {\r\n\t break;\r\n\t } else if (subRange.isMultiLine()) {\r\n\t row = subRange.end.row;\r\n\t } else if (startIndent == indent) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t endRow = row;\r\n\t }\r\n\t \r\n\t return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\r\n\t };\r\n\t this.getCommentRegionBlock = function(session, line, row) {\r\n\t var startColumn = line.search(/\\s*$/);\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t \r\n\t var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\r\n\t var depth = 1;\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var m = re.exec(line);\r\n\t if (!m) continue;\r\n\t if (m[1]) depth--;\r\n\t else depth++;\r\n\r\n\t if (!depth) break;\r\n\t }\r\n\r\n\t var endRow = row;\r\n\t if (endRow > startRow) {\r\n\t return new Range(startRow, startColumn, endRow, line.length);\r\n\t }\r\n\t };\r\n\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextMode = acequire(\"./text\").Mode;\r\n\tvar HighlightRules = acequire(\"./json_highlight_rules\").JsonHighlightRules;\r\n\tvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\r\n\tvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\r\n\tvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\r\n\tvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = HighlightRules;\r\n\t this.$outdent = new MatchingBraceOutdent();\r\n\t this.$behaviour = new CstyleBehaviour();\r\n\t this.foldingRules = new CStyleFoldMode();\r\n\t};\r\n\toop.inherits(Mode, TextMode);\r\n\r\n\t(function() {\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t var indent = this.$getIndent(line);\r\n\r\n\t if (state == \"start\") {\r\n\t var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\r\n\t if (match) {\r\n\t indent += tab;\r\n\t }\r\n\t }\r\n\r\n\t return indent;\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return this.$outdent.checkOutdent(line, input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t this.$outdent.autoOutdent(doc, row);\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t var worker = new WorkerClient([\"ace\"], __webpack_require__(68), \"JsonWorker\");\r\n\t worker.attachToDocument(session.getDocument());\r\n\r\n\t worker.on(\"annotate\", function(e) {\r\n\t session.setAnnotations(e.data);\r\n\t });\r\n\r\n\t worker.on(\"terminate\", function() {\r\n\t session.clearAnnotations();\r\n\t });\r\n\r\n\t return worker;\r\n\t };\r\n\r\n\r\n\t this.$id = \"ace/mode/json\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\r\n/***/ },\r\n/* 68 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports.id = 'ace/mode/json_worker';\r\n\tmodule.exports.src = \"\\\"no use strict\\\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&\\\").replace(/\\\"/g,\\\""\\\").replace(/'/g,\\\"'\\\").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/json/json_parse\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){\\\"use strict\\\";var at,ch,text,value,escapee={'\\\"':'\\\"',\\\"\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"/\\\":\\\"/\\\",b:\\\"\\\\b\\\",f:\\\"\\\\f\\\",n:\\\"\\\\n\\\",r:\\\"\\\\r\\\",t:\\\"\\t\\\"},error=function(m){throw{name:\\\"SyntaxError\\\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\\\"Expected '\\\"+c+\\\"' instead of '\\\"+ch+\\\"'\\\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\\\"\\\";for(\\\"-\\\"===ch&&(string=\\\"-\\\",next(\\\"-\\\"));ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();if(\\\".\\\"===ch)for(string+=\\\".\\\";next()&&ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch;if(\\\"e\\\"===ch||\\\"E\\\"===ch)for(string+=ch,next(),(\\\"-\\\"===ch||\\\"+\\\"===ch)&&(string+=ch,next());ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\\\"Bad number\\\"),void 0):number},string=function(){var hex,i,uffff,string=\\\"\\\";if('\\\"'===ch)for(;next();){if('\\\"'===ch)return next(),string;if(\\\"\\\\\\\\\\\"===ch)if(next(),\\\"u\\\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\\\"string\\\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\\\"Bad string\\\")},white=function(){for(;ch&&\\\" \\\">=ch;)next()},word=function(){switch(ch){case\\\"t\\\":return next(\\\"t\\\"),next(\\\"r\\\"),next(\\\"u\\\"),next(\\\"e\\\"),!0;case\\\"f\\\":return next(\\\"f\\\"),next(\\\"a\\\"),next(\\\"l\\\"),next(\\\"s\\\"),next(\\\"e\\\"),!1;case\\\"n\\\":return next(\\\"n\\\"),next(\\\"u\\\"),next(\\\"l\\\"),next(\\\"l\\\"),null}error(\\\"Unexpected '\\\"+ch+\\\"'\\\")},array=function(){var array=[];if(\\\"[\\\"===ch){if(next(\\\"[\\\"),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;for(;ch;){if(array.push(value()),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;next(\\\",\\\"),white()}}error(\\\"Bad array\\\")},object=function(){var key,object={};if(\\\"{\\\"===ch){if(next(\\\"{\\\"),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;for(;ch;){if(key=string(),white(),next(\\\":\\\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \\\"'+key+'\\\"'),object[key]=value(),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;next(\\\",\\\"),white()}}error(\\\"Bad object\\\")};return value=function(){switch(white(),ch){case\\\"{\\\":return object();case\\\"[\\\":return array();case'\\\"':return string();case\\\"-\\\":return number();default:return ch>=\\\"0\\\"&&\\\"9\\\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\\\" \\\",result=value(),white(),ch&&error(\\\"Syntax error\\\"),\\\"function\\\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\\\"object\\\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\\\"\\\":result},\\\"\\\"):result}}),ace.define(\\\"ace/mode/json_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/json/json_parse\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,parse=acequire(\\\"./json/json_parse\\\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\\\"error\\\"})}this.sender.emit(\\\"annotate\\\",errors)}}.call(JsonWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r   ᠎              \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";\r\n\r\n/***/ },\r\n/* 69 */\r\n/***/ function(module, exports) {\r\n\r\n\tace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar searchboxCss = \"\\\r\n\t.ace_search {\\\r\n\tbackground-color: #ddd;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tborder-top: 0 none;\\\r\n\tmax-width: 325px;\\\r\n\toverflow: hidden;\\\r\n\tmargin: 0;\\\r\n\tpadding: 4px;\\\r\n\tpadding-right: 6px;\\\r\n\tpadding-bottom: 0;\\\r\n\tposition: absolute;\\\r\n\ttop: 0px;\\\r\n\tz-index: 99;\\\r\n\twhite-space: normal;\\\r\n\t}\\\r\n\t.ace_search.left {\\\r\n\tborder-left: 0 none;\\\r\n\tborder-radius: 0px 0px 5px 0px;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_search.right {\\\r\n\tborder-radius: 0px 0px 0px 5px;\\\r\n\tborder-right: 0 none;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_search_form, .ace_replace_form {\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tfloat: left;\\\r\n\tmargin-bottom: 4px;\\\r\n\toverflow: hidden;\\\r\n\t}\\\r\n\t.ace_search_form.ace_nomatch {\\\r\n\toutline: 1px solid red;\\\r\n\t}\\\r\n\t.ace_search_field {\\\r\n\tbackground-color: white;\\\r\n\tborder-right: 1px solid #cbcbcb;\\\r\n\tborder: 0 none;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\toutline: 0;\\\r\n\tpadding: 0 7px;\\\r\n\twidth: 214px;\\\r\n\tmargin: 0;\\\r\n\t}\\\r\n\t.ace_searchbtn,\\\r\n\t.ace_replacebtn {\\\r\n\tbackground: #fff;\\\r\n\tborder: 0 none;\\\r\n\tborder-left: 1px solid #dcdcdc;\\\r\n\tcursor: pointer;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\tmargin: 0;\\\r\n\tposition: relative;\\\r\n\t}\\\r\n\t.ace_searchbtn:last-child,\\\r\n\t.ace_replacebtn:last-child {\\\r\n\tborder-top-right-radius: 3px;\\\r\n\tborder-bottom-right-radius: 3px;\\\r\n\t}\\\r\n\t.ace_searchbtn:disabled {\\\r\n\tbackground: none;\\\r\n\tcursor: default;\\\r\n\t}\\\r\n\t.ace_searchbtn {\\\r\n\tbackground-position: 50% 50%;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\twidth: 27px;\\\r\n\t}\\\r\n\t.ace_searchbtn.prev {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn.next {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn_close {\\\r\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\r\n\tborder-radius: 50%;\\\r\n\tborder: 0 none;\\\r\n\tcolor: #656565;\\\r\n\tcursor: pointer;\\\r\n\tfloat: right;\\\r\n\tfont: 16px/16px Arial;\\\r\n\theight: 14px;\\\r\n\tmargin: 5px 1px 9px 5px;\\\r\n\tpadding: 0;\\\r\n\ttext-align: center;\\\r\n\twidth: 14px;\\\r\n\t}\\\r\n\t.ace_searchbtn_close:hover {\\\r\n\tbackground-color: #656565;\\\r\n\tbackground-position: 50% 100%;\\\r\n\tcolor: white;\\\r\n\t}\\\r\n\t.ace_replacebtn.prev {\\\r\n\twidth: 54px\\\r\n\t}\\\r\n\t.ace_replacebtn.next {\\\r\n\twidth: 27px\\\r\n\t}\\\r\n\t.ace_button {\\\r\n\tmargin-left: 2px;\\\r\n\tcursor: pointer;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\toverflow: hidden;\\\r\n\topacity: 0.7;\\\r\n\tborder: 1px solid rgba(100,100,100,0.23);\\\r\n\tpadding: 1px;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace_button:hover {\\\r\n\tbackground-color: #eee;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_button:active {\\\r\n\tbackground-color: #ddd;\\\r\n\t}\\\r\n\t.ace_button.checked {\\\r\n\tborder-color: #3399ff;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_search_options{\\\r\n\tmargin-bottom: 3px;\\\r\n\ttext-align: right;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\";\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\r\n\tdom.importCssString(searchboxCss, \"ace_searchbox\");\r\n\r\n\tvar html = ''.replace(/>\\s+/g, \">\");\r\n\r\n\tvar SearchBox = function(editor, range, showReplaceForm) {\r\n\t var div = dom.createElement(\"div\");\r\n\t div.innerHTML = html;\r\n\t this.element = div.firstChild;\r\n\r\n\t this.$init();\r\n\t this.setEditor(editor);\r\n\t};\r\n\r\n\t(function() {\r\n\t this.setEditor = function(editor) {\r\n\t editor.searchBox = this;\r\n\t editor.container.appendChild(this.element);\r\n\t this.editor = editor;\r\n\t };\r\n\r\n\t this.$initElements = function(sb) {\r\n\t this.searchBox = sb.querySelector(\".ace_search_form\");\r\n\t this.replaceBox = sb.querySelector(\".ace_replace_form\");\r\n\t this.searchOptions = sb.querySelector(\".ace_search_options\");\r\n\t this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\r\n\t this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\r\n\t this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\r\n\t this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\r\n\t this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\r\n\t };\r\n\t \r\n\t this.$init = function() {\r\n\t var sb = this.element;\r\n\t \r\n\t this.$initElements(sb);\r\n\t \r\n\t var _this = this;\r\n\t event.addListener(sb, \"mousedown\", function(e) {\r\n\t setTimeout(function(){\r\n\t _this.activeInput.focus();\r\n\t }, 0);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\t event.addListener(sb, \"click\", function(e) {\r\n\t var t = e.target || e.srcElement;\r\n\t var action = t.getAttribute(\"action\");\r\n\t if (action && _this[action])\r\n\t _this[action]();\r\n\t else if (_this.$searchBarKb.commands[action])\r\n\t _this.$searchBarKb.commands[action].exec(_this);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\r\n\t event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\r\n\t var keyString = keyUtil.keyCodeToString(keyCode);\r\n\t var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\r\n\t if (command && command.exec) {\r\n\t command.exec(_this);\r\n\t event.stopEvent(e);\r\n\t }\r\n\t });\r\n\r\n\t this.$onChange = lang.delayedCall(function() {\r\n\t _this.find(false, false);\r\n\t });\r\n\r\n\t event.addListener(this.searchInput, \"input\", function() {\r\n\t _this.$onChange.schedule(20);\r\n\t });\r\n\t event.addListener(this.searchInput, \"focus\", function() {\r\n\t _this.activeInput = _this.searchInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t event.addListener(this.replaceInput, \"focus\", function() {\r\n\t _this.activeInput = _this.replaceInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t };\r\n\t this.$closeSearchBarKb = new HashHandler([{\r\n\t bindKey: \"Esc\",\r\n\t name: \"closeSearchBar\",\r\n\t exec: function(editor) {\r\n\t editor.searchBox.hide();\r\n\t }\r\n\t }]);\r\n\t this.$searchBarKb = new HashHandler();\r\n\t this.$searchBarKb.bindKeys({\r\n\t \"Ctrl-f|Command-f\": function(sb) {\r\n\t var isReplace = sb.isReplace = !sb.isReplace;\r\n\t sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\t sb.searchInput.focus();\r\n\t },\r\n\t \"Ctrl-H|Command-Option-F\": function(sb) {\r\n\t sb.replaceBox.style.display = \"\";\r\n\t sb.replaceInput.focus();\r\n\t },\r\n\t \"Ctrl-G|Command-G\": function(sb) {\r\n\t sb.findNext();\r\n\t },\r\n\t \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\r\n\t sb.findPrev();\r\n\t },\r\n\t \"esc\": function(sb) {\r\n\t setTimeout(function() { sb.hide();});\r\n\t },\r\n\t \"Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findNext();\r\n\t },\r\n\t \"Shift-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findPrev();\r\n\t },\r\n\t \"Alt-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replaceAll();\r\n\t sb.findAll();\r\n\t },\r\n\t \"Tab\": function(sb) {\r\n\t (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\r\n\t }\r\n\t });\r\n\r\n\t this.$searchBarKb.addCommands([{\r\n\t name: \"toggleRegexpMode\",\r\n\t bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\r\n\t exec: function(sb) {\r\n\t sb.regExpOption.checked = !sb.regExpOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleCaseSensitive\",\r\n\t bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\r\n\t exec: function(sb) {\r\n\t sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleWholeWords\",\r\n\t bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\r\n\t exec: function(sb) {\r\n\t sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }]);\r\n\r\n\t this.$syncOptions = function() {\r\n\t dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\r\n\t dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\r\n\t dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\r\n\t this.find(false, false);\r\n\t };\r\n\r\n\t this.highlight = function(re) {\r\n\t this.editor.session.highlight(re || this.editor.$search.$options.re);\r\n\t this.editor.renderer.updateBackMarkers()\r\n\t };\r\n\t this.find = function(skipCurrent, backwards, preventScroll) {\r\n\t var range = this.editor.find(this.searchInput.value, {\r\n\t skipCurrent: skipCurrent,\r\n\t backwards: backwards,\r\n\t wrap: true,\r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked,\r\n\t preventScroll: preventScroll\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t };\r\n\t this.findNext = function() {\r\n\t this.find(true, false);\r\n\t };\r\n\t this.findPrev = function() {\r\n\t this.find(true, true);\r\n\t };\r\n\t this.findAll = function(){\r\n\t var range = this.editor.findAll(this.searchInput.value, { \r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t this.hide();\r\n\t };\r\n\t this.replace = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t }; \r\n\t this.replaceAndFindNext = function() {\r\n\t if (!this.editor.getReadOnly()) {\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t this.findNext()\r\n\t }\r\n\t };\r\n\t this.replaceAll = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replaceAll(this.replaceInput.value);\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t this.element.style.display = \"none\";\r\n\t this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\r\n\t this.editor.focus();\r\n\t };\r\n\t this.show = function(value, isReplace) {\r\n\t this.element.style.display = \"\";\r\n\t this.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\r\n\t this.isReplace = isReplace;\r\n\r\n\t if (value)\r\n\t this.searchInput.value = value;\r\n\t \r\n\t this.find(false, false, true);\r\n\t \r\n\t this.searchInput.focus();\r\n\t this.searchInput.select();\r\n\r\n\t this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\r\n\t };\r\n\r\n\t this.isFocused = function() {\r\n\t var el = document.activeElement;\r\n\t return el == this.searchInput || el == this.replaceInput;\r\n\t }\r\n\t}).call(SearchBox.prototype);\r\n\r\n\texports.SearchBox = SearchBox;\r\n\r\n\texports.Search = function(editor, isReplace) {\r\n\t var sb = editor.searchBox || new SearchBox(editor);\r\n\t sb.show(editor.session.getTextRange(), isReplace);\r\n\t};\r\n\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ext/searchbox\"], function() {});\r\n\t })();\r\n\t \r\n\r\n/***/ },\r\n/* 70 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t * \r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t * \r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\tace.define('ace/theme/jsoneditor', ['require', 'exports', 'module', 'ace/lib/dom'], function(acequire, exports, module) {\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-jsoneditor\";\r\n\texports.cssText = \".ace-jsoneditor .ace_gutter {\\\r\n\tbackground: #ebebeb;\\\r\n\tcolor: #333\\\r\n\t}\\\r\n\t\\\r\n\t.ace-jsoneditor.ace_editor {\\\r\n\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\\\r\n\tline-height: 1.3;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_scroller {\\\r\n\tbackground-color: #FFFFFF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_text-layer {\\\r\n\tcolor: gray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_variable {\\\r\n\tcolor: #1a1a1a\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_cursor {\\\r\n\tborder-left: 2px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left: 0px;\\\r\n\tborder-bottom: 1px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selection {\\\r\n\tbackground: lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px #FFFFFF;\\\r\n\tborder-radius: 2px\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(255, 255, 0)\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\\\r\n\tbackground: #FFFBD1\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\\r\n\tborder: 1px solid lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invisible {\\\r\n\tcolor: #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword,\\\r\n\t.ace-jsoneditor .ace_meta,\\\r\n\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\\r\n\tcolor: #AF956F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_operator {\\\r\n\tcolor: #484848\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\\r\n\tcolor: #96DC5F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_language {\\\r\n\tcolor: darkorange\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_numeric {\\\r\n\tcolor: red\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\\r\n\tcolor: #BF78CC\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invalid {\\\r\n\tcolor: #FFFFFF;\\\r\n\tbackground-color: #FF002A;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_fold {\\\r\n\tbackground-color: #AF956F;\\\r\n\tborder-color: #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_storage,\\\r\n\t.ace-jsoneditor .ace_support.ace_class,\\\r\n\t.ace-jsoneditor .ace_support.ace_function,\\\r\n\t.ace-jsoneditor .ace_support.ace_other,\\\r\n\t.ace-jsoneditor .ace_support.ace_type {\\\r\n\tcolor: #C52727\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_string {\\\r\n\tcolor: green\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_comment {\\\r\n\tcolor: #BCC8BA\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\\r\n\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\\r\n\tcolor: #606060\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_markup.ace_underline {\\\r\n\ttext-decoration: underline\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\r\n\t}\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\r\n/***/ }\r\n/******/ ])\r\n});\r\n;","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an element. Use the custom prop to remove this warning:\\n\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\" with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1$1.ready = true;\n this$1$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1$1.errorCbs.length) {\n this$1$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1$1.replace(to);\n } else {\n this$1$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1$1.apps.indexOf(app);\n if (index > -1) { this$1$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","/*!\n * Vue.js v2.7.15\n * (c) 2014-2023 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\nvar isArray = Array.isArray;\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef(v) {\n return v === undefined || v === null;\n}\nfunction isDef(v) {\n return v !== undefined && v !== null;\n}\nfunction isTrue(v) {\n return v === true;\n}\nfunction isFalse(v) {\n return v === false;\n}\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive(value) {\n return (typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean');\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Quick object check - this is primarily used to tell\n * objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\nfunction toRawType(value) {\n return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\nfunction isRegExp(v) {\n return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex(val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\nfunction isPromise(val) {\n return (isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function');\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString(val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val);\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber(val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap(str, expectsLowerCase) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };\n}\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\nfunction remove$2(arr, item) {\n var len = arr.length;\n if (len) {\n // fast path for the only / last item\n if (item === arr[len - 1]) {\n arr.length = len - 1;\n return;\n }\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1);\n }\n }\n}\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });\n});\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n/* istanbul ignore next */\nfunction polyfillBind(fn, ctx) {\n function boundFn(a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx);\n }\n boundFn._length = fn.length;\n return boundFn;\n}\nfunction nativeBind(fn, ctx) {\n return fn.bind(ctx);\n}\n// @ts-expect-error bind cannot be `undefined`\nvar bind = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray(list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret;\n}\n/**\n * Mix properties into target object.\n */\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject(arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n}\n/* eslint-disable no-unused-vars */\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop(a, b, c) { }\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n/* eslint-enable no-unused-vars */\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual(a, b) {\n if (a === b)\n return true;\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return (a.length === b.length &&\n a.every(function (e, i) {\n return looseEqual(e, b[i]);\n }));\n }\n else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return (keysA.length === keysB.length &&\n keysA.every(function (key) {\n return looseEqual(a[key], b[key]);\n }));\n }\n else {\n /* istanbul ignore next */\n return false;\n }\n }\n catch (e) {\n /* istanbul ignore next */\n return false;\n }\n }\n else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n }\n else {\n return false;\n }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf(arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val))\n return i;\n }\n return -1;\n}\n/**\n * Ensure a function is called only once.\n */\nfunction once(fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\nfunction hasChanged(x, y) {\n if (x === y) {\n return x === 0 && 1 / x !== 1 / y;\n }\n else {\n return x === x || y === y;\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch',\n 'renderTracked',\n 'renderTriggered'\n];\n\nvar config = {\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n /**\n * Whether to record perf\n */\n performance: false,\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n};\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved(str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5f;\n}\n/**\n * Define a property.\n */\nfunction def(obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\nfunction parsePath(path) {\n if (bailRE.test(path)) {\n return;\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj)\n return;\n obj = obj[segments[i]];\n }\n return obj;\n };\n}\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nUA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\nUA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n// Firefox has a \"watch\" function on Object.prototype...\n// @ts-expect-error firebox support\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', {\n get: function () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n }); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n }\n catch (e) { }\n}\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer =\n global['process'] && global['process'].env.VUE_ENV === 'server';\n }\n else {\n _isServer = false;\n }\n }\n return _isServer;\n};\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\nfunction isNative(Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\nvar hasSymbol = typeof Symbol !== 'undefined' &&\n isNative(Symbol) &&\n typeof Reflect !== 'undefined' &&\n isNative(Reflect.ownKeys);\nvar _Set; // $flow-disable-line\n/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n}\nelse {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /** @class */ (function () {\n function Set() {\n this.set = Object.create(null);\n }\n Set.prototype.has = function (key) {\n return this.set[key] === true;\n };\n Set.prototype.add = function (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function () {\n this.set = Object.create(null);\n };\n return Set;\n }());\n}\n\nvar currentInstance = null;\n/**\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\n * relies on it). Do not use this internally, just use `currentInstance`.\n *\n * @internal this function needs manual type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction getCurrentInstance() {\n return currentInstance && { proxy: currentInstance };\n}\n/**\n * @internal\n */\nfunction setCurrentInstance(vm) {\n if (vm === void 0) { vm = null; }\n if (!vm)\n currentInstance && currentInstance._scope.off();\n currentInstance = vm;\n vm && vm._scope.on();\n}\n\n/**\n * @internal\n */\nvar VNode = /** @class */ (function () {\n function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n }\n Object.defineProperty(VNode.prototype, \"child\", {\n // DEPRECATED: alias for componentInstance for backwards compat.\n /* istanbul ignore next */\n get: function () {\n return this.componentInstance;\n },\n enumerable: false,\n configurable: true\n });\n return VNode;\n}());\nvar createEmptyVNode = function (text) {\n if (text === void 0) { text = ''; }\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node;\n};\nfunction createTextVNode(val) {\n return new VNode(undefined, undefined, undefined, String(val));\n}\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode(vnode) {\n var cloned = new VNode(vnode.tag, vnode.data, \n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar uid$2 = 0;\nvar pendingCleanupDeps = [];\nvar cleanupDeps = function () {\n for (var i = 0; i < pendingCleanupDeps.length; i++) {\n var dep = pendingCleanupDeps[i];\n dep.subs = dep.subs.filter(function (s) { return s; });\n dep._pending = false;\n }\n pendingCleanupDeps.length = 0;\n};\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n * @internal\n */\nvar Dep = /** @class */ (function () {\n function Dep() {\n // pending subs cleanup\n this._pending = false;\n this.id = uid$2++;\n this.subs = [];\n }\n Dep.prototype.addSub = function (sub) {\n this.subs.push(sub);\n };\n Dep.prototype.removeSub = function (sub) {\n // #12696 deps with massive amount of subscribers are extremely slow to\n // clean up in Chromium\n // to workaround this, we unset the sub for now, and clear them on\n // next scheduler flush.\n this.subs[this.subs.indexOf(sub)] = null;\n if (!this._pending) {\n this._pending = true;\n pendingCleanupDeps.push(this);\n }\n };\n Dep.prototype.depend = function (info) {\n if (Dep.target) {\n Dep.target.addDep(this);\n if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {\n Dep.target.onTrack(__assign({ effect: Dep.target }, info));\n }\n }\n };\n Dep.prototype.notify = function (info) {\n // stabilize the subscriber list first\n var subs = this.subs.filter(function (s) { return s; });\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n var sub = subs[i];\n if (process.env.NODE_ENV !== 'production' && info) {\n sub.onTrigger &&\n sub.onTrigger(__assign({ effect: subs[i] }, info));\n }\n sub.update();\n }\n };\n return Dep;\n}());\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\nfunction pushTarget(target) {\n targetStack.push(target);\n Dep.target = target;\n}\nfunction popTarget() {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break;\n case 'splice':\n inserted = args.slice(2);\n break;\n }\n if (inserted)\n ob.observeArray(inserted);\n // notify change\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"array mutation\" /* TriggerOpTypes.ARRAY_MUTATION */,\n target: this,\n key: method\n });\n }\n else {\n ob.dep.notify();\n }\n return result;\n });\n});\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\nvar NO_INITIAL_VALUE = {};\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\nfunction toggleObserving(value) {\n shouldObserve = value;\n}\n// ssr mock dep\nvar mockDep = {\n notify: noop,\n depend: noop,\n addSub: noop,\n removeSub: noop\n};\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = /** @class */ (function () {\n function Observer(value, shallow, mock) {\n if (shallow === void 0) { shallow = false; }\n if (mock === void 0) { mock = false; }\n this.value = value;\n this.shallow = shallow;\n this.mock = mock;\n // this.value = value\n this.dep = mock ? mockDep : new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (isArray(value)) {\n if (!mock) {\n if (hasProto) {\n value.__proto__ = arrayMethods;\n /* eslint-enable no-proto */\n }\n else {\n for (var i = 0, l = arrayKeys.length; i < l; i++) {\n var key = arrayKeys[i];\n def(value, key, arrayMethods[key]);\n }\n }\n }\n if (!shallow) {\n this.observeArray(value);\n }\n }\n else {\n /**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\n var keys = Object.keys(value);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock);\n }\n }\n }\n /**\n * Observe a list of Array items.\n */\n Observer.prototype.observeArray = function (value) {\n for (var i = 0, l = value.length; i < l; i++) {\n observe(value[i], false, this.mock);\n }\n };\n return Observer;\n}());\n// helpers\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe(value, shallow, ssrMockReactivity) {\n if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n return value.__ob__;\n }\n if (shouldObserve &&\n (ssrMockReactivity || !isServerRendering()) &&\n (isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value.__v_skip /* ReactiveFlags.SKIP */ &&\n !isRef(value) &&\n !(value instanceof VNode)) {\n return new Observer(value, shallow, ssrMockReactivity);\n }\n}\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive(obj, key, val, customSetter, shallow, mock) {\n var dep = new Dep();\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return;\n }\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) &&\n (val === NO_INITIAL_VALUE || arguments.length === 2)) {\n val = obj[key];\n }\n var childOb = !shallow && observe(val, false, mock);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter() {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n if (process.env.NODE_ENV !== 'production') {\n dep.depend({\n target: obj,\n type: \"get\" /* TrackOpTypes.GET */,\n key: key\n });\n }\n else {\n dep.depend();\n }\n if (childOb) {\n childOb.dep.depend();\n if (isArray(value)) {\n dependArray(value);\n }\n }\n }\n return isRef(value) && !shallow ? value.value : value;\n },\n set: function reactiveSetter(newVal) {\n var value = getter ? getter.call(obj) : val;\n if (!hasChanged(value, newVal)) {\n return;\n }\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n if (setter) {\n setter.call(obj, newVal);\n }\n else if (getter) {\n // #7981: for accessor properties without setter\n return;\n }\n else if (!shallow && isRef(value) && !isRef(newVal)) {\n value.value = newVal;\n return;\n }\n else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal, false, mock);\n if (process.env.NODE_ENV !== 'production') {\n dep.notify({\n type: \"set\" /* TriggerOpTypes.SET */,\n target: obj,\n key: key,\n newValue: newVal,\n oldValue: value\n });\n }\n else {\n dep.notify();\n }\n }\n });\n return dep;\n}\nfunction set(target, key, val) {\n if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n warn(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\n }\n if (isReadonly(target)) {\n process.env.NODE_ENV !== 'production' && warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n return;\n }\n var ob = target.__ob__;\n if (isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n // when mocking for SSR, array methods are not hijacked\n if (ob && !ob.shallow && ob.mock) {\n observe(val, false, true);\n }\n return val;\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val;\n }\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' &&\n warn('Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.');\n return val;\n }\n if (!ob) {\n target[key] = val;\n return val;\n }\n defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"add\" /* TriggerOpTypes.ADD */,\n target: target,\n key: key,\n newValue: val,\n oldValue: undefined\n });\n }\n else {\n ob.dep.notify();\n }\n return val;\n}\nfunction del(target, key) {\n if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n warn(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\n }\n if (isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return;\n }\n var ob = target.__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' &&\n warn('Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.');\n return;\n }\n if (isReadonly(target)) {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Delete operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n return;\n }\n if (!hasOwn(target, key)) {\n return;\n }\n delete target[key];\n if (!ob) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"delete\" /* TriggerOpTypes.DELETE */,\n target: target,\n key: key\n });\n }\n else {\n ob.dep.notify();\n }\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray(value) {\n for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n e = value[i];\n if (e && e.__ob__) {\n e.__ob__.dep.depend();\n }\n if (isArray(e)) {\n dependArray(e);\n }\n }\n}\n\nfunction reactive(target) {\n makeReactive(target, false);\n return target;\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n makeReactive(target, true);\n def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n return target;\n}\nfunction makeReactive(target, shallow) {\n // if trying to observe a readonly proxy, return the readonly version.\n if (!isReadonly(target)) {\n if (process.env.NODE_ENV !== 'production') {\n if (isArray(target)) {\n warn(\"Avoid using Array as root value for \".concat(shallow ? \"shallowReactive()\" : \"reactive()\", \" as it cannot be tracked in watch() or watchEffect(). Use \").concat(shallow ? \"shallowRef()\" : \"ref()\", \" instead. This is a Vue-2-only limitation.\"));\n }\n var existingOb = target && target.__ob__;\n if (existingOb && existingOb.shallow !== shallow) {\n warn(\"Target is already a \".concat(existingOb.shallow ? \"\" : \"non-\", \"shallow reactive object, and cannot be converted to \").concat(shallow ? \"\" : \"non-\", \"shallow.\"));\n }\n }\n var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\n if (process.env.NODE_ENV !== 'production' && !ob) {\n if (target == null || isPrimitive(target)) {\n warn(\"value cannot be made reactive: \".concat(String(target)));\n }\n if (isCollectionType(target)) {\n warn(\"Vue 2 does not support reactive collection types such as Map or Set.\");\n }\n }\n }\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n }\n return !!(value && value.__ob__);\n}\nfunction isShallow(value) {\n return !!(value && value.__v_isShallow);\n}\nfunction isReadonly(value) {\n return !!(value && value.__v_isReadonly);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n // non-extensible objects won't be observed anyway\n if (Object.isExtensible(value)) {\n def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n }\n return value;\n}\n/**\n * @internal\n */\nfunction isCollectionType(value) {\n var type = toRawType(value);\n return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');\n}\n\n/**\n * @internal\n */\nvar RefFlag = \"__v_isRef\";\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref$1(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n var ref = {};\n def(ref, RefFlag, true);\n def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\n def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\n return ref;\n}\nfunction triggerRef(ref) {\n if (process.env.NODE_ENV !== 'production' && !ref.dep) {\n warn(\"received object is not a triggerable ref.\");\n }\n if (process.env.NODE_ENV !== 'production') {\n ref.dep &&\n ref.dep.notify({\n type: \"set\" /* TriggerOpTypes.SET */,\n target: ref,\n key: 'value'\n });\n }\n else {\n ref.dep && ref.dep.notify();\n }\n}\nfunction unref(ref) {\n return isRef(ref) ? ref.value : ref;\n}\nfunction proxyRefs(objectWithRefs) {\n if (isReactive(objectWithRefs)) {\n return objectWithRefs;\n }\n var proxy = {};\n var keys = Object.keys(objectWithRefs);\n for (var i = 0; i < keys.length; i++) {\n proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\n }\n return proxy;\n}\nfunction proxyWithRefUnwrap(target, source, key) {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n get: function () {\n var val = source[key];\n if (isRef(val)) {\n return val.value;\n }\n else {\n var ob = val && val.__ob__;\n if (ob)\n ob.dep.depend();\n return val;\n }\n },\n set: function (value) {\n var oldValue = source[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n }\n else {\n source[key] = value;\n }\n }\n });\n}\nfunction customRef(factory) {\n var dep = new Dep();\n var _a = factory(function () {\n if (process.env.NODE_ENV !== 'production') {\n dep.depend({\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n else {\n dep.depend();\n }\n }, function () {\n if (process.env.NODE_ENV !== 'production') {\n dep.notify({\n target: ref,\n type: \"set\" /* TriggerOpTypes.SET */,\n key: 'value'\n });\n }\n else {\n dep.notify();\n }\n }), get = _a.get, set = _a.set;\n var ref = {\n get value() {\n return get();\n },\n set value(newVal) {\n set(newVal);\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\nfunction toRefs(object) {\n if (process.env.NODE_ENV !== 'production' && !isReactive(object)) {\n warn(\"toRefs() expects a reactive object but received a plain one.\");\n }\n var ret = isArray(object) ? new Array(object.length) : {};\n for (var key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n}\nfunction toRef(object, key, defaultValue) {\n var val = object[key];\n if (isRef(val)) {\n return val;\n }\n var ref = {\n get value() {\n var val = object[key];\n return val === undefined ? defaultValue : val;\n },\n set value(newVal) {\n object[key] = newVal;\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\n\nvar rawToReadonlyFlag = \"__v_rawToReadonly\";\nvar rawToShallowReadonlyFlag = \"__v_rawToShallowReadonly\";\nfunction readonly(target) {\n return createReadonly(target, false);\n}\nfunction createReadonly(target, shallow) {\n if (!isPlainObject(target)) {\n if (process.env.NODE_ENV !== 'production') {\n if (isArray(target)) {\n warn(\"Vue 2 does not support readonly arrays.\");\n }\n else if (isCollectionType(target)) {\n warn(\"Vue 2 does not support readonly collection types such as Map or Set.\");\n }\n else {\n warn(\"value cannot be made readonly: \".concat(typeof target));\n }\n }\n return target;\n }\n if (process.env.NODE_ENV !== 'production' && !Object.isExtensible(target)) {\n warn(\"Vue 2 does not support creating readonly proxy for non-extensible object.\");\n }\n // already a readonly object\n if (isReadonly(target)) {\n return target;\n }\n // already has a readonly proxy\n var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;\n var existingProxy = target[existingFlag];\n if (existingProxy) {\n return existingProxy;\n }\n var proxy = Object.create(Object.getPrototypeOf(target));\n def(target, existingFlag, proxy);\n def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\n def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\n if (isRef(target)) {\n def(proxy, RefFlag, true);\n }\n if (shallow || isShallow(target)) {\n def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n }\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n defineReadonlyProperty(proxy, target, keys[i], shallow);\n }\n return proxy;\n}\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\n Object.defineProperty(proxy, key, {\n enumerable: true,\n configurable: true,\n get: function () {\n var val = target[key];\n return shallow || !isPlainObject(val) ? val : readonly(val);\n },\n set: function () {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n }\n });\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n return createReadonly(target, true);\n}\n\nfunction computed(getterOrOptions, debugOptions) {\n var getter;\n var setter;\n var onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = process.env.NODE_ENV !== 'production'\n ? function () {\n warn('Write operation failed: computed value is readonly');\n }\n : noop;\n }\n else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n var watcher = isServerRendering()\n ? null\n : new Watcher(currentInstance, getter, noop, { lazy: true });\n if (process.env.NODE_ENV !== 'production' && watcher && debugOptions) {\n watcher.onTrack = debugOptions.onTrack;\n watcher.onTrigger = debugOptions.onTrigger;\n }\n var ref = {\n // some libs rely on the presence effect for checking computed refs\n // from normal refs, but the implementation doesn't matter\n effect: watcher,\n get value() {\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {\n Dep.target.onTrack({\n effect: Dep.target,\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n watcher.depend();\n }\n return watcher.value;\n }\n else {\n return getter();\n }\n },\n set value(newVal) {\n setter(newVal);\n }\n };\n def(ref, RefFlag, true);\n def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\n return ref;\n}\n\nvar WATCHER = \"watcher\";\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\n// Simple effect.\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n ? __assign(__assign({}, options), { flush: 'post' }) : { flush: 'post' }));\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n ? __assign(__assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));\n}\n// initial value for watchers to trigger on undefined initial values\nvar INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n if (process.env.NODE_ENV !== 'production' && typeof cb !== 'function') {\n warn(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\n \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\n \"supports `watch(source, cb, options?) signature.\");\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, _a) {\n var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;\n if (process.env.NODE_ENV !== 'production' && !cb) {\n if (immediate !== undefined) {\n warn(\"watch() \\\"immediate\\\" option is only respected when using the \" +\n \"watch(source, callback, options?) signature.\");\n }\n if (deep !== undefined) {\n warn(\"watch() \\\"deep\\\" option is only respected when using the \" +\n \"watch(source, callback, options?) signature.\");\n }\n }\n var warnInvalidSource = function (s) {\n warn(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") +\n \"function, a ref, a reactive object, or an array of these types.\");\n };\n var instance = currentInstance;\n var call = function (fn, type, args) {\n if (args === void 0) { args = null; }\n return invokeWithErrorHandling(fn, null, args, instance, type);\n };\n var getter;\n var forceTrigger = false;\n var isMultiSource = false;\n if (isRef(source)) {\n getter = function () { return source.value; };\n forceTrigger = isShallow(source);\n }\n else if (isReactive(source)) {\n getter = function () {\n source.__ob__.dep.depend();\n return source;\n };\n deep = true;\n }\n else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });\n getter = function () {\n return source.map(function (s) {\n if (isRef(s)) {\n return s.value;\n }\n else if (isReactive(s)) {\n return traverse(s);\n }\n else if (isFunction(s)) {\n return call(s, WATCHER_GETTER);\n }\n else {\n process.env.NODE_ENV !== 'production' && warnInvalidSource(s);\n }\n });\n };\n }\n else if (isFunction(source)) {\n if (cb) {\n // getter with cb\n getter = function () { return call(source, WATCHER_GETTER); };\n }\n else {\n // no cb -> simple effect\n getter = function () {\n if (instance && instance._isDestroyed) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return call(source, WATCHER, [onCleanup]);\n };\n }\n }\n else {\n getter = noop;\n process.env.NODE_ENV !== 'production' && warnInvalidSource(source);\n }\n if (cb && deep) {\n var baseGetter_1 = getter;\n getter = function () { return traverse(baseGetter_1()); };\n }\n var cleanup;\n var onCleanup = function (fn) {\n cleanup = watcher.onStop = function () {\n call(fn, WATCHER_CLEANUP);\n };\n };\n // in SSR there is no need to setup an actual effect, and it should be noop\n // unless it's eager\n if (isServerRendering()) {\n // we will also not call the invalidate callback (+ runner is not set up)\n onCleanup = noop;\n if (!cb) {\n getter();\n }\n else if (immediate) {\n call(cb, WATCHER_CB, [\n getter(),\n isMultiSource ? [] : undefined,\n onCleanup\n ]);\n }\n return noop;\n }\n var watcher = new Watcher(currentInstance, getter, noop, {\n lazy: true\n });\n watcher.noRecurse = !cb;\n var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\n // overwrite default run\n watcher.run = function () {\n if (!watcher.active) {\n return;\n }\n if (cb) {\n // watch(source, cb)\n var newValue = watcher.get();\n if (deep ||\n forceTrigger ||\n (isMultiSource\n ? newValue.some(function (v, i) {\n return hasChanged(v, oldValue[i]);\n })\n : hasChanged(newValue, oldValue))) {\n // cleanup before running cb again\n if (cleanup) {\n cleanup();\n }\n call(cb, WATCHER_CB, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n }\n else {\n // watchEffect\n watcher.get();\n }\n };\n if (flush === 'sync') {\n watcher.update = watcher.run;\n }\n else if (flush === 'post') {\n watcher.post = true;\n watcher.update = function () { return queueWatcher(watcher); };\n }\n else {\n // pre\n watcher.update = function () {\n if (instance && instance === currentInstance && !instance._isMounted) {\n // pre-watcher triggered before\n var buffer = instance._preWatchers || (instance._preWatchers = []);\n if (buffer.indexOf(watcher) < 0)\n buffer.push(watcher);\n }\n else {\n queueWatcher(watcher);\n }\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n watcher.onTrack = onTrack;\n watcher.onTrigger = onTrigger;\n }\n // initial run\n if (cb) {\n if (immediate) {\n watcher.run();\n }\n else {\n oldValue = watcher.get();\n }\n }\n else if (flush === 'post' && instance) {\n instance.$once('hook:mounted', function () { return watcher.get(); });\n }\n else {\n watcher.get();\n }\n return function () {\n watcher.teardown();\n };\n}\n\nvar activeEffectScope;\nvar EffectScope = /** @class */ (function () {\n function EffectScope(detached) {\n if (detached === void 0) { detached = false; }\n this.detached = detached;\n /**\n * @internal\n */\n this.active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index =\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n }\n }\n EffectScope.prototype.run = function (fn) {\n if (this.active) {\n var currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n }\n finally {\n activeEffectScope = currentEffectScope;\n }\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"cannot run an inactive effect scope.\");\n }\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.on = function () {\n activeEffectScope = this;\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.off = function () {\n activeEffectScope = this.parent;\n };\n EffectScope.prototype.stop = function (fromParent) {\n if (this.active) {\n var i = void 0, l = void 0;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].teardown();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n // nested scope, dereference from parent to avoid memory leaks\n if (!this.detached && this.parent && !fromParent) {\n // optimized O(1) removal\n var last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = undefined;\n this.active = false;\n }\n };\n return EffectScope;\n}());\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\n/**\n * @internal\n */\nfunction recordEffectScope(effect, scope) {\n if (scope === void 0) { scope = activeEffectScope; }\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"onScopeDispose() is called when there is no active effect scope\" +\n \" to be associated with.\");\n }\n}\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\"provide() can only be used inside setup().\");\n }\n }\n else {\n // TS doesn't allow symbol as index type\n resolveProvided(currentInstance)[key] = value;\n }\n}\nfunction resolveProvided(vm) {\n // by default an instance inherits its parent's provides object\n // but when it needs to provide values of its own, it creates its\n // own provides object using parent provides object as prototype.\n // this way in `inject` we can simply look up injections from direct\n // parent and let the prototype chain do the work.\n var existing = vm._provided;\n var parentProvides = vm.$parent && vm.$parent._provided;\n if (parentProvides === existing) {\n return (vm._provided = Object.create(parentProvides));\n }\n else {\n return existing;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\n if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\n // fallback to `currentRenderingInstance` so that this can be called in\n // a functional component\n var instance = currentInstance;\n if (instance) {\n // #2400\n // to support `app.use` plugins,\n // fallback to appContext's `provides` if the instance is at root\n var provides = instance.$parent && instance.$parent._provided;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n }\n else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue)\n ? defaultValue.call(instance)\n : defaultValue;\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"injection \\\"\".concat(String(key), \"\\\" not found.\"));\n }\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"inject() can only be used inside setup() or functional components.\");\n }\n}\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once,\n capture: capture,\n passive: passive\n };\n});\nfunction createFnInvoker(fns, vm) {\n function invoker() {\n var fns = invoker.fns;\n if (isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\n }\n }\n else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n }\n }\n invoker.fns = fns;\n return invoker;\n}\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\n var name, cur, old, event;\n for (name in on) {\n cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Invalid handler for event \\\"\".concat(event.name, \"\\\": got \") + String(cur), vm);\n }\n else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n }\n else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove(event.name, oldOn[name], event.capture);\n }\n }\n}\n\nfunction mergeVNodeHook(def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n function wrappedHook() {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove$2(invoker.fns, wrappedHook);\n }\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n }\n else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n }\n else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return;\n }\n var res = {};\n var attrs = data.attrs, props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {\n tip(\"Prop \\\"\".concat(keyInLowerCase, \"\\\" is passed to component \") +\n \"\".concat(formatComponentName(\n // @ts-expect-error tag is string\n tag || Ctor), \", but the declared prop name is\") +\n \" \\\"\".concat(key, \"\\\". \") +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\".concat(altKey, \"\\\" instead of \\\"\").concat(key, \"\\\".\"));\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res;\n}\nfunction checkProp(res, hash, key, altKey, preserve) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true;\n }\n else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true;\n }\n }\n return false;\n}\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren(children) {\n for (var i = 0; i < children.length; i++) {\n if (isArray(children[i])) {\n return Array.prototype.concat.apply([], children);\n }\n }\n return children;\n}\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g.